From 94ae672041451ba3e3908ba07da8d1852ed855e6 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Fri, 4 Feb 2022 18:18:49 +0100 Subject: [PATCH] mdns: Update to drop our own packet if bounced back * Original commit: espressif/esp-idf@b5149e3ee73728f790798e6757d732fe426e21c7 --- components/mdns/mdns.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 5c4fa377a..44df1db97 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -3237,6 +3237,28 @@ void mdns_parse_packet(mdns_rx_packet_t * packet) mdns_debug_packet(data, len); #endif + // Check if the packet wasn't sent by us + if (packet->ip_protocol == MDNS_IP_PROTOCOL_V4) { + esp_netif_ip_info_t if_ip_info; + if (esp_netif_get_ip_info(_mdns_get_esp_netif(packet->tcpip_if), &if_ip_info) == ESP_OK && + memcmp(&if_ip_info.ip.addr, &packet->src.u_addr.ip4.addr, sizeof(esp_ip4_addr_t)) == 0) { + return; + } +#if CONFIG_LWIP_IPV6 + } else { + struct esp_ip6_addr if_ip6; + if (esp_netif_get_ip6_linklocal(_mdns_get_esp_netif(packet->tcpip_if), &if_ip6) == ESP_OK && + memcmp(&if_ip6, &packet->src.u_addr.ip6, sizeof(esp_ip6_addr_t)) == 0) { + return; + } +#endif + } + + // Check for the minimum size of mdns packet + if (len <= MDNS_HEAD_ADDITIONAL_OFFSET) { + return; + } + mdns_parsed_packet_t * parsed_packet = (mdns_parsed_packet_t *)malloc(sizeof(mdns_parsed_packet_t)); if (!parsed_packet) { HOOK_MALLOC_FAILED; @@ -3247,10 +3269,6 @@ void mdns_parse_packet(mdns_rx_packet_t * packet) mdns_name_t * name = &n; memset(name, 0, sizeof(mdns_name_t)); - if (len <= MDNS_HEAD_ADDITIONAL_OFFSET) { - free(parsed_packet); - return; - } header.id = _mdns_read_u16(data, MDNS_HEAD_ID_OFFSET); header.flags.value = _mdns_read_u16(data, MDNS_HEAD_FLAGS_OFFSET); header.questions = _mdns_read_u16(data, MDNS_HEAD_QUESTIONS_OFFSET);