Complete Phase 12 dual-stack networking

Add IPv6-aware Wi-Fi state, HTTPS/SSH listeners, mDNS service
reconciliation, and browser Wi-Fi administration.

Include a guarded build-local fix for mDNS 1.12.0 membership handling,
focused regression suites, and Phase 12 acceptance documentation.
This commit is contained in:
2026-09-20 22:35:34 +02:00
parent ece4ba77e3
commit 8902b25d78
52 changed files with 3042 additions and 163 deletions
+25
View File
@@ -118,6 +118,28 @@ static void print_ipv4(uint32_t address)
printf(IPSTR, IP2STR(&ip));
}
static void print_ipv6_addresses(const wifi_manager_snapshot_t *snapshot)
{
printf("IPv6 preferred address availability: link-local=%s ULA/GUA=%s\n",
snapshot->ipv6_linklocal ? "yes" : "no",
snapshot->ipv6_routable ? "yes" : "no");
for (uint8_t i = 0; i < snapshot->ipv6_count && i < WIFI_MANAGER_IPV6_MAX_ADDRESSES; ++i) {
const wifi_manager_ipv6_address_t *address = &snapshot->ipv6_addresses[i];
uint16_t prefix = ESP_IP6_ADDR_BLOCK1(address);
const char *kind = (prefix & 0xffc0U) == 0xfe80U ? "link-local" :
(prefix & 0xfe00U) == 0xfc00U ? "ULA" :
(prefix & 0xe000U) == 0x2000U ? "GUA" : "other";
printf("IPv6 preferred %s: " IPV6STR "\n", kind, IPV62STR(*address));
}
if (snapshot->ipv6_count == 0U) {
printf("IPv6 preferred addresses: none\n");
}
if (snapshot->ipv6_linklocal) {
printf("Link-local destinations require a zone (%%interface) naming the client's interface, not the ESP32's.\n");
}
printf("IPv6 addresses do not establish a default route or Internet reachability.\n");
}
static int show_status(void)
{
wifi_manager_snapshot_t snapshot;
@@ -157,7 +179,10 @@ static int show_status(void)
printf(" gateway=");
print_ipv4(snapshot.gateway);
putchar('\n');
} else {
printf("IPv4: none\n");
}
print_ipv6_addresses(&snapshot);
printf("AP: policy=%s running=%s clients=%u channel=%u SSID=",
wifi_config_ap_policy_to_string(snapshot.ap_policy),