esp_netif: address failures on tcpip-task ipc call, deinit lwip netif and ip address issues
This commit is contained in:
parent
3a19bf055d
commit
eb94d87935
4 changed files with 94 additions and 52 deletions
|
@ -23,6 +23,9 @@
|
||||||
#if __has_include("esp_mesh.h")
|
#if __has_include("esp_mesh.h")
|
||||||
#include "esp_mesh.h"
|
#include "esp_mesh.h"
|
||||||
#endif
|
#endif
|
||||||
|
#if __has_include("esp_netif_types.h")
|
||||||
|
#include "esp_netif_types.h"
|
||||||
|
#endif
|
||||||
#if __has_include("esp_now.h")
|
#if __has_include("esp_now.h")
|
||||||
#include "esp_now.h"
|
#include "esp_now.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,9 +53,6 @@
|
||||||
#if __has_include("nvs.h")
|
#if __has_include("nvs.h")
|
||||||
#include "nvs.h"
|
#include "nvs.h"
|
||||||
#endif
|
#endif
|
||||||
#if __has_include("esp_netif.h")
|
|
||||||
#include "esp_netif.h"
|
|
||||||
#endif
|
|
||||||
#if __has_include("ulp_common.h")
|
#if __has_include("ulp_common.h")
|
||||||
#include "ulp_common.h"
|
#include "ulp_common.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -454,30 +454,33 @@ static const esp_err_msg_t esp_err_msg_table[] = {
|
||||||
# ifdef ESP_ERR_MESH_VOTING
|
# ifdef ESP_ERR_MESH_VOTING
|
||||||
ERR_TBL_IT(ESP_ERR_MESH_VOTING), /* 16406 0x4016 */
|
ERR_TBL_IT(ESP_ERR_MESH_VOTING), /* 16406 0x4016 */
|
||||||
# endif
|
# endif
|
||||||
// components/tcpip_adapter/include/tcpip_adapter.h
|
// components/esp_netif/include/esp_netif_types.h
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_BASE
|
# ifdef ESP_ERR_ESP_NETIF_BASE
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_BASE), /* 20480 0x5000 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_BASE), /* 20480 0x5000 */
|
||||||
# endif
|
# endif
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS
|
# ifdef ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS), /* 20481 0x5001 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_INVALID_PARAMS), /* 20481 0x5001 */
|
||||||
# endif
|
# endif
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY
|
# ifdef ESP_ERR_ESP_NETIF_IF_NOT_READY
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY), /* 20482 0x5002 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_IF_NOT_READY), /* 20482 0x5002 */
|
||||||
# endif
|
# endif
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED
|
# ifdef ESP_ERR_ESP_NETIF_DHCPC_START_FAILED
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED), /* 20483 0x5003 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_DHCPC_START_FAILED), /* 20483 0x5003 */
|
||||||
# endif
|
# endif
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED
|
# ifdef ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED), /* 20484 0x5004 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED), /* 20484 0x5004 */
|
||||||
# endif
|
# endif
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED
|
# ifdef ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED), /* 20485 0x5005 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED), /* 20485 0x5005 */
|
||||||
# endif
|
# endif
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_NO_MEM
|
# ifdef ESP_ERR_ESP_NETIF_NO_MEM
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_NO_MEM), /* 20486 0x5006 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_NO_MEM), /* 20486 0x5006 */
|
||||||
# endif
|
# endif
|
||||||
# ifdef ESP_ERR_TCPIP_ADAPTER_DHCP_NOT_STOPPED
|
# ifdef ESP_ERR_ESP_NETIF_DHCP_NOT_STOPPED
|
||||||
ERR_TBL_IT(ESP_ERR_TCPIP_ADAPTER_DHCP_NOT_STOPPED), /* 20487 0x5007 */
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_DHCP_NOT_STOPPED), /* 20487 0x5007 */
|
||||||
|
# endif
|
||||||
|
# ifdef ESP_ERR_ESP_NETIF_DRIVER_ATACH_FAILED
|
||||||
|
ERR_TBL_IT(ESP_ERR_ESP_NETIF_DRIVER_ATACH_FAILED), /* 20488 0x5008 */
|
||||||
# endif
|
# endif
|
||||||
// components/esp_common/include/esp_err.h
|
// components/esp_common/include/esp_err.h
|
||||||
# ifdef ESP_ERR_FLASH_BASE
|
# ifdef ESP_ERR_FLASH_BASE
|
||||||
|
|
|
@ -159,12 +159,12 @@ static void eth_check_link_timer_cb(TimerHandle_t xTimer)
|
||||||
|
|
||||||
static esp_err_t esp_eth_driver_start(esp_netif_t * esp_netif, void * args)
|
static esp_err_t esp_eth_driver_start(esp_netif_t * esp_netif, void * args)
|
||||||
{
|
{
|
||||||
|
uint8_t eth_mac[6];
|
||||||
esp_err_t ret = ESP_OK;
|
esp_err_t ret = ESP_OK;
|
||||||
esp_eth_driver_t *eth_driver = args;
|
esp_eth_driver_t *eth_driver = args;
|
||||||
eth_driver->base.netif = esp_netif;
|
eth_driver->base.netif = esp_netif;
|
||||||
|
|
||||||
// Set driver related config to esp-netif
|
// Set driver related config to esp-netif
|
||||||
|
|
||||||
esp_netif_driver_ifconfig_t driver_ifconfig = {
|
esp_netif_driver_ifconfig_t driver_ifconfig = {
|
||||||
.handle = eth_driver,
|
.handle = eth_driver,
|
||||||
.transmit = esp_eth_transmit,
|
.transmit = esp_eth_transmit,
|
||||||
|
@ -172,7 +172,6 @@ static esp_err_t esp_eth_driver_start(esp_netif_t * esp_netif, void * args)
|
||||||
};
|
};
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_netif_set_driver_config(esp_netif, &driver_ifconfig));
|
ESP_ERROR_CHECK(esp_netif_set_driver_config(esp_netif, &driver_ifconfig));
|
||||||
uint8_t eth_mac[6];
|
|
||||||
esp_eth_ioctl(eth_driver, ETH_CMD_G_MAC_ADDR, eth_mac);
|
esp_eth_ioctl(eth_driver, ETH_CMD_G_MAC_ADDR, eth_mac);
|
||||||
ESP_LOGI(TAG, "%x %x %x %x %x %x", eth_mac[0], eth_mac[1], eth_mac[2], eth_mac[3], eth_mac[4], eth_mac[5]);
|
ESP_LOGI(TAG, "%x %x %x %x %x %x", eth_mac[0], eth_mac[1], eth_mac[2], eth_mac[3], eth_mac[4], eth_mac[5]);
|
||||||
|
|
||||||
|
|
|
@ -272,7 +272,7 @@ static void esp_system_event_debug(const system_event_t* event)
|
||||||
}
|
}
|
||||||
case SYSTEM_EVENT_GOT_IP6: {
|
case SYSTEM_EVENT_GOT_IP6: {
|
||||||
const esp_ip6_addr_t *addr = &event->event_info.got_ip6.ip6_info.ip;
|
const esp_ip6_addr_t *addr = &event->event_info.got_ip6.ip6_info.ip;
|
||||||
ESP_LOGD(TAG, "SYSTEM_EVENT_AP_STA_GOT_IP6 address %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x", IPV62STR(*addr));
|
ESP_LOGD(TAG, "SYSTEM_EVENT_AP_STA_GOT_IP6 address " IPV6STR, IPV62STR(*addr));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#if CONFIG_IDF_TARGET_ESP32
|
#if CONFIG_IDF_TARGET_ESP32
|
||||||
|
|
|
@ -135,7 +135,7 @@ static inline esp_err_t esp_netif_lwip_ipc_call(esp_netif_api_fn fn, esp_netif_t
|
||||||
.data = data,
|
.data = data,
|
||||||
.api_fn = fn
|
.api_fn = fn
|
||||||
};
|
};
|
||||||
if (g_lwip_task == xTaskGetCurrentTaskHandle()) {
|
if (g_lwip_task != xTaskGetCurrentTaskHandle()) {
|
||||||
ESP_LOGD(TAG, "check: remote, if=%p fn=%p\n", netif, fn);
|
ESP_LOGD(TAG, "check: remote, if=%p fn=%p\n", netif, fn);
|
||||||
sys_arch_sem_wait(&api_lock_sem, 0);
|
sys_arch_sem_wait(&api_lock_sem, 0);
|
||||||
tcpip_send_msg_wait_sem((tcpip_callback_fn)esp_netif_api_cb, &msg, &api_sync_sem);
|
tcpip_send_msg_wait_sem((tcpip_callback_fn)esp_netif_api_cb, &msg, &api_sync_sem);
|
||||||
|
@ -146,6 +146,28 @@ static inline esp_err_t esp_netif_lwip_ipc_call(esp_netif_api_fn fn, esp_netif_t
|
||||||
return fn(&msg);
|
return fn(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if supplied esp_netif handle is active, i.e. available within registered interfaces
|
||||||
|
* as it might have already been destroyed. Returns the supplied handle if active, nullptr otherwise
|
||||||
|
*
|
||||||
|
* @param esp_netif handle to check if available in the list of registered interfaces
|
||||||
|
* @return esp_netif handle if available, or NULL if it wasn't found
|
||||||
|
*/
|
||||||
|
static esp_netif_t* esp_netif_is_active(esp_netif_t *arg)
|
||||||
|
{
|
||||||
|
esp_netif_t *esp_netif = NULL;
|
||||||
|
// looking for the netif in the list of registered interfaces
|
||||||
|
// as it might have already been destroyed
|
||||||
|
esp_netif_t *nif = esp_netif_next(NULL);
|
||||||
|
do {
|
||||||
|
if (nif && nif == arg) {
|
||||||
|
esp_netif = nif;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (NULL != (nif = esp_netif_next(nif)));
|
||||||
|
return esp_netif;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function sets default routing netif based on priorities of all interfaces which are up
|
* @brief This function sets default routing netif based on priorities of all interfaces which are up
|
||||||
* @param esp_netif current interface which just updated state
|
* @param esp_netif current interface which just updated state
|
||||||
|
@ -157,6 +179,9 @@ static inline esp_err_t esp_netif_lwip_ipc_call(esp_netif_api_fn fn, esp_netif_t
|
||||||
static void esp_netif_update_default_netif(esp_netif_t *esp_netif, esp_netif_action_t action) {
|
static void esp_netif_update_default_netif(esp_netif_t *esp_netif, esp_netif_action_t action) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case ESP_NETIF_STARTED:
|
case ESP_NETIF_STARTED:
|
||||||
|
{
|
||||||
|
// check if previously default interface hasn't been destroyed in the meantime
|
||||||
|
s_last_default_esp_netif = esp_netif_is_active(s_last_default_esp_netif);
|
||||||
if (s_last_default_esp_netif && esp_netif_is_netif_up(s_last_default_esp_netif)
|
if (s_last_default_esp_netif && esp_netif_is_netif_up(s_last_default_esp_netif)
|
||||||
&& (s_last_default_esp_netif->route_prio > esp_netif->route_prio)) {
|
&& (s_last_default_esp_netif->route_prio > esp_netif->route_prio)) {
|
||||||
netif_set_default(s_last_default_esp_netif->lwip_netif);
|
netif_set_default(s_last_default_esp_netif->lwip_netif);
|
||||||
|
@ -164,7 +189,9 @@ static void esp_netif_update_default_netif(esp_netif_t *esp_netif, esp_netif_act
|
||||||
s_last_default_esp_netif = esp_netif;
|
s_last_default_esp_netif = esp_netif;
|
||||||
netif_set_default(s_last_default_esp_netif->lwip_netif);
|
netif_set_default(s_last_default_esp_netif->lwip_netif);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case ESP_NETIF_STOPPED:
|
case ESP_NETIF_STOPPED:
|
||||||
{
|
{
|
||||||
|
@ -186,7 +213,8 @@ static void esp_netif_update_default_netif(esp_netif_t *esp_netif, esp_netif_act
|
||||||
if (s_last_default_esp_netif && esp_netif_is_netif_up(s_last_default_esp_netif)) {
|
if (s_last_default_esp_netif && esp_netif_is_netif_up(s_last_default_esp_netif)) {
|
||||||
netif_set_default(s_last_default_esp_netif->lwip_netif);
|
netif_set_default(s_last_default_esp_netif->lwip_netif);
|
||||||
}
|
}
|
||||||
} break;
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,19 +421,40 @@ static void esp_netif_lwip_remove(esp_netif_t *esp_netif)
|
||||||
netif_set_down(esp_netif->lwip_netif);
|
netif_set_down(esp_netif->lwip_netif);
|
||||||
}
|
}
|
||||||
netif_remove(esp_netif->lwip_netif);
|
netif_remove(esp_netif->lwip_netif);
|
||||||
free(esp_netif->lwip_netif);
|
|
||||||
esp_netif->lwip_netif = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static esp_err_t esp_netif_lwip_add(esp_netif_t *esp_netif)
|
||||||
|
{
|
||||||
|
if (esp_netif->lwip_netif == NULL) {
|
||||||
|
esp_netif->lwip_netif = calloc(1, sizeof(struct netif));
|
||||||
|
if (esp_netif->lwip_netif == NULL) {
|
||||||
|
return ESP_ERR_NO_MEM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (NULL == netif_add(esp_netif->lwip_netif, (struct ip4_addr*)&esp_netif->ip_info->ip,
|
||||||
|
(struct ip4_addr*)&esp_netif->ip_info->netmask, (struct ip4_addr*)&esp_netif->ip_info->gw,
|
||||||
|
esp_netif, esp_netif->lwip_init_fn, tcpip_input)) {
|
||||||
|
esp_netif_lwip_remove(esp_netif);
|
||||||
|
return ESP_ERR_ESP_NETIF_IF_NOT_READY;
|
||||||
|
}
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void esp_netif_destroy(esp_netif_t *esp_netif)
|
void esp_netif_destroy(esp_netif_t *esp_netif)
|
||||||
{
|
{
|
||||||
if (esp_netif) {
|
if (esp_netif) {
|
||||||
esp_netif_remove_from_list(esp_netif);
|
esp_netif_remove_from_list(esp_netif);
|
||||||
free(esp_netif->ip_info);
|
free(esp_netif->ip_info);
|
||||||
free(esp_netif->ip_info_old);
|
free(esp_netif->ip_info_old);
|
||||||
esp_netif_lwip_remove(esp_netif);
|
|
||||||
free(esp_netif->if_key);
|
free(esp_netif->if_key);
|
||||||
|
esp_netif_lwip_remove(esp_netif);
|
||||||
|
free(esp_netif->lwip_netif);
|
||||||
|
free(esp_netif->hostname);
|
||||||
|
if (s_last_default_esp_netif == esp_netif) {
|
||||||
|
// clear last default netif if it happens to be this just destroyed interface
|
||||||
|
s_last_default_esp_netif = NULL;
|
||||||
|
}
|
||||||
free(esp_netif);
|
free(esp_netif);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,8 +489,8 @@ esp_err_t esp_netif_set_driver_config(esp_netif_t *esp_netif,
|
||||||
static esp_err_t esp_netif_reset_ip_info(esp_netif_t *esp_netif)
|
static esp_err_t esp_netif_reset_ip_info(esp_netif_t *esp_netif)
|
||||||
{
|
{
|
||||||
ip4_addr_set_zero(&(esp_netif->ip_info->ip));
|
ip4_addr_set_zero(&(esp_netif->ip_info->ip));
|
||||||
ip4_addr_set_zero(&esp_netif->ip_info->gw);
|
ip4_addr_set_zero(&(esp_netif->ip_info->gw));
|
||||||
ip4_addr_set_zero(&esp_netif->ip_info->netmask);
|
ip4_addr_set_zero(&(esp_netif->ip_info->netmask));
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,13 +529,12 @@ static esp_err_t esp_netif_config_sanity_check(const esp_netif_t * esp_netif)
|
||||||
if (esp_netif->driver_transmit == NULL ||
|
if (esp_netif->driver_transmit == NULL ||
|
||||||
esp_netif->driver_handle == NULL ||
|
esp_netif->driver_handle == NULL ||
|
||||||
esp_netif->lwip_input_fn == NULL ||
|
esp_netif->lwip_input_fn == NULL ||
|
||||||
esp_netif->lwip_init_fn == NULL ||
|
esp_netif->lwip_init_fn == NULL) {
|
||||||
esp_netif->lwip_netif == NULL) {
|
|
||||||
ESP_LOGE(TAG, "Cannot start esp_netif: Missing mandatory configuration:\n"
|
ESP_LOGE(TAG, "Cannot start esp_netif: Missing mandatory configuration:\n"
|
||||||
"esp_netif->driver_transmit: %p, esp_netif->driver_handle:%p, "
|
"esp_netif->driver_transmit: %p, esp_netif->driver_handle:%p, "
|
||||||
"esp_netif->lwip_input_fn: %p, esp_netif->lwip_init_fn:%p, esp_netif->lwip_netif: %p",
|
"esp_netif->lwip_input_fn: %p, esp_netif->lwip_init_fn:%p",
|
||||||
esp_netif->driver_transmit, esp_netif->driver_handle,
|
esp_netif->driver_transmit, esp_netif->driver_handle,
|
||||||
esp_netif->lwip_input_fn, esp_netif->lwip_init_fn, esp_netif->lwip_netif);
|
esp_netif->lwip_input_fn, esp_netif->lwip_init_fn);
|
||||||
|
|
||||||
return ESP_ERR_INVALID_STATE;
|
return ESP_ERR_INVALID_STATE;
|
||||||
}
|
}
|
||||||
|
@ -501,7 +549,7 @@ static esp_err_t esp_netif_start_api(esp_netif_api_msg_t *msg)
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_netif_config_sanity_check(esp_netif));
|
ESP_ERROR_CHECK(esp_netif_config_sanity_check(esp_netif));
|
||||||
|
|
||||||
netif_add(esp_netif->lwip_netif, (struct ip4_addr*)&esp_netif->ip_info->ip, (struct ip4_addr*)&esp_netif->ip_info->netmask, (struct ip4_addr*)&esp_netif->ip_info->gw, esp_netif, esp_netif->lwip_init_fn, tcpip_input);
|
ESP_ERROR_CHECK(esp_netif_lwip_add(esp_netif));
|
||||||
|
|
||||||
if (esp_netif->flags&ESP_NETIF_FLAG_GARP) {
|
if (esp_netif->flags&ESP_NETIF_FLAG_GARP) {
|
||||||
#if ESP_GRATUITOUS_ARP
|
#if ESP_GRATUITOUS_ARP
|
||||||
|
@ -663,17 +711,10 @@ static void esp_netif_dhcpc_cb(struct netif *netif)
|
||||||
|
|
||||||
static void esp_netif_ip_lost_timer(void *arg)
|
static void esp_netif_ip_lost_timer(void *arg)
|
||||||
{
|
{
|
||||||
esp_netif_t *esp_netif = NULL;
|
esp_netif_t *esp_netif = esp_netif_is_active(arg);
|
||||||
esp_netif_t *nif = esp_netif_next(NULL);
|
|
||||||
do {
|
|
||||||
if (nif && nif == arg) {
|
|
||||||
esp_netif = nif;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (NULL != (nif = esp_netif_next(nif)));
|
|
||||||
|
|
||||||
if (esp_netif == NULL) {
|
if (esp_netif == NULL) {
|
||||||
ESP_LOGD(TAG, "%s esp_netif not found in the list", __func__);
|
ESP_LOGD(TAG, "%s esp_netif=%p not active any more", __func__, arg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -691,7 +732,7 @@ static void esp_netif_ip_lost_timer(void *arg)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ESP_LOGD(TAG, "if%p ip lost tmr: raise ip lost event", esp_netif);
|
ESP_LOGD(TAG, "if%p ip lost tmr: raise ip lost event", esp_netif);
|
||||||
memset(&esp_netif->ip_info_old, 0, sizeof(esp_netif_ip_info_t));
|
memset(esp_netif->ip_info_old, 0, sizeof(esp_netif_ip_info_t));
|
||||||
if (esp_netif->lost_ip_event) {
|
if (esp_netif->lost_ip_event) {
|
||||||
ret = esp_event_send_internal(IP_EVENT, esp_netif->lost_ip_event,
|
ret = esp_event_send_internal(IP_EVENT, esp_netif->lost_ip_event,
|
||||||
&evt, sizeof(evt), 0);
|
&evt, sizeof(evt), 0);
|
||||||
|
@ -707,7 +748,7 @@ static void esp_netif_ip_lost_timer(void *arg)
|
||||||
|
|
||||||
static esp_err_t esp_netif_start_ip_lost_timer(esp_netif_t *esp_netif)
|
static esp_err_t esp_netif_start_ip_lost_timer(esp_netif_t *esp_netif)
|
||||||
{
|
{
|
||||||
esp_netif_ip_info_t *ip_info_old = (esp_netif_ip_info_t *)&esp_netif->ip_info;
|
esp_netif_ip_info_t *ip_info_old = esp_netif->ip_info;
|
||||||
struct netif *netif = esp_netif->lwip_netif;
|
struct netif *netif = esp_netif->lwip_netif;
|
||||||
|
|
||||||
ESP_LOGD(TAG, "%s esp_netif:%p", __func__, esp_netif);
|
ESP_LOGD(TAG, "%s esp_netif:%p", __func__, esp_netif);
|
||||||
|
@ -956,7 +997,7 @@ esp_err_t esp_netif_get_hostname(esp_netif_t *esp_netif, const char **hostname)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t esp_netif_up_api(esp_netif_api_msg_t *msg)
|
static esp_err_t esp_netif_up_api(esp_netif_api_msg_t *msg)
|
||||||
{
|
{
|
||||||
esp_netif_t *esp_netif = msg->esp_netif;
|
esp_netif_t *esp_netif = msg->esp_netif;
|
||||||
|
|
||||||
|
@ -1017,7 +1058,7 @@ bool esp_netif_is_netif_up(esp_netif_t *esp_netif)
|
||||||
{
|
{
|
||||||
ESP_LOGV(TAG, "%s esp_netif:%p", __func__, esp_netif);
|
ESP_LOGV(TAG, "%s esp_netif:%p", __func__, esp_netif);
|
||||||
|
|
||||||
if (esp_netif != NULL && netif_is_up(esp_netif->lwip_netif)) {
|
if (esp_netif != NULL && esp_netif->lwip_netif != NULL && netif_is_up(esp_netif->lwip_netif)) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -1123,13 +1164,12 @@ static esp_err_t esp_netif_set_ip_info_api(esp_netif_api_msg_t *msg)
|
||||||
ip_event_t evt_id = esp_netif->get_ip_event;
|
ip_event_t evt_id = esp_netif->get_ip_event;
|
||||||
ip_event_got_ip_t evt = { .esp_netif = esp_netif, .if_index = -1, .ip_changed = false};
|
ip_event_got_ip_t evt = { .esp_netif = esp_netif, .if_index = -1, .ip_changed = false};
|
||||||
int ret;
|
int ret;
|
||||||
|
if (memcmp(ip_info, esp_netif->ip_info_old, sizeof(esp_netif_ip_info_t))) {
|
||||||
if (memcmp(ip_info, &esp_netif->ip_info_old, sizeof(esp_netif_ip_info_t))) {
|
|
||||||
evt.ip_changed = true;
|
evt.ip_changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&evt.ip_info, ip_info, sizeof(esp_netif_ip_info_t));
|
memcpy(&evt.ip_info, ip_info, sizeof(esp_netif_ip_info_t));
|
||||||
memcpy(&esp_netif->ip_info_old, ip_info, sizeof(esp_netif_ip_info_t));
|
memcpy(esp_netif->ip_info_old, ip_info, sizeof(esp_netif_ip_info_t));
|
||||||
ret = esp_event_send_internal(IP_EVENT, evt_id, &evt, sizeof(evt), 0);
|
ret = esp_event_send_internal(IP_EVENT, evt_id, &evt, sizeof(evt), 0);
|
||||||
if (ESP_OK != ret) {
|
if (ESP_OK != ret) {
|
||||||
ESP_LOGE(TAG, "set ip info: failed to post got ip event (%x)", ret);
|
ESP_LOGE(TAG, "set ip info: failed to post got ip event (%x)", ret);
|
||||||
|
|
Loading…
Reference in a new issue