From dd068d2568f4af715e41cf64d65196352081f9a6 Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Wed, 8 Jan 2020 16:15:35 +0100 Subject: [PATCH 1/5] Added input_netif to the stored data --- .../ESP8266WiFi/src/include/UdpContext.h | 51 +++++++++++-------- libraries/LittleFS/lib/littlefs | 2 +- libraries/SoftwareSerial | 2 +- tools/sdk/ssl/bearssl | 2 +- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index 31aa5619d1..dc82a55b1b 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -167,6 +167,23 @@ class UdpContext #endif // !LWIP_IPV6 + /* + * Add a netif (by its index) as the multicast interface + */ + void setMulticastInterface(netif* p_pNetIf) + { + uint8_t mcast_ifindex = (p_pNetIf ? netif_get_index(p_pNetIf) : 0); + udp_set_multicast_netif_index(_pcb, mcast_ifindex); + } + + /* + * Allow access to pcb to change eg. options + */ + udp_pcb* pcb(void) + { + return _pcb; + } + void setMulticastTTL(int ttl) { #ifdef LWIP_MAYBE_XCC @@ -205,6 +222,11 @@ class UdpContext return (pos <= _rx_buf->len); } + netif* getInputNetif() const + { + return _currentAddr.input_netif; + } + CONST IPAddress& getRemoteAddress() CONST { return _currentAddr.srcaddr; @@ -265,7 +287,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; @@ -441,24 +462,13 @@ class UdpContext const ip_addr_t *srcaddr, u16_t srcport) { (void) upcb; - // check receive pbuf chain depth - { - pbuf* p; - int count = 0; - for (p = _rx_buf; p && ++count < rxBufMaxDepth*2; p = p->next); - if (p) - { - // pbuf chain too deep, dropping - pbuf_free(pb); - DEBUGV(":udr\r\n"); - return; - } - } #if LWIP_VERSION_MAJOR == 1 #define TEMPDSTADDR (¤t_iphdr_dest) + #define TEMPINPUTNETIF todo #else #define TEMPDSTADDR (ip_current_dest_addr()) + #define TEMPINPUTNETIF (ip_current_input_netif()) #endif // chain this helper pbuf first @@ -486,7 +496,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 +510,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 +523,7 @@ class UdpContext } #undef TEMPDSTADDR + #undef TEMPINPUTNETIF } @@ -539,16 +551,13 @@ 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; - - // rx pbuf depth barrier (counter of buffered UDP received packets) - // keep it small - static constexpr int rxBufMaxDepth = 4; }; diff --git a/libraries/LittleFS/lib/littlefs b/libraries/LittleFS/lib/littlefs index ce2c01f098..6b65737715 160000 --- a/libraries/LittleFS/lib/littlefs +++ b/libraries/LittleFS/lib/littlefs @@ -1 +1 @@ -Subproject commit ce2c01f098f4d2b9479de5a796c3bb531f1fe14c +Subproject commit 6b65737715039ef92d348014316b575b52547019 diff --git a/libraries/SoftwareSerial b/libraries/SoftwareSerial index 1bb28accb7..3bfd18d428 160000 --- a/libraries/SoftwareSerial +++ b/libraries/SoftwareSerial @@ -1 +1 @@ -Subproject commit 1bb28accb7cadacd425e7394b5e517933d187106 +Subproject commit 3bfd18d428992b1924eebb28e333ee21d00e9ead diff --git a/tools/sdk/ssl/bearssl b/tools/sdk/ssl/bearssl index 0645c68c36..89454af34e 160000 --- a/tools/sdk/ssl/bearssl +++ b/tools/sdk/ssl/bearssl @@ -1 +1 @@ -Subproject commit 0645c68c3653233c4d0e59252cd591a664f808fd +Subproject commit 89454af34e3e61ddfc9837f3da5a0bc8ed44c3aa From ec904d69be9c53e6d2572b549baebfe4cbc6b8ab Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Wed, 8 Jan 2020 17:45:36 +0100 Subject: [PATCH 2/5] 2. Try --- libraries/LittleFS/lib/littlefs | 2 +- libraries/SoftwareSerial | 2 +- tools/sdk/ssl/bearssl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/LittleFS/lib/littlefs b/libraries/LittleFS/lib/littlefs index 6b65737715..ce2c01f098 160000 --- a/libraries/LittleFS/lib/littlefs +++ b/libraries/LittleFS/lib/littlefs @@ -1 +1 @@ -Subproject commit 6b65737715039ef92d348014316b575b52547019 +Subproject commit ce2c01f098f4d2b9479de5a796c3bb531f1fe14c diff --git a/libraries/SoftwareSerial b/libraries/SoftwareSerial index 3bfd18d428..1bb28accb7 160000 --- a/libraries/SoftwareSerial +++ b/libraries/SoftwareSerial @@ -1 +1 @@ -Subproject commit 3bfd18d428992b1924eebb28e333ee21d00e9ead +Subproject commit 1bb28accb7cadacd425e7394b5e517933d187106 diff --git a/tools/sdk/ssl/bearssl b/tools/sdk/ssl/bearssl index 89454af34e..0645c68c36 160000 --- a/tools/sdk/ssl/bearssl +++ b/tools/sdk/ssl/bearssl @@ -1 +1 @@ -Subproject commit 89454af34e3e61ddfc9837f3da5a0bc8ed44c3aa +Subproject commit 0645c68c3653233c4d0e59252cd591a664f808fd From a6c22bfe904c8fd1c0e73d09bab1f6856a18828e Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Wed, 8 Jan 2020 18:27:23 +0100 Subject: [PATCH 3/5] 3. Try, reinserted the UDP message omitting code --- .../ESP8266WiFi/src/include/UdpContext.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index dc82a55b1b..cf0848e8e4 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -462,10 +462,23 @@ class UdpContext const ip_addr_t *srcaddr, u16_t srcport) { (void) upcb; + // check receive pbuf chain depth + { + pbuf* p; + int count = 0; + for (p = _rx_buf; p && ++count < rxBufMaxDepth*2; p = p->next); + if (p) + { + // pbuf chain too deep, dropping + pbuf_free(pb); + DEBUGV(":udr\r\n"); + return; + } + } #if LWIP_VERSION_MAJOR == 1 #define TEMPDSTADDR (¤t_iphdr_dest) - #define TEMPINPUTNETIF todo + #define TEMPINPUTNETIF (ip_current_input_netif()) #else #define TEMPDSTADDR (ip_current_dest_addr()) #define TEMPINPUTNETIF (ip_current_input_netif()) @@ -558,6 +571,10 @@ class UdpContext srcaddr(src), dstaddr(dst), srcport(srcport), input_netif(input_netif) { } }; AddrHelper _currentAddr; + + // rx pbuf depth barrier (counter of buffered UDP received packets) + // keep it small + static constexpr int rxBufMaxDepth = 4; }; From 8e7970b9c747af6b5fd81afd20efbbe2999a456b Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Wed, 8 Jan 2020 22:07:15 +0100 Subject: [PATCH 4/5] Fixed lwip 1.4 error --- libraries/ESP8266WiFi/src/include/UdpContext.h | 2 +- libraries/LittleFS/lib/littlefs | 2 +- libraries/SoftwareSerial | 2 +- tools/sdk/ssl/bearssl | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index cf0848e8e4..a5ff83429e 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -478,7 +478,7 @@ class UdpContext #if LWIP_VERSION_MAJOR == 1 #define TEMPDSTADDR (¤t_iphdr_dest) - #define TEMPINPUTNETIF (ip_current_input_netif()) + #define TEMPINPUTNETIF (current_netif) #else #define TEMPDSTADDR (ip_current_dest_addr()) #define TEMPINPUTNETIF (ip_current_input_netif()) diff --git a/libraries/LittleFS/lib/littlefs b/libraries/LittleFS/lib/littlefs index ce2c01f098..6b65737715 160000 --- a/libraries/LittleFS/lib/littlefs +++ b/libraries/LittleFS/lib/littlefs @@ -1 +1 @@ -Subproject commit ce2c01f098f4d2b9479de5a796c3bb531f1fe14c +Subproject commit 6b65737715039ef92d348014316b575b52547019 diff --git a/libraries/SoftwareSerial b/libraries/SoftwareSerial index 1bb28accb7..3bfd18d428 160000 --- a/libraries/SoftwareSerial +++ b/libraries/SoftwareSerial @@ -1 +1 @@ -Subproject commit 1bb28accb7cadacd425e7394b5e517933d187106 +Subproject commit 3bfd18d428992b1924eebb28e333ee21d00e9ead diff --git a/tools/sdk/ssl/bearssl b/tools/sdk/ssl/bearssl index 0645c68c36..89454af34e 160000 --- a/tools/sdk/ssl/bearssl +++ b/tools/sdk/ssl/bearssl @@ -1 +1 @@ -Subproject commit 0645c68c3653233c4d0e59252cd591a664f808fd +Subproject commit 89454af34e3e61ddfc9837f3da5a0bc8ed44c3aa From 8136d9c27f251c4a7cd0020a1cf0351b669272d2 Mon Sep 17 00:00:00 2001 From: LaborEtArs Date: Thu, 9 Jan 2020 10:26:18 +0100 Subject: [PATCH 5/5] Fixed LWIP 1.4 issue --- libraries/ESP8266WiFi/src/include/UdpContext.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index a5ff83429e..9632059b3c 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -172,8 +172,11 @@ class UdpContext */ void setMulticastInterface(netif* p_pNetIf) { - uint8_t mcast_ifindex = (p_pNetIf ? netif_get_index(p_pNetIf) : 0); - udp_set_multicast_netif_index(_pcb, mcast_ifindex); +#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 } /*