From 4f27ce16b34064bb423a9b9783d50b5acaf8f3d0 Mon Sep 17 00:00:00 2001 From: david gauchard Date: Sat, 11 Apr 2020 12:46:07 +0200 Subject: [PATCH] Fix TCP send to IPv6 link local addresses (#7207) credit: Simon Arlott @nomis - similar to #6541 for TCP (#7207) --- libraries/ESP8266WiFi/src/include/ClientContext.h | 8 +++++++- libraries/ESP8266WiFi/src/include/UdpContext.h | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 6ce97115f..8095e402a 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -127,8 +127,14 @@ public: } } - int connect(CONST ip_addr_t* addr, uint16_t port) + int connect(ip_addr_t* addr, uint16_t port) { +#if LWIP_IPV6 + // Set zone so that link local addresses use the default interface + if (IP_IS_V6(addr) && ip6_addr_lacks_zone(ip_2_ip6(addr), IP6_UNKNOWN)) { + ip6_addr_assign_zone(ip_2_ip6(addr), IP6_UNKNOWN, netif_default); + } +#endif err_t err = tcp_connect(_pcb, addr, port, &ClientContext::_s_connected); if (err != ERR_OK) { return 0; diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index 15efb82ac..a81384b2a 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -117,7 +117,7 @@ public: #if LWIP_IPV6 // Set zone so that link local addresses use the default interface if (IP_IS_V6(&_pcb->remote_ip) && ip6_addr_lacks_zone(ip_2_ip6(&_pcb->remote_ip), IP6_UNKNOWN)) { - ip6_addr_assign_zone(ip_2_ip6(&_pcb->remote_ip),IP6_UNKNOWN, netif_default); + ip6_addr_assign_zone(ip_2_ip6(&_pcb->remote_ip), IP6_UNKNOWN, netif_default); } #endif return true;