]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/contrib/ipfilter/netinet/ip_htable.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / contrib / ipfilter / netinet / ip_htable.h
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__ */