Skip to content
Snippets Groups Projects
Commit bd4cc048 authored by Daniel Salzman's avatar Daniel Salzman
Browse files

Refactored descriptors

refs #2063 @2h
parent 74793b3d
No related branches found
No related tags found
No related merge requests found
#include "common/descriptor_new.h"
/*! \brief RR type descriptors. */
static knot_descriptor_t
knot_descriptors[] = {
{ 0, { KNOT_RDATA_WF_REMAINDER }},
/* 1 */
{ KNOT_RRTYPE_A, { 4 }},
/* 2 */
{ KNOT_RRTYPE_NS, { KNOT_RDATA_WF_COMPRESSED_DNAME }},
/* 3 */
{ KNOT_RRTYPE_CNAME, { KNOT_RDATA_WF_COMPRESSED_DNAME }},
/* 6 */
[6] = { KNOT_RRTYPE_SOA,
{ KNOT_RDATA_WF_COMPRESSED_DNAME, KNOT_RDATA_WF_COMPRESSED_DNAME,
20 }},
/* 7 */
{ KNOT_RRTYPE_PTR, { KNOT_RDATA_WF_COMPRESSED_DNAME }},
/* 13 */
[13] = { KNOT_RRTYPE_HINFO, { KNOT_RDATA_WF_REMAINDER }},
/* 14 */
{ KNOT_RRTYPE_MINFO, { KNOT_RDATA_WF_COMPRESSED_DNAME,
KNOT_RDATA_WF_COMPRESSED_DNAME }},
/* 15 */
{ KNOT_RRTYPE_MX, { 2, KNOT_RDATA_WF_COMPRESSED_DNAME }},
/* 16 */
{ KNOT_RRTYPE_TXT,{ KNOT_RDATA_WF_REMAINDER }},
/* 17 */
{ KNOT_RRTYPE_RP, { KNOT_RDATA_WF_COMPRESSED_DNAME,
KNOT_RDATA_WF_COMPRESSED_DNAME }},
/* 18 */
{ KNOT_RRTYPE_AFSDB, { 2, KNOT_RDATA_WF_COMPRESSED_DNAME }},
/* 19 */
{ KNOT_RRTYPE_AAAA, { 16 }},
/* 29 */
[29] = { KNOT_RRTYPE_LOC, { KNOT_RDATA_WF_REMAINDER }},
[33] = { KNOT_RRTYPE_SRV, { 6, KNOT_RDATA_WF_UNCOMPRESSED_DNAME }},
[35] = { KNOT_RRTYPE_NAPTR, { KNOT_RDATA_WF_NAPTR_HEADER,
KNOT_RDATA_WF_UNCOMPRESSED_DNAME }},
/* 37 */
[37] = { KNOT_RRTYPE_CERT,
{ 5, KNOT_RDATA_WF_REMAINDER }},
/* 38 */
{ KNOT_RRTYPE_DNAME, { KNOT_RDATA_WF_UNCOMPRESSED_DNAME }},
/* 40 */
[40] = { KNOT_RRTYPE_OPT, { KNOT_RDATA_WF_REMAINDER }},
/* 42 */
[42] = { KNOT_RRTYPE_APL, { KNOT_RDATA_WF_REMAINDER }},
/* 43 */
{ KNOT_RRTYPE_DS,
{ 4, KNOT_RDATA_WF_REMAINDER }},
/* 44 */
{ KNOT_RRTYPE_SSHFP,{ 2,
KNOT_RDATA_WF_REMAINDER }},
/* 45 */
{ KNOT_RRTYPE_IPSECKEY,
{ 2, KNOT_RDATA_WF_REMAINDER }},
/* 46 */
{ KNOT_RRTYPE_RRSIG, { 20, KNOT_RDATA_WF_LITERAL_DNAME,
KNOT_RDATA_WF_REMAINDER }},
/* 47 */
{ KNOT_RRTYPE_NSEC,
{ KNOT_RDATA_WF_LITERAL_DNAME, KNOT_RDATA_WF_REMAINDER }},
/* 48 */
{ KNOT_RRTYPE_DNSKEY, { 4, KNOT_RDATA_WF_REMAINDER }},
/* 49 */
{ KNOT_RRTYPE_DHCID, { KNOT_RDATA_WF_REMAINDER }},
/* 50 */
{ KNOT_RRTYPE_NSEC3, { 4, KNOT_RDATA_WF_REMAINDER }},
/* 51 */
{ KNOT_RRTYPE_NSEC3PARAM, { 4, KNOT_RDATA_WF_REMAINDER }},
/* 52 */
{ KNOT_RRTYPE_TLSA, { 3, KNOT_RDATA_WF_REMAINDER }},
/* 99 */
[99] = { KNOT_RRTYPE_SPF,
{ KNOT_RDATA_WF_REMAINDER }},
/* TSIG pseudo RR. */
[250] = { KNOT_RRTYPE_TSIG,
{ KNOT_RDATA_WF_UNCOMPRESSED_DNAME, KNOT_RDATA_WF_REMAINDER }}
/*!
* \brief RR type descriptors.
*/
static const knot_descriptor_t knot_descriptors[] = {
[KNOT_RRTYPE_A] = { 4 },
[KNOT_RRTYPE_NS] = { KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_CNAME] = { KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_SOA] = { KNOT_RDATA_WF_COMPRESSED_DNAME,
KNOT_RDATA_WF_COMPRESSED_DNAME,
20 },
[KNOT_RRTYPE_PTR] = { KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_HINFO] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_MINFO] = { KNOT_RDATA_WF_COMPRESSED_DNAME,
KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_MX] = { 2, KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_TXT] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_RP] = { KNOT_RDATA_WF_COMPRESSED_DNAME,
KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_AFSDB] = { 2, KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_RT] = { 2, KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_KEY] = { 4, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_AAAA] = { 16 },
[KNOT_RRTYPE_LOC] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_SRV] = { 6, KNOT_RDATA_WF_UNCOMPRESSED_DNAME },
[KNOT_RRTYPE_NAPTR] = { KNOT_RDATA_WF_NAPTR_HEADER,
KNOT_RDATA_WF_UNCOMPRESSED_DNAME },
[KNOT_RRTYPE_KX] = { 2, KNOT_RDATA_WF_COMPRESSED_DNAME },
[KNOT_RRTYPE_CERT] = { 5, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_DNAME] = { KNOT_RDATA_WF_UNCOMPRESSED_DNAME },
[KNOT_RRTYPE_OPT] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_APL] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_DS] = { 4, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_SSHFP] = { 2, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_IPSECKEY] = { 2, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_RRSIG] = { 20, KNOT_RDATA_WF_LITERAL_DNAME,
KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_NSEC] = { KNOT_RDATA_WF_LITERAL_DNAME,
KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_DNSKEY] = { 4, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_DHCID] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_NSEC3] = { 4, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_NSEC3PARAM] = { 4, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_TLSA] = { 3, KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_SPF] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_TKEY] = { KNOT_RDATA_WF_REMAINDER },
[KNOT_RRTYPE_TSIG] = { KNOT_RDATA_WF_UNCOMPRESSED_DNAME,
KNOT_RDATA_WF_REMAINDER },
};
knot_descriptor_t *knot_descriptor_by_type(uint16_t type)
const knot_descriptor_t *knot_descriptor_by_type(const uint16_t type)
{
if (type <= KNOT_RRTYPE_TSIG) {
return &knot_descriptors[type];
} else {
return &knot_descriptors[0];
}
if (type <= KNOT_RRTYPE_TSIG) {
return &knot_descriptors[type];
} else {
return &knot_descriptors[0];
}
}
int knot_rrtype_is_metatype(uint16_t type)
{
return (type == KNOT_RRTYPE_ANY
|| type == KNOT_RRTYPE_AXFR
|| type == KNOT_RRTYPE_IXFR
|| type == KNOT_RRTYPE_OPT);
return (type == KNOT_RRTYPE_ANY
|| type == KNOT_RRTYPE_AXFR
|| type == KNOT_RRTYPE_IXFR
|| type == KNOT_RRTYPE_OPT);
}
/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*!
* \file descriptor_new.h
*
* \author Jan Kadlec <jan.kadlec@nic.cz>,
*
* \author Jan Kadlec <jan.kadlec@nic.cz>
*
* @{
*/
......@@ -15,77 +30,93 @@
* \brief Resource record class codes.
*/
enum knot_rr_class {
KNOT_CLASS_IN = 1,
KNOT_CLASS_NONE = 254,
KNOT_CLASS_ANY = 255
KNOT_CLASS_IN = 1,
KNOT_CLASS_NONE = 254,
KNOT_CLASS_ANY = 255,
};
/*!
* \brief Resource record type constants.
*/
enum knot_rr_type {
KNOT_RRTYPE_A, /*!< 1 - a host address */
KNOT_RRTYPE_NS, /*!< 2 - an authoritative name server */
KNOT_RRTYPE_CNAME = 5, /*!< 5 - the canonical name for an alias */
KNOT_RRTYPE_SOA, /*!< 6 - marks the start of a zone of authority */
KNOT_RRTYPE_PTR = 12, /*!< 12 - a domain name pointer */
KNOT_RRTYPE_HINFO, /*!< 13 - host information */
KNOT_RRTYPE_MINFO, /*!< 14 - mailbox or mail list information */
KNOT_RRTYPE_MX, /*!< 15 - mail exchange */
KNOT_RRTYPE_TXT, /*!< 16 - text strings */
KNOT_RRTYPE_RP, /*!< 17 - Responsible person. */
KNOT_RRTYPE_AFSDB, /*!< 18 - RFC1183 */
KNOT_RRTYPE_NSAP = 22, /*!< 22 - RFC1706 */
KNOT_RRTYPE_AAAA = 28, /*!< 28 - ipv6 address */
KNOT_RRTYPE_LOC, /*!< 29 - LOC record RFC1876 */
KNOT_RRTYPE_SRV = 33, /*!< 33 - SRV record RFC2782 */
KNOT_RRTYPE_NAPTR = 35, /*!< 35 - RFC2915 */
KNOT_RRTYPE_KX, /*!< 36 - RFC2230 Key Exchange Delegation Record */
KNOT_RRTYPE_CERT, /*!< 37 - RFC2538 */
KNOT_RRTYPE_DNAME = 39, /*!< 39 - RFC2672 */
KNOT_RRTYPE_OPT = 41, /*!< 41 - Pseudo OPT record... */
KNOT_RRTYPE_APL, /*!< 42 - RFC3123 */
KNOT_RRTYPE_DS, /*!< 43 - RFC 4033, 4034, and 4035 */
KNOT_RRTYPE_SSHFP, /*!< 44 - SSH Key Fingerprint */
KNOT_RRTYPE_IPSECKEY, /*!< 45 - public key for ipsec use. RFC 4025 */
KNOT_RRTYPE_RRSIG, /*!< 46 - RFC 4033, 4034, and 4035 */
KNOT_RRTYPE_NSEC, /*!< 47 - RFC 4033, 4034, and 4035 */
KNOT_RRTYPE_DNSKEY, /*!< 48 - RFC 4033, 4034, and 4035 */
KNOT_RRTYPE_DHCID, /*!< 49 - RFC4701 DHCP information */
KNOT_RRTYPE_NSEC3, /*!< 50 - NSEC3, secure denial */
KNOT_RRTYPE_NSEC3PARAM, /*!< 51 - nsec3 parameters */
KNOT_RRTYPE_TLSA = 52, /*!< DANE */
KNOT_RRTYPE_SPF = 99, /*!< RFC 4408 */
KNOT_RRTYPE_TSIG = 250, /*!< TSIG - RFC2845. */
KNOT_RRTYPE_IXFR = 251, /*!< IXFR (not an actual RR). */
KNOT_RRTYPE_AXFR = 252, /*!< AXFR (not an actual RR). */
KNOT_RRTYPE_ANY = 255, /*!< any type (wildcard) */
KNOT_RRTYPE_A = 1, /*!< an IPv4 host address */
KNOT_RRTYPE_NS = 2, /*!< an authoritative name server */
KNOT_RRTYPE_CNAME = 5, /*!< the canonical name for an alias */
KNOT_RRTYPE_SOA = 6, /*!< the start of a zone of authority */
KNOT_RRTYPE_PTR = 12, /*!< a domain name pointer */
KNOT_RRTYPE_HINFO = 13, /*!< a host information */
KNOT_RRTYPE_MINFO = 14, /*!< a mailbox or mail list information */
KNOT_RRTYPE_MX = 15, /*!< mail exchange */
KNOT_RRTYPE_TXT = 16, /*!< text strings */
KNOT_RRTYPE_RP = 17, /*!< for responsible person */
KNOT_RRTYPE_AFSDB = 18, /*!< for AFS Data Base location */
KNOT_RRTYPE_RT = 21, /*!< for route through */
KNOT_RRTYPE_KEY = 25, /*!< for security key */
KNOT_RRTYPE_AAAA = 28, /*!< IPv6 address */
KNOT_RRTYPE_LOC = 29, /*!< location information */
KNOT_RRTYPE_SRV = 33, /*!< server selection2 */
KNOT_RRTYPE_NAPTR = 35, /*!< naming authority pointer */
KNOT_RRTYPE_KX = 36, /*!< key exchanger */
KNOT_RRTYPE_CERT = 37, /*!< certificate record */
KNOT_RRTYPE_DNAME = 39, /*!< delegation name */
KNOT_RRTYPE_OPT = 41, /*!< option for EDNS*/
KNOT_RRTYPE_APL = 42, /*!< address prefix list */
KNOT_RRTYPE_DS = 43, /*!< delegation signer */
KNOT_RRTYPE_SSHFP = 44, /*!< SSH public key fingerprint */
KNOT_RRTYPE_IPSECKEY = 45, /*!< IPSEC key */
KNOT_RRTYPE_RRSIG = 46, /*!< DNSSEC signature */
KNOT_RRTYPE_NSEC = 47, /*!< next-secure record */
KNOT_RRTYPE_DNSKEY = 48, /*!< DNS key */
KNOT_RRTYPE_DHCID = 49, /*!< DHCP identifier */
KNOT_RRTYPE_NSEC3 = 50, /*!< NSEC version 3 */
KNOT_RRTYPE_NSEC3PARAM = 51, /*!< NSEC3 parameters */
KNOT_RRTYPE_TLSA = 52, /*!< DANE */
KNOT_RRTYPE_SPF = 99, /*!< sender policy framework */
KNOT_RRTYPE_TKEY = 249, /*!< secret key for TSIG */
KNOT_RRTYPE_TSIG = 250, /*!< transaction signature */
KNOT_RRTYPE_IXFR = 251, /*!< incremental zone transfer */
KNOT_RRTYPE_AXFR = 252, /*!< authoritative zone transfer */
KNOT_RRTYPE_ANY = 255, /*!< any record */
};
/*! \brief Constants characterising the wire format of RDATA items. */
/*!
* \brief Constants characterising the wire format of RDATA items.
*/
enum knot_rdata_wireformat {
/*!
* \brief Possibly compressed domain name.
*/
KNOT_RDATA_WF_COMPRESSED_DNAME = -100,
KNOT_RDATA_WF_UNCOMPRESSED_DNAME, /*!< Uncompressed domain name. */
KNOT_RDATA_WF_LITERAL_DNAME, /*!< Literal (not downcased) dname. */
KNOT_RDATA_WF_NAPTR_HEADER,
KNOT_RDATA_WF_REMAINDER,
KNOT_RDATA_WF_COMPRESSED_DNAME = -102, /*!< Possibly compressed dname. */
KNOT_RDATA_WF_UNCOMPRESSED_DNAME = -101, /*!< Uncompressed dname. */
KNOT_RDATA_WF_LITERAL_DNAME = -100, /*!< Dname with preserved case. */
KNOT_RDATA_WF_NAPTR_HEADER,
KNOT_RDATA_WF_REMAINDER,
};
struct knot_descriptor {
uint16_t type;
int wire[16];
};
/*!
* \brief Array which describes record structure.
*/
typedef int knot_descriptor_t[8];
typedef struct knot_descriptor knot_descriptor_t;
/*!
* \brief Gets RR descriptor for given RR name.
*
* \param name Mnemonic of RR type whose descriptor should be returned.
*
* \return RR descriptor for given name, NULL descriptor if
* unknown type.
*/
const knot_descriptor_t *knot_descriptor_by_type(const uint16_t type);
#endif // _KNOT_DESCRIPTOR_NEW_H_
/*! @} */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment