6 * a Net::DNS like library for C
8 * (c) NLnet Labs, 2005-2006
10 * See the file LICENSE for the license
16 * Defines resource record types and constants.
26 /** Maximum length of a dname label */
27 #define LDNS_MAX_LABELLEN 63
28 /** Maximum length of a complete dname */
29 #define LDNS_MAX_DOMAINLEN 255
30 /** Maximum number of pointers in 1 dname */
31 #define LDNS_MAX_POINTERS 65535
32 /** The bytes TTL, CLASS and length use up in an rr */
33 #define LDNS_RR_OVERHEAD 10
35 #define LDNS_DNSSEC_KEYPROTO 3
36 #define LDNS_KEY_ZONE_KEY 0x0100 /* set for ZSK&KSK, rfc 4034 */
37 #define LDNS_KEY_SEP_KEY 0x0001 /* set for KSK, rfc 4034 */
38 #define LDNS_KEY_REVOKE_KEY 0x0080 /* used to revoke KSK, rfc 5011 */
40 /* The first fields are contiguous and can be referenced instantly */
41 #define LDNS_RDATA_FIELD_DESCRIPTORS_COMMON 258
43 /** lookuptable for rr classes */
44 extern struct sldns_struct_lookup_table
* sldns_rr_classes
;
47 * The different RR classes.
49 enum sldns_enum_rr_class
55 /** Hesiod (Dyer 87) */
57 /** None class, dynamic update */
58 LDNS_RR_CLASS_NONE
= 254,
60 LDNS_RR_CLASS_ANY
= 255,
62 LDNS_RR_CLASS_FIRST
= 0,
63 LDNS_RR_CLASS_LAST
= 65535,
64 LDNS_RR_CLASS_COUNT
= LDNS_RR_CLASS_LAST
- LDNS_RR_CLASS_FIRST
+ 1
66 typedef enum sldns_enum_rr_class sldns_rr_class
;
69 * Used to specify whether compression is allowed.
71 enum sldns_enum_rr_compress
73 /** compression is allowed */
77 typedef enum sldns_enum_rr_compress sldns_rr_compress
;
80 * The different RR types.
82 enum sldns_enum_rr_type
86 /** an authoritative name server */
88 /** a mail destination (Obsolete - use MX) */
90 /** a mail forwarder (Obsolete - use MX) */
92 /** the canonical name for an alias */
93 LDNS_RR_TYPE_CNAME
= 5,
94 /** marks the start of a zone of authority */
96 /** a mailbox domain name (EXPERIMENTAL) */
98 /** a mail group member (EXPERIMENTAL) */
100 /** a mail rename domain name (EXPERIMENTAL) */
102 /** a null RR (EXPERIMENTAL) */
103 LDNS_RR_TYPE_NULL
= 10,
104 /** a well known service description */
105 LDNS_RR_TYPE_WKS
= 11,
106 /** a domain name pointer */
107 LDNS_RR_TYPE_PTR
= 12,
108 /** host information */
109 LDNS_RR_TYPE_HINFO
= 13,
110 /** mailbox or mail list information */
111 LDNS_RR_TYPE_MINFO
= 14,
113 LDNS_RR_TYPE_MX
= 15,
115 LDNS_RR_TYPE_TXT
= 16,
117 LDNS_RR_TYPE_RP
= 17,
119 LDNS_RR_TYPE_AFSDB
= 18,
121 LDNS_RR_TYPE_X25
= 19,
123 LDNS_RR_TYPE_ISDN
= 20,
125 LDNS_RR_TYPE_RT
= 21,
127 LDNS_RR_TYPE_NSAP
= 22,
129 LDNS_RR_TYPE_NSAP_PTR
= 23,
131 LDNS_RR_TYPE_SIG
= 24,
133 LDNS_RR_TYPE_KEY
= 25,
135 LDNS_RR_TYPE_PX
= 26,
137 LDNS_RR_TYPE_GPOS
= 27,
139 LDNS_RR_TYPE_AAAA
= 28,
140 /** LOC record RFC1876 */
141 LDNS_RR_TYPE_LOC
= 29,
143 LDNS_RR_TYPE_NXT
= 30,
144 /** draft-ietf-nimrod-dns-01.txt */
145 LDNS_RR_TYPE_EID
= 31,
146 /** draft-ietf-nimrod-dns-01.txt */
147 LDNS_RR_TYPE_NIMLOC
= 32,
148 /** SRV record RFC2782 */
149 LDNS_RR_TYPE_SRV
= 33,
150 /** http://www.jhsoft.com/rfc/af-saa-0069.000.rtf */
151 LDNS_RR_TYPE_ATMA
= 34,
153 LDNS_RR_TYPE_NAPTR
= 35,
155 LDNS_RR_TYPE_KX
= 36,
157 LDNS_RR_TYPE_CERT
= 37,
159 LDNS_RR_TYPE_A6
= 38,
161 LDNS_RR_TYPE_DNAME
= 39,
162 /** dnsind-kitchen-sink-02.txt */
163 LDNS_RR_TYPE_SINK
= 40,
164 /** Pseudo OPT record... */
165 LDNS_RR_TYPE_OPT
= 41,
167 LDNS_RR_TYPE_APL
= 42,
168 /** RFC4034, RFC3658 */
169 LDNS_RR_TYPE_DS
= 43,
170 /** SSH Key Fingerprint */
171 LDNS_RR_TYPE_SSHFP
= 44, /* RFC 4255 */
173 LDNS_RR_TYPE_IPSECKEY
= 45, /* RFC 4025 */
175 LDNS_RR_TYPE_RRSIG
= 46, /* RFC 4034 */
176 LDNS_RR_TYPE_NSEC
= 47, /* RFC 4034 */
177 LDNS_RR_TYPE_DNSKEY
= 48, /* RFC 4034 */
179 LDNS_RR_TYPE_DHCID
= 49, /* RFC 4701 */
181 LDNS_RR_TYPE_NSEC3
= 50, /* RFC 5155 */
182 LDNS_RR_TYPE_NSEC3PARAM
= 51, /* RFC 5155 */
183 LDNS_RR_TYPE_NSEC3PARAMS
= 51,
184 LDNS_RR_TYPE_TLSA
= 52, /* RFC 6698 */
186 LDNS_RR_TYPE_HIP
= 55, /* RFC 5205 */
188 /** draft-reid-dnsext-zs */
189 LDNS_RR_TYPE_NINFO
= 56,
190 /** draft-reid-dnsext-rkey */
191 LDNS_RR_TYPE_RKEY
= 57,
192 /** draft-ietf-dnsop-trust-history */
193 LDNS_RR_TYPE_TALINK
= 58,
194 LDNS_RR_TYPE_CDS
= 59, /** RFC 7344 */
195 LDNS_RR_TYPE_CDNSKEY
= 60, /** RFC 7344 */
197 LDNS_RR_TYPE_SPF
= 99, /* RFC 4408 */
199 LDNS_RR_TYPE_UINFO
= 100,
200 LDNS_RR_TYPE_UID
= 101,
201 LDNS_RR_TYPE_GID
= 102,
202 LDNS_RR_TYPE_UNSPEC
= 103,
204 LDNS_RR_TYPE_NID
= 104, /* RFC 6742 */
205 LDNS_RR_TYPE_L32
= 105, /* RFC 6742 */
206 LDNS_RR_TYPE_L64
= 106, /* RFC 6742 */
207 LDNS_RR_TYPE_LP
= 107, /* RFC 6742 */
209 /** draft-jabley-dnsext-eui48-eui64-rrtypes */
210 LDNS_RR_TYPE_EUI48
= 108,
211 LDNS_RR_TYPE_EUI64
= 109,
213 LDNS_RR_TYPE_TKEY
= 249, /* RFC 2930 */
214 LDNS_RR_TYPE_TSIG
= 250,
215 LDNS_RR_TYPE_IXFR
= 251,
216 LDNS_RR_TYPE_AXFR
= 252,
217 /** A request for mailbox-related records (MB, MG or MR) */
218 LDNS_RR_TYPE_MAILB
= 253,
219 /** A request for mail agent RRs (Obsolete - see MX) */
220 LDNS_RR_TYPE_MAILA
= 254,
221 /** any type (wildcard) */
222 LDNS_RR_TYPE_ANY
= 255,
223 /** draft-faltstrom-uri-06 */
224 LDNS_RR_TYPE_URI
= 256,
225 LDNS_RR_TYPE_CAA
= 257, /* RFC 6844 */
227 /** DNSSEC Trust Authorities */
228 LDNS_RR_TYPE_TA
= 32768,
229 /* RFC 4431, 5074, DNSSEC Lookaside Validation */
230 LDNS_RR_TYPE_DLV
= 32769,
232 /* type codes from nsec3 experimental phase
233 LDNS_RR_TYPE_NSEC3 = 65324,
234 LDNS_RR_TYPE_NSEC3PARAMS = 65325, */
235 LDNS_RR_TYPE_FIRST
= 0,
236 LDNS_RR_TYPE_LAST
= 65535,
237 LDNS_RR_TYPE_COUNT
= LDNS_RR_TYPE_LAST
- LDNS_RR_TYPE_FIRST
+ 1
239 typedef enum sldns_enum_rr_type sldns_rr_type
;
242 #define LDNS_MAX_RDFLEN 65535
244 #define LDNS_RDF_SIZE_BYTE 1
245 #define LDNS_RDF_SIZE_WORD 2
246 #define LDNS_RDF_SIZE_DOUBLEWORD 4
247 #define LDNS_RDF_SIZE_6BYTES 6
248 #define LDNS_RDF_SIZE_8BYTES 8
249 #define LDNS_RDF_SIZE_16BYTES 16
251 #define LDNS_NSEC3_VARS_OPTOUT_MASK 0x01
253 #define LDNS_APL_IP4 1
254 #define LDNS_APL_IP6 2
255 #define LDNS_APL_MASK 0x7f
256 #define LDNS_APL_NEGATION 0x80
259 * The different types of RDATA fields.
261 enum sldns_enum_rdf_type
282 LDNS_RDF_TYPE_B32_EXT
,
287 /** nsec type codes */
293 /** certificate algorithm */
294 LDNS_RDF_TYPE_CERT_ALG
,
295 /** a key algorithm */
298 LDNS_RDF_TYPE_UNKNOWN
,
299 /** time (32 bits) */
302 LDNS_RDF_TYPE_PERIOD
,
303 /** tsig time 48 bits */
304 LDNS_RDF_TYPE_TSIGTIME
,
305 /** Represents the Public Key Algorithm, HIT and Public Key fields
306 for the HIP RR types. A HIP specific rdf type is used because of
307 the unusual layout in wireformat (see RFC 5205 Section 5) */
309 /** variable length any type rdata where the length
310 is specified by the first 2 bytes */
311 LDNS_RDF_TYPE_INT16_DATA
,
312 /** protocol and port bitmaps */
313 LDNS_RDF_TYPE_SERVICE
,
316 /** well known services */
323 LDNS_RDF_TYPE_IPSECKEY
,
324 /** nsec3 hash salt */
325 LDNS_RDF_TYPE_NSEC3_SALT
,
326 /** nsec3 base32 string (with length byte on wire */
327 LDNS_RDF_TYPE_NSEC3_NEXT_OWNER
,
329 /** 4 shorts represented as 4 * 16 bit hex numbers
330 * seperated by colons. For NID and L64.
332 LDNS_RDF_TYPE_ILNP64
,
334 /** 6 * 8 bit hex numbers seperated by dashes. For EUI48. */
336 /** 8 * 8 bit hex numbers seperated by dashes. For EUI64. */
339 /** A non-zero sequence of US-ASCII letters and numbers in lower case.
344 /** A <character-string> encoding of the value field as specified
345 * [RFC1035], Section 5.1., encoded as remaining rdata.
348 LDNS_RDF_TYPE_LONG_STR
,
351 LDNS_RDF_TYPE_BITMAP
= LDNS_RDF_TYPE_NSEC
353 typedef enum sldns_enum_rdf_type sldns_rdf_type
;
356 * Algorithms used in dns
358 enum sldns_enum_algorithm
360 LDNS_RSAMD5
= 1, /* RFC 4034,4035 */
366 LDNS_RSASHA1_NSEC3
= 7,
367 LDNS_RSASHA256
= 8, /* RFC 5702 */
368 LDNS_RSASHA512
= 10, /* RFC 5702 */
369 LDNS_ECC_GOST
= 12, /* RFC 5933 */
370 LDNS_ECDSAP256SHA256
= 13, /* RFC 6605 */
371 LDNS_ECDSAP384SHA384
= 14, /* RFC 6605 */
373 LDNS_PRIVATEDNS
= 253,
374 LDNS_PRIVATEOID
= 254
376 typedef enum sldns_enum_algorithm sldns_algorithm
;
379 * Hashing algorithms used in the DS record
383 LDNS_SHA1
= 1, /* RFC 4034 */
384 LDNS_SHA256
= 2, /* RFC 4509 */
385 LDNS_HASH_GOST
= 3, /* RFC 5933 */
386 LDNS_SHA384
= 4 /* RFC 6605 */
388 typedef enum sldns_enum_hash sldns_hash
;
391 * algorithms used in CERT rrs
393 enum sldns_enum_cert_algorithm
401 LDNS_CERT_ACPKIX
= 7,
402 LDNS_CERT_IACPKIX
= 8,
406 typedef enum sldns_enum_cert_algorithm sldns_cert_algorithm
;
411 enum sldns_enum_edns_option
413 LDNS_EDNS_LLQ
= 1, /* http://files.dns-sd.org/draft-sekar-dns-llq.txt */
414 LDNS_EDNS_UL
= 2, /* http://files.dns-sd.org/draft-sekar-dns-ul.txt */
415 LDNS_EDNS_NSID
= 3, /* RFC5001 */
416 /* 4 draft-cheshire-edns0-owner-option */
417 LDNS_EDNS_DAU
= 5, /* RFC6975 */
418 LDNS_EDNS_DHU
= 6, /* RFC6975 */
419 LDNS_EDNS_N3U
= 7, /* RFC6975 */
420 LDNS_EDNS_CLIENT_SUBNET
= 8 /* draft-vandergaast-edns-client-subnet */
422 typedef enum sldns_enum_edns_option sldns_edns_option
;
424 #define LDNS_EDNS_MASK_DO_BIT 0x8000
427 * Contains all information about resource record types.
429 * This structure contains, for all rr types, the rdata fields that are defined.
431 struct sldns_struct_rr_descriptor
433 /** Type of the RR that is described here */
435 /** Textual name of the RR type. */
437 /** Minimum number of rdata fields in the RRs of this type. */
439 /** Maximum number of rdata fields in the RRs of this type. */
441 /** Wireformat specification for the rr, i.e. the types of rdata fields in their respective order. */
442 const sldns_rdf_type
*_wireformat
;
443 /** Special rdf types */
444 sldns_rdf_type _variable
;
445 /** Specifies whether compression can be used for dnames in this RR type. */
446 sldns_rr_compress _compress
;
447 /** The number of DNAMEs in the _wireformat string, for parsing. */
448 uint8_t _dname_count
;
450 typedef struct sldns_struct_rr_descriptor sldns_rr_descriptor
;
453 * returns the resource record descriptor for the given rr type.
455 * \param[in] type the type value of the rr type
456 *\return the sldns_rr_descriptor for this type
458 const sldns_rr_descriptor
*sldns_rr_descript(uint16_t type
);
461 * returns the minimum number of rdata fields of the rr type this descriptor describes.
463 * \param[in] descriptor for an rr type
464 * \return the minimum number of rdata fields
466 size_t sldns_rr_descriptor_minimum(const sldns_rr_descriptor
*descriptor
);
469 * returns the maximum number of rdata fields of the rr type this descriptor describes.
471 * \param[in] descriptor for an rr type
472 * \return the maximum number of rdata fields
474 size_t sldns_rr_descriptor_maximum(const sldns_rr_descriptor
*descriptor
);
477 * returns the rdf type for the given rdata field number of the rr type for the given descriptor.
479 * \param[in] descriptor for an rr type
480 * \param[in] field the field number
481 * \return the rdf type for the field
483 sldns_rdf_type
sldns_rr_descriptor_field_type(const sldns_rr_descriptor
*descriptor
, size_t field
);
486 * retrieves a rrtype by looking up its name.
487 * \param[in] name a string with the name
488 * \return the type which corresponds with the name
490 sldns_rr_type
sldns_get_rr_type_by_name(const char *name
);
493 * retrieves a class by looking up its name.
494 * \param[in] name string with the name
495 * \return the cass which corresponds with the name
497 sldns_rr_class
sldns_get_rr_class_by_name(const char *name
);
503 #endif /* LDNS_RRDEF_H */