* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
- * @(#)nameser.h 5.4 (Berkeley) %G%
+ * @(#)nameser.h 5.17 (Berkeley) %G%
*/
/*
/*
* Currently defined opcodes
*/
-#define QUERY 0 /* standard query */
-#define IQUERY 1 /* inverse query */
-#define CQUERYM 2 /* completion query (multiple) */
-#define CQUERYU 3 /* completion query (unique) */
+#define QUERY 0x0 /* standard query */
+#define IQUERY 0x1 /* inverse query */
+#define STATUS 0x2 /* nameserver status query */
+/*#define xxx 0x3 /* 0x3 reserved */
/* non standard */
-#define UPDATEA 11 /* add resource record */
-#define UPDATED 12 /* delete resource record */
-#define UPDATEM 13 /* modify resource record */
-#define ZONEINIT 14 /* initial zone transfer */
-#define ZONEREF 15 /* incremental zone referesh */
+#define UPDATEA 0x9 /* add resource record */
+#define UPDATED 0xa /* delete a specific resource record */
+#define UPDATEDA 0xb /* delete all nemed resource record */
+#define UPDATEM 0xc /* modify a specific resource record */
+#define UPDATEMA 0xd /* modify all named resource record */
+
+#define ZONEINIT 0xe /* initial zone transfer */
+#define ZONEREF 0xf /* incremental zone referesh */
/*
* Currently defined response codes
#define NOTIMP 4 /* not implemented */
#define REFUSED 5 /* query refused */
/* non standard */
-#define NOCHANGE 15 /* update failed to change db */
+#define NOCHANGE 0xf /* update failed to change db */
/*
* Type values for resources and queries
#define T_PTR 12 /* domain name pointer */
#define T_HINFO 13 /* host information */
#define T_MINFO 14 /* mailbox information */
+#define T_MX 15 /* mail routing information */
/* non standard */
-#define T_UINFO 15 /* user (finger) information */
-#define T_UID 16 /* user ID */
-#define T_GID 17 /* group ID */
+#define T_UINFO 100 /* user (finger) information */
+#define T_UID 101 /* user ID */
+#define T_GID 102 /* group ID */
+#define T_UNSPEC 103 /* Unspecified format (binary data) */
/* Query type values which do not appear in resource records */
#define T_AXFR 252 /* transfer zone of authority */
#define T_MAILB 253 /* transfer mailbox records */
*/
#define C_IN 1 /* the arpa internet */
-#define C_CS 2 /* the computer science network */
+#define C_CHAOS 3 /* for chaos net at MIT */
/* Query class values which do not appear in resource records */
#define C_ANY 255 /* wildcard match */
+/*
+ * Status return codes for T_UNSPEC conversion routines
+ */
+#define CONV_SUCCESS 0
+#define CONV_OVERFLOW -1
+#define CONV_BADFMT -2
+#define CONV_BADCKSUM -3
+#define CONV_BADBUFLEN -4
+
/*
* Structure for query header, the order of the fields is machine and
* compiler dependent, in our case, the bits within a byte are assignd
typedef struct {
u_short id; /* query identification number */
-#if defined (sun) || defined (gould) || defined (BIT_ZERO_ON_LEFT)
+#if defined (sun) || defined (sel) || defined (pyr) || defined (is68k) \
+|| defined (tahoe) || defined (BIT_ZERO_ON_LEFT)
/* Bit zero on left: Gould and similar architectures */
/* fields in third byte */
u_char qr:1; /* response flag */
u_char unused:2; /* unused bits */
u_char rcode:4; /* response code */
#else
-#if defined (vax) || defined (BIT_ZERO_ON_RIGHT)
+#if defined (vax) || defined(ns32000) || defined (BIT_ZERO_ON_RIGHT)
/* Bit zero on right: VAX */
/* fields in third byte */
u_char rd:1; /* recursion desired */
char *r_data; /* pointer to data */
};
-extern u_short getshort();
-extern u_long getlong();
+extern u_short _getshort();
+extern u_long _getlong();
+
+/*
+ * Inline versions of get/put short/long.
+ * Pointer is advanced; we assume that both arguments
+ * are lvalues and will already be in registers.
+ * cp MUST be u_char *.
+ */
+#define GETSHORT(s, cp) { \
+ (s) = *(cp)++ << 8; \
+ (s) |= *(cp)++; \
+}
+
+#define GETLONG(l, cp) { \
+ (l) = *(cp)++ << 8; \
+ (l) |= *(cp)++; (l) <<= 8; \
+ (l) |= *(cp)++; (l) <<= 8; \
+ (l) |= *(cp)++; \
+}
+
+
+#define PUTSHORT(s, cp) { \
+ *(cp)++ = (s) >> 8; \
+ *(cp)++ = (s); \
+}
+
+/*
+ * Warning: PUTLONG destroys its first argument.
+ */
+#define PUTLONG(l, cp) { \
+ (cp)[3] = l; \
+ (cp)[2] = (l >>= 8); \
+ (cp)[1] = (l >>= 8); \
+ (cp)[0] = l >> 8; \
+ (cp) += sizeof(u_long); \
+}