Mistake on this page?
Report an issue in GitHub or email us
dns.h
Go to the documentation of this file.
1 /**
2  * @file
3  * DNS API
4  */
5 
6 /**
7  * lwip DNS resolver header file.
8 
9  * Author: Jim Pettinato
10  * April 2007
11 
12  * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions
16  * are met:
17  * 1. Redistributions of source code must retain the above copyright
18  * notice, this list of conditions and the following disclaimer.
19  * 2. Redistributions in binary form must reproduce the above copyright
20  * notice, this list of conditions and the following disclaimer in the
21  * documentation and/or other materials provided with the distribution.
22  * 3. The name of the author may not be used to endorse or promote
23  * products derived from this software without specific prior
24  * written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
27  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
30  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
32  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
34  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 #ifndef LWIP_HDR_DNS_H
40 #define LWIP_HDR_DNS_H
41 
42 #include "lwip/opt.h"
43 
44 #if LWIP_DNS
45 
46 #include "lwip/ip_addr.h"
47 #include "lwip/err.h"
48 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
53 /** DNS timer period */
54 #define DNS_TMR_INTERVAL 1000
55 
56 /* DNS resolve types: */
57 #define LWIP_DNS_ADDRTYPE_IPV4 0
58 #define LWIP_DNS_ADDRTYPE_IPV6 1
59 #define LWIP_DNS_ADDRTYPE_IPV4_IPV6 2 /* try to resolve IPv4 first, try IPv6 if IPv4 fails only */
60 #define LWIP_DNS_ADDRTYPE_IPV6_IPV4 3 /* try to resolve IPv6 first, try IPv4 if IPv6 fails only */
61 #if LWIP_IPV4 && LWIP_IPV6
62 #ifndef LWIP_DNS_ADDRTYPE_DEFAULT
63 #define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV4_IPV6
64 #endif
65 #elif LWIP_IPV4
66 #define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV4
67 #else
68 #define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV6
69 #endif
70 
71 #if DNS_LOCAL_HOSTLIST
72 /** struct used for local host-list */
73 struct local_hostlist_entry {
74  /** static hostname */
75  const char *name;
76  /** static host address in network byteorder */
77  ip_addr_t addr;
78  struct local_hostlist_entry *next;
79 };
80 #define DNS_LOCAL_HOSTLIST_ELEM(name, addr_init) {name, addr_init, NULL}
81 #if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
82 #ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN
83 #define DNS_LOCAL_HOSTLIST_MAX_NAMELEN DNS_MAX_NAME_LENGTH
84 #endif
85 #define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1))
86 #endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
87 #endif /* DNS_LOCAL_HOSTLIST */
88 
89 #if LWIP_IPV4
90 extern const ip_addr_t dns_mquery_v4group;
91 #endif /* LWIP_IPV4 */
92 #if LWIP_IPV6
93 extern const ip_addr_t dns_mquery_v6group;
94 #endif /* LWIP_IPV6 */
95 
96 /** Callback which is invoked when a hostname is found.
97  * A function of this type must be implemented by the application using the DNS resolver.
98  * @param name pointer to the name that was looked up.
99  * @param ipaddr pointer to an ip_addr_t containing the IP address of the hostname,
100  * or NULL if the name could not be found (or on any other error).
101  * @param callback_arg a user-specified callback argument passed to dns_gethostbyname
102 */
103 typedef void (*dns_found_callback)(const char *name, const ip_addr_t *ipaddr, void *callback_arg);
104 
105 void dns_init(void);
106 void dns_tmr(void);
107 void dns_setserver(u8_t numdns, const ip_addr_t *dnsserver, struct netif *netif);
108 const ip_addr_t* dns_getserver(u8_t numdns, const char *interface_name);
109 void dns_add_interface_server(u8_t numdns, const char *interface_name, const ip_addr_t *dnsserver);
110 void dns_remove_interface_servers(const char *interface_name);
111 const ip_addr_t* dns_get_interface_server(u8_t numdns, const char *interface_name);
112 err_t dns_gethostbyname(const char *hostname, ip_addr_t *addr,
113  dns_found_callback found, void *callback_arg);
114 err_t dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr,
115  dns_found_callback found, void *callback_arg,
116  u8_t dns_addrtype);
117 
118 
119 #if DNS_LOCAL_HOSTLIST
120 size_t dns_local_iterate(dns_found_callback iterator_fn, void *iterator_arg);
121 err_t dns_local_lookup(const char *hostname, ip_addr_t *addr, u8_t dns_addrtype);
122 #if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
123 int dns_local_removehost(const char *hostname, const ip_addr_t *addr);
124 err_t dns_local_addhost(const char *hostname, const ip_addr_t *addr);
125 #endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
126 #endif /* DNS_LOCAL_HOSTLIST */
127 
128 #ifdef __cplusplus
129 }
130 #endif
131 
132 #endif /* LWIP_DNS */
133 
134 #endif /* LWIP_HDR_DNS_H */
lwIP Options Configuration
lwIP Error codes
Generic data structure used for all lwIP network interfaces.
IP address structure for passing IP addresses by value.
Definition: nsapi_types.h:237
IP address API (common IPv4 and IPv6)
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.