Skip to content

Commit b0957e7

Browse files
mdns: Clean the main mdns module from lwip dependencies
* Reduced number of include paths * Abstract the internals of mdns packet (specifics defined in mdns_networking.c) * Use ESP_IP addresses instead of lwip addresses * Original commit: espressif/esp-idf@54e3294
1 parent 47c7266 commit b0957e7

File tree

4 files changed

+60
-48
lines changed

4 files changed

+60
-48
lines changed

components/mdns/mdns.c

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,7 +1115,7 @@ static void _mdns_dispatch_tx_packet(mdns_tx_packet_t * p)
11151115

11161116
#ifdef MDNS_ENABLE_DEBUG
11171117
_mdns_dbg_printf("\nTX[%u][%u]: ", p->tcpip_if, p->ip_protocol);
1118-
if (p->dst.type == IPADDR_TYPE_V4) {
1118+
if (p->dst.type == ESP_IPADDR_TYPE_V4) {
11191119
_mdns_dbg_printf("To: " IPSTR ":%u, ", IP2STR(&p->dst.u_addr.ip4), p->port);
11201120
} else {
11211121
_mdns_dbg_printf("To: " IPV6STR ":%u, ", IPV62STR(p->dst.u_addr.ip6), p->port);
@@ -1345,11 +1345,12 @@ static mdns_tx_packet_t * _mdns_alloc_packet_default(mdns_if_t tcpip_if, mdns_ip
13451345
packet->ip_protocol = ip_protocol;
13461346
packet->port = MDNS_SERVICE_PORT;
13471347
if (ip_protocol == MDNS_IP_PROTOCOL_V4) {
1348-
IP4_ADDR(&packet->dst.u_addr.ip4, 224, 0, 0, 251);
1348+
esp_ip_addr_t addr = ESP_IP4ADDR_INIT(224, 0, 0, 251);
1349+
memcpy(&packet->dst, &addr, sizeof(esp_ip_addr_t));
13491350
}
13501351
#if CONFIG_LWIP_IPV6
13511352
else {
1352-
esp_ip_addr_t addr = IPADDR6_INIT(0x000002ff, 0, 0, 0xfb000000);
1353+
esp_ip_addr_t addr = ESP_IP6ADDR_INIT(0x000002ff, 0, 0, 0xfb000000);
13531354
memcpy(&packet->dst, &addr, sizeof(esp_ip_addr_t));
13541355
}
13551356
#endif
@@ -2973,15 +2974,15 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
29732974
{
29742975
static mdns_name_t n;
29752976
mdns_header_t header;
2976-
const uint8_t * data = (const uint8_t*)packet->pb->payload;
2977-
size_t len = packet->pb->len;
2977+
const uint8_t * data = _mdns_get_packet_data(packet);
2978+
size_t len = _mdns_get_packet_len(packet);
29782979
const uint8_t * content = data + MDNS_HEAD_LEN;
29792980
bool do_not_reply = false;
29802981
mdns_search_once_t * search_result = NULL;
29812982

29822983
#ifdef MDNS_ENABLE_DEBUG
29832984
_mdns_dbg_printf("\nRX[%u][%u]: ", packet->tcpip_if, (uint32_t)packet->ip_protocol);
2984-
if (packet->src.type == IPADDR_TYPE_V4) {
2985+
if (packet->src.type == ESP_IPADDR_TYPE_V4) {
29852986
_mdns_dbg_printf("From: " IPSTR ":%u, To: " IPSTR ", ", IP2STR(&packet->src.u_addr.ip4), packet->src_port, IP2STR(&packet->dest.u_addr.ip4));
29862987
} else {
29872988
_mdns_dbg_printf("From: " IPV6STR ":%u, To: " IPV6STR ", ", IPV62STR(packet->src.u_addr.ip6), packet->src_port, IPV62STR(packet->dest.u_addr.ip6));
@@ -3023,12 +3024,7 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
30233024
parsed_packet->authoritative = header.flags.value == MDNS_FLAGS_AUTHORITATIVE;
30243025
parsed_packet->distributed = header.flags.value == MDNS_FLAGS_DISTRIBUTED;
30253026
parsed_packet->id = header.id;
3026-
#if CONFIG_LWIP_IPV6
3027-
ip_addr_copy(parsed_packet->src, packet->src);
3028-
#else
3029-
ip4_addr_copy(parsed_packet->src.u_addr.ip4, packet->src.u_addr.ip4);
3030-
#endif
3031-
3027+
esp_netif_ip_addr_copy(&parsed_packet->src, &packet->src);
30323028
parsed_packet->src_port = packet->src_port;
30333029

30343030
if (header.questions) {
@@ -3334,7 +3330,7 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
33343330
#if CONFIG_LWIP_IPV6
33353331
else if (type == MDNS_TYPE_AAAA) {//ipv6
33363332
esp_ip_addr_t ip6;
3337-
ip6.type = IPADDR_TYPE_V6;
3333+
ip6.type = ESP_IPADDR_TYPE_V6;
33383334
memcpy(ip6.u_addr.ip6.addr, data_ptr, MDNS_ANSWER_AAAA_SIZE);
33393335
if (search_result) {
33403336
//check for more applicable searches (PTR & A/AAAA at the same time)
@@ -3384,7 +3380,7 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
33843380
#endif
33853381
else if (type == MDNS_TYPE_A) {
33863382
esp_ip_addr_t ip;
3387-
ip.type = IPADDR_TYPE_V4;
3383+
ip.type = ESP_IPADDR_TYPE_V4;
33883384
memcpy(&(ip.u_addr.ip4.addr), data_ptr, 4);
33893385
if (search_result) {
33903386
//check for more applicable searches (PTR & A/AAAA at the same time)
@@ -3695,7 +3691,7 @@ static mdns_ip_addr_t * _mdns_result_addr_create_ip(esp_ip_addr_t * ip)
36953691
}
36963692
memset(a, 0 , sizeof(mdns_ip_addr_t));
36973693
a->addr.type = ip->type;
3698-
if (ip->type == IPADDR_TYPE_V6) {
3694+
if (ip->type == ESP_IPADDR_TYPE_V6) {
36993695
memcpy(a->addr.u_addr.ip6.addr, ip->u_addr.ip6.addr, 16);
37003696
} else {
37013697
a->addr.u_addr.ip4.addr = ip->u_addr.ip4.addr;
@@ -3711,10 +3707,10 @@ static void _mdns_result_add_ip(mdns_result_t * r, esp_ip_addr_t * ip)
37113707
mdns_ip_addr_t * a = r->addr;
37123708
while (a) {
37133709
if (a->addr.type == ip->type) {
3714-
if (a->addr.type == IPADDR_TYPE_V4 && a->addr.u_addr.ip4.addr == ip->u_addr.ip4.addr) {
3710+
if (a->addr.type == ESP_IPADDR_TYPE_V4 && a->addr.u_addr.ip4.addr == ip->u_addr.ip4.addr) {
37153711
return;
37163712
}
3717-
if (a->addr.type == IPADDR_TYPE_V6 && !memcmp(a->addr.u_addr.ip6.addr, ip->u_addr.ip6.addr, 16)) {
3713+
if (a->addr.type == ESP_IPADDR_TYPE_V6 && !memcmp(a->addr.u_addr.ip6.addr, ip->u_addr.ip6.addr, 16)) {
37183714
return;
37193715
}
37203716
}
@@ -3736,8 +3732,8 @@ static void _mdns_search_result_add_ip(mdns_search_once_t * search, const char *
37363732
mdns_result_t * r = NULL;
37373733
mdns_ip_addr_t * a = NULL;
37383734

3739-
if ((search->type == MDNS_TYPE_A && ip->type == IPADDR_TYPE_V4)
3740-
|| (search->type == MDNS_TYPE_AAAA && ip->type == IPADDR_TYPE_V6)
3735+
if ((search->type == MDNS_TYPE_A && ip->type == ESP_IPADDR_TYPE_V4)
3736+
|| (search->type == MDNS_TYPE_AAAA && ip->type == ESP_IPADDR_TYPE_V6)
37413737
|| search->type == MDNS_TYPE_ANY) {
37423738
r = search->result;
37433739
while (r) {
@@ -4178,8 +4174,7 @@ static void _mdns_free_action(mdns_action_t * action)
41784174
_mdns_free_tx_packet(action->data.tx_handle.packet);
41794175
break;
41804176
case ACTION_RX_HANDLE:
4181-
pbuf_free(action->data.rx_handle.packet->pb);
4182-
free(action->data.rx_handle.packet);
4177+
_mdns_packet_free(action->data.rx_handle.packet);
41834178
break;
41844179
case ACTION_DELEGATE_HOSTNAME_ADD:
41854180
free((char *)action->data.delegate_hostname.hostname);
@@ -4379,8 +4374,7 @@ static void _mdns_execute_action(mdns_action_t * action)
43794374
break;
43804375
case ACTION_RX_HANDLE:
43814376
mdns_parse_packet(action->data.rx_handle.packet);
4382-
pbuf_free(action->data.rx_handle.packet->pb);
4383-
free(action->data.rx_handle.packet);
4377+
_mdns_packet_free(action->data.rx_handle.packet);
43844378
break;
43854379
case ACTION_DELEGATE_HOSTNAME_ADD:
43864380
_mdns_delegate_hostname_add(action->data.delegate_hostname.hostname,
@@ -5421,7 +5415,7 @@ esp_err_t mdns_query_a(const char * name, uint32_t timeout, esp_ip4_addr_t * add
54215415

54225416
mdns_ip_addr_t * a = result->addr;
54235417
while (a) {
5424-
if (a->addr.type == IPADDR_TYPE_V4) {
5418+
if (a->addr.type == ESP_IPADDR_TYPE_V4) {
54255419
addr->addr = a->addr.u_addr.ip4.addr;
54265420
mdns_query_results_free(result);
54275421
return ESP_OK;
@@ -5459,7 +5453,7 @@ esp_err_t mdns_query_aaaa(const char * name, uint32_t timeout, esp_ip6_addr_t *
54595453

54605454
mdns_ip_addr_t * a = result->addr;
54615455
while (a) {
5462-
if (a->addr.type == IPADDR_TYPE_V6) {
5456+
if (a->addr.type == ESP_IPADDR_TYPE_V6) {
54635457
memcpy(addr->addr, a->addr.u_addr.ip6.addr, 16);
54645458
mdns_query_results_free(result);
54655459
return ESP_OK;

components/mdns/mdns_networking.c

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@
44
*
55
*/
66
#include <string.h>
7-
#include "mdns_networking.h"
87
#include "esp_log.h"
8+
#include "lwip/ip_addr.h"
9+
#include "lwip/pbuf.h"
10+
#include "lwip/igmp.h"
11+
#include "lwip/udp.h"
12+
#include "lwip/mld6.h"
13+
#include "lwip/priv/tcpip_priv.h"
14+
#include "esp_system.h"
15+
#include "esp_event.h"
16+
#include "mdns_networking.h"
917
#include "esp_netif_net_stack.h"
1018

11-
1219
extern mdns_server_t * _mdns_server;
1320

1421
/*
@@ -345,3 +352,19 @@ size_t _mdns_udp_pcb_write(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, c
345352
}
346353
return len;
347354
}
355+
356+
void* _mdns_get_packet_data(mdns_rx_packet_t *packet)
357+
{
358+
return packet->pb->payload;
359+
}
360+
361+
size_t _mdns_get_packet_len(mdns_rx_packet_t *packet)
362+
{
363+
return packet->pb->len;
364+
}
365+
366+
void _mdns_packet_free(mdns_rx_packet_t *packet)
367+
{
368+
pbuf_free(packet->pb);
369+
free(packet);
370+
}

components/mdns/private_include/mdns_networking.h

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,6 @@
77
*/
88
#include "mdns.h"
99
#include "mdns_private.h"
10-
#include "sdkconfig.h"
11-
#include "freertos/FreeRTOS.h"
12-
#include "freertos/queue.h"
13-
#include "freertos/semphr.h"
14-
#include "lwip/ip_addr.h"
15-
#include "lwip/pbuf.h"
16-
#include "lwip/igmp.h"
17-
#include "lwip/udp.h"
18-
#include "lwip/mld6.h"
19-
#include "lwip/priv/tcpip_priv.h"
20-
#include "esp_wifi.h"
21-
#include "esp_system.h"
22-
#include "esp_event.h"
23-
#if CONFIG_ETH_ENABLED
24-
#include "esp_eth.h"
25-
#endif
2610

2711

2812
/**
@@ -51,4 +35,19 @@ esp_err_t _mdns_pcb_deinit(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol);
5135
*/
5236
size_t _mdns_udp_pcb_write(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, const esp_ip_addr_t *ip, uint16_t port, uint8_t * data, size_t len);
5337

38+
/**
39+
* @brief Gets data pointer to the mDNS packet
40+
*/
41+
void* _mdns_get_packet_data(mdns_rx_packet_t *packet);
42+
43+
/**
44+
* @brief Gets data length of c
45+
*/
46+
size_t _mdns_get_packet_len(mdns_rx_packet_t *packet);
47+
48+
/**
49+
* @brief Free the mDNS packet
50+
*/
51+
void _mdns_packet_free(mdns_rx_packet_t *packet);
52+
5453
#endif /* ESP_MDNS_NETWORKING_H_ */

components/mdns/private_include/mdns_private.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,8 @@
1414
#ifndef MDNS_PRIVATE_H_
1515
#define MDNS_PRIVATE_H_
1616

17-
#include "esp_event_base.h"
18-
#include "esp_task.h"
19-
#include "esp_timer.h"
20-
#include "esp_netif_ip_addr.h"
21-
#include "freertos/FreeRTOS.h"
2217
#include "mdns.h"
18+
#include "esp_task.h"
2319

2420
//#define MDNS_ENABLE_DEBUG
2521

0 commit comments

Comments
 (0)