ip_pool.h revision 3448:aaf16568054b
1/* 2 * Copyright (C) 1993-2001, 2003 by Darren Reed. 3 * 4 * See the IPFILTER.LICENCE file for details on licencing. 5 * 6 * $Id: ip_pool.h,v 2.26.2.3 2005/06/12 07:18:27 darrenr Exp $ 7 * 8 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 9 * Use is subject to license terms. 10 */ 11 12#pragma ident "%Z%%M% %I% %E% SMI" 13 14#ifndef __IP_POOL_H__ 15#define __IP_POOL_H__ 16 17#if defined(_KERNEL) && !defined(__osf__) && !defined(__hpux) && \ 18 !defined(linux) && !defined(sun) && !defined(AIX) 19# include <net/radix.h> 20extern void rn_freehead __P((struct radix_node_head *)); 21# define FreeS(p, z) KFREES(p, z) 22extern int max_keylen; 23#else 24# if defined(__osf__) || defined(__hpux) 25# include "radix_ipf_local.h" 26# define radix_mask ipf_radix_mask 27# define radix_node ipf_radix_node 28# define radix_node_head ipf_radix_node_head 29# else 30# include "radix_ipf.h" 31# endif 32#endif 33#include "netinet/ip_lookup.h" 34 35#define IP_POOL_NOMATCH 0 36#define IP_POOL_POSITIVE 1 37 38typedef struct ip_pool_node { 39 struct radix_node ipn_nodes[2]; 40 addrfamily_t ipn_addr; 41 addrfamily_t ipn_mask; 42 int ipn_info; 43 int ipn_ref; 44 char ipn_name[FR_GROUPLEN]; 45 u_long ipn_hits; 46 struct ip_pool_node *ipn_next, **ipn_pnext; 47} ip_pool_node_t; 48 49 50typedef struct ip_pool_s { 51 struct ip_pool_s *ipo_next; 52 struct ip_pool_s **ipo_pnext; 53 struct radix_node_head *ipo_head; 54 ip_pool_node_t *ipo_list; 55 u_long ipo_hits; 56 int ipo_unit; 57 int ipo_flags; 58 int ipo_ref; 59 char ipo_name[FR_GROUPLEN]; 60} ip_pool_t; 61 62#define IPOOL_ANON 0x80000000 63 64 65typedef struct ip_pool_stat { 66 u_long ipls_pools; 67 u_long ipls_tables; 68 u_long ipls_nodes; 69 ip_pool_t *ipls_list[IPL_LOGSIZE]; 70} ip_pool_stat_t; 71 72extern int ip_pool_search __P((void *, int, void *, ipf_stack_t *)); 73extern int ip_pool_init __P((ipf_stack_t *)); 74extern void ip_pool_fini __P((ipf_stack_t *)); 75extern int ip_pool_create __P((iplookupop_t *, ipf_stack_t *)); 76extern int ip_pool_insert __P((ip_pool_t *, addrfamily_t *, 77 addrfamily_t *, int, ipf_stack_t *)); 78extern int ip_pool_remove __P((ip_pool_t *, ip_pool_node_t *, 79 ipf_stack_t *)); 80extern int ip_pool_destroy __P((iplookupop_t *, ipf_stack_t *)); 81extern void ip_pool_free __P((ip_pool_t *, ipf_stack_t *)); 82extern void ip_pool_deref __P((ip_pool_t *, ipf_stack_t *)); 83extern void *ip_pool_find __P((int, char *, ipf_stack_t *)); 84extern ip_pool_node_t *ip_pool_findeq __P((ip_pool_t *, 85 addrfamily_t *, addrfamily_t *)); 86extern int ip_pool_flush __P((iplookupflush_t *, ipf_stack_t *)); 87extern int ip_pool_statistics __P((iplookupop_t *, ipf_stack_t *)); 88extern int ip_pool_getnext __P((ipftoken_t *, ipflookupiter_t *, ipf_stack_t *)); 89extern void ip_pool_iterderef __P((u_int, int, void *, ipf_stack_t *)); 90#endif /* __IP_POOL_H__ */ 91