mirror of
https://github.com/espressif/esp-lwip.git
synced 2026-06-05 21:04:45 +00:00
lwip timer:optimization dhcp fine timer
This commit is contained in:
@@ -51,7 +51,7 @@ jobs:
|
||||
run: |
|
||||
cp ${CONTRIB}/examples/example_app/lwipcfg.h.example ${CONTRIB}/examples/example_app/lwipcfg.h
|
||||
cd ${CONTRIB}/ports/unix/example_app
|
||||
export CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -DESP_LWIP_IGMP_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_MLD6_TIMERS_ONDEMAND=ESP_LWIP -DESP_DNS=ESP_LWIP -DESP_LWIP_ARP=ESP_LWIP"
|
||||
export CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -DESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_IGMP_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_MLD6_TIMERS_ONDEMAND=ESP_LWIP -DESP_DNS=ESP_LWIP -DESP_LWIP_ARP=ESP_LWIP"
|
||||
export LWIPDIR=../../../../src/
|
||||
make TESTFLAGS="-Wno-documentation" -j 4
|
||||
chmod +x iteropts.sh && ./iteropts.sh
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ validate_opts:
|
||||
- *get_contrib
|
||||
- cp ${CONTRIB}/examples/example_app/lwipcfg.h.example ${CONTRIB}/examples/example_app/lwipcfg.h
|
||||
- cd ${CONTRIB}/ports/unix/example_app
|
||||
- export CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -DESP_LWIP_IGMP_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_MLD6_TIMERS_ONDEMAND=ESP_LWIP -DESP_DNS=ESP_LWIP"
|
||||
- export CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -DESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_IGMP_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_MLD6_TIMERS_ONDEMAND=ESP_LWIP -DESP_DNS=ESP_LWIP"
|
||||
- export LWIPDIR=../../../../src/
|
||||
- chmod +x iteropts.sh && ./iteropts.sh
|
||||
|
||||
|
||||
@@ -79,9 +79,20 @@
|
||||
#include "lwip/etharp.h"
|
||||
#include "lwip/prot/dhcp.h"
|
||||
#include "lwip/prot/iana.h"
|
||||
#include "lwip/timeouts.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
#include <stdbool.h>
|
||||
static bool is_tmr_start = false;
|
||||
#define ESP_LWIP_DHCP_FINE_TIMER_START_ONCE() if (!is_tmr_start) { \
|
||||
sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_fine_timeout_cb, NULL); \
|
||||
is_tmr_start = true; }
|
||||
#else
|
||||
#define ESP_LWIP_DHCP_FINE_TIMER_START_ONCE()
|
||||
#endif /* ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND */
|
||||
|
||||
#ifdef LWIP_HOOK_FILENAME
|
||||
#include LWIP_HOOK_FILENAME
|
||||
#endif
|
||||
@@ -296,6 +307,14 @@ dhcp_dec_pcb_refcount(void)
|
||||
}
|
||||
}
|
||||
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
void dhcp_fine_timeout_cb(void *arg)
|
||||
{
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
dhcp_fine_tmr();
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Back-off the DHCP client (because of a received NAK response).
|
||||
*
|
||||
@@ -357,6 +376,7 @@ dhcp_check(struct netif *netif)
|
||||
msecs = 500;
|
||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs));
|
||||
ESP_LWIP_DHCP_FINE_TIMER_START_ONCE();
|
||||
}
|
||||
#endif /* DHCP_DOES_ARP_CHECK */
|
||||
|
||||
@@ -457,6 +477,7 @@ dhcp_select(struct netif *netif)
|
||||
msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000);
|
||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs));
|
||||
ESP_LWIP_DHCP_FINE_TIMER_START_ONCE();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -502,10 +523,15 @@ dhcp_coarse_tmr(void)
|
||||
* A DHCP server is expected to respond within a short period of time.
|
||||
* This timer checks whether an outstanding DHCP request is timed out.
|
||||
*/
|
||||
|
||||
void
|
||||
dhcp_fine_tmr(void)
|
||||
{
|
||||
struct netif *netif;
|
||||
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
bool tmr_restart = false;
|
||||
#endif /* ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND */
|
||||
/* loop through netif's */
|
||||
NETIF_FOREACH(netif) {
|
||||
struct dhcp *dhcp = netif_dhcp_data(netif);
|
||||
@@ -514,13 +540,27 @@ dhcp_fine_tmr(void)
|
||||
/* timer is active (non zero), and is about to trigger now */
|
||||
if (dhcp->request_timeout > 1) {
|
||||
dhcp->request_timeout--;
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
tmr_restart = true;
|
||||
#endif
|
||||
} else if (dhcp->request_timeout == 1) {
|
||||
dhcp->request_timeout--;
|
||||
/* { dhcp->request_timeout == 0 } */
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n"));
|
||||
/* this client's request timeout triggered */
|
||||
dhcp_timeout(netif);
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
tmr_restart = true;
|
||||
#endif
|
||||
}
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
if (tmr_restart) {
|
||||
sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_fine_timeout_cb, NULL);
|
||||
} else {
|
||||
sys_untimeout(dhcp_fine_timeout_cb, NULL);
|
||||
is_tmr_start = false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1023,6 +1063,7 @@ dhcp_decline(struct netif *netif)
|
||||
msecs = 10 * 1000;
|
||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs));
|
||||
ESP_LWIP_DHCP_FINE_TIMER_START_ONCE();
|
||||
return result;
|
||||
}
|
||||
#endif /* DHCP_DOES_ARP_CHECK */
|
||||
@@ -1089,6 +1130,7 @@ dhcp_discover(struct netif *netif)
|
||||
msecs = DHCP_REQUEST_TIMEOUT_SEQUENCE(dhcp->tries);
|
||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs));
|
||||
ESP_LWIP_DHCP_FINE_TIMER_START_ONCE();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1227,6 +1269,7 @@ dhcp_renew(struct netif *netif)
|
||||
msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000);
|
||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs));
|
||||
ESP_LWIP_DHCP_FINE_TIMER_START_ONCE();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1281,6 +1324,7 @@ dhcp_rebind(struct netif *netif)
|
||||
msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000);
|
||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs));
|
||||
ESP_LWIP_DHCP_FINE_TIMER_START_ONCE();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1338,6 +1382,7 @@ dhcp_reboot(struct netif *netif)
|
||||
msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000);
|
||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs));
|
||||
ESP_LWIP_DHCP_FINE_TIMER_START_ONCE();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -89,8 +89,10 @@ const struct lwip_cyclic_timer lwip_cyclic_timers[] = {
|
||||
#endif /* LWIP_ARP */
|
||||
#if LWIP_DHCP
|
||||
{DHCP_COARSE_TIMER_MSECS, HANDLER(dhcp_coarse_tmr)},
|
||||
{DHCP_FINE_TIMER_MSECS, HANDLER(dhcp_fine_tmr)},
|
||||
#endif /* LWIP_DHCP */
|
||||
#if LWIP_DHCP && !ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
{DHCP_FINE_TIMER_MSECS, HANDLER(dhcp_fine_tmr)},
|
||||
#endif /* LWIP_DHCP && !ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND */
|
||||
#if LWIP_AUTOIP
|
||||
{AUTOIP_TMR_INTERVAL, HANDLER(autoip_tmr)},
|
||||
#endif /* LWIP_AUTOIP */
|
||||
|
||||
@@ -123,6 +123,9 @@ u8_t dhcp_supplied_address(const struct netif *netif);
|
||||
void dhcp_coarse_tmr(void);
|
||||
/* to be called every half second */
|
||||
void dhcp_fine_tmr(void);
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
void dhcp_fine_timeout_cb(void *arg);
|
||||
#endif
|
||||
|
||||
#if LWIP_DHCP_GET_NTP_SRV
|
||||
/** This function must exist, in other to add offered NTP servers to
|
||||
|
||||
@@ -505,7 +505,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 + (2*LWIP_DHCP) + LWIP_AUTOIP + (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))))
|
||||
#define LWIP_NUM_SYS_TIMEOUT_INTERNAL (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND ? LWIP_DHCP : 2*LWIP_DHCP) + LWIP_AUTOIP + (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))))
|
||||
|
||||
/**
|
||||
* MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts.
|
||||
|
||||
@@ -294,6 +294,7 @@ void sys_thread_sem_deinit(void);
|
||||
|
||||
|
||||
#define ESP_LWIP_IGMP_TIMERS_ONDEMAND 1
|
||||
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
|
||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
|
||||
#define ESP_DNS 1
|
||||
#define ESP_LWIP_ARP 1
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "lwip/prot/dhcp.h"
|
||||
#include "lwip/prot/iana.h"
|
||||
#include "lwip/etharp.h"
|
||||
#include "lwip/timeouts.h"
|
||||
#include "netif/ethernet.h"
|
||||
|
||||
static struct netif net_test;
|
||||
@@ -140,6 +141,9 @@ static void tick_lwip(void)
|
||||
{
|
||||
tick++;
|
||||
if (tick % 5 == 0) {
|
||||
#if ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
sys_untimeout(dhcp_fine_timeout_cb, NULL);
|
||||
#endif
|
||||
dhcp_fine_tmr();
|
||||
}
|
||||
#if ESP_LWIP
|
||||
|
||||
@@ -158,6 +158,7 @@ u32_t esp_random(void);
|
||||
#endif /* ESP_TEST_DEBUG */
|
||||
#define ESP_LWIP_IGMP_TIMERS_ONDEMAND 1
|
||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
|
||||
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
|
||||
|
||||
#else
|
||||
#define ESP_LWIP 0
|
||||
@@ -165,6 +166,10 @@ u32_t esp_random(void);
|
||||
#define ESP_LWIP_IGMP_TIMERS_ONDEMAND 0
|
||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 0
|
||||
|
||||
#ifndef ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND
|
||||
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 0
|
||||
#endif
|
||||
|
||||
#endif /* ESP_LWIP */
|
||||
|
||||
#endif /* LWIP_HDR_LWIPOPTS_H */
|
||||
|
||||
Reference in New Issue
Block a user