mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
feat(lwip): Add support for PPP server
Added support PPP_SERVER option in LWIP Added support for configuring preferred addresses of PPP endpoints.
This commit is contained in:
parent
c143e68c9f
commit
a9265db5f1
@ -28,6 +28,10 @@ typedef struct esp_netif_ppp_config {
|
|||||||
* The current session must be closed, settings will be applied upon connecting.
|
* The current session must be closed, settings will be applied upon connecting.
|
||||||
* */
|
* */
|
||||||
#endif // CONFIG_LWIP_ENABLE_LCP_ECHO
|
#endif // CONFIG_LWIP_ENABLE_LCP_ECHO
|
||||||
|
#ifdef CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
uint32_t ppp_our_ip4_addr; /**< Set our preferred address, typically used when we're the PPP server */
|
||||||
|
uint32_t ppp_their_ip4_addr; /**< Set our preferred address, typically used when we're the PPP server */
|
||||||
|
#endif // CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
} esp_netif_ppp_config_t;
|
} esp_netif_ppp_config_t;
|
||||||
|
|
||||||
/** @brief event id offset for PHASE related events
|
/** @brief event id offset for PHASE related events
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -33,6 +33,10 @@ typedef struct lwip_peer2peer_ctx {
|
|||||||
bool ppp_error_event_enabled;
|
bool ppp_error_event_enabled;
|
||||||
#ifdef CONFIG_LWIP_ENABLE_LCP_ECHO
|
#ifdef CONFIG_LWIP_ENABLE_LCP_ECHO
|
||||||
bool ppp_lcp_echo_disabled;
|
bool ppp_lcp_echo_disabled;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
uint32_t ppp_our_ip4_addr; // our desired IP (0 if no preference)
|
||||||
|
uint32_t ppp_their_ip4_addr; // their desired IP (0 if no preference)
|
||||||
#endif
|
#endif
|
||||||
ppp_pcb *ppp;
|
ppp_pcb *ppp;
|
||||||
} lwip_peer2peer_ctx_t;
|
} lwip_peer2peer_ctx_t;
|
||||||
@ -247,13 +251,29 @@ esp_err_t esp_netif_start_ppp(esp_netif_t *esp_netif)
|
|||||||
ppp_ctx->ppp->settings.lcp_echo_fails = LCP_MAXECHOFAILS;
|
ppp_ctx->ppp->settings.lcp_echo_fails = LCP_MAXECHOFAILS;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
if (ppp_ctx->ppp_our_ip4_addr != 0) {
|
||||||
|
// Set our preferred address, and accept the remote
|
||||||
|
ppp_ctx->ppp->ipcp_wantoptions.ouraddr = ppp_ctx->ppp_our_ip4_addr;
|
||||||
|
ppp_ctx->ppp->ipcp_wantoptions.accept_remote = 1;
|
||||||
|
}
|
||||||
|
if (ppp_ctx->ppp_their_ip4_addr != 0) {
|
||||||
|
// Set their preferred address, and accept the local
|
||||||
|
ppp_ctx->ppp->ipcp_wantoptions.hisaddr = ppp_ctx->ppp_their_ip4_addr;
|
||||||
|
ppp_ctx->ppp->ipcp_wantoptions.accept_local = 1;
|
||||||
|
}
|
||||||
|
#endif // CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
|
||||||
#if ESP_IPV6_AUTOCONFIG
|
#if ESP_IPV6_AUTOCONFIG
|
||||||
ppp_ctx->ppp->netif->ip6_autoconfig_enabled = 1;
|
ppp_ctx->ppp->netif->ip6_autoconfig_enabled = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ESP_LOGD(TAG, "%s: Starting PPP connection: %p", __func__, ppp_ctx->ppp);
|
ESP_LOGD(TAG, "%s: Starting PPP connection: %p", __func__, ppp_ctx->ppp);
|
||||||
|
#ifdef CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
esp_err_t err = ppp_listen(ppp_ctx->ppp);
|
||||||
|
#else
|
||||||
err_t err = ppp_connect(ppp_ctx->ppp, 0);
|
err_t err = ppp_connect(ppp_ctx->ppp, 0);
|
||||||
|
#endif
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
ESP_LOGE(TAG, "%s: PPP connection cannot be started", __func__);
|
ESP_LOGE(TAG, "%s: PPP connection cannot be started", __func__);
|
||||||
if (ppp_ctx->ppp_error_event_enabled) {
|
if (ppp_ctx->ppp_error_event_enabled) {
|
||||||
@ -308,6 +328,10 @@ esp_err_t esp_netif_ppp_set_params(esp_netif_t *netif, const esp_netif_ppp_confi
|
|||||||
obj->ppp_error_event_enabled = config->ppp_error_event_enabled;
|
obj->ppp_error_event_enabled = config->ppp_error_event_enabled;
|
||||||
#ifdef CONFIG_LWIP_ENABLE_LCP_ECHO
|
#ifdef CONFIG_LWIP_ENABLE_LCP_ECHO
|
||||||
obj->ppp_lcp_echo_disabled = config->ppp_lcp_echo_disabled;
|
obj->ppp_lcp_echo_disabled = config->ppp_lcp_echo_disabled;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
obj->ppp_our_ip4_addr = config->ppp_our_ip4_addr;
|
||||||
|
obj->ppp_their_ip4_addr = config->ppp_their_ip4_addr;
|
||||||
#endif
|
#endif
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
@ -324,5 +348,10 @@ esp_err_t esp_netif_ppp_get_params(esp_netif_t *netif, esp_netif_ppp_config_t *c
|
|||||||
#ifdef CONFIG_LWIP_ENABLE_LCP_ECHO
|
#ifdef CONFIG_LWIP_ENABLE_LCP_ECHO
|
||||||
config->ppp_lcp_echo_disabled = obj->ppp_lcp_echo_disabled;
|
config->ppp_lcp_echo_disabled = obj->ppp_lcp_echo_disabled;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
config->ppp_our_ip4_addr = obj->ppp_our_ip4_addr;
|
||||||
|
config->ppp_their_ip4_addr = obj->ppp_their_ip4_addr;
|
||||||
|
#endif
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
@ -952,6 +952,13 @@ menu "LWIP"
|
|||||||
help
|
help
|
||||||
Enable Microsoft Point-to-Point Encryption (MPPE) support
|
Enable Microsoft Point-to-Point Encryption (MPPE) support
|
||||||
|
|
||||||
|
config LWIP_PPP_SERVER_SUPPORT
|
||||||
|
bool "Enable PPP server support"
|
||||||
|
depends on LWIP_PPP_SUPPORT
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Enable to use PPP server
|
||||||
|
|
||||||
config LWIP_ENABLE_LCP_ECHO
|
config LWIP_ENABLE_LCP_ECHO
|
||||||
bool "Enable LCP ECHO"
|
bool "Enable LCP ECHO"
|
||||||
depends on LWIP_PPP_SUPPORT
|
depends on LWIP_PPP_SUPPORT
|
||||||
|
@ -1105,6 +1105,11 @@ static inline uint32_t timeout_from_offered(uint32_t lease, uint32_t min)
|
|||||||
*/
|
*/
|
||||||
#define MPPE_SUPPORT CONFIG_LWIP_PPP_MPPE_SUPPORT
|
#define MPPE_SUPPORT CONFIG_LWIP_PPP_MPPE_SUPPORT
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PPP_SERVER==1: Enable PPP server support (waiting for incoming PPP session).
|
||||||
|
*/
|
||||||
|
#define PPP_SERVER CONFIG_LWIP_PPP_SERVER_SUPPORT
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PPP_MAXIDLEFLAG: Max Xmit idle time (in ms) before resend flag char.
|
* PPP_MAXIDLEFLAG: Max Xmit idle time (in ms) before resend flag char.
|
||||||
* TODO: If PPP_MAXIDLEFLAG > 0 and next package is send during PPP_MAXIDLEFLAG time,
|
* TODO: If PPP_MAXIDLEFLAG > 0 and next package is send during PPP_MAXIDLEFLAG time,
|
||||||
|
Loading…
Reference in New Issue
Block a user