From 59db90764781292b206e453497cf71fdc170a060 Mon Sep 17 00:00:00 2001 From: david gauchard Date: Mon, 17 Jun 2019 23:57:31 +0200 Subject: [PATCH] lwip2: (re)fix setting static ip address (#6194) --- libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp index aae7aec7d..437662c0a 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp @@ -309,6 +309,13 @@ bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress arg1, IPAddress a return false; } +#if LWIP_VERSION_MAJOR != 1 && !CORE_MOCK + // get current->previous IP address + // (check below) + struct ip_info previp; + wifi_get_ip_info(STATION_IF, &previp); +#endif + struct ip_info info; info.ip.addr = local_ip.v4(); info.gw.addr = gateway.v4(); @@ -334,7 +341,9 @@ bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress arg1, IPAddress a #if LWIP_VERSION_MAJOR != 1 && !CORE_MOCK // trigger address change by calling lwIP-v1.4 api // (see explanation above) - netif_set_addr(eagle_lwip_getif(STATION_IF), &info.ip, &info.netmask, &info.gw); + // only when ip is already set by other mean (generally dhcp) + if (previp.ip.addr != 0 && previp.ip.addr != info.ip.addr) + netif_set_addr(eagle_lwip_getif(STATION_IF), &info.ip, &info.netmask, &info.gw); #endif return true;