/* ns.h 4.3 86/06/04 */ /* * Copyright (c) 1985 Regents of the University of California * All Rights Reserved */ /* * Global definitions and variables for the name server. */ #include #include /* MAXRETRY * RETRYTIME * #ns should be less than 1 minute or so */ /* 3 * 8 * 3 = 72 seconds for 3 root domain servers */ #define MAXNS 10 /* max number of NS's to try */ #define RETRYTIME 8 /* time between retries */ #define MAXRETRY 3 /* max number of retries per addr */ #define MAXCNAMES 8 /* max # of CNAMES tried per addr */ #define MAXZONES 32 struct zoneinfo { int z_type; /* type of zone */ char *z_origin; /* root domain name of zone */ time_t z_time; /* time left before refresh */ u_long z_refresh; /* refresh interval */ u_long z_retry; /* refresh retry interval */ u_long z_expire; /* expiriation time for cached info */ u_long z_minimum; /* minimum TTL value */ u_long z_serial; /* changes if zone modified */ char *z_source; /* source location of data */ int z_addrcnt; /* address count */ struct in_addr z_addr[MAXNS]; /* list of master servers for zone */ }; /* zone types (z_type) */ #define Z_PRIMARY 1 #define Z_SECONDARY 2 #define Z_CACHE 3 #define Z_DOMAIN 4 /* Flags to ns_req() */ #define ISTCP 01 #define ISLOCAL 02 /* * Structure for recording info on forwarded queries. */ struct qinfo { u_short q_id; /* id of query */ u_short q_nsid; /* id of forwarded query */ struct sockaddr_in q_from; /* requestor's address */ char *q_msg; /* the message */ int q_msglen; /* len of message */ int q_naddr; /* number of addr's in q_addr */ int q_curaddr; /* last addr sent to */ time_t q_time; /* time to retry */ struct qinfo *q_next; /* rexmit list (sorted by time) */ struct qinfo *q_link; /* storage list (random order) */ struct sockaddr_in q_addr[MAXNS]; /* addresses of NS's */ int q_nretry[MAXNS]; /* # of times addr retried */ int q_cname; /* # of cnames found */ char *q_cmsg; /* the cname message */ int q_cmsglen; /* len of cname message */ struct qstream *q_stream; /* TCP stream, null if UDP */ }; #define QINFO_NULL ((struct qinfo *)0) extern struct qinfo *qfindid(); extern struct qinfo *qnew(); extern struct qinfo *retryqp; /* next query to retry */ struct qstream { int s_rfd; /* stream file descriptor */ int s_size; /* expected amount of data to recive */ int s_bufsize; /* amount of data recived in s_buf */ char *s_buf; /* buffer of recived data */ char *s_bufp; /* pointer into s_buf of recived data */ struct qstream *s_next; /* next stream */ struct sockaddr_in s_from; /* address query came from */ u_long s_time; /* time stamp of last transaction */ int s_refcnt; /* number of outstanding queries */ u_short s_tempsize; /* temporary for size from net */ }; #define QSTREAM_NULL ((struct qstream *)0) extern struct qstream *streamq; /* stream queue */ #ifdef DEBUG extern int debug; /* debug flag */ extern FILE *ddt; /* debug file discriptor */ #endif extern int ds; /* datagram socket */ extern struct timeval tt; /* place to store time */ extern struct itimerval ival; /* maintenance interval */ extern struct zoneinfo zones[MAXZONES]; /* zone information */ extern int nzones; /* number of zones in use */ #ifdef vax extern u_short htons(), ntohs(); extern u_long htonl(), ntohl(); #endif