1 #ifndef _ARPA_NAMESER_H
2 #define _ARPA_NAMESER_H
6 #define __NAMESER 19991006
7 #define NS_PACKETSZ 512
8 #define NS_MAXDNAME 1025
9 #define NS_MAXMSG 65535
10 #define NS_MAXCDNAME 255
11 #define NS_MAXLABEL 63
12 #define NS_HFIXEDSZ 12
14 #define NS_RRFIXEDSZ 10
19 #define NS_IN6ADDRSZ 16
20 #define NS_CMPRSFLGS 0xc0
21 #define NS_DEFAULTPORT 53
23 typedef enum __ns_sect {
34 typedef struct __ns_msg {
35 const unsigned char *_msg, *_eom;
36 uint16_t _id, _flags, _counts[ns_s_max];
37 const unsigned char *_sections[ns_s_max];
40 const unsigned char *_msg_ptr;
43 struct _ns_flagdata { int mask, shift; };
44 extern const struct _ns_flagdata _ns_flagdata[];
46 #define ns_msg_id(handle) ((handle)._id + 0)
47 #define ns_msg_base(handle) ((handle)._msg + 0)
48 #define ns_msg_end(handle) ((handle)._eom + 0)
49 #define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
50 #define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
52 typedef struct __ns_rr {
53 char name[NS_MAXDNAME];
58 const unsigned char *rdata;
61 #define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
62 #define ns_rr_type(rr) ((ns_type)((rr).type + 0))
63 #define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
64 #define ns_rr_ttl(rr) ((rr).ttl + 0)
65 #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
66 #define ns_rr_rdata(rr) ((rr).rdata + 0)
68 typedef enum __ns_flag {
82 typedef enum __ns_opcode {
91 typedef enum __ns_rcode {
110 typedef enum __ns_update_operation {
114 } ns_update_operation;
117 char name[NS_MAXDNAME], alg[NS_MAXDNAME];
121 typedef struct ns_tsig_key ns_tsig_key;
123 struct ns_tcp_tsig_state {
127 unsigned char sig[NS_PACKETSZ];
130 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
132 #define NS_TSIG_FUDGE 300
133 #define NS_TSIG_TCP_COUNT 100
134 #define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
136 #define NS_TSIG_ERROR_NO_TSIG -10
137 #define NS_TSIG_ERROR_NO_SPACE -11
138 #define NS_TSIG_ERROR_FORMERR -12
140 typedef enum __ns_type {
195 #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
196 (t) == ns_t_mailb || (t) == ns_t_maila)
197 #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
198 #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
199 #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
200 #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
203 typedef enum __ns_class {
214 typedef enum __ns_key_types {
221 typedef enum __ns_cert_types {
229 #define NS_KEY_TYPEMASK 0xC000
230 #define NS_KEY_TYPE_AUTH_CONF 0x0000
231 #define NS_KEY_TYPE_CONF_ONLY 0x8000
232 #define NS_KEY_TYPE_AUTH_ONLY 0x4000
233 #define NS_KEY_TYPE_NO_KEY 0xC000
234 #define NS_KEY_NO_AUTH 0x8000
235 #define NS_KEY_NO_CONF 0x4000
236 #define NS_KEY_RESERVED2 0x2000
237 #define NS_KEY_EXTENDED_FLAGS 0x1000
238 #define NS_KEY_RESERVED4 0x0800
239 #define NS_KEY_RESERVED5 0x0400
240 #define NS_KEY_NAME_TYPE 0x0300
241 #define NS_KEY_NAME_USER 0x0000
242 #define NS_KEY_NAME_ENTITY 0x0200
243 #define NS_KEY_NAME_ZONE 0x0100
244 #define NS_KEY_NAME_RESERVED 0x0300
245 #define NS_KEY_RESERVED8 0x0080
246 #define NS_KEY_RESERVED9 0x0040
247 #define NS_KEY_RESERVED10 0x0020
248 #define NS_KEY_RESERVED11 0x0010
249 #define NS_KEY_SIGNATORYMASK 0x000F
250 #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
255 NS_KEY_RESERVED10 | \
257 #define NS_KEY_RESERVED_BITMASK2 0xFFFF
258 #define NS_ALG_MD5RSA 1
261 #define NS_ALG_DSS NS_ALG_DSA
262 #define NS_ALG_EXPIRE_ONLY 253
263 #define NS_ALG_PRIVATE_OID 254
265 #define NS_KEY_PROT_TLS 1
266 #define NS_KEY_PROT_EMAIL 2
267 #define NS_KEY_PROT_DNSSEC 3
268 #define NS_KEY_PROT_IPSEC 4
269 #define NS_KEY_PROT_ANY 255
271 #define NS_MD5RSA_MIN_BITS 512
272 #define NS_MD5RSA_MAX_BITS 4096
273 #define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
274 #define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
275 #define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8)
276 #define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8)
278 #define NS_DSA_SIG_SIZE 41
279 #define NS_DSA_MIN_SIZE 213
280 #define NS_DSA_MAX_BYTES 405
282 #define NS_SIG_TYPE 0
284 #define NS_SIG_LABELS 3
285 #define NS_SIG_OTTL 4
286 #define NS_SIG_EXPIR 8
287 #define NS_SIG_SIGNED 12
288 #define NS_SIG_FOOT 16
289 #define NS_SIG_SIGNER 18
290 #define NS_NXT_BITS 8
291 #define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS)))
292 #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
293 #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS)))
294 #define NS_NXT_MAX 127
296 #define NS_OPT_DNSSEC_OK 0x8000U
297 #define NS_OPT_NSID 3
299 #define NS_GET16(s, cp) do { \
300 register const unsigned char *t_cp = (const unsigned char *)(cp); \
301 (s) = ((uint16_t)t_cp[0] << 8) \
302 | ((uint16_t)t_cp[1]) \
304 (cp) += NS_INT16SZ; \
307 #define NS_GET32(l, cp) do { \
308 register const unsigned char *t_cp = (const unsigned char *)(cp); \
309 (l) = ((uint32_t)t_cp[0] << 24) \
310 | ((uint32_t)t_cp[1] << 16) \
311 | ((uint32_t)t_cp[2] << 8) \
312 | ((uint32_t)t_cp[3]) \
314 (cp) += NS_INT32SZ; \
317 #define NS_PUT16(s, cp) do { \
318 register uint16_t t_s = (uint16_t)(s); \
319 register unsigned char *t_cp = (unsigned char *)(cp); \
320 *t_cp++ = t_s >> 8; \
322 (cp) += NS_INT16SZ; \
325 #define NS_PUT32(l, cp) do { \
326 register uint32_t t_l = (uint32_t)(l); \
327 register unsigned char *t_cp = (unsigned char *)(cp); \
328 *t_cp++ = t_l >> 24; \
329 *t_cp++ = t_l >> 16; \
330 *t_cp++ = t_l >> 8; \
332 (cp) += NS_INT32SZ; \
338 #define __BIND 19950621
342 #if __BYTE_ORDER == __BIG_ENDIAN
365 unsigned qdcount :16;
366 unsigned ancount :16;
367 unsigned nscount :16;
368 unsigned arcount :16;
371 #define PACKETSZ NS_PACKETSZ
372 #define MAXDNAME NS_MAXDNAME
373 #define MAXCDNAME NS_MAXCDNAME
374 #define MAXLABEL NS_MAXLABEL
375 #define HFIXEDSZ NS_HFIXEDSZ
376 #define QFIXEDSZ NS_QFIXEDSZ
377 #define RRFIXEDSZ NS_RRFIXEDSZ
378 #define INT32SZ NS_INT32SZ
379 #define INT16SZ NS_INT16SZ
380 #define INT8SZ NS_INT8SZ
381 #define INADDRSZ NS_INADDRSZ
382 #define IN6ADDRSZ NS_IN6ADDRSZ
383 #define INDIR_MASK NS_CMPRSFLGS
384 #define NAMESERVER_PORT NS_DEFAULTPORT
386 #define S_ZONE ns_s_zn
387 #define S_PREREQ ns_s_pr
388 #define S_UPDATE ns_s_ud
389 #define S_ADDT ns_s_ar
391 #define QUERY ns_o_query
392 #define IQUERY ns_o_iquery
393 #define STATUS ns_o_status
394 #define NS_NOTIFY_OP ns_o_notify
395 #define NS_UPDATE_OP ns_o_update
397 #define NOERROR ns_r_noerror
398 #define FORMERR ns_r_formerr
399 #define SERVFAIL ns_r_servfail
400 #define NXDOMAIN ns_r_nxdomain
401 #define NOTIMP ns_r_notimpl
402 #define REFUSED ns_r_refused
403 #define YXDOMAIN ns_r_yxdomain
404 #define YXRRSET ns_r_yxrrset
405 #define NXRRSET ns_r_nxrrset
406 #define NOTAUTH ns_r_notauth
407 #define NOTZONE ns_r_notzone
409 #define DELETE ns_uop_delete
410 #define ADD ns_uop_add
416 #define T_CNAME ns_t_cname
417 #define T_SOA ns_t_soa
421 #define T_NULL ns_t_null
422 #define T_WKS ns_t_wks
423 #define T_PTR ns_t_ptr
424 #define T_HINFO ns_t_hinfo
425 #define T_MINFO ns_t_minfo
427 #define T_TXT ns_t_txt
429 #define T_AFSDB ns_t_afsdb
430 #define T_X25 ns_t_x25
431 #define T_ISDN ns_t_isdn
433 #define T_NSAP ns_t_nsap
434 #define T_NSAP_PTR ns_t_nsap_ptr
435 #define T_SIG ns_t_sig
436 #define T_KEY ns_t_key
438 #define T_GPOS ns_t_gpos
439 #define T_AAAA ns_t_aaaa
440 #define T_LOC ns_t_loc
441 #define T_NXT ns_t_nxt
442 #define T_EID ns_t_eid
443 #define T_NIMLOC ns_t_nimloc
444 #define T_SRV ns_t_srv
445 #define T_ATMA ns_t_atma
446 #define T_NAPTR ns_t_naptr
448 #define T_DNAME ns_t_dname
449 #define T_TSIG ns_t_tsig
450 #define T_IXFR ns_t_ixfr
451 #define T_AXFR ns_t_axfr
452 #define T_MAILB ns_t_mailb
453 #define T_MAILA ns_t_maila
454 #define T_ANY ns_t_any
457 #define C_CHAOS ns_c_chaos
459 #define C_NONE ns_c_none
460 #define C_ANY ns_c_any
462 #define GETSHORT NS_GET16
463 #define GETLONG NS_GET32
464 #define PUTSHORT NS_PUT16
465 #define PUTLONG NS_PUT32