xref: /aosp_15_r20/external/dnsmasq/src/nameser.h (revision c2c26c8b25cb2c9c4fe49a734c2305a522f5635e)
1*c2c26c8bSAndroid Build Coastguard Worker /*	$OpenBSD: nameser.h,v 1.11 2005/12/20 02:06:56 millert Exp $	*/
2*c2c26c8bSAndroid Build Coastguard Worker 
3*c2c26c8bSAndroid Build Coastguard Worker /*
4*c2c26c8bSAndroid Build Coastguard Worker  * ++Copyright++ 1983, 1989, 1993
5*c2c26c8bSAndroid Build Coastguard Worker  * -
6*c2c26c8bSAndroid Build Coastguard Worker  * Copyright (c) 1983, 1989, 1993
7*c2c26c8bSAndroid Build Coastguard Worker  *    The Regents of the University of California.  All rights reserved.
8*c2c26c8bSAndroid Build Coastguard Worker  *
9*c2c26c8bSAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
10*c2c26c8bSAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
11*c2c26c8bSAndroid Build Coastguard Worker  * are met:
12*c2c26c8bSAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
13*c2c26c8bSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
14*c2c26c8bSAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
15*c2c26c8bSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
16*c2c26c8bSAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
17*c2c26c8bSAndroid Build Coastguard Worker  * 3. Neither the name of the University nor the names of its contributors
18*c2c26c8bSAndroid Build Coastguard Worker  *    may be used to endorse or promote products derived from this software
19*c2c26c8bSAndroid Build Coastguard Worker  *    without specific prior written permission.
20*c2c26c8bSAndroid Build Coastguard Worker  *
21*c2c26c8bSAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22*c2c26c8bSAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23*c2c26c8bSAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24*c2c26c8bSAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25*c2c26c8bSAndroid Build Coastguard Worker  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26*c2c26c8bSAndroid Build Coastguard Worker  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27*c2c26c8bSAndroid Build Coastguard Worker  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28*c2c26c8bSAndroid Build Coastguard Worker  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29*c2c26c8bSAndroid Build Coastguard Worker  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30*c2c26c8bSAndroid Build Coastguard Worker  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*c2c26c8bSAndroid Build Coastguard Worker  * SUCH DAMAGE.
32*c2c26c8bSAndroid Build Coastguard Worker  * -
33*c2c26c8bSAndroid Build Coastguard Worker  * Portions Copyright (c) 1993 by Digital Equipment Corporation.
34*c2c26c8bSAndroid Build Coastguard Worker  *
35*c2c26c8bSAndroid Build Coastguard Worker  * Permission to use, copy, modify, and distribute this software for any
36*c2c26c8bSAndroid Build Coastguard Worker  * purpose with or without fee is hereby granted, provided that the above
37*c2c26c8bSAndroid Build Coastguard Worker  * copyright notice and this permission notice appear in all copies, and that
38*c2c26c8bSAndroid Build Coastguard Worker  * the name of Digital Equipment Corporation not be used in advertising or
39*c2c26c8bSAndroid Build Coastguard Worker  * publicity pertaining to distribution of the document or software without
40*c2c26c8bSAndroid Build Coastguard Worker  * specific, written prior permission.
41*c2c26c8bSAndroid Build Coastguard Worker  *
42*c2c26c8bSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
43*c2c26c8bSAndroid Build Coastguard Worker  * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
44*c2c26c8bSAndroid Build Coastguard Worker  * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
45*c2c26c8bSAndroid Build Coastguard Worker  * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
46*c2c26c8bSAndroid Build Coastguard Worker  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
47*c2c26c8bSAndroid Build Coastguard Worker  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
48*c2c26c8bSAndroid Build Coastguard Worker  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
49*c2c26c8bSAndroid Build Coastguard Worker  * SOFTWARE.
50*c2c26c8bSAndroid Build Coastguard Worker  * -
51*c2c26c8bSAndroid Build Coastguard Worker  * Portions Copyright (c) 1995 by International Business Machines, Inc.
52*c2c26c8bSAndroid Build Coastguard Worker  *
53*c2c26c8bSAndroid Build Coastguard Worker  * International Business Machines, Inc. (hereinafter called IBM) grants
54*c2c26c8bSAndroid Build Coastguard Worker  * permission under its copyrights to use, copy, modify, and distribute this
55*c2c26c8bSAndroid Build Coastguard Worker  * Software with or without fee, provided that the above copyright notice and
56*c2c26c8bSAndroid Build Coastguard Worker  * all paragraphs of this notice appear in all copies, and that the name of IBM
57*c2c26c8bSAndroid Build Coastguard Worker  * not be used in connection with the marketing of any product incorporating
58*c2c26c8bSAndroid Build Coastguard Worker  * the Software or modifications thereof, without specific, written prior
59*c2c26c8bSAndroid Build Coastguard Worker  * permission.
60*c2c26c8bSAndroid Build Coastguard Worker  *
61*c2c26c8bSAndroid Build Coastguard Worker  * To the extent it has a right to do so, IBM grants an immunity from suit
62*c2c26c8bSAndroid Build Coastguard Worker  * under its patents, if any, for the use, sale or manufacture of products to
63*c2c26c8bSAndroid Build Coastguard Worker  * the extent that such products are used for performing Domain Name System
64*c2c26c8bSAndroid Build Coastguard Worker  * dynamic updates in TCP/IP networks by means of the Software.  No immunity is
65*c2c26c8bSAndroid Build Coastguard Worker  * granted for any product per se or for any other function of any product.
66*c2c26c8bSAndroid Build Coastguard Worker  *
67*c2c26c8bSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
68*c2c26c8bSAndroid Build Coastguard Worker  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
69*c2c26c8bSAndroid Build Coastguard Worker  * PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
70*c2c26c8bSAndroid Build Coastguard Worker  * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
71*c2c26c8bSAndroid Build Coastguard Worker  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
72*c2c26c8bSAndroid Build Coastguard Worker  * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
73*c2c26c8bSAndroid Build Coastguard Worker  * --Copyright--
74*c2c26c8bSAndroid Build Coastguard Worker  */
75*c2c26c8bSAndroid Build Coastguard Worker 
76*c2c26c8bSAndroid Build Coastguard Worker /*
77*c2c26c8bSAndroid Build Coastguard Worker  *      @(#)nameser.h	8.1 (Berkeley) 6/2/93
78*c2c26c8bSAndroid Build Coastguard Worker  *	$From: nameser.h,v 8.11 1996/10/08 04:51:02 vixie Exp $
79*c2c26c8bSAndroid Build Coastguard Worker  */
80*c2c26c8bSAndroid Build Coastguard Worker 
81*c2c26c8bSAndroid Build Coastguard Worker #ifndef _NAMESER_H_
82*c2c26c8bSAndroid Build Coastguard Worker #define _NAMESER_H_
83*c2c26c8bSAndroid Build Coastguard Worker 
84*c2c26c8bSAndroid Build Coastguard Worker #include <sys/cdefs.h>
85*c2c26c8bSAndroid Build Coastguard Worker #include <sys/param.h>
86*c2c26c8bSAndroid Build Coastguard Worker 
87*c2c26c8bSAndroid Build Coastguard Worker /*
88*c2c26c8bSAndroid Build Coastguard Worker  * revision information.  this is the release date in YYYYMMDD format.
89*c2c26c8bSAndroid Build Coastguard Worker  * it can change every day so the right thing to do with it is use it
90*c2c26c8bSAndroid Build Coastguard Worker  * in preprocessor commands such as "#if (__BIND > 19931104)".  do not
91*c2c26c8bSAndroid Build Coastguard Worker  * compare for equality; rather, use it to determine whether your resolver
92*c2c26c8bSAndroid Build Coastguard Worker  * is new enough to contain a certain feature.
93*c2c26c8bSAndroid Build Coastguard Worker  */
94*c2c26c8bSAndroid Build Coastguard Worker 
95*c2c26c8bSAndroid Build Coastguard Worker #define __BIND 19960801 /* interface version stamp */
96*c2c26c8bSAndroid Build Coastguard Worker 
97*c2c26c8bSAndroid Build Coastguard Worker /*
98*c2c26c8bSAndroid Build Coastguard Worker  * Define constants based on rfc883
99*c2c26c8bSAndroid Build Coastguard Worker  */
100*c2c26c8bSAndroid Build Coastguard Worker #define PACKETSZ 512  /* maximum packet size */
101*c2c26c8bSAndroid Build Coastguard Worker #define MAXDNAME 1025 /* maximum presentation domain name */
102*c2c26c8bSAndroid Build Coastguard Worker #define MAXCDNAME 255 /* maximum compressed domain name */
103*c2c26c8bSAndroid Build Coastguard Worker #define MAXLABEL 63   /* maximum length of domain label */
104*c2c26c8bSAndroid Build Coastguard Worker #define HFIXEDSZ 12   /* #/bytes of fixed data in header */
105*c2c26c8bSAndroid Build Coastguard Worker #define QFIXEDSZ 4    /* #/bytes of fixed data in query */
106*c2c26c8bSAndroid Build Coastguard Worker #define RRFIXEDSZ 10  /* #/bytes of fixed data in r record */
107*c2c26c8bSAndroid Build Coastguard Worker #define INT32SZ 4     /* for systems without 32-bit ints */
108*c2c26c8bSAndroid Build Coastguard Worker #define INT16SZ 2     /* for systems without 16-bit ints */
109*c2c26c8bSAndroid Build Coastguard Worker #define INADDRSZ 4    /* IPv4 T_A */
110*c2c26c8bSAndroid Build Coastguard Worker #define IN6ADDRSZ 16  /* IPv6 T_AAAA */
111*c2c26c8bSAndroid Build Coastguard Worker 
112*c2c26c8bSAndroid Build Coastguard Worker /*
113*c2c26c8bSAndroid Build Coastguard Worker  * Internet nameserver port number
114*c2c26c8bSAndroid Build Coastguard Worker  */
115*c2c26c8bSAndroid Build Coastguard Worker #define NAMESERVER_PORT 53
116*c2c26c8bSAndroid Build Coastguard Worker 
117*c2c26c8bSAndroid Build Coastguard Worker /*
118*c2c26c8bSAndroid Build Coastguard Worker  * Currently defined opcodes
119*c2c26c8bSAndroid Build Coastguard Worker  */
120*c2c26c8bSAndroid Build Coastguard Worker #define QUERY 0x0         /* standard query */
121*c2c26c8bSAndroid Build Coastguard Worker #define IQUERY 0x1        /* inverse query */
122*c2c26c8bSAndroid Build Coastguard Worker #define STATUS 0x2        /* nameserver status query */
123*c2c26c8bSAndroid Build Coastguard Worker /*#define xxx		0x3*/ /* 0x3 reserved */
124*c2c26c8bSAndroid Build Coastguard Worker #define NS_NOTIFY_OP 0x4  /* notify secondary of SOA change */
125*c2c26c8bSAndroid Build Coastguard Worker /*
126*c2c26c8bSAndroid Build Coastguard Worker  * Currently defined response codes
127*c2c26c8bSAndroid Build Coastguard Worker  */
128*c2c26c8bSAndroid Build Coastguard Worker #define NOERROR 0  /* no error */
129*c2c26c8bSAndroid Build Coastguard Worker #define FORMERR 1  /* format error */
130*c2c26c8bSAndroid Build Coastguard Worker #define SERVFAIL 2 /* server failure */
131*c2c26c8bSAndroid Build Coastguard Worker #define NXDOMAIN 3 /* non existent domain */
132*c2c26c8bSAndroid Build Coastguard Worker #define NOTIMP 4   /* not implemented */
133*c2c26c8bSAndroid Build Coastguard Worker #define REFUSED 5  /* query refused */
134*c2c26c8bSAndroid Build Coastguard Worker 
135*c2c26c8bSAndroid Build Coastguard Worker /*
136*c2c26c8bSAndroid Build Coastguard Worker  * Type values for resources and queries
137*c2c26c8bSAndroid Build Coastguard Worker  */
138*c2c26c8bSAndroid Build Coastguard Worker #define T_A 1         /* host address */
139*c2c26c8bSAndroid Build Coastguard Worker #define T_NS 2        /* authoritative server */
140*c2c26c8bSAndroid Build Coastguard Worker #define T_MD 3        /* mail destination */
141*c2c26c8bSAndroid Build Coastguard Worker #define T_MF 4        /* mail forwarder */
142*c2c26c8bSAndroid Build Coastguard Worker #define T_CNAME 5     /* canonical name */
143*c2c26c8bSAndroid Build Coastguard Worker #define T_SOA 6       /* start of authority zone */
144*c2c26c8bSAndroid Build Coastguard Worker #define T_MB 7        /* mailbox domain name */
145*c2c26c8bSAndroid Build Coastguard Worker #define T_MG 8        /* mail group member */
146*c2c26c8bSAndroid Build Coastguard Worker #define T_MR 9        /* mail rename name */
147*c2c26c8bSAndroid Build Coastguard Worker #define T_NULL 10     /* null resource record */
148*c2c26c8bSAndroid Build Coastguard Worker #define T_WKS 11      /* well known service */
149*c2c26c8bSAndroid Build Coastguard Worker #define T_PTR 12      /* domain name pointer */
150*c2c26c8bSAndroid Build Coastguard Worker #define T_HINFO 13    /* host information */
151*c2c26c8bSAndroid Build Coastguard Worker #define T_MINFO 14    /* mailbox information */
152*c2c26c8bSAndroid Build Coastguard Worker #define T_MX 15       /* mail routing information */
153*c2c26c8bSAndroid Build Coastguard Worker #define T_TXT 16      /* text strings */
154*c2c26c8bSAndroid Build Coastguard Worker #define T_RP 17       /* responsible person */
155*c2c26c8bSAndroid Build Coastguard Worker #define T_AFSDB 18    /* AFS cell database */
156*c2c26c8bSAndroid Build Coastguard Worker #define T_X25 19      /* X_25 calling address */
157*c2c26c8bSAndroid Build Coastguard Worker #define T_ISDN 20     /* ISDN calling address */
158*c2c26c8bSAndroid Build Coastguard Worker #define T_RT 21       /* router */
159*c2c26c8bSAndroid Build Coastguard Worker #define T_NSAP 22     /* NSAP address */
160*c2c26c8bSAndroid Build Coastguard Worker #define T_NSAP_PTR 23 /* reverse NSAP lookup (deprecated) */
161*c2c26c8bSAndroid Build Coastguard Worker #define T_SIG 24      /* security signature */
162*c2c26c8bSAndroid Build Coastguard Worker #define T_KEY 25      /* security key */
163*c2c26c8bSAndroid Build Coastguard Worker #define T_PX 26       /* X.400 mail mapping */
164*c2c26c8bSAndroid Build Coastguard Worker #define T_GPOS 27     /* geographical position (withdrawn) */
165*c2c26c8bSAndroid Build Coastguard Worker #define T_AAAA 28     /* IP6 Address */
166*c2c26c8bSAndroid Build Coastguard Worker #define T_LOC 29      /* Location Information */
167*c2c26c8bSAndroid Build Coastguard Worker #define T_NXT 30      /* Next Valid Name in Zone */
168*c2c26c8bSAndroid Build Coastguard Worker #define T_EID 31      /* Endpoint identifier */
169*c2c26c8bSAndroid Build Coastguard Worker #define T_NIMLOC 32   /* Nimrod locator */
170*c2c26c8bSAndroid Build Coastguard Worker #define T_SRV 33      /* Server selection */
171*c2c26c8bSAndroid Build Coastguard Worker #define T_ATMA 34     /* ATM Address */
172*c2c26c8bSAndroid Build Coastguard Worker #define T_NAPTR 35    /* Naming Authority PoinTeR */
173*c2c26c8bSAndroid Build Coastguard Worker #define T_KX 36       /* Key Exchanger */
174*c2c26c8bSAndroid Build Coastguard Worker #define T_CERT 37     /* CERT */
175*c2c26c8bSAndroid Build Coastguard Worker #define T_A6 38       /* A6 */
176*c2c26c8bSAndroid Build Coastguard Worker #define T_DNAME 39    /* DNAME */
177*c2c26c8bSAndroid Build Coastguard Worker #define T_SINK 40     /* SINK */
178*c2c26c8bSAndroid Build Coastguard Worker #define T_OPT 41      /* OPT pseudo-RR, RFC2671 */
179*c2c26c8bSAndroid Build Coastguard Worker #define T_APL 42      /* APL */
180*c2c26c8bSAndroid Build Coastguard Worker #define T_DS 43       /* Delegation Signer */
181*c2c26c8bSAndroid Build Coastguard Worker #define T_SSHFP 44    /* SSH Key Fingerprint */
182*c2c26c8bSAndroid Build Coastguard Worker #define T_RRSIG 46    /* RRSIG */
183*c2c26c8bSAndroid Build Coastguard Worker #define T_NSEC 47     /* NSEC */
184*c2c26c8bSAndroid Build Coastguard Worker #define T_DNSKEY 48   /* DNSKEY */
185*c2c26c8bSAndroid Build Coastguard Worker                       /* non standard */
186*c2c26c8bSAndroid Build Coastguard Worker #define T_UINFO 100   /* user (finger) information */
187*c2c26c8bSAndroid Build Coastguard Worker #define T_UID 101     /* user ID */
188*c2c26c8bSAndroid Build Coastguard Worker #define T_GID 102     /* group ID */
189*c2c26c8bSAndroid Build Coastguard Worker #define T_UNSPEC 103  /* Unspecified format (binary data) */
190*c2c26c8bSAndroid Build Coastguard Worker                       /* Query type values which do not appear in resource records */
191*c2c26c8bSAndroid Build Coastguard Worker #define T_TKEY 249    /* Transaction Key */
192*c2c26c8bSAndroid Build Coastguard Worker #define T_TSIG 250    /* Transaction Signature */
193*c2c26c8bSAndroid Build Coastguard Worker #define T_IXFR 251    /* incremental zone transfer */
194*c2c26c8bSAndroid Build Coastguard Worker #define T_AXFR 252    /* transfer zone of authority */
195*c2c26c8bSAndroid Build Coastguard Worker #define T_MAILB 253   /* transfer mailbox records */
196*c2c26c8bSAndroid Build Coastguard Worker #define T_MAILA 254   /* transfer mail agent records */
197*c2c26c8bSAndroid Build Coastguard Worker #define T_ANY 255     /* wildcard match */
198*c2c26c8bSAndroid Build Coastguard Worker 
199*c2c26c8bSAndroid Build Coastguard Worker /*
200*c2c26c8bSAndroid Build Coastguard Worker  * Values for class field
201*c2c26c8bSAndroid Build Coastguard Worker  */
202*c2c26c8bSAndroid Build Coastguard Worker 
203*c2c26c8bSAndroid Build Coastguard Worker #define C_IN 1    /* the arpa internet */
204*c2c26c8bSAndroid Build Coastguard Worker #define C_CHAOS 3 /* for chaos net (MIT) */
205*c2c26c8bSAndroid Build Coastguard Worker #define C_HS 4    /* for Hesiod name server (MIT) (XXX) */
206*c2c26c8bSAndroid Build Coastguard Worker                   /* Query class values which do not appear in resource records */
207*c2c26c8bSAndroid Build Coastguard Worker #define C_ANY 255 /* wildcard match */
208*c2c26c8bSAndroid Build Coastguard Worker 
209*c2c26c8bSAndroid Build Coastguard Worker /*
210*c2c26c8bSAndroid Build Coastguard Worker  * Flags field of the KEY RR rdata
211*c2c26c8bSAndroid Build Coastguard Worker  */
212*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_TYPEMASK 0xC000       /* Mask for "type" bits */
213*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_TYPE_AUTH_CONF 0x0000 /* Key usable for both */
214*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */
215*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */
216*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_TYPE_NO_KEY 0xC000    /* No key usable for either; no key */
217*c2c26c8bSAndroid Build Coastguard Worker /* The type bits can also be interpreted independently, as single bits: */
218*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_NO_AUTH 0x8000 /* Key not usable for authentication */
219*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_NO_CONF 0x4000 /* Key not usable for confidentiality */
220*c2c26c8bSAndroid Build Coastguard Worker 
221*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_EXPERIMENTAL 0x2000  /* Security is *mandatory* if bit=0 */
222*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_RESERVED3 0x1000     /* reserved - must be zero */
223*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_RESERVED4 0x0800     /* reserved - must be zero */
224*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_USERACCOUNT 0x0400   /* key is assoc. with a user acct */
225*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_ENTITY 0x0200        /* key is assoc. with entity eg host */
226*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_ZONEKEY 0x0100       /* key is zone key for the zone named */
227*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_IPSEC 0x0080         /* key is for IPSEC use (host or user)*/
228*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_EMAIL 0x0040         /* key is for email (MIME security) */
229*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_RESERVED10 0x0020    /* reserved - must be zero */
230*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_RESERVED11 0x0010    /* reserved - must be zero */
231*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_SIGNATORYMASK 0x000F /* key can sign DNS RR's of same name */
232*c2c26c8bSAndroid Build Coastguard Worker 
233*c2c26c8bSAndroid Build Coastguard Worker #define KEYFLAG_RESERVED_BITMASK \
234*c2c26c8bSAndroid Build Coastguard Worker     (KEYFLAG_RESERVED3 | KEYFLAG_RESERVED4 | KEYFLAG_RESERVED10 | KEYFLAG_RESERVED11)
235*c2c26c8bSAndroid Build Coastguard Worker 
236*c2c26c8bSAndroid Build Coastguard Worker /* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
237*c2c26c8bSAndroid Build Coastguard Worker #define ALGORITHM_MD5RSA 1        /* MD5 with RSA */
238*c2c26c8bSAndroid Build Coastguard Worker #define ALGORITHM_EXPIRE_ONLY 253 /* No alg, no security */
239*c2c26c8bSAndroid Build Coastguard Worker #define ALGORITHM_PRIVATE_OID 254 /* Key begins with OID indicating alg */
240*c2c26c8bSAndroid Build Coastguard Worker 
241*c2c26c8bSAndroid Build Coastguard Worker /* Signatures */
242*c2c26c8bSAndroid Build Coastguard Worker /* Size of a mod or exp in bits */
243*c2c26c8bSAndroid Build Coastguard Worker #define MIN_MD5RSA_KEY_PART_BITS 512
244*c2c26c8bSAndroid Build Coastguard Worker #define MAX_MD5RSA_KEY_PART_BITS 2552
245*c2c26c8bSAndroid Build Coastguard Worker /* Total of binary mod and exp, bytes */
246*c2c26c8bSAndroid Build Coastguard Worker #define MAX_MD5RSA_KEY_BYTES ((MAX_MD5RSA_KEY_PART_BITS + 7 / 8) * 2 + 3)
247*c2c26c8bSAndroid Build Coastguard Worker /* Max length of text sig block */
248*c2c26c8bSAndroid Build Coastguard Worker #define MAX_KEY_BASE64 (((MAX_MD5RSA_KEY_BYTES + 2) / 3) * 4)
249*c2c26c8bSAndroid Build Coastguard Worker 
250*c2c26c8bSAndroid Build Coastguard Worker /*
251*c2c26c8bSAndroid Build Coastguard Worker  * EDNS0 Z-field extended flags
252*c2c26c8bSAndroid Build Coastguard Worker  */
253*c2c26c8bSAndroid Build Coastguard Worker #define DNS_MESSAGEEXTFLAG_DO 0x8000U
254*c2c26c8bSAndroid Build Coastguard Worker 
255*c2c26c8bSAndroid Build Coastguard Worker /*
256*c2c26c8bSAndroid Build Coastguard Worker  * Status return codes for T_UNSPEC conversion routines
257*c2c26c8bSAndroid Build Coastguard Worker  */
258*c2c26c8bSAndroid Build Coastguard Worker #define CONV_SUCCESS 0
259*c2c26c8bSAndroid Build Coastguard Worker #define CONV_OVERFLOW (-1)
260*c2c26c8bSAndroid Build Coastguard Worker #define CONV_BADFMT (-2)
261*c2c26c8bSAndroid Build Coastguard Worker #define CONV_BADCKSUM (-3)
262*c2c26c8bSAndroid Build Coastguard Worker #define CONV_BADBUFLEN (-4)
263*c2c26c8bSAndroid Build Coastguard Worker 
264*c2c26c8bSAndroid Build Coastguard Worker #if !defined(_BYTE_ORDER) || \
265*c2c26c8bSAndroid Build Coastguard Worker     (_BYTE_ORDER != _BIG_ENDIAN && _BYTE_ORDER != _LITTLE_ENDIAN && _BYTE_ORDER != _PDP_ENDIAN)
266*c2c26c8bSAndroid Build Coastguard Worker /* you must determine what the correct bit order is for
267*c2c26c8bSAndroid Build Coastguard Worker  * your compiler - the next line is an intentional error
268*c2c26c8bSAndroid Build Coastguard Worker  * which will force your compiles to bomb until you fix
269*c2c26c8bSAndroid Build Coastguard Worker  * the above macros.
270*c2c26c8bSAndroid Build Coastguard Worker  */
271*c2c26c8bSAndroid Build Coastguard Worker #error "Undefined or invalid _BYTE_ORDER";
272*c2c26c8bSAndroid Build Coastguard Worker #endif
273*c2c26c8bSAndroid Build Coastguard Worker 
274*c2c26c8bSAndroid Build Coastguard Worker /*
275*c2c26c8bSAndroid Build Coastguard Worker  * Structure for query header.  The order of the fields is machine- and
276*c2c26c8bSAndroid Build Coastguard Worker  * compiler-dependent, depending on the byte/bit order and the layout
277*c2c26c8bSAndroid Build Coastguard Worker  * of bit fields.  We use bit fields only in int variables, as this
278*c2c26c8bSAndroid Build Coastguard Worker  * is all ANSI requires.  This requires a somewhat confusing rearrangement.
279*c2c26c8bSAndroid Build Coastguard Worker  */
280*c2c26c8bSAndroid Build Coastguard Worker 
281*c2c26c8bSAndroid Build Coastguard Worker typedef struct {
282*c2c26c8bSAndroid Build Coastguard Worker     unsigned id : 16; /* query identification number */
283*c2c26c8bSAndroid Build Coastguard Worker #if _BYTE_ORDER == _BIG_ENDIAN
284*c2c26c8bSAndroid Build Coastguard Worker     /* fields in third byte */
285*c2c26c8bSAndroid Build Coastguard Worker     unsigned qr : 1;     /* response flag */
286*c2c26c8bSAndroid Build Coastguard Worker     unsigned opcode : 4; /* purpose of message */
287*c2c26c8bSAndroid Build Coastguard Worker     unsigned aa : 1;     /* authoritive answer */
288*c2c26c8bSAndroid Build Coastguard Worker     unsigned tc : 1;     /* truncated message */
289*c2c26c8bSAndroid Build Coastguard Worker     unsigned rd : 1;     /* recursion desired */
290*c2c26c8bSAndroid Build Coastguard Worker                          /* fields in fourth byte */
291*c2c26c8bSAndroid Build Coastguard Worker     unsigned ra : 1;     /* recursion available */
292*c2c26c8bSAndroid Build Coastguard Worker     unsigned unused : 1; /* unused bits (MBZ as of 4.9.3a3) */
293*c2c26c8bSAndroid Build Coastguard Worker     unsigned ad : 1;     /* authentic data from named */
294*c2c26c8bSAndroid Build Coastguard Worker     unsigned cd : 1;     /* checking disabled by resolver */
295*c2c26c8bSAndroid Build Coastguard Worker     unsigned rcode : 4;  /* response code */
296*c2c26c8bSAndroid Build Coastguard Worker #endif
297*c2c26c8bSAndroid Build Coastguard Worker #if _BYTE_ORDER == _LITTLE_ENDIAN || _BYTE_ORDER == _PDP_ENDIAN
298*c2c26c8bSAndroid Build Coastguard Worker     /* fields in third byte */
299*c2c26c8bSAndroid Build Coastguard Worker     unsigned rd : 1;     /* recursion desired */
300*c2c26c8bSAndroid Build Coastguard Worker     unsigned tc : 1;     /* truncated message */
301*c2c26c8bSAndroid Build Coastguard Worker     unsigned aa : 1;     /* authoritive answer */
302*c2c26c8bSAndroid Build Coastguard Worker     unsigned opcode : 4; /* purpose of message */
303*c2c26c8bSAndroid Build Coastguard Worker     unsigned qr : 1;     /* response flag */
304*c2c26c8bSAndroid Build Coastguard Worker                          /* fields in fourth byte */
305*c2c26c8bSAndroid Build Coastguard Worker     unsigned rcode : 4;  /* response code */
306*c2c26c8bSAndroid Build Coastguard Worker     unsigned cd : 1;     /* checking disabled by resolver */
307*c2c26c8bSAndroid Build Coastguard Worker     unsigned ad : 1;     /* authentic data from named */
308*c2c26c8bSAndroid Build Coastguard Worker     unsigned unused : 1; /* unused bits (MBZ as of 4.9.3a3) */
309*c2c26c8bSAndroid Build Coastguard Worker     unsigned ra : 1;     /* recursion available */
310*c2c26c8bSAndroid Build Coastguard Worker #endif
311*c2c26c8bSAndroid Build Coastguard Worker     /* remaining bytes */
312*c2c26c8bSAndroid Build Coastguard Worker     unsigned qdcount : 16; /* number of question entries */
313*c2c26c8bSAndroid Build Coastguard Worker     unsigned ancount : 16; /* number of answer entries */
314*c2c26c8bSAndroid Build Coastguard Worker     unsigned nscount : 16; /* number of authority entries */
315*c2c26c8bSAndroid Build Coastguard Worker     unsigned arcount : 16; /* number of resource entries */
316*c2c26c8bSAndroid Build Coastguard Worker } HEADER;
317*c2c26c8bSAndroid Build Coastguard Worker 
318*c2c26c8bSAndroid Build Coastguard Worker /*
319*c2c26c8bSAndroid Build Coastguard Worker  * Defines for handling compressed domain names
320*c2c26c8bSAndroid Build Coastguard Worker  */
321*c2c26c8bSAndroid Build Coastguard Worker #define INDIR_MASK 0xc0
322*c2c26c8bSAndroid Build Coastguard Worker 
323*c2c26c8bSAndroid Build Coastguard Worker extern u_int16_t _getshort(const unsigned char*);
324*c2c26c8bSAndroid Build Coastguard Worker extern u_int32_t _getlong(const unsigned char*);
325*c2c26c8bSAndroid Build Coastguard Worker 
326*c2c26c8bSAndroid Build Coastguard Worker /*
327*c2c26c8bSAndroid Build Coastguard Worker  * Inline versions of get/put short/long.  Pointer is advanced.
328*c2c26c8bSAndroid Build Coastguard Worker  *
329*c2c26c8bSAndroid Build Coastguard Worker  * These macros demonstrate the property of C whereby it can be
330*c2c26c8bSAndroid Build Coastguard Worker  * portable or it can be elegant but rarely both.
331*c2c26c8bSAndroid Build Coastguard Worker  */
332*c2c26c8bSAndroid Build Coastguard Worker #define GETSHORT(s, cp)                                           \
333*c2c26c8bSAndroid Build Coastguard Worker     {                                                             \
334*c2c26c8bSAndroid Build Coastguard Worker         unsigned char* t_cp = (unsigned char*) (cp);              \
335*c2c26c8bSAndroid Build Coastguard Worker         (s) = ((u_int16_t) t_cp[0] << 8) | ((u_int16_t) t_cp[1]); \
336*c2c26c8bSAndroid Build Coastguard Worker         (cp) += INT16SZ;                                          \
337*c2c26c8bSAndroid Build Coastguard Worker     }
338*c2c26c8bSAndroid Build Coastguard Worker 
339*c2c26c8bSAndroid Build Coastguard Worker #define GETLONG(l, cp)                                                    \
340*c2c26c8bSAndroid Build Coastguard Worker     {                                                                     \
341*c2c26c8bSAndroid Build Coastguard Worker         unsigned char* t_cp = (unsigned char*) (cp);                      \
342*c2c26c8bSAndroid Build Coastguard Worker         (l) = ((u_int32_t) t_cp[0] << 24) | ((u_int32_t) t_cp[1] << 16) | \
343*c2c26c8bSAndroid Build Coastguard Worker               ((u_int32_t) t_cp[2] << 8) | ((u_int32_t) t_cp[3]);         \
344*c2c26c8bSAndroid Build Coastguard Worker         (cp) += INT32SZ;                                                  \
345*c2c26c8bSAndroid Build Coastguard Worker     }
346*c2c26c8bSAndroid Build Coastguard Worker 
347*c2c26c8bSAndroid Build Coastguard Worker #define PUTSHORT(s, cp)                              \
348*c2c26c8bSAndroid Build Coastguard Worker     {                                                \
349*c2c26c8bSAndroid Build Coastguard Worker         u_int16_t t_s = (u_int16_t)(s);              \
350*c2c26c8bSAndroid Build Coastguard Worker         unsigned char* t_cp = (unsigned char*) (cp); \
351*c2c26c8bSAndroid Build Coastguard Worker         *t_cp++ = t_s >> 8;                          \
352*c2c26c8bSAndroid Build Coastguard Worker         *t_cp = t_s;                                 \
353*c2c26c8bSAndroid Build Coastguard Worker         (cp) += INT16SZ;                             \
354*c2c26c8bSAndroid Build Coastguard Worker     }
355*c2c26c8bSAndroid Build Coastguard Worker 
356*c2c26c8bSAndroid Build Coastguard Worker #define PUTLONG(l, cp)                               \
357*c2c26c8bSAndroid Build Coastguard Worker     {                                                \
358*c2c26c8bSAndroid Build Coastguard Worker         u_int32_t t_l = (u_int32_t)(l);              \
359*c2c26c8bSAndroid Build Coastguard Worker         unsigned char* t_cp = (unsigned char*) (cp); \
360*c2c26c8bSAndroid Build Coastguard Worker         *t_cp++ = t_l >> 24;                         \
361*c2c26c8bSAndroid Build Coastguard Worker         *t_cp++ = t_l >> 16;                         \
362*c2c26c8bSAndroid Build Coastguard Worker         *t_cp++ = t_l >> 8;                          \
363*c2c26c8bSAndroid Build Coastguard Worker         *t_cp = t_l;                                 \
364*c2c26c8bSAndroid Build Coastguard Worker         (cp) += INT32SZ;                             \
365*c2c26c8bSAndroid Build Coastguard Worker     }
366*c2c26c8bSAndroid Build Coastguard Worker 
367*c2c26c8bSAndroid Build Coastguard Worker #endif /* !_NAMESER_H_ */
368