1 /*        $NetBSD: nameser_compat.h,v 1.1.1.2 2012/09/09 16:07:49 christos Exp $          */
2 
3 /* Copyright (c) 1983, 1989
4  *    The Regents of the University of California.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. All advertising materials mentioning features or use of this software
15  *    must display the following acknowledgement:
16  *        This product includes software developed by the University of
17  *        California, Berkeley and its contributors.
18  * 4. Neither the name of the University nor the names of its contributors
19  *    may be used to endorse or promote products derived from this software
20  *    without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  */
34 
35 /*%
36  *      from nameser.h        8.1 (Berkeley) 6/2/93
37  *        Id: nameser_compat.h,v 1.8 2006/05/19 02:33:40 marka Exp
38  */
39 
40 #ifndef _ARPA_NAMESER_COMPAT_
41 #define   _ARPA_NAMESER_COMPAT_
42 
43 #define   __BIND              19950621  /*%< (DEAD) interface version stamp. */
44 #ifndef BYTE_ORDER
45 #if (BSD >= 199103)
46 # include <machine/endian.h>
47 #else
48 #ifdef __linux
49 # include <endian.h>
50 #else
51 #define   LITTLE_ENDIAN       1234      /*%< least-significant byte first (vax, pc) */
52 #define   BIG_ENDIAN          4321      /*%< most-significant byte first (IBM, net) */
53 #define   PDP_ENDIAN          3412      /*%< LSB first in word, MSW first in long (pdp) */
54 #if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
55     defined(__i386__) || defined(__i386) || defined(__amd64__) || \
56     defined(__x86_64__) || defined(MIPSEL) || defined(_MIPSEL) || \
57     defined(BIT_ZERO_ON_RIGHT) || defined(__alpha__) || defined(__alpha) || \
58     (defined(__Lynx__) && defined(__x86__))
59 #define BYTE_ORDER  LITTLE_ENDIAN
60 #endif
61 
62 #if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
63     defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
64     defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
65     defined(apollo) || defined(__convex__) || defined(_CRAY) || \
66     defined(__hppa) || defined(__hp9000) || \
67     defined(__hp9000s300) || defined(__hp9000s700) || \
68     defined(__hp3000s900) || defined(__hpux) || defined(MPE) || \
69     defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc) ||  \
70     (defined(__Lynx__) && \
71      (defined(__68k__) || defined(__sparc__) || defined(__powerpc__)))
72 #define BYTE_ORDER  BIG_ENDIAN
73 #endif
74 #endif /* __linux */
75 #endif /* BSD */
76 #endif /* BYTE_ORDER */
77 
78 #if !defined(BYTE_ORDER) || \
79     (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
80     BYTE_ORDER != PDP_ENDIAN)
81           /* you must determine what the correct bit order is for
82            * your compiler - the next line is an intentional error
83            * which will force your compiles to bomb until you fix
84            * the above macros.
85            */
86   error "Undefined or invalid BYTE_ORDER";
87 #endif
88 
89 /*%
90  * Structure for query header.  The order of the fields is machine- and
91  * compiler-dependent, depending on the byte/bit order and the layout
92  * of bit fields.  We use bit fields only in int variables, as this
93  * is all ANSI requires.  This requires a somewhat confusing rearrangement.
94  */
95 
96 typedef struct {
97           unsigned  id :16;             /*%< query identification number */
98 #if BYTE_ORDER == BIG_ENDIAN
99                               /* fields in third byte */
100           unsigned  qr: 1;              /*%< response flag */
101           unsigned  opcode: 4;          /*%< purpose of message */
102           unsigned  aa: 1;              /*%< authoritive answer */
103           unsigned  tc: 1;              /*%< truncated message */
104           unsigned  rd: 1;              /*%< recursion desired */
105                               /* fields in fourth byte */
106           unsigned  ra: 1;              /*%< recursion available */
107           unsigned  unused :1;          /*%< unused bits (MBZ as of 4.9.3a3) */
108           unsigned  ad: 1;              /*%< authentic data from named */
109           unsigned  cd: 1;              /*%< checking disabled by resolver */
110           unsigned  rcode :4; /*%< response code */
111 #endif
112 #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
113                               /* fields in third byte */
114           unsigned  rd :1;              /*%< recursion desired */
115           unsigned  tc :1;              /*%< truncated message */
116           unsigned  aa :1;              /*%< authoritive answer */
117           unsigned  opcode :4;          /*%< purpose of message */
118           unsigned  qr :1;              /*%< response flag */
119                               /* fields in fourth byte */
120           unsigned  rcode :4; /*%< response code */
121           unsigned  cd: 1;              /*%< checking disabled by resolver */
122           unsigned  ad: 1;              /*%< authentic data from named */
123           unsigned  unused :1;          /*%< unused bits (MBZ as of 4.9.3a3) */
124           unsigned  ra :1;              /*%< recursion available */
125 #endif
126                               /* remaining bytes */
127           unsigned  qdcount :16;        /*%< number of question entries */
128           unsigned  ancount :16;        /*%< number of answer entries */
129           unsigned  nscount :16;        /*%< number of authority entries */
130           unsigned  arcount :16;        /*%< number of resource entries */
131 } HEADER;
132 
133 #define PACKETSZ    NS_PACKETSZ
134 #define MAXDNAME    NS_MAXDNAME
135 #define MAXCDNAME   NS_MAXCDNAME
136 #define MAXLABEL    NS_MAXLABEL
137 #define   HFIXEDSZ  NS_HFIXEDSZ
138 #define QFIXEDSZ    NS_QFIXEDSZ
139 #define RRFIXEDSZ   NS_RRFIXEDSZ
140 #define   INT32SZ             NS_INT32SZ
141 #define   INT16SZ             NS_INT16SZ
142 #define   INT8SZ              NS_INT8SZ
143 #define   INADDRSZ  NS_INADDRSZ
144 #define   IN6ADDRSZ NS_IN6ADDRSZ
145 #define   INDIR_MASK          NS_CMPRSFLGS
146 #define NAMESERVER_PORT       NS_DEFAULTPORT
147 
148 #define S_ZONE                ns_s_zn
149 #define S_PREREQ    ns_s_pr
150 #define S_UPDATE    ns_s_ud
151 #define S_ADDT                ns_s_ar
152 
153 #define QUERY                 ns_o_query
154 #define IQUERY                ns_o_iquery
155 #define STATUS                ns_o_status
156 #define   NS_NOTIFY_OP        ns_o_notify
157 #define   NS_UPDATE_OP        ns_o_update
158 
159 #define NOERROR               ns_r_noerror
160 #define FORMERR               ns_r_formerr
161 #define SERVFAIL    ns_r_servfail
162 #define NXDOMAIN    ns_r_nxdomain
163 #define NOTIMP                ns_r_notimpl
164 #define REFUSED               ns_r_refused
165 #define YXDOMAIN    ns_r_yxdomain
166 #define YXRRSET               ns_r_yxrrset
167 #define NXRRSET               ns_r_nxrrset
168 #define NOTAUTH               ns_r_notauth
169 #define NOTZONE               ns_r_notzone
170 /*#define BADSIG              ns_r_badsig*/
171 /*#define BADKEY              ns_r_badkey*/
172 /*#define BADTIME             ns_r_badtime*/
173 
174 
175 #define DELETE                ns_uop_delete
176 #define ADD                   ns_uop_add
177 
178 #define T_A                   ns_t_a
179 #define T_NS                  ns_t_ns
180 #define T_MD                  ns_t_md
181 #define T_MF                  ns_t_mf
182 #define T_CNAME               ns_t_cname
183 #define T_SOA                 ns_t_soa
184 #define T_MB                  ns_t_mb
185 #define T_MG                  ns_t_mg
186 #define T_MR                  ns_t_mr
187 #define T_NULL                ns_t_null
188 #define T_WKS                 ns_t_wks
189 #define T_PTR                 ns_t_ptr
190 #define T_HINFO               ns_t_hinfo
191 #define T_MINFO               ns_t_minfo
192 #define T_MX                  ns_t_mx
193 #define T_TXT                 ns_t_txt
194 #define   T_RP                ns_t_rp
195 #define T_AFSDB               ns_t_afsdb
196 #define T_X25                 ns_t_x25
197 #define T_ISDN                ns_t_isdn
198 #define T_RT                  ns_t_rt
199 #define T_NSAP                ns_t_nsap
200 #define T_NSAP_PTR  ns_t_nsap_ptr
201 #define   T_SIG               ns_t_sig
202 #define   T_KEY               ns_t_key
203 #define   T_PX                ns_t_px
204 #define   T_GPOS              ns_t_gpos
205 #define   T_AAAA              ns_t_aaaa
206 #define   T_LOC               ns_t_loc
207 #define   T_NXT               ns_t_nxt
208 #define   T_EID               ns_t_eid
209 #define   T_NIMLOC  ns_t_nimloc
210 #define   T_SRV               ns_t_srv
211 #define T_ATMA                ns_t_atma
212 #define T_NAPTR               ns_t_naptr
213 #define T_A6                  ns_t_a6
214 #define   T_TSIG              ns_t_tsig
215 #define   T_IXFR              ns_t_ixfr
216 #define T_AXFR                ns_t_axfr
217 #define T_MAILB               ns_t_mailb
218 #define T_MAILA               ns_t_maila
219 #define T_ANY                 ns_t_any
220 
221 #define C_IN                  ns_c_in
222 #define C_CHAOS               ns_c_chaos
223 #define C_HS                  ns_c_hs
224 /* BIND_UPDATE */
225 #define C_NONE                ns_c_none
226 #define C_ANY                 ns_c_any
227 
228 #define   GETSHORT            NS_GET16
229 #define   GETLONG                       NS_GET32
230 #define   PUTSHORT            NS_PUT16
231 #define   PUTLONG                       NS_PUT32
232 
233 #endif /* _ARPA_NAMESER_COMPAT_ */
234 /*! \file */
235