168651Skris/*
268651Skris * Copyright (c) 1983, 1989
368651Skris *    The Regents of the University of California.  All rights reserved.
468651Skris *
568651Skris * Redistribution and use in source and binary forms, with or without
668651Skris * modification, are permitted provided that the following conditions
768651Skris * are met:
868651Skris * 1. Redistributions of source code must retain the above copyright
968651Skris *    notice, this list of conditions and the following disclaimer.
1068651Skris * 2. Redistributions in binary form must reproduce the above copyright
1168651Skris *    notice, this list of conditions and the following disclaimer in the
1268651Skris *    documentation and/or other materials provided with the distribution.
1368651Skris * 3. Neither the name of the University nor the names of its contributors
1468651Skris *    may be used to endorse or promote products derived from this software
1568651Skris *    without specific prior written permission.
1668651Skris *
1768651Skris * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
1868651Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1968651Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2068651Skris * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2168651Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2255714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2368651Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2468651Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2568651Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2668651Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2768651Skris * SUCH DAMAGE.
2868651Skris */
2968651Skris#ifndef _ARPA_NAMESER_COMPAT_
3068651Skris#define	_ARPA_NAMESER_COMPAT_
3168651Skris
3268651Skris#define	__BIND		19950621	/* (DEAD) interface version stamp. */
3368651Skris
3468651Skris#include <endian.h>
3568651Skris
3668651Skris#if !defined(BYTE_ORDER) || \
3768651Skris    (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN)
3868651Skris	/* you must determine what the correct bit order is for
3968651Skris	 * your compiler - the next line is an intentional error
4068651Skris	 * which will force your compiles to bomb until you fix
4168651Skris	 * the above macros.
4268651Skris	 */
4368651Skris#error "Undefined or invalid BYTE_ORDER";
4468651Skris#endif
4568651Skris
4668651Skris/*
4768651Skris * Structure for query header.  The order of the fields is machine- and
4868651Skris * compiler-dependent, depending on the byte/bit order and the layout
4968651Skris * of bit fields.  We use bit fields only in int variables, as this
5068651Skris * is all ANSI requires.  This requires a somewhat confusing rearrangement.
5168651Skris */
5268651Skris
5368651Skristypedef struct {
5468651Skris	unsigned	id :16;		/* query identification number */
5568651Skris#if BYTE_ORDER == BIG_ENDIAN
5668651Skris			/* fields in third byte */
5768651Skris	unsigned	qr: 1;		/* response flag */
5868651Skris	unsigned	opcode: 4;	/* purpose of message */
5968651Skris	unsigned	aa: 1;		/* authoritative answer */
6068651Skris	unsigned	tc: 1;		/* truncated message */
6168651Skris	unsigned	rd: 1;		/* recursion desired */
6268651Skris			/* fields in fourth byte */
6368651Skris	unsigned	ra: 1;		/* recursion available */
6468651Skris	unsigned	unused :1;	/* unused bits (MBZ as of 4.9.3a3) */
6568651Skris	unsigned	ad: 1;		/* authentic data from named */
6668651Skris	unsigned	cd: 1;		/* checking disabled by resolver */
6768651Skris	unsigned	rcode :4;	/* response code */
6868651Skris#endif
6968651Skris#if BYTE_ORDER == LITTLE_ENDIAN
7068651Skris			/* fields in third byte */
7168651Skris	unsigned	rd :1;		/* recursion desired */
7268651Skris	unsigned	tc :1;		/* truncated message */
7368651Skris	unsigned	aa :1;		/* authoritative answer */
7468651Skris	unsigned	opcode :4;	/* purpose of message */
7568651Skris	unsigned	qr :1;		/* response flag */
7668651Skris			/* fields in fourth byte */
7768651Skris	unsigned	rcode :4;	/* response code */
7868651Skris	unsigned	cd: 1;		/* checking disabled by resolver */
7968651Skris	unsigned	ad: 1;		/* authentic data from named */
8068651Skris	unsigned	unused :1;	/* unused bits (MBZ as of 4.9.3a3) */
8168651Skris	unsigned	ra :1;		/* recursion available */
8268651Skris#endif
8368651Skris			/* remaining bytes */
8468651Skris	unsigned	qdcount :16;	/* number of question entries */
8568651Skris	unsigned	ancount :16;	/* number of answer entries */
8668651Skris	unsigned	nscount :16;	/* number of authority entries */
8768651Skris	unsigned	arcount :16;	/* number of resource entries */
8868651Skris} HEADER;
8968651Skris
9068651Skris#define PACKETSZ	NS_PACKETSZ
9168651Skris#define MAXDNAME	NS_MAXDNAME
9268651Skris#define MAXCDNAME	NS_MAXCDNAME
9368651Skris#define MAXLABEL	NS_MAXLABEL
9468651Skris#define	HFIXEDSZ	NS_HFIXEDSZ
9568651Skris#define QFIXEDSZ	NS_QFIXEDSZ
9668651Skris#define RRFIXEDSZ	NS_RRFIXEDSZ
9768651Skris#define	INT32SZ		NS_INT32SZ
9868651Skris#define	INT16SZ		NS_INT16SZ
9968651Skris#define	INT8SZ		NS_INT8SZ
10068651Skris#define	INADDRSZ	NS_INADDRSZ
10168651Skris#define	IN6ADDRSZ	NS_IN6ADDRSZ
10268651Skris#define	INDIR_MASK	NS_CMPRSFLGS
10368651Skris#define NAMESERVER_PORT	NS_DEFAULTPORT
10468651Skris
10568651Skris#define S_ZONE		ns_s_zn
10668651Skris#define S_PREREQ	ns_s_pr
10768651Skris#define S_UPDATE	ns_s_ud
10868651Skris#define S_ADDT		ns_s_ar
10968651Skris
11068651Skris#define QUERY		ns_o_query
11168651Skris#define IQUERY		ns_o_iquery
11268651Skris#define STATUS		ns_o_status
11368651Skris#define	NS_NOTIFY_OP	ns_o_notify
11468651Skris#define	NS_UPDATE_OP	ns_o_update
11568651Skris
11668651Skris#define NOERROR		ns_r_noerror
11768651Skris#define FORMERR		ns_r_formerr
11868651Skris#define SERVFAIL	ns_r_servfail
11968651Skris#define NXDOMAIN	ns_r_nxdomain
12068651Skris#define NOTIMP		ns_r_notimpl
12168651Skris#define REFUSED		ns_r_refused
12268651Skris#define YXDOMAIN	ns_r_yxdomain
12368651Skris#define YXRRSET		ns_r_yxrrset
12468651Skris#define NXRRSET		ns_r_nxrrset
12555714Skris#define NOTAUTH		ns_r_notauth
12668651Skris#define NOTZONE		ns_r_notzone
12768651Skris/*#define BADSIG		ns_r_badsig*/
12868651Skris/*#define BADKEY		ns_r_badkey*/
12968651Skris/*#define BADTIME		ns_r_badtime*/
13068651Skris
13168651Skris
13268651Skris#define DELETE		ns_uop_delete
13368651Skris#define ADD		ns_uop_add
13468651Skris
13568651Skris#define T_A		ns_t_a
13668651Skris#define T_NS		ns_t_ns
13768651Skris#define T_MD		ns_t_md
13868651Skris#define T_MF		ns_t_mf
13968651Skris#define T_CNAME		ns_t_cname
14068651Skris#define T_SOA		ns_t_soa
14168651Skris#define T_MB		ns_t_mb
14268651Skris#define T_MG		ns_t_mg
14368651Skris#define T_MR		ns_t_mr
14468651Skris#define T_NULL		ns_t_null
14568651Skris#define T_WKS		ns_t_wks
14668651Skris#define T_PTR		ns_t_ptr
14768651Skris#define T_HINFO		ns_t_hinfo
14868651Skris#define T_MINFO		ns_t_minfo
14968651Skris#define T_MX		ns_t_mx
15068651Skris#define T_TXT		ns_t_txt
15168651Skris#define	T_RP		ns_t_rp
15268651Skris#define T_AFSDB		ns_t_afsdb
15368651Skris#define T_X25		ns_t_x25
15468651Skris#define T_ISDN		ns_t_isdn
15568651Skris#define T_RT		ns_t_rt
15668651Skris#define T_NSAP		ns_t_nsap
15768651Skris#define T_NSAP_PTR	ns_t_nsap_ptr
15868651Skris#define	T_SIG		ns_t_sig
15968651Skris#define	T_KEY		ns_t_key
16068651Skris#define	T_PX		ns_t_px
16168651Skris#define	T_GPOS		ns_t_gpos
16268651Skris#define	T_AAAA		ns_t_aaaa
16368651Skris#define	T_LOC		ns_t_loc
16468651Skris#define	T_NXT		ns_t_nxt
16568651Skris#define	T_EID		ns_t_eid
16668651Skris#define	T_NIMLOC	ns_t_nimloc
16768651Skris#define	T_SRV		ns_t_srv
16868651Skris#define T_ATMA		ns_t_atma
16968651Skris#define T_NAPTR		ns_t_naptr
17068651Skris#define T_A6		ns_t_a6
17168651Skris#define T_DNAME		ns_t_dname
17268651Skris#define T_OPT		ns_t_opt
17368651Skris#define	T_TSIG		ns_t_tsig
17468651Skris#define	T_IXFR		ns_t_ixfr
17568651Skris#define T_AXFR		ns_t_axfr
17668651Skris#define T_MAILB		ns_t_mailb
17768651Skris#define T_MAILA		ns_t_maila
17868651Skris#define T_ANY		ns_t_any
17968651Skris
18068651Skris#define C_IN		ns_c_in
18168651Skris#define C_CHAOS		ns_c_chaos
18268651Skris#define C_HS		ns_c_hs
18368651Skris/* BIND_UPDATE */
18468651Skris#define C_NONE		ns_c_none
18568651Skris#define C_ANY		ns_c_any
18668651Skris
18768651Skris#define	GETSHORT		NS_GET16
18868651Skris#define	GETLONG			NS_GET32
18968651Skris#define	PUTSHORT		NS_PUT16
19068651Skris#define	PUTLONG			NS_PUT32
19168651Skris
19268651Skris#endif /* _ARPA_NAMESER_COMPAT_ */
19368651Skris