lwip:optimization lwip ip6 reassembly timer

This commit is contained in:
xueyunfei
2020-08-11 15:59:22 +08:00
parent ce1a7099fa
commit 9813ea9ab2
6 changed files with 48 additions and 4 deletions
+1 -1
View File
@@ -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_IP4_REASSEMBLY_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_DNS_TIMERS_ONDEMAND=ESP_LWIP -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 CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -DESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_DNS_TIMERS_ONDEMAND=ESP_LWIP -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
View File
@@ -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_IP4_REASSEMBLY_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_DNS_TIMERS_ONDEMAND=ESP_LWIP -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 CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -DESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND=ESP_LWIP -DESP_LWIP_DNS_TIMERS_ONDEMAND=ESP_LWIP -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
+36 -1
View File
@@ -54,6 +54,11 @@
#if LWIP_IPV6 && LWIP_IPV6_REASS /* don't build if not configured for use in lwipopts.h */
#if ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
#include "stdbool.h"
#include "lwip/timeouts.h"
static bool s_is_tmr_start = false;
#endif /* ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND */
/** Setting this to 0, you can turn off checking the fragments for overlapping
* regions. The code gets a little smaller. Only use this if you know that
@@ -109,10 +114,24 @@ static void ip6_reass_free_complete_datagram(struct ip6_reassdata *ipr);
static void ip6_reass_remove_oldest_datagram(struct ip6_reassdata *ipr, int pbufs_needed);
#endif /* IP_REASS_FREE_OLDEST */
#if ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
/**
* Wrapper function with matching prototype which calls the actual callback
*/
static void ip6_reass_timeout_cb(void *arg)
{
LWIP_UNUSED_ARG(arg);
ip6_reass_tmr();
}
#endif /* ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND */
void
ip6_reass_tmr(void)
{
struct ip6_reassdata *r, *tmp;
#if ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
bool tmr_restart = false;
#endif /* ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND */
#if !IPV6_FRAG_COPYHEADER
LWIP_ASSERT("sizeof(struct ip6_reass_helper) <= IP6_FRAG_HLEN, set IPV6_FRAG_COPYHEADER to 1",
@@ -126,6 +145,9 @@ ip6_reass_tmr(void)
if (r->timer > 0) {
r->timer--;
r = r->next;
#if ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
tmr_restart = true;
#endif /* ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND */
} else {
/* reassembly timed out */
tmp = r;
@@ -135,6 +157,14 @@ ip6_reass_tmr(void)
ip6_reass_free_complete_datagram(tmp);
}
}
#if ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
if (tmr_restart) {
sys_timeout(IP6_REASS_TMR_INTERVAL, ip6_reass_timeout_cb, NULL);
} else {
sys_untimeout(ip6_reass_timeout_cb, NULL);
s_is_tmr_start = false;
}
#endif/* ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND */
}
/**
@@ -357,7 +387,6 @@ ip6_reass(struct pbuf *p)
/* enqueue the new structure to the front of the list */
ipr->next = reassdatagrams;
reassdatagrams = ipr;
/* Use the current IPv6 header for src/dest address reference.
* Eventually, we will replace it when we get the first fragment
* (it might be this one, in any case, it is done later). */
@@ -660,6 +689,12 @@ ip6_reass(struct pbuf *p)
/* Return the pbuf chain */
return p;
}
#if ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
if (!s_is_tmr_start) {
sys_timeout(IP6_REASS_TMR_INTERVAL, ip6_reass_timeout_cb, NULL);
s_is_tmr_start = true;
}
#endif /* ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND */
/* the datagram is not (yet?) reassembled completely */
return NULL;
+1 -1
View File
@@ -105,7 +105,7 @@ const struct lwip_cyclic_timer lwip_cyclic_timers[] = {
#endif /* LWIP_DNS */
#if LWIP_IPV6
{ND6_TMR_INTERVAL, HANDLER(nd6_tmr)},
#if LWIP_IPV6_REASS
#if LWIP_IPV6_REASS && !ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
{IP6_REASS_TMR_INTERVAL, HANDLER(ip6_reass_tmr)},
#endif /* LWIP_IPV6_REASS */
#if LWIP_IPV6_MLD && !ESP_LWIP_MLD6_TIMERS_ONDEMAND
+4
View File
@@ -38,6 +38,7 @@
#define LWIP_IPV4 1
#define LWIP_IPV6 0
#define LWIP_IPV6_REASS 0
#define NO_SYS 0
#define LWIP_SOCKET (NO_SYS==0)
@@ -300,6 +301,9 @@ void sys_thread_sem_deinit(void);
#if IP_REASSEMBLY
#define ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND 1
#endif /* IP_REASSEMBLY */
#if LWIP_IPV6_REASS
#define ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND 1
#endif /* LWIP_IPV6_REASS */
#define ESP_DNS 1
#define ESP_LWIP_ARP 1
#define LWIP_AUTOIP_MAX_CONFLICTS 10
+5
View File
@@ -163,6 +163,7 @@ u32_t esp_random(void);
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 1
#define ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND 1
#define ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND 1
#else
#define ESP_LWIP 0
@@ -182,6 +183,10 @@ u32_t esp_random(void);
#define ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND 0
#endif /* ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND */
#ifndef ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND
#define ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND 0
#endif /* ESP_LWIP_IP6_REASSEMBLY_TIMERS_ONDEMAND */
#endif /* ESP_LWIP */
#endif /* LWIP_HDR_LWIPOPTS_H */