diff --git a/components/esp32/Kconfig b/components/esp32/Kconfig index fae22aba8..ab092603d 100644 --- a/components/esp32/Kconfig +++ b/components/esp32/Kconfig @@ -1084,7 +1084,8 @@ config ESP32_WIFI_STATIC_RX_BUFFER_NUM 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 55b813f2a..e5e3b12c3 160000 --- a/components/esp32/lib +++ b/components/esp32/lib @@ -1 +1 @@ -Subproject commit 55b813f2a3d91843c4c6c8a2485b11406a72c5a0 +Subproject commit e5e3b12c31e4fe143aa1aabd94c8ffac93d76b5d diff --git a/components/lwip/Kconfig b/components/lwip/Kconfig index f124ac0b1..6b6bdc0d6 100644 --- a/components/lwip/Kconfig +++ b/components/lwip/Kconfig @@ -148,7 +148,8 @@ config GARP_TMR_INTERVAL 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 @@ config TCP_WND_DEFAULT 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 @@ config TCP_OVERSIZE_DISABLE 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 53b598609..13a3632d4 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 ----------