@@ -606,6 +606,35 @@ IPAddress NetworkInterface::dnsIP(uint8_t dns_no) const
606
606
if (esp_netif_get_dns_info (_esp_netif, dns_no?ESP_NETIF_DNS_BACKUP:ESP_NETIF_DNS_MAIN, &d) != ESP_OK){
607
607
return IPAddress ();
608
608
}
609
+ if (d.ip .type == ESP_IPADDR_TYPE_V6){
610
+ // IPv6 from 4x uint32_t; byte order based on IPV62STR() in esp_netif_ip_addr.h
611
+ log_d (" DNS got IPv6: " IPV6STR, IPV62STR (d.ip .u_addr .ip6 ));
612
+ uint32_t addr0 esp_netif_htonl (d.ip .u_addr .ip6 .addr [0 ]);
613
+ uint32_t addr1 esp_netif_htonl (d.ip .u_addr .ip6 .addr [1 ]);
614
+ uint32_t addr2 esp_netif_htonl (d.ip .u_addr .ip6 .addr [2 ]);
615
+ uint32_t addr3 esp_netif_htonl (d.ip .u_addr .ip6 .addr [3 ]);
616
+ return IPAddress (
617
+ (uint8_t )(addr0 >> 24 ) & 0xFF ,
618
+ (uint8_t )(addr0 >> 16 ) & 0xFF ,
619
+ (uint8_t )(addr0 >> 8 ) & 0xFF ,
620
+ (uint8_t )addr0 & 0xFF ,
621
+ (uint8_t )(addr1 >> 24 ) & 0xFF ,
622
+ (uint8_t )(addr1 >> 16 ) & 0xFF ,
623
+ (uint8_t )(addr1 >> 8 ) & 0xFF ,
624
+ (uint8_t )addr1 & 0xFF ,
625
+ (uint8_t )(addr2 >> 24 ) & 0xFF ,
626
+ (uint8_t )(addr2 >> 16 ) & 0xFF ,
627
+ (uint8_t )(addr2 >> 8 ) & 0xFF ,
628
+ (uint8_t )addr2 & 0xFF ,
629
+ (uint8_t )(addr3 >> 24 ) & 0xFF ,
630
+ (uint8_t )(addr3 >> 16 ) & 0xFF ,
631
+ (uint8_t )(addr3 >> 8 ) & 0xFF ,
632
+ (uint8_t )addr3 & 0xFF ,
633
+ d.ip .u_addr .ip6 .zone
634
+ );
635
+ }
636
+ // IPv4 from single uint32_t
637
+ log_d (" DNS IPv4: " IPSTR, IP2STR (&d.ip .u_addr .ip4 ));
609
638
return IPAddress (d.ip .u_addr .ip4 .addr );
610
639
}
611
640
0 commit comments