mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
c3ee156df0
1. move netif glue into single file 2. add reference counter for Ethernet driver |
||
---|---|---|
.. | ||
include | ||
loopback | ||
lwip | ||
private_include | ||
test | ||
CMakeLists.txt | ||
component.mk | ||
esp_netif_defaults.c | ||
esp_netif_handlers.c | ||
esp_netif_objects.c | ||
Kconfig | ||
README.md |
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
- netif specific options (flags, behaviour, name)
- network stack options (netif init and input functions, not publicly available)
- 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