1570af302Sopenharmony_ci#ifndef _ARPA_NAMESER_H
2570af302Sopenharmony_ci#define _ARPA_NAMESER_H
3570af302Sopenharmony_ci
4570af302Sopenharmony_ci#ifdef __cplusplus
5570af302Sopenharmony_ciextern "C" {
6570af302Sopenharmony_ci#endif
7570af302Sopenharmony_ci
8570af302Sopenharmony_ci#include <stddef.h>
9570af302Sopenharmony_ci#include <stdint.h>
10570af302Sopenharmony_ci
11570af302Sopenharmony_ci#define __NAMESER	19991006
12570af302Sopenharmony_ci#define NS_PACKETSZ	512
13570af302Sopenharmony_ci#define NS_MAXDNAME	1025
14570af302Sopenharmony_ci#define NS_MAXMSG	65535
15570af302Sopenharmony_ci#define NS_MAXCDNAME	255
16570af302Sopenharmony_ci#define NS_MAXLABEL	63
17570af302Sopenharmony_ci#define NS_HFIXEDSZ	12
18570af302Sopenharmony_ci#define NS_QFIXEDSZ	4
19570af302Sopenharmony_ci#define NS_RRFIXEDSZ	10
20570af302Sopenharmony_ci#define NS_INT32SZ	4
21570af302Sopenharmony_ci#define NS_INT16SZ	2
22570af302Sopenharmony_ci#define NS_INT8SZ	1
23570af302Sopenharmony_ci#define NS_INADDRSZ	4
24570af302Sopenharmony_ci#define NS_IN6ADDRSZ	16
25570af302Sopenharmony_ci#define NS_CMPRSFLGS	0xc0
26570af302Sopenharmony_ci#define NS_DEFAULTPORT	53
27570af302Sopenharmony_ci
28570af302Sopenharmony_citypedef enum __ns_sect {
29570af302Sopenharmony_ci	ns_s_qd = 0,
30570af302Sopenharmony_ci	ns_s_zn = 0,
31570af302Sopenharmony_ci	ns_s_an = 1,
32570af302Sopenharmony_ci	ns_s_pr = 1,
33570af302Sopenharmony_ci	ns_s_ns = 2,
34570af302Sopenharmony_ci	ns_s_ud = 2,
35570af302Sopenharmony_ci	ns_s_ar = 3,
36570af302Sopenharmony_ci	ns_s_max = 4
37570af302Sopenharmony_ci} ns_sect;
38570af302Sopenharmony_ci
39570af302Sopenharmony_citypedef struct __ns_msg {
40570af302Sopenharmony_ci	const unsigned char *_msg, *_eom;
41570af302Sopenharmony_ci	uint16_t _id, _flags, _counts[ns_s_max];
42570af302Sopenharmony_ci	const unsigned char *_sections[ns_s_max];
43570af302Sopenharmony_ci	ns_sect _sect;
44570af302Sopenharmony_ci	int _rrnum;
45570af302Sopenharmony_ci	const unsigned char *_msg_ptr;
46570af302Sopenharmony_ci} ns_msg;
47570af302Sopenharmony_ci
48570af302Sopenharmony_cistruct _ns_flagdata {  int mask, shift;  };
49570af302Sopenharmony_ciextern const struct _ns_flagdata _ns_flagdata[];
50570af302Sopenharmony_ci
51570af302Sopenharmony_ci#define ns_msg_id(handle) ((handle)._id + 0)
52570af302Sopenharmony_ci#define ns_msg_base(handle) ((handle)._msg + 0)
53570af302Sopenharmony_ci#define ns_msg_end(handle) ((handle)._eom + 0)
54570af302Sopenharmony_ci#define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
55570af302Sopenharmony_ci#define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
56570af302Sopenharmony_ci#define ns_msg_getflag(handle, flag) \
57570af302Sopenharmony_ci	(((handle)._flags & _ns_flagdata[flag].mask) >> _ns_flagdata[flag].shift)
58570af302Sopenharmony_ci
59570af302Sopenharmony_citypedef	struct __ns_rr {
60570af302Sopenharmony_ci	char		name[NS_MAXDNAME];
61570af302Sopenharmony_ci	uint16_t	type;
62570af302Sopenharmony_ci	uint16_t	rr_class;
63570af302Sopenharmony_ci	uint32_t	ttl;
64570af302Sopenharmony_ci	uint16_t	rdlength;
65570af302Sopenharmony_ci	const unsigned char *rdata;
66570af302Sopenharmony_ci} ns_rr;
67570af302Sopenharmony_ci
68570af302Sopenharmony_ci#define ns_rr_name(rr)	(((rr).name[0] != '\0') ? (rr).name : ".")
69570af302Sopenharmony_ci#define ns_rr_type(rr)	((ns_type)((rr).type + 0))
70570af302Sopenharmony_ci#define ns_rr_class(rr)	((ns_class)((rr).rr_class + 0))
71570af302Sopenharmony_ci#define ns_rr_ttl(rr)	((rr).ttl + 0)
72570af302Sopenharmony_ci#define ns_rr_rdlen(rr)	((rr).rdlength + 0)
73570af302Sopenharmony_ci#define ns_rr_rdata(rr)	((rr).rdata + 0)
74570af302Sopenharmony_ci
75570af302Sopenharmony_citypedef enum __ns_flag {
76570af302Sopenharmony_ci	ns_f_qr,
77570af302Sopenharmony_ci	ns_f_opcode,
78570af302Sopenharmony_ci	ns_f_aa,
79570af302Sopenharmony_ci	ns_f_tc,
80570af302Sopenharmony_ci	ns_f_rd,
81570af302Sopenharmony_ci	ns_f_ra,
82570af302Sopenharmony_ci	ns_f_z,
83570af302Sopenharmony_ci	ns_f_ad,
84570af302Sopenharmony_ci	ns_f_cd,
85570af302Sopenharmony_ci	ns_f_rcode,
86570af302Sopenharmony_ci	ns_f_max
87570af302Sopenharmony_ci} ns_flag;
88570af302Sopenharmony_ci
89570af302Sopenharmony_citypedef enum __ns_opcode {
90570af302Sopenharmony_ci	ns_o_query = 0,
91570af302Sopenharmony_ci	ns_o_iquery = 1,
92570af302Sopenharmony_ci	ns_o_status = 2,
93570af302Sopenharmony_ci	ns_o_notify = 4,
94570af302Sopenharmony_ci	ns_o_update = 5,
95570af302Sopenharmony_ci	ns_o_max = 6
96570af302Sopenharmony_ci} ns_opcode;
97570af302Sopenharmony_ci
98570af302Sopenharmony_citypedef	enum __ns_rcode {
99570af302Sopenharmony_ci	ns_r_noerror = 0,
100570af302Sopenharmony_ci	ns_r_formerr = 1,
101570af302Sopenharmony_ci	ns_r_servfail = 2,
102570af302Sopenharmony_ci	ns_r_nxdomain = 3,
103570af302Sopenharmony_ci	ns_r_notimpl = 4,
104570af302Sopenharmony_ci	ns_r_refused = 5,
105570af302Sopenharmony_ci	ns_r_yxdomain = 6,
106570af302Sopenharmony_ci	ns_r_yxrrset = 7,
107570af302Sopenharmony_ci	ns_r_nxrrset = 8,
108570af302Sopenharmony_ci	ns_r_notauth = 9,
109570af302Sopenharmony_ci	ns_r_notzone = 10,
110570af302Sopenharmony_ci	ns_r_max = 11,
111570af302Sopenharmony_ci	ns_r_badvers = 16,
112570af302Sopenharmony_ci	ns_r_badsig = 16,
113570af302Sopenharmony_ci	ns_r_badkey = 17,
114570af302Sopenharmony_ci	ns_r_badtime = 18
115570af302Sopenharmony_ci} ns_rcode;
116570af302Sopenharmony_ci
117570af302Sopenharmony_citypedef enum __ns_update_operation {
118570af302Sopenharmony_ci	ns_uop_delete = 0,
119570af302Sopenharmony_ci	ns_uop_add = 1,
120570af302Sopenharmony_ci	ns_uop_max = 2
121570af302Sopenharmony_ci} ns_update_operation;
122570af302Sopenharmony_ci
123570af302Sopenharmony_cistruct ns_tsig_key {
124570af302Sopenharmony_ci        char name[NS_MAXDNAME], alg[NS_MAXDNAME];
125570af302Sopenharmony_ci        unsigned char *data;
126570af302Sopenharmony_ci        int len;
127570af302Sopenharmony_ci};
128570af302Sopenharmony_citypedef struct ns_tsig_key ns_tsig_key;
129570af302Sopenharmony_ci
130570af302Sopenharmony_cistruct ns_tcp_tsig_state {
131570af302Sopenharmony_ci	int counter;
132570af302Sopenharmony_ci	struct dst_key *key;
133570af302Sopenharmony_ci	void *ctx;
134570af302Sopenharmony_ci	unsigned char sig[NS_PACKETSZ];
135570af302Sopenharmony_ci	int siglen;
136570af302Sopenharmony_ci};
137570af302Sopenharmony_citypedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
138570af302Sopenharmony_ci
139570af302Sopenharmony_ci#define NS_TSIG_FUDGE 300
140570af302Sopenharmony_ci#define NS_TSIG_TCP_COUNT 100
141570af302Sopenharmony_ci#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
142570af302Sopenharmony_ci
143570af302Sopenharmony_ci#define NS_TSIG_ERROR_NO_TSIG -10
144570af302Sopenharmony_ci#define NS_TSIG_ERROR_NO_SPACE -11
145570af302Sopenharmony_ci#define NS_TSIG_ERROR_FORMERR -12
146570af302Sopenharmony_ci
147570af302Sopenharmony_citypedef enum __ns_type {
148570af302Sopenharmony_ci	ns_t_invalid = 0,
149570af302Sopenharmony_ci	ns_t_a = 1,
150570af302Sopenharmony_ci	ns_t_ns = 2,
151570af302Sopenharmony_ci	ns_t_md = 3,
152570af302Sopenharmony_ci	ns_t_mf = 4,
153570af302Sopenharmony_ci	ns_t_cname = 5,
154570af302Sopenharmony_ci	ns_t_soa = 6,
155570af302Sopenharmony_ci	ns_t_mb = 7,
156570af302Sopenharmony_ci	ns_t_mg = 8,
157570af302Sopenharmony_ci	ns_t_mr = 9,
158570af302Sopenharmony_ci	ns_t_null = 10,
159570af302Sopenharmony_ci	ns_t_wks = 11,
160570af302Sopenharmony_ci	ns_t_ptr = 12,
161570af302Sopenharmony_ci	ns_t_hinfo = 13,
162570af302Sopenharmony_ci	ns_t_minfo = 14,
163570af302Sopenharmony_ci	ns_t_mx = 15,
164570af302Sopenharmony_ci	ns_t_txt = 16,
165570af302Sopenharmony_ci	ns_t_rp = 17,
166570af302Sopenharmony_ci	ns_t_afsdb = 18,
167570af302Sopenharmony_ci	ns_t_x25 = 19,
168570af302Sopenharmony_ci	ns_t_isdn = 20,
169570af302Sopenharmony_ci	ns_t_rt = 21,
170570af302Sopenharmony_ci	ns_t_nsap = 22,
171570af302Sopenharmony_ci	ns_t_nsap_ptr = 23,
172570af302Sopenharmony_ci	ns_t_sig = 24,
173570af302Sopenharmony_ci	ns_t_key = 25,
174570af302Sopenharmony_ci	ns_t_px = 26,
175570af302Sopenharmony_ci	ns_t_gpos = 27,
176570af302Sopenharmony_ci	ns_t_aaaa = 28,
177570af302Sopenharmony_ci	ns_t_loc = 29,
178570af302Sopenharmony_ci	ns_t_nxt = 30,
179570af302Sopenharmony_ci	ns_t_eid = 31,
180570af302Sopenharmony_ci	ns_t_nimloc = 32,
181570af302Sopenharmony_ci	ns_t_srv = 33,
182570af302Sopenharmony_ci	ns_t_atma = 34,
183570af302Sopenharmony_ci	ns_t_naptr = 35,
184570af302Sopenharmony_ci	ns_t_kx = 36,
185570af302Sopenharmony_ci	ns_t_cert = 37,
186570af302Sopenharmony_ci	ns_t_a6 = 38,
187570af302Sopenharmony_ci	ns_t_dname = 39,
188570af302Sopenharmony_ci	ns_t_sink = 40,
189570af302Sopenharmony_ci	ns_t_opt = 41,
190570af302Sopenharmony_ci	ns_t_apl = 42,
191570af302Sopenharmony_ci	ns_t_ds = 43,
192570af302Sopenharmony_ci	ns_t_sshfp = 44,
193570af302Sopenharmony_ci	ns_t_ipseckey = 45,
194570af302Sopenharmony_ci	ns_t_rrsig = 46,
195570af302Sopenharmony_ci	ns_t_nsec = 47,
196570af302Sopenharmony_ci	ns_t_dnskey = 48,
197570af302Sopenharmony_ci	ns_t_dhcid = 49,
198570af302Sopenharmony_ci	ns_t_nsec3 = 50,
199570af302Sopenharmony_ci	ns_t_nsec3param = 51,
200570af302Sopenharmony_ci	ns_t_tlsa = 52,
201570af302Sopenharmony_ci	ns_t_smimea = 53,
202570af302Sopenharmony_ci	ns_t_hip = 55,
203570af302Sopenharmony_ci	ns_t_ninfo = 56,
204570af302Sopenharmony_ci	ns_t_rkey = 57,
205570af302Sopenharmony_ci	ns_t_talink = 58,
206570af302Sopenharmony_ci	ns_t_cds = 59,
207570af302Sopenharmony_ci	ns_t_cdnskey = 60,
208570af302Sopenharmony_ci	ns_t_openpgpkey = 61,
209570af302Sopenharmony_ci	ns_t_csync = 62,
210570af302Sopenharmony_ci	ns_t_spf = 99,
211570af302Sopenharmony_ci	ns_t_uinfo = 100,
212570af302Sopenharmony_ci	ns_t_uid = 101,
213570af302Sopenharmony_ci	ns_t_gid = 102,
214570af302Sopenharmony_ci	ns_t_unspec = 103,
215570af302Sopenharmony_ci	ns_t_nid = 104,
216570af302Sopenharmony_ci	ns_t_l32 = 105,
217570af302Sopenharmony_ci	ns_t_l64 = 106,
218570af302Sopenharmony_ci	ns_t_lp = 107,
219570af302Sopenharmony_ci	ns_t_eui48 = 108,
220570af302Sopenharmony_ci	ns_t_eui64 = 109,
221570af302Sopenharmony_ci	ns_t_tkey = 249,
222570af302Sopenharmony_ci	ns_t_tsig = 250,
223570af302Sopenharmony_ci	ns_t_ixfr = 251,
224570af302Sopenharmony_ci	ns_t_axfr = 252,
225570af302Sopenharmony_ci	ns_t_mailb = 253,
226570af302Sopenharmony_ci	ns_t_maila = 254,
227570af302Sopenharmony_ci	ns_t_any = 255,
228570af302Sopenharmony_ci	ns_t_zxfr = 256,
229570af302Sopenharmony_ci	ns_t_uri = 256,
230570af302Sopenharmony_ci	ns_t_caa = 257,
231570af302Sopenharmony_ci	ns_t_avc = 258,
232570af302Sopenharmony_ci	ns_t_ta = 32768,
233570af302Sopenharmony_ci	ns_t_dlv = 32769,
234570af302Sopenharmony_ci	ns_t_max = 65536
235570af302Sopenharmony_ci} ns_type;
236570af302Sopenharmony_ci
237570af302Sopenharmony_ci#define	ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
238570af302Sopenharmony_ci		      (t) == ns_t_mailb || (t) == ns_t_maila)
239570af302Sopenharmony_ci#define	ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
240570af302Sopenharmony_ci#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
241570af302Sopenharmony_ci#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
242570af302Sopenharmony_ci#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
243570af302Sopenharmony_ci		       (t) == ns_t_zxfr)
244570af302Sopenharmony_ci
245570af302Sopenharmony_citypedef enum __ns_class {
246570af302Sopenharmony_ci	ns_c_invalid = 0,
247570af302Sopenharmony_ci	ns_c_in = 1,
248570af302Sopenharmony_ci	ns_c_2 = 2,
249570af302Sopenharmony_ci	ns_c_chaos = 3,
250570af302Sopenharmony_ci	ns_c_hs = 4,
251570af302Sopenharmony_ci	ns_c_none = 254,
252570af302Sopenharmony_ci	ns_c_any = 255,
253570af302Sopenharmony_ci	ns_c_max = 65536
254570af302Sopenharmony_ci} ns_class;
255570af302Sopenharmony_ci
256570af302Sopenharmony_citypedef enum __ns_key_types {
257570af302Sopenharmony_ci	ns_kt_rsa = 1,
258570af302Sopenharmony_ci	ns_kt_dh  = 2,
259570af302Sopenharmony_ci	ns_kt_dsa = 3,
260570af302Sopenharmony_ci	ns_kt_private = 254
261570af302Sopenharmony_ci} ns_key_types;
262570af302Sopenharmony_ci
263570af302Sopenharmony_citypedef enum __ns_cert_types {
264570af302Sopenharmony_ci	cert_t_pkix = 1,
265570af302Sopenharmony_ci	cert_t_spki = 2,
266570af302Sopenharmony_ci	cert_t_pgp  = 3,
267570af302Sopenharmony_ci	cert_t_url  = 253,
268570af302Sopenharmony_ci	cert_t_oid  = 254
269570af302Sopenharmony_ci} ns_cert_types;
270570af302Sopenharmony_ci
271570af302Sopenharmony_ci#define	NS_KEY_TYPEMASK		0xC000
272570af302Sopenharmony_ci#define	NS_KEY_TYPE_AUTH_CONF	0x0000
273570af302Sopenharmony_ci#define	NS_KEY_TYPE_CONF_ONLY	0x8000
274570af302Sopenharmony_ci#define	NS_KEY_TYPE_AUTH_ONLY	0x4000
275570af302Sopenharmony_ci#define	NS_KEY_TYPE_NO_KEY	0xC000
276570af302Sopenharmony_ci#define	NS_KEY_NO_AUTH		0x8000
277570af302Sopenharmony_ci#define	NS_KEY_NO_CONF		0x4000
278570af302Sopenharmony_ci#define	NS_KEY_RESERVED2	0x2000
279570af302Sopenharmony_ci#define	NS_KEY_EXTENDED_FLAGS	0x1000
280570af302Sopenharmony_ci#define	NS_KEY_RESERVED4	0x0800
281570af302Sopenharmony_ci#define	NS_KEY_RESERVED5	0x0400
282570af302Sopenharmony_ci#define	NS_KEY_NAME_TYPE	0x0300
283570af302Sopenharmony_ci#define	NS_KEY_NAME_USER	0x0000
284570af302Sopenharmony_ci#define	NS_KEY_NAME_ENTITY	0x0200
285570af302Sopenharmony_ci#define	NS_KEY_NAME_ZONE	0x0100
286570af302Sopenharmony_ci#define	NS_KEY_NAME_RESERVED	0x0300
287570af302Sopenharmony_ci#define	NS_KEY_RESERVED8	0x0080
288570af302Sopenharmony_ci#define	NS_KEY_RESERVED9	0x0040
289570af302Sopenharmony_ci#define	NS_KEY_RESERVED10	0x0020
290570af302Sopenharmony_ci#define	NS_KEY_RESERVED11	0x0010
291570af302Sopenharmony_ci#define	NS_KEY_SIGNATORYMASK	0x000F
292570af302Sopenharmony_ci#define	NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
293570af302Sopenharmony_ci				  NS_KEY_RESERVED4 | \
294570af302Sopenharmony_ci				  NS_KEY_RESERVED5 | \
295570af302Sopenharmony_ci				  NS_KEY_RESERVED8 | \
296570af302Sopenharmony_ci				  NS_KEY_RESERVED9 | \
297570af302Sopenharmony_ci				  NS_KEY_RESERVED10 | \
298570af302Sopenharmony_ci				  NS_KEY_RESERVED11 )
299570af302Sopenharmony_ci#define NS_KEY_RESERVED_BITMASK2 0xFFFF
300570af302Sopenharmony_ci#define	NS_ALG_MD5RSA		1
301570af302Sopenharmony_ci#define	NS_ALG_DH               2
302570af302Sopenharmony_ci#define	NS_ALG_DSA              3
303570af302Sopenharmony_ci#define	NS_ALG_DSS              NS_ALG_DSA
304570af302Sopenharmony_ci#define	NS_ALG_EXPIRE_ONLY	253
305570af302Sopenharmony_ci#define	NS_ALG_PRIVATE_OID	254
306570af302Sopenharmony_ci
307570af302Sopenharmony_ci#define NS_KEY_PROT_TLS         1
308570af302Sopenharmony_ci#define NS_KEY_PROT_EMAIL       2
309570af302Sopenharmony_ci#define NS_KEY_PROT_DNSSEC      3
310570af302Sopenharmony_ci#define NS_KEY_PROT_IPSEC       4
311570af302Sopenharmony_ci#define NS_KEY_PROT_ANY		255
312570af302Sopenharmony_ci
313570af302Sopenharmony_ci#define	NS_MD5RSA_MIN_BITS	 512
314570af302Sopenharmony_ci#define	NS_MD5RSA_MAX_BITS	4096
315570af302Sopenharmony_ci#define	NS_MD5RSA_MAX_BYTES	((NS_MD5RSA_MAX_BITS+7/8)*2+3)
316570af302Sopenharmony_ci#define	NS_MD5RSA_MAX_BASE64	(((NS_MD5RSA_MAX_BYTES+2)/3)*4)
317570af302Sopenharmony_ci#define NS_MD5RSA_MIN_SIZE	((NS_MD5RSA_MIN_BITS+7)/8)
318570af302Sopenharmony_ci#define NS_MD5RSA_MAX_SIZE	((NS_MD5RSA_MAX_BITS+7)/8)
319570af302Sopenharmony_ci
320570af302Sopenharmony_ci#define NS_DSA_SIG_SIZE         41
321570af302Sopenharmony_ci#define NS_DSA_MIN_SIZE         213
322570af302Sopenharmony_ci#define NS_DSA_MAX_BYTES        405
323570af302Sopenharmony_ci
324570af302Sopenharmony_ci#define	NS_SIG_TYPE	0
325570af302Sopenharmony_ci#define	NS_SIG_ALG	2
326570af302Sopenharmony_ci#define	NS_SIG_LABELS	3
327570af302Sopenharmony_ci#define	NS_SIG_OTTL	4
328570af302Sopenharmony_ci#define	NS_SIG_EXPIR	8
329570af302Sopenharmony_ci#define	NS_SIG_SIGNED	12
330570af302Sopenharmony_ci#define	NS_SIG_FOOT	16
331570af302Sopenharmony_ci#define	NS_SIG_SIGNER	18
332570af302Sopenharmony_ci#define	NS_NXT_BITS 8
333570af302Sopenharmony_ci#define	NS_NXT_BIT_SET(  n,p) (p[(n)/NS_NXT_BITS] |=  (0x80>>((n)%NS_NXT_BITS)))
334570af302Sopenharmony_ci#define	NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
335570af302Sopenharmony_ci#define	NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] &   (0x80>>((n)%NS_NXT_BITS)))
336570af302Sopenharmony_ci#define NS_NXT_MAX 127
337570af302Sopenharmony_ci
338570af302Sopenharmony_ci#define NS_OPT_DNSSEC_OK        0x8000U
339570af302Sopenharmony_ci#define NS_OPT_NSID		3
340570af302Sopenharmony_ci
341570af302Sopenharmony_ci#define NS_GET16(s, cp) (void)((s) = ns_get16(((cp)+=2)-2))
342570af302Sopenharmony_ci#define NS_GET32(l, cp) (void)((l) = ns_get32(((cp)+=4)-4))
343570af302Sopenharmony_ci#define NS_PUT16(s, cp) ns_put16((s), ((cp)+=2)-2)
344570af302Sopenharmony_ci#define NS_PUT32(l, cp) ns_put32((l), ((cp)+=4)-4)
345570af302Sopenharmony_ci
346570af302Sopenharmony_ciunsigned ns_get16(const unsigned char *);
347570af302Sopenharmony_ciunsigned long ns_get32(const unsigned char *);
348570af302Sopenharmony_civoid ns_put16(unsigned, unsigned char *);
349570af302Sopenharmony_civoid ns_put32(unsigned long, unsigned char *);
350570af302Sopenharmony_ci
351570af302Sopenharmony_ciint ns_initparse(const unsigned char *, int, ns_msg *);
352570af302Sopenharmony_ciint ns_parserr(ns_msg *, ns_sect, int, ns_rr *);
353570af302Sopenharmony_ciint ns_skiprr(const unsigned char *, const unsigned char *, ns_sect, int);
354570af302Sopenharmony_ciint ns_name_uncompress(const unsigned char *, const unsigned char *, const unsigned char *, char *, size_t);
355570af302Sopenharmony_ci
356570af302Sopenharmony_ci
357570af302Sopenharmony_ci#define	__BIND		19950621
358570af302Sopenharmony_ci
359570af302Sopenharmony_citypedef struct {
360570af302Sopenharmony_ci	unsigned	id :16;
361570af302Sopenharmony_ci#if __BYTE_ORDER == __BIG_ENDIAN
362570af302Sopenharmony_ci	unsigned	qr: 1;
363570af302Sopenharmony_ci	unsigned	opcode: 4;
364570af302Sopenharmony_ci	unsigned	aa: 1;
365570af302Sopenharmony_ci	unsigned	tc: 1;
366570af302Sopenharmony_ci	unsigned	rd: 1;
367570af302Sopenharmony_ci	unsigned	ra: 1;
368570af302Sopenharmony_ci	unsigned	unused :1;
369570af302Sopenharmony_ci	unsigned	ad: 1;
370570af302Sopenharmony_ci	unsigned	cd: 1;
371570af302Sopenharmony_ci	unsigned	rcode :4;
372570af302Sopenharmony_ci#else
373570af302Sopenharmony_ci	unsigned	rd :1;
374570af302Sopenharmony_ci	unsigned	tc :1;
375570af302Sopenharmony_ci	unsigned	aa :1;
376570af302Sopenharmony_ci	unsigned	opcode :4;
377570af302Sopenharmony_ci	unsigned	qr :1;
378570af302Sopenharmony_ci	unsigned	rcode :4;
379570af302Sopenharmony_ci	unsigned	cd: 1;
380570af302Sopenharmony_ci	unsigned	ad: 1;
381570af302Sopenharmony_ci	unsigned	unused :1;
382570af302Sopenharmony_ci	unsigned	ra :1;
383570af302Sopenharmony_ci#endif
384570af302Sopenharmony_ci	unsigned	qdcount :16;
385570af302Sopenharmony_ci	unsigned	ancount :16;
386570af302Sopenharmony_ci	unsigned	nscount :16;
387570af302Sopenharmony_ci	unsigned	arcount :16;
388570af302Sopenharmony_ci} HEADER;
389570af302Sopenharmony_ci
390570af302Sopenharmony_ci#define PACKETSZ	NS_PACKETSZ
391570af302Sopenharmony_ci#define MAXDNAME	NS_MAXDNAME
392570af302Sopenharmony_ci#define MAXCDNAME	NS_MAXCDNAME
393570af302Sopenharmony_ci#define MAXLABEL	NS_MAXLABEL
394570af302Sopenharmony_ci#define	HFIXEDSZ	NS_HFIXEDSZ
395570af302Sopenharmony_ci#define QFIXEDSZ	NS_QFIXEDSZ
396570af302Sopenharmony_ci#define RRFIXEDSZ	NS_RRFIXEDSZ
397570af302Sopenharmony_ci#define	INT32SZ		NS_INT32SZ
398570af302Sopenharmony_ci#define	INT16SZ		NS_INT16SZ
399570af302Sopenharmony_ci#define INT8SZ		NS_INT8SZ
400570af302Sopenharmony_ci#define	INADDRSZ	NS_INADDRSZ
401570af302Sopenharmony_ci#define	IN6ADDRSZ	NS_IN6ADDRSZ
402570af302Sopenharmony_ci#define	INDIR_MASK	NS_CMPRSFLGS
403570af302Sopenharmony_ci#define NAMESERVER_PORT	NS_DEFAULTPORT
404570af302Sopenharmony_ci
405570af302Sopenharmony_ci#define S_ZONE		ns_s_zn
406570af302Sopenharmony_ci#define S_PREREQ	ns_s_pr
407570af302Sopenharmony_ci#define S_UPDATE	ns_s_ud
408570af302Sopenharmony_ci#define S_ADDT		ns_s_ar
409570af302Sopenharmony_ci
410570af302Sopenharmony_ci#define QUERY		ns_o_query
411570af302Sopenharmony_ci#define IQUERY		ns_o_iquery
412570af302Sopenharmony_ci#define STATUS		ns_o_status
413570af302Sopenharmony_ci#define	NS_NOTIFY_OP	ns_o_notify
414570af302Sopenharmony_ci#define	NS_UPDATE_OP	ns_o_update
415570af302Sopenharmony_ci
416570af302Sopenharmony_ci#define NOERROR		ns_r_noerror
417570af302Sopenharmony_ci#define FORMERR		ns_r_formerr
418570af302Sopenharmony_ci#define SERVFAIL	ns_r_servfail
419570af302Sopenharmony_ci#define NXDOMAIN	ns_r_nxdomain
420570af302Sopenharmony_ci#define NOTIMP		ns_r_notimpl
421570af302Sopenharmony_ci#define REFUSED		ns_r_refused
422570af302Sopenharmony_ci#define YXDOMAIN	ns_r_yxdomain
423570af302Sopenharmony_ci#define YXRRSET		ns_r_yxrrset
424570af302Sopenharmony_ci#define NXRRSET		ns_r_nxrrset
425570af302Sopenharmony_ci#define NOTAUTH		ns_r_notauth
426570af302Sopenharmony_ci#define NOTZONE		ns_r_notzone
427570af302Sopenharmony_ci
428570af302Sopenharmony_ci#define DELETE		ns_uop_delete
429570af302Sopenharmony_ci#define ADD		ns_uop_add
430570af302Sopenharmony_ci
431570af302Sopenharmony_ci#define T_A		ns_t_a
432570af302Sopenharmony_ci#define T_NS		ns_t_ns
433570af302Sopenharmony_ci#define T_MD		ns_t_md
434570af302Sopenharmony_ci#define T_MF		ns_t_mf
435570af302Sopenharmony_ci#define T_CNAME		ns_t_cname
436570af302Sopenharmony_ci#define T_SOA		ns_t_soa
437570af302Sopenharmony_ci#define T_MB		ns_t_mb
438570af302Sopenharmony_ci#define T_MG		ns_t_mg
439570af302Sopenharmony_ci#define T_MR		ns_t_mr
440570af302Sopenharmony_ci#define T_NULL		ns_t_null
441570af302Sopenharmony_ci#define T_WKS		ns_t_wks
442570af302Sopenharmony_ci#define T_PTR		ns_t_ptr
443570af302Sopenharmony_ci#define T_HINFO		ns_t_hinfo
444570af302Sopenharmony_ci#define T_MINFO		ns_t_minfo
445570af302Sopenharmony_ci#define T_MX		ns_t_mx
446570af302Sopenharmony_ci#define T_TXT		ns_t_txt
447570af302Sopenharmony_ci#define	T_RP		ns_t_rp
448570af302Sopenharmony_ci#define T_AFSDB		ns_t_afsdb
449570af302Sopenharmony_ci#define T_X25		ns_t_x25
450570af302Sopenharmony_ci#define T_ISDN		ns_t_isdn
451570af302Sopenharmony_ci#define T_RT		ns_t_rt
452570af302Sopenharmony_ci#define T_NSAP		ns_t_nsap
453570af302Sopenharmony_ci#define T_NSAP_PTR	ns_t_nsap_ptr
454570af302Sopenharmony_ci#define	T_SIG		ns_t_sig
455570af302Sopenharmony_ci#define	T_KEY		ns_t_key
456570af302Sopenharmony_ci#define	T_PX		ns_t_px
457570af302Sopenharmony_ci#define	T_GPOS		ns_t_gpos
458570af302Sopenharmony_ci#define	T_AAAA		ns_t_aaaa
459570af302Sopenharmony_ci#define	T_LOC		ns_t_loc
460570af302Sopenharmony_ci#define	T_NXT		ns_t_nxt
461570af302Sopenharmony_ci#define	T_EID		ns_t_eid
462570af302Sopenharmony_ci#define	T_NIMLOC	ns_t_nimloc
463570af302Sopenharmony_ci#define	T_SRV		ns_t_srv
464570af302Sopenharmony_ci#define T_ATMA		ns_t_atma
465570af302Sopenharmony_ci#define T_NAPTR		ns_t_naptr
466570af302Sopenharmony_ci#define T_A6		ns_t_a6
467570af302Sopenharmony_ci#define T_DNAME		ns_t_dname
468570af302Sopenharmony_ci#define T_DS		ns_t_ds
469570af302Sopenharmony_ci#define T_SSHFP		ns_t_sshfp
470570af302Sopenharmony_ci#define T_IPSECKEY	ns_t_ipseckey
471570af302Sopenharmony_ci#define T_RRSIG		ns_t_rrsig
472570af302Sopenharmony_ci#define T_NSEC		ns_t_nsec
473570af302Sopenharmony_ci#define T_DNSKEY	ns_t_dnskey
474570af302Sopenharmony_ci#define T_DHCID		ns_t_dhcid
475570af302Sopenharmony_ci#define T_NSEC3		ns_t_nsec3
476570af302Sopenharmony_ci#define T_NSEC3PARAM	ns_t_nsec3param
477570af302Sopenharmony_ci#define T_TLSA		ns_t_tlsa
478570af302Sopenharmony_ci#define T_SMIMEA	ns_t_smimea
479570af302Sopenharmony_ci#define T_HIP		ns_t_hip
480570af302Sopenharmony_ci#define T_NINFO		ns_t_ninfo
481570af302Sopenharmony_ci#define T_RKEY		ns_t_rkey
482570af302Sopenharmony_ci#define T_TALINK	ns_t_talink
483570af302Sopenharmony_ci#define T_CDS		ns_t_cds
484570af302Sopenharmony_ci#define T_CDNSKEY	ns_t_cdnskey
485570af302Sopenharmony_ci#define T_OPENPGPKEY	ns_t_openpgpkey
486570af302Sopenharmony_ci#define T_CSYNC		ns_t_csync
487570af302Sopenharmony_ci#define T_SPF		ns_t_spf
488570af302Sopenharmony_ci#define T_UINFO		ns_t_uinfo
489570af302Sopenharmony_ci#define T_UID		ns_t_uid
490570af302Sopenharmony_ci#define T_GID		ns_t_gid
491570af302Sopenharmony_ci#define T_UNSPEC	ns_t_unspec
492570af302Sopenharmony_ci#define T_NID		ns_t_nid
493570af302Sopenharmony_ci#define T_L32		ns_t_l32
494570af302Sopenharmony_ci#define T_L64		ns_t_l64
495570af302Sopenharmony_ci#define T_LP		ns_t_lp
496570af302Sopenharmony_ci#define T_EUI48		ns_t_eui48
497570af302Sopenharmony_ci#define T_EUI64		ns_t_eui64
498570af302Sopenharmony_ci#define T_TKEY		ns_t_tkey
499570af302Sopenharmony_ci#define	T_TSIG		ns_t_tsig
500570af302Sopenharmony_ci#define	T_IXFR		ns_t_ixfr
501570af302Sopenharmony_ci#define T_AXFR		ns_t_axfr
502570af302Sopenharmony_ci#define T_MAILB		ns_t_mailb
503570af302Sopenharmony_ci#define T_MAILA		ns_t_maila
504570af302Sopenharmony_ci#define T_ANY		ns_t_any
505570af302Sopenharmony_ci#define T_URI		ns_t_uri
506570af302Sopenharmony_ci#define T_CAA		ns_t_caa
507570af302Sopenharmony_ci#define T_AVC		ns_t_avc
508570af302Sopenharmony_ci#define T_TA		ns_t_ta
509570af302Sopenharmony_ci#define T_DLV		ns_t_dlv
510570af302Sopenharmony_ci
511570af302Sopenharmony_ci#define C_IN		ns_c_in
512570af302Sopenharmony_ci#define C_CHAOS		ns_c_chaos
513570af302Sopenharmony_ci#define C_HS		ns_c_hs
514570af302Sopenharmony_ci#define C_NONE		ns_c_none
515570af302Sopenharmony_ci#define C_ANY		ns_c_any
516570af302Sopenharmony_ci
517570af302Sopenharmony_ci#define	GETSHORT		NS_GET16
518570af302Sopenharmony_ci#define	GETLONG			NS_GET32
519570af302Sopenharmony_ci#define	PUTSHORT		NS_PUT16
520570af302Sopenharmony_ci#define	PUTLONG			NS_PUT32
521570af302Sopenharmony_ci
522570af302Sopenharmony_ci#ifdef __cplusplus
523570af302Sopenharmony_ci}
524570af302Sopenharmony_ci#endif
525570af302Sopenharmony_ci
526570af302Sopenharmony_ci#endif
527