diff --git a/components/lwip/Kconfig b/components/lwip/Kconfig index 95c1c72f39..843cb90289 100644 --- a/components/lwip/Kconfig +++ b/components/lwip/Kconfig @@ -1024,6 +1024,26 @@ menu "LWIP" endchoice + choice LWIP_HOOK_IP6_SELECT_SRC_ADDR + prompt "IPv6 source address selection Hook" + depends on LWIP_IPV6 + default LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE + help + Enables custom IPv6 source address selection. + Setting this to "default" provides weak implementation + stub that could be overwritten in application code. + Setting this to "custom" provides hook's declaration + only and expects the application to implement it. + + config LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE + bool "No hook declared" + config LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT + bool "Default (weak) implementation" + config LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM + bool "Custom implementation" + + endchoice + choice LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE prompt "Netconn external resolve Hook" default LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT if OPENTHREAD_DNS64_CLIENT diff --git a/components/lwip/lwip b/components/lwip/lwip index dafc822531..57c29648ff 160000 --- a/components/lwip/lwip +++ b/components/lwip/lwip @@ -1 +1 @@ -Subproject commit dafc8225313a1ce00fb0b497d09f43ec7073857d +Subproject commit 57c29648ff40e2a19a51683717928aaf766a0495 diff --git a/components/lwip/port/hooks/lwip_default_hooks.c b/components/lwip/port/hooks/lwip_default_hooks.c index 2e92d36458..251aae0f48 100644 --- a/components/lwip/port/hooks/lwip_default_hooks.c +++ b/components/lwip/port/hooks/lwip_default_hooks.c @@ -41,7 +41,17 @@ const ip6_addr_t *__weak lwip_hook_nd6_get_gw(struct netif *netif, const ip6_add LWIP_UNUSED_ARG(netif); LWIP_UNUSED_ARG(dest); - return 0; + return NULL; +} +#endif + +#ifdef CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT +const ip_addr_t *__weak lwip_hook_ip6_select_source_address(struct netif *netif, const ip6_addr_t *dest) +{ + LWIP_UNUSED_ARG(netif); + LWIP_UNUSED_ARG(dest); + + return NULL; } #endif diff --git a/components/lwip/port/include/lwip_default_hooks.h b/components/lwip/port/include/lwip_default_hooks.h index 6c273bd3ab..bdc54064a9 100644 --- a/components/lwip/port/include/lwip_default_hooks.h +++ b/components/lwip/port/include/lwip_default_hooks.h @@ -43,6 +43,12 @@ const ip6_addr_t *lwip_hook_nd6_get_gw(struct netif *netif, const ip6_addr_t *de #define LWIP_HOOK_ND6_GET_GW lwip_hook_nd6_get_gw #endif /* CONFIG_LWIP_HOOK_ND6_GET_GATEWAY... */ +#if defined(CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM) || defined(CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT) +const ip_addr_t *lwip_hook_ip6_select_source_address(struct netif *netif, const ip6_addr_t *dest); + +#define LWIP_HOOK_IP6_SELECT_SRC_ADDR lwip_hook_ip6_select_source_address +#endif /* CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR... */ + #if defined(CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM) || defined(CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT) int lwip_hook_netconn_external_resolve(const char *name, ip_addr_t *addr, u8_t addrtype, err_t *err);