@@ -1463,11 +1463,12 @@ static void esp_netif_internal_dhcpc_cb(struct netif *netif)
1463
1463
} else {
1464
1464
if (!ip4_addr_cmp (& ip_info -> ip , IP4_ADDR_ANY4 )) {
1465
1465
esp_netif_start_ip_lost_timer (esp_netif );
1466
- // synchronize lwip netif with esp_netif setting ip_info to 0,
1467
- // so the next time we get a valid IP we can raise the event
1468
- ip4_addr_set (& ip_info -> ip , ip_2_ip4 (& netif -> ip_addr ));
1469
- ip4_addr_set (& ip_info -> netmask , ip_2_ip4 (& netif -> netmask ));
1470
- ip4_addr_set (& ip_info -> gw , ip_2_ip4 (& netif -> gw ));
1466
+ if (esp_netif -> flags & ESP_NETIF_DHCP_CLIENT && esp_netif -> dhcpc_status == ESP_NETIF_DHCP_STARTED ) {
1467
+ // Only for active DHCP client (in case of static IP, we keep the last configure value in ip_info)
1468
+ // synchronize lwip netif with esp_netif setting ip_info to 0,
1469
+ // so the next time we get a valid IP we can raise the event
1470
+ esp_netif_reset_ip_info (esp_netif );
1471
+ }
1471
1472
}
1472
1473
}
1473
1474
}
@@ -1495,7 +1496,10 @@ static void esp_netif_ip_lost_timer(void *arg)
1495
1496
esp_netif_update_default_netif (esp_netif , ESP_NETIF_LOST_IP );
1496
1497
ESP_LOGD (TAG , "if%p ip lost tmr: raise ip lost event" , esp_netif );
1497
1498
memset (esp_netif -> ip_info_old , 0 , sizeof (esp_netif_ip_info_t ));
1498
- memset (esp_netif -> ip_info , 0 , sizeof (esp_netif_ip_info_t ));
1499
+ if (esp_netif -> flags & ESP_NETIF_DHCP_CLIENT && esp_netif -> dhcpc_status == ESP_NETIF_DHCP_STARTED ) {
1500
+ // Reset IP info if using DHCP client (static IP is supposed to be restored based on the ip_info)
1501
+ esp_netif_reset_ip_info (esp_netif );
1502
+ }
1499
1503
if (esp_netif -> lost_ip_event ) {
1500
1504
ret = esp_event_post (IP_EVENT , esp_netif -> lost_ip_event ,
1501
1505
& evt , sizeof (evt ), 0 );
0 commit comments