| 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 |  |