esp-idf/components/esp_netif
Marius Vikhammer 9c8e4fd4c5 C3: build and run unit tests
Enable building and running of unit tests in CI for C3 as well as fix
related compile errors

Also enables building of C3 test apps
2021-01-11 11:34:37 +08:00
..
include Whitespace: Automated whitespace fixes (large commit) 2020-11-11 07:36:35 +00:00
loopback esp_netif: Enable use of the ESP-IDF with a non-LWIP (and non-BSD-style) IP stack. 2020-09-18 15:10:55 +02:00
lwip lwip: Added support for configurable LwIP hooks 2020-11-26 12:02:00 +00:00
private_include esp_netif: added locking for netif list management, unit tests to use unique if_keys, updated comments 2019-11-13 12:36:25 +01:00
test C3: build and run unit tests 2021-01-11 11:34:37 +08:00
test_apps CI: component_ut: fix esp_netif test path unmatch issue 2020-11-12 15:12:56 +08:00
CMakeLists.txt esp-netif: SLIP interface refactor to isolate interface from drivers 2020-07-15 15:46:46 +02:00
component.mk Whitespace: Automated whitespace fixes (large commit) 2020-11-11 07:36:35 +00:00
esp_netif_defaults.c esp-netif: Added esp_netif slip support, slip_modem component and example 2020-07-15 15:46:46 +02:00
esp_netif_handlers.c Whitespace: Automated whitespace fixes (large commit) 2020-11-11 07:36:35 +00:00
esp_netif_objects.c esp-netif: SLIP interface refactor to isolate interface from drivers 2020-07-15 15:46:46 +02:00
Kconfig esp_netif: update default DHCP IP addresses to be in line with old interface, added loopback implementation, explicit esp-netif init, sanity checks for parameters added 2019-11-13 12:36:25 +01:00
README.md esp_netif: added locking for netif list management, unit tests to use unique if_keys, updated comments 2019-11-13 12:36:25 +01:00

ESP-NETIF architecture

                 |          (A) USER CODE                 |
                 |                                        |
    .............| init          settings      events     |
    .            +----------------------------------------+          
    .               .                |           *
    .               .                V           *                                   
--------+        +===========================+   *     +-----------------------+
        |        | new/config     get/set    |   *     |                       |
        |        |                           |...*.....| init                  |
        |        |---------------------------|   *     |                       |
  init  |        |                           |****     |                       |
  start |********|  event handler            |*********|  DHCP                 |
  stop  |        |                           |         |                       |
        |        |---------------------------|         |                       | 
        |        |                           |         |    NETIF              |
  +-----|        |                           |         +-----------------+     |   
  | glue|----<---|  esp_netif_transmit       |--<------| netif_output    |     |
  |     |        |                           |         |                 |     |
  |     |---->---|  esp_netif_receive        |-->------| netif_input     |     |
  |     |        |                           |         + ----------------+     |
  |     |....<...|  esp_netif_free_rx_buffer |...<.....| packet buffer         |
  +-----|        |                           |         |                       |  
        |        |                           |         |                       |  
  (B)   |        |                           |         +-----------------------+
--------+        +===========================+
communication                                                NETWORK STACK
DRIVER                   ESP-NETIF                          

Components:

A) User code, boiler plate

Overall application interaction with communication media and network stack

  • initialization code
    • create a new instance of ESP-NETIF
    • configure the object with
      1. netif specific options (flags, behaviour, name)
      2. network stack options (netif init and input functions, not publicly available)
      3. IO driver specific options (transmit, tx_free functions, IO driver handle)
    • setup event handlers
    • use default handlers for common interfaces defined in IO drivers; or define a specific handlers for customised behaviour/new interfaces
    • register handlers for app related events (such as IP lost/acquired)
  • interact with network interfaces using ESP-NETIF API

B) Communication driver, IO driver, media driver

  • event handler
    • define behaviour patterns of interaction with ESP-NETIF (example: ehternet link-up -> turn netif on)
  • glue IO layer: adapt the input/output functions to use esp-netif transmit/input/free_rx
    • install driver_transmit to appropriate ESP-NETIF object, so that outgoing packets from network stack are passed to the IO driver
    • calls esp_netif_receive to pass incoming data to network stack

C) ESP-NETIF, former tcpip_adapter

  • init API (new, configure)
  • IO API: for passing data between IO driver and network stack
  • event/action API (esp-netif lifecycle management)
    • building blocks for designing event handlers
  • setters, getters
  • network stack abstraction: enabling user interaction with TCP/IP stack
    • netif up/down
    • DHCP server, client
    • DNS API
  • driver conversion utilities

D) Network stack: no public interaction with user code (wrtt interfaces)

Data/event flow:

  • ........ Initialization line from user code to esp-netif and comm driver

  • --<--->-- Data packets going from communication media to TCP/IP stack and back

  • ******** Events agregated in ESP-NETIP propagates to driver, user code and network stack

  • | User settings and runtime configuration