2 * Copyright (C) 2003 by Darren Reed.
4 * See the IPFILTER.LICENCE file for details on licencing.
6 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
9 #ifndef __IP_HTABLE_H__
10 #define __IP_HTABLE_H__
12 #include "netinet/ip_lookup.h"
14 typedef struct iphtent_s
{
15 struct iphtent_s
*ipe_next
, **ipe_pnext
;
16 struct iphtent_s
*ipe_snext
, **ipe_psnext
;
18 sa_family_t ipe_family
;
31 #define ipe_value ipe_un.ipeu_int
32 #define ipe_group ipe_un.ipeu_char
34 #define IPE_HASH_FN(a, m, s) (((a) * (m)) % (s))
37 typedef struct iphtable_s
{
38 ipfrwlock_t iph_rwlock
;
39 struct iphtable_s
*iph_next
, **iph_pnext
;
40 struct iphtent_s
**iph_table
;
41 struct iphtent_s
*iph_list
;
42 size_t iph_size
; /* size of hash table */
43 u_long iph_seed
; /* hashing seed */
45 u_int iph_unit
; /* IPL_LOG* */
47 u_int iph_type
; /* lookup or group map - IPHASH_* */
48 u_int iph_masks
[4]; /* IPv4 or IPv6 netmasks in use */
49 char iph_name
[FR_GROUPLEN
]; /* hash table number */
54 #define IPHASH_LOOKUP 0
55 #define IPHASH_GROUPMAP 1
56 #define IPHASH_ANON 0x80000000
59 typedef struct iphtstat_s
{
60 iphtable_t
*iphs_tables
;
61 u_long iphs_numtables
;
68 extern void fr_htable_unload
__P((ipf_stack_t
*));
69 extern int fr_newhtable
__P((iplookupop_t
*, ipf_stack_t
*));
70 extern iphtable_t
*fr_findhtable
__P((int, char *, ipf_stack_t
*));
71 extern int fr_removehtable
__P((iplookupop_t
*, ipf_stack_t
*));
72 extern size_t fr_flushhtable
__P((iplookupflush_t
*, ipf_stack_t
*));
73 extern int fr_addhtent
__P((iphtable_t
*, iphtent_t
*, ipf_stack_t
*));
74 extern int fr_delhtent
__P((iphtable_t
*, iphtent_t
*, ipf_stack_t
*));
75 extern void fr_derefhtable
__P((iphtable_t
*, ipf_stack_t
*));
76 extern void fr_derefhtent
__P((iphtent_t
*));
77 extern void fr_delhtable
__P((iphtable_t
*, ipf_stack_t
*));
78 extern void *fr_iphmfindgroup
__P((void *, int, void *, ipf_stack_t
*));
79 extern int fr_iphmfindip
__P((void *, int, void *, fr_info_t
*, ipf_stack_t
*));
80 extern int fr_gethtablestat
__P((iplookupop_t
*, ipf_stack_t
*));
81 extern int fr_htable_getnext
__P((ipftoken_t
*, ipflookupiter_t
*, ipf_stack_t
*));
82 extern void fr_htable_iterderef
__P((u_int
, int, void *, ipf_stack_t
*));
84 #endif /* __IP_HTABLE_H__ */