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:
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Compile the production mDNS owner against bounded host fakes; no IDF build."""
|
||||
import pathlib
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
ROOT = pathlib.Path(__file__).resolve().parents[2]
|
||||
with tempfile.TemporaryDirectory(prefix="mdns-phase12-") as tmp:
|
||||
p = pathlib.Path(tmp)
|
||||
(p / "freertos").mkdir()
|
||||
headers = {
|
||||
"esp_err.h": """#pragma once
|
||||
typedef int esp_err_t;
|
||||
#define ESP_OK 0
|
||||
#define ESP_ERR_INVALID_ARG 1
|
||||
#define ESP_ERR_INVALID_STATE 2
|
||||
#define ESP_ERR_NO_MEM 3
|
||||
#define ESP_ERR_NOT_FOUND 4
|
||||
#define ESP_ERR_TIMEOUT 5
|
||||
""",
|
||||
"sdkconfig.h": """#define CONFIG_MDNS_PREDEF_NETIF_STA 1
|
||||
#define CONFIG_MDNS_PREDEF_NETIF_AP 0
|
||||
#define CONFIG_MDNS_PREDEF_NETIF_ETH 0
|
||||
#define CONFIG_LWIP_IPV6_NUM_ADDRESSES 3
|
||||
""",
|
||||
"freertos/FreeRTOS.h": """#pragma once
|
||||
#define portMAX_DELAY 100
|
||||
#define pdTRUE 1
|
||||
typedef int portMUX_TYPE;
|
||||
#define portMUX_INITIALIZER_UNLOCKED 0
|
||||
void fake_enter(portMUX_TYPE *);
|
||||
void fake_exit(portMUX_TYPE *);
|
||||
#define portENTER_CRITICAL(m) fake_enter(m)
|
||||
#define portEXIT_CRITICAL(m) fake_exit(m)
|
||||
""",
|
||||
"freertos/semphr.h": """#pragma once
|
||||
typedef void *SemaphoreHandle_t;
|
||||
SemaphoreHandle_t xSemaphoreCreateMutex(void);
|
||||
int xSemaphoreTake(SemaphoreHandle_t, int);
|
||||
int xSemaphoreGive(SemaphoreHandle_t);
|
||||
""",
|
||||
"esp_timer.h": """#pragma once
|
||||
#include <stdint.h>
|
||||
int64_t esp_timer_get_time(void);
|
||||
""",
|
||||
"esp_netif.h": """#pragma once
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include "esp_err.h"
|
||||
typedef struct { int unused; } esp_netif_t;
|
||||
typedef struct { uint32_t addr; } esp_ip4_addr_t;
|
||||
typedef struct { uint32_t addr[4]; } esp_ip6_addr_t;
|
||||
typedef struct { esp_ip4_addr_t ip; } esp_netif_ip_info_t;
|
||||
esp_netif_t *esp_netif_get_handle_from_ifkey(const char *);
|
||||
bool esp_netif_is_netif_up(esp_netif_t *);
|
||||
esp_err_t esp_netif_get_ip_info(esp_netif_t *, esp_netif_ip_info_t *);
|
||||
int esp_netif_get_all_ip6(esp_netif_t *, esp_ip6_addr_t *);
|
||||
esp_err_t esp_netif_tcpip_exec(esp_err_t (*)(void *), void *);
|
||||
""",
|
||||
"mdns.h": """#pragma once
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "esp_err.h"
|
||||
#include "esp_netif.h"
|
||||
typedef enum {
|
||||
MDNS_EVENT_ENABLE_IP4 = 1 << 1, MDNS_EVENT_ENABLE_IP6 = 1 << 2,
|
||||
MDNS_EVENT_DISABLE_IP4 = 1 << 5, MDNS_EVENT_DISABLE_IP6 = 1 << 6
|
||||
} mdns_event_actions_t;
|
||||
esp_err_t mdns_netif_action(esp_netif_t *, mdns_event_actions_t);
|
||||
esp_err_t mdns_init(void);
|
||||
void mdns_free(void);
|
||||
esp_err_t mdns_hostname_set(const char *);
|
||||
esp_err_t mdns_instance_name_set(const char *);
|
||||
esp_err_t mdns_service_add(const char *, const char *, const char *, uint16_t, void *, size_t);
|
||||
esp_err_t mdns_service_remove(const char *, const char *);
|
||||
""",
|
||||
}
|
||||
for name, text in headers.items():
|
||||
(p / name).write_text(text)
|
||||
exe = p / "test"
|
||||
subprocess.run(["cc", "-std=c11", "-Wall", "-Wextra", "-Werror", "-I", tmp,
|
||||
"-I", str(ROOT / "src"), str(pathlib.Path(__file__).with_name("test.c")),
|
||||
"-o", str(exe)], check=True)
|
||||
for case in ("normal", "init-failure", "hostname-failure", "instance-failure"):
|
||||
subprocess.run([str(exe), case], check=True)
|
||||
Reference in New Issue
Block a user