mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 14:14:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
TCP/IP Adapter Migration Guide
 | 
						|
==============================
 | 
						|
 | 
						|
:link_to_translation:`zh_CN:[中文]`
 | 
						|
 | 
						|
TCP/IP Adapter is a network interface abstraction component used in IDF prior to v4.1. This page outlines migration from tcpip_adapter API to its successor :doc:`/api-reference/network/esp_netif`.
 | 
						|
 | 
						|
 | 
						|
Updating network connection code
 | 
						|
--------------------------------
 | 
						|
 | 
						|
 | 
						|
Network stack initialization
 | 
						|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
Simply replace ``tcpip_adapter_init()`` with ``esp_netif_init()``. Please note that the :doc:`/api-reference/network/esp_netif` initialization API returns standard error code and the ``esp_netif_deinit()`` for un-initialization is available.
 | 
						|
 | 
						|
Also replace ``#include "tcpip_adapter.h"`` with ``#include "esp_netif.h"``.
 | 
						|
 | 
						|
 | 
						|
Network interface creation
 | 
						|
^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
TCP/IP Adapter defined these three interfaces statically:
 | 
						|
 | 
						|
- WiFi Station
 | 
						|
- WiFi Access Point
 | 
						|
- Ethernet
 | 
						|
 | 
						|
Network interface instance shall be explicitly constructed for the :doc:`/api-reference/network/esp_netif` to enable its connection to the TCP/IP stack.
 | 
						|
For example initialization code for WiFi has to explicitly call ``esp_netif_create_default_wifi_sta();`` or ``esp_netif_create_default_wifi_ap();`` after the TCP/IP stack and the event loop have been initialized.
 | 
						|
Please consult an example initialization code for these three interfaces:
 | 
						|
 | 
						|
- WiFi Station: :example_file:`wifi/getting_started/station/main/station_example_main.c`
 | 
						|
- WiFi Access Point: :example_file:`wifi/getting_started/softAP/main/softap_example_main.c`
 | 
						|
- Ethernet: :example_file:`ethernet/basic/main/ethernet_example_main.c`
 | 
						|
 | 
						|
 | 
						|
Replacing other tcpip_adapter API
 | 
						|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
All the tcpip_adapter functions have their esp-netif counter-part. Please refer to the esp_netif.h grouped into these sections:
 | 
						|
 | 
						|
*  :component_file:`Setters/Getters <esp_netif/include/esp_netif.h#L241>`
 | 
						|
*  :component_file:`DHCP <esp_netif/include/esp_netif.h#L387>`
 | 
						|
*  :component_file:`DNS <esp_netif/include/esp_netif.h#L516>`
 | 
						|
*  :component_file:`IP address <esp_netif/include/esp_netif.h#L568>`
 | 
						|
 | 
						|
 | 
						|
Default event handlers
 | 
						|
^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
Event handlers are moved from tcpip_adapter to appropriate driver code. There is no change from application code perspective, all events shall be handled in the same way.
 | 
						|
Please note that within IP related event handlers, application code usually receives IP addresses in a form of esp-netif specific struct (not the LwIP structs, but binary compatible).
 | 
						|
This is the preferred way of printing the address:
 | 
						|
 | 
						|
.. code-block:: c
 | 
						|
 | 
						|
           ESP_LOGI(TAG, "got ip:" IPSTR "\n", IP2STR(&event->ip_info.ip));
 | 
						|
 | 
						|
Instead of
 | 
						|
 | 
						|
.. code-block:: c
 | 
						|
 | 
						|
           ESP_LOGI(TAG, "got ip:%s\n", ip4addr_ntoa(&event->ip_info.ip));
 | 
						|
 | 
						|
Since ``ip4addr_ntoa()`` is a LwIP API, the esp-netif provides ``esp_ip4addr_ntoa()`` as a replacement, but the above method is generally preferred.
 | 
						|
 | 
						|
 | 
						|
IP addresses
 | 
						|
^^^^^^^^^^^^
 | 
						|
 | 
						|
It is preferred to use esp-netif defined IP structures. Please note that the LwIP structs will still work when default compatibility enabled.
 | 
						|
*  :component_file:`esp-netif IP address definitions <esp_netif/include/esp_netif_ip_addr.h#L96>`
 | 
						|
 | 
						|
 | 
						|
Next steps
 | 
						|
^^^^^^^^^^
 | 
						|
 | 
						|
Additional step in porting an application to fully benefit from the :doc:`/api-reference/network/esp_netif` is to disable the tcpip_adapter compatibility layer in the component configuration:
 | 
						|
``ESP NETIF Adapter`` -> ``Enable backward compatible tcpip_adapter interface`` and check if the project compiles.
 | 
						|
TCP/IP adapter brings many include dependencies and this step might help in decoupling the application from using specific TCP/IP stack API directly.
 |