mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
lwip: add option to memcopy packet from L2 to L3
Menuconfig add an option to copy the packet from layer2 (WIFI driver) to layer3 (LWIP), default not copy
This commit is contained in:
parent
7dbf01b210
commit
69dbc36a1c
@ -1,5 +1,15 @@
|
||||
menu "LWIP"
|
||||
|
||||
config L2_TO_L3_COPY
|
||||
bool "Enable copy between Layer2 and Layer3 packets"
|
||||
default 0
|
||||
help
|
||||
If this feature is enabled, then all traffic from layer2(WIFI Driver)
|
||||
to layer3(LWIP stack) will make a copy, the layer2 buffer will be
|
||||
freed and the copy will be sent to layer3. Please make sure you fully
|
||||
understand this feature before you enable this feature.
|
||||
|
||||
|
||||
config LWIP_MAX_SOCKETS
|
||||
int "Max number of open sockets"
|
||||
range 1 16
|
||||
|
@ -3008,6 +3008,13 @@
|
||||
#define LWIP_PERF 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ESP_L2_TO_L3_COPY: enable memcpy when receiving packet from L2
|
||||
*/
|
||||
#ifndef ESP_L2_TO_L3_COPY
|
||||
#define ESP_L2_TO_L3_COPY 1
|
||||
#endif
|
||||
|
||||
#ifndef ESP_THREAD_SAFE_DEBUG
|
||||
#define ESP_THREAD_SAFE_DEBUG 0
|
||||
#endif
|
||||
|
@ -525,6 +525,7 @@ extern unsigned long os_random(void);
|
||||
#define ESP_RANDOM_TCP_PORT 1
|
||||
#define ESP_IP4_ATON 1
|
||||
#define ESP_LIGHT_SLEEP 1
|
||||
#define ESP_L2_TO_L3_COPY CONFIG_L2_TO_L3_COPY
|
||||
|
||||
#define TCP_WND_DEFAULT (4*TCP_MSS)
|
||||
#define TCP_SND_BUF_DEFAULT (2*TCP_MSS)
|
||||
|
@ -161,40 +161,37 @@ low_level_output(struct netif *netif, struct pbuf *p)
|
||||
* @param netif the lwip network interface structure for this ethernetif
|
||||
*/
|
||||
void
|
||||
#if ESP_LWIP
|
||||
wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb)
|
||||
#else
|
||||
wlanif_input(struct netif *netif, void *buffer, uint16 len)
|
||||
#endif
|
||||
{
|
||||
struct pbuf *p;
|
||||
|
||||
#if ESP_LWIP
|
||||
if(buffer== NULL)
|
||||
if(!buffer || !netif)
|
||||
goto _exit;
|
||||
if(netif == NULL)
|
||||
goto _exit;
|
||||
#endif
|
||||
|
||||
#if ESP_LWIP
|
||||
p = pbuf_alloc(PBUF_RAW, len, PBUF_REF);
|
||||
if (p == NULL){
|
||||
#if ESP_PERF
|
||||
g_rx_alloc_pbuf_fail_cnt++;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
p->payload = buffer;
|
||||
p->eb = eb;
|
||||
#else
|
||||
p = pbuf_alloc(PBUF_IP, len, PBUF_POOL);
|
||||
#if (ESP_L2_TO_L3_COPY == 1)
|
||||
//p = pbuf_alloc(PBUF_IP, len, PBUF_POOL);
|
||||
p = pbuf_alloc(PBUF_RAW, len, PBUF_RAM);
|
||||
if (p == NULL) {
|
||||
#if ESP_PERF
|
||||
g_rx_alloc_pbuf_fail_cnt++;
|
||||
#endif
|
||||
esp_wifi_internal_free_rx_buffer(eb);
|
||||
return;
|
||||
}
|
||||
memcpy(p->payload, buffer, len);
|
||||
esp_wifi_internal_free_rx_buffer(eb);
|
||||
#else
|
||||
p = pbuf_alloc(PBUF_RAW, len, PBUF_REF);
|
||||
if (p == NULL){
|
||||
#if ESP_PERF
|
||||
g_rx_alloc_pbuf_fail_cnt++;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
p->payload = buffer;
|
||||
p->eb = eb;
|
||||
#endif
|
||||
|
||||
|
||||
/* full packet send to tcpip_thread to process */
|
||||
if (netif->input(p, netif) != ERR_OK) {
|
||||
LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user