xref: /freebsd/sys/netpfil/ipfilter/netinet/ip_pool.h (revision 3b9b51fe464ebb91e894742a6a0e6417e256f03a)
1 /*
2  * Copyright (C) 2012 by Darren Reed.
3  *
4  * See the IPFILTER.LICENCE file for details on licencing.
5  *
6  * $Id$
7  */
8 
9 #ifndef	__IP_POOL_H__
10 #define	__IP_POOL_H__
11 
12 #include "netinet/ip_lookup.h"
13 #include "radix_ipf.h"
14 
15 #define	IP_POOL_NOMATCH		0
16 #define	IP_POOL_POSITIVE	1
17 
18 typedef	struct ip_pool_node {
19 	ipf_rdx_node_t		ipn_nodes[2];
20 	addrfamily_t		ipn_addr;
21 	addrfamily_t		ipn_mask;
22 	int			ipn_uid;
23 	int			ipn_info;
24 	int			ipn_ref;
25 	char			ipn_name[FR_GROUPLEN];
26 	U_QUAD_T		ipn_hits;
27 	U_QUAD_T		ipn_bytes;
28 	u_long			ipn_die;
29 	struct ip_pool_node	*ipn_next, **ipn_pnext;
30 	struct ip_pool_node	*ipn_dnext, **ipn_pdnext;
31 	struct ip_pool_s	*ipn_owner;
32 } ip_pool_node_t;
33 
34 
35 typedef	struct ip_pool_s {
36 	struct ip_pool_s	*ipo_next;
37 	struct ip_pool_s	**ipo_pnext;
38 	ipf_rdx_head_t		*ipo_head;
39 	ip_pool_node_t		*ipo_list;
40 	ip_pool_node_t		**ipo_tail;
41 	ip_pool_node_t		*ipo_nextaddr;
42 	void			*ipo_radix;
43 	u_long			ipo_hits;
44 	int			ipo_unit;
45 	int			ipo_flags;
46 	int			ipo_ref;
47 	char			ipo_name[FR_GROUPLEN];
48 } ip_pool_t;
49 
50 #define	IPOOL_DELETE	0x01
51 #define	IPOOL_ANON	0x02
52 
53 
54 typedef	struct	ipf_pool_stat	{
55 	u_long			ipls_pools;
56 	u_long			ipls_tables;
57 	u_long			ipls_nodes;
58 	ip_pool_t		*ipls_list[LOOKUP_POOL_SZ];
59 } ipf_pool_stat_t;
60 
61 extern	ipf_lookup_t	ipf_pool_backend;
62 
63 #ifndef _KERNEL
64 extern	void	ipf_pool_dump(ipf_main_softc_t *, void *);
65 #endif
66 
67 #endif /* __IP_POOL_H__ */
68