Annotation of embedaddon/dhcp/includes/arpa/nameser.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (c) 1983, 1989, 1993
! 3: * The Regents of the University of California. All rights reserved.
! 4: *
! 5: * Redistribution and use in source and binary forms, with or without
! 6: * modification, are permitted provided that the following conditions
! 7: * are met:
! 8: * 1. Redistributions of source code must retain the above copyright
! 9: * notice, this list of conditions and the following disclaimer.
! 10: * 2. Redistributions in binary form must reproduce the above copyright
! 11: * notice, this list of conditions and the following disclaimer in the
! 12: * documentation and/or other materials provided with the distribution.
! 13: * 3. All advertising materials mentioning features or use of this software
! 14: * must display the following acknowledgement:
! 15: * This product includes software developed by the University of
! 16: * California, Berkeley and its contributors.
! 17: * 4. Neither the name of the University nor the names of its contributors
! 18: * may be used to endorse or promote products derived from this software
! 19: * without specific prior written permission.
! 20: *
! 21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 31: * SUCH DAMAGE.
! 32: */
! 33:
! 34: /*
! 35: * Copyright (c) 2004,2009 by Internet Systems Consortium, Inc. ("ISC")
! 36: * Copyright (c) 1996-2003 by Internet Software Consortium
! 37: *
! 38: * Permission to use, copy, modify, and distribute this software for any
! 39: * purpose with or without fee is hereby granted, provided that the above
! 40: * copyright notice and this permission notice appear in all copies.
! 41: *
! 42: * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
! 43: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 44: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
! 45: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 46: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 47: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
! 48: * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 49: *
! 50: * Internet Systems Consortium, Inc.
! 51: * 950 Charter Street
! 52: * Redwood City, CA 94063
! 53: * <info@isc.org>
! 54: * https://www.isc.org/
! 55: */
! 56:
! 57: /*
! 58: * $Id: nameser.h,v 1.5.786.2 2009-07-24 22:04:52 sar Exp $
! 59: */
! 60:
! 61: #ifndef _ARPA_NAMESER_H_
! 62: #define _ARPA_NAMESER_H_
! 63:
! 64: /*
! 65: * Revision information. This is the release date in YYYYMMDD format.
! 66: * It can change every day so the right thing to do with it is use it
! 67: * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not
! 68: * compare for equality; rather, use it to determine whether your libbind.a
! 69: * contains a new enough lib/nameser/ to support the feature you need.
! 70: */
! 71:
! 72: #define __NAMESER 19991006 /* New interface version stamp. */
! 73:
! 74: /*
! 75: * Define constants based on RFC 883, RFC 1034, RFC 1035
! 76: */
! 77: #define NS_PACKETSZ 512 /* maximum packet size */
! 78: #define NS_MAXDNAME 1025 /* maximum domain name */
! 79: #define NS_MAXCDNAME 255 /* maximum compressed domain name */
! 80: #define NS_MAXLABEL 63 /* maximum length of domain label */
! 81: #define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */
! 82: #define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */
! 83: #define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */
! 84: #define NS_INT32SZ 4 /* #/bytes of data in a u_int32_t */
! 85: #define NS_INT16SZ 2 /* #/bytes of data in a u_int16_t */
! 86: #define NS_INT8SZ 1 /* #/bytes of data in a u_int8_t */
! 87: #define NS_INADDRSZ 4 /* IPv4 T_A */
! 88: #define NS_IN6ADDRSZ 16 /* IPv6 T_AAAA */
! 89: #define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */
! 90: #define NS_DEFAULTPORT 53 /* For both TCP and UDP. */
! 91:
! 92: /*
! 93: * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
! 94: * in synch with it.
! 95: */
! 96: typedef enum __ns_sect {
! 97: ns_s_qd = 0, /* Query: Question. */
! 98: ns_s_zn = 0, /* Update: Zone. */
! 99: ns_s_an = 1, /* Query: Answer. */
! 100: ns_s_pr = 1, /* Update: Prerequisites. */
! 101: ns_s_ns = 2, /* Query: Name servers. */
! 102: ns_s_ud = 2, /* Update: Update. */
! 103: ns_s_ar = 3, /* Query|Update: Additional records. */
! 104: ns_s_max = 4
! 105: } ns_sect;
! 106:
! 107: /*
! 108: * This is a message handle. It is caller allocated and has no dynamic data.
! 109: * This structure is intended to be opaque to all but ns_parse.c, thus the
! 110: * leading _'s on the member names. Use the accessor functions, not the _'s.
! 111: */
! 112: typedef struct __ns_msg {
! 113: const u_int8_t *_msg, *_eom;
! 114: u_int16_t _id, _flags, _counts[ns_s_max];
! 115: const u_int8_t *_sections[ns_s_max];
! 116: ns_sect _sect;
! 117: int _rrnum;
! 118: const u_int8_t *_ptr;
! 119: } ns_msg;
! 120:
! 121: /* Private data structure - do not use from outside library. */
! 122: struct _ns_flagdata { int mask, shift; };
! 123: extern struct _ns_flagdata _ns_flagdata[];
! 124:
! 125: /* Accessor macros - this is part of the public interface. */
! 126: #define ns_msg_getflag(handle, flag) ( \
! 127: ((handle)._flags & _ns_flagdata[flag].mask) \
! 128: >> _ns_flagdata[flag].shift \
! 129: )
! 130: #define ns_msg_id(handle) ((handle)._id + 0)
! 131: #define ns_msg_base(handle) ((handle)._msg + 0)
! 132: #define ns_msg_end(handle) ((handle)._eom + 0)
! 133: #define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
! 134: #define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
! 135:
! 136: /*
! 137: * This is a parsed record. It is caller allocated and has no dynamic data.
! 138: */
! 139: typedef struct __ns_rr {
! 140: char name[NS_MAXDNAME];
! 141: u_int16_t type;
! 142: u_int16_t rr_class;
! 143: u_int32_t ttl;
! 144: u_int16_t rdlength;
! 145: const u_int8_t *rdata;
! 146: } ns_rr;
! 147:
! 148: /* Accessor macros - this is part of the public interface. */
! 149: #define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
! 150: #define ns_rr_type(rr) ((ns_type)((rr).type + 0))
! 151: #define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
! 152: #define ns_rr_ttl(rr) ((rr).ttl + 0)
! 153: #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
! 154: #define ns_rr_rdata(rr) ((rr).rdata + 0)
! 155:
! 156: /*
! 157: * These don't have to be in the same order as in the packet flags word,
! 158: * and they can even overlap in some cases, but they will need to be kept
! 159: * in synch with ns_parse.c:ns_flagdata[].
! 160: */
! 161: typedef enum __ns_flag {
! 162: ns_f_qr, /* Question/Response. */
! 163: ns_f_opcode, /* Operation code. */
! 164: ns_f_aa, /* Authoritative Answer. */
! 165: ns_f_tc, /* Truncation occurred. */
! 166: ns_f_rd, /* Recursion Desired. */
! 167: ns_f_ra, /* Recursion Available. */
! 168: ns_f_z, /* MBZ. */
! 169: ns_f_ad, /* Authentic Data (DNSSEC). */
! 170: ns_f_cd, /* Checking Disabled (DNSSEC). */
! 171: ns_f_rcode, /* Response code. */
! 172: ns_f_max
! 173: } ns_flag;
! 174:
! 175: /*
! 176: * Currently defined opcodes.
! 177: */
! 178: typedef enum __ns_opcode {
! 179: ns_o_query = 0, /* Standard query. */
! 180: ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */
! 181: ns_o_status = 2, /* Name server status query (unsupported). */
! 182: /* Opcode 3 is undefined/reserved. */
! 183: ns_o_notify = 4, /* Zone change notification. */
! 184: ns_o_update = 5, /* Zone update message. */
! 185: ns_o_max = 6
! 186: } ns_opcode;
! 187:
! 188: /*
! 189: * Currently defined response codes.
! 190: */
! 191: typedef enum __ns_rcode {
! 192: ns_r_noerror = 0, /* No error occurred. */
! 193: ns_r_formerr = 1, /* Format error. */
! 194: ns_r_servfail = 2, /* Server failure. */
! 195: ns_r_nxdomain = 3, /* Name error. */
! 196: ns_r_notimpl = 4, /* Unimplemented. */
! 197: ns_r_refused = 5, /* Operation refused. */
! 198: /* these are for BIND_UPDATE */
! 199: ns_r_yxdomain = 6, /* Name exists */
! 200: ns_r_yxrrset = 7, /* RRset exists */
! 201: ns_r_nxrrset = 8, /* RRset does not exist */
! 202: ns_r_notauth = 9, /* Not authoritative for zone */
! 203: ns_r_notzone = 10, /* Zone of record different from zone section */
! 204: ns_r_max = 11,
! 205: /* The following are TSIG extended errors */
! 206: ns_r_badsig = 16,
! 207: ns_r_badkey = 17,
! 208: ns_r_badtime = 18
! 209: } ns_rcode;
! 210:
! 211: /* BIND_UPDATE */
! 212: typedef enum __ns_update_operation {
! 213: ns_uop_delete = 0,
! 214: ns_uop_add = 1,
! 215: ns_uop_max = 2
! 216: } ns_update_operation;
! 217:
! 218: /*
! 219: * This structure is used for TSIG authenticated messages
! 220: */
! 221: struct ns_tsig_key {
! 222: char name[NS_MAXDNAME], alg[NS_MAXDNAME];
! 223: unsigned char *data;
! 224: unsigned len;
! 225: };
! 226: typedef struct ns_tsig_key ns_tsig_key;
! 227:
! 228: /*
! 229: * This structure is used for TSIG authenticated TCP messages
! 230: */
! 231: struct ns_tcp_tsig_state {
! 232: int counter;
! 233: struct dst_key *key;
! 234: void *ctx;
! 235: unsigned char sig[NS_PACKETSZ];
! 236: unsigned siglen;
! 237: };
! 238: typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
! 239:
! 240: #define NS_TSIG_FUDGE 300
! 241: #define NS_TSIG_TCP_COUNT 100
! 242: #define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
! 243:
! 244: #define NS_TSIG_ERROR_NO_TSIG -10
! 245: #define NS_TSIG_ERROR_NO_SPACE -11
! 246: #define NS_TSIG_ERROR_FORMERR -12
! 247:
! 248: /*
! 249: * Currently defined type values for resources and queries.
! 250: */
! 251: typedef enum __ns_type {
! 252: ns_t_invalid = 0, /* Cookie. */
! 253: ns_t_a = 1, /* Host address. */
! 254: ns_t_ns = 2, /* Authoritative server. */
! 255: ns_t_md = 3, /* Mail destination. */
! 256: ns_t_mf = 4, /* Mail forwarder. */
! 257: ns_t_cname = 5, /* Canonical name. */
! 258: ns_t_soa = 6, /* Start of authority zone. */
! 259: ns_t_mb = 7, /* Mailbox domain name. */
! 260: ns_t_mg = 8, /* Mail group member. */
! 261: ns_t_mr = 9, /* Mail rename name. */
! 262: ns_t_null = 10, /* Null resource record. */
! 263: ns_t_wks = 11, /* Well known service. */
! 264: ns_t_ptr = 12, /* Domain name pointer. */
! 265: ns_t_hinfo = 13, /* Host information. */
! 266: ns_t_minfo = 14, /* Mailbox information. */
! 267: ns_t_mx = 15, /* Mail routing information. */
! 268: ns_t_txt = 16, /* Text strings. */
! 269: ns_t_rp = 17, /* Responsible person. */
! 270: ns_t_afsdb = 18, /* AFS cell database. */
! 271: ns_t_x25 = 19, /* X_25 calling address. */
! 272: ns_t_isdn = 20, /* ISDN calling address. */
! 273: ns_t_rt = 21, /* Router. */
! 274: ns_t_nsap = 22, /* NSAP address. */
! 275: ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */
! 276: ns_t_sig = 24, /* Security signature. */
! 277: ns_t_key = 25, /* Security key. */
! 278: ns_t_px = 26, /* X.400 mail mapping. */
! 279: ns_t_gpos = 27, /* Geographical position (withdrawn). */
! 280: ns_t_aaaa = 28, /* Ip6 Address. */
! 281: ns_t_loc = 29, /* Location Information. */
! 282: ns_t_nxt = 30, /* Next domain (security). */
! 283: ns_t_eid = 31, /* Endpoint identifier. */
! 284: ns_t_nimloc = 32, /* Nimrod Locator. */
! 285: ns_t_srv = 33, /* Server Selection. */
! 286: ns_t_atma = 34, /* ATM Address */
! 287: ns_t_naptr = 35, /* Naming Authority PoinTeR */
! 288: ns_t_kx = 36, /* Key Exchange */
! 289: ns_t_cert = 37, /* Certification record */
! 290: ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */
! 291: ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */
! 292: ns_t_sink = 40, /* Kitchen sink (experimentatl) */
! 293: ns_t_opt = 41, /* EDNS0 option (meta-RR) */
! 294: ns_t_tsig = 250, /* Transaction signature. */
! 295: ns_t_ixfr = 251, /* Incremental zone transfer. */
! 296: ns_t_axfr = 252, /* Transfer zone of authority. */
! 297: ns_t_mailb = 253, /* Transfer mailbox records. */
! 298: ns_t_maila = 254, /* Transfer mail agent records. */
! 299: ns_t_any = 255, /* Wildcard match. */
! 300: ns_t_zxfr = 256, /* BIND-specific, nonstandard. */
! 301: ns_t_max = 65536
! 302: } ns_type;
! 303:
! 304: /* Exclusively a QTYPE? (not also an RTYPE) */
! 305: #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
! 306: (t) == ns_t_mailb || (t) == ns_t_maila)
! 307: /* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
! 308: #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
! 309: /* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
! 310: #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
! 311: #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
! 312: #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
! 313: (t) == ns_t_zxfr)
! 314:
! 315: /*
! 316: * Values for class field
! 317: */
! 318: typedef enum __ns_class {
! 319: ns_c_invalid = 0, /* Cookie. */
! 320: ns_c_in = 1, /* Internet. */
! 321: ns_c_2 = 2, /* unallocated/unsupported. */
! 322: ns_c_chaos = 3, /* MIT Chaos-net. */
! 323: ns_c_hs = 4, /* MIT Hesiod. */
! 324: /* Query class values which do not appear in resource records */
! 325: ns_c_none = 254, /* for prereq. sections in update requests */
! 326: ns_c_any = 255, /* Wildcard match. */
! 327: ns_c_max = 65536
! 328: } ns_class;
! 329:
! 330: /* DNSSEC constants. */
! 331:
! 332: typedef enum __ns_key_types {
! 333: ns_kt_rsa = 1, /* key type RSA/MD5 */
! 334: ns_kt_dh = 2, /* Diffie Hellman */
! 335: ns_kt_dsa = 3, /* Digital Signature Standard (MANDATORY) */
! 336: ns_kt_private = 254 /* Private key type starts with OID */
! 337: } ns_key_types;
! 338:
! 339: typedef enum __ns_cert_types {
! 340: cert_t_pkix = 1, /* PKIX (X.509v3) */
! 341: cert_t_spki = 2, /* SPKI */
! 342: cert_t_pgp = 3, /* PGP */
! 343: cert_t_url = 253, /* URL private type */
! 344: cert_t_oid = 254 /* OID private type */
! 345: } ns_cert_types;
! 346:
! 347: /* Flags field of the KEY RR rdata. */
! 348: #define NS_KEY_TYPEMASK 0xC000 /* Mask for "type" bits */
! 349: #define NS_KEY_TYPE_AUTH_CONF 0x0000 /* Key usable for both */
! 350: #define NS_KEY_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */
! 351: #define NS_KEY_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */
! 352: #define NS_KEY_TYPE_NO_KEY 0xC000 /* No key usable for either; no key */
! 353: /* The type bits can also be interpreted independently, as single bits: */
! 354: #define NS_KEY_NO_AUTH 0x8000 /* Key unusable for authentication */
! 355: #define NS_KEY_NO_CONF 0x4000 /* Key unusable for confidentiality */
! 356: #define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */
! 357: #define NS_KEY_EXTENDED_FLAGS 0x1000 /* reserved - must be zero */
! 358: #define NS_KEY_RESERVED4 0x0800 /* reserved - must be zero */
! 359: #define NS_KEY_RESERVED5 0x0400 /* reserved - must be zero */
! 360: #define NS_KEY_NAME_TYPE 0x0300 /* these bits determine the type */
! 361: #define NS_KEY_NAME_USER 0x0000 /* key is assoc. with user */
! 362: #define NS_KEY_NAME_ENTITY 0x0200 /* key is assoc. with entity eg host */
! 363: #define NS_KEY_NAME_ZONE 0x0100 /* key is zone key */
! 364: #define NS_KEY_NAME_RESERVED 0x0300 /* reserved meaning */
! 365: #define NS_KEY_RESERVED8 0x0080 /* reserved - must be zero */
! 366: #define NS_KEY_RESERVED9 0x0040 /* reserved - must be zero */
! 367: #define NS_KEY_RESERVED10 0x0020 /* reserved - must be zero */
! 368: #define NS_KEY_RESERVED11 0x0010 /* reserved - must be zero */
! 369: #define NS_KEY_SIGNATORYMASK 0x000F /* key can sign RR's of same name */
! 370: #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
! 371: NS_KEY_RESERVED4 | \
! 372: NS_KEY_RESERVED5 | \
! 373: NS_KEY_RESERVED8 | \
! 374: NS_KEY_RESERVED9 | \
! 375: NS_KEY_RESERVED10 | \
! 376: NS_KEY_RESERVED11 )
! 377: #define NS_KEY_RESERVED_BITMASK2 0xFFFF /* no bits defined here */
! 378:
! 379: /* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
! 380: #define NS_ALG_MD5RSA 1 /* MD5 with RSA */
! 381: #define NS_ALG_DH 2 /* Diffie Hellman KEY */
! 382: #define NS_ALG_DSA 3 /* DSA KEY */
! 383: #define NS_ALG_DSS NS_ALG_DSA
! 384: #define NS_ALG_EXPIRE_ONLY 253 /* No alg, no security */
! 385: #define NS_ALG_PRIVATE_OID 254 /* Key begins with OID giving alg */
! 386:
! 387: /* Protocol values */
! 388: /* value 0 is reserved */
! 389: #define NS_KEY_PROT_TLS 1
! 390: #define NS_KEY_PROT_EMAIL 2
! 391: #define NS_KEY_PROT_DNSSEC 3
! 392: #define NS_KEY_PROT_IPSEC 4
! 393: #define NS_KEY_PROT_ANY 255
! 394:
! 395: /* Signatures */
! 396: #define NS_MD5RSA_MIN_BITS 512 /* Size of a mod or exp in bits */
! 397: #define NS_MD5RSA_MAX_BITS 2552
! 398: /* Total of binary mod and exp */
! 399: #define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
! 400: /* Max length of text sig block */
! 401: #define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
! 402: #define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8)
! 403: #define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8)
! 404:
! 405: #define NS_DSA_SIG_SIZE 41
! 406: #define NS_DSA_MIN_SIZE 213
! 407: #define NS_DSA_MAX_BYTES 405
! 408:
! 409: /* Offsets into SIG record rdata to find various values */
! 410: #define NS_SIG_TYPE 0 /* Type flags */
! 411: #define NS_SIG_ALG 2 /* Algorithm */
! 412: #define NS_SIG_LABELS 3 /* How many labels in name */
! 413: #define NS_SIG_OTTL 4 /* Original TTL */
! 414: #define NS_SIG_EXPIR 8 /* Expiration time */
! 415: #define NS_SIG_SIGNED 12 /* Signature time */
! 416: #define NS_SIG_FOOT 16 /* Key footprint */
! 417: #define NS_SIG_SIGNER 18 /* Domain name of who signed it */
! 418:
! 419: /* How RR types are represented as bit-flags in NXT records */
! 420: #define NS_NXT_BITS 8
! 421: #define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS)))
! 422: #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
! 423: #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS)))
! 424: #define NS_NXT_MAX 127
! 425:
! 426: /*
! 427: * Inline versions of get/put short/long. Pointer is advanced.
! 428: */
! 429: #define NS_GET16(s, cp) do { \
! 430: register u_int8_t *t_cp = (u_int8_t *)(cp); \
! 431: (s) = ((u_int16_t)t_cp[0] << 8) \
! 432: | ((u_int16_t)t_cp[1]) \
! 433: ; \
! 434: (cp) += NS_INT16SZ; \
! 435: } while (0)
! 436:
! 437: #define NS_GET32(l, cp) do { \
! 438: register u_int8_t *t_cp = (u_int8_t *)(cp); \
! 439: (l) = ((u_int32_t)t_cp[0] << 24) \
! 440: | ((u_int32_t)t_cp[1] << 16) \
! 441: | ((u_int32_t)t_cp[2] << 8) \
! 442: | ((u_int32_t)t_cp[3]) \
! 443: ; \
! 444: (cp) += NS_INT32SZ; \
! 445: } while (0)
! 446:
! 447: #define NS_PUT16(s, cp) do { \
! 448: register u_int16_t t_s = (u_int16_t)(s); \
! 449: register u_int8_t *t_cp = (u_int8_t *)(cp); \
! 450: *t_cp++ = t_s >> 8; \
! 451: *t_cp = t_s; \
! 452: (cp) += NS_INT16SZ; \
! 453: } while (0)
! 454:
! 455: #define NS_PUT32(l, cp) do { \
! 456: register u_int32_t t_l = (u_int32_t)(l); \
! 457: register u_int8_t *t_cp = (u_int8_t *)(cp); \
! 458: *t_cp++ = t_l >> 24; \
! 459: *t_cp++ = t_l >> 16; \
! 460: *t_cp++ = t_l >> 8; \
! 461: *t_cp = t_l; \
! 462: (cp) += NS_INT32SZ; \
! 463: } while (0)
! 464:
! 465: #include <arpa/nameser_compat.h>
! 466:
! 467: #endif /* !_ARPA_NAMESER_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>