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.
current lwIP link: STABLE_2.0.3
- UDP/TCP codes using lwIP-1.4 need some updates - two examples: arduino and sming
- ipv6 not tried yet
- tcp is more stable (example1 and example2)
- needs users / testing
- accepted pull request in esp8266/arduino
- pull request in sming
- pull request in esp-open-sdk
- arduino NTPClient
- arduino WiFiAccessPoint
- arduino OTA
- Sming Telnet sample
makefiles are working with linux/osx/windows
get lwIP sources
git submodule update --init --recursive
optionnally tune lwIP configuration in glue-lwip/lwipopts.h
build & install
make -f Makefile.<arch> install
Remember the MSS footprint: 4*MSS bytes in RAM per tcp connection. The lowest recommanded value is 536 which is the default here.
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
-------------------------------------------
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