0f8546004919c430507c09ced9294c4b582c1132
[musl] / include / arpa / nameser.h
1 #ifndef _ARPA_NAMESER_H_
2 #define _ARPA_NAMESER_H_
3
4 #define __NAMESER       19991006
5 #define NS_PACKETSZ     512
6 #define NS_MAXDNAME     1025
7 #define NS_MAXMSG       65535
8 #define NS_MAXCDNAME    255
9 #define NS_MAXLABEL     63
10 #define NS_HFIXEDSZ     12
11 #define NS_QFIXEDSZ     4
12 #define NS_RRFIXEDSZ    10
13 #define NS_INT32SZ      4
14 #define NS_INT16SZ      2
15 #define NS_INT8SZ       1
16 #define NS_INADDRSZ     4
17 #define NS_IN6ADDRSZ    16
18 #define NS_CMPRSFLGS    0xc0
19 #define NS_DEFAULTPORT  53
20
21 typedef enum __ns_sect {
22         ns_s_qd = 0,
23         ns_s_zn = 0,
24         ns_s_an = 1,
25         ns_s_pr = 1,
26         ns_s_ns = 2,
27         ns_s_ud = 2,
28         ns_s_ar = 3,
29         ns_s_max = 4
30 } ns_sect;
31
32 typedef struct __ns_msg {
33         const unsigned char *_msg, *_eom;
34         uint16_t _id, _flags, _counts[ns_s_max];
35         const unsigned char *_sections[ns_s_max];
36         ns_sect _sect;
37         int _rrnum;
38         const unsigned char *_msg_ptr;
39 } ns_msg;
40
41 struct _ns_flagdata {  int mask, shift;  };
42 extern const struct _ns_flagdata _ns_flagdata[];
43
44 #define ns_msg_id(handle) ((handle)._id + 0)
45 #define ns_msg_base(handle) ((handle)._msg + 0)
46 #define ns_msg_end(handle) ((handle)._eom + 0)
47 #define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
48 #define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
49
50 typedef struct __ns_rr {
51         char            name[NS_MAXDNAME];
52         uint16_t        type;
53         uint16_t        rr_class;
54         uint32_t        ttl;
55         uint16_t        rdlength;
56         const unsigned char *rdata;
57 } ns_rr;
58
59 #define ns_rr_name(rr)  (((rr).name[0] != '\0') ? (rr).name : ".")
60 #define ns_rr_type(rr)  ((ns_type)((rr).type + 0))
61 #define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
62 #define ns_rr_ttl(rr)   ((rr).ttl + 0)
63 #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
64 #define ns_rr_rdata(rr) ((rr).rdata + 0)
65
66 typedef enum __ns_flag {
67         ns_f_qr,
68         ns_f_opcode,
69         ns_f_aa,
70         ns_f_tc,
71         ns_f_rd,
72         ns_f_ra,
73         ns_f_z,
74         ns_f_ad,
75         ns_f_cd,
76         ns_f_rcode,
77         ns_f_max
78 } ns_flag;
79
80 typedef enum __ns_opcode {
81         ns_o_query = 0,
82         ns_o_iquery = 1,
83         ns_o_status = 2,
84         ns_o_notify = 4,
85         ns_o_update = 5,
86         ns_o_max = 6
87 } ns_opcode;
88
89 typedef enum __ns_rcode {
90         ns_r_noerror = 0,
91         ns_r_formerr = 1,
92         ns_r_servfail = 2,
93         ns_r_nxdomain = 3,
94         ns_r_notimpl = 4,
95         ns_r_refused = 5,
96         ns_r_yxdomain = 6,
97         ns_r_yxrrset = 7,
98         ns_r_nxrrset = 8,
99         ns_r_notauth = 9,
100         ns_r_notzone = 10,
101         ns_r_max = 11,
102         ns_r_badvers = 16,
103         ns_r_badsig = 16,
104         ns_r_badkey = 17,
105         ns_r_badtime = 18
106 } ns_rcode;
107
108 typedef enum __ns_update_operation {
109         ns_uop_delete = 0,
110         ns_uop_add = 1,
111         ns_uop_max = 2
112 } ns_update_operation;
113
114 struct ns_tsig_key {
115         char name[NS_MAXDNAME], alg[NS_MAXDNAME];
116         unsigned char *data;
117         int len;
118 };
119 typedef struct ns_tsig_key ns_tsig_key;
120
121 struct ns_tcp_tsig_state {
122         int counter;
123         struct dst_key *key;
124         void *ctx;
125         unsigned char sig[NS_PACKETSZ];
126         int siglen;
127 };
128 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
129
130 #define NS_TSIG_FUDGE 300
131 #define NS_TSIG_TCP_COUNT 100
132 #define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
133
134 #define NS_TSIG_ERROR_NO_TSIG -10
135 #define NS_TSIG_ERROR_NO_SPACE -11
136 #define NS_TSIG_ERROR_FORMERR -12
137
138 typedef enum __ns_type {
139         ns_t_invalid = 0,
140         ns_t_a = 1,
141         ns_t_ns = 2,
142         ns_t_md = 3,
143         ns_t_mf = 4,
144         ns_t_cname = 5,
145         ns_t_soa = 6,
146         ns_t_mb = 7,
147         ns_t_mg = 8,
148         ns_t_mr = 9,
149         ns_t_null = 10,
150         ns_t_wks = 11,
151         ns_t_ptr = 12,
152         ns_t_hinfo = 13,
153         ns_t_minfo = 14,
154         ns_t_mx = 15,
155         ns_t_txt = 16,
156         ns_t_rp = 17,
157         ns_t_afsdb = 18,
158         ns_t_x25 = 19,
159         ns_t_isdn = 20,
160         ns_t_rt = 21,
161         ns_t_nsap = 22,
162         ns_t_nsap_ptr = 23,
163         ns_t_sig = 24,
164         ns_t_key = 25,
165         ns_t_px = 26,
166         ns_t_gpos = 27,
167         ns_t_aaaa = 28,
168         ns_t_loc = 29,
169         ns_t_nxt = 30,
170         ns_t_eid = 31,
171         ns_t_nimloc = 32,
172         ns_t_srv = 33,
173         ns_t_atma = 34,
174         ns_t_naptr = 35,
175         ns_t_kx = 36,
176         ns_t_cert = 37,
177         ns_t_a6 = 38,
178         ns_t_dname = 39,
179         ns_t_sink = 40,
180         ns_t_opt = 41,
181         ns_t_apl = 42,
182         ns_t_tkey = 249,
183         ns_t_tsig = 250,
184         ns_t_ixfr = 251,
185         ns_t_axfr = 252,
186         ns_t_mailb = 253,
187         ns_t_maila = 254,
188         ns_t_any = 255,
189         ns_t_zxfr = 256,
190         ns_t_max = 65536
191 } ns_type;
192
193 #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
194                       (t) == ns_t_mailb || (t) == ns_t_maila)
195 #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
196 #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
197 #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
198 #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
199                        (t) == ns_t_zxfr)
200
201 typedef enum __ns_class {
202         ns_c_invalid = 0,
203         ns_c_in = 1,
204         ns_c_2 = 2,
205         ns_c_chaos = 3,
206         ns_c_hs = 4,
207         ns_c_none = 254,
208         ns_c_any = 255,
209         ns_c_max = 65536
210 } ns_class;
211
212 typedef enum __ns_key_types {
213         ns_kt_rsa = 1,
214         ns_kt_dh  = 2,
215         ns_kt_dsa = 3,
216         ns_kt_private = 254
217 } ns_key_types;
218
219 typedef enum __ns_cert_types {
220         cert_t_pkix = 1,
221         cert_t_spki = 2,
222         cert_t_pgp  = 3,
223         cert_t_url  = 253,
224         cert_t_oid  = 254
225 } ns_cert_types;
226
227 #define NS_KEY_TYPEMASK         0xC000
228 #define NS_KEY_TYPE_AUTH_CONF   0x0000
229 #define NS_KEY_TYPE_CONF_ONLY   0x8000
230 #define NS_KEY_TYPE_AUTH_ONLY   0x4000
231 #define NS_KEY_TYPE_NO_KEY      0xC000
232 #define NS_KEY_NO_AUTH          0x8000
233 #define NS_KEY_NO_CONF          0x4000
234 #define NS_KEY_RESERVED2        0x2000
235 #define NS_KEY_EXTENDED_FLAGS   0x1000
236 #define NS_KEY_RESERVED4        0x0800
237 #define NS_KEY_RESERVED5        0x0400
238 #define NS_KEY_NAME_TYPE        0x0300
239 #define NS_KEY_NAME_USER        0x0000
240 #define NS_KEY_NAME_ENTITY      0x0200
241 #define NS_KEY_NAME_ZONE        0x0100
242 #define NS_KEY_NAME_RESERVED    0x0300
243 #define NS_KEY_RESERVED8        0x0080
244 #define NS_KEY_RESERVED9        0x0040
245 #define NS_KEY_RESERVED10       0x0020
246 #define NS_KEY_RESERVED11       0x0010
247 #define NS_KEY_SIGNATORYMASK    0x000F
248 #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
249                                   NS_KEY_RESERVED4 | \
250                                   NS_KEY_RESERVED5 | \
251                                   NS_KEY_RESERVED8 | \
252                                   NS_KEY_RESERVED9 | \
253                                   NS_KEY_RESERVED10 | \
254                                   NS_KEY_RESERVED11 )
255 #define NS_KEY_RESERVED_BITMASK2 0xFFFF
256 #define NS_ALG_MD5RSA           1
257 #define NS_ALG_DH               2
258 #define NS_ALG_DSA              3
259 #define NS_ALG_DSS              NS_ALG_DSA
260 #define NS_ALG_EXPIRE_ONLY      253
261 #define NS_ALG_PRIVATE_OID      254
262
263 #define NS_KEY_PROT_TLS         1
264 #define NS_KEY_PROT_EMAIL       2
265 #define NS_KEY_PROT_DNSSEC      3
266 #define NS_KEY_PROT_IPSEC       4
267 #define NS_KEY_PROT_ANY         255
268
269 #define NS_MD5RSA_MIN_BITS       512
270 #define NS_MD5RSA_MAX_BITS      4096
271 #define NS_MD5RSA_MAX_BYTES     ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
272 #define NS_MD5RSA_MAX_BASE64    (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
273 #define NS_MD5RSA_MIN_SIZE      ((NS_MD5RSA_MIN_BITS+7)/8)
274 #define NS_MD5RSA_MAX_SIZE      ((NS_MD5RSA_MAX_BITS+7)/8)
275
276 #define NS_DSA_SIG_SIZE         41
277 #define NS_DSA_MIN_SIZE         213
278 #define NS_DSA_MAX_BYTES        405
279
280 #define NS_SIG_TYPE     0
281 #define NS_SIG_ALG      2
282 #define NS_SIG_LABELS   3
283 #define NS_SIG_OTTL     4
284 #define NS_SIG_EXPIR    8
285 #define NS_SIG_SIGNED   12
286 #define NS_SIG_FOOT     16
287 #define NS_SIG_SIGNER   18
288 #define NS_NXT_BITS 8
289 #define NS_NXT_BIT_SET(  n,p) (p[(n)/NS_NXT_BITS] |=  (0x80>>((n)%NS_NXT_BITS)))
290 #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
291 #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] &   (0x80>>((n)%NS_NXT_BITS)))
292 #define NS_NXT_MAX 127
293
294 #define NS_OPT_DNSSEC_OK        0x8000U
295 #define NS_OPT_NSID             3
296
297 #define NS_GET16(s, cp) do { \
298         register const unsigned char *t_cp = (const unsigned char *)(cp); \
299         (s) = ((uint16_t)t_cp[0] << 8) \
300             | ((uint16_t)t_cp[1]) \
301             ; \
302         (cp) += NS_INT16SZ; \
303 } while (0)
304
305 #define NS_GET32(l, cp) do { \
306         register const unsigned char *t_cp = (const unsigned char *)(cp); \
307         (l) = ((uint32_t)t_cp[0] << 24) \
308             | ((uint32_t)t_cp[1] << 16) \
309             | ((uint32_t)t_cp[2] << 8) \
310             | ((uint32_t)t_cp[3]) \
311             ; \
312         (cp) += NS_INT32SZ; \
313 } while (0)
314
315 #define NS_PUT16(s, cp) do { \
316         register uint16_t t_s = (uint16_t)(s); \
317         register unsigned char *t_cp = (unsigned char *)(cp); \
318         *t_cp++ = t_s >> 8; \
319         *t_cp   = t_s; \
320         (cp) += NS_INT16SZ; \
321 } while (0)
322
323 #define NS_PUT32(l, cp) do { \
324         register uint32_t t_l = (uint32_t)(l); \
325         register unsigned char *t_cp = (unsigned char *)(cp); \
326         *t_cp++ = t_l >> 24; \
327         *t_cp++ = t_l >> 16; \
328         *t_cp++ = t_l >> 8; \
329         *t_cp   = t_l; \
330         (cp) += NS_INT32SZ; \
331 } while (0)
332
333
334
335
336 #define __BIND          19950621
337
338 typedef struct {
339         unsigned        id :16;
340 #if __BYTE_ORDER == __BIG_ENDIAN
341         unsigned        qr: 1;
342         unsigned        opcode: 4;
343         unsigned        aa: 1;
344         unsigned        tc: 1;
345         unsigned        rd: 1;
346         unsigned        ra: 1;
347         unsigned        unused :1;
348         unsigned        ad: 1;
349         unsigned        cd: 1;
350         unsigned        rcode :4;
351 #else
352         unsigned        rd :1;
353         unsigned        tc :1;
354         unsigned        aa :1;
355         unsigned        opcode :4;
356         unsigned        qr :1;
357         unsigned        rcode :4;
358         unsigned        cd: 1;
359         unsigned        ad: 1;
360         unsigned        unused :1;
361         unsigned        ra :1;
362 #endif
363         unsigned        qdcount :16;
364         unsigned        ancount :16;
365         unsigned        nscount :16;
366         unsigned        arcount :16;
367 } HEADER;
368
369 #define PACKETSZ        NS_PACKETSZ
370 #define MAXDNAME        NS_MAXDNAME
371 #define MAXCDNAME       NS_MAXCDNAME
372 #define MAXLABEL        NS_MAXLABEL
373 #define HFIXEDSZ        NS_HFIXEDSZ
374 #define QFIXEDSZ        NS_QFIXEDSZ
375 #define RRFIXEDSZ       NS_RRFIXEDSZ
376 #define INT32SZ         NS_INT32SZ
377 #define INT16SZ         NS_INT16SZ
378 #define INT8SZ          NS_INT8SZ
379 #define INADDRSZ        NS_INADDRSZ
380 #define IN6ADDRSZ       NS_IN6ADDRSZ
381 #define INDIR_MASK      NS_CMPRSFLGS
382 #define NAMESERVER_PORT NS_DEFAULTPORT
383
384 #define S_ZONE          ns_s_zn
385 #define S_PREREQ        ns_s_pr
386 #define S_UPDATE        ns_s_ud
387 #define S_ADDT          ns_s_ar
388
389 #define QUERY           ns_o_query
390 #define IQUERY          ns_o_iquery
391 #define STATUS          ns_o_status
392 #define NS_NOTIFY_OP    ns_o_notify
393 #define NS_UPDATE_OP    ns_o_update
394
395 #define NOERROR         ns_r_noerror
396 #define FORMERR         ns_r_formerr
397 #define SERVFAIL        ns_r_servfail
398 #define NXDOMAIN        ns_r_nxdomain
399 #define NOTIMP          ns_r_notimpl
400 #define REFUSED         ns_r_refused
401 #define YXDOMAIN        ns_r_yxdomain
402 #define YXRRSET         ns_r_yxrrset
403 #define NXRRSET         ns_r_nxrrset
404 #define NOTAUTH         ns_r_notauth
405 #define NOTZONE         ns_r_notzone
406
407 #define DELETE          ns_uop_delete
408 #define ADD             ns_uop_add
409
410 #define T_A             ns_t_a
411 #define T_NS            ns_t_ns
412 #define T_MD            ns_t_md
413 #define T_MF            ns_t_mf
414 #define T_CNAME         ns_t_cname
415 #define T_SOA           ns_t_soa
416 #define T_MB            ns_t_mb
417 #define T_MG            ns_t_mg
418 #define T_MR            ns_t_mr
419 #define T_NULL          ns_t_null
420 #define T_WKS           ns_t_wks
421 #define T_PTR           ns_t_ptr
422 #define T_HINFO         ns_t_hinfo
423 #define T_MINFO         ns_t_minfo
424 #define T_MX            ns_t_mx
425 #define T_TXT           ns_t_txt
426 #define T_RP            ns_t_rp
427 #define T_AFSDB         ns_t_afsdb
428 #define T_X25           ns_t_x25
429 #define T_ISDN          ns_t_isdn
430 #define T_RT            ns_t_rt
431 #define T_NSAP          ns_t_nsap
432 #define T_NSAP_PTR      ns_t_nsap_ptr
433 #define T_SIG           ns_t_sig
434 #define T_KEY           ns_t_key
435 #define T_PX            ns_t_px
436 #define T_GPOS          ns_t_gpos
437 #define T_AAAA          ns_t_aaaa
438 #define T_LOC           ns_t_loc
439 #define T_NXT           ns_t_nxt
440 #define T_EID           ns_t_eid
441 #define T_NIMLOC        ns_t_nimloc
442 #define T_SRV           ns_t_srv
443 #define T_ATMA          ns_t_atma
444 #define T_NAPTR         ns_t_naptr
445 #define T_A6            ns_t_a6
446 #define T_DNAME         ns_t_dname
447 #define T_TSIG          ns_t_tsig
448 #define T_IXFR          ns_t_ixfr
449 #define T_AXFR          ns_t_axfr
450 #define T_MAILB         ns_t_mailb
451 #define T_MAILA         ns_t_maila
452 #define T_ANY           ns_t_any
453
454 #define C_IN            ns_c_in
455 #define C_CHAOS         ns_c_chaos
456 #define C_HS            ns_c_hs
457 #define C_NONE          ns_c_none
458 #define C_ANY           ns_c_any
459
460 #define GETSHORT                NS_GET16
461 #define GETLONG                 NS_GET32
462 #define PUTSHORT                NS_PUT16
463 #define PUTLONG                 NS_PUT32
464
465 #endif