PageRenderTime 11ms CodeModel.GetById 1ms app.highlight 7ms RepoModel.GetById 2ms app.codeStats 0ms

/contrib/bind9/lib/dns/include/dns/rdataslab.h

https://bitbucket.org/freebsd/freebsd-head/
C++ Header | 170 lines | 39 code | 18 blank | 113 comment | 0 complexity | 7415e8a30f854ad0c7eecfce33717f46 MD5 | raw file
  1/*
  2 * Copyright (C) 2004-2008  Internet Systems Consortium, Inc. ("ISC")
  3 * Copyright (C) 1999-2002  Internet Software Consortium.
  4 *
  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.
  8 *
  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.
 16 */
 17
 18/* $Id: rdataslab.h,v 1.33 2008/04/01 23:47:10 tbox Exp $ */
 19
 20#ifndef DNS_RDATASLAB_H
 21#define DNS_RDATASLAB_H 1
 22
 23/*! \file dns/rdataslab.h
 24 * \brief
 25 * Implements storage of rdatasets into slabs of memory.
 26 *
 27 * MP:
 28 *\li	Clients of this module must impose any required synchronization.
 29 *
 30 * Reliability:
 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.
 33 *
 34 *\li	If the caller passes invalid memory references, these functions are
 35 *	likely to crash the server or corrupt memory.
 36 *
 37 * Resources:
 38 *\li	None.
 39 *
 40 * Security:
 41 *\li	None.
 42 *
 43 * Standards:
 44 *\li	None.
 45 */
 46
 47/***
 48 *** Imports
 49 ***/
 50
 51#include <isc/lang.h>
 52
 53#include <dns/types.h>
 54
 55ISC_LANG_BEGINDECLS
 56
 57#define DNS_RDATASLAB_FORCE 0x1
 58#define DNS_RDATASLAB_EXACT 0x2
 59
 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. */
 65
 66
 67/***
 68 *** Functions
 69 ***/
 70
 71isc_result_t
 72dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
 73			   isc_region_t *region, unsigned int reservelen);
 74/*%<
 75 * Slabify a rdataset.  The slab area will be allocated and returned
 76 * in 'region'.
 77 *
 78 * Requires:
 79 *\li	'rdataset' is valid.
 80 *
 81 * Ensures:
 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.
 85 *
 86 * Returns:
 87 *\li	ISC_R_SUCCESS		- successful completion
 88 *\li	ISC_R_NOMEMORY		- no memory.
 89 *\li	XXX others
 90 */
 91
 92void
 93dns_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);
 97/*%<
 98 * Construct an rdataset from a slab.
 99 *
100 * Requires:
101 *\li	'slab' points to a slab.
102 *\li	'rdataset' is disassociated.
103 *
104 * Ensures:
105 *\li	'rdataset' is associated and points to a valid rdataest.
106 */
107unsigned int
108dns_rdataslab_size(unsigned char *slab, unsigned int reservelen);
109/*%<
110 * Return the total size of an rdataslab.
111 *
112 * Requires:
113 *\li	'slab' points to a slab.
114 *
115 * Returns:
116 *\li	The number of bytes in the slab, including the reservelen.
117 */
118
119isc_result_t
120dns_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);
124/*%<
125 * Merge 'oslab' and 'nslab'.
126 */
127
128isc_result_t
129dns_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);
133/*%<
134 * Subtract 'sslab' from 'mslab'.  If 'exact' is true then all elements
135 * of 'sslab' must exist in 'mslab'.
136 *
137 * XXX
138 * valid flags are DNS_RDATASLAB_EXACT
139 */
140
141isc_boolean_t
142dns_rdataslab_equal(unsigned char *slab1, unsigned char *slab2,
143		    unsigned int reservelen);
144/*%<
145 * Compare two rdataslabs for equality.  This does _not_ do a full
146 * DNSSEC comparison.
147 *
148 * Requires:
149 *\li	'slab1' and 'slab2' point to slabs.
150 *
151 * Returns:
152 *\li	ISC_TRUE if the slabs are equal, ISC_FALSE otherwise.
153 */
154isc_boolean_t
155dns_rdataslab_equalx(unsigned char *slab1, unsigned char *slab2,
156		     unsigned int reservelen, dns_rdataclass_t rdclass,
157		     dns_rdatatype_t type);
158/*%<
159 * Compare two rdataslabs for DNSSEC equality.
160 *
161 * Requires:
162 *\li	'slab1' and 'slab2' point to slabs.
163 *
164 * Returns:
165 *\li	ISC_TRUE if the slabs are equal, #ISC_FALSE otherwise.
166 */
167
168ISC_LANG_ENDDECLS
169
170#endif /* DNS_RDATASLAB_H */