Sophie

Sophie

distrib > Mandriva > 2011.0 > i586 > media > contrib-release-debug > by-pkgid > e15638eab2afcd5cb258393c684c3bbc > files > 21

drill-debug-0.9.2-7mdv2011.0.i586.rpm

/** 
 * dns.h
 *
 * modelled slightly after dns.h of NSD
 * Everything we know about the DNS
 * (c) NLnet Labs, 2004
 *  
 * See the file LICENSE for the license
 *
 */

#ifndef _DNSTYPES_H_
#define _DNSTYPES_H_

#define DNS_PORT 53

/* RFC1035 */
#define CLASS_IN        1       /* Class IN */
#define CLASS_CH        3       /* Class CHAOS */
#define CLASS_HS        4       /* Class HS */
#define CLASS_ANY       255     /* Class IN */

#define TYPE_A          1       /* a host address */
#define TYPE_NS         2       /* an authoritative name server */
#define TYPE_MD         3       /* a mail destination (Obsolete - use MX) */
#define TYPE_MF         4       /* a mail forwarder (Obsolete - use MX) */
#define TYPE_CNAME      5       /* the canonical name for an alias */
#define TYPE_SOA        6       /* marks the start of a zone of authority */
#define TYPE_MB         7       /* a mailbox domain name (EXPERIMENTAL) */
#define TYPE_MG         8       /* a mail group member (EXPERIMENTAL) */
#define TYPE_MR         9       /* a mail rename domain name (EXPERIMENTAL) */
#define TYPE_NULL       10      /* a null RR (EXPERIMENTAL) */
#define TYPE_WKS        11      /* a well known service description */
#define TYPE_PTR        12      /* a domain name pointer */
#define TYPE_HINFO      13      /* host information */
#define TYPE_MINFO      14      /* mailbox or mail list information */
#define TYPE_MX         15      /* mail exchange */
#define TYPE_TXT        16      /* text strings */
#define TYPE_RP         17      /* RFC1183 */
#define TYPE_AFSDB      18      /* RFC1183 */
#define TYPE_X25	19	/* RFC1183 */
#define TYPE_ISDN	20	/* RFC1183 */
#define TYPE_RT		21	/* RFC1183 */
#define TYPE_NSAP	22	/* RFC1647 */

/* some newer types */
#define TYPE_SIG	24	/* DNSSEC SIG (rfc2535) */
#define TYPE_KEY	25	/* DNSSEC KEY (rfc2535) */
#define TYPE_PX		26	/* RFC 2163 */
#define TYPE_AAAA       28      /* ipv6 address */
#define TYPE_LOC        29      /* LOC record  RFC1876 */
#define TYPE_NXT	30	/* DNSSEC NXT (rfc2535) */
#define TYPE_SRV        33      /* SRV record RFC2782 */
#define TYPE_NAPTR      35      /* NAPTR record RFC2915 */
#define TYPE_KX		36	/* RFC2230 */
#define TYPE_CERT	37	/* CERT record RFC 2538 */
#define TYPE_DNAME	39	/* RFC2672 */
#define TYPE_OPT        41      /* Pseudo OPT record... */
#define TYPE_APL	42	/* APL, RFC3123 */
#define TYPE_DS         43      /* draft-ietf-dnsext-delegation */
#define TYPE_SSHFP      44      /* SSH Key Fingerprint */
#define TYPE_RRSIG	46      /* dnssecbis */
#define TYPE_NSEC   	47      /* dnssecbis */
#define TYPE_DNSKEY    	48      /* dnssecbis */

#define TYPE_TSIG	250	/* rfc2845 */

#define TYPE_IXFR       251
#define TYPE_AXFR       252
#define TYPE_MAILB      253     /* A request for mailbox-related records (MB, MG or MR) */
#define TYPE_MAILA      254     /* A request for mail agent RRs (Obsolete - see MX) */
#define TYPE_ANY        255     /* any type (wildcard) */

/* rcodes */
#define RCODE_NOERROR	1	/* +1 from what the real one is */
#define RCODE_FORMERR	2	/* ---------------------------- */
#define RCODE_SERVFAIL	3
#define RCODE_NAMEERR	4
#define RCODE_NOTIMPL	5
#define RCODE_REFUSED	6
#define RCODE_NOTAUTH	10	/* See rfc2845 */
#define RCODE_BADSIG	16
#define	RCODE_BADKEY	17
#define	RCODE_BADTIME	18

#define MAX_LABELLEN     63
#define MAX_DOMAINLEN    255

#define MAX_RDLENGTH	65535

/* Maximum size of a single RR.  */
/*
#define MAX_RR_SIZE \
	(MAXDOMAINLEN + sizeof(uint32_t) + 4*sizeof(uint16_t) + MAX_RDLENGTH)
*/

/** 
 * Generic lookup table.
 * This is used to map internal symbols to human-readable names
 * (for instance the value 1 to RCODE_NOERROR) 
 */
struct gtab {
	/**
	 * symbol
	 */
	uint16_t sym;
	/**
	 * name
	 */
	const char *name;
};

#define Z_CLASSES {             \
	{CLASS_IN, "IN"},       \
	{CLASS_CH, "CH"},       \
	{CLASS_HS, "HS"},       \
	{0, NULL}               \
}

#define Z_TYPES {               \
        {TYPE_A, "A"},          \
        {TYPE_NS, "NS"},        \
        {TYPE_MD, "MD"},        \
        {TYPE_MF, "MF"},        \
        {TYPE_CNAME, "CNAME"},  \
        {TYPE_SOA, "SOA"},      \
        {TYPE_MB, "MB"},        \
        {TYPE_MG, "MG"},        \
        {TYPE_MR, "MR"},        \
        {TYPE_NULL, "NULL"},    \
        {TYPE_WKS, "WKS"},      \
        {TYPE_PTR, "PTR"},      \
        {TYPE_HINFO, "HINFO"},  \
        {TYPE_MINFO, "MINFO"},  \
        {TYPE_MX, "MX"},        \
        {TYPE_TXT, "TXT"},      \
        {TYPE_SIG, "SIG"},	\
        {TYPE_KEY, "KEY"},	\
        {TYPE_NXT, "NXT"},	\
        {TYPE_PX, "PX"},	\
        {TYPE_AAAA, "AAAA"},    \
        {TYPE_SRV, "SRV"},      \
        {TYPE_NAPTR, "NAPTR"},  \
        {TYPE_KX, "KX"},	\
        {TYPE_CERT, "CERT"},    \
        {TYPE_DNAME, "DNAME"},    \
        {TYPE_LOC, "LOC"},      \
        {TYPE_AFSDB, "AFSDB"},  \
        {TYPE_X25, "X25"},	\
        {TYPE_ISDN, "ISDN"},	\
        {TYPE_RT, "RT"},	\
        {TYPE_NSAP, "NSAP"},	\
        {TYPE_RP, "RP"},        \
        {TYPE_APL, "APL"},        \
        {TYPE_DS, "DS"},        \
        {TYPE_SSHFP, "SSHFP"},  \
        {TYPE_RRSIG, "RRSIG"},  \
        {TYPE_NSEC, "NSEC"},    \
        {TYPE_DNSKEY, "DNSKEY"},\
	{TYPE_TSIG, "TSIG"},	\
        {TYPE_ANY, "ANY"},      \
        {TYPE_AXFR, "AXFR"},	\
        {0, NULL}               \
}

#define R_CODES {			\
        {RCODE_NOERROR, "NOERROR"},	\
        {RCODE_FORMERR, "FORMERR"},	\
        {RCODE_SERVFAIL, "SERVFAIL"},	\
        {RCODE_NAMEERR, "NAMEERR"},	\
        {RCODE_NOTIMPL, "NOTIMPL"},	\
        {RCODE_REFUSED, "REFUSED"},	\
        {RCODE_NOTAUTH, "NOTAUTH"},	\
        {RCODE_BADSIG, "BADSIG"},	\
        {RCODE_BADKEY, "BADKEY"},	\
        {RCODE_BADTIME, "BADTIME"},	\
        {0, NULL}			\
}

/*#define RDATA_TYPE_STRING 1*/
#define RDATA_TYPE_DNAME	1
#define RDATA_TYPE_INT32	2
#define RDATA_TYPE_INT16	3
#define RDATA_TYPE_INT8		4
#define RDATA_TYPE_A		5
#define RDATA_TYPE_AAAA		6
#define RDATA_TYPE_ANY		7
#define RDATA_TYPE_STR		8
#define RDATA_TYPE_BASE64	9
#define RDATA_TYPE_HEX		10
#define RDATA_TYPE_INT48	11

/* special rdata formats */
#define RDATA_TYPE_NSEC		12

/* extra subdivision for printing */
#define RDATA_TYPE_TYPE		13
#define RDATA_TYPE_CLASS	14
#define RDATA_TYPE_ALGO 	15
#define RDATA_TYPE_CERTTYPE	16
#define RDATA_TYPE_WKS		17
#define RDATA_TYPE_NSAP		18
#define RDATA_TYPE_LOC		19
#define RDATA_TYPE_APL		20

/* contains info on rdata types */

#define RR_RDATA_TYPES {		\
	{0, 0},				/* no type zero 	*/\
	{RDATA_TYPE_A},			/* A		1	*/\
	{RDATA_TYPE_DNAME},		/* NS		2	*/\
	{RDATA_TYPE_DNAME},		/* MD		3	*/\
	{RDATA_TYPE_DNAME},		/* MF		4	*/\
	{RDATA_TYPE_DNAME},		/* CNAME	5	*/\
	{RDATA_TYPE_DNAME,		/* SOA		6	*/\
		RDATA_TYPE_DNAME,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT32},	\
	{RDATA_TYPE_DNAME},		/* MB		7	*/\
	{RDATA_TYPE_DNAME},		/* MG		8	*/\
	{RDATA_TYPE_DNAME},		/* MR		9	*/\
	{RDATA_TYPE_HEX},		/* NULL (TODO)10	*/\
	{RDATA_TYPE_A,			/* WKS		11	*/\
		RDATA_TYPE_WKS},	\
	{RDATA_TYPE_DNAME},		/* PTR		12	*/\
	{RDATA_TYPE_STR,		/* HINFO	13	*/\
		RDATA_TYPE_STR},	\
	{RDATA_TYPE_DNAME,		/* MINFO	14	*/\
		RDATA_TYPE_DNAME},	\
	{RDATA_TYPE_INT16,		/* MX		15	*/\
		RDATA_TYPE_DNAME},	\
	{RDATA_TYPE_STR},		/* TXT (TODO)	16	*/\
	{RDATA_TYPE_DNAME,		/* RP		17	*/\
		RDATA_TYPE_DNAME},	\
	{RDATA_TYPE_INT16,		/* AFSDB	18	*/\
		RDATA_TYPE_DNAME},	\
	{RDATA_TYPE_STR},		/* X25		19	*/\
	{RDATA_TYPE_STR,		\
		RDATA_TYPE_STR},	/* ISDN		20	*/\
	{RDATA_TYPE_INT16,		\
		RDATA_TYPE_DNAME},	/* RT		21	*/\
	{RDATA_TYPE_NSAP},		/* NSAP		21	*/\
	{},				/* skip 23		*/\
	{RDATA_TYPE_TYPE,		/* SIG		24	*/\
		RDATA_TYPE_ALGO,	\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT32,	/*TODO <- make _DATE	*/\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT16,	\
		RDATA_TYPE_DNAME,	\
		RDATA_TYPE_BASE64},	\
	{RDATA_TYPE_INT16,		/* KEY 		25	*/\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_BASE64},	\
	{RDATA_TYPE_INT16,		/* PX		26	*/\
		RDATA_TYPE_DNAME,	\
		RDATA_TYPE_DNAME},	\
	{},				/* skip 27		*/\
	{RDATA_TYPE_AAAA},		/* AAAA 	28	*/\
	{RDATA_TYPE_LOC},		/* LOC		29	*/\
	{RDATA_TYPE_DNAME,		/* NXT		30	*/\
		RDATA_TYPE_HEX},	\
	{}, {},				/* skip 31-32		*/\
	{RDATA_TYPE_INT16,		/* SRV		33	*/\
		RDATA_TYPE_INT16,	\
		RDATA_TYPE_INT16,	\
		RDATA_TYPE_DNAME},	\
	{},				/* skip 34		*/\
	{RDATA_TYPE_INT16,		/* NAPTR	35	*/\
		RDATA_TYPE_INT16,	\
		RDATA_TYPE_STR,		\
		RDATA_TYPE_STR,		\
		RDATA_TYPE_STR,		\
		RDATA_TYPE_DNAME},	\
	{RDATA_TYPE_INT16,		/* KX		36	*/\
		RDATA_TYPE_DNAME},	\
	{RDATA_TYPE_CERTTYPE,		/* CERT 	37	*/\
		RDATA_TYPE_INT16,	\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_BASE64},	\
	{}, 				/* skip 38		*/\
	{RDATA_TYPE_DNAME},		/* DNAME	39	*/\
	{}, 				/* skip 40		*/\
	{},				/* OPT		41	*/\
	{RDATA_TYPE_APL},		/* APL		42	*/\
	{RDATA_TYPE_INT16,		/* DS		43	*/\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_HEX},	\
	{},				/* SSHFP TODO 	44		*/\
	{},				/* skip 	45		*/\
	{RDATA_TYPE_TYPE,		/* RRSIG	46		*/\
		RDATA_TYPE_ALGO,	\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT32,	\
		RDATA_TYPE_INT16,	\
		RDATA_TYPE_DNAME,	\
		RDATA_TYPE_BASE64},	\
	{RDATA_TYPE_DNAME,		/* NSEC		47	*/\
		RDATA_TYPE_NSEC},	\
	{RDATA_TYPE_INT16,		/* DNSKEY	48	*/\
		RDATA_TYPE_INT8,	\
		RDATA_TYPE_ALGO,	\
		RDATA_TYPE_BASE64},	\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 49-58	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 59-68	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 69-78	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 79-88	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 89-98	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 99-108	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 109-118	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 119-128	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 129-138	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 139-148	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 149-158	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 159-168	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 169-178	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 179-188	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 189-198	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 199-208	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 209-218	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 219-228	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 229-238	*/\
	{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, /* skip 239-248	*/\
	{}, 					/* skip 249	*/\
	{RDATA_TYPE_DNAME,			/* TSIG 250	*/\
		RDATA_TYPE_INT48,		\
		RDATA_TYPE_INT16,		\
		RDATA_TYPE_INT16,		\
		RDATA_TYPE_HEX,			\
		RDATA_TYPE_INT16,		\
		RDATA_TYPE_INT16,		\
		RDATA_TYPE_HEX},		\
	{},					/* IXFR		*/\
	{},					/* AXFR		*/\
	{},					/* MAILB	*/\
	{},					/* MAILA	*/\
	{}					/* ANY		*/\
}

/* set or clr packet flags */
#define SET_QR(x)	((x)->flags.qr) = 1
#define CLR_QR(x)	((x)->flags.qr) = 0
#define SET_RD(x)	((x)->flags.rd) = 1
#define CLR_RD(x)	((x)->flags.rd) = 0
#define SET_RA(x)	((x)->flags.ra) = 1
#define CLR_RA(x)	((x)->flags.ra) = 0
#define SET_AD(x)	((x)->flags.ad) = 1
#define CLR_AD(x)	((x)->flags.ad) = 0
#define SET_CD(x)	((x)->flags.cd) = 1
#define CLR_CD(x)	((x)->flags.cd) = 0
#define SET_AA(x)	((x)->flags.aa) = 1
#define CLR_AA(x)	((x)->flags.aa) = 0
/* get macros */
#define GET_TC(x)	(x)->flags.tc
			
/* more pkt specifics */
#define SET_UDPSIZE(x, y)	((x)->udppacketsize) = (y)
#define SET_RCODE(x, y) 	((x)->opt.xrcode) = (y)
#define SET_DNSSEC(x)		((x)->opt.dnssec_ok) = 1
#define SET_VERSION(x,y)	((x)->opt.dnssec_ok) = (y)

#define GET_UDPSIZE(x)	((x)->udppacketsize)
#define GET_RCODE(x) 	((x)->opt.xrcode)
#define GET_DNSSEC(x)	((x)->opt.dnssec_ok)
#define GET_VERSION(x)	((x)->opt.version)

extern struct gtab ztypes[];
extern struct gtab zclasses[];
extern struct gtab rcodes[];
extern int have_drill_opt;
#define MAX_RD_COUNT 25
extern int rr_rdata_types[65535][MAX_RD_COUNT];

uint16_t intbyname(const char *, struct gtab *);
uint16_t typebyname(const char *, struct gtab *);
const char * namebyint(uint16_t, struct gtab *);
char * typebyint(uint16_t, struct gtab *);
const char * classbyint(uint16_t, struct gtab *);
uint8_t dpacket_type(struct t_dpacket *);
uint16_t signature_covered_type(struct t_rr *);

#define PKT_REFERRAL 1
#define PKT_NXDOMAIN 2
#define PKT_NODATA   3
#define PKT_ANSWER   4
#define PKT_ERROR    8  /* no answer, no connection, empty packet */

#endif /* _DNSTYPES_H_ */