source: rtems-libbsd/freebsd-userspace/include/resolv.h @ 1b13f69

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since 1b13f69 was 1b13f69, checked in by Joel Sherrill <joel.sherrill@…>, on 07/11/12 at 18:23:45

FreeBSD user space support - First additions

This requires a full checkout of the FreeBSD 8.2 source code.
The checkout we have been using is missing at least the libc,
include, and sys directories. The script to copy files in is
crude.

This eventually needs to separate the manually written .h files
out and add the RTEMS specific network initialization support
with functionality to program the IP addresses and gateways as
the old stack did.

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