dns: Add on-demand timer config for DNS timer

2.1.3-esp: 6b0bfc2e lwip:optimization lwip dns timer
This commit is contained in:
xueyunfei
2020-08-11 17:54:36 +08:00
committed by David Cermak
parent 03060d3296
commit 3d8cbaa9ce
5 changed files with 49 additions and 2 deletions
+1
View File
@@ -328,6 +328,7 @@ void lwip_example_app_platform_assert(const char *msg, int line, const char *fil
#define ESP_LWIP_IGMP_TIMERS_ONDEMAND ESP_LWIP
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND ESP_LWIP
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND ESP_LWIP
#define ESP_LWIP_DNS_TIMERS_ONDEMAND ESP_LWIP
#define ESP_DNS ESP_LWIP
#define ESP_LWIP_ARP ESP_LWIP
+41
View File
@@ -94,6 +94,12 @@
#include "lwip/memp.h"
#include "lwip/dns.h"
#include "lwip/prot/dns.h"
#include "lwip/timeouts.h"
#if ESP_LWIP_DNS_TIMERS_ONDEMAND
#include "stdbool.h"
static bool s_is_tmr_start = false;
#endif /* ESP_LWIP_DNS_TIMERS_ONDEMAND */
#include <string.h>
#if ESP_DNS
@@ -412,6 +418,17 @@ dns_getserver(u8_t numdns)
}
}
#if ESP_LWIP_DNS_TIMERS_ONDEMAND
/**
* Wrapper function with matching prototype which calls the actual callback
*/
static void dns_timeout_cb(void *arg)
{
LWIP_UNUSED_ARG(arg);
dns_tmr();
}
#endif /* ESP_LWIP_DNS_TIMERS_ONDEMAND */
/**
* The DNS resolver client timer - handle retries and timeouts and should
* be called every DNS_TMR_INTERVAL milliseconds (every second by default).
@@ -419,8 +436,26 @@ dns_getserver(u8_t numdns)
void
dns_tmr(void)
{
#if ESP_LWIP_DNS_TIMERS_ONDEMAND
bool tmr_restart = false;
u8_t i = 0;
#endif /* ESP_LWIP_DNS_TIMERS_ONDEMAND */
LWIP_DEBUGF(DNS_DEBUG, ("dns_tmr: dns_check_entries\n"));
dns_check_entries();
#if ESP_LWIP_DNS_TIMERS_ONDEMAND
for (i = 0; i < DNS_TABLE_SIZE; ++i) {
if (dns_table[i].state != DNS_STATE_UNUSED) {
tmr_restart = true;
break;
}
}
if (tmr_restart) {
sys_timeout(DNS_TMR_INTERVAL, dns_timeout_cb, NULL);
} else {
sys_untimeout(dns_timeout_cb, NULL);
s_is_tmr_start = false;
}
#endif/* ESP_LWIP_DNS_TIMERS_ONDEMAND */
}
#if DNS_LOCAL_HOSTLIST
@@ -1555,6 +1590,12 @@ dns_enqueue(const char *name, size_t hostnamelen, dns_found_callback found,
/* force to send query without waiting timer */
dns_check_entry(i);
#if ESP_LWIP_DNS_TIMERS_ONDEMAND
if (!s_is_tmr_start) {
sys_timeout(DNS_TMR_INTERVAL, dns_timeout_cb, NULL);
s_is_tmr_start = true;
}
#endif /* ESP_LWIP_DNS_TIMERS_ONDEMAND */
/* dns query is enqueued */
return ERR_INPROGRESS;
+1 -1
View File
@@ -100,7 +100,7 @@ const struct lwip_cyclic_timer lwip_cyclic_timers[] = {
{IGMP_TMR_INTERVAL, HANDLER(igmp_tmr)},
#endif /* LWIP_IGMP */
#endif /* LWIP_IPV4 */
#if LWIP_DNS
#if LWIP_DNS && !ESP_LWIP_DNS_TIMERS_ONDEMAND
{DNS_TMR_INTERVAL, HANDLER(dns_tmr)},
#endif /* LWIP_DNS */
#if LWIP_IPV6
+1 -1
View File
@@ -498,7 +498,7 @@
* The number of sys timeouts used by the core stack (not apps)
* The default number of timeouts is calculated here for all enabled modules.
*/
#define LWIP_NUM_SYS_TIMEOUT_INTERNAL (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND ? LWIP_DHCP : 2*LWIP_DHCP) + LWIP_ACD + (ESP_LWIP_IGMP_TIMERS_ONDEMAND ? 0 : LWIP_IGMP) + LWIP_DNS + PPP_NUM_TIMEOUTS + (LWIP_IPV6 * (1 + LWIP_IPV6_REASS + (ESP_LWIP_MLD6_TIMERS_ONDEMAND ? 0 : LWIP_IPV6_MLD) + LWIP_IPV6_DHCP6)))
#define LWIP_NUM_SYS_TIMEOUT_INTERNAL (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND ? LWIP_DHCP : 2*LWIP_DHCP) + LWIP_ACD + (ESP_LWIP_IGMP_TIMERS_ONDEMAND ? 0 : LWIP_IGMP) + (ESP_LWIP_DNS_TIMERS_ONDEMAND ? 0 : LWIP_DNS) + PPP_NUM_TIMEOUTS + (LWIP_IPV6 * (1 + LWIP_IPV6_REASS + (ESP_LWIP_MLD6_TIMERS_ONDEMAND ? 0 : LWIP_IPV6_MLD) + LWIP_IPV6_DHCP6)))
/**
* MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts.
+5
View File
@@ -164,6 +164,7 @@ u32_t esp_random(void);
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
#define DNS_FALLBACK_SERVER_INDEX (DNS_MAX_SERVERS - 1)
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 1
#else
#define ESP_LWIP 0
@@ -175,6 +176,10 @@ u32_t esp_random(void);
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 0
#endif
#ifndef ESP_LWIP_DNS_TIMERS_ONDEMAND
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 0
#endif
#endif /* ESP_LWIP */
#endif /* LWIP_HDR_LWIPOPTS_H */