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