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