1/*	$NetBSD: ip_pool.h,v 1.2 2012/02/15 17:55:04 riz Exp $	*/
2
3/*
4 * Copyright (C) 1993-2001, 2003 by Darren Reed.
5 *
6 * See the IPFILTER.LICENCE file for details on licencing.
7 *
8 * Id: ip_pool.h,v 2.26.2.6 2007/10/10 09:51:43 darrenr Exp
9 */
10
11#ifndef	__IP_POOL_H__
12#define	__IP_POOL_H__
13
14#if defined(_KERNEL) && !defined(__osf__) && !defined(__hpux) && \
15    !defined(linux) && !defined(sun) && !defined(AIX)
16# include <net/radix.h>
17extern void rn_freehead(struct radix_node_head *);
18# define FreeS(p, z)		KFREES(p, z)
19extern int max_keylen;
20#else
21# if defined(__osf__) || defined(__hpux) || defined(sun)
22#  include "radix_ipf_local.h"
23#  define radix_mask ipf_radix_mask
24#  define radix_node ipf_radix_node
25#  define radix_node_head ipf_radix_node_head
26# else
27#  include "radix_ipf.h"
28# endif
29#endif
30#include "netinet/ip_lookup.h"
31
32#define	IP_POOL_NOMATCH		0
33#define	IP_POOL_POSITIVE	1
34
35typedef	struct ip_pool_node {
36	struct	radix_node	ipn_nodes[2];
37	addrfamily_t		ipn_addr;
38	addrfamily_t		ipn_mask;
39	int			ipn_info;
40	int			ipn_ref;
41char			ipn_name[FR_GROUPLEN];
42u_long			ipn_hits;
43	struct ip_pool_node	*ipn_next, **ipn_pnext;
44} ip_pool_node_t;
45
46
47typedef	struct ip_pool_s {
48	struct ip_pool_s	*ipo_next;
49	struct ip_pool_s	**ipo_pnext;
50	struct radix_node_head	*ipo_head;
51	ip_pool_node_t	*ipo_list;
52	u_long		ipo_hits;
53	int		ipo_unit;
54	int		ipo_flags;
55	int		ipo_ref;
56	char		ipo_name[FR_GROUPLEN];
57} ip_pool_t;
58
59#define	IPOOL_DELETE	0x01
60#define	IPOOL_ANON	0x02
61
62
63typedef	struct	ip_pool_stat	{
64	u_long		ipls_pools;
65	u_long		ipls_tables;
66	u_long		ipls_nodes;
67	ip_pool_t	*ipls_list[IPL_LOGSIZE];
68} ip_pool_stat_t;
69
70
71extern	ip_pool_stat_t	ipoolstat;
72extern	ip_pool_t	*ip_pool_list[IPL_LOGSIZE];
73
74extern	int	ip_pool_search(void *, int, void *);
75extern	int	ip_pool_init(void);
76extern	void	ip_pool_fini(void);
77extern	int	ip_pool_create(iplookupop_t *);
78extern	int	ip_pool_insert(ip_pool_t *, i6addr_t *, i6addr_t *, int);
79extern	int	ip_pool_remove(ip_pool_t *, ip_pool_node_t *);
80extern	int	ip_pool_destroy(int, char *);
81extern	void	ip_pool_free(ip_pool_t *);
82extern	void	ip_pool_deref(ip_pool_t *);
83extern	void	ip_pool_node_deref(ip_pool_node_t *);
84extern	void	*ip_pool_find(int, char *);
85extern	ip_pool_node_t *ip_pool_findeq(ip_pool_t *,
86					  addrfamily_t *, addrfamily_t *);
87extern	int	ip_pool_flush(iplookupflush_t *);
88extern	int	ip_pool_statistics(iplookupop_t *);
89extern	int	ip_pool_getnext(ipftoken_t *, ipflookupiter_t *);
90extern	void	ip_pool_iterderef(u_int, int, void *);
91
92#endif /* __IP_POOL_H__ */
93