mdns: Add support for registering custom netif

* Original commit: espressif/esp-idf@bec42ff85d
This commit is contained in:
David Cermak
2021-12-14 18:07:23 +01:00
committed by suren-gabrielyan-espressif
parent ddc58e8220
commit 30f37c0565
4 changed files with 72 additions and 0 deletions

View File

@ -5086,6 +5086,52 @@ esp_err_t mdns_post_custom_action(esp_netif_t *esp_netif, mdns_event_actions_t e
return mdns_post_custom_action_tcpip_if(_mdns_get_if_from_esp_netif(esp_netif), event_action);
}
esp_err_t mdns_add_custom_netif(esp_netif_t *esp_netif)
{
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
esp_err_t err = ESP_ERR_NO_MEM;
MDNS_SERVICE_LOCK();
for (mdns_if_t i=0; i<MDNS_MAX_INTERFACES; ++i) {
if (s_esp_netifs[i].netif == esp_netif) {
MDNS_SERVICE_UNLOCK();
return ESP_ERR_INVALID_STATE;
}
}
for (mdns_if_t i=0; i<MDNS_MAX_INTERFACES; ++i) {
if (!s_esp_netifs[i].predefined && s_esp_netifs[i].netif == NULL) {
s_esp_netifs[i].netif = esp_netif;
err = ESP_OK;
break;
}
}
MDNS_SERVICE_UNLOCK();
return err;
}
esp_err_t mdns_delete_custom_netif(esp_netif_t *esp_netif)
{
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
esp_err_t err = ESP_ERR_NOT_FOUND;
MDNS_SERVICE_LOCK();
for (mdns_if_t i=0; i<MDNS_MAX_INTERFACES; ++i) {
if (!s_esp_netifs[i].predefined && s_esp_netifs[i].netif == esp_netif) {
s_esp_netifs[i].netif = NULL;
err = ESP_OK;
break;
}
}
MDNS_SERVICE_UNLOCK();
return err;
}
esp_err_t mdns_init(void)
{
esp_err_t err = ESP_OK;
@ -5133,7 +5179,9 @@ esp_err_t mdns_init(void)
}
#endif
#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH
set_default_duplicated_interfaces();
#endif
uint8_t i;
#if CONFIG_LWIP_IPV6
@ -5166,8 +5214,10 @@ free_all_and_disable_pcbs:
_mdns_disable_pcb(i, MDNS_IP_PROTOCOL_V4);
s_esp_netifs[i].duplicate = MDNS_MAX_INTERFACES;
}
#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH
free_event_handlers:
unregister_predefined_handlers();
#endif
vQueueDelete(_mdns_server->action_queue);
free_lock:
vSemaphoreDelete(_mdns_server->lock);