xref: /minix3/minix/lib/liblwip/dist/src/include/lwip/netdb.h (revision 5d5fbe79c1b60734f34c69330aec5496644e8651)
1*5d5fbe79SDavid van Moolenbroek /**
2*5d5fbe79SDavid van Moolenbroek  * @file
3*5d5fbe79SDavid van Moolenbroek  * NETDB API (sockets)
4*5d5fbe79SDavid van Moolenbroek  */
5*5d5fbe79SDavid van Moolenbroek 
6*5d5fbe79SDavid van Moolenbroek /*
7*5d5fbe79SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without modification,
8*5d5fbe79SDavid van Moolenbroek  * are permitted provided that the following conditions are met:
9*5d5fbe79SDavid van Moolenbroek  *
10*5d5fbe79SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright notice,
11*5d5fbe79SDavid van Moolenbroek  *    this list of conditions and the following disclaimer.
12*5d5fbe79SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright notice,
13*5d5fbe79SDavid van Moolenbroek  *    this list of conditions and the following disclaimer in the documentation
14*5d5fbe79SDavid van Moolenbroek  *    and/or other materials provided with the distribution.
15*5d5fbe79SDavid van Moolenbroek  * 3. The name of the author may not be used to endorse or promote products
16*5d5fbe79SDavid van Moolenbroek  *    derived from this software without specific prior written permission.
17*5d5fbe79SDavid van Moolenbroek  *
18*5d5fbe79SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
19*5d5fbe79SDavid van Moolenbroek  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
20*5d5fbe79SDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
21*5d5fbe79SDavid van Moolenbroek  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22*5d5fbe79SDavid van Moolenbroek  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
23*5d5fbe79SDavid van Moolenbroek  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*5d5fbe79SDavid van Moolenbroek  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25*5d5fbe79SDavid van Moolenbroek  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
26*5d5fbe79SDavid van Moolenbroek  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
27*5d5fbe79SDavid van Moolenbroek  * OF SUCH DAMAGE.
28*5d5fbe79SDavid van Moolenbroek  *
29*5d5fbe79SDavid van Moolenbroek  * This file is part of the lwIP TCP/IP stack.
30*5d5fbe79SDavid van Moolenbroek  *
31*5d5fbe79SDavid van Moolenbroek  * Author: Simon Goldschmidt
32*5d5fbe79SDavid van Moolenbroek  *
33*5d5fbe79SDavid van Moolenbroek  */
34*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_HDR_NETDB_H
35*5d5fbe79SDavid van Moolenbroek #define LWIP_HDR_NETDB_H
36*5d5fbe79SDavid van Moolenbroek 
37*5d5fbe79SDavid van Moolenbroek #include "lwip/opt.h"
38*5d5fbe79SDavid van Moolenbroek 
39*5d5fbe79SDavid van Moolenbroek #if LWIP_DNS && LWIP_SOCKET
40*5d5fbe79SDavid van Moolenbroek 
41*5d5fbe79SDavid van Moolenbroek #include "lwip/arch.h"
42*5d5fbe79SDavid van Moolenbroek #include "lwip/inet.h"
43*5d5fbe79SDavid van Moolenbroek #include "lwip/sockets.h"
44*5d5fbe79SDavid van Moolenbroek 
45*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus
46*5d5fbe79SDavid van Moolenbroek extern "C" {
47*5d5fbe79SDavid van Moolenbroek #endif
48*5d5fbe79SDavid van Moolenbroek 
49*5d5fbe79SDavid van Moolenbroek /* some rarely used options */
50*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_DNS_API_DECLARE_H_ERRNO
51*5d5fbe79SDavid van Moolenbroek #define LWIP_DNS_API_DECLARE_H_ERRNO  1
52*5d5fbe79SDavid van Moolenbroek #endif
53*5d5fbe79SDavid van Moolenbroek 
54*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_DNS_API_DEFINE_ERRORS
55*5d5fbe79SDavid van Moolenbroek #define LWIP_DNS_API_DEFINE_ERRORS    1
56*5d5fbe79SDavid van Moolenbroek #endif
57*5d5fbe79SDavid van Moolenbroek 
58*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_DNS_API_DEFINE_FLAGS
59*5d5fbe79SDavid van Moolenbroek #define LWIP_DNS_API_DEFINE_FLAGS     1
60*5d5fbe79SDavid van Moolenbroek #endif
61*5d5fbe79SDavid van Moolenbroek 
62*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_DNS_API_DECLARE_STRUCTS
63*5d5fbe79SDavid van Moolenbroek #define LWIP_DNS_API_DECLARE_STRUCTS  1
64*5d5fbe79SDavid van Moolenbroek #endif
65*5d5fbe79SDavid van Moolenbroek 
66*5d5fbe79SDavid van Moolenbroek #if LWIP_DNS_API_DEFINE_ERRORS
67*5d5fbe79SDavid van Moolenbroek /** Errors used by the DNS API functions, h_errno can be one of them */
68*5d5fbe79SDavid van Moolenbroek #define EAI_NONAME      200
69*5d5fbe79SDavid van Moolenbroek #define EAI_SERVICE     201
70*5d5fbe79SDavid van Moolenbroek #define EAI_FAIL        202
71*5d5fbe79SDavid van Moolenbroek #define EAI_MEMORY      203
72*5d5fbe79SDavid van Moolenbroek #define EAI_FAMILY      204
73*5d5fbe79SDavid van Moolenbroek 
74*5d5fbe79SDavid van Moolenbroek #define HOST_NOT_FOUND  210
75*5d5fbe79SDavid van Moolenbroek #define NO_DATA         211
76*5d5fbe79SDavid van Moolenbroek #define NO_RECOVERY     212
77*5d5fbe79SDavid van Moolenbroek #define TRY_AGAIN       213
78*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_DNS_API_DEFINE_ERRORS */
79*5d5fbe79SDavid van Moolenbroek 
80*5d5fbe79SDavid van Moolenbroek #if LWIP_DNS_API_DEFINE_FLAGS
81*5d5fbe79SDavid van Moolenbroek /* input flags for struct addrinfo */
82*5d5fbe79SDavid van Moolenbroek #define AI_PASSIVE      0x01
83*5d5fbe79SDavid van Moolenbroek #define AI_CANONNAME    0x02
84*5d5fbe79SDavid van Moolenbroek #define AI_NUMERICHOST  0x04
85*5d5fbe79SDavid van Moolenbroek #define AI_NUMERICSERV  0x08
86*5d5fbe79SDavid van Moolenbroek #define AI_V4MAPPED     0x10
87*5d5fbe79SDavid van Moolenbroek #define AI_ALL          0x20
88*5d5fbe79SDavid van Moolenbroek #define AI_ADDRCONFIG   0x40
89*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_DNS_API_DEFINE_FLAGS */
90*5d5fbe79SDavid van Moolenbroek 
91*5d5fbe79SDavid van Moolenbroek #if LWIP_DNS_API_DECLARE_STRUCTS
92*5d5fbe79SDavid van Moolenbroek struct hostent {
93*5d5fbe79SDavid van Moolenbroek     char  *h_name;      /* Official name of the host. */
94*5d5fbe79SDavid van Moolenbroek     char **h_aliases;   /* A pointer to an array of pointers to alternative host names,
95*5d5fbe79SDavid van Moolenbroek                            terminated by a null pointer. */
96*5d5fbe79SDavid van Moolenbroek     int    h_addrtype;  /* Address type. */
97*5d5fbe79SDavid van Moolenbroek     int    h_length;    /* The length, in bytes, of the address. */
98*5d5fbe79SDavid van Moolenbroek     char **h_addr_list; /* A pointer to an array of pointers to network addresses (in
99*5d5fbe79SDavid van Moolenbroek                            network byte order) for the host, terminated by a null pointer. */
100*5d5fbe79SDavid van Moolenbroek #define h_addr h_addr_list[0] /* for backward compatibility */
101*5d5fbe79SDavid van Moolenbroek };
102*5d5fbe79SDavid van Moolenbroek 
103*5d5fbe79SDavid van Moolenbroek struct addrinfo {
104*5d5fbe79SDavid van Moolenbroek     int               ai_flags;      /* Input flags. */
105*5d5fbe79SDavid van Moolenbroek     int               ai_family;     /* Address family of socket. */
106*5d5fbe79SDavid van Moolenbroek     int               ai_socktype;   /* Socket type. */
107*5d5fbe79SDavid van Moolenbroek     int               ai_protocol;   /* Protocol of socket. */
108*5d5fbe79SDavid van Moolenbroek     socklen_t         ai_addrlen;    /* Length of socket address. */
109*5d5fbe79SDavid van Moolenbroek     struct sockaddr  *ai_addr;       /* Socket address of socket. */
110*5d5fbe79SDavid van Moolenbroek     char             *ai_canonname;  /* Canonical name of service location. */
111*5d5fbe79SDavid van Moolenbroek     struct addrinfo  *ai_next;       /* Pointer to next in list. */
112*5d5fbe79SDavid van Moolenbroek };
113*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_DNS_API_DECLARE_STRUCTS */
114*5d5fbe79SDavid van Moolenbroek 
115*5d5fbe79SDavid van Moolenbroek #define NETDB_ELEM_SIZE           (sizeof(struct addrinfo) + sizeof(struct sockaddr_storage) + DNS_MAX_NAME_LENGTH + 1)
116*5d5fbe79SDavid van Moolenbroek 
117*5d5fbe79SDavid van Moolenbroek #if LWIP_DNS_API_DECLARE_H_ERRNO
118*5d5fbe79SDavid van Moolenbroek /* application accessible error code set by the DNS API functions */
119*5d5fbe79SDavid van Moolenbroek extern int h_errno;
120*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/
121*5d5fbe79SDavid van Moolenbroek 
122*5d5fbe79SDavid van Moolenbroek struct hostent *lwip_gethostbyname(const char *name);
123*5d5fbe79SDavid van Moolenbroek int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf,
124*5d5fbe79SDavid van Moolenbroek                 size_t buflen, struct hostent **result, int *h_errnop);
125*5d5fbe79SDavid van Moolenbroek void lwip_freeaddrinfo(struct addrinfo *ai);
126*5d5fbe79SDavid van Moolenbroek int lwip_getaddrinfo(const char *nodename,
127*5d5fbe79SDavid van Moolenbroek        const char *servname,
128*5d5fbe79SDavid van Moolenbroek        const struct addrinfo *hints,
129*5d5fbe79SDavid van Moolenbroek        struct addrinfo **res);
130*5d5fbe79SDavid van Moolenbroek 
131*5d5fbe79SDavid van Moolenbroek #if LWIP_COMPAT_SOCKETS
132*5d5fbe79SDavid van Moolenbroek /** @ingroup netdbapi */
133*5d5fbe79SDavid van Moolenbroek #define gethostbyname(name) lwip_gethostbyname(name)
134*5d5fbe79SDavid van Moolenbroek /** @ingroup netdbapi */
135*5d5fbe79SDavid van Moolenbroek #define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \
136*5d5fbe79SDavid van Moolenbroek        lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop)
137*5d5fbe79SDavid van Moolenbroek /** @ingroup netdbapi */
138*5d5fbe79SDavid van Moolenbroek #define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo)
139*5d5fbe79SDavid van Moolenbroek /** @ingroup netdbapi */
140*5d5fbe79SDavid van Moolenbroek #define getaddrinfo(nodname, servname, hints, res) \
141*5d5fbe79SDavid van Moolenbroek        lwip_getaddrinfo(nodname, servname, hints, res)
142*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_COMPAT_SOCKETS */
143*5d5fbe79SDavid van Moolenbroek 
144*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus
145*5d5fbe79SDavid van Moolenbroek }
146*5d5fbe79SDavid van Moolenbroek #endif
147*5d5fbe79SDavid van Moolenbroek 
148*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_DNS && LWIP_SOCKET */
149*5d5fbe79SDavid van Moolenbroek 
150*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_HDR_NETDB_H */
151