feat(eppp): Add support for TUN interface

* Implement factory pattern
* Make netif type configurable (PPP vs. TUN)
* Use ICMP for TUN netif connection
* Relax deps criteria (mainly for Ethernet)use the tun feature
This commit is contained in:
David Cermak
2025-06-12 11:59:17 +02:00
parent b8cdd373f4
commit 2ff150c310
22 changed files with 1531 additions and 705 deletions
+74 -5
View File
@@ -1,14 +1,14 @@
/*
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#define EPPP_DEFAULT_SERVER_IP() ESP_IP4TOADDR(192, 168, 11, 1)
#define EPPP_DEFAULT_CLIENT_IP() ESP_IP4TOADDR(192, 168, 11, 2)
#define EPPP_DEFAULT_CONFIG(our_ip, their_ip) { \
.transport = EPPP_TRANSPORT_UART, \
#define EPPP_DEFAULT_SPI_CONFIG() \
.spi = { \
.host = 1, \
.mosi = 11, \
@@ -21,6 +21,8 @@
.cs_ena_pretrans = 0, \
.cs_ena_posttrans = 0, \
}, \
#define EPPP_DEFAULT_UART_CONFIG() \
.uart = { \
.port = 1, \
.baud = 921600, \
@@ -29,15 +31,54 @@
.queue_size = 16, \
.rx_buffer_size = 1024, \
}, \
#define EPPP_DEFAULT_SDIO_CONFIG() \
.sdio = { \
.width = 4, \
.clk = 18, \
.cmd = 19, \
.d0 = 49, \
.d1 = 50, \
.d0 = 14, \
.d1 = 15, \
.d2 = 16, \
.d3 = 17, \
}, \
#define EPPP_DEFAULT_ETH_CONFIG() \
.ethernet = { \
.mdc_io = 23, \
.mdio_io = 18, \
.phy_addr = 1, \
.rst_io= 5, \
}, \
#if CONFIG_EPPP_LINK_DEVICE_SPI
#define EPPP_DEFAULT_TRANSPORT_CONFIG() EPPP_DEFAULT_SPI_CONFIG()
#define EPPP_TRANSPORT_INIT(cfg) eppp_spi_init(&cfg->spi)
#define EPPP_TRANSPORT_DEINIT(handle) eppp_spi_deinit(handle)
#elif CONFIG_EPPP_LINK_DEVICE_UART
#define EPPP_DEFAULT_TRANSPORT_CONFIG() EPPP_DEFAULT_UART_CONFIG()
#define EPPP_TRANSPORT_INIT(cfg) eppp_uart_init(&cfg->uart)
#define EPPP_TRANSPORT_DEINIT(handle) eppp_uart_deinit(handle)
#elif CONFIG_EPPP_LINK_DEVICE_SDIO
#define EPPP_DEFAULT_TRANSPORT_CONFIG() EPPP_DEFAULT_SDIO_CONFIG()
#define EPPP_TRANSPORT_INIT(cfg) eppp_sdio_init(&cfg->sdio)
#define EPPP_TRANSPORT_DEINIT(handle) eppp_sdio_deinit(handle)
#elif CONFIG_EPPP_LINK_DEVICE_ETH
#define EPPP_DEFAULT_TRANSPORT_CONFIG() EPPP_DEFAULT_ETH_CONFIG()
#define EPPP_TRANSPORT_INIT(cfg) eppp_eth_init(&cfg->ethernet)
#define EPPP_TRANSPORT_DEINIT(handle) eppp_eth_deinit(handle)
#else
#error Unexpeted transport
#endif
#define EPPP_DEFAULT_CONFIG(our_ip, their_ip) { \
.transport = EPPP_TRANSPORT_UART, \
EPPP_DEFAULT_TRANSPORT_CONFIG() \
. task = { \
.run_task = true, \
.stack_size = 4096, \
@@ -72,6 +113,7 @@ typedef struct eppp_config_t {
struct eppp_config_spi_s {
int host;
bool is_master;
int mosi;
int miso;
int sclk;
@@ -93,6 +135,7 @@ typedef struct eppp_config_t {
} uart;
struct eppp_config_sdio_s {
bool is_host;
int width;
int clk;
int cmd;
@@ -102,6 +145,13 @@ typedef struct eppp_config_t {
int d3;
} sdio;
struct eppp_config_ethernet_s {
int mdc_io;
int mdio_io;
int phy_addr;
int rst_io;
} ethernet;
struct eppp_config_task_s {
bool run_task;
int stack_size;
@@ -117,20 +167,39 @@ typedef struct eppp_config_t {
} eppp_config_t;
typedef struct eppp_handle* eppp_transport_handle_t;
esp_netif_t *eppp_connect(eppp_config_t *config);
esp_netif_t *eppp_listen(eppp_config_t *config);
void eppp_close(esp_netif_t *netif);
/**
* @brief Initialize the EPPP link layer
* @param role
* @param config
* @return
*/
esp_netif_t *eppp_init(eppp_type_t role, eppp_config_t *config);
void eppp_deinit(esp_netif_t *netif);
esp_netif_t *eppp_open(eppp_type_t role, eppp_config_t *config, int connect_timeout_ms);
esp_netif_t *eppp_netif_init(eppp_type_t role, eppp_transport_handle_t h, eppp_config_t *eppp_config);
esp_err_t eppp_netif_stop(esp_netif_t *netif, int stop_timeout_ms);
esp_err_t eppp_netif_start(esp_netif_t *netif);
void eppp_netif_deinit(esp_netif_t *netif);
/**
* @brief Performs EPPP link task operation (Used for task-less implementation)
* @param netif
* @return
* - ESP_OK on success, ESP_FAIL on failure: the operation shall continue
* - ESP_ERR_TIMEOUT indicates that the operation was requested to stop
*/
esp_err_t eppp_perform(esp_netif_t *netif);
@@ -0,0 +1,11 @@
/*
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "eppp_link.h"
eppp_transport_handle_t eppp_eth_init(struct eppp_config_ethernet_s *config);
void eppp_eth_deinit(eppp_transport_handle_t h);
@@ -0,0 +1,11 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "eppp_link.h"
eppp_transport_handle_t eppp_sdio_init(struct eppp_config_sdio_s *config);
void eppp_sdio_deinit(eppp_transport_handle_t h);
@@ -0,0 +1,11 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "eppp_link.h"
eppp_transport_handle_t eppp_spi_init(struct eppp_config_spi_s *config);
void eppp_spi_deinit(eppp_transport_handle_t h);
@@ -0,0 +1,11 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "eppp_link.h"
eppp_transport_handle_t eppp_uart_init(struct eppp_config_uart_s *config);
void eppp_uart_deinit(eppp_transport_handle_t h);