dns: Support for fallback DNS server

2.1.3-esp: 771421c8 dns: Support for fallback DNS server
This commit is contained in:
xueyunfei
2024-09-10 16:30:21 +02:00
committed by David Cermak
parent 112f1255c2
commit bb71a46bfb
5 changed files with 58 additions and 2 deletions
+3
View File
@@ -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
View File
@@ -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;
}
}
+5
View File
@@ -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);
}
+3 -1
View File
@@ -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);
+3
View File
@@ -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