|
1 | | -ESP-NETIF Custom I/O Driver |
2 | | -=========================== |
| 1 | +ESP-NETIF Developer's manual |
| 2 | +============================ |
3 | 3 |
|
4 | 4 | :link_to_translation:`zh_CN:[中文]` |
5 | 5 |
|
| 6 | +As shown in the :ref:`esp-netif structure` diagram, ESP-NETIF is in fact an intermediary between the I/O driver and the TCP/IP stack. This manual describes customization of these two sides, that is if you need to implement :ref:`esp_netif_custom_driver` or if you need to employ :ref:`esp_netif_tcpip_stack`. |
| 7 | + |
| 8 | + |
| 9 | +.. _esp_netif_custom_driver: |
| 10 | + |
| 11 | +ESP-NETIF Custom I/O Driver |
| 12 | +--------------------------- |
| 13 | + |
6 | 14 | This section outlines implementing a new I/O driver with ESP-NETIF connection capabilities. |
7 | 15 |
|
8 | 16 | By convention, the I/O driver has to register itself as an ESP-NETIF driver, and thus holds a dependency on ESP-NETIF component and is responsible for providing data path functions, post-attach callback and in most cases, also default event handlers to define network interface actions based on driver's lifecycle transitions. |
@@ -88,7 +96,24 @@ Network Stack Connection |
88 | 96 |
|
89 | 97 | The packet data path functions for transmitting and freeing the rx buffer (defined in the I/O driver) are called from the ESP-NETIF, specifically from its TCP/IP stack connecting layer. |
90 | 98 |
|
91 | | -Note that ESP-IDF provides several network stack configurations for the most common network interfaces, such as for the Wi-Fi station or Ethernet. These configurations are defined in :component_file:`esp_netif/include/esp_netif_defaults.h` and should be sufficient for most network drivers. In rare cases, expert users might want to define custom lwIP based interface layers; it is possible, but an explicit dependency to lwIP needs to be set. |
| 99 | +Note that ESP-IDF provides several network stack configurations for the most common network interfaces, such as for the Wi-Fi station or Ethernet. These configurations are defined in :component_file:`esp_netif/include/esp_netif_defaults.h` and should be sufficient for most network drivers. |
| 100 | + |
| 101 | +In some cases, you might want to define a custom lwIP based interface, for example if you need to update :component_file:`esp_netif/lwip/netif/wlanif.c` with a specific packet pool. In that case, you would have to define an explicit dependency to lwIP and include :component_file:`esp_netif/include/lwip/esp_netif_net_stack.h` for the relevant lwIP configuration structures. |
| 102 | + |
| 103 | + |
| 104 | +.. _esp_netif_tcpip_stack: |
| 105 | + |
| 106 | +ESP-NETIF Custom TCP/IP Stack |
| 107 | +----------------------------- |
| 108 | + |
| 109 | +It is possible to use a custom TCP/IP stack with ESP-IDF, provided it implements BSD API. You can add support for your own TCP/IP stack, while using the generic ESP-NETIF functionality, so the application code can stay the same as with the lwIP. |
| 110 | + |
| 111 | +In this case, please choose ``ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION`` in the ESP-NETIF component configuration menu. This option will disable lwIP implementation of the ESP-NETIF functions and provide only header files with declarations of types and API. You will have to supply the necessary implementation in your custom component. You can refer to the :component_file:`esp_netif/loopback/esp_netif_loopback.c` for example of dummy implementations of these functions. |
| 112 | + |
| 113 | +It is also possible to build ESP-IDF without lwIP, please refer to :idf_file:`components/esp_netif_stack/README.md`. |
| 114 | + |
| 115 | +API Reference |
| 116 | +------------- |
92 | 117 |
|
93 | 118 | The following API reference outlines these network stack interaction with the ESP-NETIF: |
94 | 119 |
|
|
0 commit comments