2 * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
3 * Copyright (C) 1999-2002 Internet Software Consortium.
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15 * PERFORMANCE OF THIS SOFTWARE.
18 /* $Id: rdataslab.h,v 1.31 2007/06/19 23:47:17 tbox Exp $ */
20 #ifndef DNS_RDATASLAB_H
21 #define DNS_RDATASLAB_H 1
23 /*! \file dns/rdataslab.h
25 * Implements storage of rdatasets into slabs of memory.
28 *\li Clients of this module must impose any required synchronization.
31 *\li This module deals with low-level byte streams. Errors in any of
32 * the functions are likely to crash the server or corrupt memory.
34 *\li If the caller passes invalid memory references, these functions are
35 * likely to crash the server or corrupt memory.
53 #include <dns/types.h>
57 #define DNS_RDATASLAB_FORCE 0x1
58 #define DNS_RDATASLAB_EXACT 0x2
65 dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
66 isc_region_t *region, unsigned int reservelen);
68 * Slabify a rdataset. The slab area will be allocated and returned
72 *\li 'rdataset' is valid.
75 *\li 'region' will have base pointing to the start of allocated memory,
76 * with the slabified region beginning at region->base + reservelen.
77 * region->length contains the total length allocated.
80 *\li ISC_R_SUCCESS - successful completion
81 *\li ISC_R_NOMEMORY - no memory.
86 dns_rdataslab_tordataset(unsigned char *slab, unsigned int reservelen,
87 dns_rdataclass_t rdclass, dns_rdatatype_t rdtype,
88 dns_rdatatype_t covers, dns_ttl_t ttl,
89 dns_rdataset_t *rdataset);
91 * Construct an rdataset from a slab.
94 *\li 'slab' points to a slab.
95 *\li 'rdataset' is disassociated.
98 *\li 'rdataset' is associated and points to a valid rdataest.
101 dns_rdataslab_size(unsigned char *slab, unsigned int reservelen);
103 * Return the total size of an rdataslab.
106 *\li 'slab' points to a slab.
109 *\li The number of bytes in the slab, including the reservelen.
113 dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab,
114 unsigned int reservelen, isc_mem_t *mctx,
115 dns_rdataclass_t rdclass, dns_rdatatype_t type,
116 unsigned int flags, unsigned char **tslabp);
118 * Merge 'oslab' and 'nslab'.
122 dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
123 unsigned int reservelen, isc_mem_t *mctx,
124 dns_rdataclass_t rdclass, dns_rdatatype_t type,
125 unsigned int flags, unsigned char **tslabp);
127 * Subtract 'sslab' from 'mslab'. If 'exact' is true then all elements
128 * of 'sslab' must exist in 'mslab'.
131 * valid flags are DNS_RDATASLAB_EXACT
135 dns_rdataslab_equal(unsigned char *slab1, unsigned char *slab2,
136 unsigned int reservelen);
138 * Compare two rdataslabs for equality. This does _not_ do a full
142 *\li 'slab1' and 'slab2' point to slabs.
145 *\li ISC_TRUE if the slabs are equal, ISC_FALSE otherwise.
148 dns_rdataslab_equalx(unsigned char *slab1, unsigned char *slab2,
149 unsigned int reservelen, dns_rdataclass_t rdclass,
150 dns_rdatatype_t type);
152 * Compare two rdataslabs for DNSSEC equality.
155 *\li 'slab1' and 'slab2' point to slabs.
158 *\li ISC_TRUE if the slabs are equal, #ISC_FALSE otherwise.
163 #endif /* DNS_RDATASLAB_H */