mirror of
https://github.com/espressif/esp-lwip.git
synced 2026-09-11 11:40:07 +00:00
optimization lwip ip4 reassembly timer
This commit is contained in:
@@ -51,7 +51,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cp ${CONTRIB}/examples/example_app/lwipcfg.h.example ${CONTRIB}/examples/example_app/lwipcfg.h
|
cp ${CONTRIB}/examples/example_app/lwipcfg.h.example ${CONTRIB}/examples/example_app/lwipcfg.h
|
||||||
cd ${CONTRIB}/ports/unix/example_app
|
cd ${CONTRIB}/ports/unix/example_app
|
||||||
export CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -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_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/
|
export LWIPDIR=../../../../src/
|
||||||
make TESTFLAGS="-Wno-documentation" -j 4
|
make TESTFLAGS="-Wno-documentation" -j 4
|
||||||
chmod +x iteropts.sh && ./iteropts.sh
|
chmod +x iteropts.sh && ./iteropts.sh
|
||||||
|
|||||||
+1
-1
@@ -86,7 +86,7 @@ validate_opts:
|
|||||||
- *get_contrib
|
- *get_contrib
|
||||||
- cp ${CONTRIB}/examples/example_app/lwipcfg.h.example ${CONTRIB}/examples/example_app/lwipcfg.h
|
- cp ${CONTRIB}/examples/example_app/lwipcfg.h.example ${CONTRIB}/examples/example_app/lwipcfg.h
|
||||||
- cd ${CONTRIB}/ports/unix/example_app
|
- cd ${CONTRIB}/ports/unix/example_app
|
||||||
- export CFLAGS="-DESP_LWIP=LWIP_NETCONN_FULLDUPLEX -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_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/
|
- export LWIPDIR=../../../../src/
|
||||||
- chmod +x iteropts.sh && ./iteropts.sh
|
- chmod +x iteropts.sh && ./iteropts.sh
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,13 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if IP_REASSEMBLY
|
#if IP_REASSEMBLY
|
||||||
|
|
||||||
|
#if ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
|
#include "lwip/timeouts.h"
|
||||||
|
#include "stdbool.h"
|
||||||
|
static bool s_is_tmr_start = false;
|
||||||
|
#endif /* ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The IP reassembly code currently has the following limitations:
|
* The IP reassembly code currently has the following limitations:
|
||||||
* - IP header options are not supported
|
* - IP header options are not supported
|
||||||
@@ -118,6 +125,17 @@ static u16_t ip_reass_pbufcount;
|
|||||||
static void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev);
|
static void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev);
|
||||||
static int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev);
|
static int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev);
|
||||||
|
|
||||||
|
#if ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
|
/**
|
||||||
|
* Wrapper function with matching prototype which calls the actual callback
|
||||||
|
*/
|
||||||
|
static void ip_reass_timeout_cb(void *arg)
|
||||||
|
{
|
||||||
|
LWIP_UNUSED_ARG(arg);
|
||||||
|
ip_reass_tmr();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reassembly timer base function
|
* Reassembly timer base function
|
||||||
* for both NO_SYS == 0 and 1 (!).
|
* for both NO_SYS == 0 and 1 (!).
|
||||||
@@ -128,6 +146,9 @@ void
|
|||||||
ip_reass_tmr(void)
|
ip_reass_tmr(void)
|
||||||
{
|
{
|
||||||
struct ip_reassdata *r, *prev = NULL;
|
struct ip_reassdata *r, *prev = NULL;
|
||||||
|
#if ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
|
bool tmr_restart = false;
|
||||||
|
#endif /* ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND */
|
||||||
|
|
||||||
r = reassdatagrams;
|
r = reassdatagrams;
|
||||||
while (r != NULL) {
|
while (r != NULL) {
|
||||||
@@ -138,6 +159,9 @@ ip_reass_tmr(void)
|
|||||||
LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n", (u16_t)r->timer));
|
LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n", (u16_t)r->timer));
|
||||||
prev = r;
|
prev = r;
|
||||||
r = r->next;
|
r = r->next;
|
||||||
|
#if ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
|
tmr_restart = true;
|
||||||
|
#endif /* ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND */
|
||||||
} else {
|
} else {
|
||||||
/* reassembly timed out */
|
/* reassembly timed out */
|
||||||
struct ip_reassdata *tmp;
|
struct ip_reassdata *tmp;
|
||||||
@@ -149,6 +173,14 @@ ip_reass_tmr(void)
|
|||||||
ip_reass_free_complete_datagram(tmp, prev);
|
ip_reass_free_complete_datagram(tmp, prev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
|
if (tmr_restart) {
|
||||||
|
sys_timeout(IP_TMR_INTERVAL, ip_reass_timeout_cb, NULL);
|
||||||
|
} else {
|
||||||
|
sys_untimeout(ip_reass_timeout_cb, NULL);
|
||||||
|
s_is_tmr_start = false;
|
||||||
|
}
|
||||||
|
#endif/* ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -672,6 +704,12 @@ ip4_reass(struct pbuf *p)
|
|||||||
/* Return the pbuf chain */
|
/* Return the pbuf chain */
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
#if ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
|
if (!s_is_tmr_start) {
|
||||||
|
sys_timeout(IP_TMR_INTERVAL, ip_reass_timeout_cb, NULL);
|
||||||
|
s_is_tmr_start = true;
|
||||||
|
}
|
||||||
|
#endif /* ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND */
|
||||||
/* the datagram is not (yet?) reassembled completely */
|
/* the datagram is not (yet?) reassembled completely */
|
||||||
LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount));
|
LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount));
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ const struct lwip_cyclic_timer lwip_cyclic_timers[] = {
|
|||||||
{TCP_TMR_INTERVAL, HANDLER(tcp_tmr)},
|
{TCP_TMR_INTERVAL, HANDLER(tcp_tmr)},
|
||||||
#endif /* LWIP_TCP */
|
#endif /* LWIP_TCP */
|
||||||
#if LWIP_IPV4
|
#if LWIP_IPV4
|
||||||
#if IP_REASSEMBLY
|
#if IP_REASSEMBLY && !ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
{IP_TMR_INTERVAL, HANDLER(ip_reass_tmr)},
|
{IP_TMR_INTERVAL, HANDLER(ip_reass_tmr)},
|
||||||
#endif /* IP_REASSEMBLY */
|
#endif /* IP_REASSEMBLY */
|
||||||
#if LWIP_ARP
|
#if LWIP_ARP
|
||||||
|
|||||||
@@ -297,6 +297,9 @@ void sys_thread_sem_deinit(void);
|
|||||||
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
|
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
|
||||||
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 1
|
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 1
|
||||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
|
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
|
||||||
|
#if IP_REASSEMBLY
|
||||||
|
#define ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND 1
|
||||||
|
#endif /* IP_REASSEMBLY */
|
||||||
#define ESP_DNS 1
|
#define ESP_DNS 1
|
||||||
#define ESP_LWIP_ARP 1
|
#define ESP_LWIP_ARP 1
|
||||||
#define LWIP_AUTOIP_MAX_CONFLICTS 10
|
#define LWIP_AUTOIP_MAX_CONFLICTS 10
|
||||||
|
|||||||
@@ -162,6 +162,7 @@ u32_t esp_random(void);
|
|||||||
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
|
#define ESP_LWIP_MLD6_TIMERS_ONDEMAND 1
|
||||||
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
|
#define ESP_LWIP_DHCP_FINE_TIMERS_ONDEMAND 1
|
||||||
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 1
|
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 1
|
||||||
|
#define ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND 1
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define ESP_LWIP 0
|
#define ESP_LWIP 0
|
||||||
@@ -177,6 +178,10 @@ u32_t esp_random(void);
|
|||||||
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 0
|
#define ESP_LWIP_DNS_TIMERS_ONDEMAND 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND
|
||||||
|
#define ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND 0
|
||||||
|
#endif /* ESP_LWIP_IP4_REASSEMBLY_TIMERS_ONDEMAND */
|
||||||
|
|
||||||
#endif /* ESP_LWIP */
|
#endif /* ESP_LWIP */
|
||||||
|
|
||||||
#endif /* LWIP_HDR_LWIPOPTS_H */
|
#endif /* LWIP_HDR_LWIPOPTS_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user