mirror of
https://github.com/espressif/esp-lwip.git
synced 2026-08-15 14:38:00 +00:00
dns: Support for fallback DNS server
2.1.3-esp: 771421c8 dns: Support for fallback DNS server
This commit is contained in:
@@ -325,5 +325,8 @@ void lwip_example_app_platform_assert(const char *msg, int line, const char *fil
|
||||
|
||||
/* ESP options */
|
||||
#define ESP_LWIP LWIP_NETCONN_FULLDUPLEX
|
||||
#define ESP_LWIP_IGMP_TIMERS_ONDEMAND ESP_LWIP
|
||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND ESP_LWIP
|
||||
#define ESP_DNS ESP_LWIP
|
||||
|
||||
#endif /* LWIP_LWIPOPTS_H */
|
||||
|
||||
+44
-1
@@ -96,6 +96,9 @@
|
||||
#include "lwip/prot/dns.h"
|
||||
|
||||
#include <string.h>
|
||||
#if ESP_DNS
|
||||
#include <stdbool.h>
|
||||
#endif
|
||||
|
||||
/** Random generator function to create random TXIDs and source ports for queries */
|
||||
#ifndef DNS_RAND_TXID
|
||||
@@ -314,12 +317,25 @@ const ip_addr_t dns_mquery_v6group = DNS_MQUERY_IPV6_GROUP_INIT;
|
||||
void
|
||||
dns_init(void)
|
||||
{
|
||||
#if ESP_DNS
|
||||
#ifdef FALLBACK_DNS_SERVER_ADDRESS
|
||||
/* initialize fallback dns DNS server address */
|
||||
ip_addr_t dnsserver;
|
||||
FALLBACK_DNS_SERVER_ADDRESS(&dnsserver);
|
||||
dnsserver.type = IPADDR_TYPE_V4;
|
||||
dns_setserver(DNS_FALLBACK_SERVER_INDEX, &dnsserver);
|
||||
#endif /* FALLBACK_DNS_SERVER_ADDRESS */
|
||||
|
||||
#else
|
||||
|
||||
|
||||
#ifdef DNS_SERVER_ADDRESS
|
||||
/* initialize default DNS server address */
|
||||
ip_addr_t dnsserver;
|
||||
DNS_SERVER_ADDRESS(&dnsserver);
|
||||
dns_setserver(0, &dnsserver);
|
||||
#endif /* DNS_SERVER_ADDRESS */
|
||||
#endif
|
||||
|
||||
LWIP_ASSERT("sanity check SIZEOF_DNS_QUERY",
|
||||
sizeof(struct dns_query) == SIZEOF_DNS_QUERY);
|
||||
@@ -1078,7 +1094,11 @@ dns_check_entry(u8_t i)
|
||||
entry->server_idx = 0;
|
||||
entry->tmr = 1;
|
||||
entry->retries = 0;
|
||||
|
||||
#if ESP_DNS
|
||||
while((entry->server_idx < DNS_MAX_SERVERS) && ip_addr_isany_val(dns_servers[entry->server_idx])) {
|
||||
entry->server_idx++;
|
||||
}
|
||||
#endif
|
||||
/* send DNS packet for this entry */
|
||||
err = dns_send(i);
|
||||
if (err != ERR_OK) {
|
||||
@@ -1089,6 +1109,12 @@ dns_check_entry(u8_t i)
|
||||
case DNS_STATE_ASKING:
|
||||
if (--entry->tmr == 0) {
|
||||
if (++entry->retries == DNS_MAX_RETRIES) {
|
||||
#if ESP_DNS
|
||||
/* skip DNS servers with zero address */
|
||||
while ((entry->server_idx + 1 < DNS_MAX_SERVERS) && ip_addr_isany_val(dns_servers[entry->server_idx + 1])) {
|
||||
entry->server_idx++;
|
||||
}
|
||||
#endif
|
||||
if (dns_backupserver_available(entry)
|
||||
#if LWIP_DNS_SUPPORT_MDNS_QUERIES
|
||||
&& !entry->is_mdns
|
||||
@@ -1552,6 +1578,19 @@ dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback foun
|
||||
return dns_gethostbyname_addrtype(hostname, addr, found, callback_arg, LWIP_DNS_ADDRTYPE_DEFAULT);
|
||||
}
|
||||
|
||||
#if ESP_DNS
|
||||
static bool dns_server_is_set (void)
|
||||
{
|
||||
int i = 0;
|
||||
for (i = 0;i < DNS_MAX_SERVERS; i++) {
|
||||
if (!ip_addr_isany_val(dns_servers[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @ingroup dns
|
||||
* Like dns_gethostbyname, but returned address type can be controlled:
|
||||
@@ -1644,7 +1683,11 @@ dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr, dns_found_call
|
||||
#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
|
||||
{
|
||||
/* prevent calling found callback if no server is set, return error instead */
|
||||
#if ESP_DNS
|
||||
if (dns_server_is_set() == false) {
|
||||
#else
|
||||
if (ip_addr_isany_val(dns_servers[0])) {
|
||||
#endif
|
||||
return ERR_VAL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -744,6 +744,11 @@ dhcp_handle_ack(struct netif *netif, struct dhcp_msg *msg_in)
|
||||
/* DNS servers */
|
||||
for (n = 0; (n < LWIP_DHCP_PROVIDE_DNS_SERVERS) && dhcp_option_given(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n); n++) {
|
||||
ip_addr_t dns_addr;
|
||||
#if ESP_DNS
|
||||
if (n == DNS_FALLBACK_SERVER_INDEX) {
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
ip_addr_set_ip4_u32_val(dns_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n)));
|
||||
dns_setserver(n, &dns_addr);
|
||||
}
|
||||
|
||||
@@ -111,7 +111,9 @@ err_t dns_gethostbyname(const char *hostname, ip_addr_t *addr,
|
||||
err_t dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr,
|
||||
dns_found_callback found, void *callback_arg,
|
||||
u8_t dns_addrtype);
|
||||
|
||||
#if ESP_DNS
|
||||
void dns_clear_servers(bool keep_fallback);
|
||||
#endif
|
||||
|
||||
#if DNS_LOCAL_HOSTLIST
|
||||
size_t dns_local_iterate(dns_found_callback iterator_fn, void *iterator_arg);
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
|
||||
/* Enable Espressif specific options */
|
||||
#ifdef ESP_LWIP
|
||||
#define ESP_DNS 1
|
||||
#define LWIP_DHCP_ENABLE_VENDOR_SPEC_IDS 1
|
||||
#define LWIP_DHCP_ENABLE_CLIENT_ID 1
|
||||
#define LWIP_DHCP_ENABLE_MTU_UPDATE 1
|
||||
@@ -161,9 +162,11 @@ u32_t esp_random(void);
|
||||
#endif /* ESP_TEST_DEBUG */
|
||||
#define ESP_LWIP_IGMP_TIMERS_ONDEMAND 1
|
||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
|
||||
#define DNS_FALLBACK_SERVER_INDEX (DNS_MAX_SERVERS - 1)
|
||||
|
||||
#else
|
||||
#define ESP_LWIP 0
|
||||
#define ESP_DNS 0
|
||||
#define ESP_LWIP_IGMP_TIMERS_ONDEMAND 0
|
||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user