1 /*
2  * Copyright (C) 1993-2001 by Darren Reed.
3  *
4  * See the IPFILTER.LICENCE file for details on licencing.
5  *
6  * $Id: ip_pool.h,v 2.19 2003/11/08 23:01:26 darrenr Exp $
7  */
8 
9 #ifndef	__IP_POOL_H__
10 #define	__IP_POOL_H__
11 
12 #if defined(_KERNEL) && \
13     !(defined(sun) && (defined(__svr4__) || defined(__SVR4)))
14 # include <net/radix.h>
15 #else
16 # include "radix.h"
17 #endif
18 #if SOLARIS2 >= 10
19 #include "ip_lookup.h"
20 #else
21 #include "netinet/ip_lookup.h"
22 #endif
23 
24 #define	IP_POOL_NOMATCH		0
25 #define	IP_POOL_POSITIVE	1
26 
27 typedef	struct ip_pool_node {
28 	struct	radix_node	ipn_nodes[2];
29 	addrfamily_t		ipn_addr;
30 	addrfamily_t		ipn_mask;
31 	int			ipn_info;
32 	char			ipn_name[FR_GROUPLEN];
33 	u_long			ipn_hits;
34 	struct ip_pool_node	*ipn_next, **ipn_pnext;
35 } ip_pool_node_t;
36 
37 
38 typedef	struct ip_pool_s {
39 	struct ip_pool_s	*ipo_next;
40 	struct ip_pool_s	**ipo_pnext;
41 	struct radix_node_head	*ipo_head;
42 	ip_pool_node_t	*ipo_list;
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_ANON	0x80000000
51 
52 
53 typedef	struct	ip_pool_stat	{
54 	u_long		ipls_pools;
55 	u_long		ipls_tables;
56 	u_long		ipls_nodes;
57 	ip_pool_t	*ipls_list[IPL_LOGSIZE];
58 } ip_pool_stat_t;
59 
60 
61 extern	ip_pool_stat_t	ipoolstat;
62 extern	ip_pool_t	*ip_pool_list[IPL_LOGSIZE];
63 
64 extern	int	ip_pool_search __P((void *, int, void *));
65 extern	int	ip_pool_init __P((void));
66 extern	void	ip_pool_fini __P((void));
67 extern	int	ip_pool_create __P((iplookupop_t *));
68 extern	int	ip_pool_insert __P((ip_pool_t *, i6addr_t *, i6addr_t *, int));
69 extern	int	ip_pool_remove __P((ip_pool_t *, ip_pool_node_t *));
70 extern	int	ip_pool_destroy __P((iplookupop_t *));
71 extern	void	ip_pool_free __P((ip_pool_t *));
72 extern	void	ip_pool_deref __P((ip_pool_t *));
73 extern	void	*ip_pool_find __P((int, char *));
74 extern	ip_pool_node_t *ip_pool_findeq __P((ip_pool_t *,
75 					  struct in_addr *, struct in_addr *));
76 
77 #endif /* __IP_POOL_H__ */
78