xref: /original-bsd/include/arpa/nameser.h (revision 1403a0cd)
1 /*	nameser.h	4.3	85/03/27	*/
2 /*
3  * Define constants based on rfc883
4  */
5 #define PACKETSZ	512		/* maximum packet size */
6 #define MAXDNAME	256		/* maximum domain name */
7 #define MAXCDNAME	255		/* maximum compressed domain name */
8 #define MAXLABEL	63		/* maximum length of domain label */
9 	/* Number of bytes of fixed size data in query structure */
10 #define QFIXEDSZ	4
11 	/* number of bytes of fixed size data in resource record */
12 #define RRFIXEDSZ	10
13 
14 #ifdef vax
15 #define HTONS(s)	(((s >> 8) & 0xff) | ((s & 0xff) << 8))
16 #else
17 #define HTONS(s)
18 #endif
19 
20 /*
21  * Internet nameserver port number
22  */
23 #define NAMESERVER_PORT	53
24 
25 /*
26  * Currently defined opcodes
27  */
28 #define QUERY		0		/* standard query */
29 #define IQUERY		1		/* inverse query */
30 #define CQUERYM		2		/* completion query (multiple) */
31 #define CQUERYU		3		/* completion query (unique) */
32 	/* non standard */
33 #define UPDATEA		11		/* add resource record */
34 #define UPDATED		12		/* delete resource record */
35 #define UPDATEM		13		/* modify resource record */
36 #define ZONEINIT	14		/* initial zone transfer */
37 #define ZONEREF		15		/* incremental zone referesh */
38 
39 /*
40  * Currently defined response codes
41  */
42 #define NOERROR		0		/* no error */
43 #define FORMERR		1		/* format error */
44 #define SERVFAIL	2		/* server failure */
45 #define NXDOMAIN	3		/* non existent domain */
46 #define NOTIMP		4		/* not implemented */
47 #define REFUSED		5		/* query refused */
48 	/* non standard */
49 #define NOCHANGE	15		/* update failed to change db */
50 
51 /*
52  * Type values for resources and queries
53  */
54 #define T_A		1		/* host address */
55 #define T_NS		2		/* authoritative server */
56 #define T_MD		3		/* mail destination */
57 #define T_MF		4		/* mail forwarder */
58 #define T_CNAME		5		/* connonical name */
59 #define T_SOA		6		/* start of authority zone */
60 #define T_MB		7		/* mailbox domain name */
61 #define T_MG		8		/* mail group member */
62 #define T_MR		9		/* mail rename name */
63 #define T_NULL		10		/* null resource record */
64 #define T_WKS		11		/* well known service */
65 #define T_PTR		12		/* domain name pointer */
66 #define T_HINFO		13		/* host information */
67 #define T_MINFO		14		/* mailbox information */
68 	/* non standard */
69 #define T_UINFO		15		/* user (finger) information */
70 #define T_UID		16		/* user ID */
71 #define T_GID		17		/* group ID */
72 	/* Query type values which do not appear in resource records */
73 #define T_AXFR		252		/* transfer zone of authority */
74 #define T_MAILB		253		/* transfer mailbox records */
75 #define T_MAILA		254		/* transfer mail agent records */
76 #define T_ANY		255		/* wildcard match */
77 
78 /*
79  * Values for class field
80  */
81 
82 #define C_IN		1		/* the arpa internet */
83 #define C_CS		2		/* the computer science network */
84 	/* Query class values which do not appear in resource records */
85 #define C_ANY		255		/* wildcard match */
86 
87 /*
88  * Structure for query header, the order of the fields is machine and
89  * compiler dependent, in our case, the bits within a byte are assignd
90  * least significant first, while the order of transmition is most
91  * significant first.  This requires a somewhat confusing rearrangement.
92  */
93 
94 typedef struct {
95 	u_short	id;		/* query identification number */
96 			/* fields in third byte */
97 	u_char	rd:1;		/* recursion desired */
98 	u_char	tc:1;		/* truncated message */
99 	u_char	aa:1;		/* authoritive answer */
100 	u_char	opcode:4;	/* purpose of message */
101 	u_char	qr:1;		/* response flag */
102 			/* fields in forth byte */
103 	u_char	rcode:4;	/* response code */
104 	u_char	unused:2;	/* unused bits */
105 	u_char	pr:1;		/* primary server required (non standard) */
106 	u_char	ra:1;		/* recursion available */
107 			/* remaining bytes */
108 	u_short	qdcount;	/* number of question entries */
109 	u_short	ancount;	/* number of answer entries */
110 	u_short	nscount;	/* number of authority entries */
111 	u_short	arcount;	/* number of resource entries */
112 } HEADER;
113 
114 /*
115  * Defines for handling compressed domain names
116  */
117 #define INDIR_MASK	0xc0
118 
119 /*
120  * Structure for passing resource records around.
121  */
122 struct rrec {
123 	short	r_zone;			/* zone number */
124 	short	r_class;		/* class number */
125 	short	r_type;			/* type number */
126 	u_long	r_ttl;			/* time to live */
127 	int	r_size;			/* size of data area */
128 	char	*r_data;		/* pointer to data */
129 };
130 
131 extern	u_short	getshort();
132 extern	u_long	getlong();
133