2 * Copyright (C) 2004-2008 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.33 2008/04/01 23:47:10 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
60 #define DNS_RDATASLAB_OFFLINE 0x01 /* RRSIG is for offline DNSKEY */
61 #define DNS_RDATASLAB_WARNMASK 0x0E /*%< RRSIG(DNSKEY) expired
62 * warnings number mask. */
63 #define DNS_RDATASLAB_WARNSHIFT 1 /*%< How many bits to shift to find
64 * remaining expired warning number. */
72 dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
73 isc_region_t *region, unsigned int reservelen);
75 * Slabify a rdataset. The slab area will be allocated and returned
79 *\li 'rdataset' is valid.
82 *\li 'region' will have base pointing to the start of allocated memory,
83 * with the slabified region beginning at region->base + reservelen.
84 * region->length contains the total length allocated.
87 *\li ISC_R_SUCCESS - successful completion
88 *\li ISC_R_NOMEMORY - no memory.
93 dns_rdataslab_tordataset(unsigned char *slab, unsigned int reservelen,
94 dns_rdataclass_t rdclass, dns_rdatatype_t rdtype,
95 dns_rdatatype_t covers, dns_ttl_t ttl,
96 dns_rdataset_t *rdataset);
98 * Construct an rdataset from a slab.
101 *\li 'slab' points to a slab.
102 *\li 'rdataset' is disassociated.
105 *\li 'rdataset' is associated and points to a valid rdataest.
108 dns_rdataslab_size(unsigned char *slab, unsigned int reservelen);
110 * Return the total size of an rdataslab.
113 *\li 'slab' points to a slab.
116 *\li The number of bytes in the slab, including the reservelen.
120 dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab,
121 unsigned int reservelen, isc_mem_t *mctx,
122 dns_rdataclass_t rdclass, dns_rdatatype_t type,
123 unsigned int flags, unsigned char **tslabp);
125 * Merge 'oslab' and 'nslab'.
129 dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
130 unsigned int reservelen, isc_mem_t *mctx,
131 dns_rdataclass_t rdclass, dns_rdatatype_t type,
132 unsigned int flags, unsigned char **tslabp);
134 * Subtract 'sslab' from 'mslab'. If 'exact' is true then all elements
135 * of 'sslab' must exist in 'mslab'.
138 * valid flags are DNS_RDATASLAB_EXACT
142 dns_rdataslab_equal(unsigned char *slab1, unsigned char *slab2,
143 unsigned int reservelen);
145 * Compare two rdataslabs for equality. This does _not_ do a full
149 *\li 'slab1' and 'slab2' point to slabs.
152 *\li ISC_TRUE if the slabs are equal, ISC_FALSE otherwise.
155 dns_rdataslab_equalx(unsigned char *slab1, unsigned char *slab2,
156 unsigned int reservelen, dns_rdataclass_t rdclass,
157 dns_rdatatype_t type);
159 * Compare two rdataslabs for DNSSEC equality.
162 *\li 'slab1' and 'slab2' point to slabs.
165 *\li ISC_TRUE if the slabs are equal, #ISC_FALSE otherwise.
170 #endif /* DNS_RDATASLAB_H */