diff mbox series

[1/1] package/zerotier-one: new package

Message ID 20210324054413.1705067-1-tianyuanhao@aliyun.com
State Changes Requested
Headers show
Series [1/1] package/zerotier-one: new package | expand

Commit Message

Tian Yuanhao March 24, 2021, 5:44 a.m. UTC
ZeroTier One lets you join ZeroTier virtual networks and have them
appear as tun/tap ports on your system.

Adapted from:
https://github.com/openwrt/packages/tree/openwrt-21.02/net/zerotier

CC: Moritz Warning <moritzwarning@web.de>
Signed-off-by: Tian Yuanhao <tianyuanhao@aliyun.com>
---
 package/Config.in                             |  1 +
 ...ind-miniupnpc.h-in-staging-directory.patch | 22 ++++++++++++
 package/zerotier-one/0002-remove-pie.patch    | 28 +++++++++++++++
 ...003-remove-arm32-conservative-CFLAGS.patch | 20 +++++++++++
 .../0004-accept-external-linker-flags.patch   | 20 +++++++++++
 package/zerotier-one/0005-link-natpmp.patch   | 20 +++++++++++
 package/zerotier-one/0006-gcc10.patch         | 24 +++++++++++++
 ...0007-add-cerrno-header-for-str-errno.patch | 23 ++++++++++++
 ...x-compilation-for-arm_cortex-a7-neon.patch | 23 ++++++++++++
 package/zerotier-one/0009-auxv.patch          | 11 ++++++
 package/zerotier-one/Config.in                | 14 ++++++++
 package/zerotier-one/zerotier-one.hash        |  3 ++
 package/zerotier-one/zerotier-one.mk          | 35 +++++++++++++++++++
 13 files changed, 244 insertions(+)
 create mode 100644 package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch
 create mode 100644 package/zerotier-one/0002-remove-pie.patch
 create mode 100644 package/zerotier-one/0003-remove-arm32-conservative-CFLAGS.patch
 create mode 100644 package/zerotier-one/0004-accept-external-linker-flags.patch
 create mode 100644 package/zerotier-one/0005-link-natpmp.patch
 create mode 100644 package/zerotier-one/0006-gcc10.patch
 create mode 100644 package/zerotier-one/0007-add-cerrno-header-for-str-errno.patch
 create mode 100644 package/zerotier-one/0008-fix-compilation-for-arm_cortex-a7-neon.patch
 create mode 100644 package/zerotier-one/0009-auxv.patch
 create mode 100644 package/zerotier-one/Config.in
 create mode 100644 package/zerotier-one/zerotier-one.hash
 create mode 100644 package/zerotier-one/zerotier-one.mk

Comments

Arnout Vandecappelle April 6, 2021, 7:49 p.m. UTC | #1
Hi Tian,

 Thanks for this patch. I have a few minor comments. Could you please fix and
resend?

On 24/03/2021 06:44, Tian Yuanhao via buildroot wrote:
> ZeroTier One lets you join ZeroTier virtual networks and have them
> appear as tun/tap ports on your system.
> 
> Adapted from:
> https://github.com/openwrt/packages/tree/openwrt-21.02/net/zerotier
> 
> CC: Moritz Warning <moritzwarning@web.de>
> Signed-off-by: Tian Yuanhao <tianyuanhao@aliyun.com>
> ---
>  package/Config.in                             |  1 +
>  ...ind-miniupnpc.h-in-staging-directory.patch | 22 ++++++++++++
>  package/zerotier-one/0002-remove-pie.patch    | 28 +++++++++++++++
>  ...003-remove-arm32-conservative-CFLAGS.patch | 20 +++++++++++
>  .../0004-accept-external-linker-flags.patch   | 20 +++++++++++
>  package/zerotier-one/0005-link-natpmp.patch   | 20 +++++++++++
>  package/zerotier-one/0006-gcc10.patch         | 24 +++++++++++++
>  ...0007-add-cerrno-header-for-str-errno.patch | 23 ++++++++++++
>  ...x-compilation-for-arm_cortex-a7-neon.patch | 23 ++++++++++++
>  package/zerotier-one/0009-auxv.patch          | 11 ++++++
>  package/zerotier-one/Config.in                | 14 ++++++++
>  package/zerotier-one/zerotier-one.hash        |  3 ++
>  package/zerotier-one/zerotier-one.mk          | 35 +++++++++++++++++++
>  13 files changed, 244 insertions(+)
>  create mode 100644 package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch
>  create mode 100644 package/zerotier-one/0002-remove-pie.patch
>  create mode 100644 package/zerotier-one/0003-remove-arm32-conservative-CFLAGS.patch
>  create mode 100644 package/zerotier-one/0004-accept-external-linker-flags.patch
>  create mode 100644 package/zerotier-one/0005-link-natpmp.patch
>  create mode 100644 package/zerotier-one/0006-gcc10.patch
>  create mode 100644 package/zerotier-one/0007-add-cerrno-header-for-str-errno.patch
>  create mode 100644 package/zerotier-one/0008-fix-compilation-for-arm_cortex-a7-neon.patch
>  create mode 100644 package/zerotier-one/0009-auxv.patch
>  create mode 100644 package/zerotier-one/Config.in
>  create mode 100644 package/zerotier-one/zerotier-one.hash
>  create mode 100644 package/zerotier-one/zerotier-one.mk
> 
> diff --git a/package/Config.in b/package/Config.in
> index d278e78b68..4dec62fe24 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -2323,6 +2323,7 @@ endif
>  	source "package/xinetd/Config.in"
>  	source "package/xl2tp/Config.in"
>  	source "package/xtables-addons/Config.in"
> +	source "package/zerotier-one/Config.in"
>  	source "package/znc/Config.in"
>  
>  endmenu
> diff --git a/package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch b/package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch
> new file mode 100644
> index 0000000000..e9724f01d2
> --- /dev/null
> +++ b/package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch
> @@ -0,0 +1,22 @@
> +From 552cda1ebff6c5182eecdcb35961fd6b441dfa52 Mon Sep 17 00:00:00 2001
> +From: Moritz Warning <moritzwarning@web.de>
> +Date: Mon, 23 Apr 2018 22:12:31 +0200
> +Subject: [PATCH 1/8] find miniupnpc.h in staging directory
> +

 Every patch requires a separate SoB by yourself, even if you're not the author.
This way you validate that it is possible to propagate the patch under the
BUSL-1.1 license.

 Also, please include the provenance of the patch if you didn't create it yourself.

 Finally, please also check if this patch was sent upstream. If yes, please
include a reference to the upstream bug or PR. If not, ideally you should create
an upstream PR, or at least indicate why this is not possible.

 So in this case, there should be:

Patch taken from
https://github.com/openwrt/packages/blob/openwrt-21.02/net/zerotier/patches/0001-find-miniupnpc.h-in-staging-directory.patch

Upstream status: ...

Signed-off-by: Tian Yuanhao <tianyuanhao@aliyun.com>


 (Also, normally we don't want the "1/8" part in the subject line. In this case,
though, it's a straight copy-paste from openwrt so it's OK.)


 The same comments obviously apply to all other patches.

[snip]
> diff --git a/package/zerotier-one/0006-gcc10.patch b/package/zerotier-one/0006-gcc10.patch
> new file mode 100644
> index 0000000000..9550dfdde4
> --- /dev/null
> +++ b/package/zerotier-one/0006-gcc10.patch
> @@ -0,0 +1,24 @@
> +From e0c76c5ccf049d22bc47d723567926346e4d3639 Mon Sep 17 00:00:00 2001
> +From: Moritz Warning <moritzwarning@web.de>
> +Date: Sat, 21 Nov 2020 18:19:21 +0100
> +Subject: [PATCH 6/8] gcc10
> +
> +---
> + osdep/Binder.hpp | 6 +++---
> + 1 file changed, 3 insertions(+), 3 deletions(-)
> +
> +--- a/osdep/Binder.hpp
> ++++ b/osdep/Binder.hpp
> +@@ -396,9 +396,9 @@ public:
> + 					}
> + #endif // __LINUX__
> + 					if (_bindingCount < ZT_BINDER_MAX_BINDINGS) {
> +-						_bindings[_bindingCount].udpSock = udps;
> +-						_bindings[_bindingCount].tcpListenSock = tcps;
> +-						_bindings[_bindingCount].address = ii->first;
> ++						_bindings[(unsigned int)_bindingCount].udpSock = udps;
> ++						_bindings[(unsigned int)_bindingCount].tcpListenSock = tcps;
> ++						_bindings[(unsigned int)_bindingCount].address = ii->first;
> + 						phy.setIfName(udps,(char*)ii->second.c_str(),(int)ii->second.length());
> + 						++_bindingCount;
> + 					}

 Upstream reject this patch (https://github.com/zerotier/ZeroTierOne/pull/1232)
because it is actually a GCC bug that is fixed in GCC 10.2.0. Since we have that
GCC version in all our releases, we don't need this patch.

 Also note that openwrt copied this patch from an upstream MR, but totally
destroyed the commit message and authorship. Removing authorship is probably a
license violation (I haven't checked BUSL, but giving credit is a pretty
standard license term). So we can't accept this patch. Probably many of the
other patches are in a similar situation.


[snip]
> diff --git a/package/zerotier-one/zerotier-one.hash b/package/zerotier-one/zerotier-one.hash
> new file mode 100644
> index 0000000000..f6892a0cc2
> --- /dev/null
> +++ b/package/zerotier-one/zerotier-one.hash
> @@ -0,0 +1,3 @@
> +# Locally calculated
> +sha256  0f45a4050cdfea1018634c88b6c302cbbfcc3f7f93cb94bed840a15e3ffa55ba  zerotier-one-1.6.4.tar.gz
> +sha256  ef3edeecd9fa4fb5eff7a74afe964a02b7d9136bd07c4b4cd3864432d6890515  LICENSE.txt
> diff --git a/package/zerotier-one/zerotier-one.mk b/package/zerotier-one/zerotier-one.mk
> new file mode 100644
> index 0000000000..f7262e875d
> --- /dev/null
> +++ b/package/zerotier-one/zerotier-one.mk
> @@ -0,0 +1,35 @@
> +################################################################################
> +#
> +# zerotier-one
> +#
> +################################################################################
> +
> +ZEROTIER_ONE_VERSION = 1.6.4
> +ZEROTIER_ONE_SITE = $(call github,zerotier,ZeroTierOne,$(ZEROTIER_ONE_VERSION))
> +ZEROTIER_ONE_DEPENDENCIES = libminiupnpc libnatpmp
> +ZEROTIER_ONE_LICENSE = BUSL-1.1
> +ZEROTIER_ONE_LICENSE_FILES = LICENSE.txt
> +
> +define ZEROTIER_ONE_BUILD_CMDS
> +	$(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)
> +endef
> +
> +define ZEROTIER_ONE_INSTALL_TARGET_CMDS
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install
> +endef
> +
> +define ZEROTIER_ONE_INSTALL_INIT_SYSTEMD
> +	$(INSTALL) -D -m 644 $(@D)/debian/zerotier-one.service \
> +		$(TARGET_DIR)/usr/lib/systemd/system/zerotier-one.service
> +endef
> +
> +define ZEROTIER_ONE_INSTALL_INIT_SYSV
> +	$(INSTALL) -D -m 755 $(@D)/debian/zerotier-one.init \
> +		$(TARGET_DIR)/etc/init.d/S60zerotier-one
> +endef
> +
> +define ZEROTIER_ONE_LINUX_CONFIG_FIXUPS
> +	$(call KCONFIG_ENABLE_OPT,CONFIG_TUN)

 Is this the only kernel option needed?

 Regards,
 Arnout

> +endef
> +
> +$(eval $(generic-package))
>
diff mbox series

Patch

diff --git a/package/Config.in b/package/Config.in
index d278e78b68..4dec62fe24 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -2323,6 +2323,7 @@  endif
 	source "package/xinetd/Config.in"
 	source "package/xl2tp/Config.in"
 	source "package/xtables-addons/Config.in"
+	source "package/zerotier-one/Config.in"
 	source "package/znc/Config.in"
 
 endmenu
diff --git a/package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch b/package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch
new file mode 100644
index 0000000000..e9724f01d2
--- /dev/null
+++ b/package/zerotier-one/0001-find-miniupnpc.h-in-staging-directory.patch
@@ -0,0 +1,22 @@ 
+From 552cda1ebff6c5182eecdcb35961fd6b441dfa52 Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Mon, 23 Apr 2018 22:12:31 +0200
+Subject: [PATCH 1/8] find miniupnpc.h in staging directory
+
+---
+ make-linux.mk | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/make-linux.mk
++++ b/make-linux.mk
+@@ -25,8 +25,8 @@ TIMESTAMP=$(shell date +"%Y%m%d%H%M")
+ # otherwise build into binary as done on Mac and Windows.
+ ONE_OBJS+=osdep/PortMapper.o
+ override DEFS+=-DZT_USE_MINIUPNPC
+-MINIUPNPC_IS_NEW_ENOUGH=$(shell grep -sqr '.*define.*MINIUPNPC_VERSION.*"2..*"' /usr/include/miniupnpc/miniupnpc.h && echo 1)
+-#MINIUPNPC_IS_NEW_ENOUGH=$(shell grep -sqr '.*define.*MINIUPNPC_VERSION.*"2.."' /usr/include/miniupnpc/miniupnpc.h && echo 1)
++MINIUPNPC_IS_NEW_ENOUGH=$(shell grep -sqr '.*define.*MINIUPNPC_VERSION.*"2..*"' $(STAGING_DIR)/usr/include/miniupnpc/miniupnpc.h && echo 1)
++#MINIUPNPC_IS_NEW_ENOUGH=$(shell grep -sqr '.*define.*MINIUPNPC_VERSION.*"2.."' $(STAGING_DIR)/usr/include/miniupnpc/miniupnpc.h && echo 1)
+ ifeq ($(MINIUPNPC_IS_NEW_ENOUGH),1)
+ 	override DEFS+=-DZT_USE_SYSTEM_MINIUPNPC
+ 	LDLIBS+=-lminiupnpc
diff --git a/package/zerotier-one/0002-remove-pie.patch b/package/zerotier-one/0002-remove-pie.patch
new file mode 100644
index 0000000000..aa297f85d4
--- /dev/null
+++ b/package/zerotier-one/0002-remove-pie.patch
@@ -0,0 +1,28 @@ 
+From ef1a75fd1bf271cc5c73d966a861dfcd26d62cd5 Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Mon, 30 Apr 2018 16:14:30 +0200
+Subject: [PATCH 2/8] remove -pie
+
+fixes relocation "against `a local symbol' can not be used
+when making a shared object; recompile with -fPIC" error
+---
+ make-linux.mk | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/make-linux.mk
++++ b/make-linux.mk
+@@ -73,11 +73,11 @@ ifeq ($(ZT_DEBUG),1)
+ 	# C25519 in particular is almost UNUSABLE in -O0 even on a 3ghz box!
+ node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CXXFLAGS=-Wall -O2 -g -pthread $(INCLUDES) $(DEFS)
+ else
+-	CFLAGS?=-O3 -fstack-protector -fPIE
++	CFLAGS?=-O3 -fstack-protector
+ 	override CFLAGS+=-Wall -Wno-deprecated -pthread $(INCLUDES) -DNDEBUG $(DEFS)
+-	CXXFLAGS?=-O3 -fstack-protector -fPIE
++	CXXFLAGS?=-O3 -fstack-protector
+ 	override CXXFLAGS+=-Wall -Wno-deprecated -std=c++11 -pthread $(INCLUDES) -DNDEBUG $(DEFS)
+-	LDFLAGS=-pie -Wl,-z,relro,-z,now
++	LDFLAGS=-Wl,-z,relro,-z,now
+ 	STRIP?=strip
+ 	STRIP+=--strip-all
+ endif
diff --git a/package/zerotier-one/0003-remove-arm32-conservative-CFLAGS.patch b/package/zerotier-one/0003-remove-arm32-conservative-CFLAGS.patch
new file mode 100644
index 0000000000..f0ffacf0e7
--- /dev/null
+++ b/package/zerotier-one/0003-remove-arm32-conservative-CFLAGS.patch
@@ -0,0 +1,20 @@ 
+From 093ec88ff213a5713ad5d3c26ddf5ecdea3c6377 Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Sun, 4 Aug 2019 03:56:37 +0200
+Subject: [PATCH 3/8] remove arm32 conservative CFLAGS
+
+---
+ make-linux.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/make-linux.mk
++++ b/make-linux.mk
+@@ -276,7 +276,7 @@ ifeq ($(ZT_CONTROLLER),1)
+ endif
+ 
+ # ARM32 hell -- use conservative CFLAGS
+-ifeq ($(ZT_ARCHITECTURE),3)
++ifeq (0,3)
+ 	ifeq ($(shell if [ -e /usr/bin/dpkg ]; then dpkg --print-architecture; fi),armel)
+ 		override CFLAGS+=-march=armv5t -mfloat-abi=soft -msoft-float -mno-unaligned-access -marm
+ 		override CXXFLAGS+=-march=armv5t -mfloat-abi=soft -msoft-float -mno-unaligned-access -marm
diff --git a/package/zerotier-one/0004-accept-external-linker-flags.patch b/package/zerotier-one/0004-accept-external-linker-flags.patch
new file mode 100644
index 0000000000..de144d25c7
--- /dev/null
+++ b/package/zerotier-one/0004-accept-external-linker-flags.patch
@@ -0,0 +1,20 @@ 
+From 1a4ffe62c729f9c4f63cdfd26151e3724bc23f86 Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Wed, 2 May 2018 16:06:46 +0200
+Subject: [PATCH 4/8] accept external linker flags
+
+---
+ make-linux.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/make-linux.mk
++++ b/make-linux.mk
+@@ -77,7 +77,7 @@ else
+ 	override CFLAGS+=-Wall -Wno-deprecated -pthread $(INCLUDES) -DNDEBUG $(DEFS)
+ 	CXXFLAGS?=-O3 -fstack-protector
+ 	override CXXFLAGS+=-Wall -Wno-deprecated -std=c++11 -pthread $(INCLUDES) -DNDEBUG $(DEFS)
+-	LDFLAGS=-Wl,-z,relro,-z,now
++	LDFLAGS+=-Wl,-z,relro,-z,now
+ 	STRIP?=strip
+ 	STRIP+=--strip-all
+ endif
diff --git a/package/zerotier-one/0005-link-natpmp.patch b/package/zerotier-one/0005-link-natpmp.patch
new file mode 100644
index 0000000000..893c10a054
--- /dev/null
+++ b/package/zerotier-one/0005-link-natpmp.patch
@@ -0,0 +1,20 @@ 
+From de625c51dba36b390c93a1db00b19b6112178764 Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Sat, 21 Nov 2020 17:53:28 +0100
+Subject: [PATCH 5/8] link natpmp
+
+---
+ make-linux.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/make-linux.mk
++++ b/make-linux.mk
+@@ -34,7 +34,7 @@ else
+ 	override DEFS+=-DMINIUPNP_STATICLIB -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DOS_STRING=\"Linux\" -DMINIUPNPC_VERSION_STRING=\"2.0\" -DUPNP_VERSION_STRING=\"UPnP/1.1\" -DENABLE_STRNATPMPERR
+ 	ONE_OBJS+=ext/miniupnpc/connecthostport.o ext/miniupnpc/igd_desc_parse.o ext/miniupnpc/minisoap.o ext/miniupnpc/minissdpc.o ext/miniupnpc/miniupnpc.o ext/miniupnpc/miniwget.o ext/miniupnpc/minixml.o ext/miniupnpc/portlistingparse.o ext/miniupnpc/receivedata.o ext/miniupnpc/upnpcommands.o ext/miniupnpc/upnpdev.o ext/miniupnpc/upnperrors.o ext/miniupnpc/upnpreplyparse.o
+ endif
+-ifeq ($(wildcard /usr/include/natpmp.h),)
++ifeq ($(wildcard $(STAGING_DIR)/usr/include/natpmp.h),)
+ 	ONE_OBJS+=ext/libnatpmp/natpmp.o ext/libnatpmp/getgateway.o
+ else
+ 	LDLIBS+=-lnatpmp
diff --git a/package/zerotier-one/0006-gcc10.patch b/package/zerotier-one/0006-gcc10.patch
new file mode 100644
index 0000000000..9550dfdde4
--- /dev/null
+++ b/package/zerotier-one/0006-gcc10.patch
@@ -0,0 +1,24 @@ 
+From e0c76c5ccf049d22bc47d723567926346e4d3639 Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Sat, 21 Nov 2020 18:19:21 +0100
+Subject: [PATCH 6/8] gcc10
+
+---
+ osdep/Binder.hpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/osdep/Binder.hpp
++++ b/osdep/Binder.hpp
+@@ -396,9 +396,9 @@ public:
+ 					}
+ #endif // __LINUX__
+ 					if (_bindingCount < ZT_BINDER_MAX_BINDINGS) {
+-						_bindings[_bindingCount].udpSock = udps;
+-						_bindings[_bindingCount].tcpListenSock = tcps;
+-						_bindings[_bindingCount].address = ii->first;
++						_bindings[(unsigned int)_bindingCount].udpSock = udps;
++						_bindings[(unsigned int)_bindingCount].tcpListenSock = tcps;
++						_bindings[(unsigned int)_bindingCount].address = ii->first;
+ 						phy.setIfName(udps,(char*)ii->second.c_str(),(int)ii->second.length());
+ 						++_bindingCount;
+ 					}
diff --git a/package/zerotier-one/0007-add-cerrno-header-for-str-errno.patch b/package/zerotier-one/0007-add-cerrno-header-for-str-errno.patch
new file mode 100644
index 0000000000..d2595f98b6
--- /dev/null
+++ b/package/zerotier-one/0007-add-cerrno-header-for-str-errno.patch
@@ -0,0 +1,23 @@ 
+From e06177a74f1e4314baf17c52f360dabcb78e69cd Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Sun, 29 Nov 2020 19:45:36 +0100
+Subject: [PATCH 7/8] add cerrno header for (str)errno
+
+Fixes compilation under libcxx.
+
+Signed-off-by: Rosen Penev <rosenp@gmail.com>
+---
+ osdep/LinuxNetLink.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/osdep/LinuxNetLink.cpp
++++ b/osdep/LinuxNetLink.cpp
+@@ -22,6 +22,8 @@
+ #include <unistd.h>
+ #include <linux/if_tun.h>
+ 
++#include <cerrno>
++
+ #ifndef IFNAMSIZ
+ #define IFNAMSIZ 16
+ #endif
diff --git a/package/zerotier-one/0008-fix-compilation-for-arm_cortex-a7-neon.patch b/package/zerotier-one/0008-fix-compilation-for-arm_cortex-a7-neon.patch
new file mode 100644
index 0000000000..88b640f704
--- /dev/null
+++ b/package/zerotier-one/0008-fix-compilation-for-arm_cortex-a7-neon.patch
@@ -0,0 +1,23 @@ 
+From 7ac88ced6cdedf88ccebfc1de12d92b269d4a60a Mon Sep 17 00:00:00 2001
+From: Moritz Warning <moritzwarning@web.de>
+Date: Mon, 30 Nov 2020 12:25:42 +0100
+Subject: [PATCH 8/8] fix compilation for arm_cortex-a7+neon
+
+Fixes "error: 'vrbitq_u8' was not declared in this scope"
+
+Signed-off-by: Rosen Penev <rosenp@gmail.com>
+---
+ node/Constants.hpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/node/Constants.hpp
++++ b/node/Constants.hpp
+@@ -109,7 +109,7 @@
+ #include <immintrin.h>
+ #endif
+ 
+-#if (defined(__ARM_NEON) || defined(__ARM_NEON__) || defined(ZT_ARCH_ARM_HAS_NEON))
++#if (defined(__aarch64__) || defined(ZT_ARCH_ARM_HAS_NEON))
+ #if (defined(__APPLE__) && !defined(__LP64__)) || (defined(__ANDROID__) && defined(__arm__))
+ #ifdef ZT_ARCH_ARM_HAS_NEON
+ #undef ZT_ARCH_ARM_HAS_NEON
diff --git a/package/zerotier-one/0009-auxv.patch b/package/zerotier-one/0009-auxv.patch
new file mode 100644
index 0000000000..34991688e7
--- /dev/null
+++ b/package/zerotier-one/0009-auxv.patch
@@ -0,0 +1,11 @@ 
+--- a/node/Utils.cpp
++++ b/node/Utils.cpp
+@@ -28,7 +28,7 @@
+ #include <sys/stat.h>
+ #include <sys/uio.h>
+ #include <dirent.h>
+-#ifdef __LINUX__
++#if 0
+ #include <sys/auxv.h>
+ #endif
+ #endif
diff --git a/package/zerotier-one/Config.in b/package/zerotier-one/Config.in
new file mode 100644
index 0000000000..db4038c557
--- /dev/null
+++ b/package/zerotier-one/Config.in
@@ -0,0 +1,14 @@ 
+config BR2_PACKAGE_ZEROTIER_ONE
+	bool "zerotier-one"
+	depends on BR2_INSTALL_LIBSTDCPP
+	depends on BR2_TOOLCHAIN_HAS_THREADS
+	select BR2_PACKAGE_LIBMINIUPNPC
+	select BR2_PACKAGE_LIBNATPMP
+	help
+	  ZeroTier One lets you join ZeroTier virtual networks and have
+	  them appear as tun/tap ports on your system.
+
+	  https://www.zerotier.com/
+
+comment "zerotier-one needs a toolchain w/ C++, threads"
+	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/zerotier-one/zerotier-one.hash b/package/zerotier-one/zerotier-one.hash
new file mode 100644
index 0000000000..f6892a0cc2
--- /dev/null
+++ b/package/zerotier-one/zerotier-one.hash
@@ -0,0 +1,3 @@ 
+# Locally calculated
+sha256  0f45a4050cdfea1018634c88b6c302cbbfcc3f7f93cb94bed840a15e3ffa55ba  zerotier-one-1.6.4.tar.gz
+sha256  ef3edeecd9fa4fb5eff7a74afe964a02b7d9136bd07c4b4cd3864432d6890515  LICENSE.txt
diff --git a/package/zerotier-one/zerotier-one.mk b/package/zerotier-one/zerotier-one.mk
new file mode 100644
index 0000000000..f7262e875d
--- /dev/null
+++ b/package/zerotier-one/zerotier-one.mk
@@ -0,0 +1,35 @@ 
+################################################################################
+#
+# zerotier-one
+#
+################################################################################
+
+ZEROTIER_ONE_VERSION = 1.6.4
+ZEROTIER_ONE_SITE = $(call github,zerotier,ZeroTierOne,$(ZEROTIER_ONE_VERSION))
+ZEROTIER_ONE_DEPENDENCIES = libminiupnpc libnatpmp
+ZEROTIER_ONE_LICENSE = BUSL-1.1
+ZEROTIER_ONE_LICENSE_FILES = LICENSE.txt
+
+define ZEROTIER_ONE_BUILD_CMDS
+	$(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)
+endef
+
+define ZEROTIER_ONE_INSTALL_TARGET_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install
+endef
+
+define ZEROTIER_ONE_INSTALL_INIT_SYSTEMD
+	$(INSTALL) -D -m 644 $(@D)/debian/zerotier-one.service \
+		$(TARGET_DIR)/usr/lib/systemd/system/zerotier-one.service
+endef
+
+define ZEROTIER_ONE_INSTALL_INIT_SYSV
+	$(INSTALL) -D -m 755 $(@D)/debian/zerotier-one.init \
+		$(TARGET_DIR)/etc/init.d/S60zerotier-one
+endef
+
+define ZEROTIER_ONE_LINUX_CONFIG_FIXUPS
+	$(call KCONFIG_ENABLE_OPT,CONFIG_TUN)
+endef
+
+$(eval $(generic-package))