diff --git a/components/esp_netif/lwip/esp_netif_lwip.c b/components/esp_netif/lwip/esp_netif_lwip.c index 134a74e176..3879f6c5f5 100644 --- a/components/esp_netif/lwip/esp_netif_lwip.c +++ b/components/esp_netif/lwip/esp_netif_lwip.c @@ -649,6 +649,9 @@ static esp_err_t esp_netif_start_api(esp_netif_api_msg_t *msg) #endif } struct netif *p_netif = esp_netif->lwip_netif; + if (_IS_NETIF_POINT2POINT_TYPE(esp_netif, SLIP_LWIP_NETIF)) { + esp_netif_start_slip(esp_netif); + } if (esp_netif->flags&ESP_NETIF_FLAG_AUTOUP) { ESP_LOGD(TAG, "%s Setting the lwip netif%p UP", __func__, p_netif); netif_set_up(p_netif); diff --git a/components/esp_netif/lwip/esp_netif_lwip_slip.c b/components/esp_netif/lwip/esp_netif_lwip_slip.c index 990fbc84b9..69471c8b3a 100644 --- a/components/esp_netif/lwip/esp_netif_lwip_slip.c +++ b/components/esp_netif/lwip/esp_netif_lwip_slip.c @@ -73,7 +73,7 @@ netif_related_data_t * esp_netif_new_slip(esp_netif_t *esp_netif, const esp_neti */ esp_err_t esp_netif_stop_slip(esp_netif_t *esp_netif) { - lwip_slip_ctx_t *slip_ctx = (lwip_slip_ctx_t *)esp_netif; + lwip_slip_ctx_t *slip_ctx = (lwip_slip_ctx_t *)esp_netif->related_data; assert(slip_ctx->base.netif_type == SLIP_LWIP_NETIF); ESP_LOGI(TAG, "%s: Stopped SLIP connection: %p", __func__, slip_ctx); @@ -84,6 +84,26 @@ esp_err_t esp_netif_stop_slip(esp_netif_t *esp_netif) return ESP_OK; } +/** + * @brief Starts the SLIP interface + */ +esp_err_t esp_netif_start_slip(esp_netif_t *esp_netif) +{ + lwip_slip_ctx_t *slip_ctx = (lwip_slip_ctx_t *)esp_netif->related_data; + assert(slip_ctx->base.netif_type == SLIP_LWIP_NETIF); + + ESP_LOGI(TAG, "%s: Starting SLIP interface: %p", __func__, slip_ctx); + + // Set the netif up + netif_set_up(esp_netif->lwip_netif); + netif_set_link_up(esp_netif->lwip_netif); + int8_t addr_index = 0; + + netif_ip6_addr_set(esp_netif->lwip_netif, addr_index, (ip6_addr_t *)&slip_ctx->addr); + netif_ip6_addr_set_state(esp_netif->lwip_netif, addr_index, IP6_ADDR_VALID); + return ESP_OK; +} + /** * @brief Sets paramaters for the supplied netif @@ -230,10 +250,7 @@ err_t esp_slipif_init(struct netif *netif) // Store netif index in net interface for SIO open command to abstract the dev netif->state = (void *)esp_index; - err_t err = slipif_init(netif); - netif_set_up(netif); - netif_set_link_up(netif); - return err; + return slipif_init(netif); } static const struct esp_netif_netstack_config s_netif_config_slip = { diff --git a/components/esp_netif/lwip/esp_netif_lwip_slip.h b/components/esp_netif/lwip/esp_netif_lwip_slip.h index 8d6c55ad04..e8f9ae3264 100644 --- a/components/esp_netif/lwip/esp_netif_lwip_slip.h +++ b/components/esp_netif/lwip/esp_netif_lwip_slip.h @@ -44,5 +44,15 @@ void esp_netif_destroy_slip(netif_related_data_t *slip); */ esp_err_t esp_netif_stop_slip(esp_netif_t *esp_netif); +/** + * @brief Start the esp slip netif + * + * @param[in] esp_netif handle to slip esp-netif instance + * + * @return + * - ESP_OK on success + */ +esp_err_t esp_netif_start_slip(esp_netif_t *esp_netif); + #endif // _ESP_NETIF_LWIP_SLIP_H_ diff --git a/examples/protocols/slip/slip_udp/main/slip_client_main.c b/examples/protocols/slip/slip_udp/main/slip_client_main.c index 2fdab88007..be169a63a6 100644 --- a/examples/protocols/slip/slip_udp/main/slip_client_main.c +++ b/examples/protocols/slip/slip_udp/main/slip_client_main.c @@ -198,7 +198,7 @@ esp_netif_t *slip_if_init(void) esp_netif_slip_config_t slip_config; IP6_ADDR(&slip_config.ip6_addr, - lwip_htonl(0xfd000000), + lwip_htonl(0xfd0000), lwip_htonl(0x00000000), lwip_htonl(0x00000000), lwip_htonl(0x00000001)