BSD 4_3 development
[unix-history] / usr / src / etc / named / ns.h
CommitLineData
84cfda75
C
1/* ns.h 4.3 86/06/04 */
2
3/*
4 * Copyright (c) 1985 Regents of the University of California
5 * All Rights Reserved
6 */
7
8/*
9 * Global definitions and variables for the name server.
10 */
11
12#include <strings.h>
13#include <arpa/inet.h>
14
15/* MAXRETRY * RETRYTIME * #ns should be less than 1 minute or so */
16/* 3 * 8 * 3 = 72 seconds for 3 root domain servers */
17#define MAXNS 10 /* max number of NS's to try */
18#define RETRYTIME 8 /* time between retries */
19#define MAXRETRY 3 /* max number of retries per addr */
20#define MAXCNAMES 8 /* max # of CNAMES tried per addr */
21
22#define MAXZONES 32
23
24struct zoneinfo {
25 int z_type; /* type of zone */
26 char *z_origin; /* root domain name of zone */
27 time_t z_time; /* time left before refresh */
28 u_long z_refresh; /* refresh interval */
29 u_long z_retry; /* refresh retry interval */
30 u_long z_expire; /* expiriation time for cached info */
31 u_long z_minimum; /* minimum TTL value */
32 u_long z_serial; /* changes if zone modified */
33 char *z_source; /* source location of data */
34 int z_addrcnt; /* address count */
35 struct in_addr z_addr[MAXNS]; /* list of master servers for zone */
36};
37
38 /* zone types (z_type) */
39#define Z_PRIMARY 1
40#define Z_SECONDARY 2
41#define Z_CACHE 3
42#define Z_DOMAIN 4
43
44 /* Flags to ns_req() */
45#define ISTCP 01
46#define ISLOCAL 02
47
48/*
49 * Structure for recording info on forwarded queries.
50 */
51struct qinfo {
52 u_short q_id; /* id of query */
53 u_short q_nsid; /* id of forwarded query */
54 struct sockaddr_in q_from; /* requestor's address */
55 char *q_msg; /* the message */
56 int q_msglen; /* len of message */
57 int q_naddr; /* number of addr's in q_addr */
58 int q_curaddr; /* last addr sent to */
59 time_t q_time; /* time to retry */
60 struct qinfo *q_next; /* rexmit list (sorted by time) */
61 struct qinfo *q_link; /* storage list (random order) */
62 struct sockaddr_in q_addr[MAXNS]; /* addresses of NS's */
63 int q_nretry[MAXNS]; /* # of times addr retried */
64 int q_cname; /* # of cnames found */
65 char *q_cmsg; /* the cname message */
66 int q_cmsglen; /* len of cname message */
67 struct qstream *q_stream; /* TCP stream, null if UDP */
68};
69
70#define QINFO_NULL ((struct qinfo *)0)
71extern struct qinfo *qfindid();
72extern struct qinfo *qnew();
73extern struct qinfo *retryqp; /* next query to retry */
74
75struct qstream {
76 int s_rfd; /* stream file descriptor */
77 int s_size; /* expected amount of data to recive */
78 int s_bufsize; /* amount of data recived in s_buf */
79 char *s_buf; /* buffer of recived data */
80 char *s_bufp; /* pointer into s_buf of recived data */
81 struct qstream *s_next; /* next stream */
82 struct sockaddr_in s_from; /* address query came from */
83 u_long s_time; /* time stamp of last transaction */
84 int s_refcnt; /* number of outstanding queries */
85 u_short s_tempsize; /* temporary for size from net */
86};
87
88#define QSTREAM_NULL ((struct qstream *)0)
89extern struct qstream *streamq; /* stream queue */
90
91#ifdef DEBUG
92extern int debug; /* debug flag */
93extern FILE *ddt; /* debug file discriptor */
94#endif
95extern int ds; /* datagram socket */
96extern struct timeval tt; /* place to store time */
97
98extern struct itimerval ival; /* maintenance interval */
99extern struct zoneinfo zones[MAXZONES]; /* zone information */
100extern int nzones; /* number of zones in use */
101
102#ifdef vax
103extern u_short htons(), ntohs();
104extern u_long htonl(), ntohl();
105#endif