esp-idf/components/esp_netif
David Čermák 4b7a7e559a Merge branch 'bugfix/esp_netif_list_match_improvement' into 'master'
esp-netif: Improve netif list operations (GitHub PR)

Closes IDFGH-5289

See merge request espressif/esp-idf!13636
2021-06-01 12:47:18 +00:00
..
include event: Add IP_EVENT_ETH_LOST_IP event 2021-05-07 11:36:13 +08: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 esp_netif: Fix failing ppp_set_auth() due to wrong arg check 2021-06-01 05:32:39 +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 esp_netif: Update the test to exercise netif list matching APIs 2021-05-21 09:44:08 +02:00
test_apps esp_netif: enable UBSAN in component test app 2021-04-22 23:33:47 +02: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: Improve esp_netif_is_netif_listed and esp_netif_get_handle_from_ifkey 2021-05-20 13:51:22 +08: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