/****************************************************************************
 * Copyright (C) 1998 WIDE Project. All rights reserved.
 * Copyright (C) 1999,2000,2001,2002 University of Tromso. All rights reserved.
 * Copyright (C) 2002 Invenia Innovation AS. All rights reserved.
 *
 * Author: Feike W. Dillema, feico@pasta.cs.uit.no.
 *         based on newbie code by Yusuke DOI, Keio Univ. Murai Lab.
 ****************************************************************************/

/*
 * <$Id: tot_constants.h,v 3.17 2003/11/26 09:46:53 dillema Exp $>
 */

#ifndef TOT_CONSTANTS
#define TOT_CONSTANTS

extern const char *hex;

/*
 * TOTD Constants and Default Values
 */
#define TOTPREFIXLEN 24
#define MAXARGS 30

#ifndef MAXINTERFACES
#define MAXINTERFACES MAXARGS
#endif

#ifndef MAXPREFIXES
#define MAXPREFIXES MAXARGS
#endif

#define IF_CHECK_INTERVAL 10

#ifdef DBTCP
#define QUERY_TCP 1
#else
#define QUERY_TCP 0
#endif

/* default pid file -- if NULL no default pid file.*/
#define TOT_PID_FILE "/var/run/totd.pid"

#define SEARCH_CNAME_LEVEL   6	/* maximum levels of cname links we allow */

#define TCP_SRV_TIMEOUT 60      /* Useful value? */
#define SEARCH_REMOTE_TIMEOUT 2	/* timeout in seconds of query to forwarder */
#define SEARCH_REMOTE_RETRY   1	/* number of retransmits */
#define FORWARDER_DEATH_MARK 3

#define PORT_TO 53		/* default port number to forward to */
#define PORT_SRV 53		/* default port number to listen on for requests */
#define MAX_PACKET 512		/* max UDP packet size */
#define MAX_STREAM 65535	/* max TCP stream size */

/*
 * there is no good reason to select these value
 */
#define EV_DUP_TABLE_SIZE 1000
#define EV_DUP_CMP_LEN 16
#define EVENT_LIFETIME 60

/*
 * TOTD Transaction States
 */
#define WORD_NONE 0
#define WORK_DONE 0
#define FORWARD_REQUEST 1
#define TRICK_REQUEST 2
#define PTR_TRICK_REQUEST 3
#define NEWPTR_TRICK_REQUEST 4
#define PTR_SCOPED_TRICK_REQUEST 5
#ifdef STF
#define STF_DONE 0
#define STF_REQUEST 6
#define STF_NSLIST 7
#define STF_FORWARDING 8
#endif

/* Timeout Event Types */
#define EV_TIMEOUT_NULL 0
#define EV_TIMEOUT_CONTEXT 1

/* 
 * DNS constants and RFC defined values
 */
#define DNAME_DELIM '.'		/* domain name delimiter */
#define MAX_DNAME 256		/* max domain name length */
#define MAX_LABEL 63		/* max label length */

/* OPCODE in the requests */
#define OP_QUERY 0		/* standard query */

/* RCODE in the message */
#define RC_OK 0			/* no error */
#define RC_FMTERR 1		/* format error */
#define RC_SERVERERR 2		/* server error */
#define RC_NAMEERR 3		/* name does not exist error */
#define RC_NXDOMAIN 3		/* alias for NAMEERR */
#define RC_NIMP 4		/* not implimented error */
#define RC_REF 5		/* refused error */
#define RC_YXDOMAIN 6		/* <- rfc2136: request domain exists */
#define RC_YXRRSET 7		/* <- rfc2136: request rrset exists */
#define RC_NXRRSET 8		/* <- rfc2136: request rrset not exist */
#define RC_NOTAUTH 9		/* <- rfc2136: non-authority zone */
#define RC_NOTZONE 10		/* <- rfc2136: not-zone error */

/*
 * RR type and query type 
 *    RR means Resource Record
 *    RT means Resource Type
 */ 
#define RT_VOID 0
#define RT_A 1
#define RT_NS 2
#define RT_MD 3
#define RT_MF 4
#define RT_CNAME 5
#define RT_SOA 6
#define RT_MB 7
#define RT_MG 8
#define RT_MR 9
#define RT_NULL 10
#define RT_WKS 11
#define RT_PTR 12
#define RT_HINFO 13
#define RT_MINFO 14
#define RT_MX 15
#define RT_TXT 16
#define RT_RP 17		/* rfc1183: responsible person */
#define RT_AAAA 28		/* rfc1886: for IPv6 */
#define RT_SRV 33		/* rfc2052: SRV */
#define RT_A6 38		/* rfc2874: for IPv6 */
#define RT_DNAME 39
/* non standard */
#define RT_UINFO 100
/* these are only for query */
#define RT_TSIG 250
#define RT_IXFR 251
#define RT_AXFR 252
#define RT_ALL 255

/* Class values */
#define C_IN 1
#define C_NONE 254		/* <- rfc2136 */
/* this is only for query */
#define C_ANY 255

/* Bit mask for domain name compression */
#define DNCMP_MASK 0xc0
#define DNCMP_MASK_INT16T 0xc000
#define DNCMP_REDIRECT_LIMIT (0x3000-1)

/* for bit string label */
#define EDNS0_MASK 0x40
#define EDNS0_ELT_BITLABEL 0x41

#endif


syntax highlighted by Code2HTML, v. 0.9.1