ip_pool.h revision 172771
1134459Siedowse/*
2134459Siedowse * Copyright (C) 1993-2001, 2003 by Darren Reed.
3134459Siedowse *
4134459Siedowse * See the IPFILTER.LICENCE file for details on licencing.
5134459Siedowse *
6134459Siedowse * $Id: ip_pool.h,v 2.26.2.6 2007/10/10 09:51:43 darrenr Exp $
7134459Siedowse */
8134459Siedowse
9134459Siedowse#ifndef	__IP_POOL_H__
10134459Siedowse#define	__IP_POOL_H__
11134459Siedowse
12134459Siedowse#if defined(_KERNEL) && !defined(__osf__) && !defined(__hpux) && \
13134459Siedowse    !defined(linux) && !defined(sun) && !defined(AIX)
14134459Siedowse# include <net/radix.h>
15134459Siedowseextern void rn_freehead __P((struct radix_node_head *));
16134459Siedowse# define FreeS(p, z)		KFREES(p, z)
17134459Siedowseextern int max_keylen;
18134459Siedowse#else
19134459Siedowse# if defined(__osf__) || defined(__hpux) || defined(sun)
20134459Siedowse#  include "radix_ipf_local.h"
21134459Siedowse#  define radix_mask ipf_radix_mask
22134459Siedowse#  define radix_node ipf_radix_node
23134459Siedowse#  define radix_node_head ipf_radix_node_head
24134459Siedowse# else
25134459Siedowse#  include "radix_ipf.h"
26134459Siedowse# endif
27134459Siedowse#endif
28134459Siedowse#include "netinet/ip_lookup.h"
29134459Siedowse
30134459Siedowse#define	IP_POOL_NOMATCH		0
31134459Siedowse#define	IP_POOL_POSITIVE	1
32134459Siedowse
33134459Siedowsetypedef	struct ip_pool_node {
34134459Siedowse	struct	radix_node	ipn_nodes[2];
35134459Siedowse	addrfamily_t		ipn_addr;
36134459Siedowse	addrfamily_t		ipn_mask;
37134459Siedowse	int			ipn_info;
38134459Siedowse	int			ipn_ref;
39134459Siedowsechar			ipn_name[FR_GROUPLEN];
40134459Siedowseu_long			ipn_hits;
41134459Siedowse	struct ip_pool_node	*ipn_next, **ipn_pnext;
42134459Siedowse} ip_pool_node_t;
43134459Siedowse
44134459Siedowse
45134459Siedowsetypedef	struct ip_pool_s {
46134459Siedowse	struct ip_pool_s	*ipo_next;
47134459Siedowse	struct ip_pool_s	**ipo_pnext;
48134459Siedowse	struct radix_node_head	*ipo_head;
49134459Siedowse	ip_pool_node_t	*ipo_list;
50134459Siedowse	u_long		ipo_hits;
51134459Siedowse	int		ipo_unit;
52134459Siedowse	int		ipo_flags;
53134459Siedowse	int		ipo_ref;
54134459Siedowse	char		ipo_name[FR_GROUPLEN];
55134459Siedowse} ip_pool_t;
56134459Siedowse
57134459Siedowse#define	IPOOL_DELETE	0x01
58134459Siedowse#define	IPOOL_ANON	0x02
59134459Siedowse
60134459Siedowse
61134459Siedowsetypedef	struct	ip_pool_stat	{
62134459Siedowse	u_long		ipls_pools;
63134459Siedowse	u_long		ipls_tables;
64134459Siedowse	u_long		ipls_nodes;
65134459Siedowse	ip_pool_t	*ipls_list[IPL_LOGSIZE];
66134459Siedowse} ip_pool_stat_t;
67134459Siedowse
68134459Siedowse
69134459Siedowseextern	ip_pool_stat_t	ipoolstat;
70134459Siedowseextern	ip_pool_t	*ip_pool_list[IPL_LOGSIZE];
71134459Siedowse
72134459Siedowseextern	int	ip_pool_search __P((void *, int, void *));
73153504Smarcelextern	int	ip_pool_init __P((void));
74134459Siedowseextern	void	ip_pool_fini __P((void));
75134459Siedowseextern	int	ip_pool_create __P((iplookupop_t *));
76134459Siedowseextern	int	ip_pool_insert __P((ip_pool_t *, i6addr_t *, i6addr_t *, int));
77134459Siedowseextern	int	ip_pool_remove __P((ip_pool_t *, ip_pool_node_t *));
78134459Siedowseextern	int	ip_pool_destroy __P((int, char *));
79134459Siedowseextern	void	ip_pool_free __P((ip_pool_t *));
80134459Siedowseextern	void	ip_pool_deref __P((ip_pool_t *));
81134459Siedowseextern	void	ip_pool_node_deref __P((ip_pool_node_t *));
82134459Siedowseextern	void	*ip_pool_find __P((int, char *));
83134459Siedowseextern	ip_pool_node_t *ip_pool_findeq __P((ip_pool_t *,
84134459Siedowse					  addrfamily_t *, addrfamily_t *));
85134459Siedowseextern	int	ip_pool_flush __P((iplookupflush_t *));
86134459Siedowseextern	int	ip_pool_statistics __P((iplookupop_t *));
87134459Siedowseextern	int	ip_pool_getnext __P((ipftoken_t *, ipflookupiter_t *));
88134459Siedowseextern	void	ip_pool_iterderef __P((u_int, int, void *));
89134459Siedowse
90134459Siedowse#endif /* __IP_POOL_H__ */
91134459Siedowse