From fd402bfb177c4ad861a8337c38fbd96d1b98eb8d Mon Sep 17 00:00:00 2001 From: "Zhibin (Ryan) Wen" Date: Tue, 24 Mar 2026 15:32:27 +0800 Subject: [PATCH] feat(openthread): make esp_netif glue optional Signed-off-by: Zhibin (Ryan) Wen --- components/openthread/Kconfig | 13 ++++++++-- .../openthread-core-esp32x-ftd-config.h | 25 +++++++++++-------- .../openthread-core-esp32x-mtd-config.h | 25 +++++++++++-------- components/openthread/src/esp_openthread.cpp | 4 +-- .../src/esp_openthread_netif_glue.c | 2 -- .../src/port/esp_openthread_state.c | 2 ++ components/openthread/srcs_ftd_mtd.cmake | 6 +++++ 7 files changed, 51 insertions(+), 26 deletions(-) diff --git a/components/openthread/Kconfig b/components/openthread/Kconfig index 12a5066d16..8e0d219e66 100644 --- a/components/openthread/Kconfig +++ b/components/openthread/Kconfig @@ -249,7 +249,7 @@ menu "OpenThread" config OPENTHREAD_BORDER_ROUTER bool "Enable Border Router" - depends on OPENTHREAD_FTD + depends on OPENTHREAD_FTD && OPENTHREAD_PLATFORM_NETIF default n help Select this option to enable border router features in OpenThread. @@ -299,7 +299,7 @@ menu "OpenThread" config OPENTHREAD_DNS64_CLIENT bool "Enable DNS64 Client" - depends on LWIP_IPV4 + depends on LWIP_IPV4 && OPENTHREAD_PLATFORM_NETIF select LWIP_HOOK_DNS_EXTERNAL_RESOLVE_SELECT_CUSTOM default n help @@ -508,6 +508,15 @@ menu "OpenThread" failure. endmenu + config OPENTHREAD_PLATFORM_NETIF + bool "Enable esp_netif/lwIP glue" + depends on OPENTHREAD_FTD || OPENTHREAD_MTD + default y + help + Enable the default ESP-IDF OpenThread integration which creates an + OpenThread esp_netif, attaches the esp_netif glue, and enables + lwIP-specific DNS/netif handling. + endmenu menu "Thread Log" diff --git a/components/openthread/private_include/openthread-core-esp32x-ftd-config.h b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h index 82d474aff8..32a3a33795 100644 --- a/components/openthread/private_include/openthread-core-esp32x-ftd-config.h +++ b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h @@ -454,6 +454,21 @@ #endif #define OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_MARGIN CONFIG_OPENTHREAD_PARENT_SEARCH_RSS_MARGIN +/** + * @def OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE + * + * Define to 1 to enable platform NETIF support. + * + */ +#ifdef OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE +#error `OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE` is redefined. +#endif +#ifdef CONFIG_OPENTHREAD_PLATFORM_NETIF +#ifndef OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE +#define OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE 1 +#endif +#endif + /*----The following options set fixed default values but can be overridden by the user header file.----*/ #if CONFIG_OPENTHREAD_BORDER_ROUTER @@ -703,16 +718,6 @@ #define OPENTHREAD_CONFIG_COAP_API_ENABLE 1 #endif -/** - * @def OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE - * - * Define to 1 to enable platform NETIF support. - * - */ -#ifndef OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE -#define OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE 1 -#endif - /** * @def OPENTHREAD_CONFIG_HEAP_EXTERNAL_ENABLE * diff --git a/components/openthread/private_include/openthread-core-esp32x-mtd-config.h b/components/openthread/private_include/openthread-core-esp32x-mtd-config.h index f631a157d5..1d3997c7e1 100644 --- a/components/openthread/private_include/openthread-core-esp32x-mtd-config.h +++ b/components/openthread/private_include/openthread-core-esp32x-mtd-config.h @@ -245,6 +245,21 @@ #endif #define OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT CONFIG_OPENTHREAD_MAC_MAX_CSMA_BACKOFFS_DIRECT +/** + * @def OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE + * + * Define to 1 to enable platform NETIF support. + * + */ +#ifdef OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE +#error `OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE` is redefined. +#endif +#ifdef CONFIG_OPENTHREAD_PLATFORM_NETIF +#ifndef OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE +#define OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE 1 +#endif +#endif + /*----The following options set fixed default values but can be overridden by the user header file.----*/ /** @@ -257,16 +272,6 @@ #define OPENTHREAD_CONFIG_COAP_API_ENABLE 1 #endif -/** - * @def OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE - * - * Define to 1 to enable platform NETIF support. - * - */ -#ifndef OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE -#define OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE 1 -#endif - /** * @def OPENTHREAD_CONFIG_PLATFORM_ASSERT_MANAGEMENT * diff --git a/components/openthread/src/esp_openthread.cpp b/components/openthread/src/esp_openthread.cpp index 311617f6a0..61f3ceae2d 100644 --- a/components/openthread/src/esp_openthread.cpp +++ b/components/openthread/src/esp_openthread.cpp @@ -253,7 +253,7 @@ static void ot_task_worker(void *aContext) // Initialize the OpenThread stack ESP_ERROR_CHECK(esp_openthread_init(&(config->platform_config))); -#if CONFIG_OPENTHREAD_FTD || CONFIG_OPENTHREAD_MTD +#if CONFIG_OPENTHREAD_PLATFORM_NETIF esp_netif_t *openthread_netif = esp_netif_new(&(config->netif_config)); assert(openthread_netif != NULL); ESP_ERROR_CHECK(esp_netif_attach(openthread_netif, esp_openthread_netif_glue_init(&(config->platform_config)))); @@ -285,7 +285,7 @@ static void ot_task_worker(void *aContext) esp_openthread_cli_console_command_unregister(); #endif // CONFIG_OPENTHREAD_CLI -#if CONFIG_OPENTHREAD_FTD || CONFIG_OPENTHREAD_MTD +#if CONFIG_OPENTHREAD_PLATFORM_NETIF // Clean up esp_openthread_netif_glue_deinit(); esp_netif_destroy(openthread_netif); diff --git a/components/openthread/src/esp_openthread_netif_glue.c b/components/openthread/src/esp_openthread_netif_glue.c index 35dd8db149..fc371d4849 100644 --- a/components/openthread/src/esp_openthread_netif_glue.c +++ b/components/openthread/src/esp_openthread_netif_glue.c @@ -46,8 +46,6 @@ static esp_openthread_netif_glue_t s_openthread_netif_glue = { .event_fd = -1, }; -ESP_EVENT_DEFINE_BASE(OPENTHREAD_EVENT); - static QueueHandle_t s_packet_queue; static esp_netif_t *s_openthread_netif; static const char *netif_glue_workflow = "netif_glue"; diff --git a/components/openthread/src/port/esp_openthread_state.c b/components/openthread/src/port/esp_openthread_state.c index c3724773bd..d106d39778 100644 --- a/components/openthread/src/port/esp_openthread_state.c +++ b/components/openthread/src/port/esp_openthread_state.c @@ -21,6 +21,8 @@ #define TAG "OT_STATE" +ESP_EVENT_DEFINE_BASE(OPENTHREAD_EVENT); + #if CONFIG_OPENTHREAD_BORDER_ROUTER static void handle_ot_border_router_state_changed(otInstance* instance) { diff --git a/components/openthread/srcs_ftd_mtd.cmake b/components/openthread/srcs_ftd_mtd.cmake index 4d6c2fab63..bae3a44fa8 100644 --- a/components/openthread/srcs_ftd_mtd.cmake +++ b/components/openthread/srcs_ftd_mtd.cmake @@ -107,6 +107,12 @@ if(NOT CONFIG_OPENTHREAD_DNS64_CLIENT) "src/esp_openthread_dns64.c") endif() +if(NOT CONFIG_OPENTHREAD_PLATFORM_NETIF) + list(APPEND exclude_srcs + "src/esp_openthread_lwip_netif.c" + "src/esp_openthread_netif_glue.c") +endif() + if(NOT CONFIG_FREERTOS_USE_TICKLESS_IDLE) list(APPEND exclude_srcs "src/port/esp_openthread_sleep.c")