1: /*
   2:  * Copyright (c) 1983 Regents of the University of California.
   3:  * All rights reserved.
   4:  *
   5:  * Redistribution and use in source and binary forms are permitted
   6:  * provided that the above copyright notice and this paragraph are
   7:  * duplicated in all such forms and that any documentation,
   8:  * advertising materials, and other materials related to such
   9:  * distribution and use acknowledge that the software was developed
  10:  * by the University of California, Berkeley.  The name of the
  11:  * University may not be used to endorse or promote products derived
  12:  * from this software without specific prior written permission.
  13:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  14:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  15:  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16:  *
  17:  *	@(#)nameser.h	5.20.1 (2.11BSD GTE) 12/31/93
  18: */
  19: 
  20: /*
  21:  * Define constants based on rfc883
  22:  */
  23: #define PACKETSZ    512     /* maximum packet size */
  24: #define MAXDNAME    256     /* maximum domain name */
  25: #define MAXCDNAME   255     /* maximum compressed domain name */
  26: #define MAXLABEL    63      /* maximum length of domain label */
  27:     /* Number of bytes of fixed size data in query structure */
  28: #define QFIXEDSZ    4
  29:     /* number of bytes of fixed size data in resource record */
  30: #define RRFIXEDSZ   10
  31: 
  32: /*
  33:  * Internet nameserver port number
  34:  */
  35: #define NAMESERVER_PORT 53
  36: 
  37: /*
  38:  * Currently defined opcodes
  39:  */
  40: #define QUERY       0x0     /* standard query */
  41: #define IQUERY      0x1     /* inverse query */
  42: #define STATUS      0x2     /* nameserver status query */
  43: /*#define xxx		0x3		/* 0x3 reserved */
  44:     /* non standard */
  45: #define UPDATEA     0x9     /* add resource record */
  46: #define UPDATED     0xa     /* delete a specific resource record */
  47: #define UPDATEDA    0xb     /* delete all nemed resource record */
  48: #define UPDATEM     0xc     /* modify a specific resource record */
  49: #define UPDATEMA    0xd     /* modify all named resource record */
  50: 
  51: #define ZONEINIT    0xe     /* initial zone transfer */
  52: #define ZONEREF     0xf     /* incremental zone referesh */
  53: 
  54: /*
  55:  * Currently defined response codes
  56:  */
  57: #define NOERROR     0       /* no error */
  58: #define FORMERR     1       /* format error */
  59: #define SERVFAIL    2       /* server failure */
  60: #define NXDOMAIN    3       /* non existent domain */
  61: #define NOTIMP      4       /* not implemented */
  62: #define REFUSED     5       /* query refused */
  63:     /* non standard */
  64: #define NOCHANGE    0xf     /* update failed to change db */
  65: 
  66: /*
  67:  * Type values for resources and queries
  68:  */
  69: #define T_A     1       /* host address */
  70: #define T_NS        2       /* authoritative server */
  71: #define T_MD        3       /* mail destination */
  72: #define T_MF        4       /* mail forwarder */
  73: #define T_CNAME     5       /* connonical name */
  74: #define T_SOA       6       /* start of authority zone */
  75: #define T_MB        7       /* mailbox domain name */
  76: #define T_MG        8       /* mail group member */
  77: #define T_MR        9       /* mail rename name */
  78: #define T_NULL      10      /* null resource record */
  79: #define T_WKS       11      /* well known service */
  80: #define T_PTR       12      /* domain name pointer */
  81: #define T_HINFO     13      /* host information */
  82: #define T_MINFO     14      /* mailbox information */
  83: #define T_MX        15      /* mail routing information */
  84: #define T_TXT       16
  85:     /* non standard */
  86: #define T_UINFO     100     /* user (finger) information */
  87: #define T_UID       101     /* user ID */
  88: #define T_GID       102     /* group ID */
  89: #define T_UNSPEC    103     /* Unspecified format (binary data) */
  90:     /* Query type values which do not appear in resource records */
  91: #define T_AXFR      252     /* transfer zone of authority */
  92: #define T_MAILB     253     /* transfer mailbox records */
  93: #define T_MAILA     254     /* transfer mail agent records */
  94: #define T_ANY       255     /* wildcard match */
  95: 
  96: /*
  97:  * Values for class field
  98:  */
  99: 
 100: #define C_IN        1       /* the arpa internet */
 101: #define C_CHAOS     3       /* for chaos net at MIT */
 102: #define C_HS        4
 103:     /* Query class values which do not appear in resource records */
 104: #define C_ANY       255     /* wildcard match */
 105: 
 106: /*
 107:  * Status return codes for T_UNSPEC conversion routines
 108:  */
 109: #define CONV_SUCCESS 0
 110: #define CONV_OVERFLOW -1
 111: #define CONV_BADFMT -2
 112: #define CONV_BADCKSUM -3
 113: #define CONV_BADBUFLEN -4
 114: 
 115: #ifndef BYTE_ORDER
 116: #define LITTLE_ENDIAN   1234    /* least-significant byte first (vax) */
 117: #define BIG_ENDIAN  4321    /* most-significant byte first (IBM, net) */
 118: #define PDP_ENDIAN  3412    /* LSB first in word, MSW first in long (pdp) */
 119: 
 120: #if defined(vax) || defined(ns32000) || defined(sun386) || \
 121:     defined(BIT_ZERO_ON_RIGHT)
 122: #define BYTE_ORDER  LITTLE_ENDIAN
 123: 
 124: #endif
 125: #if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
 126:     defined(is68k) || defined (tahoe) || defined (BIT_ZERO_ON_LEFT)
 127: #define BYTE_ORDER  BIG_ENDIAN
 128: #endif
 129: #endif /* BYTE_ORDER */
 130: #if defined(pdp11)
 131: #define BYTE_ORDER  PDP_ENDIAN
 132: #endif
 133: 
 134: #ifndef BYTE_ORDER
 135:     /* you must determine what the correct bit order is for your compiler */
 136:     UNDEFINED_BIT_ORDER;
 137: #endif
 138: /*
 139:  * Structure for query header, the order of the fields is machine and
 140:  * compiler dependent, in our case, the bits within a byte are assignd
 141:  * least significant first, while the order of transmition is most
 142:  * significant first.  This requires a somewhat confusing rearrangement.
 143:  */
 144: 
 145: typedef struct {
 146:     u_short id;     /* query identification number */
 147: #if BYTE_ORDER == BIG_ENDIAN
 148:             /* fields in third byte */
 149:     u_char  qr:1;       /* response flag */
 150:     u_char  opcode:4;   /* purpose of message */
 151:     u_char  aa:1;       /* authoritive answer */
 152:     u_char  tc:1;       /* truncated message */
 153:     u_char  rd:1;       /* recursion desired */
 154:             /* fields in fourth byte */
 155:     u_char  ra:1;       /* recursion available */
 156:     u_char  pr:1;       /* primary server required (non standard) */
 157:     u_char  unused:2;   /* unused bits */
 158:     u_char  rcode:4;    /* response code */
 159: #endif
 160: #if BYTE_ORDER == LITTLE_ENDIAN
 161:             /* fields in third byte */
 162:     u_char  rd:1;       /* recursion desired */
 163:     u_char  tc:1;       /* truncated message */
 164:     u_char  aa:1;       /* authoritive answer */
 165:     u_char  opcode:4;   /* purpose of message */
 166:     u_char  qr:1;       /* response flag */
 167:             /* fields in fourth byte */
 168:     u_char  rcode:4;    /* response code */
 169:     u_char  unused:2;   /* unused bits */
 170:     u_char  pr:1;       /* primary server required (non standard) */
 171:     u_char  ra:1;       /* recursion available */
 172: #endif
 173: #if BYTE_ORDER == PDP_ENDIAN
 174:     /* Bit zero on right, compiler doesn't like u_char bit fields:  PDP */
 175:             /* fields in third byte */
 176:     u_int   rd:1;       /* recursion desired */
 177:     u_int   tc:1;       /* truncated message */
 178:     u_int   aa:1;       /* authoritive answer */
 179:     u_int   opcode:4;   /* purpose of message */
 180:     u_int   qr:1;       /* response flag */
 181:             /* fields in fourth byte */
 182:     u_int   rcode:4;    /* response code */
 183:     u_int   unused:2;   /* unused bits */
 184:     u_int   pr:1;       /* primary server required (non standard) */
 185:     u_int   ra:1;       /* recursion available */
 186: #endif
 187:             /* remaining bytes */
 188:     u_short qdcount;    /* number of question entries */
 189:     u_short ancount;    /* number of answer entries */
 190:     u_short nscount;    /* number of authority entries */
 191:     u_short arcount;    /* number of resource entries */
 192: } HEADER;
 193: 
 194: /*
 195:  * Defines for handling compressed domain names
 196:  */
 197: #define INDIR_MASK  0xc0
 198: 
 199: /*
 200:  * Structure for passing resource records around.
 201:  */
 202: struct rrec {
 203:     short   r_zone;         /* zone number */
 204:     short   r_class;        /* class number */
 205:     short   r_type;         /* type number */
 206:     u_long  r_ttl;          /* time to live */
 207:     int r_size;         /* size of data area */
 208:     char    *r_data;        /* pointer to data */
 209: };
 210: 
 211: extern  u_short _getshort();
 212: extern  u_long  _getlong();
 213: 
 214: /*
 215:  * Inline versions of get/put short/long.
 216:  * Pointer is advanced; we assume that both arguments
 217:  * are lvalues and will already be in registers.
 218:  * cp MUST be u_char *.
 219:  */
 220: #define GETSHORT(s, cp) { \
 221:     (s) = *(cp)++ << 8; \
 222:     (s) |= *(cp)++; \
 223: }
 224: 
 225: #define GETLONG(l, cp) { \
 226:     (l) = *(cp)++ << 8; \
 227:     (l) |= *(cp)++; (l) <<= 8; \
 228:     (l) |= *(cp)++; (l) <<= 8; \
 229:     (l) |= *(cp)++; \
 230: }
 231: 
 232: 
 233: #define PUTSHORT(s, cp) { \
 234:     *(cp)++ = (s) >> 8; \
 235:     *(cp)++ = (s); \
 236: }
 237: 
 238: /*
 239:  * Warning: PUTLONG destroys its first argument.
 240:  */
 241: #define PUTLONG(l, cp) { \
 242:     (cp)[3] = l; \
 243:     (cp)[2] = (l >>= 8); \
 244:     (cp)[1] = (l >>= 8); \
 245:     (cp)[0] = l >> 8; \
 246:     (cp) += sizeof(u_long); \
 247: }

Defined struct's

Defined macros

BIG_ENDIAN defined in line 117; used 2 times
BYTE_ORDER defined in line 131; used 5 times
CONV_BADBUFLEN defined in line 113; used 1 times
CONV_BADCKSUM defined in line 112; used 1 times
CONV_BADFMT defined in line 111; used 5 times
CONV_SUCCESS defined in line 109; used 3 times
C_HS defined in line 102; used 1 times
IQUERY defined in line 41; used 3 times
LITTLE_ENDIAN defined in line 116; used 2 times
MAXCDNAME defined in line 25; never used
MAXLABEL defined in line 26; used 1 times
NOTIMP defined in line 61; used 1 times
PDP_ENDIAN defined in line 118; used 2 times
STATUS defined in line 42; never used
T_MAILA defined in line 93; used 1 times
T_MD defined in line 71; never used
T_MF defined in line 72; never used
ZONEINIT defined in line 51; never used
ZONEREF defined in line 52; never used

Usage of this include

nameser.h used 38 times
Last modified: 1994-01-11
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 5253
Valid CSS Valid XHTML 1.0 Strict