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
18typedef	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
35typedef	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
54typedef	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
61extern	ipf_lookup_t	ipf_pool_backend;
62
63#ifndef _KERNEL
64extern	void	ipf_pool_dump(ipf_main_softc_t *, void *);
65#endif
66
67#endif /* __IP_POOL_H__ */
68