1 #ifndef __IP_HTABLE_H__ 2 #define __IP_HTABLE_H__ 3 4 #include "netinet/ip_lookup.h" 5 6 typedef struct iphtent_s { 7 struct iphtent_s *ipe_next, **ipe_pnext; 8 struct iphtent_s *ipe_hnext, **ipe_phnext; 9 void *ipe_ptr; 10 i6addr_t ipe_addr; 11 i6addr_t ipe_mask; 12 int ipe_ref; 13 int ipe_unit; 14 union { 15 char ipeu_char[16]; 16 u_long ipeu_long; 17 u_int ipeu_int; 18 }ipe_un; 19 } iphtent_t; 20 21 #define ipe_value ipe_un.ipeu_int 22 #define ipe_group ipe_un.ipeu_char 23 24 #define IPE_HASH_FN(a, m, s) (((a) * (m)) % (s)) 25 26 27 typedef struct iphtable_s { 28 ipfrwlock_t iph_rwlock; 29 struct iphtable_s *iph_next, **iph_pnext; 30 struct iphtent_s **iph_table; 31 struct iphtent_s *iph_list; 32 size_t iph_size; /* size of hash table */ 33 u_long iph_seed; /* hashing seed */ 34 u_32_t iph_flags; 35 u_int iph_unit; /* IPL_LOG* */ 36 u_int iph_ref; 37 u_int iph_type; /* lookup or group map - IPHASH_* */ 38 u_int iph_masks; /* IPv4 netmasks in use */ 39 char iph_name[FR_GROUPLEN]; /* hash table number */ 40 } iphtable_t; 41 42 /* iph_type */ 43 #define IPHASH_LOOKUP 0 44 #define IPHASH_GROUPMAP 1 45 #define IPHASH_DELETE 2 46 #define IPHASH_ANON 0x80000000 47 48 49 typedef struct iphtstat_s { 50 iphtable_t *iphs_tables; 51 u_long iphs_numtables; 52 u_long iphs_numnodes; 53 u_long iphs_nomem; 54 u_long iphs_pad[16]; 55 } iphtstat_t; 56 57 58 extern iphtable_t *ipf_htables[IPL_LOGSIZE]; 59 60 extern iphtable_t *fr_existshtable __P((int, char *)); 61 extern int fr_clearhtable __P((iphtable_t *)); 62 extern void fr_htable_unload __P((void)); 63 extern int fr_newhtable __P((iplookupop_t *)); 64 extern iphtable_t *fr_findhtable __P((int, char *)); 65 extern int fr_removehtable __P((int, char *)); 66 extern size_t fr_flushhtable __P((iplookupflush_t *)); 67 extern int fr_addhtent __P((iphtable_t *, iphtent_t *)); 68 extern int fr_delhtent __P((iphtable_t *, iphtent_t *)); 69 extern int fr_derefhtable __P((iphtable_t *)); 70 extern int fr_derefhtent __P((iphtent_t *)); 71 extern int fr_delhtable __P((iphtable_t *)); 72 extern void *fr_iphmfindgroup __P((void *, void *)); 73 extern int fr_iphmfindip __P((void *, int, void *)); 74 extern int fr_gethtablestat __P((iplookupop_t *)); 75 extern int fr_htable_getnext __P((ipftoken_t *, ipflookupiter_t *)); 76 extern void fr_htable_iterderef __P((u_int, int, void *)); 77 78 #endif /* __IP_HTABLE_H__ */ 79