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.
Notes
Tested
arduino NTPClient
arduino WiFiAccessPoint
arduino OTA
Sming Telnet sample
Build
makefiles are working with linux/osx, and maybe with windows (using ‘make’ included in msys from mingw…)
get lwIP sources
git submodule update --init --recursive
optionnally tune lwIP configuration in glue-lwip/lwipopts.h
build & install
make -f Makefile.<arch> install
MSS
Remember the MSS footprint: 4*MSS bytes in RAM per tcp connection. The lowest recommanded value is 536 which is the default here.
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