| #ifndef __IP_HTABLE_H__ | 
 | #define __IP_HTABLE_H__ | 
 |  | 
 | #include "netinet/ip_lookup.h" | 
 |  | 
 | typedef	struct	iphtent_s	{ | 
 | 	struct	iphtent_s	*ipe_next, **ipe_pnext; | 
 | 	struct	iphtent_s	*ipe_hnext, **ipe_phnext; | 
 | 	void		*ipe_ptr; | 
 | 	i6addr_t	ipe_addr; | 
 | 	i6addr_t	ipe_mask; | 
 | 	int		ipe_ref; | 
 | 	int		ipe_unit; | 
 | 	union	{ | 
 | 		char	ipeu_char[16]; | 
 | 		u_long	ipeu_long; | 
 | 		u_int	ipeu_int; | 
 | 	}ipe_un; | 
 | } iphtent_t; | 
 |  | 
 | #define	ipe_value	ipe_un.ipeu_int | 
 | #define	ipe_group	ipe_un.ipeu_char | 
 |  | 
 | #define	IPE_HASH_FN(a, m, s)	(((a) * (m)) % (s)) | 
 |  | 
 |  | 
 | typedef	struct	iphtable_s	{ | 
 | 	ipfrwlock_t	iph_rwlock; | 
 | 	struct	iphtable_s	*iph_next, **iph_pnext; | 
 | 	struct	iphtent_s	**iph_table; | 
 | 	struct	iphtent_s	*iph_list; | 
 | 	size_t	iph_size;		/* size of hash table */ | 
 | 	u_long	iph_seed;		/* hashing seed */ | 
 | 	u_32_t	iph_flags; | 
 | 	u_int	iph_unit;		/* IPL_LOG* */ | 
 | 	u_int	iph_ref; | 
 | 	u_int	iph_type;		/* lookup or group map  - IPHASH_* */ | 
 | 	u_int	iph_masks;		/* IPv4 netmasks in use */ | 
 | 	char	iph_name[FR_GROUPLEN];	/* hash table number */ | 
 | } iphtable_t; | 
 |  | 
 | /* iph_type */ | 
 | #define	IPHASH_LOOKUP	0 | 
 | #define	IPHASH_GROUPMAP	1 | 
 | #define	IPHASH_DELETE	2 | 
 | #define	IPHASH_ANON	0x80000000 | 
 |  | 
 |  | 
 | typedef	struct	iphtstat_s	{ | 
 | 	iphtable_t	*iphs_tables; | 
 | 	u_long		iphs_numtables; | 
 | 	u_long		iphs_numnodes; | 
 | 	u_long		iphs_nomem; | 
 | 	u_long		iphs_pad[16]; | 
 | } iphtstat_t; | 
 |  | 
 |  | 
 | extern iphtable_t *ipf_htables[IPL_LOGSIZE]; | 
 |  | 
 | extern iphtable_t *fr_existshtable __P((int, char *)); | 
 | extern int fr_clearhtable __P((iphtable_t *)); | 
 | extern void fr_htable_unload __P((void)); | 
 | extern int fr_newhtable __P((iplookupop_t *)); | 
 | extern iphtable_t *fr_findhtable __P((int, char *)); | 
 | extern int fr_removehtable __P((int, char *)); | 
 | extern size_t fr_flushhtable __P((iplookupflush_t *)); | 
 | extern int fr_addhtent __P((iphtable_t *, iphtent_t *)); | 
 | extern int fr_delhtent __P((iphtable_t *, iphtent_t *)); | 
 | extern int fr_derefhtable __P((iphtable_t *)); | 
 | extern int fr_derefhtent __P((iphtent_t *)); | 
 | extern int fr_delhtable __P((iphtable_t *)); | 
 | extern void *fr_iphmfindgroup __P((void *, void *)); | 
 | extern int fr_iphmfindip __P((void *, int, void *)); | 
 | extern int fr_gethtablestat __P((iplookupop_t *)); | 
 | extern int fr_htable_getnext __P((ipftoken_t *, ipflookupiter_t *)); | 
 | extern void fr_htable_iterderef __P((u_int, int, void *)); | 
 |  | 
 | #endif /* __IP_HTABLE_H__ */ |