/esp82xx-nonos-linklayer

esp8266 link layer API for new ip stack - applied to lwIP-v2

Primary LanguageC

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

Build

  • with Arduino:

  • 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