1145516Sdarrenr#ifndef __IP_HTABLE_H__ 2145516Sdarrenr#define __IP_HTABLE_H__ 3145516Sdarrenr 4145516Sdarrenr#include "netinet/ip_lookup.h" 5145516Sdarrenr 6145516Sdarrenrtypedef struct iphtent_s { 7145516Sdarrenr struct iphtent_s *ipe_next, **ipe_pnext; 8170263Sdarrenr struct iphtent_s *ipe_hnext, **ipe_phnext; 9145516Sdarrenr void *ipe_ptr; 10145516Sdarrenr i6addr_t ipe_addr; 11145516Sdarrenr i6addr_t ipe_mask; 12145516Sdarrenr int ipe_ref; 13170263Sdarrenr int ipe_unit; 14145516Sdarrenr union { 15145516Sdarrenr char ipeu_char[16]; 16145516Sdarrenr u_long ipeu_long; 17145516Sdarrenr u_int ipeu_int; 18145516Sdarrenr }ipe_un; 19145516Sdarrenr} iphtent_t; 20145516Sdarrenr 21145516Sdarrenr#define ipe_value ipe_un.ipeu_int 22145516Sdarrenr#define ipe_group ipe_un.ipeu_char 23145516Sdarrenr 24145516Sdarrenr#define IPE_HASH_FN(a, m, s) (((a) * (m)) % (s)) 25145516Sdarrenr 26145516Sdarrenr 27145516Sdarrenrtypedef struct iphtable_s { 28145516Sdarrenr ipfrwlock_t iph_rwlock; 29145516Sdarrenr struct iphtable_s *iph_next, **iph_pnext; 30145516Sdarrenr struct iphtent_s **iph_table; 31170263Sdarrenr struct iphtent_s *iph_list; 32145516Sdarrenr size_t iph_size; /* size of hash table */ 33145516Sdarrenr u_long iph_seed; /* hashing seed */ 34145516Sdarrenr u_32_t iph_flags; 35145516Sdarrenr u_int iph_unit; /* IPL_LOG* */ 36145516Sdarrenr u_int iph_ref; 37145516Sdarrenr u_int iph_type; /* lookup or group map - IPHASH_* */ 38145516Sdarrenr u_int iph_masks; /* IPv4 netmasks in use */ 39145516Sdarrenr char iph_name[FR_GROUPLEN]; /* hash table number */ 40145516Sdarrenr} iphtable_t; 41145516Sdarrenr 42145516Sdarrenr/* iph_type */ 43145516Sdarrenr#define IPHASH_LOOKUP 0 44145516Sdarrenr#define IPHASH_GROUPMAP 1 45170263Sdarrenr#define IPHASH_DELETE 2 46145516Sdarrenr#define IPHASH_ANON 0x80000000 47145516Sdarrenr 48145516Sdarrenr 49145516Sdarrenrtypedef struct iphtstat_s { 50145516Sdarrenr iphtable_t *iphs_tables; 51145516Sdarrenr u_long iphs_numtables; 52145516Sdarrenr u_long iphs_numnodes; 53145516Sdarrenr u_long iphs_nomem; 54145516Sdarrenr u_long iphs_pad[16]; 55145516Sdarrenr} iphtstat_t; 56145516Sdarrenr 57145516Sdarrenr 58145516Sdarrenrextern iphtable_t *ipf_htables[IPL_LOGSIZE]; 59145516Sdarrenr 60170263Sdarrenrextern iphtable_t *fr_existshtable __P((int, char *)); 61170263Sdarrenrextern int fr_clearhtable __P((iphtable_t *)); 62145516Sdarrenrextern void fr_htable_unload __P((void)); 63145516Sdarrenrextern int fr_newhtable __P((iplookupop_t *)); 64145516Sdarrenrextern iphtable_t *fr_findhtable __P((int, char *)); 65170263Sdarrenrextern int fr_removehtable __P((int, char *)); 66145516Sdarrenrextern size_t fr_flushhtable __P((iplookupflush_t *)); 67145516Sdarrenrextern int fr_addhtent __P((iphtable_t *, iphtent_t *)); 68145516Sdarrenrextern int fr_delhtent __P((iphtable_t *, iphtent_t *)); 69170263Sdarrenrextern int fr_derefhtable __P((iphtable_t *)); 70170263Sdarrenrextern int fr_derefhtent __P((iphtent_t *)); 71170263Sdarrenrextern int fr_delhtable __P((iphtable_t *)); 72145516Sdarrenrextern void *fr_iphmfindgroup __P((void *, void *)); 73145516Sdarrenrextern int fr_iphmfindip __P((void *, int, void *)); 74145516Sdarrenrextern int fr_gethtablestat __P((iplookupop_t *)); 75170263Sdarrenrextern int fr_htable_getnext __P((ipftoken_t *, ipflookupiter_t *)); 76170263Sdarrenrextern void fr_htable_iterderef __P((u_int, int, void *)); 77145516Sdarrenr 78145516Sdarrenr#endif /* __IP_HTABLE_H__ */ 79