lwIP-2 from original source
This repo offers a link layer for esp82xx-nonos-sdk-2. The original goal is to try and use a recent lwIP version for stability reasons. Currently lwIP-v2 is implemented, other IP stacks could be tried.
lwIP version currently used: STABLE_2.1.3
Status
used by default in esp8266 arduino core (initial pull request)
UDP/TCP codes using lwIP-1.4 need some updates - two examples: arduino and sming
SACK-out enabled in Arduino
NAT support (patch for lwIP-2.1.2, based on previous works, check in
patches/
)
Build
with Arduino:
Install the git version of the esp8266 arduino core
Head to tools/sdk/lwip2/
Run
make install
with PlatformIO:
Install the git version
Run
make PREFIX=<path-to-the-toolchain-xtensa-package> install
(most common location is~/.platformio/packages/toolchain-xtensa
)
MSS
Remember the MSS footprint: 4*MSS bytes in RAM per tcp connection. The lowest recommanded value is 536.
How it works
Espressif binary libraries rely on their lwip implementation. The idea, as described in this comment is to wrap espressif calls, and rewrite them for a new tcp implementation.
Example with lwip1.4’s ethernet_input() called by espressif binary blobs finally reaching lwip2’s:
-- LWIP2-----------------------------------
#define ethernet_input ethernet_input_LWIP2
- lwip2's ethernet_input_LWIP2_is called
(/ \)
| |
-- glue (new side)-----------^-v-----------
| |
glue_ethernet_input | |
- maps structures glue->new |
- calls ethernet_input_LWIP2(^ v)
- maps structures new->glue |
| |
-- glue (old side)-----------^-v-----------
| |
ethernet_input(): | |
- maps structures old->glue |
- calls glue_ethernet_input (^ v)
- maps structures glue->old |
| |
- espressif blobs -----------^-v-----------
XXXXXXXXXXXXXXXXXXXXXXXXXXXX | | XXXXXXXXXX
wifi calls ethernet_input(/ \) XXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-------------------------------------------
History
Original cleaning and port of espressif’s patch set from lwIP-v1.4 to lwIP-v2 with references to lwIP-git-sha1
Discussion on how further work could done
First version of this implementation
Second version for arduino only