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; 9255332Scy struct iphtent_s *ipe_dnext, **ipe_pdnext; 10255332Scy struct iphtable_s *ipe_owner; 11145516Sdarrenr void *ipe_ptr; 12145516Sdarrenr i6addr_t ipe_addr; 13145516Sdarrenr i6addr_t ipe_mask; 14255332Scy U_QUAD_T ipe_hits; 15255332Scy U_QUAD_T ipe_bytes; 16255332Scy u_long ipe_die; 17255332Scy int ipe_uid; 18145516Sdarrenr int ipe_ref; 19170263Sdarrenr int ipe_unit; 20255332Scy char ipe_family; 21255332Scy char ipe_xxx[3]; 22145516Sdarrenr union { 23145516Sdarrenr char ipeu_char[16]; 24145516Sdarrenr u_long ipeu_long; 25145516Sdarrenr u_int ipeu_int; 26255332Scy } ipe_un; 27145516Sdarrenr} iphtent_t; 28145516Sdarrenr 29145516Sdarrenr#define ipe_value ipe_un.ipeu_int 30145516Sdarrenr#define ipe_group ipe_un.ipeu_char 31145516Sdarrenr 32255332Scy#define IPE_V4_HASH_FN(a, m, s) ((((m) ^ (a)) - 1 - ((a) >> 8)) % (s)) 33255332Scy#define IPE_V6_HASH_FN(a, m, s) (((((m)[0] ^ (a)[0]) - ((a)[0] >> 8)) + \ 34255332Scy (((m)[1] & (a)[1]) - ((a)[1] >> 8)) + \ 35255332Scy (((m)[2] & (a)[2]) - ((a)[2] >> 8)) + \ 36255332Scy (((m)[3] & (a)[3]) - ((a)[3] >> 8))) % (s)) 37145516Sdarrenr 38145516Sdarrenrtypedef struct iphtable_s { 39145516Sdarrenr ipfrwlock_t iph_rwlock; 40145516Sdarrenr struct iphtable_s *iph_next, **iph_pnext; 41145516Sdarrenr struct iphtent_s **iph_table; 42170263Sdarrenr struct iphtent_s *iph_list; 43255332Scy struct iphtent_s **iph_tail; 44255332Scy#ifdef USE_INET6 45255332Scy ipf_v6_masktab_t iph_v6_masks; 46255332Scy#endif 47255332Scy ipf_v4_masktab_t iph_v4_masks; 48145516Sdarrenr size_t iph_size; /* size of hash table */ 49145516Sdarrenr u_long iph_seed; /* hashing seed */ 50145516Sdarrenr u_32_t iph_flags; 51145516Sdarrenr u_int iph_unit; /* IPL_LOG* */ 52145516Sdarrenr u_int iph_ref; 53145516Sdarrenr u_int iph_type; /* lookup or group map - IPHASH_* */ 54255332Scy u_int iph_maskset[4]; /* netmasks in use */ 55145516Sdarrenr char iph_name[FR_GROUPLEN]; /* hash table number */ 56145516Sdarrenr} iphtable_t; 57145516Sdarrenr 58145516Sdarrenr/* iph_type */ 59145516Sdarrenr#define IPHASH_LOOKUP 0 60145516Sdarrenr#define IPHASH_GROUPMAP 1 61170263Sdarrenr#define IPHASH_DELETE 2 62145516Sdarrenr#define IPHASH_ANON 0x80000000 63145516Sdarrenr 64145516Sdarrenr 65145516Sdarrenrtypedef struct iphtstat_s { 66145516Sdarrenr iphtable_t *iphs_tables; 67145516Sdarrenr u_long iphs_numtables; 68145516Sdarrenr u_long iphs_numnodes; 69145516Sdarrenr u_long iphs_nomem; 70145516Sdarrenr u_long iphs_pad[16]; 71145516Sdarrenr} iphtstat_t; 72145516Sdarrenr 73145516Sdarrenr 74255332Scyextern void *ipf_iphmfindgroup __P((ipf_main_softc_t *, void *, void *)); 75255332Scyextern iphtable_t *ipf_htable_find __P((void *, int, char *)); 76255332Scyextern ipf_lookup_t ipf_htable_backend; 77255332Scy#ifndef _KERNEL 78255332Scyextern void ipf_htable_dump __P((ipf_main_softc_t *, void *)); 79255332Scy#endif 80145516Sdarrenr 81145516Sdarrenr#endif /* __IP_HTABLE_H__ */ 82