#include <config.h>
#include <stdlib.h>
#include <isc/mem.h>
#include <isc/region.h>
#include <isc/string.h>
#include <isc/util.h>
#include <dns/result.h>
#include <dns/rdata.h>
#include <dns/rdataset.h>
#include <dns/rdataslab.h>
Go to the source code of this file.
Data Structures | |
struct | xrdata |
Functions | |
static int | compare_rdata (const void *p1, const void *p2) |
Note: the "const void *" are just to make qsort happy. | |
isc_result_t | dns_rdataslab_fromrdataset (dns_rdataset_t *rdataset, isc_mem_t *mctx, isc_region_t *region, unsigned int reservelen) |
Slabify a rdataset. The slab area will be allocated and returned in 'region'. | |
static void | rdataset_disassociate (dns_rdataset_t *rdataset) |
static isc_result_t | rdataset_first (dns_rdataset_t *rdataset) |
static isc_result_t | rdataset_next (dns_rdataset_t *rdataset) |
static void | rdataset_current (dns_rdataset_t *rdataset, dns_rdata_t *rdata) |
static void | rdataset_clone (dns_rdataset_t *source, dns_rdataset_t *target) |
static unsigned int | rdataset_count (dns_rdataset_t *rdataset) |
void | dns_rdataslab_tordataset (unsigned char *slab, unsigned int reservelen, dns_rdataclass_t rdclass, dns_rdatatype_t rdtype, dns_rdatatype_t covers, dns_ttl_t ttl, dns_rdataset_t *rdataset) |
Construct an rdataset from a slab. | |
unsigned int | dns_rdataslab_size (unsigned char *slab, unsigned int reservelen) |
Return the total size of an rdataslab. | |
static void | rdata_from_slab (unsigned char **current, dns_rdataclass_t rdclass, dns_rdatatype_t type, dns_rdata_t *rdata) |
static isc_boolean_t | rdata_in_slab (unsigned char *slab, unsigned int reservelen, dns_rdataclass_t rdclass, dns_rdatatype_t type, dns_rdata_t *rdata) |
isc_result_t | dns_rdataslab_merge (unsigned char *oslab, unsigned char *nslab, unsigned int reservelen, isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_rdatatype_t type, unsigned int flags, unsigned char **tslabp) |
Merge 'oslab' and 'nslab'. | |
isc_result_t | dns_rdataslab_subtract (unsigned char *mslab, unsigned char *sslab, unsigned int reservelen, isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_rdatatype_t type, unsigned int flags, unsigned char **tslabp) |
Subtract 'sslab' from 'mslab'. If 'exact' is true then all elements of 'sslab' must exist in 'mslab'. | |
isc_boolean_t | dns_rdataslab_equal (unsigned char *slab1, unsigned char *slab2, unsigned int reservelen) |
Compare two rdataslabs for equality. This does _not_ do a full DNSSEC comparison. | |
isc_boolean_t | dns_rdataslab_equalx (unsigned char *slab1, unsigned char *slab2, unsigned int reservelen, dns_rdataclass_t rdclass, dns_rdatatype_t type) |
Compare two rdataslabs for DNSSEC equality. | |
Variables | |
static dns_rdatasetmethods_t | rdataset_methods |
Definition in file rdataslab.c.
static int compare_rdata | ( | const void * | p1, | |
const void * | p2 | |||
) | [static] |
Note: the "const void *" are just to make qsort happy.
Definition at line 87 of file rdataslab.c.
References dns_rdata_compare(), and xrdata::rdata.
Referenced by dns_rdataslab_fromrdataset(), and dns_rdataslab_merge().
isc_result_t dns_rdataslab_fromrdataset | ( | dns_rdataset_t * | rdataset, | |
isc_mem_t * | mctx, | |||
isc_region_t * | region, | |||
unsigned int | reservelen | |||
) |
Slabify a rdataset. The slab area will be allocated and returned in 'region'.
Requires:
Definition at line 126 of file rdataslab.c.
References isc_region::base, compare_rdata(), dns_rdata::data, DNS_R_SINGLETON, dns_rdata_init(), DNS_RDATA_OFFLINE, dns_rdataset_count(), dns_rdataset_current(), dns_rdataset_first(), dns_rdataset_next(), DNS_RDATASLAB_OFFLINE, dns_rdatatype_issingleton(), INSIST, isc_mem_get, isc_mem_put, ISC_R_FAILURE, ISC_R_NOMEMORY, ISC_R_NOMORE, ISC_R_NOSPACE, ISC_R_SUCCESS, dns_rdata::length, isc_region::length, xrdata::order, xrdata::rdata, removed(), and dns_rdataset::type.
Referenced by addclosest(), addnoqname(), addrdataset(), loading_addrdataset(), and subtractrdataset().
static void rdataset_disassociate | ( | dns_rdataset_t * | rdataset | ) | [static] |
static isc_result_t rdataset_first | ( | dns_rdataset_t * | rdataset | ) | [static] |
Definition at line 357 of file rdataslab.c.
References ISC_R_NOMORE, ISC_R_SUCCESS, dns_rdataset::private3, dns_rdataset::private5, and dns_rdataset::privateuint4.
static isc_result_t rdataset_next | ( | dns_rdataset_t * | rdataset | ) | [static] |
Definition at line 384 of file rdataslab.c.
References ISC_R_NOMORE, ISC_R_SUCCESS, dns_rdataset::private5, and dns_rdataset::privateuint4.
static void rdataset_current | ( | dns_rdataset_t * | rdataset, | |
dns_rdata_t * | rdata | |||
) | [static] |
Definition at line 407 of file rdataslab.c.
References isc_region::base, dns_rdata_fromregion(), DNS_RDATA_OFFLINE, DNS_RDATASLAB_OFFLINE, dns_rdata::flags, isc_region::length, dns_rdataset::private5, r, dns_rdataset::rdclass, REQUIRE, and dns_rdataset::type.
static void rdataset_clone | ( | dns_rdataset_t * | source, | |
dns_rdataset_t * | target | |||
) | [static] |
Definition at line 434 of file rdataslab.c.
References dns_rdataset::private5, and dns_rdataset::privateuint4.
static unsigned int rdataset_count | ( | dns_rdataset_t * | rdataset | ) | [static] |
void dns_rdataslab_tordataset | ( | unsigned char * | slab, | |
unsigned int | reservelen, | |||
dns_rdataclass_t | rdclass, | |||
dns_rdatatype_t | rdtype, | |||
dns_rdatatype_t | covers, | |||
dns_ttl_t | ttl, | |||
dns_rdataset_t * | rdataset | |||
) |
Construct an rdataset from a slab.
Requires:
Definition at line 476 of file rdataslab.c.
References dns_rdataset::covers, dns_rdataset_isassociated(), dns_rdataset::methods, dns_rdataset::private1, dns_rdataset::private2, dns_rdataset::private3, dns_rdataset::private5, dns_rdataset::privateuint4, dns_rdataset::rdclass, REQUIRE, dns_rdataset::trust, dns_rdataset::ttl, and dns_rdataset::type.
unsigned int dns_rdataslab_size | ( | unsigned char * | slab, | |
unsigned int | reservelen | |||
) |
Return the total size of an rdataslab.
Requires:
Definition at line 502 of file rdataslab.c.
References REQUIRE.
Referenced by destroynode(), free_noqname(), free_rdataset(), rbt_datafixer(), and rbt_datawriter().
static void rdata_from_slab | ( | unsigned char ** | current, | |
dns_rdataclass_t | rdclass, | |||
dns_rdatatype_t | type, | |||
dns_rdata_t * | rdata | |||
) | [inline, static] |
Definition at line 535 of file rdataslab.c.
References isc_region::base, dns_rdata_fromregion(), DNS_RDATA_OFFLINE, DNS_RDATASLAB_OFFLINE, dns_rdata::flags, ISC_FALSE, ISC_TRUE, isc_region::length, and offline().
Referenced by dns_rdataslab_equalx(), dns_rdataslab_merge(), dns_rdataslab_subtract(), and rdata_in_slab().
static isc_boolean_t rdata_in_slab | ( | unsigned char * | slab, | |
unsigned int | reservelen, | |||
dns_rdataclass_t | rdclass, | |||
dns_rdatatype_t | type, | |||
dns_rdata_t * | rdata | |||
) | [inline, static] |
Definition at line 571 of file rdataslab.c.
References dns_rdata_compare(), DNS_RDATA_INIT, dns_rdata_reset(), ISC_FALSE, ISC_TRUE, and rdata_from_slab().
Referenced by dns_rdataslab_merge().
isc_result_t dns_rdataslab_merge | ( | unsigned char * | oslab, | |
unsigned char * | nslab, | |||
unsigned int | reservelen, | |||
isc_mem_t * | mctx, | |||
dns_rdataclass_t | rdclass, | |||
dns_rdatatype_t | type, | |||
unsigned int | flags, | |||
unsigned char ** | tslabp | |||
) |
Merge 'oslab' and 'nslab'.
Definition at line 602 of file rdataslab.c.
References compare_rdata(), dns_rdata::data, DNS_R_NOTEXACT, DNS_R_SINGLETON, DNS_R_UNCHANGED, dns_rdata_init(), DNS_RDATA_INIT, dns_rdata_reset(), DNS_RDATASLAB_EXACT, DNS_RDATASLAB_FORCE, dns_rdatatype_issingleton(), INSIST, ISC_FALSE, isc_mem_get, isc_mem_put, ISC_R_NOMEMORY, ISC_R_NOSPACE, ISC_R_SUCCESS, ISC_TF, ISC_TRUE, dns_rdata::length, rdata_from_slab(), rdata_in_slab(), and REQUIRE.
Referenced by add32().
isc_result_t dns_rdataslab_subtract | ( | unsigned char * | mslab, | |
unsigned char * | sslab, | |||
unsigned int | reservelen, | |||
isc_mem_t * | mctx, | |||
dns_rdataclass_t | rdclass, | |||
dns_rdatatype_t | type, | |||
unsigned int | flags, | |||
unsigned char ** | tslabp | |||
) |
Subtract 'sslab' from 'mslab'. If 'exact' is true then all elements of 'sslab' must exist in 'mslab'.
XXX valid flags are DNS_RDATASLAB_EXACT
Definition at line 870 of file rdataslab.c.
References DNS_R_NOTEXACT, DNS_R_NXRRSET, DNS_R_UNCHANGED, dns_rdata_compare(), DNS_RDATA_INIT, dns_rdata_reset(), DNS_RDATASLAB_EXACT, INSIST, isc_mem_get, isc_mem_put, ISC_R_NOMEMORY, ISC_R_SUCCESS, xrdata::order, rdata_from_slab(), and REQUIRE.
Referenced by subtractrdataset().
isc_boolean_t dns_rdataslab_equal | ( | unsigned char * | slab1, | |
unsigned char * | slab2, | |||
unsigned int | reservelen | |||
) |
Compare two rdataslabs for equality. This does _not_ do a full DNSSEC comparison.
Requires:
Definition at line 1044 of file rdataslab.c.
References ISC_FALSE, and ISC_TRUE.
Referenced by add32().
isc_boolean_t dns_rdataslab_equalx | ( | unsigned char * | slab1, | |
unsigned char * | slab2, | |||
unsigned int | reservelen, | |||
dns_rdataclass_t | rdclass, | |||
dns_rdatatype_t | type | |||
) |
Compare two rdataslabs for DNSSEC equality.
Requires:
Definition at line 1092 of file rdataslab.c.
References dns_rdata_compare(), DNS_RDATA_INIT, dns_rdata_reset(), ISC_FALSE, ISC_TRUE, and rdata_from_slab().
Referenced by add32().
dns_rdatasetmethods_t rdataset_methods [static] |
Initial value:
{ rdataset_disassociate, rdataset_first, rdataset_next, rdataset_current, rdataset_clone, rdataset_count, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
Definition at line 454 of file rdataslab.c.