xref: /netbsd-src/external/bsd/nsd/dist/dns.c (revision ee75899804fc815b722d4dff05164c608f88c7d5)
1d83a80eeSchristos /*
2d83a80eeSchristos  * dns.c -- DNS definitions.
3d83a80eeSchristos  *
4d83a80eeSchristos  * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
5d83a80eeSchristos  *
6d83a80eeSchristos  * See LICENSE for the license.
7d83a80eeSchristos  *
8d83a80eeSchristos  */
9d83a80eeSchristos 
10d83a80eeSchristos #include "config.h"
11d83a80eeSchristos 
12d83a80eeSchristos #include <sys/types.h>
13d83a80eeSchristos #include <sys/socket.h>
14d83a80eeSchristos #include <netinet/in.h>
15d83a80eeSchristos #include <arpa/inet.h>
16d83a80eeSchristos #include <ctype.h>
17d83a80eeSchristos #include <netdb.h>
18d83a80eeSchristos #include <string.h>
19d83a80eeSchristos #ifdef HAVE_STRINGS_H
20d83a80eeSchristos #include <strings.h>
21d83a80eeSchristos #endif
22d83a80eeSchristos 
23d83a80eeSchristos #include "dns.h"
24d83a80eeSchristos #include "zonec.h"
25d83a80eeSchristos #include "zparser.h"
26d83a80eeSchristos 
27d83a80eeSchristos /* Taken from RFC 1035, section 3.2.4.  */
28d83a80eeSchristos static lookup_table_type dns_rrclasses[] = {
29d83a80eeSchristos 	{ CLASS_IN, "IN" },	/* the Internet */
30d83a80eeSchristos 	{ CLASS_CS, "CS" },	/* the CSNET class (Obsolete) */
31d83a80eeSchristos 	{ CLASS_CH, "CH" },	/* the CHAOS class */
32d83a80eeSchristos 	{ CLASS_HS, "HS" },	/* Hesiod */
33d83a80eeSchristos 	{ 0, NULL }
34d83a80eeSchristos };
35d83a80eeSchristos 
36d83a80eeSchristos static rrtype_descriptor_type rrtype_descriptors[(RRTYPE_DESCRIPTORS_LENGTH+1)] = {
37d83a80eeSchristos 	/* 0 */
38d83a80eeSchristos 	{ 0, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
39d83a80eeSchristos 	/* 1 */
40d83a80eeSchristos 	{ TYPE_A, "A", T_A, 1, 1,
41d83a80eeSchristos 	  { RDATA_WF_A }, { RDATA_ZF_A } },
42d83a80eeSchristos 	/* 2 */
43d83a80eeSchristos 	{ TYPE_NS, "NS", T_NS, 1, 1,
44d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
45d83a80eeSchristos 	/* 3 */
46d83a80eeSchristos 	{ TYPE_MD, "MD", T_MD, 1, 1,
47d83a80eeSchristos 	  { RDATA_WF_UNCOMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
48d83a80eeSchristos 	/* 4 */
49d83a80eeSchristos 	{ TYPE_MF, "MF", T_MF, 1, 1,
50d83a80eeSchristos 	  { RDATA_WF_UNCOMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
51d83a80eeSchristos 	/* 5 */
52d83a80eeSchristos 	{ TYPE_CNAME, "CNAME", T_CNAME, 1, 1,
53d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
54d83a80eeSchristos 	/* 6 */
55d83a80eeSchristos 	{ TYPE_SOA, "SOA", T_SOA, 7, 7,
56d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME, RDATA_WF_COMPRESSED_DNAME, RDATA_WF_LONG,
57d83a80eeSchristos 	    RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_LONG },
58d83a80eeSchristos 	  { RDATA_ZF_DNAME, RDATA_ZF_DNAME, RDATA_ZF_PERIOD, RDATA_ZF_PERIOD,
59d83a80eeSchristos 	    RDATA_ZF_PERIOD, RDATA_ZF_PERIOD, RDATA_ZF_PERIOD } },
60d83a80eeSchristos 	/* 7 */
61d83a80eeSchristos 	{ TYPE_MB, "MB", T_MB, 1, 1,
62d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
63d83a80eeSchristos 	/* 8 */
64d83a80eeSchristos 	{ TYPE_MG, "MG", T_MG, 1, 1,
65d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
66d83a80eeSchristos 	/* 9 */
67d83a80eeSchristos 	{ TYPE_MR, "MR", T_MR, 1, 1,
68d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
69d83a80eeSchristos 	/* 10 */
70d83a80eeSchristos 	{ TYPE_NULL, "NULL", T_UTYPE, 1, 1,
71d83a80eeSchristos 	  { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
72d83a80eeSchristos 	/* 11 */
73d83a80eeSchristos 	{ TYPE_WKS, "WKS", T_WKS, 2, 2,
74d83a80eeSchristos 	  { RDATA_WF_A, RDATA_WF_BINARY },
75d83a80eeSchristos 	  { RDATA_ZF_A, RDATA_ZF_SERVICES } },
76d83a80eeSchristos 	/* 12 */
77d83a80eeSchristos 	{ TYPE_PTR, "PTR", T_PTR, 1, 1,
78d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
79d83a80eeSchristos 	/* 13 */
80d83a80eeSchristos 	{ TYPE_HINFO, "HINFO", T_HINFO, 2, 2,
81d83a80eeSchristos 	  { RDATA_WF_TEXT, RDATA_WF_TEXT }, { RDATA_ZF_TEXT, RDATA_ZF_TEXT } },
82d83a80eeSchristos 	/* 14 */
83d83a80eeSchristos 	{ TYPE_MINFO, "MINFO", T_MINFO, 2, 2,
84d83a80eeSchristos 	  { RDATA_WF_COMPRESSED_DNAME, RDATA_WF_COMPRESSED_DNAME },
85d83a80eeSchristos 	  { RDATA_ZF_DNAME, RDATA_ZF_DNAME } },
86d83a80eeSchristos 	/* 15 */
87d83a80eeSchristos 	{ TYPE_MX, "MX", T_MX, 2, 2,
88d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_COMPRESSED_DNAME },
89d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
90d83a80eeSchristos 	/* 16 */
91d83a80eeSchristos 	{ TYPE_TXT, "TXT", T_TXT, 1, 1,
92d83a80eeSchristos 	  { RDATA_WF_TEXTS },
93d83a80eeSchristos 	  { RDATA_ZF_TEXTS } },
94d83a80eeSchristos 	/* 17 */
95d83a80eeSchristos 	{ TYPE_RP, "RP", T_RP, 2, 2,
96d83a80eeSchristos 	  { RDATA_WF_UNCOMPRESSED_DNAME, RDATA_WF_UNCOMPRESSED_DNAME },
97d83a80eeSchristos 	  { RDATA_ZF_DNAME, RDATA_ZF_DNAME } },
98d83a80eeSchristos 	/* 18 */
99d83a80eeSchristos 	{ TYPE_AFSDB, "AFSDB", T_AFSDB, 2, 2,
100d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
101d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
102d83a80eeSchristos 	/* 19 */
103d83a80eeSchristos 	{ TYPE_X25, "X25", T_X25, 1, 1,
104d83a80eeSchristos 	  { RDATA_WF_TEXT },
105d83a80eeSchristos 	  { RDATA_ZF_TEXT } },
106d83a80eeSchristos 	/* 20 */
107d83a80eeSchristos 	{ TYPE_ISDN, "ISDN", T_ISDN, 1, 2,
108d83a80eeSchristos 	  { RDATA_WF_TEXT, RDATA_WF_TEXT },
109d83a80eeSchristos 	  { RDATA_ZF_TEXT, RDATA_ZF_TEXT } },
110d83a80eeSchristos 	/* 21 */
111d83a80eeSchristos 	{ TYPE_RT, "RT", T_RT, 2, 2,
112d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
113d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
114d83a80eeSchristos 	/* 22 */
115d83a80eeSchristos 	{ TYPE_NSAP, "NSAP", T_NSAP, 1, 1,
116d83a80eeSchristos 	  { RDATA_WF_BINARY },
117d83a80eeSchristos 	  { RDATA_ZF_NSAP } },
118d83a80eeSchristos 	/* 23 */
119d83a80eeSchristos 	{ 23, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
120d83a80eeSchristos 	/* 24 */
121d83a80eeSchristos 	{ TYPE_SIG, "SIG", T_SIG, 9, 9,
122d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_LONG,
123d83a80eeSchristos 	    RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_SHORT,
124febe9f07Schristos 	    RDATA_WF_LITERAL_DNAME, RDATA_WF_BINARY },
125febe9f07Schristos 	  { RDATA_ZF_RRTYPE, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_PERIOD,
126febe9f07Schristos 	    RDATA_ZF_TIME, RDATA_ZF_TIME, RDATA_ZF_SHORT,
127febe9f07Schristos 	    RDATA_ZF_LITERAL_DNAME, RDATA_ZF_BASE64 } },
128d83a80eeSchristos 	/* 25 */
129d83a80eeSchristos 	{ TYPE_KEY, "KEY", T_KEY, 4, 4,
130d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
131d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_BYTE, RDATA_ZF_ALGORITHM,
132d83a80eeSchristos 	    RDATA_ZF_BASE64 } },
133d83a80eeSchristos 	/* 26 */
134d83a80eeSchristos 	{ TYPE_PX, "PX", T_PX, 3, 3,
135d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME,
136d83a80eeSchristos 	    RDATA_WF_UNCOMPRESSED_DNAME },
137d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME, RDATA_ZF_DNAME } },
138d83a80eeSchristos 	/* 27 */
139d83a80eeSchristos 	{ 27, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
140d83a80eeSchristos 	/* 28 */
141d83a80eeSchristos 	{ TYPE_AAAA, "AAAA", T_AAAA, 1, 1,
142d83a80eeSchristos 	  { RDATA_WF_AAAA },
143d83a80eeSchristos 	  { RDATA_ZF_AAAA } },
144d83a80eeSchristos 	/* 29 */
145d83a80eeSchristos 	{ TYPE_LOC, "LOC", T_LOC, 1, 1,
146d83a80eeSchristos 	  { RDATA_WF_BINARY },
147d83a80eeSchristos 	  { RDATA_ZF_LOC } },
148d83a80eeSchristos 	/* 30 */
149d83a80eeSchristos 	{ TYPE_NXT, "NXT", T_NXT, 2, 2,
150d83a80eeSchristos 	  { RDATA_WF_UNCOMPRESSED_DNAME, RDATA_WF_BINARY },
151d83a80eeSchristos 	  { RDATA_ZF_DNAME, RDATA_ZF_NXT } },
152d83a80eeSchristos 	/* 31 */
153d83a80eeSchristos 	{ 31, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
154d83a80eeSchristos 	/* 32 */
155d83a80eeSchristos 	{ 32, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
156d83a80eeSchristos 	/* 33 */
157d83a80eeSchristos 	{ TYPE_SRV, "SRV", T_SRV, 4, 4,
158d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_SHORT,
159d83a80eeSchristos 	    RDATA_WF_UNCOMPRESSED_DNAME },
160d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
161d83a80eeSchristos 	/* 34 */
162d83a80eeSchristos 	{ 34, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
163d83a80eeSchristos 	/* 35 */
164d83a80eeSchristos 	{ TYPE_NAPTR, "NAPTR", T_NAPTR, 6, 6,
165d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_TEXT, RDATA_WF_TEXT,
166d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_UNCOMPRESSED_DNAME },
167d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
168d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_DNAME } },
169d83a80eeSchristos 	/* 36 */
170d83a80eeSchristos 	{ TYPE_KX, "KX", T_KX, 2, 2,
171d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
172d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
173d83a80eeSchristos 	/* 37 */
174d83a80eeSchristos 	{ TYPE_CERT, "CERT", T_CERT, 4, 4,
175d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BINARY },
176d83a80eeSchristos 	  { RDATA_ZF_CERTIFICATE_TYPE, RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM,
177d83a80eeSchristos 	    RDATA_ZF_BASE64 } },
178d83a80eeSchristos 	/* 38 */
179d83a80eeSchristos 	{ TYPE_A6, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
180d83a80eeSchristos 	/* 39 */
181d83a80eeSchristos 	{ TYPE_DNAME, "DNAME", T_DNAME, 1, 1,
182d83a80eeSchristos 	  { RDATA_WF_UNCOMPRESSED_DNAME }, { RDATA_ZF_DNAME } },
183d83a80eeSchristos 	/* 40 */
184d83a80eeSchristos 	{ 40, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
185d83a80eeSchristos 	/* 41 */
186d83a80eeSchristos 	{ TYPE_OPT, "OPT", T_UTYPE, 1, 1,
187d83a80eeSchristos 	  { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
188d83a80eeSchristos 	/* 42 */
189d83a80eeSchristos 	{ TYPE_APL, "APL", T_APL, 0, MAXRDATALEN,
190d83a80eeSchristos 	  { RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
191d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
192d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
193d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
194d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
195d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
196d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
197d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
198d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
199d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
200d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
201d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
202d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
203d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
204d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL,
205d83a80eeSchristos 	    RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL, RDATA_WF_APL },
206d83a80eeSchristos 	  { RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
207d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
208d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
209d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
210d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
211d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
212d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
213d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
214d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
215d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
216d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
217d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
218d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
219d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
220d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL,
221d83a80eeSchristos 	    RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL, RDATA_ZF_APL } },
222d83a80eeSchristos 	/* 43 */
223d83a80eeSchristos 	{ TYPE_DS, "DS", T_DS, 4, 4,
224d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
225d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
226d83a80eeSchristos 	/* 44 */
227d83a80eeSchristos 	{ TYPE_SSHFP, "SSHFP", T_SSHFP, 3, 3,
228d83a80eeSchristos 	  { RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
229d83a80eeSchristos 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
230d83a80eeSchristos 	/* 45 */
231d83a80eeSchristos 	{ TYPE_IPSECKEY, "IPSECKEY", T_IPSECKEY, 4, 5,
232d83a80eeSchristos 	  { RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_IPSECGATEWAY,
233d83a80eeSchristos 	    RDATA_WF_BINARY },
234d83a80eeSchristos 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_IPSECGATEWAY,
235d83a80eeSchristos 	    RDATA_ZF_BASE64 } },
236d83a80eeSchristos 	/* 46 */
237d83a80eeSchristos 	{ TYPE_RRSIG, "RRSIG", T_RRSIG, 9, 9,
238d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_LONG,
239d83a80eeSchristos 	    RDATA_WF_LONG, RDATA_WF_LONG, RDATA_WF_SHORT,
240d83a80eeSchristos 	    RDATA_WF_LITERAL_DNAME, RDATA_WF_BINARY },
241d83a80eeSchristos 	  { RDATA_ZF_RRTYPE, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_PERIOD,
242d83a80eeSchristos 	    RDATA_ZF_TIME, RDATA_ZF_TIME, RDATA_ZF_SHORT,
243d83a80eeSchristos 		RDATA_ZF_LITERAL_DNAME, RDATA_ZF_BASE64 } },
244d83a80eeSchristos 	/* 47 */
245d83a80eeSchristos 	{ TYPE_NSEC, "NSEC", T_NSEC, 2, 2,
246d83a80eeSchristos 	  { RDATA_WF_LITERAL_DNAME, RDATA_WF_BINARY },
247d83a80eeSchristos 	  { RDATA_ZF_LITERAL_DNAME, RDATA_ZF_NSEC } },
248d83a80eeSchristos 	/* 48 */
249d83a80eeSchristos 	{ TYPE_DNSKEY, "DNSKEY", T_DNSKEY, 4, 4,
250d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
251d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_BYTE, RDATA_ZF_ALGORITHM,
252d83a80eeSchristos 	    RDATA_ZF_BASE64 } },
253d83a80eeSchristos 	/* 49 */
254d83a80eeSchristos 	{ TYPE_DHCID, "DHCID", T_DHCID, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_BASE64 } },
255d83a80eeSchristos 	/* 50 */
256d83a80eeSchristos 	{ TYPE_NSEC3, "NSEC3", T_NSEC3, 6, 6,
257d83a80eeSchristos 	  { RDATA_WF_BYTE, /* hash type */
258d83a80eeSchristos 	    RDATA_WF_BYTE, /* flags */
259d83a80eeSchristos 	    RDATA_WF_SHORT, /* iterations */
260d83a80eeSchristos 	    RDATA_WF_BINARYWITHLENGTH, /* salt */
261d83a80eeSchristos 	    RDATA_WF_BINARYWITHLENGTH, /* next hashed name */
262d83a80eeSchristos 	    RDATA_WF_BINARY /* type bitmap */ },
263d83a80eeSchristos 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_SHORT, RDATA_ZF_HEX_LEN,
264d83a80eeSchristos 	    RDATA_ZF_BASE32, RDATA_ZF_NSEC } },
265d83a80eeSchristos 	/* 51 */
266d83a80eeSchristos 	{ TYPE_NSEC3PARAM, "NSEC3PARAM", T_NSEC3PARAM, 4, 4,
267d83a80eeSchristos 	  { RDATA_WF_BYTE, /* hash type */
268d83a80eeSchristos 	    RDATA_WF_BYTE, /* flags */
269d83a80eeSchristos 	    RDATA_WF_SHORT, /* iterations */
270d83a80eeSchristos 	    RDATA_WF_BINARYWITHLENGTH /* salt */ },
271d83a80eeSchristos 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_SHORT, RDATA_ZF_HEX_LEN } },
272d83a80eeSchristos 	/* 52 */
273d83a80eeSchristos 	{ TYPE_TLSA, "TLSA", T_TLSA, 4, 4,
274d83a80eeSchristos 	  { RDATA_WF_BYTE, /* usage */
275d83a80eeSchristos 	    RDATA_WF_BYTE, /* selector */
276d83a80eeSchristos 	    RDATA_WF_BYTE, /* matching type */
277d83a80eeSchristos 	    RDATA_WF_BINARY }, /* certificate association data */
278d83a80eeSchristos 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
279d83a80eeSchristos 	/* 53 */
280da4c7d9dSchristos 	{ TYPE_SMIMEA, "SMIMEA", T_SMIMEA, 4, 4,
281da4c7d9dSchristos 	  { RDATA_WF_BYTE, /* usage */
282da4c7d9dSchristos 	    RDATA_WF_BYTE, /* selector */
283da4c7d9dSchristos 	    RDATA_WF_BYTE, /* matching type */
284da4c7d9dSchristos 	    RDATA_WF_BINARY }, /* certificate association data */
285da4c7d9dSchristos 	  { RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
286d83a80eeSchristos 	/* 54 */
287d83a80eeSchristos 	{ 54, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
288d83a80eeSchristos 	/* 55 - HIP [RFC 5205] */
289d83a80eeSchristos 	{ 55, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
290d83a80eeSchristos 	/* 56 - NINFO */
291d83a80eeSchristos 	{ 56, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
292d83a80eeSchristos 	/* 57 - RKEY */
293d83a80eeSchristos 	{ 57, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
294d83a80eeSchristos 	/* 58 - TALINK */
295d83a80eeSchristos 	{ 58, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
296d83a80eeSchristos 	/* 59 - CDS */
297d83a80eeSchristos 	{ TYPE_CDS, "CDS", T_CDS, 4, 4,
298d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
299d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
300d83a80eeSchristos 	/* 60 - CDNSKEY */
301d83a80eeSchristos 	{ TYPE_CDNSKEY, "CDNSKEY", T_CDNSKEY, 4, 4,
302d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
303d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_BYTE, RDATA_ZF_ALGORITHM,
304d83a80eeSchristos 	    RDATA_ZF_BASE64 } },
305d83a80eeSchristos 	/* 61 - OPENPGPKEY */
306d83a80eeSchristos 	{ TYPE_OPENPGPKEY, "OPENPGPKEY", T_OPENPGPKEY, 1, 1,
307d83a80eeSchristos 	  { RDATA_WF_BINARY }, { RDATA_ZF_BASE64 } },
308d83a80eeSchristos 	/* 62 - CSYNC */
309d83a80eeSchristos 	{ TYPE_CSYNC, "CSYNC", T_CSYNC, 3, 3, { RDATA_WF_LONG, RDATA_WF_SHORT,
310d83a80eeSchristos 	 RDATA_WF_BINARY }, { RDATA_ZF_LONG, RDATA_ZF_SHORT, RDATA_ZF_NSEC } },
311f3d63a56Schristos 	/* 63 - ZONEMD */
312f3d63a56Schristos 	{ TYPE_ZONEMD, "ZONEMD", T_ZONEMD, 4, 4,
313f3d63a56Schristos 	  { RDATA_WF_LONG, /* serial */
314f3d63a56Schristos 	    RDATA_WF_BYTE, /* scheme */
315f3d63a56Schristos 	    RDATA_WF_BYTE, /* hash Algorithm */
316f3d63a56Schristos 	    RDATA_WF_BINARY }, /* digest */
317f3d63a56Schristos 	  { RDATA_ZF_PERIOD, RDATA_ZF_BYTE, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
318*ee758998Schristos 	/* 64 - SVCB */
319*ee758998Schristos 	{ TYPE_SVCB, "SVCB", T_SVCB, 2, MAXRDATALEN,
320*ee758998Schristos 	  { RDATA_WF_SHORT                        /* SvcFieldPriority */
321*ee758998Schristos 	  , RDATA_WF_UNCOMPRESSED_DNAME           /* SvcDomainName */
322*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM  /* SvcFieldValue */
323*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
324*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
325*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
326*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
327*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
328*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
329*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
330*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
331*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
332*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
333*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
334*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
335*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
336*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
337*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
338*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
339*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
340*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
341*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
342*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
343*ee758998Schristos 	  },
344*ee758998Schristos 	  { RDATA_ZF_SHORT   , RDATA_ZF_DNAME
345*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
346*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
347*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
348*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
349*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
350*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
351*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
352*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
353*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
354*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
355*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
356*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
357*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
358*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
359*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
360*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
361*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
362*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
363*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
364*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
365*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
366*ee758998Schristos 	  } },
367*ee758998Schristos 	/* 65 - HTTPS */
368*ee758998Schristos 	{ TYPE_HTTPS, "HTTPS", T_HTTPS, 2, MAXRDATALEN,
369*ee758998Schristos 	  { RDATA_WF_SHORT                        /* SvcFieldPriority */
370*ee758998Schristos 	  , RDATA_WF_UNCOMPRESSED_DNAME           /* SvcDomainName */
371*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM  /* SvcFieldValue */
372*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
373*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
374*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
375*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
376*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
377*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
378*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
379*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
380*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
381*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
382*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
383*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
384*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
385*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
386*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
387*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
388*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
389*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
390*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
391*ee758998Schristos 	  , RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM, RDATA_WF_SVCPARAM
392*ee758998Schristos 	  },
393*ee758998Schristos 	  { RDATA_ZF_SHORT   , RDATA_ZF_DNAME
394*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
395*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
396*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
397*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
398*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
399*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
400*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
401*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
402*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
403*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
404*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
405*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
406*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
407*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
408*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
409*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
410*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
411*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
412*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
413*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
414*ee758998Schristos 	  , RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM, RDATA_ZF_SVCPARAM
415*ee758998Schristos 	  } },
416d83a80eeSchristos 	/* 66 */
417d83a80eeSchristos 	{ 66, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
418d83a80eeSchristos 	/* 67 */
419d83a80eeSchristos 	{ 67, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
420d83a80eeSchristos 	/* 68 */
421d83a80eeSchristos 	{ 68, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
422d83a80eeSchristos 	/* 69 */
423d83a80eeSchristos 	{ 69, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
424d83a80eeSchristos 	/* 70 */
425d83a80eeSchristos 	{ 70, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
426d83a80eeSchristos 	/* 71 */
427d83a80eeSchristos 	{ 71, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
428d83a80eeSchristos 	/* 72 */
429d83a80eeSchristos 	{ 72, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
430d83a80eeSchristos 	/* 73 */
431d83a80eeSchristos 	{ 73, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
432d83a80eeSchristos 	/* 74 */
433d83a80eeSchristos 	{ 74, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
434d83a80eeSchristos 	/* 75 */
435d83a80eeSchristos 	{ 75, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
436d83a80eeSchristos 	/* 76 */
437d83a80eeSchristos 	{ 76, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
438d83a80eeSchristos 	/* 77 */
439d83a80eeSchristos 	{ 77, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
440d83a80eeSchristos 	/* 78 */
441d83a80eeSchristos 	{ 78, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
442d83a80eeSchristos 	/* 79 */
443d83a80eeSchristos 	{ 79, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
444d83a80eeSchristos 	/* 80 */
445d83a80eeSchristos 	{ 80, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
446d83a80eeSchristos 	/* 81 */
447d83a80eeSchristos 	{ 81, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
448d83a80eeSchristos 	/* 82 */
449d83a80eeSchristos 	{ 82, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
450d83a80eeSchristos 	/* 83 */
451d83a80eeSchristos 	{ 83, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
452d83a80eeSchristos 	/* 84 */
453d83a80eeSchristos 	{ 84, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
454d83a80eeSchristos 	/* 85 */
455d83a80eeSchristos 	{ 85, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
456d83a80eeSchristos 	/* 86 */
457d83a80eeSchristos 	{ 86, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
458d83a80eeSchristos 	/* 87 */
459d83a80eeSchristos 	{ 87, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
460d83a80eeSchristos 	/* 88 */
461d83a80eeSchristos 	{ 88, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
462d83a80eeSchristos 	/* 89 */
463d83a80eeSchristos 	{ 89, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
464d83a80eeSchristos 	/* 90 */
465d83a80eeSchristos 	{ 90, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
466d83a80eeSchristos 	/* 91 */
467d83a80eeSchristos 	{ 91, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
468d83a80eeSchristos 	/* 92 */
469d83a80eeSchristos 	{ 92, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
470d83a80eeSchristos 	/* 93 */
471d83a80eeSchristos 	{ 93, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
472d83a80eeSchristos 	/* 94 */
473d83a80eeSchristos 	{ 94, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
474d83a80eeSchristos 	/* 95 */
475d83a80eeSchristos 	{ 95, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
476d83a80eeSchristos 	/* 96 */
477d83a80eeSchristos 	{ 96, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
478d83a80eeSchristos 	/* 97 */
479d83a80eeSchristos 	{ 97, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
480d83a80eeSchristos 	/* 98 */
481d83a80eeSchristos 	{ 98, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
482d83a80eeSchristos 	/* 99 */
483d83a80eeSchristos 	{ TYPE_SPF, "SPF", T_SPF, 1, MAXRDATALEN,
484d83a80eeSchristos 	  { RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
485d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
486d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
487d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
488d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
489d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
490d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
491d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
492d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
493d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
494d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
495d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
496d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
497d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
498d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT,
499d83a80eeSchristos 	    RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT, RDATA_WF_TEXT },
500d83a80eeSchristos 	  { RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
501d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
502d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
503d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
504d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
505d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
506d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
507d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
508d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
509d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
510d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
511d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
512d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
513d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
514d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT,
515d83a80eeSchristos 	    RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT, RDATA_ZF_TEXT } },
516d83a80eeSchristos 	/* 100 - UINFO */
517d83a80eeSchristos 	{ 100, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
518d83a80eeSchristos 	/* 101 - UID */
519d83a80eeSchristos 	{ 101, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
520d83a80eeSchristos 	/* 102 - GID */
521d83a80eeSchristos 	{ 102, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
522d83a80eeSchristos 	/* 103 - UNSPEC */
523d83a80eeSchristos 	{ 103, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
524d83a80eeSchristos 	/* 104 */
525d83a80eeSchristos 	{ TYPE_NID, "NID", T_NID, 2, 2,
526d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_ILNP64 },
527d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_ILNP64 } },
528d83a80eeSchristos 	/* 105 */
529d83a80eeSchristos 	{ TYPE_L32, "L32", T_L32, 2, 2,
530d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_A },
531d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_A } },
532d83a80eeSchristos 	/* 106 */
533d83a80eeSchristos 	{ TYPE_L64, "L64", T_L64, 2, 2,
534d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_ILNP64 },
535d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_ILNP64 } },
536d83a80eeSchristos 	/* 107 */
537d83a80eeSchristos 	{ TYPE_LP, "LP", T_LP, 2, 2,
538d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_UNCOMPRESSED_DNAME },
539d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_DNAME } },
540d83a80eeSchristos 	/* 108 */
541d83a80eeSchristos 	{ TYPE_EUI48, "EUI48", T_EUI48, 1, 1,
542d83a80eeSchristos 	  { RDATA_WF_EUI48 }, { RDATA_ZF_EUI48 } },
543d83a80eeSchristos 	/* 109 */
544d83a80eeSchristos 	{ TYPE_EUI64, "EUI64", T_EUI64, 1, 1,
545d83a80eeSchristos 	  { RDATA_WF_EUI64 }, { RDATA_ZF_EUI64 } },
546d83a80eeSchristos 	/* 110 */
547d83a80eeSchristos 	{ 110, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
548d83a80eeSchristos 	/* 111 */
549d83a80eeSchristos 	{ 111, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
550d83a80eeSchristos 	/* 112 */
551d83a80eeSchristos 	{ 112, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
552d83a80eeSchristos 	/* 113 */
553d83a80eeSchristos 	{ 113, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
554d83a80eeSchristos 	/* 114 */
555d83a80eeSchristos 	{ 114, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
556d83a80eeSchristos 	/* 115 */
557d83a80eeSchristos 	{ 115, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
558d83a80eeSchristos 	/* 116 */
559d83a80eeSchristos 	{ 116, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
560d83a80eeSchristos 	/* 117 */
561d83a80eeSchristos 	{ 117, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
562d83a80eeSchristos 	/* 118 */
563d83a80eeSchristos 	{ 118, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
564d83a80eeSchristos 	/* 119 */
565d83a80eeSchristos 	{ 119, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
566d83a80eeSchristos 	/* 120 */
567d83a80eeSchristos 	{ 120, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
568d83a80eeSchristos 	/* 121 */
569d83a80eeSchristos 	{ 121, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
570d83a80eeSchristos 	/* 122 */
571d83a80eeSchristos 	{ 122, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
572d83a80eeSchristos 	/* 123 */
573d83a80eeSchristos 	{ 123, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
574d83a80eeSchristos 	/* 124 */
575d83a80eeSchristos 	{ 124, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
576d83a80eeSchristos 	/* 125 */
577d83a80eeSchristos 	{ 125, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
578d83a80eeSchristos 	/* 126 */
579d83a80eeSchristos 	{ 126, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
580d83a80eeSchristos 	/* 127 */
581d83a80eeSchristos 	{ 127, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
582d83a80eeSchristos 	/* 128 */
583d83a80eeSchristos 	{ 128, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
584d83a80eeSchristos 	/* 129 */
585d83a80eeSchristos 	{ 129, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
586d83a80eeSchristos 	/* 130 */
587d83a80eeSchristos 	{ 130, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
588d83a80eeSchristos 	/* 131 */
589d83a80eeSchristos 	{ 131, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
590d83a80eeSchristos 	/* 132 */
591d83a80eeSchristos 	{ 132, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
592d83a80eeSchristos 	/* 133 */
593d83a80eeSchristos 	{ 133, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
594d83a80eeSchristos 	/* 134 */
595d83a80eeSchristos 	{ 134, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
596d83a80eeSchristos 	/* 135 */
597d83a80eeSchristos 	{ 135, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
598d83a80eeSchristos 	/* 136 */
599d83a80eeSchristos 	{ 136, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
600d83a80eeSchristos 	/* 137 */
601d83a80eeSchristos 	{ 137, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
602d83a80eeSchristos 	/* 138 */
603d83a80eeSchristos 	{ 138, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
604d83a80eeSchristos 	/* 139 */
605d83a80eeSchristos 	{ 139, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
606d83a80eeSchristos 	/* 140 */
607d83a80eeSchristos 	{ 140, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
608d83a80eeSchristos 	/* 141 */
609d83a80eeSchristos 	{ 141, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
610d83a80eeSchristos 	/* 142 */
611d83a80eeSchristos 	{ 142, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
612d83a80eeSchristos 	/* 143 */
613d83a80eeSchristos 	{ 143, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
614d83a80eeSchristos 	/* 144 */
615d83a80eeSchristos 	{ 144, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
616d83a80eeSchristos 	/* 145 */
617d83a80eeSchristos 	{ 145, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
618d83a80eeSchristos 	/* 146 */
619d83a80eeSchristos 	{ 146, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
620d83a80eeSchristos 	/* 147 */
621d83a80eeSchristos 	{ 147, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
622d83a80eeSchristos 	/* 148 */
623d83a80eeSchristos 	{ 148, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
624d83a80eeSchristos 	/* 149 */
625d83a80eeSchristos 	{ 149, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
626d83a80eeSchristos 	/* 150 */
627d83a80eeSchristos 	{ 150, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
628d83a80eeSchristos 	/* 151 */
629d83a80eeSchristos 	{ 151, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
630d83a80eeSchristos 	/* 152 */
631d83a80eeSchristos 	{ 152, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
632d83a80eeSchristos 	/* 153 */
633d83a80eeSchristos 	{ 153, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
634d83a80eeSchristos 	/* 154 */
635d83a80eeSchristos 	{ 154, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
636d83a80eeSchristos 	/* 155 */
637d83a80eeSchristos 	{ 155, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
638d83a80eeSchristos 	/* 156 */
639d83a80eeSchristos 	{ 156, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
640d83a80eeSchristos 	/* 157 */
641d83a80eeSchristos 	{ 157, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
642d83a80eeSchristos 	/* 158 */
643d83a80eeSchristos 	{ 158, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
644d83a80eeSchristos 	/* 159 */
645d83a80eeSchristos 	{ 159, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
646d83a80eeSchristos 	/* 160 */
647d83a80eeSchristos 	{ 160, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
648d83a80eeSchristos 	/* 161 */
649d83a80eeSchristos 	{ 161, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
650d83a80eeSchristos 	/* 162 */
651d83a80eeSchristos 	{ 162, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
652d83a80eeSchristos 	/* 163 */
653d83a80eeSchristos 	{ 163, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
654d83a80eeSchristos 	/* 164 */
655d83a80eeSchristos 	{ 164, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
656d83a80eeSchristos 	/* 165 */
657d83a80eeSchristos 	{ 165, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
658d83a80eeSchristos 	/* 166 */
659d83a80eeSchristos 	{ 166, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
660d83a80eeSchristos 	/* 167 */
661d83a80eeSchristos 	{ 167, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
662d83a80eeSchristos 	/* 168 */
663d83a80eeSchristos 	{ 168, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
664d83a80eeSchristos 	/* 169 */
665d83a80eeSchristos 	{ 169, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
666d83a80eeSchristos 	/* 170 */
667d83a80eeSchristos 	{ 170, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
668d83a80eeSchristos 	/* 171 */
669d83a80eeSchristos 	{ 171, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
670d83a80eeSchristos 	/* 172 */
671d83a80eeSchristos 	{ 172, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
672d83a80eeSchristos 	/* 173 */
673d83a80eeSchristos 	{ 173, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
674d83a80eeSchristos 	/* 174 */
675d83a80eeSchristos 	{ 174, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
676d83a80eeSchristos 	/* 175 */
677d83a80eeSchristos 	{ 175, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
678d83a80eeSchristos 	/* 176 */
679d83a80eeSchristos 	{ 176, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
680d83a80eeSchristos 	/* 177 */
681d83a80eeSchristos 	{ 177, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
682d83a80eeSchristos 	/* 178 */
683d83a80eeSchristos 	{ 178, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
684d83a80eeSchristos 	/* 179 */
685d83a80eeSchristos 	{ 179, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
686d83a80eeSchristos 	/* 180 */
687d83a80eeSchristos 	{ 180, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
688d83a80eeSchristos 	/* 181 */
689d83a80eeSchristos 	{ 181, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
690d83a80eeSchristos 	/* 182 */
691d83a80eeSchristos 	{ 182, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
692d83a80eeSchristos 	/* 183 */
693d83a80eeSchristos 	{ 183, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
694d83a80eeSchristos 	/* 184 */
695d83a80eeSchristos 	{ 184, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
696d83a80eeSchristos 	/* 185 */
697d83a80eeSchristos 	{ 185, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
698d83a80eeSchristos 	/* 186 */
699d83a80eeSchristos 	{ 186, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
700d83a80eeSchristos 	/* 187 */
701d83a80eeSchristos 	{ 187, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
702d83a80eeSchristos 	/* 188 */
703d83a80eeSchristos 	{ 188, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
704d83a80eeSchristos 	/* 189 */
705d83a80eeSchristos 	{ 189, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
706d83a80eeSchristos 	/* 190 */
707d83a80eeSchristos 	{ 190, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
708d83a80eeSchristos 	/* 191 */
709d83a80eeSchristos 	{ 191, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
710d83a80eeSchristos 	/* 192 */
711d83a80eeSchristos 	{ 192, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
712d83a80eeSchristos 	/* 193 */
713d83a80eeSchristos 	{ 193, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
714d83a80eeSchristos 	/* 194 */
715d83a80eeSchristos 	{ 194, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
716d83a80eeSchristos 	/* 195 */
717d83a80eeSchristos 	{ 195, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
718d83a80eeSchristos 	/* 196 */
719d83a80eeSchristos 	{ 196, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
720d83a80eeSchristos 	/* 197 */
721d83a80eeSchristos 	{ 197, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
722d83a80eeSchristos 	/* 198 */
723d83a80eeSchristos 	{ 198, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
724d83a80eeSchristos 	/* 199 */
725d83a80eeSchristos 	{ 199, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
726d83a80eeSchristos 	/* 200 */
727d83a80eeSchristos 	{ 200, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
728d83a80eeSchristos 	/* 201 */
729d83a80eeSchristos 	{ 201, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
730d83a80eeSchristos 	/* 202 */
731d83a80eeSchristos 	{ 202, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
732d83a80eeSchristos 	/* 203 */
733d83a80eeSchristos 	{ 203, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
734d83a80eeSchristos 	/* 204 */
735d83a80eeSchristos 	{ 204, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
736d83a80eeSchristos 	/* 205 */
737d83a80eeSchristos 	{ 205, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
738d83a80eeSchristos 	/* 206 */
739d83a80eeSchristos 	{ 206, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
740d83a80eeSchristos 	/* 207 */
741d83a80eeSchristos 	{ 207, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
742d83a80eeSchristos 	/* 208 */
743d83a80eeSchristos 	{ 208, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
744d83a80eeSchristos 	/* 209 */
745d83a80eeSchristos 	{ 209, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
746d83a80eeSchristos 	/* 210 */
747d83a80eeSchristos 	{ 210, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
748d83a80eeSchristos 	/* 211 */
749d83a80eeSchristos 	{ 211, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
750d83a80eeSchristos 	/* 212 */
751d83a80eeSchristos 	{ 212, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
752d83a80eeSchristos 	/* 213 */
753d83a80eeSchristos 	{ 213, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
754d83a80eeSchristos 	/* 214 */
755d83a80eeSchristos 	{ 214, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
756d83a80eeSchristos 	/* 215 */
757d83a80eeSchristos 	{ 215, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
758d83a80eeSchristos 	/* 216 */
759d83a80eeSchristos 	{ 216, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
760d83a80eeSchristos 	/* 217 */
761d83a80eeSchristos 	{ 217, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
762d83a80eeSchristos 	/* 218 */
763d83a80eeSchristos 	{ 218, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
764d83a80eeSchristos 	/* 219 */
765d83a80eeSchristos 	{ 219, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
766d83a80eeSchristos 	/* 220 */
767d83a80eeSchristos 	{ 220, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
768d83a80eeSchristos 	/* 221 */
769d83a80eeSchristos 	{ 221, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
770d83a80eeSchristos 	/* 222 */
771d83a80eeSchristos 	{ 222, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
772d83a80eeSchristos 	/* 223 */
773d83a80eeSchristos 	{ 223, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
774d83a80eeSchristos 	/* 224 */
775d83a80eeSchristos 	{ 224, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
776d83a80eeSchristos 	/* 225 */
777d83a80eeSchristos 	{ 225, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
778d83a80eeSchristos 	/* 226 */
779d83a80eeSchristos 	{ 226, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
780d83a80eeSchristos 	/* 227 */
781d83a80eeSchristos 	{ 227, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
782d83a80eeSchristos 	/* 228 */
783d83a80eeSchristos 	{ 228, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
784d83a80eeSchristos 	/* 229 */
785d83a80eeSchristos 	{ 229, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
786d83a80eeSchristos 	/* 230 */
787d83a80eeSchristos 	{ 230, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
788d83a80eeSchristos 	/* 231 */
789d83a80eeSchristos 	{ 231, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
790d83a80eeSchristos 	/* 232 */
791d83a80eeSchristos 	{ 232, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
792d83a80eeSchristos 	/* 233 */
793d83a80eeSchristos 	{ 233, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
794d83a80eeSchristos 	/* 234 */
795d83a80eeSchristos 	{ 234, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
796d83a80eeSchristos 	/* 235 */
797d83a80eeSchristos 	{ 235, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
798d83a80eeSchristos 	/* 236 */
799d83a80eeSchristos 	{ 236, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
800d83a80eeSchristos 	/* 237 */
801d83a80eeSchristos 	{ 237, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
802d83a80eeSchristos 	/* 238 */
803d83a80eeSchristos 	{ 238, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
804d83a80eeSchristos 	/* 239 */
805d83a80eeSchristos 	{ 239, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
806d83a80eeSchristos 	/* 240 */
807d83a80eeSchristos 	{ 240, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
808d83a80eeSchristos 	/* 241 */
809d83a80eeSchristos 	{ 241, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
810d83a80eeSchristos 	/* 242 */
811d83a80eeSchristos 	{ 242, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
812d83a80eeSchristos 	/* 243 */
813d83a80eeSchristos 	{ 243, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
814d83a80eeSchristos 	/* 244 */
815d83a80eeSchristos 	{ 244, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
816d83a80eeSchristos 	/* 245 */
817d83a80eeSchristos 	{ 245, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
818d83a80eeSchristos 	/* 246 */
819d83a80eeSchristos 	{ 246, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
820d83a80eeSchristos 	/* 247 */
821d83a80eeSchristos 	{ 247, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
822d83a80eeSchristos 	/* 248 */
823d83a80eeSchristos 	{ 248, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
824d83a80eeSchristos 	/* 249 - TKEY [RFC 2930] */
825d83a80eeSchristos 	{ 249, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
826d83a80eeSchristos 	/* 250 - TSIG [RFC 2845] */
827d83a80eeSchristos 	{ 250, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
828d83a80eeSchristos 	/* 251 - IXFR [RFC 1995] */
829d83a80eeSchristos 	{ 251, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
830d83a80eeSchristos 	/* 252 - AXFR [RFC 1035, RFC 5936] */
831d83a80eeSchristos 	{ 252, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
832d83a80eeSchristos 	/* 253 - MAILB [RFC 1035] */
833d83a80eeSchristos 	{ 253, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
834d83a80eeSchristos 	/* 254 - MAILA [RFC 1035] */
835d83a80eeSchristos 	{ 254, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
836d83a80eeSchristos 	/* 255 - * [RFC 1035, RFC 6895] */
837d83a80eeSchristos 	{ 255, NULL, T_UTYPE, 1, 1, { RDATA_WF_BINARY }, { RDATA_ZF_UNKNOWN } },
838d83a80eeSchristos 	/* 256 - URI */
839d83a80eeSchristos 	{ TYPE_URI, "URI", T_URI, 3, 3,
840d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_SHORT, RDATA_WF_LONG_TEXT },
841d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_SHORT, RDATA_ZF_LONG_TEXT } },
842d83a80eeSchristos 	/* 257 - CAA [RFC 6844] */
843d83a80eeSchristos 	{ TYPE_CAA, "CAA", T_CAA, 3, 3,
844d83a80eeSchristos 	  { RDATA_WF_BYTE, RDATA_WF_TEXT, RDATA_WF_LONG_TEXT },
845d83a80eeSchristos 	  { RDATA_ZF_BYTE, RDATA_ZF_TAG, RDATA_ZF_LONG_TEXT } },
8463fb62404Schristos 	/* 258 - AVC */
8473fb62404Schristos 	{ TYPE_AVC, "AVC", T_AVC, 1, 1,
8483fb62404Schristos 	  { RDATA_WF_TEXTS },
8493fb62404Schristos 	  { RDATA_ZF_TEXTS } },
850d83a80eeSchristos 
851d83a80eeSchristos 	/* 32768 - TA */
852d83a80eeSchristos 	/* 32769 */
853d83a80eeSchristos 	{ TYPE_DLV, "DLV", T_DLV, 4, 4,
854d83a80eeSchristos 	  { RDATA_WF_SHORT, RDATA_WF_BYTE, RDATA_WF_BYTE, RDATA_WF_BINARY },
855d83a80eeSchristos 	  { RDATA_ZF_SHORT, RDATA_ZF_ALGORITHM, RDATA_ZF_BYTE, RDATA_ZF_HEX } },
856d83a80eeSchristos };
857d83a80eeSchristos 
858d83a80eeSchristos rrtype_descriptor_type *
rrtype_descriptor_by_type(uint16_t type)859d83a80eeSchristos rrtype_descriptor_by_type(uint16_t type)
860d83a80eeSchristos {
861d83a80eeSchristos 	if (type < RRTYPE_DESCRIPTORS_LENGTH)
862d83a80eeSchristos 		return &rrtype_descriptors[type];
863d83a80eeSchristos 	else if (type == TYPE_DLV)
864d83a80eeSchristos 		return &rrtype_descriptors[PSEUDO_TYPE_DLV];
865d83a80eeSchristos 	return &rrtype_descriptors[0];
866d83a80eeSchristos }
867d83a80eeSchristos 
868d83a80eeSchristos rrtype_descriptor_type *
rrtype_descriptor_by_name(const char * name)869d83a80eeSchristos rrtype_descriptor_by_name(const char *name)
870d83a80eeSchristos {
871d83a80eeSchristos 	int i;
872d83a80eeSchristos 
873d83a80eeSchristos 	for (i = 0; i < RRTYPE_DESCRIPTORS_LENGTH; ++i) {
874d83a80eeSchristos 		if (rrtype_descriptors[i].name
875d83a80eeSchristos 		    && strcasecmp(rrtype_descriptors[i].name, name) == 0)
876d83a80eeSchristos 		{
877d83a80eeSchristos 			return &rrtype_descriptors[i];
878d83a80eeSchristos 		}
879d83a80eeSchristos 	}
880d83a80eeSchristos 
881d83a80eeSchristos 	if (rrtype_descriptors[PSEUDO_TYPE_DLV].name
882d83a80eeSchristos 	    && strcasecmp(rrtype_descriptors[PSEUDO_TYPE_DLV].name, name) == 0)
883d83a80eeSchristos 	{
884d83a80eeSchristos 		return &rrtype_descriptors[PSEUDO_TYPE_DLV];
885d83a80eeSchristos 	}
886d83a80eeSchristos 
887d83a80eeSchristos 	return NULL;
888d83a80eeSchristos }
889d83a80eeSchristos 
890d83a80eeSchristos const char *
rrtype_to_string(uint16_t rrtype)891d83a80eeSchristos rrtype_to_string(uint16_t rrtype)
892d83a80eeSchristos {
893d83a80eeSchristos 	static char buf[20];
894d83a80eeSchristos 	rrtype_descriptor_type *descriptor = rrtype_descriptor_by_type(rrtype);
895d83a80eeSchristos 	if (descriptor->name) {
896d83a80eeSchristos 		return descriptor->name;
897d83a80eeSchristos 	} else {
898d83a80eeSchristos 		snprintf(buf, sizeof(buf), "TYPE%d", (int) rrtype);
899d83a80eeSchristos 		return buf;
900d83a80eeSchristos 	}
901d83a80eeSchristos }
902d83a80eeSchristos 
903d83a80eeSchristos /*
904d83a80eeSchristos  * Lookup the type in the ztypes lookup table.  If not found, check if
905d83a80eeSchristos  * the type uses the "TYPExxx" notation for unknown types.
906d83a80eeSchristos  *
907d83a80eeSchristos  * Return 0 if no type matches.
908d83a80eeSchristos  */
909d83a80eeSchristos uint16_t
rrtype_from_string(const char * name)910d83a80eeSchristos rrtype_from_string(const char *name)
911d83a80eeSchristos {
912d83a80eeSchristos         char *end;
913d83a80eeSchristos         long rrtype;
914d83a80eeSchristos 	rrtype_descriptor_type *entry;
915d83a80eeSchristos 
916d83a80eeSchristos 	/* Because this routine is called during zone parse for every record,
917d83a80eeSchristos 	 * we optimise for frequently occurring records.
918d83a80eeSchristos 	 * Also, we optimise for 'IN' and numbers are not rr types, because
919d83a80eeSchristos 	 * during parse this routine is called for every rr class and TTL
920d83a80eeSchristos 	 * to determine that it is not an RR type */
921d83a80eeSchristos 	switch(name[0]) {
922d83a80eeSchristos 	case 'r':
923d83a80eeSchristos 	case 'R':
924d83a80eeSchristos 		if(strcasecmp(name+1, "RSIG") == 0) return TYPE_RRSIG;
925d83a80eeSchristos 		break;
926d83a80eeSchristos 	case 'n':
927d83a80eeSchristos 	case 'N':
928d83a80eeSchristos 		switch(name[1]) {
929d83a80eeSchristos 		case 's':
930d83a80eeSchristos 		case 'S':
931d83a80eeSchristos 			switch(name[2]) {
932d83a80eeSchristos 			case 0: return TYPE_NS;
933d83a80eeSchristos 			case 'e':
934d83a80eeSchristos 			case 'E':
935d83a80eeSchristos 				if(strcasecmp(name+2, "EC") == 0) return TYPE_NSEC;
936d83a80eeSchristos 				if(strcasecmp(name+2, "EC3") == 0) return TYPE_NSEC3;
937d83a80eeSchristos 				if(strcasecmp(name+2, "EC3PARAM") == 0) return TYPE_NSEC3PARAM;
938d83a80eeSchristos 				break;
939d83a80eeSchristos 			}
940d83a80eeSchristos 			break;
941d83a80eeSchristos 		}
942d83a80eeSchristos 		break;
943d83a80eeSchristos 	case 'd':
944d83a80eeSchristos 	case 'D':
945d83a80eeSchristos 		switch(name[1]) {
946d83a80eeSchristos 		case 's':
947d83a80eeSchristos 		case 'S':
948d83a80eeSchristos 			if(name[2]==0) return TYPE_DS;
949d83a80eeSchristos 			break;
950d83a80eeSchristos 		case 'n':
951d83a80eeSchristos 		case 'N':
952d83a80eeSchristos 			if(strcasecmp(name+2, "SKEY") == 0) return TYPE_DNSKEY;
953d83a80eeSchristos 			break;
954d83a80eeSchristos 		}
955d83a80eeSchristos 		break;
956d83a80eeSchristos 	case 'a':
957d83a80eeSchristos 	case 'A':
958d83a80eeSchristos 		switch(name[1]) {
959d83a80eeSchristos 		case 0:	return TYPE_A;
960d83a80eeSchristos 		case 'a':
961d83a80eeSchristos 		case 'A':
962d83a80eeSchristos 			if(strcasecmp(name+2, "AA") == 0) return TYPE_AAAA;
963d83a80eeSchristos 			break;
964d83a80eeSchristos 		}
965d83a80eeSchristos 		break;
966d83a80eeSchristos 	case 's':
967d83a80eeSchristos 	case 'S':
968d83a80eeSchristos 		if(strcasecmp(name+1, "OA") == 0) return TYPE_SOA;
969d83a80eeSchristos 		break;
970d83a80eeSchristos 	case 't':
971d83a80eeSchristos 	case 'T':
972d83a80eeSchristos 		if(strcasecmp(name+1, "XT") == 0) return TYPE_TXT;
973d83a80eeSchristos 		break;
974d83a80eeSchristos 	case '0':
975d83a80eeSchristos 	case '1':
976d83a80eeSchristos 	case '2':
977d83a80eeSchristos 	case '3':
978d83a80eeSchristos 	case '4':
979d83a80eeSchristos 	case '5':
980d83a80eeSchristos 	case '6':
981d83a80eeSchristos 	case '7':
982d83a80eeSchristos 	case '8':
983d83a80eeSchristos 	case '9':
984d83a80eeSchristos 		return 0; /* no RR types start with 0-9 */
985d83a80eeSchristos 	case 'i':
986d83a80eeSchristos 	case 'I':
987d83a80eeSchristos 		switch(name[1]) {
988d83a80eeSchristos 		case 'n':
989d83a80eeSchristos 		case 'N':
990d83a80eeSchristos 			return 0; /* 'IN' is a class not a type */
991d83a80eeSchristos 		}
992d83a80eeSchristos 		break;
993d83a80eeSchristos 	}
994d83a80eeSchristos 
995d83a80eeSchristos 	entry = rrtype_descriptor_by_name(name);
996d83a80eeSchristos 	if (entry) {
997d83a80eeSchristos 		return entry->type;
998d83a80eeSchristos 	}
999d83a80eeSchristos 
1000d83a80eeSchristos 	if (strlen(name) < 5)
1001d83a80eeSchristos 		return 0;
1002d83a80eeSchristos 
1003d83a80eeSchristos 	if (strncasecmp(name, "TYPE", 4) != 0)
1004d83a80eeSchristos 		return 0;
1005d83a80eeSchristos 
1006d83a80eeSchristos 	if (!isdigit((unsigned char)name[4]))
1007d83a80eeSchristos 		return 0;
1008d83a80eeSchristos 
1009d83a80eeSchristos 	/* The rest from the string must be a number.  */
1010d83a80eeSchristos 	rrtype = strtol(name + 4, &end, 10);
1011d83a80eeSchristos 	if (*end != '\0')
1012d83a80eeSchristos 		return 0;
1013d83a80eeSchristos 	if (rrtype < 0 || rrtype > 65535L)
1014d83a80eeSchristos 		return 0;
1015d83a80eeSchristos 
1016d83a80eeSchristos         return (uint16_t) rrtype;
1017d83a80eeSchristos }
1018d83a80eeSchristos 
1019d83a80eeSchristos const char *
rrclass_to_string(uint16_t rrclass)1020d83a80eeSchristos rrclass_to_string(uint16_t rrclass)
1021d83a80eeSchristos {
1022d83a80eeSchristos 	static char buf[20];
1023d83a80eeSchristos 	lookup_table_type *entry = lookup_by_id(dns_rrclasses, rrclass);
1024d83a80eeSchristos 	if (entry) {
1025d83a80eeSchristos 		assert(strlen(entry->name) < sizeof(buf));
1026d83a80eeSchristos 		strlcpy(buf, entry->name, sizeof(buf));
1027d83a80eeSchristos 	} else {
1028d83a80eeSchristos 		snprintf(buf, sizeof(buf), "CLASS%d", (int) rrclass);
1029d83a80eeSchristos 	}
1030d83a80eeSchristos 	return buf;
1031d83a80eeSchristos }
1032d83a80eeSchristos 
1033d83a80eeSchristos uint16_t
rrclass_from_string(const char * name)1034d83a80eeSchristos rrclass_from_string(const char *name)
1035d83a80eeSchristos {
1036d83a80eeSchristos         char *end;
1037d83a80eeSchristos         long rrclass;
1038d83a80eeSchristos 	lookup_table_type *entry;
1039d83a80eeSchristos 
1040d83a80eeSchristos 	entry = lookup_by_name(dns_rrclasses, name);
1041d83a80eeSchristos 	if (entry) {
1042d83a80eeSchristos 		return (uint16_t) entry->id;
1043d83a80eeSchristos 	}
1044d83a80eeSchristos 
1045d83a80eeSchristos 	if (strlen(name) < 6)
1046d83a80eeSchristos 		return 0;
1047d83a80eeSchristos 
1048d83a80eeSchristos 	if (strncasecmp(name, "CLASS", 5) != 0)
1049d83a80eeSchristos 		return 0;
1050d83a80eeSchristos 
1051d83a80eeSchristos 	if (!isdigit((unsigned char)name[5]))
1052d83a80eeSchristos 		return 0;
1053d83a80eeSchristos 
1054d83a80eeSchristos 	/* The rest from the string must be a number.  */
1055d83a80eeSchristos 	rrclass = strtol(name + 5, &end, 10);
1056d83a80eeSchristos 	if (*end != '\0')
1057d83a80eeSchristos 		return 0;
1058d83a80eeSchristos 	if (rrclass < 0 || rrclass > 65535L)
1059d83a80eeSchristos 		return 0;
1060d83a80eeSchristos 
1061d83a80eeSchristos 	return (uint16_t) rrclass;
1062d83a80eeSchristos }
1063