mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-07-16 12:02:11 +02:00
mdns: Add support for registering custom netif
* Original commit: espressif/esp-idf@bec42ff85d
This commit is contained in:
committed by
suren-gabrielyan-espressif
parent
ddc58e8220
commit
30f37c0565
@ -719,6 +719,11 @@ esp_err_t mdns_query_a(const char * host_name, uint32_t timeout, esp_ip4_addr_t
|
||||
esp_err_t mdns_query_aaaa(const char * host_name, uint32_t timeout, esp_ip6_addr_t * addr);
|
||||
#endif
|
||||
|
||||
|
||||
esp_err_t mdns_add_custom_netif(esp_netif_t *esp_netif);
|
||||
esp_err_t mdns_post_custom_action(esp_netif_t *esp_netif, mdns_event_actions_t event_action);
|
||||
esp_err_t mdns_delete_custom_netif(esp_netif_t *esp_netif);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -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);
|
||||
|
@ -48,4 +48,13 @@ menu "Example Configuration"
|
||||
help
|
||||
Set the GPIO number used as mDNS test button
|
||||
|
||||
config MDNS_ADD_CUSTOM_NETIF
|
||||
bool "Add user netif to mdns service"
|
||||
default n
|
||||
help
|
||||
If enabled, we try to add a custom netif to mdns service.
|
||||
Note that for using with common connection example code, we have to disable
|
||||
all predefined interfaces in mdns component setup (since we're adding one
|
||||
of the default interfaces)
|
||||
|
||||
endmenu
|
||||
|
@ -266,6 +266,14 @@ void app_main(void)
|
||||
*/
|
||||
ESP_ERROR_CHECK(example_connect());
|
||||
|
||||
#if defined(CONFIG_MDNS_ADD_CUSTOM_NETIF) && !defined(CONFIG_MDNS_PREDEF_NETIF_STA) && !defined(CONFIG_MDNS_PREDEF_NETIF_ETH)
|
||||
/* Demonstration of adding a custom netif to mdns service, but we're adding the default example one,
|
||||
* so we must disable all predefined interfaces (PREDEF_NETIF_STA, AP and ETH) first
|
||||
*/
|
||||
ESP_ERROR_CHECK(mdns_add_custom_netif(EXAMPLE_INTERFACE));
|
||||
ESP_ERROR_CHECK(mdns_post_custom_action(EXAMPLE_INTERFACE, MDNS_EVENT_ENABLE_IP4));
|
||||
ESP_ERROR_CHECK(mdns_post_custom_action(EXAMPLE_INTERFACE, MDNS_EVENT_ANNOUNCE_IP4));
|
||||
#endif
|
||||
initialise_button();
|
||||
xTaskCreate(&mdns_example_task, "mdns_example_task", 2048, NULL, 5, NULL);
|
||||
}
|
||||
|
Reference in New Issue
Block a user