From aee9821fe0606ab87c69b0044d2a292f639ac3d0 Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Fri, 31 Jan 2020 10:21:34 +0100 Subject: [PATCH 1/4] Addition to UdpContext needed for LEAmDNS2 --- .../ESP8266WiFi/src/include/UdpContext.h | 41 ++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index 31aa5619d1..72658136a4 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -21,6 +21,8 @@ #ifndef UDPCONTEXT_H #define UDPCONTEXT_H +#include // TEMP for Serial + class UdpContext; extern "C" { @@ -167,6 +169,26 @@ class UdpContext #endif // !LWIP_IPV6 + /* + * Add a netif (by its index) as the multicast interface + */ + void setMulticastInterface(netif* p_pNetIf) + { +#if LWIP_VERSION_MAJOR == 1 + udp_set_multicast_netif_addr(_pcb, (p_pNetIf ? ip_2_ip4(p_pNetIf->ip_addr) : ip_addr_any)); +#else + udp_set_multicast_netif_index(_pcb, (p_pNetIf ? netif_get_index(p_pNetIf) : 0)); +#endif + } + + /* + * Allow access to pcb to change eg. options + */ + udp_pcb* pcb(void) + { + return _pcb; + } + void setMulticastTTL(int ttl) { #ifdef LWIP_MAYBE_XCC @@ -205,6 +227,11 @@ class UdpContext return (pos <= _rx_buf->len); } + netif* getInputNetif() const + { + return _currentAddr.input_netif; + } + CONST IPAddress& getRemoteAddress() CONST { return _currentAddr.srcaddr; @@ -265,7 +292,6 @@ class UdpContext // ref'ing it to prevent release from the below pbuf_free(deleteme) pbuf_ref(_rx_buf); } - // remove the already-consumed head of the chain pbuf_free(deleteme); _rx_buf_offset = 0; @@ -451,14 +477,16 @@ class UdpContext // pbuf chain too deep, dropping pbuf_free(pb); DEBUGV(":udr\r\n"); + Serial.println("WARNING!!! DELETED UDP DATAGRAM !!!"); return; } } - #if LWIP_VERSION_MAJOR == 1 #define TEMPDSTADDR (¤t_iphdr_dest) + #define TEMPINPUTNETIF (current_netif) #else #define TEMPDSTADDR (ip_current_dest_addr()) + #define TEMPINPUTNETIF (ip_current_input_netif()) #endif // chain this helper pbuf first @@ -486,7 +514,7 @@ class UdpContext return; } // construct in place - new(PBUF_ALIGNER(pb_helper->payload)) AddrHelper(srcaddr, TEMPDSTADDR, srcport); + new(PBUF_ALIGNER(pb_helper->payload)) AddrHelper(srcaddr, TEMPDSTADDR, srcport, TEMPINPUTNETIF); pb_helper->flags = PBUF_HELPER_FLAG; // mark helper pbuf // chain it pbuf_cat(_rx_buf, pb_helper); @@ -500,6 +528,7 @@ class UdpContext _currentAddr.srcaddr = srcaddr; _currentAddr.dstaddr = TEMPDSTADDR; _currentAddr.srcport = srcport; + _currentAddr.input_netif = TEMPINPUTNETIF; DEBUGV(":urn %d\r\n", pb->tot_len); _first_buf_taken = false; @@ -512,6 +541,7 @@ class UdpContext } #undef TEMPDSTADDR + #undef TEMPINPUTNETIF } @@ -539,10 +569,11 @@ class UdpContext { IPAddress srcaddr, dstaddr; int16_t srcport; + netif* input_netif; AddrHelper() { } - AddrHelper(const ip_addr_t* src, const ip_addr_t* dst, uint16_t srcport): - srcaddr(src), dstaddr(dst), srcport(srcport) { } + AddrHelper(const ip_addr_t* src, const ip_addr_t* dst, uint16_t srcport, netif* input_netif): + srcaddr(src), dstaddr(dst), srcport(srcport), input_netif(input_netif) { } }; AddrHelper _currentAddr; From f219b06cd983d76f8fd79e5dabcdfb5eb1c184da Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Fri, 31 Jan 2020 10:26:26 +0100 Subject: [PATCH 2/4] Addition to UdpContext needed for LEAmDNS2 --- libraries/ESP8266WiFi/src/include/UdpContext.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index 72658136a4..d2d209d09b 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -21,8 +21,6 @@ #ifndef UDPCONTEXT_H #define UDPCONTEXT_H -#include // TEMP for Serial - class UdpContext; extern "C" { @@ -477,7 +475,6 @@ class UdpContext // pbuf chain too deep, dropping pbuf_free(pb); DEBUGV(":udr\r\n"); - Serial.println("WARNING!!! DELETED UDP DATAGRAM !!!"); return; } } From 9c1dd796e093a9eddbbdeb760f12e4807dfe05c8 Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Fri, 31 Jan 2020 11:03:21 +0100 Subject: [PATCH 3/4] Addition to UdpContext needed for LEAmDNS2 --- libraries/ESP8266WiFi/src/include/UdpContext.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index d2d209d09b..7ff828f812 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -173,7 +173,7 @@ class UdpContext void setMulticastInterface(netif* p_pNetIf) { #if LWIP_VERSION_MAJOR == 1 - udp_set_multicast_netif_addr(_pcb, (p_pNetIf ? ip_2_ip4(p_pNetIf->ip_addr) : ip_addr_any)); + udp_set_multicast_netif_addr(_pcb, (p_pNetIf ? p_pNetIf->ip_addr : ip_addr_any)); #else udp_set_multicast_netif_index(_pcb, (p_pNetIf ? netif_get_index(p_pNetIf) : 0)); #endif From e35dd39b77eb262cd853dad7b20d6d06ab77d5d6 Mon Sep 17 00:00:00 2001 From: david gauchard Date: Mon, 24 Feb 2020 14:22:17 +0100 Subject: [PATCH 4/4] no index: use NETIF_NO_INDEX (=0) instead of 0 --- libraries/ESP8266WiFi/src/include/UdpContext.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index 7ff828f812..f820bcaf50 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -175,7 +175,7 @@ class UdpContext #if LWIP_VERSION_MAJOR == 1 udp_set_multicast_netif_addr(_pcb, (p_pNetIf ? p_pNetIf->ip_addr : ip_addr_any)); #else - udp_set_multicast_netif_index(_pcb, (p_pNetIf ? netif_get_index(p_pNetIf) : 0)); + udp_set_multicast_netif_index(_pcb, (p_pNetIf ? netif_get_index(p_pNetIf) : NETIF_NO_INDEX)); #endif }