1*76404edcSAsim Jamshed #ifndef __FHASH_H_ 2*76404edcSAsim Jamshed #define __FHASH_H_ 3*76404edcSAsim Jamshed 4*76404edcSAsim Jamshed #include <sys/queue.h> 5*76404edcSAsim Jamshed #include "tcp_stream.h" 6*76404edcSAsim Jamshed 7*76404edcSAsim Jamshed #define NUM_BINS (131072) /* 132 K entries per thread*/ 8*76404edcSAsim Jamshed #define TCP_AR_CNT (3) 9*76404edcSAsim Jamshed 10*76404edcSAsim Jamshed #define STATIC_TABLE FALSE 11*76404edcSAsim Jamshed #define INVALID_HASH (NUM_BINS + 1) 12*76404edcSAsim Jamshed 13*76404edcSAsim Jamshed typedef struct hash_bucket_head { 14*76404edcSAsim Jamshed tcp_stream *tqh_first; 15*76404edcSAsim Jamshed tcp_stream **tqh_last; 16*76404edcSAsim Jamshed } hash_bucket_head; 17*76404edcSAsim Jamshed 18*76404edcSAsim Jamshed /* hashtable structure */ 19*76404edcSAsim Jamshed struct hashtable { 20*76404edcSAsim Jamshed uint8_t ht_count ; // count for # entry 21*76404edcSAsim Jamshed 22*76404edcSAsim Jamshed #if STATIC_TABLE 23*76404edcSAsim Jamshed tcp_stream* ht_array[NUM_BINS][TCP_AR_CNT]; 24*76404edcSAsim Jamshed #endif 25*76404edcSAsim Jamshed hash_bucket_head ht_table[NUM_BINS]; 26*76404edcSAsim Jamshed }; 27*76404edcSAsim Jamshed 28*76404edcSAsim Jamshed /*functions for hashtable*/ 29*76404edcSAsim Jamshed struct hashtable *CreateHashtable(void); 30*76404edcSAsim Jamshed void DestroyHashtable(struct hashtable *ht); 31*76404edcSAsim Jamshed 32*76404edcSAsim Jamshed 33*76404edcSAsim Jamshed int HTInsert(struct hashtable *ht, tcp_stream *, unsigned int *hash); 34*76404edcSAsim Jamshed void* HTRemove(struct hashtable *ht, tcp_stream *); 35*76404edcSAsim Jamshed tcp_stream* HTSearch(struct hashtable *ht, const tcp_stream *, unsigned int *hash); 36*76404edcSAsim Jamshed 37*76404edcSAsim Jamshed #endif /* __FHASH_H_ */ 38