From 2f6c60573eb25fec139fc902c81c7cd66be43900 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Wed, 25 Nov 2020 16:37:36 +0100 Subject: [PATCH] esp_netif: Extend PPP netif API to control connection failure --- components/esp_netif/include/esp_netif_ppp.h | 21 +++++++++++++++++-- components/esp_netif/lwip/esp_netif_lwip.c | 2 +- .../esp_netif/lwip/esp_netif_lwip_ppp.c | 14 ++++++++++++- .../esp_netif/lwip/esp_netif_lwip_ppp.h | 4 ++-- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/components/esp_netif/include/esp_netif_ppp.h b/components/esp_netif/include/esp_netif_ppp.h index 413910c433..159388e80e 100644 --- a/components/esp_netif/include/esp_netif_ppp.h +++ b/components/esp_netif/include/esp_netif_ppp.h @@ -38,6 +38,11 @@ typedef struct esp_netif_ppp_config { */ #define NETIF_PP_PHASE_OFFSET (0x100) +/** @brief event id offset for internal errors + * + */ +#define NETIF_PPP_INTERNAL_ERR_OFFSET (0x200) + /** @brief event ids for different PPP related events * */ @@ -68,6 +73,7 @@ typedef enum { NETIF_PPP_PHASE_RUNNING = NETIF_PP_PHASE_OFFSET + 10, NETIF_PPP_PHASE_TERMINATE = NETIF_PP_PHASE_OFFSET + 11, NETIF_PPP_PHASE_DISCONNECT = NETIF_PP_PHASE_OFFSET + 12, + NETIF_PPP_CONNECT_FAILED = NETIF_PPP_INTERNAL_ERR_OFFSET + 0, } esp_netif_ppp_status_event_t; /** @brief definitions of different authorisation types @@ -89,7 +95,8 @@ typedef enum { * @param[in] user User name * @param[in] passwd Password * - * @return ESP_OK on success, ESP_ERR_ESP_NETIF_INVALID_PARAMS if netif null or not PPP + * @return ESP_OK on success, + * ESP_ERR_ESP_NETIF_INVALID_PARAMS if the supplied netif is not of PPP type, or netif is null */ esp_err_t esp_netif_ppp_set_auth(esp_netif_t *netif, esp_netif_auth_type_t authtype, const char *user, const char *passwd); @@ -98,10 +105,20 @@ esp_err_t esp_netif_ppp_set_auth(esp_netif_t *netif, esp_netif_auth_type_t autht * @param[in] esp_netif Handle to esp-netif instance * @param[in] config Pointer to PPP netif configuration structure * - * @return ESP_OK on success, ESP_ERR_ESP_NETIF_INVALID_PARAMS if netif null or not PPP + * @return ESP_OK on success, + * ESP_ERR_ESP_NETIF_INVALID_PARAMS if the supplied netif is not of PPP type, or netif is null */ esp_err_t esp_netif_ppp_set_params(esp_netif_t *netif, const esp_netif_ppp_config_t *config); +/** @brief Gets parameters configured in the supplied esp-netif. + * + * @param[in] esp_netif Handle to esp-netif instance + * @param[out] config Pointer to PPP netif configuration structure + * + * @return ESP_OK on success, + * ESP_ERR_ESP_NETIF_INVALID_PARAMS if the supplied netif is not of PPP type, or netif is null + */ +esp_err_t esp_netif_ppp_get_params(esp_netif_t *netif, esp_netif_ppp_config_t *config); #ifdef __cplusplus } diff --git a/components/esp_netif/lwip/esp_netif_lwip.c b/components/esp_netif/lwip/esp_netif_lwip.c index 8a9fee5029..2e847146fe 100644 --- a/components/esp_netif/lwip/esp_netif_lwip.c +++ b/components/esp_netif/lwip/esp_netif_lwip.c @@ -786,7 +786,7 @@ esp_err_t esp_netif_start(esp_netif_t *esp_netif) if (_IS_NETIF_POINT2POINT_TYPE(esp_netif, PPP_LWIP_NETIF)) { #if CONFIG_PPP_SUPPORT // No need to start PPP interface in lwip thread - esp_err_t ret = esp_netif_start_ppp(esp_netif->related_data); + esp_err_t ret = esp_netif_start_ppp(esp_netif); if (ret == ESP_OK) { esp_netif_update_default_netif(esp_netif, ESP_NETIF_STARTED); } diff --git a/components/esp_netif/lwip/esp_netif_lwip_ppp.c b/components/esp_netif/lwip/esp_netif_lwip_ppp.c index a0d711e84a..425adfaaae 100644 --- a/components/esp_netif/lwip/esp_netif_lwip_ppp.c +++ b/components/esp_netif/lwip/esp_netif_lwip_ppp.c @@ -296,8 +296,9 @@ netif_related_data_t * esp_netif_new_ppp(esp_netif_t *esp_netif, const esp_netif return (netif_related_data_t *)ppp_obj; } -esp_err_t esp_netif_start_ppp(netif_related_data_t *netif_related) +esp_err_t esp_netif_start_ppp(esp_netif_t *esp_netif) { + netif_related_data_t *netif_related = esp_netif->related_data; lwip_peer2peer_ctx_t *ppp_ctx = (lwip_peer2peer_ctx_t *)netif_related; assert(ppp_ctx->base.netif_type == PPP_LWIP_NETIF); @@ -305,6 +306,9 @@ esp_err_t esp_netif_start_ppp(netif_related_data_t *netif_related) esp_err_t err = pppapi_connect(ppp_ctx->ppp, 0); if (err != ESP_OK) { ESP_LOGE(TAG, "%s: PPP connection cannot be started", __func__); + if (ppp_ctx->ppp_error_event_enabled) { + esp_event_post(NETIF_PPP_STATUS, NETIF_PPP_CONNECT_FAILED, esp_netif, sizeof(esp_netif), 0); + } return ESP_FAIL; } return ESP_OK; @@ -349,4 +353,12 @@ esp_err_t esp_netif_ppp_set_params(esp_netif_t *netif, const esp_netif_ppp_confi return ESP_OK; } +esp_err_t esp_netif_ppp_get_params(esp_netif_t *netif, esp_netif_ppp_config_t *config) +{ + struct lwip_peer2peer_ctx *obj = (struct lwip_peer2peer_ctx *)netif->related_data; + config->ppp_phase_event_enabled = obj->ppp_phase_event_enabled; + config->ppp_error_event_enabled = obj->ppp_error_event_enabled; + return ESP_OK; +} + #endif /* CONFIG_ESP_NETIF_TCPIP_LWIP */ diff --git a/components/esp_netif/lwip/esp_netif_lwip_ppp.h b/components/esp_netif/lwip/esp_netif_lwip_ppp.h index 1d3b7061d5..b579eb80a8 100644 --- a/components/esp_netif/lwip/esp_netif_lwip_ppp.h +++ b/components/esp_netif/lwip/esp_netif_lwip_ppp.h @@ -32,12 +32,12 @@ netif_related_data_t * esp_netif_new_ppp(esp_netif_t *esp_netif, const esp_netif /** * @brief Creates new PPP related structure * - * @param[in] netif_related pointer to internal ppp context instance + * @param[in] esp_netif pointer esp-netif instance * * @return * - ESP_OK on success */ -esp_err_t esp_netif_start_ppp(netif_related_data_t *netif_related); +esp_err_t esp_netif_start_ppp(esp_netif_t *esp_netif); /** * @brief Data path API to input incoming packets to PPP