1 /*	$NetBSD: iptable.h,v 1.5 2014/12/10 04:37:58 christos Exp $	*/
2 
3 /*
4  * Copyright (C) 2007, 2012  Internet Systems Consortium, Inc. ("ISC")
5  *
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /* Id: iptable.h,v 1.4 2007/09/14 01:46:05 marka Exp  */
20 
21 #ifndef DNS_IPTABLE_H
22 #define DNS_IPTABLE_H 1
23 
24 #include <isc/lang.h>
25 #include <isc/magic.h>
26 #include <isc/radix.h>
27 
28 #include <dns/types.h>
29 
30 struct dns_iptable {
31 	unsigned int		magic;
32 	isc_mem_t		*mctx;
33 	isc_refcount_t		refcount;
34 	isc_radix_tree_t	*radix;
35 	ISC_LINK(dns_iptable_t)	nextincache;
36 };
37 
38 #define DNS_IPTABLE_MAGIC	ISC_MAGIC('T','a','b','l')
39 #define DNS_IPTABLE_VALID(a)	ISC_MAGIC_VALID(a, DNS_IPTABLE_MAGIC)
40 
41 /***
42  *** Functions
43  ***/
44 
45 ISC_LANG_BEGINDECLS
46 
47 isc_result_t
48 dns_iptable_create(isc_mem_t *mctx, dns_iptable_t **target);
49 /*
50  * Create a new IP table and the underlying radix structure
51  */
52 
53 isc_result_t
54 dns_iptable_addprefix(dns_iptable_t *tab, isc_netaddr_t *addr,
55 		      isc_uint16_t bitlen, isc_boolean_t pos);
56 /*
57  * Add an IP prefix to an existing IP table
58  */
59 
60 isc_result_t
61 dns_iptable_merge(dns_iptable_t *tab, dns_iptable_t *source, isc_boolean_t pos);
62 /*
63  * Merge one IP table into another one.
64  */
65 
66 void
67 dns_iptable_attach(dns_iptable_t *source, dns_iptable_t **target);
68 
69 void
70 dns_iptable_detach(dns_iptable_t **tabp);
71 
72 ISC_LANG_ENDDECLS
73 
74 #endif /* DNS_IPTABLE_H */
75