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