examples: Add common linux component tapif_io

That can be used with linux target on lwip to pass packets from lwip to
linux host networking stack, e.g. routing the trafic to internet.
This commit is contained in:
David Cermak
2023-01-31 08:29:00 +01:00
parent 332e4902b4
commit 854e16feb3
12 changed files with 593 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
/*
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "esp_err.h"
#include "esp_netif.h" // esp-netif
#include "tapio.h" // esp-netif's driver side
#include "lwip/tapif.h" // esp-netif's network stack side
esp_err_t example_connect(void)
{
#if CONFIG_EXAMPLE_CONNECT_LWIP_TAPIF
// configure linux tapio
esp_netif_driver_ifconfig_t driver_cfg = {
.handle = tapio_create(),
.transmit = tapio_output,
};
// configure lwip netif for the tapif
struct esp_netif_netstack_config stack_cfg = {
.lwip = {
.init_fn = lwip_tapif_init,
.input_fn = lwip_tapif_input,
}
};
// configure inherent esp-netif parameters
esp_netif_ip_info_t ip_info = {};
ip_info.ip.addr = ipaddr_addr(CONFIG_EXAMPLE_CONNECT_TAPIF_IP_ADDR);
ip_info.netmask.addr = ipaddr_addr(CONFIG_EXAMPLE_CONNECT_TAPIF_NETMASK);
ip_info.gw.addr = ipaddr_addr(CONFIG_EXAMPLE_CONNECT_TAPIF_GW);
esp_netif_inherent_config_t base_cfg = {
.if_key = "TAP",
.flags = ESP_NETIF_FLAG_AUTOUP,
.ip_info = &ip_info,
.route_prio = 100
};
// put all configs together
esp_netif_config_t cfg = {
.base = &base_cfg,
.driver = &driver_cfg,
.stack = &stack_cfg
};
// create the interface and attach it to the tapio-handle
esp_netif_t *tap_netif = esp_netif_new(&cfg);
esp_netif_attach(tap_netif, driver_cfg.handle);
#endif // EXAMPLE_CONNECT_LWIP_TAPIF
return ESP_OK;
}