ip_pool.h revision 145516
1145516Sdarrenr/*	$FreeBSD: vendor-sys/ipfilter/dist/sys/contrib/ipfilter/netinet/ip_pool.h 145516 2005-04-25 18:15:41Z darrenr $	*/
2145516Sdarrenr
3145516Sdarrenr/*
4145516Sdarrenr * Copyright (C) 1993-2001, 2003 by Darren Reed.
5145516Sdarrenr *
6145516Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145516Sdarrenr *
8145516Sdarrenr * Id: ip_pool.h,v 2.26.2.2 2004/03/23 12:44:34 darrenr Exp
9145516Sdarrenr */
10145516Sdarrenr
11145516Sdarrenr#ifndef	__IP_POOL_H__
12145516Sdarrenr#define	__IP_POOL_H__
13145516Sdarrenr
14145516Sdarrenr#if defined(_KERNEL) && !defined(__osf__) && !defined(__hpux) && \
15145516Sdarrenr    !defined(linux) && !defined(sun)
16145516Sdarrenr# include <net/radix.h>
17145516Sdarrenrextern void rn_freehead __P((struct radix_node_head *));
18145516Sdarrenr# define FreeS(p, z)		KFREES(p, z)
19145516Sdarrenrextern int max_keylen;
20145516Sdarrenr#else
21145516Sdarrenr# if defined(__osf__) || defined(__hpux)
22145516Sdarrenr#  include "radix_ipf_local.h"
23145516Sdarrenr#  define radix_mask ipf_radix_mask
24145516Sdarrenr#  define radix_node ipf_radix_node
25145516Sdarrenr#  define radix_node_head ipf_radix_node_head
26145516Sdarrenr# else
27145516Sdarrenr#  include "radix_ipf.h"
28145516Sdarrenr# endif
29145516Sdarrenr#endif
30145516Sdarrenr#include "netinet/ip_lookup.h"
31145516Sdarrenr
32145516Sdarrenr#define	IP_POOL_NOMATCH		0
33145516Sdarrenr#define	IP_POOL_POSITIVE	1
34145516Sdarrenr
35145516Sdarrenrtypedef	struct ip_pool_node {
36145516Sdarrenr	struct	radix_node	ipn_nodes[2];
37145516Sdarrenr	addrfamily_t		ipn_addr;
38145516Sdarrenr	addrfamily_t		ipn_mask;
39145516Sdarrenr	int			ipn_info;
40145516Sdarrenr	char			ipn_name[FR_GROUPLEN];
41145516Sdarrenr	u_long			ipn_hits;
42145516Sdarrenr	struct ip_pool_node	*ipn_next, **ipn_pnext;
43145516Sdarrenr} ip_pool_node_t;
44145516Sdarrenr
45145516Sdarrenr
46145516Sdarrenrtypedef	struct ip_pool_s {
47145516Sdarrenr	struct ip_pool_s	*ipo_next;
48145516Sdarrenr	struct ip_pool_s	**ipo_pnext;
49145516Sdarrenr	struct radix_node_head	*ipo_head;
50145516Sdarrenr	ip_pool_node_t	*ipo_list;
51145516Sdarrenr	u_long		ipo_hits;
52145516Sdarrenr	int		ipo_unit;
53145516Sdarrenr	int		ipo_flags;
54145516Sdarrenr	int		ipo_ref;
55145516Sdarrenr	char		ipo_name[FR_GROUPLEN];
56145516Sdarrenr} ip_pool_t;
57145516Sdarrenr
58145516Sdarrenr#define	IPOOL_ANON	0x80000000
59145516Sdarrenr
60145516Sdarrenr
61145516Sdarrenrtypedef	struct	ip_pool_stat	{
62145516Sdarrenr	u_long		ipls_pools;
63145516Sdarrenr	u_long		ipls_tables;
64145516Sdarrenr	u_long		ipls_nodes;
65145516Sdarrenr	ip_pool_t	*ipls_list[IPL_LOGSIZE];
66145516Sdarrenr} ip_pool_stat_t;
67145516Sdarrenr
68145516Sdarrenr
69145516Sdarrenrextern	ip_pool_stat_t	ipoolstat;
70145516Sdarrenrextern	ip_pool_t	*ip_pool_list[IPL_LOGSIZE];
71145516Sdarrenr
72145516Sdarrenrextern	int	ip_pool_search __P((void *, int, void *));
73145516Sdarrenrextern	int	ip_pool_init __P((void));
74145516Sdarrenrextern	void	ip_pool_fini __P((void));
75145516Sdarrenrextern	int	ip_pool_create __P((iplookupop_t *));
76145516Sdarrenrextern	int	ip_pool_insert __P((ip_pool_t *, i6addr_t *, i6addr_t *, int));
77145516Sdarrenrextern	int	ip_pool_remove __P((ip_pool_t *, ip_pool_node_t *));
78145516Sdarrenrextern	int	ip_pool_destroy __P((iplookupop_t *));
79145516Sdarrenrextern	void	ip_pool_free __P((ip_pool_t *));
80145516Sdarrenrextern	void	ip_pool_deref __P((ip_pool_t *));
81145516Sdarrenrextern	void	*ip_pool_find __P((int, char *));
82145516Sdarrenrextern	ip_pool_node_t *ip_pool_findeq __P((ip_pool_t *,
83145516Sdarrenr					  addrfamily_t *, addrfamily_t *));
84145516Sdarrenrextern	int	ip_pool_flush __P((iplookupflush_t *));
85145516Sdarrenrextern	int	ip_pool_statistics __P((iplookupop_t *));
86145516Sdarrenr
87145516Sdarrenr#endif /* __IP_POOL_H__ */
88