resolv.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. /* $NetBSD: resolv.h,v 1.31 2005/12/26 19:01:47 perry Exp $ */
  2. /*
  3. * Copyright (c) 1983, 1987, 1989
  4. * The Regents of the University of California. All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions
  8. * are met:
  9. * 1. Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. * 2. Redistributions in binary form must reproduce the above copyright
  12. * notice, this list of conditions and the following disclaimer in the
  13. * documentation and/or other materials provided with the distribution.
  14. * 3. Neither the name of the University nor the names of its contributors
  15. * may be used to endorse or promote products derived from this software
  16. * without specific prior written permission.
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  19. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  21. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  22. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  23. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  24. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  25. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  26. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  27. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  28. * SUCH DAMAGE.
  29. */
  30. /*
  31. * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
  32. * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
  33. *
  34. * Permission to use, copy, modify, and distribute this software for any
  35. * purpose with or without fee is hereby granted, provided that the above
  36. * copyright notice and this permission notice appear in all copies.
  37. *
  38. * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
  39. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  40. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
  41. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  42. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  43. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
  44. * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  45. */
  46. /*
  47. * @(#)resolv.h 8.1 (Berkeley) 6/2/93
  48. * Id: resolv.h,v 1.7.2.11.4.2 2004/06/25 00:41:05 marka Exp
  49. */
  50. #ifndef _RESOLV_PRIVATE_H_
  51. #define _RESOLV_PRIVATE_H_
  52. #include <resolv.h>
  53. #include "resolv_static.h"
  54. /*
  55. * Revision information. This is the release date in YYYYMMDD format.
  56. * It can change every day so the right thing to do with it is use it
  57. * in preprocessor commands such as "#if (__RES > 19931104)". Do not
  58. * compare for equality; rather, use it to determine whether your resolver
  59. * is new enough to contain a certain feature.
  60. */
  61. #define __RES 20030124
  62. /*
  63. * This used to be defined in res_query.c, now it's in herror.c.
  64. * [XXX no it's not. It's in irs/irs_data.c]
  65. * It was
  66. * never extern'd by any *.h file before it was placed here. For thread
  67. * aware programs, the last h_errno value set is stored in res->h_errno.
  68. *
  69. * XXX: There doesn't seem to be a good reason for exposing RES_SET_H_ERRNO
  70. * (and __h_errno_set) to the public via <resolv.h>.
  71. * XXX: __h_errno_set is really part of IRS, not part of the resolver.
  72. * If somebody wants to build and use a resolver that doesn't use IRS,
  73. * what do they do? Perhaps something like
  74. * #ifdef WANT_IRS
  75. * # define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x)
  76. * #else
  77. * # define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x))
  78. * #endif
  79. */
  80. #define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x))
  81. struct __res_state; /* forward */
  82. /*
  83. * Resolver configuration file.
  84. * Normally not present, but may contain the address of the
  85. * initial name server(s) to query and the domain search list.
  86. */
  87. #ifndef _PATH_RESCONF
  88. #ifdef ANDROID_CHANGES
  89. #define _PATH_RESCONF "/etc/ppp/resolv.conf"
  90. #else
  91. #define _PATH_RESCONF "/etc/resolv.conf"
  92. #endif
  93. #endif
  94. typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
  95. res_sendhookact;
  96. typedef res_sendhookact (*res_send_qhook)(struct sockaddr * const *,
  97. const u_char **, int *,
  98. u_char *, int, int *);
  99. typedef res_sendhookact (*res_send_rhook)(const struct sockaddr *,
  100. const u_char *, int, u_char *,
  101. int, int *);
  102. struct res_sym {
  103. int number; /* Identifying number, like T_MX */
  104. const char * name; /* Its symbolic name, like "MX" */
  105. const char * humanname; /* Its fun name, like "mail exchanger" */
  106. };
  107. /*
  108. * Global defines and variables for resolver stub.
  109. */
  110. #define MAXNS 3 /* max # name servers we'll track */
  111. #define MAXDFLSRCH 3 /* # default domain levels to try */
  112. #define MAXDNSRCH 6 /* max # domains in search path */
  113. #define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */
  114. #define RES_TIMEOUT 5 /* min. seconds between retries */
  115. #define MAXRESOLVSORT 10 /* number of net to sort on */
  116. #define RES_MAXNDOTS 15 /* should reflect bit field size */
  117. #define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */
  118. #define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */
  119. #define RES_DFLRETRY 2 /* Default #/tries. */
  120. #define RES_MAXTIME 65535 /* Infinity, in milliseconds. */
  121. struct __res_state_ext;
  122. struct __res_state {
  123. int retrans; /* retransmission time interval */
  124. int retry; /* number of times to retransmit */
  125. #ifdef sun
  126. u_int options; /* option flags - see below. */
  127. #else
  128. u_long options; /* option flags - see below. */
  129. #endif
  130. int nscount; /* number of name servers */
  131. struct sockaddr_in
  132. nsaddr_list[MAXNS]; /* address of name server */
  133. #define nsaddr nsaddr_list[0] /* for backward compatibility */
  134. u_short id; /* current message id */
  135. char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */
  136. char defdname[256]; /* default domain (deprecated) */
  137. #ifdef sun
  138. u_int pfcode; /* RES_PRF_ flags - see below. */
  139. #else
  140. u_long pfcode; /* RES_PRF_ flags - see below. */
  141. #endif
  142. unsigned ndots:4; /* threshold for initial abs. query */
  143. unsigned nsort:4; /* number of elements in sort_list[] */
  144. char unused[3];
  145. struct {
  146. struct in_addr addr;
  147. uint32_t mask;
  148. } sort_list[MAXRESOLVSORT];
  149. #ifdef __OLD_RES_STATE
  150. char lookups[4];
  151. #else
  152. res_send_qhook qhook; /* query hook */
  153. res_send_rhook rhook; /* response hook */
  154. int res_h_errno; /* last one set for this context */
  155. int _vcsock; /* PRIVATE: for res_send VC i/o */
  156. u_int _flags; /* PRIVATE: see below */
  157. u_int _pad; /* make _u 64 bit aligned */
  158. union {
  159. /* On an 32-bit arch this means 512b total. */
  160. char pad[72 - 4*sizeof (int) - 2*sizeof (void *)];
  161. struct {
  162. uint16_t nscount;
  163. uint16_t nstimes[MAXNS]; /* ms. */
  164. int nssocks[MAXNS];
  165. struct __res_state_ext *ext; /* extention for IPv6 */
  166. } _ext;
  167. } _u;
  168. #endif
  169. struct res_static rstatic[1];
  170. };
  171. typedef struct __res_state *res_state;
  172. union res_sockaddr_union {
  173. struct sockaddr_in sin;
  174. #ifdef IN6ADDR_ANY_INIT
  175. struct sockaddr_in6 sin6;
  176. #endif
  177. #ifdef ISC_ALIGN64
  178. int64_t __align64; /* 64bit alignment */
  179. #else
  180. int32_t __align32; /* 32bit alignment */
  181. #endif
  182. char __space[128]; /* max size */
  183. };
  184. /*
  185. * Resolver flags (used to be discrete per-module statics ints).
  186. */
  187. #define RES_F_VC 0x00000001 /* socket is TCP */
  188. #define RES_F_CONN 0x00000002 /* socket is connected */
  189. #define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors */
  190. #define RES_F__UNUSED 0x00000008 /* (unused) */
  191. #define RES_F_LASTMASK 0x000000F0 /* ordinal server of last res_nsend */
  192. #define RES_F_LASTSHIFT 4 /* bit position of LASTMASK "flag" */
  193. #define RES_GETLAST(res) (((res)._flags & RES_F_LASTMASK) >> RES_F_LASTSHIFT)
  194. /* res_findzonecut2() options */
  195. #define RES_EXHAUSTIVE 0x00000001 /* always do all queries */
  196. #define RES_IPV4ONLY 0x00000002 /* IPv4 only */
  197. #define RES_IPV6ONLY 0x00000004 /* IPv6 only */
  198. /*
  199. * Resolver options (keep these in synch with res_debug.c, please)
  200. */
  201. #define RES_INIT 0x00000001 /* address initialized */
  202. #define RES_DEBUG 0x00000002 /* print debug messages */
  203. #define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/
  204. #define RES_USEVC 0x00000008 /* use virtual circuit */
  205. #define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */
  206. #define RES_IGNTC 0x00000020 /* ignore trucation errors */
  207. #define RES_RECURSE 0x00000040 /* recursion desired */
  208. #define RES_DEFNAMES 0x00000080 /* use default domain name */
  209. #define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */
  210. #define RES_DNSRCH 0x00000200 /* search up local domain tree */
  211. #define RES_INSECURE1 0x00000400 /* type 1 security disabled */
  212. #define RES_INSECURE2 0x00000800 /* type 2 security disabled */
  213. #define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */
  214. #define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */
  215. #define RES_ROTATE 0x00004000 /* rotate ns list after each query */
  216. #define RES_NOCHECKNAME 0x00008000 /* do not check names for sanity. */
  217. #define RES_KEEPTSIG 0x00010000 /* do not strip TSIG records */
  218. #define RES_BLAST 0x00020000 /* blast all recursive servers */
  219. #define RES_NOTLDQUERY 0x00100000 /* don't unqualified name as a tld */
  220. #define RES_USE_DNSSEC 0x00200000 /* use DNSSEC using OK bit in OPT */
  221. /* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */
  222. /* KAME extensions: use higher bit to avoid conflict with ISC use */
  223. #define RES_USE_DNAME 0x10000000 /* use DNAME */
  224. #define RES_USE_EDNS0 0x40000000 /* use EDNS0 if configured */
  225. #define RES_NO_NIBBLE2 0x80000000 /* disable alternate nibble lookup */
  226. #define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | \
  227. RES_DNSRCH | RES_NO_NIBBLE2)
  228. /*
  229. * Resolver "pfcode" values. Used by dig.
  230. */
  231. #define RES_PRF_STATS 0x00000001
  232. #define RES_PRF_UPDATE 0x00000002
  233. #define RES_PRF_CLASS 0x00000004
  234. #define RES_PRF_CMD 0x00000008
  235. #define RES_PRF_QUES 0x00000010
  236. #define RES_PRF_ANS 0x00000020
  237. #define RES_PRF_AUTH 0x00000040
  238. #define RES_PRF_ADD 0x00000080
  239. #define RES_PRF_HEAD1 0x00000100
  240. #define RES_PRF_HEAD2 0x00000200
  241. #define RES_PRF_TTLID 0x00000400
  242. #define RES_PRF_HEADX 0x00000800
  243. #define RES_PRF_QUERY 0x00001000
  244. #define RES_PRF_REPLY 0x00002000
  245. #define RES_PRF_INIT 0x00004000
  246. #define RES_PRF_TRUNC 0x00008000
  247. /* 0x00010000 */
  248. /* Things involving an internal (static) resolver context. */
  249. __BEGIN_DECLS
  250. extern struct __res_state *__res_get_state(void);
  251. extern void __res_put_state(struct __res_state *);
  252. #ifndef ANDROID_CHANGES
  253. /*
  254. * Source and Binary compatibility; _res will not work properly
  255. * with multi-threaded programs.
  256. */
  257. extern struct __res_state *__res_state(void);
  258. #define _res (*__res_state())
  259. #endif
  260. __END_DECLS
  261. #ifndef __BIND_NOSTATIC
  262. #define fp_nquery __fp_nquery
  263. #define fp_query __fp_query
  264. #define hostalias __hostalias
  265. #define p_query __p_query
  266. #define res_close __res_close
  267. #define res_opt __res_opt
  268. #define res_isourserver __res_isourserver
  269. #define res_querydomain __res_querydomain
  270. #define res_send __res_send
  271. #define res_sendsigned __res_sendsigned
  272. #ifdef BIND_RES_POSIX3
  273. #define dn_expand __dn_expand
  274. #define res_init __res_init
  275. #define res_query __res_query
  276. #define res_search __res_search
  277. #define res_mkquery __res_mkquery
  278. #endif
  279. __BEGIN_DECLS
  280. void fp_nquery(const u_char *, int, FILE *);
  281. void fp_query(const u_char *, FILE *);
  282. const char * hostalias(const char *);
  283. void p_query(const u_char *);
  284. void res_close(void);
  285. int res_init(void);
  286. int res_opt(int, u_char *, int, int);
  287. int res_isourserver(const struct sockaddr_in *);
  288. int res_mkquery(int, const char *, int, int, const u_char *, int, const u_char *, u_char *, int);
  289. int res_query(const char *, int, int, u_char *, int);
  290. int res_querydomain(const char *, const char *, int, int, u_char *, int);
  291. int res_search(const char *, int, int, u_char *, int);
  292. int res_send(const u_char *, int, u_char *, int);
  293. int res_sendsigned(const u_char *, int, ns_tsig_key *, u_char *, int);
  294. __END_DECLS
  295. #endif
  296. #if !defined(SHARED_LIBBIND) || defined(LIB)
  297. /*
  298. * If libbind is a shared object (well, DLL anyway)
  299. * these externs break the linker when resolv.h is
  300. * included by a lib client (like named)
  301. * Make them go away if a client is including this
  302. *
  303. */
  304. extern const struct res_sym __p_key_syms[];
  305. extern const struct res_sym __p_cert_syms[];
  306. extern const struct res_sym __p_class_syms[];
  307. extern const struct res_sym __p_type_syms[];
  308. extern const struct res_sym __p_rcode_syms[];
  309. #endif /* SHARED_LIBBIND */
  310. #ifndef ADNROID_CHANGES
  311. #define b64_ntop __b64_ntop
  312. #define b64_pton __b64_pton
  313. #endif
  314. #define dn_comp __dn_comp
  315. #define dn_count_labels __dn_count_labels
  316. #define dn_skipname __dn_skipname
  317. #define fp_resstat __fp_resstat
  318. #define loc_aton __loc_aton
  319. #define loc_ntoa __loc_ntoa
  320. #define p_cdname __p_cdname
  321. #define p_cdnname __p_cdnname
  322. #define p_class __p_class
  323. #define p_fqname __p_fqname
  324. #define p_fqnname __p_fqnname
  325. #define p_option __p_option
  326. #define p_secstodate __p_secstodate
  327. #define p_section __p_section
  328. #define p_time __p_time
  329. #define p_type __p_type
  330. #define p_rcode __p_rcode
  331. #define p_sockun __p_sockun
  332. #define putlong __putlong
  333. #define putshort __putshort
  334. #define res_dnok __res_dnok
  335. #define res_findzonecut __res_findzonecut
  336. #define res_findzonecut2 __res_findzonecut2
  337. #define res_hnok __res_hnok
  338. #define res_hostalias __res_hostalias
  339. #define res_mailok __res_mailok
  340. #define res_nameinquery __res_nameinquery
  341. #define res_nclose __res_nclose
  342. #define res_ninit __res_ninit
  343. #define res_nmkquery __res_nmkquery
  344. #define res_pquery __res_pquery
  345. #define res_nquery __res_nquery
  346. #define res_nquerydomain __res_nquerydomain
  347. #define res_nsearch __res_nsearch
  348. #define res_nsend __res_nsend
  349. #define res_nsendsigned __res_nsendsigned
  350. #define res_nisourserver __res_nisourserver
  351. #define res_ownok __res_ownok
  352. #define res_queriesmatch __res_queriesmatch
  353. #define res_randomid __res_randomid
  354. #define sym_ntop __sym_ntop
  355. #define sym_ntos __sym_ntos
  356. #define sym_ston __sym_ston
  357. #define res_nopt __res_nopt
  358. #define res_ndestroy __res_ndestroy
  359. #define res_nametoclass __res_nametoclass
  360. #define res_nametotype __res_nametotype
  361. #define res_setservers __res_setservers
  362. #define res_getservers __res_getservers
  363. #define res_buildprotolist __res_buildprotolist
  364. #define res_destroyprotolist __res_destroyprotolist
  365. #define res_destroyservicelist __res_destroyservicelist
  366. #define res_get_nibblesuffix __res_get_nibblesuffix
  367. #define res_get_nibblesuffix2 __res_get_nibblesuffix2
  368. #define res_ourserver_p __res_ourserver_p
  369. #define res_protocolname __res_protocolname
  370. #define res_protocolnumber __res_protocolnumber
  371. #define res_send_setqhook __res_send_setqhook
  372. #define res_send_setrhook __res_send_setrhook
  373. #define res_servicename __res_servicename
  374. #define res_servicenumber __res_servicenumber
  375. __BEGIN_DECLS
  376. int res_hnok(const char *);
  377. int res_ownok(const char *);
  378. int res_mailok(const char *);
  379. int res_dnok(const char *);
  380. int sym_ston(const struct res_sym *, const char *, int *);
  381. const char * sym_ntos(const struct res_sym *, int, int *);
  382. const char * sym_ntop(const struct res_sym *, int, int *);
  383. #ifndef ANDROID_CHANGES
  384. int b64_ntop(u_char const *, size_t, char *, size_t);
  385. int b64_pton(char const *, u_char *, size_t);
  386. #endif
  387. int loc_aton(const char *, u_char *);
  388. const char * loc_ntoa(const u_char *, char *);
  389. int dn_skipname(const u_char *, const u_char *);
  390. void putlong(uint32_t, u_char *);
  391. void putshort(uint16_t, u_char *);
  392. #ifndef __ultrix__
  393. uint16_t _getshort(const u_char *);
  394. uint32_t _getlong(const u_char *);
  395. #endif
  396. const char * p_class(int);
  397. const char * p_time(uint32_t);
  398. const char * p_type(int);
  399. const char * p_rcode(int);
  400. const char * p_sockun(union res_sockaddr_union, char *, size_t);
  401. const u_char * p_cdnname(const u_char *, const u_char *, int, FILE *);
  402. const u_char * p_cdname(const u_char *, const u_char *, FILE *);
  403. const u_char * p_fqnname(const u_char *, const u_char *,
  404. int, char *, int);
  405. const u_char * p_fqname(const u_char *, const u_char *, FILE *);
  406. const char * p_option(u_long);
  407. char * p_secstodate(u_long);
  408. int dn_count_labels(const char *);
  409. int dn_comp(const char *, u_char *, int, u_char **, u_char **);
  410. int dn_expand(const u_char *, const u_char *, const u_char *,
  411. char *, int);
  412. u_int res_randomid(void);
  413. int res_nameinquery(const char *, int, int, const u_char *,
  414. const u_char *);
  415. int res_queriesmatch(const u_char *, const u_char *,
  416. const u_char *, const u_char *);
  417. const char * p_section(int, int);
  418. /* Things involving a resolver context. */
  419. int res_ninit(res_state);
  420. int res_nisourserver(const res_state, const struct sockaddr_in *);
  421. void fp_resstat(const res_state, FILE *);
  422. void res_pquery(const res_state, const u_char *, int, FILE *);
  423. const char * res_hostalias(const res_state, const char *, char *, size_t);
  424. int res_nquery(res_state, const char *, int, int, u_char *, int);
  425. int res_nsearch(res_state, const char *, int, int, u_char *, int);
  426. int res_nquerydomain(res_state, const char *, const char *,
  427. int, int, u_char *, int);
  428. int res_nmkquery(res_state, int, const char *, int, int,
  429. const u_char *, int, const u_char *,
  430. u_char *, int);
  431. int res_nsend(res_state, const u_char *, int, u_char *, int);
  432. int res_nsendsigned(res_state, const u_char *, int,
  433. ns_tsig_key *, u_char *, int);
  434. int res_findzonecut(res_state, const char *, ns_class, int,
  435. char *, size_t, struct in_addr *, int);
  436. int res_findzonecut2(res_state, const char *, ns_class, int,
  437. char *, size_t,
  438. union res_sockaddr_union *, int);
  439. void res_nclose(res_state);
  440. int res_nopt(res_state, int, u_char *, int, int);
  441. void res_send_setqhook(res_send_qhook);
  442. void res_send_setrhook(res_send_rhook);
  443. int __res_vinit(res_state, int);
  444. void res_destroyservicelist(void);
  445. const char * res_servicename(uint16_t, const char *);
  446. const char * res_protocolname(int);
  447. void res_destroyprotolist(void);
  448. void res_buildprotolist(void);
  449. const char * res_get_nibblesuffix(res_state);
  450. const char * res_get_nibblesuffix2(res_state);
  451. void res_ndestroy(res_state);
  452. uint16_t res_nametoclass(const char *, int *);
  453. uint16_t res_nametotype(const char *, int *);
  454. void res_setservers(res_state,
  455. const union res_sockaddr_union *, int);
  456. int res_getservers(res_state,
  457. union res_sockaddr_union *, int);
  458. int res_get_dns_changed();
  459. u_int res_randomid(void);
  460. __END_DECLS
  461. #endif /* !_RESOLV_PRIVATE_H_ */