]> The Tcpdump Group git mirrors - tcpdump/blobdiff - nameser.h
The third argument to linkaddr_string is one of the LINKADDR_ enums.
[tcpdump] / nameser.h
index 3218381e4d70a2a8a6ffd76b30337ee699d46c5d..820458c2ecf0c73861bc9ee12eb4799a196cc3a7 100644 (file)
--- a/nameser.h
+++ b/nameser.h
@@ -1,4 +1,3 @@
-/* @(#) $Header: /tcpdump/master/tcpdump/nameser.h,v 1.4 2000-12-17 23:07:49 guy Exp $ (LBL) */
 /*
  * Copyright (c) 1983, 1989, 1993
  *     The Regents of the University of California.  All rights reserved.
  *      @(#)nameser.h  8.2 (Berkeley) 2/16/94
  * -
  * Portions Copyright (c) 1993 by Digital Equipment Corporation.
- * 
+ *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
  * copyright notice and this permission notice appear in all copies, and that
  * the name of Digital Equipment Corporation not be used in advertising or
  * publicity pertaining to distribution of the document or software without
  * specific, written prior permission.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
  * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
        /* number of bytes of fixed size data in resource record */
 #define RRFIXEDSZ      10
 
-/*
- * Internet nameserver port number
- */
-#define NAMESERVER_PORT        53
-
 /*
  * Currently defined opcodes
  */
 #define ZONEINIT       0xe             /* initial zone transfer */
 #define ZONEREF                0xf             /* incremental zone referesh */
 
+/*
+ * Undefine various #defines from various System V-flavored OSes (Solaris,
+ * SINIX, HP-UX) so the compiler doesn't whine that we redefine them.
+ */
+#ifdef T_NULL
+#undef T_NULL
+#endif
+#ifdef T_OPT
+#undef T_OPT
+#endif
+#ifdef T_UNSPEC
+#undef T_UNSPEC
+#endif
+#ifdef NOERROR
+#undef NOERROR
+#endif
+
 /*
  * Currently defined response codes
  */
 #define T_TXT          16              /* text strings */
 #define        T_RP            17              /* responsible person */
 #define        T_AFSDB         18              /* AFS cell database */
+#define T_X25          19              /* X_25 calling address */
+#define T_ISDN         20              /* ISDN calling address */
+#define T_RT           21              /* router */
 #define        T_NSAP          22              /* NSAP address */
 #define        T_NSAP_PTR      23              /* reverse lookup for NSAP */
+#define T_SIG          24              /* security signature */
+#define T_KEY          25              /* security key */
+#define T_PX           26              /* X.400 mail mapping */
+#define T_GPOS         27              /* geographical position (withdrawn) */
+#define T_AAAA         28              /* IP6 Address */
+#define T_LOC          29              /* Location Information */
+#define T_NXT          30              /* Next Valid Name in Zone */
+#define T_EID          31              /* Endpoint identifier */
+#define T_NIMLOC       32              /* Nimrod locator */
+#define T_SRV          33              /* Server selection */
+#define T_ATMA         34              /* ATM Address */
+#define T_NAPTR                35              /* Naming Authority PoinTeR */
+#define T_KX           36              /* Key Exchanger */
+#define T_CERT         37              /* Certificates in the DNS */
+#define T_A6           38              /* IP6 address */
+#define T_DNAME                39              /* non-terminal redirection */
+#define T_SINK         40              /* unknown */
+#define T_OPT          41              /* EDNS0 option (meta-RR) */
+#define T_APL          42              /* lists of address prefixes */
+#define T_DS           43              /* Delegation Signer */
+#define T_SSHFP                44              /* SSH Fingerprint */
+#define T_IPSECKEY     45              /* IPsec keying material */
+#define T_RRSIG                46              /* new security signature */
+#define T_NSEC         47              /* provable insecure information */
+#define T_DNSKEY       48              /* new security key */
        /* non standard */
+#define T_SPF          99              /* sender policy framework */
 #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) */
+#define T_UNSPECA      104             /* "unspecified ASCII". Ugly MIT hack */
        /* Query type values which do not appear in resource records */
+#define T_TKEY         249             /* Transaction Key [RFC2930] */
+#define T_TSIG         250             /* Transaction Signature [RFC2845] */
+#define T_IXFR         251             /* incremental transfer [RFC1995] */
 #define T_AXFR         252             /* transfer zone of authority */
 #define T_MAILB                253             /* transfer mailbox records */
 #define T_MAILA                254             /* transfer mail agent records */
 #define T_ANY          255             /* wildcard match */
+#define T_URI          256             /* uri records [RFC7553] */
 
 /*
  * Values for class field
 #define C_HS           4               /* for Hesiod name server (MIT) (XXX) */
        /* Query class values which do not appear in resource records */
 #define C_ANY          255             /* wildcard match */
+#define C_QU           0x8000          /* mDNS QU flag in queries */
+#define C_CACHE_FLUSH  0x8000          /* mDNS cache flush flag in replies */
 
 /*
  * Status return codes for T_UNSPEC conversion routines
  * Structure for query header.
  */
 typedef struct {
-       u_int16_t id;           /* query identification number */
-       u_int8_t  flags1;       /* first byte of flags */
-       u_int8_t  flags2;       /* second byte of flags */
-       u_int16_t qdcount;      /* number of question entries */
-       u_int16_t ancount;      /* number of answer entries */
-       u_int16_t nscount;      /* number of authority entries */
-       u_int16_t arcount;      /* number of resource entries */
-} HEADER;
+       nd_uint16_t id;         /* query identification number */
+       nd_uint16_t flags;      /* QR, Opcode, AA, TC, RD, RA, RCODE */
+       nd_uint16_t qdcount;    /* number of question entries */
+       nd_uint16_t ancount;    /* number of answer entries */
+       nd_uint16_t nscount;    /* number of authority entries */
+       nd_uint16_t arcount;    /* number of resource entries */
+} dns_header_t;
 
 /*
  * Macros for subfields of flag fields.
  */
-#define DNS_QR(np)     ((np)->flags1 & 0x80)           /* response flag */
-#define DNS_OPCODE(np) ((((np)->flags1) >> 3) & 0xF)   /* purpose of message */
-#define DNS_AA(np)     ((np)->flags1 & 0x04)           /* authoritative answer */
-#define DNS_TC(np)     ((np)->flags1 & 0x02)           /* truncated message */
-#define DNS_RD(np)     ((np)->flags1 & 0x01)           /* recursion desired */
-
-#define DNS_RA(np)     ((np)->flags2 & 0x80)   /* recursion available */
-#define DNS_AD(np)     ((np)->flags2 & 0x20)   /* authentic data from named */
-#define DNS_CD(np)     ((np)->flags2 & 0x10)   /* checking disabled by resolver */
-#define DNS_RCODE(np)  ((np)->flags2 & 0xF)    /* response code */
-
-/*
- * Defines for handling compressed domain names
- */
-#define INDIR_MASK     0xc0
-
-/*
- * Structure for passing resource records around.
- */
-struct rrec {
-       int16_t r_zone;                 /* zone number */
-       int16_t r_class;                /* class number */
-       int16_t r_type;                 /* type number */
-       u_int32_t       r_ttl;                  /* time to live */
-       int     r_size;                 /* size of data area */
-       char    *r_data;                /* pointer to data */
-};
-
-/*
- * Inline versions of get/put short/long.  Pointer is advanced.
- * We also assume that a "u_int16_t" holds 2 "chars"
- * and that a "u_int32_t" holds 4 "chars".
- *
- * These macros demonstrate the property of C whereby it can be
- * portable or it can be elegant but never both.
- */
-#define GETSHORT(s, cp) { \
-       register u_char *t_cp = (u_char *)(cp); \
-       (s) = ((u_int16_t)t_cp[0] << 8) | (u_int16_t)t_cp[1]; \
-       (cp) += 2; \
-}
-
-#define GETLONG(l, cp) { \
-       register u_char *t_cp = (u_char *)(cp); \
-       (l) = (((u_int32_t)t_cp[0]) << 24) \
-           | (((u_int32_t)t_cp[1]) << 16) \
-           | (((u_int32_t)t_cp[2]) << 8) \
-           | (((u_int32_t)t_cp[3])); \
-       (cp) += 4; \
-}
-
-#define PUTSHORT(s, cp) { \
-       register u_int16_t t_s = (u_int16_t)(s); \
-       register u_char *t_cp = (u_char *)(cp); \
-       *t_cp++ = t_s >> 8; \
-       *t_cp   = t_s; \
-       (cp) += 2; \
-}
+#define DNS_QR(flags)          ((flags) & 0x8000)      /* response flag */
+#define DNS_OPCODE(flags)      (((flags) >> 11) & 0xF) /* purpose of message */
+#define DNS_AA(flags)          (flags & 0x0400)        /* authoritative answer */
+#define DNS_TC(flags)          (flags & 0x0200)        /* truncated message */
+#define DNS_RD(flags)          (flags & 0x0100)        /* recursion desired */
+#define DNS_RA(flags)          (flags & 0x0080)        /* recursion available */
+#define DNS_AD(flags)          (flags & 0x0020)        /* authentic data from named */
+#define DNS_CD(flags)          (flags & 0x0010)        /* checking disabled by resolver */
+#define DNS_RCODE(flags)       (flags & 0x000F)        /* response code */
 
 /*
- * Warning: PUTLONG --no-longer-- destroys its first argument.  if you
- * were depending on this "feature", you will lose.
+ * Defines for handling compressed domain names, EDNS0 labels, etc.
  */
-#define PUTLONG(l, cp) { \
-       register u_int32_t t_l = (u_int32_t)(l); \
-       register u_char *t_cp = (u_char *)(cp); \
-       *t_cp++ = t_l >> 24; \
-       *t_cp++ = t_l >> 16; \
-       *t_cp++ = t_l >> 8; \
-       *t_cp   = t_l; \
-       (cp) += 4; \
-}
+#define INDIR_MASK     0xc0    /* 11.... */
+#define EDNS0_MASK     0x40    /* 01.... */
+#  define EDNS0_ELT_BITLABEL 0x01
 
 #endif /* !_NAMESER_H_ */