From 8809589cf74a6d0f7ed27ae84dd44a834bcfc5c8 Mon Sep 17 00:00:00 2001 From: Abhik Roy Date: Fri, 8 Dec 2023 23:40:56 +1100 Subject: [PATCH 1/2] feat(esp_netif): Added code to expose api to add and remove ipv6 address --- components/esp_netif/esp_netif_handlers.c | 4 ++- components/esp_netif/include/esp_netif.h | 28 +++++++++++++++++++ .../esp_netif/loopback/esp_netif_loopback.c | 2 +- components/esp_netif/lwip/esp_netif_lwip.c | 9 +++++- .../private_include/esp_netif_private.h | 16 +---------- 5 files changed, 41 insertions(+), 18 deletions(-) diff --git a/components/esp_netif/esp_netif_handlers.c b/components/esp_netif/esp_netif_handlers.c index 2163e74cb4..19c83afc47 100644 --- a/components/esp_netif/esp_netif_handlers.c +++ b/components/esp_netif/esp_netif_handlers.c @@ -96,6 +96,7 @@ void esp_netif_action_got_ip(void *esp_netif, esp_event_base_t base, int32_t eve IP2STR(&event->ip_info.gw)); } +#if CONFIG_LWIP_IPV6 void esp_netif_action_join_ip6_multicast_group(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data) { ESP_LOGD(TAG, "esp_netif action join_ip6_multicast group with netif%p from event_id=%" PRId32, esp_netif, event_id); @@ -114,7 +115,7 @@ void esp_netif_action_add_ip6_address(void *esp_netif, esp_event_base_t base, in { ESP_LOGD(TAG, "esp_netif action add_ip6_address with netif%p from event_id=%" PRId32, esp_netif, event_id); const ip_event_add_ip6_t *addr = (const ip_event_add_ip6_t *)data; - esp_netif_add_ip6_address(esp_netif, addr); + esp_netif_add_ip6_address_priv(esp_netif, addr); } void esp_netif_action_remove_ip6_address(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data) @@ -123,3 +124,4 @@ void esp_netif_action_remove_ip6_address(void *esp_netif, esp_event_base_t base, const esp_ip6_addr_t *addr = (const esp_ip6_addr_t *)data; esp_netif_remove_ip6_address(esp_netif, addr); } +#endif \ No newline at end of file diff --git a/components/esp_netif/include/esp_netif.h b/components/esp_netif/include/esp_netif.h index e1806bdfa3..08dd63c9d5 100644 --- a/components/esp_netif/include/esp_netif.h +++ b/components/esp_netif/include/esp_netif.h @@ -821,6 +821,34 @@ esp_err_t esp_netif_get_ip6_global(esp_netif_t *esp_netif, esp_ip6_addr_t *if_ip * number of returned IPv6 addresses */ int esp_netif_get_all_ip6(esp_netif_t *esp_netif, esp_ip6_addr_t if_ip6[]); + +/** + * @brief Cause the TCP/IP stack to add an IPv6 address to the interface + * + * @param[in] esp_netif Handle to esp-netif instance + * @param[in] addr The address to be added + * + * @return + * - ESP_OK + * - ESP_ERR_ESP_NETIF_INVALID_PARAMS + * - ESP_ERR_ESP_NETIF_IP6_ADDR_FAILED + * - ESP_ERR_NO_MEM + */ +esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t addr); + +/** + * @brief Cause the TCP/IP stack to remove an IPv6 address from the interface + * + * @param[in] esp_netif Handle to esp-netif instance + * @param[in] addr The address to be removed + * + * @return + * - ESP_OK + * - ESP_ERR_ESP_NETIF_INVALID_PARAMS + * - ESP_ERR_ESP_NETIF_IP6_ADDR_FAILED + * - ESP_ERR_NO_MEM + */ +esp_err_t esp_netif_remove_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t *addr); #endif /** diff --git a/components/esp_netif/loopback/esp_netif_loopback.c b/components/esp_netif/loopback/esp_netif_loopback.c index c894b0c23f..5f5743eb82 100644 --- a/components/esp_netif/loopback/esp_netif_loopback.c +++ b/components/esp_netif/loopback/esp_netif_loopback.c @@ -455,7 +455,7 @@ esp_err_t esp_netif_leave_ip6_multicast_group(esp_netif_t *esp_netif, const esp_ return ESP_ERR_NOT_SUPPORTED; } -esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr) +esp_err_t esp_netif_add_ip6_address_priv(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr) { return ESP_ERR_NOT_SUPPORTED; } diff --git a/components/esp_netif/lwip/esp_netif_lwip.c b/components/esp_netif/lwip/esp_netif_lwip.c index b0bfa50bb1..d2be37ea69 100644 --- a/components/esp_netif/lwip/esp_netif_lwip.c +++ b/components/esp_netif/lwip/esp_netif_lwip.c @@ -2623,9 +2623,16 @@ static esp_err_t esp_netif_add_ip6_address_api(esp_netif_api_msg_t *msg) return error; } -esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr) +esp_err_t esp_netif_add_ip6_address_priv(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr) _RUN_IN_LWIP_TASK(esp_netif_add_ip6_address_api, esp_netif, addr) +esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t addr) +{ + const ip_event_add_ip6_t addr_evt = {.addr = addr, .preferred = true}; + + return esp_netif_add_ip6_address_priv(esp_netif, &addr_evt); +} + static esp_err_t esp_netif_remove_ip6_address_api(esp_netif_api_msg_t *msg) { esp_ip6_addr_t *addr = (esp_ip6_addr_t *)msg->data; diff --git a/components/esp_netif/private_include/esp_netif_private.h b/components/esp_netif/private_include/esp_netif_private.h index 8c80fe1451..085c1548a3 100644 --- a/components/esp_netif/private_include/esp_netif_private.h +++ b/components/esp_netif/private_include/esp_netif_private.h @@ -128,21 +128,7 @@ bool esp_netif_is_netif_listed(esp_netif_t *esp_netif); * - ESP_ERR_ESP_NETIF_IP6_ADDR_FAILED * - ESP_ERR_NO_MEM */ -esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr); - -/** - * @brief Cause the TCP/IP stack to remove an IPv6 address from the interface - * - * @param[in] esp_netif Handle to esp-netif instance - * @param[in] addr The address to be removed - * - * @return - * - ESP_OK - * - ESP_ERR_ESP_NETIF_INVALID_PARAMS - * - ESP_ERR_ESP_NETIF_IP6_ADDR_FAILED - * - ESP_ERR_NO_MEM - */ -esp_err_t esp_netif_remove_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t *addr); +esp_err_t esp_netif_add_ip6_address_priv(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr); /** * @brief Get esp_netif handle based on the if_key From f30d48845894100fef40f894feaed950462dd6fb Mon Sep 17 00:00:00 2001 From: Abhik Roy Date: Thu, 4 Jan 2024 22:51:57 +1100 Subject: [PATCH 2/2] feat(esp_netif): Added preferred flag to esp_netif_add_ip6_address --- components/esp_netif/esp_netif_handlers.c | 2 +- components/esp_netif/include/esp_netif.h | 3 ++- components/esp_netif/loopback/esp_netif_loopback.c | 2 +- components/esp_netif/lwip/esp_netif_lwip.c | 6 +++--- .../esp_netif/private_include/esp_netif_private.h | 14 -------------- 5 files changed, 7 insertions(+), 20 deletions(-) diff --git a/components/esp_netif/esp_netif_handlers.c b/components/esp_netif/esp_netif_handlers.c index 19c83afc47..c2d437e54b 100644 --- a/components/esp_netif/esp_netif_handlers.c +++ b/components/esp_netif/esp_netif_handlers.c @@ -115,7 +115,7 @@ void esp_netif_action_add_ip6_address(void *esp_netif, esp_event_base_t base, in { ESP_LOGD(TAG, "esp_netif action add_ip6_address with netif%p from event_id=%" PRId32, esp_netif, event_id); const ip_event_add_ip6_t *addr = (const ip_event_add_ip6_t *)data; - esp_netif_add_ip6_address_priv(esp_netif, addr); + esp_netif_add_ip6_address(esp_netif, addr->addr, addr->preferred); } void esp_netif_action_remove_ip6_address(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data) diff --git a/components/esp_netif/include/esp_netif.h b/components/esp_netif/include/esp_netif.h index 08dd63c9d5..6dd6601509 100644 --- a/components/esp_netif/include/esp_netif.h +++ b/components/esp_netif/include/esp_netif.h @@ -827,6 +827,7 @@ int esp_netif_get_all_ip6(esp_netif_t *esp_netif, esp_ip6_addr_t if_ip6[]); * * @param[in] esp_netif Handle to esp-netif instance * @param[in] addr The address to be added + * @param[in] preferred The preferred status of the address * * @return * - ESP_OK @@ -834,7 +835,7 @@ int esp_netif_get_all_ip6(esp_netif_t *esp_netif, esp_ip6_addr_t if_ip6[]); * - ESP_ERR_ESP_NETIF_IP6_ADDR_FAILED * - ESP_ERR_NO_MEM */ -esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t addr); +esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t addr, bool preferred); /** * @brief Cause the TCP/IP stack to remove an IPv6 address from the interface diff --git a/components/esp_netif/loopback/esp_netif_loopback.c b/components/esp_netif/loopback/esp_netif_loopback.c index 5f5743eb82..e3687f6195 100644 --- a/components/esp_netif/loopback/esp_netif_loopback.c +++ b/components/esp_netif/loopback/esp_netif_loopback.c @@ -455,7 +455,7 @@ esp_err_t esp_netif_leave_ip6_multicast_group(esp_netif_t *esp_netif, const esp_ return ESP_ERR_NOT_SUPPORTED; } -esp_err_t esp_netif_add_ip6_address_priv(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr) +esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t addr, bool preferred) { return ESP_ERR_NOT_SUPPORTED; } diff --git a/components/esp_netif/lwip/esp_netif_lwip.c b/components/esp_netif/lwip/esp_netif_lwip.c index d2be37ea69..b361289fab 100644 --- a/components/esp_netif/lwip/esp_netif_lwip.c +++ b/components/esp_netif/lwip/esp_netif_lwip.c @@ -2623,12 +2623,12 @@ static esp_err_t esp_netif_add_ip6_address_api(esp_netif_api_msg_t *msg) return error; } -esp_err_t esp_netif_add_ip6_address_priv(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr) +static esp_err_t esp_netif_add_ip6_address_priv(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr) _RUN_IN_LWIP_TASK(esp_netif_add_ip6_address_api, esp_netif, addr) -esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t addr) +esp_err_t esp_netif_add_ip6_address(esp_netif_t *esp_netif, const esp_ip6_addr_t addr, bool preferred) { - const ip_event_add_ip6_t addr_evt = {.addr = addr, .preferred = true}; + const ip_event_add_ip6_t addr_evt = {.addr = addr, .preferred = preferred}; return esp_netif_add_ip6_address_priv(esp_netif, &addr_evt); } diff --git a/components/esp_netif/private_include/esp_netif_private.h b/components/esp_netif/private_include/esp_netif_private.h index 085c1548a3..02426b63b2 100644 --- a/components/esp_netif/private_include/esp_netif_private.h +++ b/components/esp_netif/private_include/esp_netif_private.h @@ -116,20 +116,6 @@ esp_err_t esp_netif_remove_from_list_unsafe(esp_netif_t* netif); */ bool esp_netif_is_netif_listed(esp_netif_t *esp_netif); -/** - * @brief Cause the TCP/IP stack to add an IPv6 address to the interface - * - * @param[in] esp_netif Handle to esp-netif instance - * @param[in] addr The address to be added - * - * @return - * - ESP_OK - * - ESP_ERR_ESP_NETIF_INVALID_PARAMS - * - ESP_ERR_ESP_NETIF_IP6_ADDR_FAILED - * - ESP_ERR_NO_MEM - */ -esp_err_t esp_netif_add_ip6_address_priv(esp_netif_t *esp_netif, const ip_event_add_ip6_t *addr); - /** * @brief Get esp_netif handle based on the if_key * This doesn't lock the list nor TCPIP context