diff --git a/components/esp_netif/include/esp_netif_defaults.h b/components/esp_netif/include/esp_netif_defaults.h index 414b6c389b..b215aca1dc 100644 --- a/components/esp_netif/include/esp_netif_defaults.h +++ b/components/esp_netif/include/esp_netif_defaults.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -36,9 +36,15 @@ extern "C" { #define ESP_NETIF_DEFAULT_MLDV6_REPORT_FLAGS (0) #endif +#ifdef CONFIG_LWIP_IPV6_AUTOCONFIG +#define ESP_NETIF_DEFAULT_IPV6_AUTOCONFIG_FLAGS (ESP_NETIF_FLAG_IPV6_AUTOCONFIG_ENABLED) +#else +#define ESP_NETIF_DEFAULT_IPV6_AUTOCONFIG_FLAGS (0) +#endif + #define ESP_NETIF_INHERENT_DEFAULT_WIFI_STA() \ { \ - .flags = (esp_netif_flags_t)(ESP_NETIF_IPV4_ONLY_FLAGS(ESP_NETIF_DHCP_CLIENT) | ESP_NETIF_DEFAULT_ARP_FLAGS | ESP_NETIF_DEFAULT_MLDV6_REPORT_FLAGS | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \ + .flags = (esp_netif_flags_t)(ESP_NETIF_IPV4_ONLY_FLAGS(ESP_NETIF_DHCP_CLIENT) | ESP_NETIF_DEFAULT_ARP_FLAGS | ESP_NETIF_DEFAULT_MLDV6_REPORT_FLAGS | ESP_NETIF_FLAG_EVENT_IP_MODIFIED | ESP_NETIF_DEFAULT_IPV6_AUTOCONFIG_FLAGS), \ ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \ ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \ .get_ip_event = IP_EVENT_STA_GOT_IP, \ @@ -78,7 +84,7 @@ extern "C" { #define ESP_NETIF_INHERENT_DEFAULT_ETH() \ { \ - .flags = (esp_netif_flags_t)(ESP_NETIF_IPV4_ONLY_FLAGS(ESP_NETIF_DHCP_CLIENT) | ESP_NETIF_DEFAULT_ARP_FLAGS | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \ + .flags = (esp_netif_flags_t)(ESP_NETIF_IPV4_ONLY_FLAGS(ESP_NETIF_DHCP_CLIENT) | ESP_NETIF_DEFAULT_ARP_FLAGS | ESP_NETIF_FLAG_EVENT_IP_MODIFIED | ESP_NETIF_DEFAULT_IPV6_AUTOCONFIG_FLAGS), \ ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \ ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \ .get_ip_event = IP_EVENT_ETH_GOT_IP, \ @@ -92,7 +98,7 @@ extern "C" { #ifdef CONFIG_PPP_SUPPORT #define ESP_NETIF_INHERENT_DEFAULT_PPP() \ { \ - .flags = ESP_NETIF_FLAG_IS_PPP, \ + .flags = (esp_netif_flags_t)(ESP_NETIF_FLAG_IS_PPP | ESP_NETIF_DEFAULT_IPV6_AUTOCONFIG_FLAGS), \ ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \ ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \ .get_ip_event = IP_EVENT_PPP_GOT_IP, \ diff --git a/components/esp_netif/include/esp_netif_types.h b/components/esp_netif/include/esp_netif_types.h index c9874c5673..84a0628177 100644 --- a/components/esp_netif/include/esp_netif_types.h +++ b/components/esp_netif/include/esp_netif_types.h @@ -178,6 +178,7 @@ typedef enum esp_netif_flags { ESP_NETIF_FLAG_IS_PPP = 1 << 5, ESP_NETIF_FLAG_IS_BRIDGE = 1 << 6, ESP_NETIF_FLAG_MLDV6_REPORT = 1 << 7, + ESP_NETIF_FLAG_IPV6_AUTOCONFIG_ENABLED = 1 << 8, } esp_netif_flags_t; typedef enum esp_netif_ip_event_type { diff --git a/components/esp_netif/lwip/esp_netif_lwip.c b/components/esp_netif/lwip/esp_netif_lwip.c index 20ce5f5d7f..b63577dd71 100644 --- a/components/esp_netif/lwip/esp_netif_lwip.c +++ b/components/esp_netif/lwip/esp_netif_lwip.c @@ -1105,7 +1105,7 @@ static esp_err_t esp_netif_start_api(esp_netif_api_msg_t *msg) ESP_ERROR_CHECK(esp_netif_lwip_add(esp_netif)); #if ESP_IPV6_AUTOCONFIG - esp_netif->lwip_netif->ip6_autoconfig_enabled = 1; + esp_netif->lwip_netif->ip6_autoconfig_enabled = (esp_netif->flags & ESP_NETIF_FLAG_IPV6_AUTOCONFIG_ENABLED) ? 1 : 0; #endif if (esp_netif->flags&ESP_NETIF_FLAG_GARP) { #if ESP_GRATUITOUS_ARP diff --git a/components/esp_netif/lwip/esp_netif_lwip_ppp.c b/components/esp_netif/lwip/esp_netif_lwip_ppp.c index 259ec9f4b7..26e90560e4 100644 --- a/components/esp_netif/lwip/esp_netif_lwip_ppp.c +++ b/components/esp_netif/lwip/esp_netif_lwip_ppp.c @@ -231,7 +231,9 @@ netif_related_data_t * esp_netif_new_ppp(esp_netif_t *esp_netif, const esp_netif #if PPP_NOTIFY_PHASE ppp_set_notify_phase_callback(ppp_obj->ppp, on_ppp_notify_phase); #endif +#if PPP_IPV4_SUPPORT ppp_set_usepeerdns(ppp_obj->ppp, 1); +#endif return (netif_related_data_t *)ppp_obj; } @@ -269,7 +271,7 @@ esp_err_t esp_netif_start_ppp(esp_netif_t *esp_netif) #endif // CONFIG_LWIP_PPP_SERVER_SUPPORT #if ESP_IPV6_AUTOCONFIG - ppp_ctx->ppp->netif->ip6_autoconfig_enabled = 1; + ppp_ctx->ppp->netif->ip6_autoconfig_enabled = (esp_netif->flags & ESP_NETIF_FLAG_IPV6_AUTOCONFIG_ENABLED) ? 1 : 0; #endif ESP_LOGD(TAG, "%s: Starting PPP connection: %p", __func__, ppp_ctx->ppp); diff --git a/components/lwip/Kconfig b/components/lwip/Kconfig index 90ee126201..4af717287b 100644 --- a/components/lwip/Kconfig +++ b/components/lwip/Kconfig @@ -882,24 +882,6 @@ menu "LWIP" default 0x0 if LWIP_TCPIP_TASK_AFFINITY_CPU0 default 0x1 if LWIP_TCPIP_TASK_AFFINITY_CPU1 - - menuconfig LWIP_PPP_SUPPORT - bool "Enable PPP support" - default n - help - Enable PPP stack. Now only PPP over serial is possible. - - config LWIP_PPP_ENABLE_IPV6 - bool "Enable IPV6 support for PPP connections (IPV6CP)" - depends on LWIP_PPP_SUPPORT && LWIP_IPV6 - default y - help - Enable IPV6 support in PPP for the local link between the DTE (processor) and DCE (modem). - There are some modems which do not support the IPV6 addressing in the local link. - If they are requested for IPV6CP negotiation, they may time out. - This would in turn fail the configuration for the whole link. - If your modem is not responding correctly to PPP Phase Network, try to disable IPV6 support. - config LWIP_IPV6_MEMP_NUM_ND6_QUEUE int "Max number of IPv6 packets to queue during MAC resolution" depends on LWIP_IPV6 @@ -916,6 +898,32 @@ menu "LWIP" help Config max number of entries in IPv6 neighbor cache + menuconfig LWIP_PPP_SUPPORT + bool "Enable PPP support" + default n + help + Enable PPP stack. Now only PPP over serial is possible. + + config LWIP_PPP_ENABLE_IPV4 + bool "Enable IPV4 support for PPP connections (IPCP)" + depends on LWIP_PPP_SUPPORT && LWIP_IPV4 + default y + help + Enable IPCP protocol in PPP negotiations, which assigns IPv4 addresses to the PPP client, + as well as IPv4 DNS servers. + You can disable this if your modem supports IPv6 only. + + config LWIP_PPP_ENABLE_IPV6 + bool "Enable IPV6 support for PPP connections (IPV6CP)" + depends on LWIP_PPP_SUPPORT && LWIP_IPV6 + default y + help + Enable IPV6 support in PPP for the local link between the DTE (processor) and DCE (modem). + There are some modems which do not support the IPV6 addressing in the local link. + If they are requested for IPV6CP negotiation, they may time out. + This would in turn fail the configuration for the whole link. + If your modem is not responding correctly to PPP Phase Network, try to disable IPV6 support. + config LWIP_PPP_NOTIFY_PHASE_SUPPORT bool "Enable Notify Phase Callback" depends on LWIP_PPP_SUPPORT diff --git a/components/lwip/port/include/lwipopts.h b/components/lwip/port/include/lwipopts.h index c9a6d57022..d150106f81 100644 --- a/components/lwip/port/include/lwipopts.h +++ b/components/lwip/port/include/lwipopts.h @@ -1080,6 +1080,11 @@ static inline uint32_t timeout_from_offered(uint32_t lease, uint32_t min) */ #define PPP_IPV6_SUPPORT CONFIG_LWIP_PPP_ENABLE_IPV6 +/** + * PPP_IPV4_SUPPORT==1: Enable PPP IPv4 support + */ +#define PPP_IPV4_SUPPORT CONFIG_LWIP_PPP_ENABLE_IPV4 + /** * PPP_NOTIFY_PHASE==1: Support PPP notify phase. */