esp_netif: Extend PPP netif API to control connection failure

This commit is contained in:
David Cermak
2020-11-25 16:37:36 +01:00
parent ef75b5a188
commit 2f6c60573e
4 changed files with 35 additions and 6 deletions

View File

@@ -38,6 +38,11 @@ typedef struct esp_netif_ppp_config {
*/ */
#define NETIF_PP_PHASE_OFFSET (0x100) #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 /** @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_RUNNING = NETIF_PP_PHASE_OFFSET + 10,
NETIF_PPP_PHASE_TERMINATE = NETIF_PP_PHASE_OFFSET + 11, NETIF_PPP_PHASE_TERMINATE = NETIF_PP_PHASE_OFFSET + 11,
NETIF_PPP_PHASE_DISCONNECT = NETIF_PP_PHASE_OFFSET + 12, 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; } esp_netif_ppp_status_event_t;
/** @brief definitions of different authorisation types /** @brief definitions of different authorisation types
@@ -89,7 +95,8 @@ typedef enum {
* @param[in] user User name * @param[in] user User name
* @param[in] passwd Password * @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); 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] esp_netif Handle to esp-netif instance
* @param[in] config Pointer to PPP netif configuration structure * @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); 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 #ifdef __cplusplus
} }

View File

@@ -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 (_IS_NETIF_POINT2POINT_TYPE(esp_netif, PPP_LWIP_NETIF)) {
#if CONFIG_PPP_SUPPORT #if CONFIG_PPP_SUPPORT
// No need to start PPP interface in lwip thread // 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) { if (ret == ESP_OK) {
esp_netif_update_default_netif(esp_netif, ESP_NETIF_STARTED); esp_netif_update_default_netif(esp_netif, ESP_NETIF_STARTED);
} }

View File

@@ -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; 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; lwip_peer2peer_ctx_t *ppp_ctx = (lwip_peer2peer_ctx_t *)netif_related;
assert(ppp_ctx->base.netif_type == PPP_LWIP_NETIF); 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); esp_err_t err = pppapi_connect(ppp_ctx->ppp, 0);
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) {
esp_event_post(NETIF_PPP_STATUS, NETIF_PPP_CONNECT_FAILED, esp_netif, sizeof(esp_netif), 0);
}
return ESP_FAIL; return ESP_FAIL;
} }
return ESP_OK; 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; 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 */ #endif /* CONFIG_ESP_NETIF_TCPIP_LWIP */

View File

@@ -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 * @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 * @return
* - ESP_OK on success * - 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 * @brief Data path API to input incoming packets to PPP