Skip to content

Commit 6713ffe

Browse files
mdns: fix preset of esp_netif ptr for local interfaces
mdns module store local copy of esp_netif for common interfaces, but it was correctly initialized only when interface started. If the event were missed (e.g. mdns_init after interface start) the local copy wouldn't be initialized. Fixed by restoring the local copy. Closes WIFI-1538 * Original commit: espressif/esp-idf@09e36f9
1 parent 817c4fd commit 6713ffe

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

components/mdns/mdns.c

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,18 @@ static esp_netif_t * s_esp_netifs[MDNS_IF_MAX] = {};
5656
esp_netif_t *_mdns_get_esp_netif(mdns_if_t tcpip_if)
5757
{
5858
if (tcpip_if < MDNS_IF_MAX) {
59+
if (s_esp_netifs[tcpip_if] == NULL) {
60+
// if local netif copy is NULL, try to search for the default interface key
61+
if (tcpip_if == MDNS_IF_STA) {
62+
s_esp_netifs[MDNS_IF_STA] = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
63+
} else if (tcpip_if == MDNS_IF_AP) {
64+
s_esp_netifs[MDNS_IF_AP] = esp_netif_get_handle_from_ifkey("WIFI_AP_DEF");
65+
#if CONFIG_ETH_ENABLED
66+
} else if (tcpip_if == MDNS_IF_ETH) {
67+
s_esp_netifs[MDNS_IF_ETH] = esp_netif_get_handle_from_ifkey("ETH_DEF");
68+
#endif
69+
}
70+
}
5971
return s_esp_netifs[tcpip_if];
6072
}
6173
return NULL;
@@ -3106,17 +3118,6 @@ static void _mdns_handle_system_event(esp_event_base_t event_base,
31063118
return;
31073119
}
31083120

3109-
// Initialize handles to esp-netif if appropriate mdns supported interface started
3110-
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
3111-
s_esp_netifs[MDNS_IF_STA] = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
3112-
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_AP_START) {
3113-
s_esp_netifs[MDNS_IF_AP] = esp_netif_get_handle_from_ifkey("WIFI_AP_DEF");
3114-
#if CONFIG_ETH_ENABLED
3115-
} else if (event_base == ETH_EVENT && event_id == ETHERNET_EVENT_START) {
3116-
s_esp_netifs[MDNS_IF_ETH] = esp_netif_get_handle_from_ifkey("ETH_DEF");
3117-
#endif
3118-
}
3119-
31203121
esp_netif_dhcp_status_t dcst;
31213122
if (event_base == WIFI_EVENT) {
31223123
switch(event_id) {
@@ -4231,6 +4232,8 @@ esp_err_t mdns_init(void)
42314232
return ESP_ERR_NO_MEM;
42324233
}
42334234
memset((uint8_t*)_mdns_server, 0, sizeof(mdns_server_t));
4235+
// zero-out local copy of netifs to initiate a fresh search by interface key whenever a netif ptr is needed
4236+
memset(s_esp_netifs, 0, sizeof(s_esp_netifs));
42344237

42354238
_mdns_server->lock = xSemaphoreCreateMutex();
42364239
if (!_mdns_server->lock) {

0 commit comments

Comments
 (0)