135
int number; /* Identifying number, like T_MX */
136
const char * name; /* Its symbolic name, like "MX" */
137
const char * humanname; /* Its fun name, like "mail exchanger" */
135
int number; /*%< Identifying number, like T_MX */
136
const char * name; /*%< Its symbolic name, like "MX" */
137
const char * humanname; /*%< Its fun name, like "mail exchanger" */
141
141
* Global defines and variables for resolver stub.
143
#define MAXNS 3 /* max # name servers we'll track */
144
#define MAXDFLSRCH 3 /* # default domain levels to try */
145
#define MAXDNSRCH 6 /* max # domains in search path */
146
#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */
148
#define RES_TIMEOUT 5 /* min. seconds between retries */
149
#define MAXRESOLVSORT 10 /* number of net to sort on */
150
#define RES_MAXNDOTS 15 /* should reflect bit field size */
151
#define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */
152
#define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */
153
#define RES_DFLRETRY 2 /* Default #/tries. */
154
#define RES_MAXTIME 65535 /* Infinity, in milliseconds. */
143
#define MAXNS 3 /*%< max # name servers we'll track */
144
#define MAXDFLSRCH 3 /*%< # default domain levels to try */
145
#define MAXDNSRCH 6 /*%< max # domains in search path */
146
#define LOCALDOMAINPARTS 2 /*%< min levels in name that is "local" */
147
#define RES_TIMEOUT 5 /*%< min. seconds between retries */
148
#define MAXRESOLVSORT 10 /*%< number of net to sort on */
149
#define RES_MAXNDOTS 15 /*%< should reflect bit field size */
150
#define RES_MAXRETRANS 30 /*%< only for resolv.conf/RES_OPTIONS */
151
#define RES_MAXRETRY 5 /*%< only for resolv.conf/RES_OPTIONS */
152
#define RES_DFLRETRY 2 /*%< Default #/tries. */
153
#define RES_MAXTIME 65535 /*%< Infinity, in milliseconds. */
156
154
struct __res_state_ext;
158
156
struct __res_state {
159
int retrans; /* retransmission time interval */
160
int retry; /* number of times to retransmit */
157
int retrans; /*%< retransmission time interval */
158
int retry; /*%< number of times to retransmit */
162
u_int options; /* option flags - see below. */
160
u_int options; /*%< option flags - see below. */
164
u_long options; /* option flags - see below. */
162
u_long options; /*%< option flags - see below. */
166
int nscount; /* number of name servers */
164
int nscount; /*%< number of name servers */
167
165
struct sockaddr_in
168
nsaddr_list[MAXNS]; /* address of name server */
169
#define nsaddr nsaddr_list[0] /* for backward compatibility */
170
u_short id; /* current message id */
171
char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */
172
char defdname[256]; /* default domain (deprecated) */
166
nsaddr_list[MAXNS]; /*%< address of name server */
167
#define nsaddr nsaddr_list[0] /*%< for backward compatibility */
168
u_short id; /*%< current message id */
169
char *dnsrch[MAXDNSRCH+1]; /*%< components of domain to search */
170
char defdname[256]; /*%< default domain (deprecated) */
174
u_int pfcode; /* RES_PRF_ flags - see below. */
172
u_int pfcode; /*%< RES_PRF_ flags - see below. */
176
u_long pfcode; /* RES_PRF_ flags - see below. */
174
u_long pfcode; /*%< RES_PRF_ flags - see below. */
178
unsigned ndots:4; /* threshold for initial abs. query */
179
unsigned nsort:4; /* number of elements in sort_list[] */
176
unsigned ndots:4; /*%< threshold for initial abs. query */
177
unsigned nsort:4; /*%< number of elements in sort_list[] */
182
180
struct in_addr addr;
184
182
} sort_list[MAXRESOLVSORT];
185
res_send_qhook qhook; /* query hook */
186
res_send_rhook rhook; /* response hook */
187
int res_h_errno; /* last one set for this context */
188
int _vcsock; /* PRIVATE: for res_send VC i/o */
189
u_int _flags; /* PRIVATE: see below */
190
u_int _pad; /* make _u 64 bit aligned */
183
res_send_qhook qhook; /*%< query hook */
184
res_send_rhook rhook; /*%< response hook */
185
int res_h_errno; /*%< last one set for this context */
186
int _vcsock; /*%< PRIVATE: for res_send VC i/o */
187
u_int _flags; /*%< PRIVATE: see below */
188
u_int _pad; /*%< make _u 64 bit aligned */
192
190
/* On an 32-bit arch this means 512b total. */
193
191
char pad[72 - 4*sizeof (int) - 2*sizeof (void *)];
195
193
u_int16_t nscount;
196
u_int16_t nstimes[MAXNS]; /* ms. */
194
u_int16_t nstimes[MAXNS]; /*%< ms. */
197
195
int nssocks[MAXNS];
198
struct __res_state_ext *ext; /* extention for IPv6 */
196
struct __res_state_ext *ext; /*%< extention for IPv6 */
208
206
struct sockaddr_in6 sin6;
210
208
#ifdef ISC_ALIGN64
211
int64_t __align64; /* 64bit alignment */
209
int64_t __align64; /*%< 64bit alignment */
213
int32_t __align32; /* 32bit alignment */
211
int32_t __align32; /*%< 32bit alignment */
215
char __space[128]; /* max size */
213
char __space[128]; /*%< max size */
219
217
* Resolver flags (used to be discrete per-module statics ints).
221
#define RES_F_VC 0x00000001 /* socket is TCP */
222
#define RES_F_CONN 0x00000002 /* socket is connected */
223
#define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors */
224
#define RES_F__UNUSED 0x00000008 /* (unused) */
225
#define RES_F_LASTMASK 0x000000F0 /* ordinal server of last res_nsend */
226
#define RES_F_LASTSHIFT 4 /* bit position of LASTMASK "flag" */
219
#define RES_F_VC 0x00000001 /*%< socket is TCP */
220
#define RES_F_CONN 0x00000002 /*%< socket is connected */
221
#define RES_F_EDNS0ERR 0x00000004 /*%< EDNS0 caused errors */
222
#define RES_F__UNUSED 0x00000008 /*%< (unused) */
223
#define RES_F_LASTMASK 0x000000F0 /*%< ordinal server of last res_nsend */
224
#define RES_F_LASTSHIFT 4 /*%< bit position of LASTMASK "flag" */
227
225
#define RES_GETLAST(res) (((res)._flags & RES_F_LASTMASK) >> RES_F_LASTSHIFT)
229
227
/* res_findzonecut2() options */
230
#define RES_EXHAUSTIVE 0x00000001 /* always do all queries */
231
#define RES_IPV4ONLY 0x00000002 /* IPv4 only */
232
#define RES_IPV6ONLY 0x00000004 /* IPv6 only */
228
#define RES_EXHAUSTIVE 0x00000001 /*%< always do all queries */
229
#define RES_IPV4ONLY 0x00000002 /*%< IPv4 only */
230
#define RES_IPV6ONLY 0x00000004 /*%< IPv6 only */
235
233
* Resolver options (keep these in synch with res_debug.c, please)
237
#define RES_INIT 0x00000001 /* address initialized */
238
#define RES_DEBUG 0x00000002 /* print debug messages */
239
#define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/
240
#define RES_USEVC 0x00000008 /* use virtual circuit */
241
#define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */
242
#define RES_IGNTC 0x00000020 /* ignore trucation errors */
243
#define RES_RECURSE 0x00000040 /* recursion desired */
244
#define RES_DEFNAMES 0x00000080 /* use default domain name */
245
#define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */
246
#define RES_DNSRCH 0x00000200 /* search up local domain tree */
247
#define RES_INSECURE1 0x00000400 /* type 1 security disabled */
248
#define RES_INSECURE2 0x00000800 /* type 2 security disabled */
249
#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */
250
#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */
251
#define RES_ROTATE 0x00004000 /* rotate ns list after each query */
252
#define RES_NOCHECKNAME 0x00008000 /* do not check names for sanity. */
253
#define RES_KEEPTSIG 0x00010000 /* do not strip TSIG records */
254
#define RES_BLAST 0x00020000 /* blast all recursive servers */
255
#define RES_NOTLDQUERY 0x00100000 /* don't unqualified name as a tld */
256
#define RES_USE_DNSSEC 0x00200000 /* use DNSSEC using OK bit in OPT */
235
#define RES_INIT 0x00000001 /*%< address initialized */
236
#define RES_DEBUG 0x00000002 /*%< print debug messages */
237
#define RES_AAONLY 0x00000004 /*%< authoritative answers only (!IMPL)*/
238
#define RES_USEVC 0x00000008 /*%< use virtual circuit */
239
#define RES_PRIMARY 0x00000010 /*%< query primary server only (!IMPL) */
240
#define RES_IGNTC 0x00000020 /*%< ignore trucation errors */
241
#define RES_RECURSE 0x00000040 /*%< recursion desired */
242
#define RES_DEFNAMES 0x00000080 /*%< use default domain name */
243
#define RES_STAYOPEN 0x00000100 /*%< Keep TCP socket open */
244
#define RES_DNSRCH 0x00000200 /*%< search up local domain tree */
245
#define RES_INSECURE1 0x00000400 /*%< type 1 security disabled */
246
#define RES_INSECURE2 0x00000800 /*%< type 2 security disabled */
247
#define RES_NOALIASES 0x00001000 /*%< shuts off HOSTALIASES feature */
248
#define RES_USE_INET6 0x00002000 /*%< use/map IPv6 in gethostbyname() */
249
#define RES_ROTATE 0x00004000 /*%< rotate ns list after each query */
250
#define RES_NOCHECKNAME 0x00008000 /*%< do not check names for sanity. */
251
#define RES_KEEPTSIG 0x00010000 /*%< do not strip TSIG records */
252
#define RES_BLAST 0x00020000 /*%< blast all recursive servers */
253
#define RES_NSID 0x00040000 /*%< request name server ID */
254
#define RES_NOTLDQUERY 0x00100000 /*%< don't unqualified name as a tld */
255
#define RES_USE_DNSSEC 0x00200000 /*%< use DNSSEC using OK bit in OPT */
257
256
/* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */
258
257
/* KAME extensions: use higher bit to avoid conflict with ISC use */
259
#define RES_USE_DNAME 0x10000000 /* use DNAME */
260
#define RES_USE_EDNS0 0x40000000 /* use EDNS0 if configured */
261
#define RES_NO_NIBBLE2 0x80000000 /* disable alternate nibble lookup */
258
#define RES_USE_DNAME 0x10000000 /*%< use DNAME */
259
#define RES_USE_EDNS0 0x40000000 /*%< use EDNS0 if configured */
260
#define RES_NO_NIBBLE2 0x80000000 /*%< disable alternate nibble lookup */
263
262
#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | \
264
263
RES_DNSRCH | RES_NO_NIBBLE2)
267
266
* Resolver "pfcode" values. Used by dig.
269
268
#define RES_PRF_STATS 0x00000001