@@ -219,7 +219,27 @@ IPAddress Mycila::ESPConnect::getIPAddress(Mycila::ESPConnect::Mode mode) const
219
219
}
220
220
}
221
221
222
- IPAddress Mycila::ESPConnect::getIPv6Address (Mycila::ESPConnect::Mode mode) const {
222
+ IPAddress Mycila::ESPConnect::getLinkLocalIPv6Address (Mycila::ESPConnect::Mode mode) const {
223
+ #ifndef ESP8266
224
+ const wifi_mode_t wifiMode = WiFi.getMode ();
225
+ switch (mode) {
226
+ case Mycila::ESPConnect::Mode::AP:
227
+ return IN6ADDR_ANY;
228
+ case Mycila::ESPConnect::Mode::STA:
229
+ return wifiMode == WIFI_MODE_STA ? WiFi.linkLocalIPv6 () : IN6ADDR_ANY;
230
+ #ifdef ESPCONNECT_ETH_SUPPORT
231
+ case Mycila::ESPConnect::Mode::ETH:
232
+ return ETH.linkUp () ? ETH.linkLocalIPv6 () : IN6ADDR_ANY;
233
+ #endif
234
+ default :
235
+ return IN6ADDR_ANY;
236
+ }
237
+ #else
238
+ return IPAddress ();
239
+ #endif
240
+ }
241
+
242
+ IPAddress Mycila::ESPConnect::getGlobalIPv6Address (Mycila::ESPConnect::Mode mode) const {
223
243
#ifndef ESP8266
224
244
const wifi_mode_t wifiMode = WiFi.getMode ();
225
245
switch (mode) {
@@ -507,8 +527,12 @@ void Mycila::ESPConnect::clearConfiguration() {
507
527
void Mycila::ESPConnect::toJson (const JsonObject& root) const {
508
528
root[" ip_address" ] = getIPAddress ().toString ();
509
529
root[" ip_address_ap" ] = getIPAddress (Mycila::ESPConnect::Mode::AP).toString ();
510
- root[" ip_address_eth" ] = getIPAddress (Mycila::ESPConnect::Mode::ETH).toString ();
511
- root[" ip_address_sta" ] = getIPAddress (Mycila::ESPConnect::Mode::STA).toString ();
530
+ root[" ip_address_eth_v4" ] = getIPAddress (Mycila::ESPConnect::Mode::ETH).toString ();
531
+ root[" ip_address_sta_v4" ] = getIPAddress (Mycila::ESPConnect::Mode::STA).toString ();
532
+ root[" ip_address_eth_v6_local" ] = getLinkLocalIPv6Address (Mycila::ESPConnect::Mode::ETH).toString ();
533
+ root[" ip_address_sta_v6_local" ] = getLinkLocalIPv6Address (Mycila::ESPConnect::Mode::STA).toString ();
534
+ root[" ip_address_eth_v6_global" ] = getGlobalIPv6Address (Mycila::ESPConnect::Mode::ETH).toString ();
535
+ root[" ip_address_sta_v6_global" ] = getGlobalIPv6Address (Mycila::ESPConnect::Mode::STA).toString ();
512
536
root[" hostname" ] = _config.hostname .c_str ();
513
537
root[" mac_address" ] = getMACAddress ();
514
538
root[" mac_address_ap" ] = getMACAddress (Mycila::ESPConnect::Mode::AP);
@@ -875,8 +899,12 @@ void Mycila::ESPConnect::_onWiFiEvent(WiFiEvent_t event) {
875
899
876
900
#ifndef ESP8266
877
901
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
878
- if (WiFi.globalIPv6 () != IN6ADDR_ANY) {
879
- LOGD (TAG, " [%s] WiFiEvent: ARDUINO_EVENT_WIFI_STA_GOT_IP6: %s" , getStateName (), WiFi.globalIPv6 ().toString ().c_str ());
902
+ if (WiFi.linkLocalIPv6 () != IN6ADDR_ANY) {
903
+ if (WiFi.globalIPv6 () == IN6ADDR_ANY) {
904
+ LOGD (TAG, " [%s] WiFiEvent: ARDUINO_EVENT_WIFI_STA_GOT_IP6: Link-local: %s, global: <empty>" , getStateName (), WiFi.linkLocalIPv6 ().toString ().c_str ());
905
+ } else {
906
+ LOGD (TAG, " [%s] WiFiEvent: ARDUINO_EVENT_WIFI_STA_GOT_IP6: Link-local: %s, global: %s" , getStateName (), WiFi.linkLocalIPv6 ().toString ().c_str (), WiFi.globalIPv6 ().toString ().c_str ());
907
+ }
880
908
if (_state == Mycila::ESPConnect::State::NETWORK_CONNECTING || _state == Mycila::ESPConnect::State::NETWORK_RECONNECTING) {
881
909
_lastTime = -1 ;
882
910
_setState (Mycila::ESPConnect::State::NETWORK_CONNECTED);
0 commit comments