1 | /* $NetBSD: ip_htable.h,v 1.3 2012/07/22 14:27:51 darrenr Exp $ */ |
2 | |
3 | #ifndef __IP_HTABLE_H__ |
4 | #define __IP_HTABLE_H__ |
5 | |
6 | #include "netinet/ip_lookup.h" |
7 | |
8 | typedef struct iphtent_s { |
9 | struct iphtent_s *ipe_next, **ipe_pnext; |
10 | struct iphtent_s *ipe_hnext, **ipe_phnext; |
11 | struct iphtent_s *ipe_dnext, **ipe_pdnext; |
12 | struct iphtable_s *ipe_owner; |
13 | void *ipe_ptr; |
14 | i6addr_t ipe_addr; |
15 | i6addr_t ipe_mask; |
16 | U_QUAD_T ipe_hits; |
17 | U_QUAD_T ipe_bytes; |
18 | u_long ipe_die; |
19 | int ipe_uid; |
20 | int ipe_ref; |
21 | int ipe_unit; |
22 | char ipe_family; |
23 | char ipe_xxx[3]; |
24 | union { |
25 | char ipeu_char[16]; |
26 | u_long ipeu_long; |
27 | u_int ipeu_int; |
28 | } ipe_un; |
29 | } iphtent_t; |
30 | |
31 | #define ipe_value ipe_un.ipeu_int |
32 | #define ipe_group ipe_un.ipeu_char |
33 | |
34 | #define IPE_V4_HASH_FN(a, m, s) ((((m) ^ (a)) - 1 - ((a) >> 8)) % (s)) |
35 | #define IPE_V6_HASH_FN(a, m, s) (((((m)[0] ^ (a)[0]) - ((a)[0] >> 8)) + \ |
36 | (((m)[1] & (a)[1]) - ((a)[1] >> 8)) + \ |
37 | (((m)[2] & (a)[2]) - ((a)[2] >> 8)) + \ |
38 | (((m)[3] & (a)[3]) - ((a)[3] >> 8))) % (s)) |
39 | |
40 | typedef struct iphtable_s { |
41 | ipfrwlock_t iph_rwlock; |
42 | struct iphtable_s *iph_next, **iph_pnext; |
43 | struct iphtent_s **iph_table; |
44 | struct iphtent_s *iph_list; |
45 | struct iphtent_s **iph_tail; |
46 | #ifdef USE_INET6 |
47 | ipf_v6_masktab_t iph_v6_masks; |
48 | #endif |
49 | ipf_v4_masktab_t iph_v4_masks; |
50 | size_t iph_size; /* size of hash table */ |
51 | u_long iph_seed; /* hashing seed */ |
52 | u_32_t iph_flags; |
53 | u_int iph_unit; /* IPL_LOG* */ |
54 | u_int iph_ref; |
55 | u_int iph_type; /* lookup or group map - IPHASH_* */ |
56 | u_int iph_maskset[4]; /* netmasks in use */ |
57 | char iph_name[FR_GROUPLEN]; /* hash table number */ |
58 | } iphtable_t; |
59 | |
60 | /* iph_type */ |
61 | #define IPHASH_LOOKUP 0 |
62 | #define IPHASH_GROUPMAP 1 |
63 | #define IPHASH_DELETE 2 |
64 | #define IPHASH_ANON 0x80000000 |
65 | |
66 | |
67 | typedef struct iphtstat_s { |
68 | iphtable_t *iphs_tables; |
69 | u_long iphs_numtables; |
70 | u_long iphs_numnodes; |
71 | u_long iphs_nomem; |
72 | u_long iphs_pad[16]; |
73 | } iphtstat_t; |
74 | |
75 | |
76 | extern void *ipf_iphmfindgroup(ipf_main_softc_t *, void *, void *); |
77 | extern iphtable_t *ipf_htable_find(void *, int, char *); |
78 | extern ipf_lookup_t ipf_htable_backend; |
79 | #ifndef _KERNEL |
80 | extern void ipf_htable_dump(ipf_main_softc_t *, void *); |
81 | #endif |
82 | |
83 | #endif /* __IP_HTABLE_H__ */ |
84 | |