1145516Sdarrenr/*
2255332Scy * Copyright (C) 2012 by Darren Reed.
3145516Sdarrenr *
4145516Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
5145516Sdarrenr *
6255332Scy * $Id$
7145516Sdarrenr */
8145516Sdarrenr
9145516Sdarrenr#ifndef	__IP_POOL_H__
10145516Sdarrenr#define	__IP_POOL_H__
11145516Sdarrenr
12145516Sdarrenr#include "netinet/ip_lookup.h"
13255332Scy#include "radix_ipf.h"
14145516Sdarrenr
15145516Sdarrenr#define	IP_POOL_NOMATCH		0
16145516Sdarrenr#define	IP_POOL_POSITIVE	1
17145516Sdarrenr
18145516Sdarrenrtypedef	struct ip_pool_node {
19255332Scy	ipf_rdx_node_t		ipn_nodes[2];
20145516Sdarrenr	addrfamily_t		ipn_addr;
21145516Sdarrenr	addrfamily_t		ipn_mask;
22255332Scy	int			ipn_uid;
23145516Sdarrenr	int			ipn_info;
24170263Sdarrenr	int			ipn_ref;
25255332Scy	char			ipn_name[FR_GROUPLEN];
26255332Scy	U_QUAD_T		ipn_hits;
27255332Scy	U_QUAD_T		ipn_bytes;
28255332Scy	u_long			ipn_die;
29145516Sdarrenr	struct ip_pool_node	*ipn_next, **ipn_pnext;
30255332Scy	struct ip_pool_node	*ipn_dnext, **ipn_pdnext;
31255332Scy	struct ip_pool_s	*ipn_owner;
32145516Sdarrenr} ip_pool_node_t;
33145516Sdarrenr
34145516Sdarrenr
35145516Sdarrenrtypedef	struct ip_pool_s {
36145516Sdarrenr	struct ip_pool_s	*ipo_next;
37145516Sdarrenr	struct ip_pool_s	**ipo_pnext;
38255332Scy	ipf_rdx_head_t		*ipo_head;
39255332Scy	ip_pool_node_t		*ipo_list;
40255332Scy	ip_pool_node_t		**ipo_tail;
41255332Scy	ip_pool_node_t		*ipo_nextaddr;
42255332Scy	void			*ipo_radix;
43255332Scy	u_long			ipo_hits;
44255332Scy	int			ipo_unit;
45255332Scy	int			ipo_flags;
46255332Scy	int			ipo_ref;
47255332Scy	char			ipo_name[FR_GROUPLEN];
48145516Sdarrenr} ip_pool_t;
49145516Sdarrenr
50170263Sdarrenr#define	IPOOL_DELETE	0x01
51170263Sdarrenr#define	IPOOL_ANON	0x02
52145516Sdarrenr
53145516Sdarrenr
54255332Scytypedef	struct	ipf_pool_stat	{
55255332Scy	u_long			ipls_pools;
56255332Scy	u_long			ipls_tables;
57255332Scy	u_long			ipls_nodes;
58255332Scy	ip_pool_t		*ipls_list[LOOKUP_POOL_SZ];
59255332Scy} ipf_pool_stat_t;
60145516Sdarrenr
61255332Scyextern	ipf_lookup_t	ipf_pool_backend;
62145516Sdarrenr
63255332Scy#ifndef _KERNEL
64255332Scyextern	void	ipf_pool_dump __P((ipf_main_softc_t *, void *));
65255332Scy#endif
66145516Sdarrenr
67145516Sdarrenr#endif /* __IP_POOL_H__ */
68