From 18fd449c84c3659cf45fddf4b601966dc739ff1a Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Fri, 17 Apr 2020 21:41:24 -0700 Subject: [PATCH] Update lwIP to forked and patched version supporting 6PLANE addressing --- ext/lwip | 2 +- ext/lwip-contrib.patch | 32 ---------------- ext/lwip.patch | 87 ------------------------------------------ 3 files changed, 1 insertion(+), 120 deletions(-) delete mode 100644 ext/lwip-contrib.patch delete mode 100644 ext/lwip.patch diff --git a/ext/lwip b/ext/lwip index 3bb5b07..95d6387 160000 --- a/ext/lwip +++ b/ext/lwip @@ -1 +1 @@ -Subproject commit 3bb5b0722ea01edd8dee439ba62eeee788d2894e +Subproject commit 95d6387123171d812552cd6213034c823a7e8631 diff --git a/ext/lwip-contrib.patch b/ext/lwip-contrib.patch deleted file mode 100644 index a606f45..0000000 --- a/ext/lwip-contrib.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/ports/unix/port/include/arch/cc.h b/ports/unix/port/include/arch/cc.h -index 80b37d8..ed219f3 100644 ---- a/ports/unix/port/include/arch/cc.h -+++ b/ports/unix/port/include/arch/cc.h -@@ -32,6 +32,8 @@ - #ifndef LWIP_ARCH_CC_H - #define LWIP_ARCH_CC_H - -+#include "Debug.hpp" // libzt -+ - /* see https://sourceforge.net/p/predef/wiki/OperatingSystems/ */ - #if defined __ANDROID__ - #define LWIP_UNIX_ANDROID -@@ -65,7 +67,7 @@ - #endif - - #if defined(LWIP_UNIX_ANDROID) && defined(FD_SET) --typedef __kernel_fd_set fd_set; -+//typedef __kernel_fd_set fd_set; - #endif - - #if defined(LWIP_UNIX_MACH) -@@ -76,6 +78,9 @@ typedef __kernel_fd_set fd_set; - #define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS - #endif - -+// Comment out the following line to use lwIP's default diagnostic printing routine -+#define LWIP_PLATFORM_DIAG(x) do {DEBUG_INFO x;} while(0) -+ - struct sio_status_s; - typedef struct sio_status_s sio_status_t; - #define sio_fd_t sio_status_t* diff --git a/ext/lwip.patch b/ext/lwip.patch deleted file mode 100644 index d0ef7c8..0000000 --- a/ext/lwip.patch +++ /dev/null @@ -1,87 +0,0 @@ -diff --git a/src/api/sockets.c b/src/api/sockets.c -index 2d231739..a0c24829 100644 ---- a/src/api/sockets.c -+++ b/src/api/sockets.c -@@ -38,6 +38,7 @@ - */ - - #include "lwip/opt.h" -+#include "ZeroTierConstants.h" - - #if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ - -@@ -281,6 +282,7 @@ static struct lwip_select_cb *select_cb_list; - #define sock_set_errno(sk, e) do { \ - const int sockerr = (e); \ - set_errno(sockerr); \ -+ zts_errno = sockerr; \ - } while (0) - - /* Forward declaration of some functions */ -diff --git a/src/core/ipv6/nd6.c b/src/core/ipv6/nd6.c -index 039b7963..6647c90c 100644 ---- a/src/core/ipv6/nd6.c -+++ b/src/core/ipv6/nd6.c -@@ -1644,9 +1644,27 @@ nd6_is_prefix_in_netif(const ip6_addr_t *ip6addr, struct netif *netif) - * addresses (from autoconfiguration) have no implied subnet assignment, and - * are thus effectively /128 assignments. See RFC 5942 for more on this. */ - for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { -- if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && -+ /*if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && - netif_ip6_addr_isstatic(netif, i) && -- ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i))) { -+ ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i))) {*/ -+ int prefix_match = 0; -+ if (ip6_addr_is_zt_6plane(ip6addr)) { -+ prefix_match = ip6_addr_6plane_cmp(ip6addr, netif_ip6_addr(netif, i)); -+ DEBUG_INFO("6plane, prefix_match=%d", prefix_match); -+ } -+ if (ip6_addr_is_zt_adhoc(ip6addr)) { -+ prefix_match = ip6_addr_adhoc_cmp(ip6addr, netif_ip6_addr(netif, i)); -+ DEBUG_INFO("adhoc, prefix_match=%d", prefix_match); -+ } -+ if (ip6_addr_is_zt_rfc4193(ip6addr)) { -+ prefix_match = ip6_addr_rfc4193_cmp(ip6addr, netif_ip6_addr(netif, i)); -+ DEBUG_INFO("rfc4193, prefix_match=%d", prefix_match); -+ } -+ if (!prefix_match) { -+ prefix_match = ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i)); -+ DEBUG_INFO("traditional match, prefix_match=%d", prefix_match); -+ } -+ if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && prefix_match) { - return 1; - } - } -diff --git a/src/include/lwip/ip6_addr.h b/src/include/lwip/ip6_addr.h -index 29c2a34d..205b0e1f 100644 ---- a/src/include/lwip/ip6_addr.h -+++ b/src/include/lwip/ip6_addr.h -@@ -160,6 +160,28 @@ typedef struct ip6_addr ip6_addr_t; - #define ip6_addr_netcmp(addr1, addr2) (ip6_addr_netcmp_zoneless((addr1), (addr2)) && \ - ip6_addr_cmp_zone((addr1), (addr2))) - -+/* Determine if an address *could* be a ZeroTier 6PLANE address */ -+#define ip6_addr_is_zt_6plane(addr1) (((addr1)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xfc000000UL)) -+ -+/* Compare first 40 bits of address (ff + first 32 bits of nwid XOR'd with second 32 bits of nwid) */ -+#define ip6_addr_6plane_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ -+ ((addr1)->addr[1] & PP_HTONL(0xff000000UL)) == ((addr2)->addr[1] & PP_HTONL(0xff000000UL))) -+ -+/* Determine if an address *could* be a ZeroTier Ad-hoc address */ -+#define ip6_addr_is_zt_adhoc(addr1) (((addr1)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xff000000UL)) -+ -+/* Compare first 40 bits of address (ff + first 32 bits of nwid XOR'd with second 32 bits of nwid) */ -+#define ip6_addr_adhoc_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ -+ ((addr1)->addr[1] & PP_HTONL(0xff000000UL)) == ((addr2)->addr[1] & PP_HTONL(0xff000000UL))) -+ -+/* Determine if an address *could* be an RFC4193 address */ -+#define ip6_addr_is_zt_rfc4193(addr1) (((addr1)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xfd000000UL)) -+ -+/* Compare first 72 bits of address (fd + 64 bits of nwid) */ -+#define ip6_addr_rfc4193_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ -+ ((addr1)->addr[1] == (addr2)->addr[1]) && \ -+ ((addr1)->addr[2] & PP_HTONL(0xff000000UL)) == ((addr2)->addr[2] & PP_HTONL(0xff000000UL))) -+ - /* Exact-host comparison *after* ip6_addr_netcmp() succeeded, for efficiency. */ - #define ip6_addr_nethostcmp(addr1, addr2) (((addr1)->addr[2] == (addr2)->addr[2]) && \ - ((addr1)->addr[3] == (addr2)->addr[3]))