diff --git a/components/esp32/Kconfig b/components/esp32/Kconfig index 25152dbb9..a1fc6a2c5 100644 --- a/components/esp32/Kconfig +++ b/components/esp32/Kconfig @@ -1006,7 +1006,8 @@ menu Wi-Fi config ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM int "Max number of WiFi dynamic RX buffers" - range 0 128 + range 0 128 if !LWIP_WND_SCALE + range 0 1024 if LWIP_WND_SCALE default 32 help Set the number of WiFi dynamic RX buffers, 0 means unlimited RX buffers will be allocated diff --git a/components/esp32/lib b/components/esp32/lib index eb27c814d..b8b96f985 160000 --- a/components/esp32/lib +++ b/components/esp32/lib @@ -1 +1 @@ -Subproject commit eb27c814d5d178698bb45c6ad675c0dce9427fa1 +Subproject commit b8b96f985aee155682a2907c6c0f3b693bb43785 diff --git a/components/lwip/Kconfig b/components/lwip/Kconfig index 2d7c5731e..025305d95 100644 --- a/components/lwip/Kconfig +++ b/components/lwip/Kconfig @@ -148,7 +148,8 @@ menu "LWIP" config TCPIP_RECVMBOX_SIZE int "TCPIP task receive mail box size" default 32 - range 6 64 + range 6 64 if !LWIP_WND_SCALE + range 6 1024 if LWIP_WND_SCALE help Set TCPIP task receive mail box size. Generally bigger value means higher throughput but more memory. The value should be bigger than UDP/TCP mail box size. @@ -339,7 +340,8 @@ menu "LWIP" config TCP_RECVMBOX_SIZE int "Default TCP receive mail box size" default 6 - range 6 64 + range 6 64 if !LWIP_WND_SCALE + range 6 1024 if LWIP_WND_SCALE help Set TCP receive mail box size. Generally bigger value means higher throughput but more memory. The recommended value is: TCP_WND_DEFAULT/TCP_MSS + 2, e.g. if @@ -399,6 +401,21 @@ menu "LWIP" endchoice + config LWIP_WND_SCALE + bool "Support TCP window scale" + depends on WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST + default n + help + Enable this feature to support TCP window scaling. + + config TCP_RCV_SCALE + int "Set TCP receiving window scaling factor" + depends on LWIP_WND_SCALE + range 0 14 + default 0 + help + Enable this feature to support TCP window scaling. + endmenu # TCP menu "UDP" diff --git a/components/lwip/port/esp32/include/lwipopts.h b/components/lwip/port/esp32/include/lwipopts.h index 03d8d26f3..883abe557 100644 --- a/components/lwip/port/esp32/include/lwipopts.h +++ b/components/lwip/port/esp32/include/lwipopts.h @@ -363,6 +363,19 @@ #error "One of CONFIG_TCP_OVERSIZE_xxx options should be set by sdkconfig" #endif +/** + * LWIP_WND_SCALE and TCP_RCV_SCALE: + * Set LWIP_WND_SCALE to 1 to enable window scaling. + * Set TCP_RCV_SCALE to the desired scaling factor (shift count in the + * range of [0..14]). + * When LWIP_WND_SCALE is enabled but TCP_RCV_SCALE is 0, we can use a large + * send window while having a small receive window only. + */ +#ifdef CONFIG_LWIP_WND_SCALE +#define LWIP_WND_SCALE 1 +#define TCP_RCV_SCALE CONFIG_TCP_RCV_SCALE +#endif + /* ---------------------------------- ---------- Pbuf options ----------