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