lwip:optimization dhcp coarse timer

This commit is contained in:
xueyunfei 2023-02-09 11:58:33 +08:00 committed by BOT
parent af9e99759a
commit 4186c9a0fc
3 changed files with 45 additions and 1 deletions

View File

@ -283,6 +283,14 @@ menu "LWIP"
options and values. If your code meets LWIP_ASSERT due to option value is too long.
Please increase the LWIP_DHCP_OPTIONS_LEN value.
config LWIP_DHCP_COARSE_TIMER_SECS
int "DHCP coarse timer interval(s)"
default 1
range 1 10
help
Set DHCP coarse interval in seconds.
A higher value will be less precise but cost less power consumption.
menu "DHCP server"
config LWIP_DHCPS

@ -1 +1 @@
Subproject commit 6fa02bd30daa656f896c7a36248253fb3b97660d
Subproject commit a7abf28e02282b32479f4bbaf2d90f09d2a60f4c

View File

@ -21,6 +21,11 @@
#include "netif/dhcp_state.h"
#include "sntp/sntp_get_set_time.h"
#ifdef __cplusplus
extern "C"
{
#endif
/* Enable all Espressif-only options */
/*
@ -231,6 +236,33 @@
*/
#define ESP_DHCP_DISABLE_CLIENT_ID CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID
#define DHCP_DEFINE_CUSTOM_TIMEOUTS 1
/* Since for embedded devices it's not that hard to miss a discover packet, so lower
* the discover retry backoff time from (2,4,8,16,32,60,60)s to (500m,1,2,4,8,15,15)s.
*/
#define DHCP_REQUEST_TIMEOUT_SEQUENCE(state, tries) (state == DHCP_STATE_REQUESTING ? \
(uint16_t)(1 * 1000) : \
(uint16_t)(((tries) < 6 ? 1 << (tries) : 60) * 250))
#define DHCP_COARSE_TIMER_SECS CONFIG_LWIP_DHCP_COARSE_TIMER_SECS
static inline uint32_t timeout_from_offered(uint32_t lease, uint32_t min)
{
uint32_t timeout = lease;
if (timeout == 0) {
timeout = min;
}
timeout = (timeout + DHCP_COARSE_TIMER_SECS - 1) / DHCP_COARSE_TIMER_SECS;
return timeout;
}
#define DHCP_CALC_TIMEOUT_FROM_OFFERED_T0_LEASE(dhcp) \
timeout_from_offered((dhcp)->offered_t0_lease, 120)
#define DHCP_CALC_TIMEOUT_FROM_OFFERED_T1_RENEW(dhcp) \
timeout_from_offered((dhcp)->offered_t1_renew, (dhcp)->t0_timeout >> 1 /* 50% */)
#define DHCP_CALC_TIMEOUT_FROM_OFFERED_T2_REBIND(dhcp) \
timeout_from_offered((dhcp)->offered_t2_rebind, ((dhcp)->t0_timeout / 8) * 7 /* 87.5% */)
/**
* CONFIG_LWIP_DHCP_RESTORE_LAST_IP==1: Last valid IP address obtained from DHCP server
* is restored after reset/power-up.
@ -1111,4 +1143,8 @@
#define SOC_SEND_LOG //printf
#ifdef __cplusplus
}
#endif
#endif /* __LWIPOPTS_H__ */