rdataset.h revision 222395
1135446Strhodes/* 2205292Sdougb * Copyright (C) 2004-2010 Internet Systems Consortium, Inc. ("ISC") 3135446Strhodes * Copyright (C) 1999-2003 Internet Software Consortium. 4135446Strhodes * 5193149Sdougb * Permission to use, copy, modify, and/or distribute this software for any 6135446Strhodes * purpose with or without fee is hereby granted, provided that the above 7135446Strhodes * copyright notice and this permission notice appear in all copies. 8135446Strhodes * 9135446Strhodes * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10135446Strhodes * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11135446Strhodes * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12135446Strhodes * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13135446Strhodes * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14135446Strhodes * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15135446Strhodes * PERFORMANCE OF THIS SOFTWARE. 16135446Strhodes */ 17135446Strhodes 18222395Sdougb/* $Id: rdataset.h,v 1.65.50.4.6.1 2011-05-27 00:19:19 each Exp $ */ 19135446Strhodes 20135446Strhodes#ifndef DNS_RDATASET_H 21135446Strhodes#define DNS_RDATASET_H 1 22135446Strhodes 23135446Strhodes/***** 24135446Strhodes ***** Module Info 25135446Strhodes *****/ 26135446Strhodes 27193149Sdougb/*! \file dns/rdataset.h 28170222Sdougb * \brief 29135446Strhodes * A DNS rdataset is a handle that can be associated with a collection of 30135446Strhodes * rdata all having a common owner name, class, and type. 31135446Strhodes * 32135446Strhodes * The dns_rdataset_t type is like a "virtual class". To actually use 33135446Strhodes * rdatasets, an implementation of the method suite (e.g. "slabbed rdata") is 34135446Strhodes * required. 35135446Strhodes * 36170222Sdougb * XXX <more> XXX 37135446Strhodes * 38135446Strhodes * MP: 39170222Sdougb *\li Clients of this module must impose any required synchronization. 40135446Strhodes * 41135446Strhodes * Reliability: 42170222Sdougb *\li No anticipated impact. 43135446Strhodes * 44135446Strhodes * Resources: 45170222Sdougb *\li TBS 46135446Strhodes * 47135446Strhodes * Security: 48170222Sdougb *\li No anticipated impact. 49135446Strhodes * 50135446Strhodes * Standards: 51170222Sdougb *\li None. 52135446Strhodes */ 53135446Strhodes 54135446Strhodes#include <isc/lang.h> 55135446Strhodes#include <isc/magic.h> 56170222Sdougb#include <isc/stdtime.h> 57135446Strhodes 58135446Strhodes#include <dns/types.h> 59135446Strhodes 60135446StrhodesISC_LANG_BEGINDECLS 61135446Strhodes 62170222Sdougbtypedef enum { 63170222Sdougb dns_rdatasetadditional_fromauth, 64170222Sdougb dns_rdatasetadditional_fromcache, 65170222Sdougb dns_rdatasetadditional_fromglue 66170222Sdougb} dns_rdatasetadditional_t; 67170222Sdougb 68135446Strhodestypedef struct dns_rdatasetmethods { 69135446Strhodes void (*disassociate)(dns_rdataset_t *rdataset); 70135446Strhodes isc_result_t (*first)(dns_rdataset_t *rdataset); 71135446Strhodes isc_result_t (*next)(dns_rdataset_t *rdataset); 72135446Strhodes void (*current)(dns_rdataset_t *rdataset, 73135446Strhodes dns_rdata_t *rdata); 74135446Strhodes void (*clone)(dns_rdataset_t *source, 75135446Strhodes dns_rdataset_t *target); 76135446Strhodes unsigned int (*count)(dns_rdataset_t *rdataset); 77135446Strhodes isc_result_t (*addnoqname)(dns_rdataset_t *rdataset, 78135446Strhodes dns_name_t *name); 79135446Strhodes isc_result_t (*getnoqname)(dns_rdataset_t *rdataset, 80135446Strhodes dns_name_t *name, 81193149Sdougb dns_rdataset_t *neg, 82193149Sdougb dns_rdataset_t *negsig); 83193149Sdougb isc_result_t (*addclosest)(dns_rdataset_t *rdataset, 84193149Sdougb dns_name_t *name); 85193149Sdougb isc_result_t (*getclosest)(dns_rdataset_t *rdataset, 86193149Sdougb dns_name_t *name, 87193149Sdougb dns_rdataset_t *neg, 88193149Sdougb dns_rdataset_t *negsig); 89170222Sdougb isc_result_t (*getadditional)(dns_rdataset_t *rdataset, 90170222Sdougb dns_rdatasetadditional_t type, 91170222Sdougb dns_rdatatype_t qtype, 92170222Sdougb dns_acache_t *acache, 93170222Sdougb dns_zone_t **zonep, 94170222Sdougb dns_db_t **dbp, 95170222Sdougb dns_dbversion_t **versionp, 96170222Sdougb dns_dbnode_t **nodep, 97170222Sdougb dns_name_t *fname, 98170222Sdougb dns_message_t *msg, 99170222Sdougb isc_stdtime_t now); 100170222Sdougb isc_result_t (*setadditional)(dns_rdataset_t *rdataset, 101170222Sdougb dns_rdatasetadditional_t type, 102170222Sdougb dns_rdatatype_t qtype, 103170222Sdougb dns_acache_t *acache, 104170222Sdougb dns_zone_t *zone, 105170222Sdougb dns_db_t *db, 106170222Sdougb dns_dbversion_t *version, 107170222Sdougb dns_dbnode_t *node, 108170222Sdougb dns_name_t *fname); 109170222Sdougb isc_result_t (*putadditional)(dns_acache_t *acache, 110170222Sdougb dns_rdataset_t *rdataset, 111170222Sdougb dns_rdatasetadditional_t type, 112170222Sdougb dns_rdatatype_t qtype); 113205292Sdougb void (*settrust)(dns_rdataset_t *rdataset, 114205292Sdougb dns_trust_t trust); 115205292Sdougb void (*expire)(dns_rdataset_t *rdataset); 116135446Strhodes} dns_rdatasetmethods_t; 117135446Strhodes 118135446Strhodes#define DNS_RDATASET_MAGIC ISC_MAGIC('D','N','S','R') 119135446Strhodes#define DNS_RDATASET_VALID(set) ISC_MAGIC_VALID(set, DNS_RDATASET_MAGIC) 120135446Strhodes 121170222Sdougb/*% 122135446Strhodes * Direct use of this structure by clients is strongly discouraged, except 123135446Strhodes * for the 'link' field which may be used however the client wishes. The 124135446Strhodes * 'private', 'current', and 'index' fields MUST NOT be changed by clients. 125135446Strhodes * rdataset implementations may change any of the fields. 126135446Strhodes */ 127135446Strhodesstruct dns_rdataset { 128135446Strhodes unsigned int magic; /* XXX ? */ 129135446Strhodes dns_rdatasetmethods_t * methods; 130135446Strhodes ISC_LINK(dns_rdataset_t) link; 131135446Strhodes /* 132135446Strhodes * XXX do we need these, or should they be retrieved by methods? 133135446Strhodes * Leaning towards the latter, since they are not frequently required 134135446Strhodes * once you have the rdataset. 135135446Strhodes */ 136135446Strhodes dns_rdataclass_t rdclass; 137135446Strhodes dns_rdatatype_t type; 138135446Strhodes dns_ttl_t ttl; 139135446Strhodes dns_trust_t trust; 140135446Strhodes dns_rdatatype_t covers; 141135446Strhodes /* 142135446Strhodes * attributes 143135446Strhodes */ 144135446Strhodes unsigned int attributes; 145170222Sdougb /*% 146135446Strhodes * the counter provides the starting point in the "cyclic" order. 147135446Strhodes * The value ISC_UINT32_MAX has a special meaning of "picking up a 148135446Strhodes * random value." in order to take care of databases that do not 149135446Strhodes * increment the counter. 150135446Strhodes */ 151135446Strhodes isc_uint32_t count; 152193149Sdougb /* 153193149Sdougb * This RRSIG RRset should be re-generated around this time. 154193149Sdougb * Only valid if DNS_RDATASETATTR_RESIGN is set in attributes. 155193149Sdougb */ 156193149Sdougb isc_stdtime_t resign; 157170222Sdougb /*@{*/ 158170222Sdougb /*% 159135446Strhodes * These are for use by the rdataset implementation, and MUST NOT 160135446Strhodes * be changed by clients. 161135446Strhodes */ 162135446Strhodes void * private1; 163135446Strhodes void * private2; 164135446Strhodes void * private3; 165135446Strhodes unsigned int privateuint4; 166135446Strhodes void * private5; 167135446Strhodes void * private6; 168193149Sdougb void * private7; 169170222Sdougb /*@}*/ 170193149Sdougb 171135446Strhodes}; 172135446Strhodes 173170222Sdougb/*! 174170222Sdougb * \def DNS_RDATASETATTR_RENDERED 175135446Strhodes * Used by message.c to indicate that the rdataset was rendered. 176135446Strhodes * 177170222Sdougb * \def DNS_RDATASETATTR_TTLADJUSTED 178135446Strhodes * Used by message.c to indicate that the rdataset's rdata had differing 179135446Strhodes * TTL values, and the rdataset->ttl holds the smallest. 180170222Sdougb * 181170222Sdougb * \def DNS_RDATASETATTR_LOADORDER 182170222Sdougb * Output the RRset in load order. 183135446Strhodes */ 184170222Sdougb 185153816Sdougb#define DNS_RDATASETATTR_QUESTION 0x00000001 186170222Sdougb#define DNS_RDATASETATTR_RENDERED 0x00000002 /*%< Used by message.c */ 187170222Sdougb#define DNS_RDATASETATTR_ANSWERED 0x00000004 /*%< Used by server. */ 188170222Sdougb#define DNS_RDATASETATTR_CACHE 0x00000008 /*%< Used by resolver. */ 189170222Sdougb#define DNS_RDATASETATTR_ANSWER 0x00000010 /*%< Used by resolver. */ 190170222Sdougb#define DNS_RDATASETATTR_ANSWERSIG 0x00000020 /*%< Used by resolver. */ 191170222Sdougb#define DNS_RDATASETATTR_EXTERNAL 0x00000040 /*%< Used by resolver. */ 192170222Sdougb#define DNS_RDATASETATTR_NCACHE 0x00000080 /*%< Used by resolver. */ 193170222Sdougb#define DNS_RDATASETATTR_CHAINING 0x00000100 /*%< Used by resolver. */ 194170222Sdougb#define DNS_RDATASETATTR_TTLADJUSTED 0x00000200 /*%< Used by message.c */ 195153816Sdougb#define DNS_RDATASETATTR_FIXEDORDER 0x00000400 196153816Sdougb#define DNS_RDATASETATTR_RANDOMIZE 0x00000800 197170222Sdougb#define DNS_RDATASETATTR_CHASE 0x00001000 /*%< Used by resolver. */ 198153816Sdougb#define DNS_RDATASETATTR_NXDOMAIN 0x00002000 199153816Sdougb#define DNS_RDATASETATTR_NOQNAME 0x00004000 200170222Sdougb#define DNS_RDATASETATTR_CHECKNAMES 0x00008000 /*%< Used by resolver. */ 201153816Sdougb#define DNS_RDATASETATTR_REQUIREDGLUE 0x00010000 202170222Sdougb#define DNS_RDATASETATTR_LOADORDER 0x00020000 203193149Sdougb#define DNS_RDATASETATTR_RESIGN 0x00040000 204193149Sdougb#define DNS_RDATASETATTR_CLOSEST 0x00080000 205193149Sdougb#define DNS_RDATASETATTR_OPTOUT 0x00100000 /*%< OPTOUT proof */ 206135446Strhodes 207170222Sdougb/*% 208135446Strhodes * _OMITDNSSEC: 209135446Strhodes * Omit DNSSEC records when rendering ncache records. 210135446Strhodes */ 211135446Strhodes#define DNS_RDATASETTOWIRE_OMITDNSSEC 0x0001 212135446Strhodes 213135446Strhodesvoid 214135446Strhodesdns_rdataset_init(dns_rdataset_t *rdataset); 215170222Sdougb/*%< 216135446Strhodes * Make 'rdataset' a valid, disassociated rdataset. 217135446Strhodes * 218135446Strhodes * Requires: 219170222Sdougb *\li 'rdataset' is not NULL. 220135446Strhodes * 221135446Strhodes * Ensures: 222170222Sdougb *\li 'rdataset' is a valid, disassociated rdataset. 223135446Strhodes */ 224135446Strhodes 225135446Strhodesvoid 226135446Strhodesdns_rdataset_invalidate(dns_rdataset_t *rdataset); 227170222Sdougb/*%< 228135446Strhodes * Invalidate 'rdataset'. 229135446Strhodes * 230135446Strhodes * Requires: 231170222Sdougb *\li 'rdataset' is a valid, disassociated rdataset. 232135446Strhodes * 233135446Strhodes * Ensures: 234170222Sdougb *\li If assertion checking is enabled, future attempts to use 'rdataset' 235135446Strhodes * without initializing it will cause an assertion failure. 236135446Strhodes */ 237135446Strhodes 238135446Strhodesvoid 239135446Strhodesdns_rdataset_disassociate(dns_rdataset_t *rdataset); 240170222Sdougb/*%< 241135446Strhodes * Disassociate 'rdataset' from its rdata, allowing it to be reused. 242135446Strhodes * 243135446Strhodes * Notes: 244170222Sdougb *\li The client must ensure it has no references to rdata in the rdataset 245135446Strhodes * before disassociating. 246135446Strhodes * 247135446Strhodes * Requires: 248170222Sdougb *\li 'rdataset' is a valid, associated rdataset. 249135446Strhodes * 250135446Strhodes * Ensures: 251170222Sdougb *\li 'rdataset' is a valid, disassociated rdataset. 252135446Strhodes */ 253135446Strhodes 254135446Strhodesisc_boolean_t 255135446Strhodesdns_rdataset_isassociated(dns_rdataset_t *rdataset); 256170222Sdougb/*%< 257135446Strhodes * Is 'rdataset' associated? 258135446Strhodes * 259135446Strhodes * Requires: 260170222Sdougb *\li 'rdataset' is a valid rdataset. 261135446Strhodes * 262135446Strhodes * Returns: 263170222Sdougb *\li #ISC_TRUE 'rdataset' is associated. 264170222Sdougb *\li #ISC_FALSE 'rdataset' is not associated. 265135446Strhodes */ 266135446Strhodes 267135446Strhodesvoid 268135446Strhodesdns_rdataset_makequestion(dns_rdataset_t *rdataset, dns_rdataclass_t rdclass, 269135446Strhodes dns_rdatatype_t type); 270170222Sdougb/*%< 271135446Strhodes * Make 'rdataset' a valid, associated, question rdataset, with a 272135446Strhodes * question class of 'rdclass' and type 'type'. 273135446Strhodes * 274135446Strhodes * Notes: 275170222Sdougb *\li Question rdatasets have a class and type, but no rdata. 276135446Strhodes * 277135446Strhodes * Requires: 278170222Sdougb *\li 'rdataset' is a valid, disassociated rdataset. 279135446Strhodes * 280135446Strhodes * Ensures: 281170222Sdougb *\li 'rdataset' is a valid, associated, question rdataset. 282135446Strhodes */ 283135446Strhodes 284135446Strhodesvoid 285135446Strhodesdns_rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target); 286170222Sdougb/*%< 287135446Strhodes * Make 'target' refer to the same rdataset as 'source'. 288135446Strhodes * 289135446Strhodes * Requires: 290170222Sdougb *\li 'source' is a valid, associated rdataset. 291135446Strhodes * 292170222Sdougb *\li 'target' is a valid, dissociated rdataset. 293135446Strhodes * 294135446Strhodes * Ensures: 295170222Sdougb *\li 'target' references the same rdataset as 'source'. 296135446Strhodes */ 297135446Strhodes 298135446Strhodesunsigned int 299135446Strhodesdns_rdataset_count(dns_rdataset_t *rdataset); 300170222Sdougb/*%< 301135446Strhodes * Return the number of records in 'rdataset'. 302135446Strhodes * 303135446Strhodes * Requires: 304170222Sdougb *\li 'rdataset' is a valid, associated rdataset. 305135446Strhodes * 306135446Strhodes * Returns: 307170222Sdougb *\li The number of records in 'rdataset'. 308135446Strhodes */ 309135446Strhodes 310135446Strhodesisc_result_t 311135446Strhodesdns_rdataset_first(dns_rdataset_t *rdataset); 312170222Sdougb/*%< 313135446Strhodes * Move the rdata cursor to the first rdata in the rdataset (if any). 314135446Strhodes * 315135446Strhodes * Requires: 316170222Sdougb *\li 'rdataset' is a valid, associated rdataset. 317135446Strhodes * 318135446Strhodes * Returns: 319170222Sdougb *\li #ISC_R_SUCCESS 320170222Sdougb *\li #ISC_R_NOMORE There are no rdata in the set. 321135446Strhodes */ 322135446Strhodes 323135446Strhodesisc_result_t 324135446Strhodesdns_rdataset_next(dns_rdataset_t *rdataset); 325170222Sdougb/*%< 326135446Strhodes * Move the rdata cursor to the next rdata in the rdataset (if any). 327135446Strhodes * 328135446Strhodes * Requires: 329170222Sdougb *\li 'rdataset' is a valid, associated rdataset. 330135446Strhodes * 331135446Strhodes * Returns: 332170222Sdougb *\li #ISC_R_SUCCESS 333170222Sdougb *\li #ISC_R_NOMORE There are no more rdata in the set. 334135446Strhodes */ 335135446Strhodes 336135446Strhodesvoid 337135446Strhodesdns_rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata); 338170222Sdougb/*%< 339135446Strhodes * Make 'rdata' refer to the current rdata. 340135446Strhodes * 341135446Strhodes * Notes: 342135446Strhodes * 343170222Sdougb *\li The data returned in 'rdata' is valid for the life of the 344135446Strhodes * rdataset; in particular, subsequent changes in the cursor position 345135446Strhodes * do not invalidate 'rdata'. 346135446Strhodes * 347135446Strhodes * Requires: 348170222Sdougb *\li 'rdataset' is a valid, associated rdataset. 349135446Strhodes * 350170222Sdougb *\li The rdata cursor of 'rdataset' is at a valid location (i.e. the 351135446Strhodes * result of last call to a cursor movement command was ISC_R_SUCCESS). 352135446Strhodes * 353135446Strhodes * Ensures: 354170222Sdougb *\li 'rdata' refers to the rdata at the rdata cursor location of 355170222Sdougb *\li 'rdataset'. 356135446Strhodes */ 357135446Strhodes 358135446Strhodesisc_result_t 359135446Strhodesdns_rdataset_totext(dns_rdataset_t *rdataset, 360135446Strhodes dns_name_t *owner_name, 361135446Strhodes isc_boolean_t omit_final_dot, 362135446Strhodes isc_boolean_t question, 363135446Strhodes isc_buffer_t *target); 364170222Sdougb/*%< 365135446Strhodes * Convert 'rdataset' to text format, storing the result in 'target'. 366135446Strhodes * 367135446Strhodes * Notes: 368170222Sdougb *\li The rdata cursor position will be changed. 369135446Strhodes * 370193149Sdougb *\li The 'question' flag should normally be #ISC_FALSE. If it is 371193149Sdougb * #ISC_TRUE, the TTL and rdata fields are not printed. This is 372135446Strhodes * for use when printing an rdata representing a question section. 373135446Strhodes * 374170222Sdougb *\li This interface is deprecated; use dns_master_rdatasettottext() 375135446Strhodes * and/or dns_master_questiontotext() instead. 376135446Strhodes * 377135446Strhodes * Requires: 378170222Sdougb *\li 'rdataset' is a valid rdataset. 379135446Strhodes * 380170222Sdougb *\li 'rdataset' is not empty. 381135446Strhodes */ 382135446Strhodes 383135446Strhodesisc_result_t 384135446Strhodesdns_rdataset_towire(dns_rdataset_t *rdataset, 385135446Strhodes dns_name_t *owner_name, 386135446Strhodes dns_compress_t *cctx, 387135446Strhodes isc_buffer_t *target, 388135446Strhodes unsigned int options, 389135446Strhodes unsigned int *countp); 390170222Sdougb/*%< 391135446Strhodes * Convert 'rdataset' to wire format, compressing names as specified 392135446Strhodes * in 'cctx', and storing the result in 'target'. 393135446Strhodes * 394135446Strhodes * Notes: 395170222Sdougb *\li The rdata cursor position will be changed. 396135446Strhodes * 397170222Sdougb *\li The number of RRs added to target will be added to *countp. 398135446Strhodes * 399135446Strhodes * Requires: 400170222Sdougb *\li 'rdataset' is a valid rdataset. 401135446Strhodes * 402170222Sdougb *\li 'rdataset' is not empty. 403135446Strhodes * 404170222Sdougb *\li 'countp' is a valid pointer. 405135446Strhodes * 406135446Strhodes * Ensures: 407170222Sdougb *\li On a return of ISC_R_SUCCESS, 'target' contains a wire format 408135446Strhodes * for the data contained in 'rdataset'. Any error return leaves 409135446Strhodes * the buffer unchanged. 410135446Strhodes * 411170222Sdougb *\li *countp has been incremented by the number of RRs added to 412135446Strhodes * target. 413135446Strhodes * 414135446Strhodes * Returns: 415170222Sdougb *\li #ISC_R_SUCCESS - all ok 416170222Sdougb *\li #ISC_R_NOSPACE - 'target' doesn't have enough room 417135446Strhodes * 418170222Sdougb *\li Any error returned by dns_rdata_towire(), dns_rdataset_next(), 419135446Strhodes * dns_name_towire(). 420135446Strhodes */ 421135446Strhodes 422135446Strhodesisc_result_t 423135446Strhodesdns_rdataset_towiresorted(dns_rdataset_t *rdataset, 424165071Sdougb const dns_name_t *owner_name, 425135446Strhodes dns_compress_t *cctx, 426135446Strhodes isc_buffer_t *target, 427135446Strhodes dns_rdatasetorderfunc_t order, 428165071Sdougb const void *order_arg, 429135446Strhodes unsigned int options, 430135446Strhodes unsigned int *countp); 431170222Sdougb/*%< 432135446Strhodes * Like dns_rdataset_towire(), but sorting the rdatasets according to 433193149Sdougb * the integer value returned by 'order' when called with the rdataset 434135446Strhodes * and 'order_arg' as arguments. 435135446Strhodes * 436135446Strhodes * Requires: 437170222Sdougb *\li All the requirements of dns_rdataset_towire(), and 438135446Strhodes * that order_arg is NULL if and only if order is NULL. 439135446Strhodes */ 440135446Strhodes 441135446Strhodesisc_result_t 442135446Strhodesdns_rdataset_towirepartial(dns_rdataset_t *rdataset, 443165071Sdougb const dns_name_t *owner_name, 444135446Strhodes dns_compress_t *cctx, 445135446Strhodes isc_buffer_t *target, 446135446Strhodes dns_rdatasetorderfunc_t order, 447165071Sdougb const void *order_arg, 448135446Strhodes unsigned int options, 449135446Strhodes unsigned int *countp, 450135446Strhodes void **state); 451170222Sdougb/*%< 452135446Strhodes * Like dns_rdataset_towiresorted() except that a partial rdataset 453135446Strhodes * may be written. 454135446Strhodes * 455135446Strhodes * Requires: 456170222Sdougb *\li All the requirements of dns_rdataset_towiresorted(). 457135446Strhodes * If 'state' is non NULL then the current position in the 458135446Strhodes * rdataset will be remembered if the rdataset in not 459135446Strhodes * completely written and should be passed on on subsequent 460135446Strhodes * calls (NOT CURRENTLY IMPLEMENTED). 461135446Strhodes * 462135446Strhodes * Returns: 463170222Sdougb *\li #ISC_R_SUCCESS if all of the records were written. 464170222Sdougb *\li #ISC_R_NOSPACE if unable to fit in all of the records. *countp 465135446Strhodes * will be updated to reflect the number of records 466135446Strhodes * written. 467135446Strhodes */ 468135446Strhodes 469135446Strhodesisc_result_t 470135446Strhodesdns_rdataset_additionaldata(dns_rdataset_t *rdataset, 471135446Strhodes dns_additionaldatafunc_t add, void *arg); 472170222Sdougb/*%< 473135446Strhodes * For each rdata in rdataset, call 'add' for each name and type in the 474135446Strhodes * rdata which is subject to additional section processing. 475135446Strhodes * 476135446Strhodes * Requires: 477135446Strhodes * 478170222Sdougb *\li 'rdataset' is a valid, non-question rdataset. 479135446Strhodes * 480170222Sdougb *\li 'add' is a valid dns_additionaldatafunc_t 481135446Strhodes * 482135446Strhodes * Ensures: 483135446Strhodes * 484170222Sdougb *\li If successful, dns_rdata_additionaldata() will have been called for 485135446Strhodes * each rdata in 'rdataset'. 486135446Strhodes * 487170222Sdougb *\li If a call to dns_rdata_additionaldata() is not successful, the 488135446Strhodes * result returned will be the result of dns_rdataset_additionaldata(). 489135446Strhodes * 490135446Strhodes * Returns: 491135446Strhodes * 492170222Sdougb *\li #ISC_R_SUCCESS 493135446Strhodes * 494170222Sdougb *\li Any error that dns_rdata_additionaldata() can return. 495135446Strhodes */ 496135446Strhodes 497135446Strhodesisc_result_t 498135446Strhodesdns_rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, 499193149Sdougb dns_rdataset_t *neg, dns_rdataset_t *negsig); 500170222Sdougb/*%< 501135446Strhodes * Return the noqname proof for this record. 502135446Strhodes * 503135446Strhodes * Requires: 504170222Sdougb *\li 'rdataset' to be valid and #DNS_RDATASETATTR_NOQNAME to be set. 505170222Sdougb *\li 'name' to be valid. 506193149Sdougb *\li 'neg' and 'negsig' to be valid and not associated. 507135446Strhodes */ 508135446Strhodes 509135446Strhodesisc_result_t 510135446Strhodesdns_rdataset_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name); 511170222Sdougb/*%< 512135446Strhodes * Associate a noqname proof with this record. 513170222Sdougb * Sets #DNS_RDATASETATTR_NOQNAME if successful. 514135446Strhodes * Adjusts the 'rdataset->ttl' to minimum of the 'rdataset->ttl' and 515193149Sdougb * the 'nsec'/'nsec3' and 'rrsig(nsec)'/'rrsig(nsec3)' ttl. 516135446Strhodes * 517135446Strhodes * Requires: 518170222Sdougb *\li 'rdataset' to be valid and #DNS_RDATASETATTR_NOQNAME to be set. 519193149Sdougb *\li 'name' to be valid and have NSEC or NSEC3 and associated RRSIG 520193149Sdougb * rdatasets. 521135446Strhodes */ 522135446Strhodes 523170222Sdougbisc_result_t 524193149Sdougbdns_rdataset_getclosest(dns_rdataset_t *rdataset, dns_name_t *name, 525193149Sdougb dns_rdataset_t *nsec, dns_rdataset_t *nsecsig); 526193149Sdougb/*%< 527193149Sdougb * Return the closest encloser for this record. 528193149Sdougb * 529193149Sdougb * Requires: 530193149Sdougb *\li 'rdataset' to be valid and #DNS_RDATASETATTR_CLOSEST to be set. 531193149Sdougb *\li 'name' to be valid. 532193149Sdougb *\li 'nsec' and 'nsecsig' to be valid and not associated. 533193149Sdougb */ 534193149Sdougb 535193149Sdougbisc_result_t 536193149Sdougbdns_rdataset_addclosest(dns_rdataset_t *rdataset, dns_name_t *name); 537193149Sdougb/*%< 538193149Sdougb * Associate a closest encloset proof with this record. 539193149Sdougb * Sets #DNS_RDATASETATTR_CLOSEST if successful. 540193149Sdougb * Adjusts the 'rdataset->ttl' to minimum of the 'rdataset->ttl' and 541193149Sdougb * the 'nsec' and 'rrsig(nsec)' ttl. 542193149Sdougb * 543193149Sdougb * Requires: 544193149Sdougb *\li 'rdataset' to be valid and #DNS_RDATASETATTR_CLOSEST to be set. 545193149Sdougb *\li 'name' to be valid and have NSEC3 and RRSIG(NSEC3) rdatasets. 546193149Sdougb */ 547193149Sdougb 548193149Sdougbisc_result_t 549170222Sdougbdns_rdataset_getadditional(dns_rdataset_t *rdataset, 550170222Sdougb dns_rdatasetadditional_t type, 551170222Sdougb dns_rdatatype_t qtype, 552170222Sdougb dns_acache_t *acache, 553170222Sdougb dns_zone_t **zonep, 554170222Sdougb dns_db_t **dbp, 555170222Sdougb dns_dbversion_t **versionp, 556170222Sdougb dns_dbnode_t **nodep, 557170222Sdougb dns_name_t *fname, 558170222Sdougb dns_message_t *msg, 559170222Sdougb isc_stdtime_t now); 560170222Sdougb/*%< 561170222Sdougb * Get cached additional information from the DB node for a particular 562170222Sdougb * 'rdataset.' 'type' is one of dns_rdatasetadditional_fromauth, 563170222Sdougb * dns_rdatasetadditional_fromcache, and dns_rdatasetadditional_fromglue, 564170222Sdougb * which specifies the origin of the information. 'qtype' is intended to 565170222Sdougb * be used for specifying a particular rdata type in the cached information. 566170222Sdougb * 567170222Sdougb * Requires: 568170222Sdougb * \li 'rdataset' is a valid rdataset. 569170222Sdougb * \li 'acache' can be NULL, in which case this function will simply return 570170222Sdougb * ISC_R_FAILURE. 571170222Sdougb * \li For the other pointers, see dns_acache_getentry(). 572170222Sdougb * 573170222Sdougb * Ensures: 574170222Sdougb * \li See dns_acache_getentry(). 575170222Sdougb * 576170222Sdougb * Returns: 577170222Sdougb * \li #ISC_R_SUCCESS 578170222Sdougb * \li #ISC_R_FAILURE - additional information caching is not supported. 579170222Sdougb * \li #ISC_R_NOTFOUND - the corresponding DB node has not cached additional 580170222Sdougb * information for 'rdataset.' 581170222Sdougb * \li Any error that dns_acache_getentry() can return. 582170222Sdougb */ 583170222Sdougb 584170222Sdougbisc_result_t 585170222Sdougbdns_rdataset_setadditional(dns_rdataset_t *rdataset, 586170222Sdougb dns_rdatasetadditional_t type, 587170222Sdougb dns_rdatatype_t qtype, 588170222Sdougb dns_acache_t *acache, 589170222Sdougb dns_zone_t *zone, 590170222Sdougb dns_db_t *db, 591170222Sdougb dns_dbversion_t *version, 592170222Sdougb dns_dbnode_t *node, 593170222Sdougb dns_name_t *fname); 594170222Sdougb/*%< 595170222Sdougb * Set cached additional information to the DB node for a particular 596170222Sdougb * 'rdataset.' See dns_rdataset_getadditional for the semantics of 'type' 597170222Sdougb * and 'qtype'. 598170222Sdougb * 599170222Sdougb * Requires: 600170222Sdougb * \li 'rdataset' is a valid rdataset. 601170222Sdougb * \li 'acache' can be NULL, in which case this function will simply return 602170222Sdougb * ISC_R_FAILURE. 603170222Sdougb * \li For the other pointers, see dns_acache_setentry(). 604170222Sdougb * 605170222Sdougb * Ensures: 606170222Sdougb * \li See dns_acache_setentry(). 607170222Sdougb * 608170222Sdougb * Returns: 609170222Sdougb * \li #ISC_R_SUCCESS 610170222Sdougb * \li #ISC_R_FAILURE - additional information caching is not supported. 611170222Sdougb * \li #ISC_R_NOMEMORY 612170222Sdougb * \li Any error that dns_acache_setentry() can return. 613170222Sdougb */ 614170222Sdougb 615170222Sdougbisc_result_t 616170222Sdougbdns_rdataset_putadditional(dns_acache_t *acache, 617170222Sdougb dns_rdataset_t *rdataset, 618170222Sdougb dns_rdatasetadditional_t type, 619170222Sdougb dns_rdatatype_t qtype); 620170222Sdougb/*%< 621170222Sdougb * Discard cached additional information stored in the DB node for a particular 622170222Sdougb * 'rdataset.' See dns_rdataset_getadditional for the semantics of 'type' 623170222Sdougb * and 'qtype'. 624170222Sdougb * 625170222Sdougb * Requires: 626170222Sdougb * \li 'rdataset' is a valid rdataset. 627170222Sdougb * \li 'acache' can be NULL, in which case this function will simply return 628170222Sdougb * ISC_R_FAILURE. 629170222Sdougb * 630170222Sdougb * Ensures: 631170222Sdougb * \li See dns_acache_cancelentry(). 632170222Sdougb * 633170222Sdougb * Returns: 634170222Sdougb * \li #ISC_R_SUCCESS 635170222Sdougb * \li #ISC_R_FAILURE - additional information caching is not supported. 636170222Sdougb * \li #ISC_R_NOTFOUND - the corresponding DB node has not cached additional 637170222Sdougb * information for 'rdataset.' 638170222Sdougb */ 639170222Sdougb 640205292Sdougbvoid 641205292Sdougbdns_rdataset_settrust(dns_rdataset_t *rdataset, dns_trust_t trust); 642205292Sdougb/*%< 643205292Sdougb * Set the trust of the 'rdataset' to trust in any in the backing database. 644205292Sdougb * The local trust level of 'rdataset' is also set. 645205292Sdougb */ 646205292Sdougb 647205292Sdougbvoid 648205292Sdougbdns_rdataset_expire(dns_rdataset_t *rdataset); 649205292Sdougb/*%< 650205292Sdougb * Mark the rdataset to be expired in the backing database. 651205292Sdougb */ 652205292Sdougb 653222395Sdougbconst char * 654222395Sdougbdns_trust_totext(dns_trust_t trust); 655222395Sdougb/*%< 656222395Sdougb * Display trust in textual form. 657222395Sdougb */ 658222395Sdougb 659135446StrhodesISC_LANG_ENDDECLS 660135446Strhodes 661135446Strhodes#endif /* DNS_RDATASET_H */ 662