Compare commits

...

2771 Commits

Author SHA1 Message Date
7d951783ca A bunch of little warning removal and format fix things. 2020-12-04 15:52:30 -05:00
ec76f6e1d2 Mirror over a few more AES fixes. 2020-12-03 22:29:38 -05:00
c943d0e807 InetAddress fix ported from 1.6 2020-12-03 22:28:40 -05:00
a1ceccaf6e Port back over some improvements from 1.6 2020-11-18 21:56:16 -05:00
326a871fac Mirror over Mac fixes. 2020-11-02 19:57:57 -05:00
e462750bdd Remove unnecessary includes that are not needed. 2020-10-30 16:14:44 -04:00
7c599fe83e Typo / thinko 2020-10-27 10:41:46 -04:00
d7e4404c17 A little more clarity to locator display. 2020-10-26 22:41:49 -04:00
441f4986ac Locator CLI plumbing. 2020-10-26 22:33:01 -04:00
d70cfe6850 typo 2020-10-26 20:32:27 -04:00
4ed77e0c0f Upgrade Go modules. 2020-10-26 19:41:55 -04:00
f8e3251efe Locator CGo API fixes. 2020-10-26 19:35:10 -04:00
1bb43476e8 Build fix, add Go unit tests for CGo Locator interface. 2020-10-26 18:44:45 -04:00
387d293793 Use Base32 everywhere for blobs to be consistent with core. 2020-10-23 18:10:25 -04:00
bd96e53bcc Remove redundant includes. 2020-10-22 16:18:18 -04:00
bab9a7f508 Fix and modernize API peer list function. 2020-10-22 15:53:35 -04:00
31eb950750 Missing flag. 2020-10-20 18:53:11 -04:00
31ef205828 ARM build fixes. 2020-10-16 18:29:16 -04:00
a7350bc312 Bust out ARM crypto extensions AES into a separate file too. 2020-10-16 17:41:03 -04:00
0e396526e4 Some small Go stuff, and break out AES-NI into its own .cpp file for easier management. 2020-10-16 15:04:22 -04:00
8e5f8140a2 One more thing to move to CAPI.cpp. 2020-10-14 19:02:32 -04:00
8f746f5099 Move C API into its own source file, and fix some build flags to mirror fix in 1.6.0 to run on old Atom processors. 2020-10-14 18:10:59 -04:00
bc8aa6c359 Mirror over some AES function attribute changes. 2020-10-13 16:10:53 -04:00
00714f5f2e cleanup 2020-10-08 19:03:46 -04:00
d20470d30f cleanup 2020-09-18 19:54:27 -04:00
c2d14599c5 Make protocol versions same as 1.x series. 2020-08-25 08:06:59 -07:00
896656115f Build fix for Go 1.15 2020-08-17 14:53:34 -07:00
72114e4cf8 Remove HTTP stuff from core API. This will be handled entirely in the service. 2020-08-13 17:46:58 -07:00
2abf2c5695 More certificate stuff... 2020-08-12 21:28:06 -07:00
fe01352412 Cert CLI stuff, module bump. 2020-08-12 16:40:17 -07:00
782f15f8c9 Small software GMAC optimization. 2020-08-11 20:50:36 +00:00
e0492a7e69 More Go CLI work, and some cleanup. 2020-08-11 13:24:27 -07:00
cb147a3e8a Documentation in CLI, indicate what commands require a running node. 2020-08-10 16:04:05 -07:00
f97e9e1f5d Warning removal, Go work... 2020-08-10 12:35:26 -07:00
f1b6cb2ace GMAC is faster in software now. 2020-08-07 17:33:27 +00:00
27939a5233 AES performance on rpi4 is now at least acceptable. 2020-08-06 23:09:34 +00:00
7d5ba6f739 AES on pi4 2020-08-06 14:34:34 -07:00
37360d5e2e More test timing fixes. 2020-08-06 09:53:33 -07:00
ae13983b10 Fix benchmarks to not take forever on slower chips. 2020-08-06 09:48:07 -07:00
78670aea58 AES software optimizations to make rpi4 faster. 2020-08-06 09:34:37 -07:00
d0cc3ac333 Small AES optimizations on ARM64. 2020-08-03 23:14:02 +00:00
4273d89373 Linux/GCC fixes. 2020-07-31 16:18:06 -07:00
9ef780e05c Build fix-- these are not needed. 2020-07-31 15:48:18 -07:00
9da0b43d2d Fix some JSON names, regularize use of IP/port info in service code. 2020-07-31 15:32:09 -07:00
7c929099b3 Change date bump for v2.0 2020-07-31 14:26:55 -07:00
ea2f95ed70 Optimizations, make Locator deserialize the same regardless of serialized field order. 2020-07-31 14:05:54 -07:00
fc39894541 Small fix to reduce memory use a little bit more. 2020-07-31 13:53:11 -07:00
1fc4dce835 A bunch of cleanup, make Location serialization format saner, reduce core memory use. 2020-07-31 13:27:27 -07:00
0c56d7c769 Don't kick in AVX2/AVX512 VTEC unless the packet is larger than 256 bytes. 2020-07-30 10:02:37 -07:00
1f2a107d1d Some formatting. 2020-07-29 22:10:54 -07:00
4474303b01 Indent fix. 2020-07-29 21:59:53 -07:00
3b773da8bc Add separate accelerated() function for AES::GMAC. 2020-07-29 21:52:07 -07:00
7efaab2af1 Add 4X parallel ARM AES so VTEC will kick in, yo. Seems to help on Graviton, not much on small chips but thats okay. 2020-07-30 04:17:01 +00:00
064cb6dad7 AES-GMAC for ARM crypto extensions (pmull) 2020-07-30 03:45:40 +00:00
d5afba2610 ARM auto-detection (unfinished) 2020-07-29 21:17:17 +00:00
b4d0307d9e Some AES NEON reorg. 2020-07-29 13:37:32 -07:00
71b72a1ef2 AES (but not yet GMAC) for ARM64 native AES intrinsics, performs really well! 2020-07-29 20:10:27 +00:00
b0e8bac310 Add CMake options to automatically add AArch64 flags for crypto enable, etc. 2020-07-29 09:13:55 -07:00
9a501a76d1 Starting on AES ARM intrinsics work. 2020-07-28 20:44:19 -07:00
becc4aa8ea More certificate plumbing. 2020-07-28 14:38:41 -07:00
95d7970f34 Compiler flags, docs. 2020-07-28 09:41:43 -07:00
81530e5990 Certificate plumbing in Go. 2020-07-27 16:45:43 -07:00
825b19aedc Code readability improvement. 2020-07-23 15:13:42 -07:00
0f04b5afc7 Add CRL fields to Go shadow of Certificate. 2020-07-23 15:05:12 -07:00
189dea7c96 Certificate work, and add an Endpoint attributes field to Locator for future use. 2020-07-22 20:38:57 -07:00
85ef9535d5 So that's where those NULLs came from... 2020-07-17 21:12:28 -07:00
71a2206c5d Move a few things. 2020-07-17 10:57:01 -07:00
641d1a52c8 Warning removal. 2020-07-17 10:49:53 -07:00
407f737212 A bunch of Topology simplification, integrate some cert and root changes. 2020-07-16 20:04:05 -07:00
0d58865061 Fix certificte self-test. 2020-07-16 12:30:09 -07:00
cfb0bc4f8e Better CRL implementation, AES fix. 2020-07-16 12:01:24 -07:00
dfe230be8b CRL support 2020-07-16 10:51:54 -07:00
75ecfffd52 More tweaks. 2020-07-15 16:51:39 -07:00
883cbd182d Some optimization work on crypto code. 2020-07-15 14:33:02 -07:00
866a20e85b More small stuff. 2020-07-14 16:34:46 -07:00
a19bc1e826 Cleanup, remove legacy accessors, formatting. 2020-07-14 16:23:53 -07:00
a117c92a1e Module update for Go code. 2020-07-13 15:53:49 -07:00
65ef40b091 Some Go reorg. 2020-07-13 15:44:54 -07:00
15f5125c8c Hide some low-level stuff from public certificate API in Go. 2020-07-13 14:54:53 -07:00
e5f2314055 Fix another not-fun bug. Also exterminate a memory leak and do a few optimizations. 2020-07-10 16:38:32 -07:00
f018fefeb4 Even less bugs! 2020-07-09 20:08:08 -07:00
04d8c3dd79 Now with less bugs! 2020-07-09 14:57:44 -07:00
7994e3aa78 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-07-09 10:12:31 -07:00
1eacbdf374 Some cleanup, and fix a really obscure bug in Certificate. 2020-07-09 10:12:24 -07:00
492e78e2cf back to not building all archs by default 2020-07-08 10:27:41 -07:00
8b1c691a5e Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-07-07 10:12:49 -07:00
b02fc1f28b CGo hell, fix a thinko in CMakeFile. 2020-07-07 10:12:38 -07:00
ecf1fe9aa5 had these transposed 2020-07-07 08:57:53 -07:00
7e341ed397 More certificate plumbing. 2020-07-06 19:28:43 -07:00
e5e6f82a8e Windows build fix. 2020-07-06 15:28:25 -07:00
eca929faef Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-07-06 15:16:05 -07:00
b027a83789 Minor stuff... 2020-07-06 15:15:21 -07:00
1ad0fbdb76 Revert "fix compilation of zt_service_tests on Windows"
This reverts commit 8f1e6a2fde.
2020-07-06 15:04:46 -07:00
8f1e6a2fde fix compilation of zt_service_tests on Windows 2020-07-06 12:45:06 -07:00
451e6be180 Evil not very fun CGO glue for Certificate works! Also added a self-test project for Go code. Not using "go test" because of CMake build and CGO linking requirements that make it a pain in the derriere. 2020-07-03 16:05:43 -07:00
7b869684c6 More cert Go plumbing. 2020-07-03 14:42:29 -07:00
0d764f5a3d CGO glue for certificates, and Go formatting and other boring stuff. 2020-07-03 13:08:40 -07:00
899f0c9749 Certificate API 2020-07-02 22:22:31 -07:00
727aa8e71f Warning removal. 2020-07-02 15:03:12 -07:00
404b7a5493 Even more clever... and would crash if something weird happened, which is desirable. 2020-07-02 13:58:31 -07:00
befc50ac3a Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-07-02 13:57:32 -07:00
94c35d395e A bit more optimization/cleanup. 2020-07-02 13:57:19 -07:00
7883e5d8ad Fix cast order of operations 2020-07-02 13:28:58 -07:00
97cd184211 cleanup 2020-07-02 13:09:59 -07:00
c17ac16728 Windows fix. 2020-07-02 11:53:47 -07:00
b696ab12b8 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-07-02 11:52:34 -07:00
e7ccd74a9e Disable functions missing in MinGW 2020-07-02 11:52:20 -07:00
676a3444cd fix s390x static section of jenkinsfile 2020-07-02 11:19:35 -07:00
bd0299f392 Some cleanup and optimization. 2020-07-02 10:33:34 -07:00
e213317532 -lm is needed on some platforms, harmless on others 2020-07-01 12:38:22 -07:00
206524b9e6 BSD fixes. 2020-07-01 12:30:41 -07:00
7a458e0138 BSD fixes. 2020-07-01 12:28:44 -07:00
9db9211ed3 Fix method name problem. 2020-07-01 11:14:01 -07:00
2ee550bbfd Some optimization. 2020-06-30 23:44:24 -07:00
9029570452 Test certificate copy/construct. 2020-06-30 23:20:50 -07:00
6af39da61a Some formatting and optimization. 2020-06-30 22:23:57 -07:00
ad692b07c3 Add CPUID output to self-test. 2020-06-30 20:51:14 -07:00
3f4809457f A bunch of compile fixes, and an edge case fix in Dictionary. 2020-06-30 20:31:41 -07:00
53b85a2bbb Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-06-30 11:20:50 -07:00
92d2bbc63c Some symbol renaming, performance improvements, a bug fix for compiling on some platforms, and some Topology work. 2020-06-30 11:20:44 -07:00
536be73006 s390x all static 2020-06-30 11:06:33 -07:00
115187204f remove debug output 2020-06-30 10:04:19 -07:00
b482064a55 reenable some temporarily disabled stuff 2020-06-30 09:59:18 -07:00
722a50f7be armel image build shortcut 2020-06-29 17:15:18 -07:00
623213ea0b fix wheezy symlink 2020-06-29 17:13:56 -07:00
0589c4ab6a fix stretch symlink 2020-06-29 17:12:52 -07:00
46c4a11a7a fix jessie symlink 2020-06-29 17:11:55 -07:00
16d27dfddb fix buster ld symlink 2020-06-29 17:09:15 -07:00
aee344fe47 kill a couple docker images 2020-06-29 15:18:01 -07:00
696c77f5c8 no static builds for armel
no support in Alpine, can't build it
2020-06-29 14:50:52 -07:00
8921914098 force use of vendored modules 2020-06-29 14:24:06 -07:00
f33574dfbc needed on Jessie, too 2020-06-29 13:29:33 -07:00
e2bc081740 hack to run go on armel containers 2020-06-29 13:17:20 -07:00
a6d7f7cac2 -latomic for armel 2020-06-29 12:19:25 -07:00
c714112e00 fix building cmake on arm32 2020-06-29 09:23:48 -07:00
bae91724a1 Certificate passes all tests. 2020-06-27 14:52:55 -07:00
daef6a24d1 Now with less bugs, and less limits that could pose an issue later. 2020-06-27 13:52:12 -07:00
661ebfee94 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-06-26 13:09:35 -07:00
73d0e2e7e0 Interim commit of some cert and cert testing work, also other cleanup in Utils. 2020-06-26 13:09:24 -07:00
917cc58560 Only build problems left are the compiler errors adam has tickets for 2020-06-25 18:01:27 -07:00
1eea80194b apparently not in backports as advertised 2020-06-25 15:40:10 -07:00
d569217ff5 echo, not cat 2020-06-25 15:38:21 -07:00
d823725eb6 update alpine base image 2020-06-25 15:23:09 -07:00
f08d20560b stretch has mips golang 1.11 in backports
don't know if it'll work though
2020-06-25 15:15:16 -07:00
c0385466e2 no golang packages for buster or stretch on mips64
no mips on stretch at all
2020-06-25 15:07:12 -07:00
c22b002226 Looks like we have to turn off bullseye 32-bit ARM too 2020-06-25 14:55:01 -07:00
9aac1fc47f default BUILD_ALL flag to true for now
since that's what I"m testing now
2020-06-25 14:52:08 -07:00
39d4fadf90 add mips64le to debian native build lists 2020-06-25 11:56:32 -07:00
4968afb89a no 32-bit arm on sid for the time being 2020-06-25 11:41:09 -07:00
8b45018f28 remove ldflag on windows 2020-06-25 09:39:06 -07:00
007b3bd10b openssl dev for sid 2020-06-25 08:49:23 -07:00
5e1b7f2ba6 Certificate stuff, but not plumbled through to CLI yet to actually make them. 2020-06-25 07:40:21 -07:00
40820ddea9 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-06-24 17:08:19 -07:00
4fbc29158d A few more things to manually merge in CMakeLists.txt 2020-06-24 17:08:11 -07:00
6e1115ea03 More cert work, support certs in data store, and manually merge CMakefile. 2020-06-24 17:05:34 -07:00
d5d1f4a313 forgot the -y on apt-get 2020-06-24 14:59:38 -07:00
1e65aad95b args 2020-06-24 14:53:02 -07:00
495ac17346 debian mips64 image fixes 2020-06-24 14:51:59 -07:00
2f82db97ed blah 2020-06-24 14:46:30 -07:00
35f3d16084 bullseye base version 2020-06-24 14:23:30 -07:00
29dfe240e4 mips64le updates 2020-06-24 14:21:47 -07:00
aa9ca845e8 Merge edge, still need to resolve CMakeLists.txt 2020-06-24 10:50:16 -07:00
05a3831acb Certificates, and rename credentials to credential since they are not truly certificates (according to the common definition). 2020-06-24 10:46:59 -07:00
9a7d26cd9e fix package name 2020-06-24 10:07:08 -07:00
ab36607a48 docker & build parallelization 2020-06-24 09:57:38 -07:00
02a810b8d6 same issue on sid, apparently 2020-06-23 17:18:54 -07:00
2d1ca5f346 cmake version from debian-bullseye doesn't like ARM
so let's build the latest from src
2020-06-23 17:12:52 -07:00
65aca7d84a let's not force the build server to swap out when building releases 2020-06-23 16:48:50 -07:00
d3a9ce95bc more flag fixes 2020-06-23 16:41:55 -07:00
ee53f056ce fix flags 2020-06-23 16:29:35 -07:00
f3defdf3a6 one more 2020-06-23 14:42:18 -07:00
6d88a13407 fix variable 2020-06-23 14:28:32 -07:00
9722bdef75 fix variable name 2020-06-23 13:33:59 -07:00
f87e41abee jenkinsfile armhf/armel stuff 2020-06-23 12:56:29 -07:00
d7c6f8ae3f armel/armhf differentiation in builds 2020-06-23 11:49:43 -07:00
4d80f7c41d more go static build flags 2020-06-23 09:53:46 -07:00
de00486b80 no armhf for ubuntu focal 2020-06-23 09:41:45 -07:00
c2664033bc try to force 32-bit package for centos7 i386 2020-06-23 09:04:45 -07:00
f96a9f63ea . 2020-06-23 08:53:13 -07:00
78b18f2bdb remove centos6 from jenkinsfile 2020-06-23 08:40:24 -07:00
8bb0753f62 get cmake from yum for centos8 2020-06-22 16:23:34 -07:00
0c5d1a793c fix docker images for static targets 2020-06-22 15:58:49 -07:00
34692489cb RIP Centos 6 2020-06-22 15:18:30 -07:00
52b619b38f temporarily disable builds of Debian Stretch, FreeBSD, Ubuntu Bionic AMD64, and Ubuntu Xenial 2020-06-22 14:34:23 -07:00
9009a864ab re-enable static build packaging with updates 2020-06-22 14:03:27 -07:00
09a8b66d3b enable -DPACKAGE_STATIC=1 builds
Only configures the project for packaging of the statically built binary placed in build/
2020-06-22 13:50:35 -07:00
7c6f5e2c37 make install works on Linux 2020-06-22 11:00:48 -07:00
930bd91598 finish up rpm generation 2020-06-22 09:49:25 -07:00
050615f2d2 fix centos7 x64 2020-06-19 16:50:42 -07:00
05cc4ea36a dont use __has_include 2020-06-19 16:36:04 -07:00
4cafc1b776 extraneous ` in rpm building 2020-06-19 16:32:43 -07:00
fb559434b6 jenkins builds rpms 2020-06-19 16:24:32 -07:00
02493d473f basic RPM package
still needs systemd/init scripts
2020-06-19 16:21:47 -07:00
1abcb5adf5 parallelize make 2020-06-19 15:42:33 -07:00
1b8703db95 add cmake package args 2020-06-19 15:40:48 -07:00
517a171a6c dont split debian description over multiple lines 2020-06-19 15:35:42 -07:00
b126bf727a non-static build debian packages 2020-06-19 15:33:08 -07:00
cfc2a43f51 A whole bunch of minor refactoring, and rename a bunch of classes to be more canonical. A credential really is not a certficiate, so just call IdentificationCertificate Certificate and call the network auth stuff credentials. 2020-06-18 17:02:36 -07:00
0477e16860 freebsd doesn't like the root makefile 2020-06-18 16:31:15 -07:00
cc13bf1049 fix jenkinsfile 2020-06-18 15:35:35 -07:00
a66b4a6f5e add freebsd build target 2020-06-18 15:26:29 -07:00
f989758159 parallelize windows build 2020-06-18 13:46:57 -07:00
ade8373c0c because reasons 2020-06-18 13:44:19 -07:00
fa4ecea095 wtf 2020-06-18 13:34:01 -07:00
7ae9c6d55c . 2020-06-18 13:19:30 -07:00
b369d4b9a1 fix 32-bit windows build 2020-06-18 13:01:05 -07:00
ea5bb43cf9 windows 32bit builds 2020-06-18 11:58:00 -07:00
6ea60bc429 let's see if paths with no spaces works 2020-06-18 11:26:57 -07:00
b094278b64 explicitly set SHELL environment variable 2020-06-18 10:59:46 -07:00
f21384e499 windows fun 2020-06-18 10:54:31 -07:00
620fa9ab54 🤷‍♂️ 2020-06-17 13:26:36 -07:00
d8c83dbb08 pita 2020-06-17 13:18:01 -07:00
992d1471b8 add CMake and Go to Windows PATH 2020-06-17 12:29:03 -07:00
27b14aefcd help it find cmd.exe 2020-06-17 12:19:06 -07:00
a7fee6b02f playing with paths 2020-06-17 12:14:50 -07:00
cea297b69d enable windows builds 2020-06-17 12:04:29 -07:00
c348bfff30 Fix quote craziness. 2020-06-16 22:33:43 -07:00
224c468aa3 OMG Windows builds! 2020-06-16 22:26:47 -07:00
a472aafb3e Windows now builds at least to the point of running zt_core_tests. Go will need a revision to the command in CMake files. 2020-06-16 21:21:24 -07:00
b165b9dd4f another fix 2020-06-16 17:46:22 -07:00
7d388e0c79 fix mac jenkins 2020-06-16 17:34:58 -07:00
4036657e32 add macos build to jenkins 2020-06-16 16:13:01 -07:00
d50c6ee1ce need ssl dev 2020-06-16 15:07:31 -07:00
143f4bef9f Select the right C++ library, hopefully. 2020-06-16 15:00:59 -07:00
765dc413db Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-06-16 15:00:25 -07:00
423b0d891c need stdint.h on Windows, too 2020-06-16 14:48:27 -07:00
3db0e9d068 use correct dockerfile for Xenial x64 2020-06-16 14:07:40 -07:00
1f3f9bc341 for ptrdiff_t 2020-06-16 13:52:26 -07:00
e84bfca5a5 xenial needs newer cmake, too 2020-06-16 13:45:35 -07:00
bd488a08f8 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-06-16 13:36:48 -07:00
3c6448a717 Move all CGO flags into CMakeLists.txt so they can inherit all our system detection and stuff. 2020-06-16 13:36:43 -07:00
0a2dfc719a fix centos 7 & debian stretch 2020-06-16 13:33:05 -07:00
f0fc4713d8 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-06-16 13:01:20 -07:00
b2132aa975 needs libssl dev 2020-06-16 12:19:31 -07:00
7739984c56 typo 2020-06-16 12:11:48 -07:00
034188b0ee reset WORKDIR back to root once built 2020-06-16 12:07:20 -07:00
98ea27ecb0 have to build & install cmake on non-x64 versions of debian stretch 2020-06-16 11:59:08 -07:00
8d2a0f764b Some minor reorg. 2020-06-16 11:51:41 -07:00
6c43e0b946 add scl-utils 2020-06-16 11:28:42 -07:00
77342f8571 try setting scl_source on centos7 for newer compilers 2020-06-16 10:40:01 -07:00
e808b4b45f add ubuntu focal builds 2020-06-16 10:26:48 -07:00
86d91cb625 no ubuntu 20.04 for ArmV7 2020-06-16 10:10:51 -07:00
3f21e59ab4 more DEBIAN_FRONTEND=noninteractive 2020-06-16 09:53:42 -07:00
3669cac3c9 apparently apt now asks for your region interactively. Even in a docker image 2020-06-16 09:50:16 -07:00
b919f5a95b helps to load the correct dockerfile 2020-06-16 09:46:42 -07:00
5e6484ff5a add docker images for ubuntu 20.04 2020-06-16 09:08:26 -07:00
ecb09aa2e1 Fix bounds check bug. 2020-06-15 16:30:52 -07:00
346d4b572b Fix symbol issues in static build. 2020-06-15 15:02:07 -07:00
1a38dfdbde back to go main 2020-06-15 13:51:24 -07:00
69f1c8701b Define uint since that is not a standard symbol. 2020-06-15 13:13:03 -07:00
9daf4540de Certificates, and it builds again. 2020-06-15 11:17:24 -07:00
f447608d6b Certificates, etc... work in progress. 2020-06-13 21:41:39 -07:00
001fb54b15 fix go static command line 2020-06-12 16:08:34 -07:00
ffc786d796 update make call for static 2020-06-12 15:59:53 -07:00
a1649d6cda trying again for static build. also add static go flags 2020-06-12 15:58:00 -07:00
541b2cbef0 . 2020-06-12 15:49:28 -07:00
5166aa6913 added static build option 2020-06-12 15:43:12 -07:00
b88000c349 . 2020-06-12 15:39:02 -07:00
49eefe7e78 rename error for static 2020-06-12 15:31:34 -07:00
bfdac7a8f0 use alpine go package 2020-06-12 15:21:48 -07:00
d9dd77bc6e let cgo find versionl.h 2020-06-12 15:09:31 -07:00
e46a342e17 ensure version.h is in the include path 2020-06-12 14:57:41 -07:00
760607f58a static alpine builds reenabled 2020-06-12 14:46:48 -07:00
35b5780907 remove __has_include 2020-06-12 14:44:25 -07:00
51159601b0 one more time 2020-06-12 14:27:34 -07:00
4cb35a2975 yes pipe too 2020-06-12 13:58:50 -07:00
405250ce79 tell curl to follow redirects 2020-06-12 13:56:44 -07:00
81b11168c9 centos 8 update 2020-06-12 13:48:31 -07:00
066cdfe2ac alternate newer cmake install 2020-06-12 13:46:40 -07:00
062189b589 add sid 32bit 2020-06-12 11:40:34 -07:00
a11d0027ce cast to uintptr_t instead
should fix non 64-bit platforms
2020-06-12 09:22:58 -07:00
c9ae7e811f Should fix non x64 platforms
Need adam to check
2020-06-12 09:22:17 -07:00
47ec246520 try to force 32 bit with BUILD_32BIT flag. force VERBOSE=1 cmake build too 2020-06-10 16:19:39 -07:00
42104cfc4c go wrangling 2020-06-10 15:56:16 -07:00
1bab9b202f default off 2020-06-10 15:40:14 -07:00
74ce98f39b set CMAKE_SYSTEM_PROCESSOR to x86 2020-06-10 15:39:48 -07:00
3268effabf enable 32bit builds on 64-bit hosts 2020-06-10 15:31:40 -07:00
96965647bc wtf 2020-06-10 14:51:44 -07:00
808ab715d9 forgot to save a few files 2020-06-10 13:02:38 -07:00
fa1e16085b permissions in docker containers 2020-06-10 12:40:44 -07:00
dd46e56af2 add include <mmintrin.h> 2020-06-10 12:27:22 -07:00
d8d871745e add cmake 2020-06-10 10:50:01 -07:00
09c9e338bc needs /bin? 2020-06-10 09:51:57 -07:00
df9483408d CMake error if go not found 2020-06-10 09:33:48 -07:00
cb342bfb12 make GCC happy 2020-06-09 15:30:01 -07:00
04266a1180 don't build static binaries yet. Don't have the build config in there for it yet 2020-06-09 14:49:37 -07:00
86eda5fe65 use zerotier as binary name for 2.0 2020-06-09 14:31:00 -07:00
bc1fa3bf20 make it easier to update go version for docker build containers 2020-06-09 14:29:40 -07:00
e63920404c copy over dockerbuild files for releases 2020-06-09 14:16:36 -07:00
4833478eee Fix linux link ordering and add Dockerfile for central controllers
Builds but obviously won't actually do anything yet
2020-06-09 14:14:11 -07:00
c8b6850520 add central controller build target 2020-06-09 14:14:06 -07:00
938cbba449 Root set stuff, code formatting and other boring stuff. 2020-06-09 12:26:52 -07:00
c8f640f3f2 compile go code to static library & call via main.cpp
This allows CMake to manage the linkage of C/C++ libraries rather than an exponentially growing list of cgo directives based on build options
2020-06-09 12:03:16 -07:00
2272189955 macOS: link static versions of lipq and libhiredis on mac
will need to grab them via homebrew
2020-06-08 16:14:01 -07:00
736edeeed0 figure out conditional compilation & cgo based on go build tags 2020-06-08 15:54:10 -07:00
bf33368add Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-06-08 14:45:08 -07:00
40d48c969c Some cleanup, revision to Endpoint string format, stub out HTTP API callbacks. 2020-06-08 14:41:13 -07:00
17f0dc9ba2 2.0 compiles with postgres/redis controller code
Probably doesn't work yet
2020-06-08 14:11:07 -07:00
016d85b169 Code formatting and similar. 2020-06-08 11:47:28 -07:00
2bceabdfa5 add redis dependencies for central controller 2020-06-08 11:23:41 -07:00
d18c33d6df Code cleanup, Linux build fixes. 2020-06-05 22:18:58 -07:00
e2ca065f28 Cleanup, revise join command 2020-06-05 16:36:31 -07:00
fe28501126 Also clean CLion directories. 2020-06-05 14:40:04 -07:00
73795d05eb Reorg done and builds 2020-06-05 14:38:35 -07:00
af846f7e3f Fix clean 2020-06-05 13:45:43 -07:00
a0374da4f3 Reorg. 2020-06-05 13:42:34 -07:00
4e44fa009c Clean up gitignore 2020-06-05 13:31:10 -07:00
3dd2c94f4e Moar reorganization. 2020-06-05 13:26:35 -07:00
6da8f2bb05 Temporarily stash stuff in attic that needs update before beta/release. 2020-06-05 13:06:01 -07:00
e21fcb8104 Reorg. 2020-06-05 13:05:28 -07:00
3c11c13af4 More reorg, work in progress. 2020-06-05 13:04:37 -07:00
d3cf7b2202 Reorg. 2020-06-05 12:56:20 -07:00
03bcdf74a8 Some CLI help updates, some code formatting, pre-reorg. 2020-06-05 12:49:35 -07:00
45b90a0dfa Formatting and boring stuff 2020-06-05 10:41:32 -07:00
9babfcb9b6 A bunch more go plumbing. 2020-06-04 16:03:11 -07:00
1b2a4f00f2 Take like ten on the addRoot thing, making it even simpler. Explicit locator commands are still present but they will remain just for use in creating subscriptions etc. 2020-06-04 10:32:13 -07:00
90b5acfca6 Docs, simplification. 2020-06-04 07:16:15 -07:00
741f7814c2 Various build fixes. 2020-06-03 22:15:19 -07:00
a4ae4941c3 Try to ignore temporary IPv6 addresses, fix Peer serialization, add an endpoint cache to Peer, some more Go stuff. 2020-06-03 22:03:34 -07:00
8a6ef33c4a revert 2020-06-03 12:27:35 -07:00
5ac2596429 More CLI work, link go.mod and go.sum for some Go editors to work. 2020-06-03 11:59:24 -07:00
5dac2e82a7 A bunch of tweaks around CLI parameters and string formats of things. 2020-06-02 11:37:04 -07:00
8e29acd664 Causes build problems, revert. 2020-06-01 16:24:12 -07:00
1d29bc3e8e Move go.mod and go.sum into base. 2020-06-01 16:07:49 -07:00
dc1ef0c49e Code formatting and other boring stuff. 2020-06-01 15:40:00 -07:00
1003455160 Cleanup. 2020-05-31 15:30:24 -07:00
20ae12d385 Clean up some NAT traversal code, modify algorithm to eliminate the need for toggle-able options. 2020-05-31 15:11:47 -07:00
dcc686a3a7 Docs, YAGNI removal, use locator endpoints in peer contact attempts. 2020-05-31 06:47:56 -07:00
89c27c112a Flesh out tests, fix a signing bug. 2020-05-30 19:08:45 -07:00
3621fe8897 Some AES cleanup and include controller with Go build. 2020-05-30 17:03:12 -07:00
33269cd29d Some CGo fixes. 2020-05-30 12:07:52 -07:00
1970dab13d Move some toString/fromString to C++ since any ZT code base would need it, and stub out the controller commands. 2020-05-30 11:42:59 -07:00
a5390b1bc8 Plumb new locator code through to Go, fix some cgo issues, fix some compiler warnings. 2020-05-29 10:16:38 -07:00
864e33cf2d A bunch of build fixes. 2020-05-29 07:06:00 -07:00
b9bf6d1242 Simplification of addRoot/removeRoot, and some code reformatting and other cleanup across multiple files. 2020-05-29 06:30:02 -07:00
caad356b93 A bunch of go fixes, wire up root add/delete. 2020-05-25 18:05:34 -07:00
964c235ecf Golang fixes 2020-05-25 14:23:48 -07:00
c881094202 Warning removal. 2020-05-25 09:55:47 -07:00
6051c973d3 A bunch of warning removal, build fixes, and cleanup. 2020-05-25 09:48:18 -07:00
1f9717250c Update release notes, rip out trusted paths which were clunky and rarely used and of dubious value, and some other cleanup. 2020-05-21 13:04:27 -07:00
8ebbbc33cc Clean up and revise how roots are added/specced. 2020-05-21 11:21:39 -07:00
98bcff1928 Warning fix. 2020-05-19 15:03:30 -07:00
cef708c8ad Build fixes. 2020-05-19 15:01:52 -07:00
a925e2d783 Build fixes. 2020-05-19 14:02:32 -07:00
a1193f0e30 A few AES-GMAC-SIV tweaks to use a bit more IV state. 2020-05-19 12:18:50 -07:00
f209037efe Cleanup, slightly slow down V1 identity generation, faster Salsa20 (by a bit). 2020-05-19 10:13:12 -07:00
b99dd7d916 Fix code generation for AES stuff so it runs on chips that do not have AVX or VAES. 2020-05-18 16:50:05 -07:00
aad21cf395 Blazing fast VAES (256 and 512) AES-CTR, Identity fixes, test fixes. 2020-05-18 16:29:41 -07:00
d537428421 Build fixes. 2020-05-18 09:44:23 -07:00
996589894d Build fixes 2020-05-14 11:53:45 -07:00
d3777b3eb4 A bunch of boring formattings stuff, etc. 2020-05-14 10:55:41 -07:00
52e1f5502d More VL1 work after re-re-re-refactor... 2020-05-13 14:26:53 -07:00
664a128e9e Yet more work in progress... mostly cleanup and re-implementation without depending on struture padding. 2020-05-11 13:08:55 -07:00
666d44b14a More endless work in progress... 2020-05-06 10:42:09 -07:00
b533c300d8 A ton more work... almost there 2020-04-28 19:52:09 -07:00
78d223d709 A bunch more cleanup, remove a ton of reinterpret_cast cruft in favor of a simple union in InetAddress. 2020-04-16 16:01:39 -07:00
2b0127c26d Work in progress on crypto stuff, refactoring to back out of use of structs for encode/decode as it is questionably portable. 2020-04-16 12:34:51 -07:00
16a3c14c53 A bunch of cleanup and refactoring, implementation of prep for forward secrecy still in progress. 2020-04-13 12:22:08 -07:00
c65391a344 Add symmetric key container, tons of cleanup. 2020-04-06 16:54:35 -07:00
fbf4ae823b Clean up timing stuff in Peer and make it more rational, implement some more P2P stuff, rename some methods, cleanup cleanup cleanup. 2020-04-03 10:18:46 -07:00
3d6d9c5808 LINT cleanliness. 2020-03-31 14:30:02 -07:00
64c533c189 More warning removal. 2020-03-31 14:09:17 -07:00
7fd78a87d1 Use static_assert more. 2020-03-31 13:45:05 -07:00
b9f60fc3c2 A bunch of warning removal and LINT cleanliness. 2020-03-31 12:35:54 -07:00
afa01074c5 File this idea away. 2020-03-31 11:03:02 -07:00
1f85b0402e Just use unordered_map, and some other cleanup. 2020-03-31 09:01:58 -07:00
b3314cd34f Small build fixes. 2020-03-30 18:09:11 -07:00
9428fc53f6 A bunch of cleanup, bug fix, just use unordered_map, etc. 2020-03-30 17:28:23 -07:00
0d05e4bcae Remove capability chain of custody stuff which was never used and was really overly complex and a potential source of security problems. 2020-03-28 12:06:10 -07:00
87da45b3f5 Faster hash table, various other optimizations and simplification. 2020-03-28 01:06:29 -07:00
cbf174f96d Warning removal. 2020-03-27 19:35:37 -07:00
0aa78d0ecb Small fixes. 2020-03-27 19:03:09 -07:00
a87d4f1864 Build fix. 2020-03-27 17:26:49 -07:00
c0e86de6db Forgot one spot. 2020-03-27 17:25:05 -07:00
60fa07bff2 Implement fingerprint option on join in Go land 2020-03-27 17:02:44 -07:00
1df7f21f5f Add ability to fully specify controller fingerprint on join for the paranoid. 2020-03-27 16:36:38 -07:00
674edab814 docs 2020-03-27 15:09:09 -07:00
369df245e3 Some perf stuff, docs, HELLO design tweaks for ephemeral keys. 2020-03-27 13:09:37 -07:00
1f2e94a51d Some optimization and raw memory access cleanup. 2020-03-27 07:40:14 -07:00
3f32cffc40 dead code removal 2020-03-26 15:56:26 -07:00
3914964a35 AES docs 2020-03-26 15:55:31 -07:00
bedf63e257 Some minor security tightening stuff and AES fixes. 2020-03-26 13:54:15 -07:00
d151d731a6 (1) Mask bit 31 of AES-CTR nonce to disallow uint32 overflow, (2) get rid of handling of uint32/uint64 overflow in our AES-CTR code to optimize, (3) optimize AES software a bit 2020-03-26 10:28:59 -07:00
2d862f1d32 Little comments and stuff 2020-03-26 08:38:23 -07:00
f92fca03a0 Update SIV diagram, length pad AAD. 2020-03-25 15:09:49 -07:00
b5c01999b8 More tweaks to COM stuff. 2020-03-25 14:10:26 -07:00
e9da35bac3 Harden some stuff around COMs and members of networks. 2020-03-25 13:21:50 -07:00
d3a7468e83 Implement AES-GMAC-SIV and benchmark, rework COM and add a lot of comments and docs, and comments and docs elsewhere too. 2020-03-25 09:05:44 -07:00
f3540a5c7c Linux build fixes, warning removal. 2020-03-24 08:39:54 -07:00
8cf6808c50 build fix 2020-03-23 16:24:39 -07:00
274db26339 Fix accidentally removed file. 2020-03-23 16:15:36 -07:00
490b9c4d79 Moar build fixes, clock perf improvement. 2020-03-23 16:12:45 -07:00
2da096944d Everything but root builds now. Back to testing. 2020-03-18 07:20:04 -07:00
83f830618f It almost builds! 2020-03-17 16:27:31 -07:00
cdbb86b830 ARM64 stuff 2020-03-16 09:57:51 -07:00
483b47474d ARM64 stuff 2020-03-16 09:51:18 -07:00
1d314858ef ARM64 build fixes 2020-03-16 09:27:56 -07:00
37d4e83fad ARM64 build fixes 2020-03-16 09:24:57 -07:00
c7f3f3add9 Small fix, docs, warning removal. 2020-03-16 06:14:41 -07:00
1c7baa544b Reduce PoW cost just a bit. 2020-03-15 20:14:35 -07:00
3408839b33 build fix 2020-03-15 20:07:21 -07:00
a7409486bb minor stuff 2020-03-15 19:44:40 -07:00
cf24ed4108 This PoW seems decent 2020-03-15 14:08:53 -07:00
8a379ba0a1 The MIMC thing was neat but unfortunately is amenable to too much GPU acceleration. 2020-03-14 20:29:44 -07:00
4b20638568 more test fixes 2020-03-14 15:27:01 -07:00
eebe2046f0 docs 2020-03-14 12:17:30 -07:00
1e457dbd76 Fix tests, fix identity issue 2020-03-14 12:08:40 -07:00
a20aebaaf8 Some work on delay function... which is delaying us... but need to get it right because its hard as hell to change later. 2020-03-09 15:19:58 -07:00
5463c70aaf Minor stuff, and some docs 2020-03-06 12:18:20 -08:00
24e30a684b A bunch of little nit-picky header and name cleanup. 2020-03-04 08:16:44 -08:00
05e52493a4 Go module update 2020-03-03 07:41:15 -08:00
d8f1e01b77 cleanup 2020-03-03 07:40:19 -08:00
da5b11bf2d Rename version constants to something more canonical, and more cleanup. 2020-03-03 07:38:51 -08:00
b824ea7bcf Add buffer life cycle stuff to API for fewer memcpys. 2020-03-02 17:15:00 -08:00
b96ea5ae03 Fingerprint string conversion, API stuff 2020-03-02 15:13:34 -08:00
fbd3e10488 cleanup 2020-03-02 14:41:15 -08:00
51f0882849 comments 2020-03-02 14:39:42 -08:00
416068f68e Regularize use of fingerprint concept across code. 2020-03-02 12:09:38 -08:00
a8db4a8d2d Minor future proofing and cleanup in CertificateOfMembership, improve comments in a few places. 2020-03-02 10:25:15 -08:00
6b49148d4e More cross-platform build fixes and add tests for hton/ntoh/other byte order stuff because breakage there would be annoying. 2020-02-28 11:27:30 -08:00
77e59818a3 dead code removal 2020-02-27 15:59:39 -08:00
6262374205 Add tests for identity marshal/unmarshal and fix an issue found. 2020-02-27 15:40:31 -08:00
ed8271530f cleanup 2020-02-27 14:54:15 -08:00
8e4d7c56d8 Stub out a protocol field in Endpoint INETADDR types for future use. 2020-02-27 14:24:11 -08:00
0598315d68 Fix V1 sample ID 2020-02-27 12:59:00 -08:00
05e5d08959 A little more delay margin 2020-02-27 12:13:12 -08:00
ca33eaf28d FPU trick seems to always be faster 2020-02-27 12:09:26 -08:00
13e86fdb6c lalala build fixes 2020-02-27 11:57:45 -08:00
ffbd18f4ef build fix 2020-02-27 11:52:32 -08:00
fabb0f734a build fix 2020-02-27 11:47:01 -08:00
1e59d92df3 warning removal 2020-02-27 11:45:56 -08:00
ecd09946e6 warning removal 2020-02-27 11:45:06 -08:00
789b8b8454 compile fix 2020-02-27 11:43:54 -08:00
f107a71796 docs, compile fixes. 2020-02-27 11:42:00 -08:00
066b4c27a4 tweaks 2020-02-27 10:31:55 -08:00
fbfa99fac5 Speed up V1 identity verification a little, and add some comments. 2020-02-27 09:43:58 -08:00
c5bd21a23e various optimization 2020-02-26 17:00:03 -08:00
1c7e1da4d1 cleanup, docs 2020-02-26 12:40:29 -08:00
5cec5fe6b1 Make Fingerprint (a full length identity hash) a first class type 2020-02-26 11:39:18 -08:00
ea0961dfd2 docs 2020-02-26 11:32:54 -08:00
f20905b08a Throw some more mulmod52 implementations in there (but currently disabled) for future use so we do not have to hunt them down again. 2020-02-26 11:31:03 -08:00
83e79e1a1b V1 identities now use a VDF (verifiable delay function) 2020-02-26 11:08:03 -08:00
c6a7b5774c MIMC52 2020-02-26 09:58:28 -08:00
27ab88db1e little stuff 2020-02-25 16:21:51 -08:00
1b71b6d01a hash() -> fingerprint() 2020-02-25 16:15:14 -08:00
dcb3d49d35 Cleanup, Address refactoring, tweak V1 identity generation a bit. 2020-02-25 16:08:27 -08:00
5c14a072d5 rename 2020-02-25 06:03:24 -08:00
4eb491065b clean out old files 2020-02-25 06:03:04 -08:00
b87e8d8e41 readability++ 2020-02-25 06:00:52 -08:00
a58f11e601 Tweak protocol getPacketId(), unit tests for defragmenter, AES fix. 2020-02-25 05:36:48 -08:00
547f39bb49 Fixes for Buf, unit test 2020-02-24 15:40:19 -08:00
df99f5e3f3 More crypto benchmarks 2020-02-24 14:44:20 -08:00
15e88a8b7e MOAR AES V-TEC 2020-02-24 13:53:50 -08:00
61b72d42b8 More AES tweaks 2020-02-24 13:30:35 -08:00
56bf504ec2 Small AES tweak 2020-02-24 12:48:56 -08:00
1f02250dd8 Ridiculously fast AES-CTR 2020-02-24 11:56:37 -08:00
5d0c6db19c Crypto fixes and benchmarks. 2020-02-21 19:32:36 -08:00
4af3467757 AES-CTR test vectors and fixes to CTR code. 2020-02-21 17:22:26 -08:00
87890565f3 It builds, and basic stuff and crypto passes tests. 2020-02-21 16:43:12 -08:00
d603a73715 Build fixes. 2020-02-21 15:58:28 -08:00
55b0555aa0 A bunch more build fixes. 2020-02-21 14:46:01 -08:00
1a2378a3d4 More crypto unit tests. 2020-02-21 12:20:57 -08:00
c6ce6b46ce build fixes 2020-02-21 08:44:53 -08:00
f109f2e612 Identity v1 hash tweak 2020-02-21 08:10:43 -08:00
8f8e3f4960 OS/platform include cleanup 2020-02-21 08:01:58 -08:00
1d885cf810 Build fixes, put uint128_t detection in one place. 2020-02-21 07:25:43 -08:00
5275a34b0b more refactoring 2020-02-21 07:11:16 -08:00
c3b5c45fea Fix InetAddress sizing by delving into crazy C++ weeds, fix Peer compile issues. 2020-02-20 13:55:09 -08:00
565a686be7 include cleanup 2020-02-20 13:25:56 -08:00
12cfb6501d Cleanup in ECC384 including const-correctness, etc. 2020-02-20 13:11:51 -08:00
de1b54821e Starting to (re)write unit tests. 2020-02-20 12:54:46 -08:00
320c8429c2 Yet more perf, security hardening, and compile fix tweaks. 2020-02-20 09:33:11 -08:00
a4e24c8390 Build fixes 2020-02-19 11:32:16 -08:00
0589964f99 Yet more cleanup, and add meters to paths. 2020-02-19 11:06:05 -08:00
1affb6814c A little more cleanup and build fixes. 2020-02-19 10:32:02 -08:00
b70ab0d354 Include file cleanup, docs, and build fixes. 2020-02-19 10:18:52 -08:00
4a9266feef Comment out not-yet-refactored code in Network 2020-02-19 09:42:11 -08:00
1e0a930d23 Create a container for identity hashes, replace some "volatile" hacky junk with std::atomic, clean up some security checks, rename raw data in Buf to unsafeData to permit search for unsafe. 2020-02-19 09:28:18 -08:00
46d3780e89 AES stuff, port sending network credentials to new packet format. 2020-02-18 17:17:10 -08:00
311c98e24e Various other small things. 2020-02-18 14:20:49 -08:00
9ad8dd3700 Add Peer method for getting preferred cipher, various cleanup in VL1 2020-02-18 12:38:48 -08:00
0dc476518b Documentation changes, and move HMAC auth on HELLO to before object decoding since this is good cryptographic practice. 2020-02-18 10:31:31 -08:00
8c8a3c58ec Various little things... 2020-02-18 06:33:31 -08:00
a0ac4a744e Change the type 1 identity a bit to make locallyValidate() super fast, eliminating a scaling issue with v0. 2020-02-17 15:09:26 -08:00
3448e6fc76 Yet MORE refactoring, including moving expected-reply-to out of Node and into its own class for cleanliness. 2020-02-14 14:12:42 -08:00
e5c7366e71 Yet more minor refactoring and redesign Meter to be more thread-safe. 2020-02-14 11:34:47 -08:00
e236d6f743 More minor refactoring 2020-02-14 10:19:45 -08:00
5db0d9438c More built-in AES and GMAC primitive work. 2020-02-14 09:05:48 -08:00
08e06f9b8f More refactoring and a bunch of AES goodness. 2020-02-13 14:44:18 -08:00
018fe04163 More nit-picky refactoring. 2020-02-12 14:14:31 -08:00
f21ecb3762 Yet more major and very nit-picky refactoring for performance, etc. Also use std::atomic<> now with a TODO to implement a shim if we ever do need to build this on a pre-c++11 compiler. 2020-02-12 14:04:25 -08:00
60de5ed3dd It almost compiles again 2020-02-07 13:54:17 -08:00
df4b1e9b12 Yet more work on VL1/VL2 2020-02-07 00:02:29 -08:00
c3d3605f70 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-02-06 18:07:22 -08:00
a9003d16f2 Put Switch in attic too 2020-02-06 18:07:17 -08:00
84619a7788 A bunch more refactoring including splitting Switch into VL1 and VL2 2020-02-06 18:06:50 -08:00
db127887b6 libssl-dev on trusty images 2020-02-05 10:57:29 -08:00
e0588b89b2 libssl-dev 2020-02-04 12:48:58 -08:00
7d2eceef01 no building cmake on wheezy either 2020-02-04 12:36:39 -08:00
e5e444c7ae can't even build cmake on Centos 6. Will need another method for packaging 2020-02-04 12:08:47 -08:00
4b083b8c41 more dependencies 2020-02-04 12:06:26 -08:00
245d92b40c add openssl-devel to centos images 2020-02-04 11:46:09 -08:00
931ad1aca8 Add CMake to all the docker images 2020-02-04 11:38:42 -08:00
5e488d3aa0 fix PATH 2020-02-04 10:33:18 -08:00
cc52835ce3 remove unneeded output 2020-02-04 09:39:13 -08:00
7d11522768 Just about everything refactored for new Protocol/Buf code except Switch. 2020-02-03 16:18:33 -08:00
417cdc17dc Skip generating packages on edge as that's not reimplemented in CMake yet 2020-02-03 14:00:46 -08:00
c537955c65 ensure go is in the PATH for jenkins builds 2020-02-03 13:57:03 -08:00
a0efea8e0f Merge branch 'dev' into edge
# Conflicts:
#	.gitignore
#	Jenkinsfile
#	attic/macui/ZeroTier One.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
#	attic/service/OneService.cpp
2020-02-03 13:54:49 -08:00
cce51cea5d Merge branch 'pipeline' into dev 2020-02-03 13:48:46 -08:00
df346a6df6 Work in progress... clean up memcpy and create an annotation for that, lots more porting to new Buf/Protocol code, etc. 2020-02-03 13:00:13 -08:00
ba4324f992 Update jenkinsfile for new build process 2020-02-03 12:51:46 -08:00
81e982991b add kali rolling 2020-02-03 10:46:39 -08:00
f6f4fba90e Add docker configs for multi arch jenkins builds 2020-02-03 09:57:48 -08:00
23d5a972ba disable lintian because sid/bullseye are sitting there running /bin/sleep 3 endlessly on this step 2020-01-31 13:15:23 -08:00
cdc6c42375 Take Dictionary behind the barn... 2020-01-25 18:02:11 -08:00
d5b9a54c55 Continuing work on new buffer type... 2020-01-25 01:17:56 -08:00
59da359b06 More porting to new Buf system. 2020-01-24 23:36:08 -08:00
91ce4c4ea6 Refactoring protocol marshal/unmarshal code... 2020-01-24 21:16:07 -08:00
e9656ecf11 More wiring up of addroot/removeroot etc. 2020-01-24 13:27:01 -08:00
5c6bf9d0a4 Wiring up addroot/removeroot 2020-01-23 18:05:34 -08:00
0de194dab3 It builds again 2020-01-23 14:41:59 -08:00
33bb61c63d Loads of refactoring, integration of new version of Trace. 2020-01-23 13:05:33 -08:00
5faf0f8ab6 whoops 2020-01-23 09:46:15 -08:00
0f17cd4791 Update to jenkinsfile for multi-platform release builds 2020-01-23 09:41:17 -08:00
e0518ab176 testing armv5t instead of armv5 flag 2020-01-22 16:36:26 -08:00
e6273b3300 cleanup 2020-01-21 13:12:07 -08:00
d7b31fe014 Warning removal and build fixes. 2020-01-21 12:55:51 -08:00
5aae5f95bf Merge commit 'bba132414527f1742dd1ca550dad5ecce94dfa40' into edge 2020-01-21 11:05:12 -08:00
bba1324145 One more sanity check. 2020-01-21 11:04:18 -08:00
182561f7e6 Port checking fixes. 2020-01-21 11:00:06 -08:00
41871c8b1e Merge commit 'ff655292fba09c0a0d1ed4b4dda738c165ad4404' into edge 2020-01-21 10:59:44 -08:00
ff655292fb Allocate packet on heap, add extra sanity checks on packet size. 2020-01-21 10:58:41 -08:00
782b75a64e Linux build fixes 2020-01-20 21:27:51 -08:00
0c58901469 cleanup 2020-01-20 21:05:29 -08:00
73b23f1b16 Go code cleanup and fixes, other cleanup. 2020-01-20 16:03:19 -08:00
5a29f9ba2d cleanup 2020-01-20 11:18:38 -08:00
03190c5a55 Bunch of build fixes, some docs 2020-01-20 10:40:31 -08:00
dab968ed96 Put LZ4 in its own file. 2020-01-20 09:38:05 -08:00
b598263261 More 2.x notice updates. 2020-01-20 08:49:10 -08:00
eef70e198b Version 2.x notice updates and other boring stuff. 2020-01-20 08:46:20 -08:00
89c41f88a4 Module version bump, vendor, cleanup 2020-01-20 08:23:30 -08:00
53b7c8f725 Make Peer bootstrap field an Endpoint even though we only support InetAddress right now, and a bunch more stuff. 2020-01-20 08:08:38 -08:00
d471142908 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-01-17 14:01:32 -08:00
3ff9ffd5d4 A bunch of wiring up of stuff... 2020-01-17 14:01:22 -08:00
2558bd1b9b include iomanip 2020-01-16 09:11:12 -08:00
95d0944b9f add /metrics endpoint for exposing root metrics to Prometheus 2020-01-16 09:08:52 -08:00
6e72b6fb37 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-01-15 16:12:51 -08:00
0c9be4de14 add /metrics endpoint for exposing root metrics to Prometheus 2020-01-15 16:12:34 -08:00
b53b7f4950 . 2020-01-14 15:34:06 -08:00
b2f0b35608 Move self-test so it can be called from CLI and always builds, implement Endpoint and Locator deserialization in Go as well as C++. 2020-01-14 14:37:49 -08:00
cba7a5d4d7 Self test is back, wiring up roots again. 2020-01-13 16:35:49 -08:00
8e1a88c2fb Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2020-01-13 15:32:31 -08:00
ee5a988f14 Wiring back up PUSH_DIRECT_PATHS and friends. 2020-01-13 14:04:17 -08:00
f814a07ab3 Go build works now 2020-01-10 22:12:56 -08:00
a5aea2f3bb Everything but the Go code builds now! 2020-01-10 21:09:13 -08:00
7291ac2093 A bunch more cleanup and build fixes, and remove old version of multipath code to prep for new version. 2020-01-10 20:40:14 -08:00
790fe50fac Go code cleanup for new changes 2020-01-10 16:54:01 -08:00
83eacdfada New Buffer implementation (not used yet) and cleanup 2020-01-10 15:28:27 -08:00
2fbeaaf148 Bunch more fixes, implement C API for Identity operations. 2020-01-09 13:50:51 -08:00
57710cbc38 . 2020-01-09 08:39:47 -08:00
8bae0acaf9 More cleanup and build fixes, almost builds again! 2020-01-08 21:48:01 -08:00
ef64e6a336 Build fixes, cleanup 2020-01-08 21:24:47 -08:00
9642ff5fb9 . 2020-01-08 18:08:41 -08:00
263798d1c3 cleanup 2020-01-07 14:04:08 -08:00
3fbfad5585 cleanup 2020-01-07 14:03:50 -08:00
627533cf48 . 2020-01-07 13:24:15 -08:00
19899de5a6 . 2020-01-06 18:14:35 -08:00
c1b2c7903c . 2020-01-02 19:04:36 -05:00
28df0c2e38 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2019-12-17 10:56:53 -08:00
7696d45093 Fix handling of invalid conf file
Fixes GitHub issue #1068
2019-12-17 10:51:01 -08:00
2a7d4fcde5 update vs project settings 2019-12-17 10:49:21 -08:00
3b94ef99ae Bunch of new-gen serialization work 2019-12-16 11:57:33 -08:00
6267c67888 A bunch of cleanup and refactoring toward 2.x 2019-12-12 16:15:49 -08:00
23d6a3aacd Moar refactoring 2019-12-11 13:46:44 -08:00
72361fb1c8 Cleanup and refactor 2019-12-11 13:27:11 -08:00
b55f98b813 wip 2019-12-11 12:04:22 -08:00
995fa4a76c Merge branch 'refs/heads/master' into dev 2019-11-22 15:00:39 -08:00
d8597884f6 jenkins windows 2019-11-22 11:25:31 -08:00
a993ddc54d Merge branch 'refs/heads/master' into dev 2019-11-21 15:12:37 -08:00
54e25084fe re-enable CI on master 2019-11-21 14:51:33 -08:00
e58a0b3efb build central controller docker images on macOS 2019-11-21 14:49:24 -08:00
381f15382c Convert central-controller docker build to use a builder subcontainer 2019-11-20 13:56:26 -08:00
5a4d681af8 Build fixes. 2019-11-19 16:45:53 -08:00
a16a0a8ce5 Warning removal. 2019-11-19 16:22:11 -08:00
91d679af15 Merge pull request #1087 from skunkwerks/dev
drop -Werror from DEBUG builds
2019-11-19 08:47:38 -08:00
8396f16dd2 drop -Werror from DEBUG builds
Appease compilers. Thanks @glimberg for the diff.
Closes #1086
2019-11-19 16:45:06 +00:00
203df51752 ignore workspace/ folder
It's where I usually put temporary identity, etc. files for testing
2019-11-13 12:48:32 -08:00
dc19deb6c3 . 2019-11-13 12:46:52 -08:00
86abd31659 fix log line 2019-11-13 12:46:16 -08:00
b8e70d866a Compile fix for unterminated conditional directive 2019-11-12 09:46:39 -08:00
e1e27eb19d Bugfix for incorrect port binding of secondary and tertiary ports 2019-11-11 12:03:49 -08:00
47b4efd49b Work in progress... 2019-11-04 14:24:37 -08:00
088dab4f04 Let's not print this to the logs 2019-10-31 15:13:20 -07:00
cc79ec6179 use std::string instead of const char* in rmq struct 2019-10-31 15:08:59 -07:00
74478b24b0 add librabbitmq binaries for macos for testing central controller 2019-10-31 14:04:25 -07:00
14fab11081 Merge dev, clean up old files 2019-10-16 06:05:29 -07:00
4c55f3eaa5 Work in progress 2019-10-16 06:03:32 -07:00
bad95d7c67 Update cli help to say <network ID> instead of <network>
Closes #1054
2019-10-15 13:15:45 -07:00
891bf99894 work in progress 2019-10-15 12:49:03 -07:00
22e95b3bcb . 2019-10-09 10:00:30 -07:00
4da315fab2 Plumb through external interface stuff 2019-10-03 10:43:28 -07:00
507ba7d26a Go build stuff, root stuff 2019-10-02 17:55:15 -07:00
68ac884d47 . 2019-10-02 14:30:46 -07:00
e2f3996843 Fix callbacks 2019-10-02 13:39:48 -07:00
57ade250af . 2019-10-02 12:19:37 -07:00
c3e0f262d1 Regularize JSON stuff 2019-10-02 09:34:44 -07:00
b9911d0db7 More plumbing 2019-10-02 07:09:54 -07:00
d1b780c7be addroot 2019-10-01 13:09:53 -07:00
1711cced3e . 2019-09-30 20:31:48 -07:00
63e6693255 . 2019-09-30 20:10:53 -07:00
9b8d191bb1 Locator fix 2019-09-30 20:09:35 -07:00
6db2b8c66d . 2019-09-30 20:03:03 -07:00
47a08ccbd4 Identity management plumbing to Go 2019-09-30 18:59:57 -07:00
7fc78129f4 A bunch of CLI work 2019-09-30 16:12:08 -07:00
c4504fd3ff Vendor Go modules 2019-09-30 12:41:21 -07:00
e4799ff8c4 Bunch of small warnings and stylistic things... 2019-09-30 11:10:47 -07:00
f680924585 Build fixes 2019-09-30 09:48:44 -07:00
b0d222768a Root admin stuff 2019-09-30 09:32:00 -07:00
4303c43db7 . 2019-09-27 14:55:46 -07:00
3b3e6d2bfc Simplify root API 2019-09-26 13:35:56 -07:00
7061f13b24 . 2019-09-26 09:34:31 -07:00
5175636d36 . 2019-09-25 14:31:08 -07:00
570032484f . 2019-09-25 14:16:55 -07:00
9c37fc1a5f . 2019-09-25 13:32:46 -07:00
105023bd87 Build fix 2019-09-25 12:43:14 -07:00
8a9669f130 . 2019-09-25 12:36:49 -07:00
e5bd230fb0 . 2019-09-24 16:44:29 -07:00
e3d47e588a . 2019-09-24 12:32:35 -07:00
f4a5abeed9 Go CLI work 2019-09-24 12:19:28 -07:00
a7e38d2b00 . 2019-09-23 16:58:55 -07:00
84ba396ed3 . 2019-09-23 16:47:13 -07:00
6683280a37 . 2019-09-23 16:46:58 -07:00
1edf680464 . 2019-09-23 16:46:31 -07:00
4df090469a Clean out obsolete dependencies. 2019-09-23 16:42:23 -07:00
3c63f58532 Build fix. 2019-09-23 16:21:43 -07:00
64c8171e13 Port binding check. 2019-09-23 16:21:02 -07:00
b6175bd408 Gogogogogogogo 2019-09-23 15:18:52 -07:00
b44bd19c53 . 2019-09-22 22:33:11 -07:00
536bc59abb . 2019-09-22 22:25:55 -07:00
70d5da1e2a . 2019-09-22 19:25:40 -07:00
90d4d79828 Peers and paths 2019-09-22 17:41:15 -07:00
ccc9be2d4d All that cgo crap compiles! 2019-09-22 00:06:07 -07:00
3341c4a670 Rooting around 2019-09-21 22:54:58 -07:00
bcb9df9cdf Network config stuff in Go 2019-09-21 20:40:06 -07:00
2eef9d22e6 getting there... 2019-09-21 18:22:25 -07:00
5e35346f17 Gogog 2019-09-21 15:35:27 -07:00
bb53ee9567 Going once... going twice! 2019-09-21 15:04:00 -07:00
9934a856dd More go 2019-09-21 12:54:45 -07:00
24904c5083 Go F yourself 2019-09-21 11:56:31 -07:00
6ce4663a31 GoGoGo 2019-09-21 00:19:20 -07:00
fbf74d3baa Go! Go! https://www.youtube.com/watch?v=hyGYdqMfrQQ 2019-09-20 21:00:54 -07:00
b540181990 Go! Go! Go! - Moby 2019-09-20 20:34:31 -07:00
02a6b15e6b Moar Go 2019-09-20 19:51:57 -07:00
b34aa10bf8 Go code! 2019-09-20 18:48:48 -07:00
e0ddbc2f28 Update build process, Go glue builds now. 2019-09-20 15:00:53 -07:00
ed2024285d More Go boilerplate. 2019-09-20 14:11:15 -07:00
ae2120eb96 New service, work in progress 2019-09-20 09:09:05 -07:00
3ceb2257e5 Plumb through roots via API. 2019-09-19 09:47:12 -07:00
624efde7e4 Make sure threads dont exit on spurious return values from recvfrom unless we are really dying. 2019-09-16 20:41:23 -07:00
50009fef6f Merge branch 'dev' into edge 2019-09-16 20:26:41 -07:00
de127056c2 Add notarization to "make official". 2019-09-16 20:13:20 -07:00
dde937e197 cleanup 2019-09-16 19:58:21 -07:00
07a480b37a Build fix. 2019-09-16 18:04:32 -07:00
9f5bccec30 Add a recv timeout to root 2019-09-16 18:03:17 -07:00
ade52bf81e Fix RENDEZVOUS issue and possibly improve GeoIP resolution. 2019-09-16 17:04:13 -07:00
71c766a3b2 Build fix 2019-09-16 15:09:56 -07:00
eef66aee9a build fix 2019-09-16 14:51:02 -07:00
e245eb1eb5 Trim some unnecessary locks from root, and cleanup elsewhere. 2019-09-16 14:48:27 -07:00
e08fc81397 More threading improvements in root, more DNS TXT and multicast work (in progress) 2019-09-16 10:33:59 -07:00
9f9032ae36 Cleanup and warning removal. 2019-09-13 16:24:02 -07:00
063a16fcd6 Ensure SSE is enabled for Salsa20 on x64 2019-09-13 11:16:21 -07:00
0db4151492 cleanup 2019-09-13 11:10:56 -07:00
e44d7a553f The root technically does not need to do this, and its slow. 2019-09-13 10:29:11 -07:00
53a2de98de Packet ID fix 2019-09-13 10:23:35 -07:00
2deaaeef28 Some root cleanup and more lock contention reduction. 2019-09-13 10:20:29 -07:00
1f9e16f63e AES optimization rabbit hole 2019-09-13 09:37:09 -07:00
87fe69c27c AES optimization rabbit hole 2019-09-13 09:35:49 -07:00
2d1eeda188 Cleanup, optimization 2019-09-12 14:32:37 -07:00
5c06d40358 cleanup 2019-09-12 10:37:26 -07:00
31e193756d cleanup 2019-09-12 09:59:46 -07:00
5aa744db84 Simplification and further concurrency improvements. 2019-09-12 08:41:34 -07:00
0ad82dad80 Linux build fix 2019-09-12 08:25:26 -07:00
99c36ed2f2 Parallelization improvements 2019-09-12 08:20:38 -07:00
44878e583a Bug fixes 2019-09-11 16:10:06 -07:00
0723a85ab3 Build fixes. 2019-09-11 15:52:18 -07:00
d8dae365f6 Cleanup, optimization, multicast stuff, and it now compiles again. 2019-09-11 15:34:55 -07:00
bccb86a401 More multicast work... 2019-09-10 16:20:28 -07:00
592e743349 Yet more multicast work. 2019-09-09 15:49:17 -07:00
fb6161e9ac May as well make it a full self-signature. 2019-09-09 10:45:49 -07:00
787277d282 More multicast work, add a signature in identity for safety margin, cleanup. 2019-09-09 10:44:31 -07:00
540ee69773 A bunch of multicast work... in progress. 2019-09-07 19:15:21 -07:00
0d2c87fe4e map fix 2019-09-06 08:54:27 -07:00
2460de9713 map fix 2019-09-06 08:50:36 -07:00
0d32f42d26 map fix 2019-09-06 08:47:32 -07:00
277497684e Revert "map fix"
This reverts commit f4a83e516c.
2019-09-06 08:45:39 -07:00
f4a83e516c map fix 2019-09-06 08:41:03 -07:00
d2eb1ed9a5 map fix 2019-09-06 08:27:03 -07:00
a3ec5846df map fix 2019-09-06 08:18:11 -07:00
b6047899a8 map fix 2019-09-06 08:12:46 -07:00
3516070b6e map fix 2019-09-06 08:11:20 -07:00
56ec87e00e map fix 2019-09-06 08:03:59 -07:00
fe0b896665 map fix 2019-09-06 07:58:43 -07:00
e4721417e6 map fix 2019-09-06 07:55:36 -07:00
45f5b3b648 map fix 2019-09-06 07:40:32 -07:00
3123102211 root cleanup and add nifty geoip thing 2019-09-06 07:37:44 -07:00
c6141ffbc7 cleanup 2019-09-05 18:06:48 -07:00
c0e92d06a5 faster without const variable second-guessing of the compiler 2019-09-05 17:31:12 -07:00
274b2682d6 cleanup and docs 2019-09-05 15:09:20 -07:00
171d661b84 cleanup 2019-09-05 12:17:04 -07:00
5cea8da664 Optimization and naming cleanup 2019-09-05 12:03:11 -07:00
44dd52d08f KBKDF 2019-09-05 11:39:16 -07:00
70648d006d Merge branch 'dev' into edge 2019-09-05 11:06:27 -07:00
0767ea5d69 * Update default root list to latest
* ARM32 platform build and flag fixes
 * Add a clarification line to LICENSE.txt
 * Fix license message in CLI
 * Windows service now looks for service command line arguments
 * Fixed a bug that could cause excessive queued multicasts
2019-09-05 11:02:16 -07:00
43e6a9e9ee more fastitude 2019-09-05 09:54:30 -07:00
0599c1710b Merge branch 'dev' into edge 2019-09-04 16:41:05 -07:00
abf218a9cd cleanup 2019-09-04 16:38:55 -07:00
55f4f9aaeb cleanup 2019-09-04 16:15:10 -07:00
82b7e1dbcb HMAC fix 2019-09-04 15:22:15 -07:00
e8f8b0f8e5 cleanup 2019-09-04 14:40:36 -07:00
7566d4fbab Merge dev 2019-09-04 14:38:35 -07:00
3a0d385119 Implement changes to AES-GMAC-CTR: four keys with one for each role/purpose instead of just two, and simpler CTR-IV calculation. 2019-09-04 14:37:38 -07:00
8454a14eac new Windows GUID for build #2 2019-09-04 14:25:57 -07:00
ecee310087 Update built-in root list. 2019-09-04 14:17:41 -07:00
bcdab95e4c Windows installer version bump, build fix. 2019-09-04 14:13:45 -07:00
a16377cea5 Add mitigations against borked ARM32 exception unrollers, possibly fix GitHub issue #1003 2019-09-04 12:48:28 -07:00
ef69f1bb27 ARM wrestling 2019-09-04 12:37:54 -07:00
27c8eb0d6d GitHub issue #1019 2019-09-04 12:21:51 -07:00
a465afa83d Merge branch 'dev' into edge 2019-09-04 08:19:39 -07:00
3c0f54257b Debian typo fix 2019-09-04 08:19:33 -07:00
185e90c40f AES-GMAC-CTR tweaks, self test tweaks, debian typo fix. 2019-09-04 08:19:12 -07:00
e29c2d0260 Fix field headers 2019-09-03 15:59:34 -07:00
acf6425ae9 Formatting fix 2019-09-03 15:55:23 -07:00
5e8d49de0f Stats, tweak P2P success rate stat. 2019-09-03 15:48:10 -07:00
1f9456a462 Estimate P2P Success Rate 2019-09-03 15:19:17 -07:00
a7d8285c3a Don't require siblings field 2019-09-03 14:57:54 -07:00
5f1dc4b851 cleanup 2019-09-03 14:57:02 -07:00
b1c22949c5 Cleanup, add support for distributing a new planet file 2019-09-03 14:44:13 -07:00
29be175743 Make relay max hops configurable on roots 2019-09-03 13:17:12 -07:00
b6c5ba264b One more fix for discarding hops exceeded packets. 2019-09-03 13:01:01 -07:00
8e7e3c2b11 Fix max hops. 2019-09-03 12:58:23 -07:00
0e7df129d8 Fix variable shadowing bug. 2019-09-03 12:51:32 -07:00
50709cbd21 Fix siblings in peers list, fix meter. 2019-09-03 12:44:09 -07:00
fd6e8d8c5c Add instrumentation to root, add capability to forward to siblings if no path is known to a peer. 2019-09-03 12:21:57 -07:00
2e7496130c Fix silly thinko in root that harms p2p establishment. 2019-08-30 21:17:34 -07:00
9666ab5797 Merge branch 'dev' into edge 2019-08-30 17:57:11 -07:00
e6ead35884 docs 2019-08-30 17:48:22 -07:00
a6dff8ff2f Add an extra catch as workaround for possible cause of ARM crash. 2019-08-30 17:47:13 -07:00
4281b6b448 Ignore MULTICAST_GATHER replies with the wrong count. 2019-08-30 17:45:10 -07:00
4c08ac7873 Fix MULTICAST_GATHER reply problem in root 2019-08-30 17:34:05 -07:00
5435ec7545 Merge dev 2019-08-30 15:40:00 -07:00
6897f602bf 1.4.6 version bump 2019-08-30 15:30:37 -07:00
8764d50179 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2019-08-30 15:16:21 -07:00
075321fd0d debian build version bump 2019-08-30 15:16:05 -07:00
62cdb8dc94 cleanup 2019-08-30 12:47:19 -07:00
5e8e935189 world! 2019-08-30 11:57:18 -07:00
ebb5f1256f ARM wrestling 2019-08-30 10:03:07 -07:00
7c6d0d3c0f ARM wrestling 2019-08-30 09:50:37 -07:00
9918a1092f JSON fix 2019-08-30 09:39:46 -07:00
7d89511fda JSON fix 2019-08-30 09:38:18 -07:00
795b6d13d1 Simple status output on root of HTTP tree 2019-08-30 09:29:06 -07:00
8328b6f657 Lib fix 2019-08-30 09:10:11 -07:00
9994e591bd More root work and CMake-ify root 2019-08-30 09:08:39 -07:00
b27a38e55e Implement WHOIS 2019-08-29 14:27:41 -07:00
f6d747a5a0 Fix some more multicast stuff (minor) 2019-08-29 12:02:37 -07:00
b7da7574d1 Helps to decompress the packet 2019-08-29 11:40:31 -07:00
dbad9585cd Fix parsing of MULTICAST_GATHER 2019-08-29 11:23:23 -07:00
2d7a97bb94 Fix V4/V6 forwarding issue in root 2019-08-29 10:58:47 -07:00
da19da0360 RENDEZVOUS works now 2019-08-29 08:00:54 -07:00
ee7361ee2e crash fix 2019-08-29 07:25:16 -07:00
6e3e09bed4 Add RENDEZVOUS to high throughput root 2019-08-29 07:17:18 -07:00
86762d2b40 high throughput root is working! 2019-08-28 15:52:18 -07:00
ef12c5af99 . 2019-08-28 15:22:28 -07:00
933404b1dd . 2019-08-28 15:20:34 -07:00
ccec49e444 . 2019-08-28 15:17:16 -07:00
e5f1bf81f7 . 2019-08-28 15:15:21 -07:00
0e627f4f68 . 2019-08-28 15:07:38 -07:00
d33f7d2bf5 . 2019-08-28 14:49:16 -07:00
e07a019615 . 2019-08-28 14:47:05 -07:00
34ca3012e6 . 2019-08-28 14:43:37 -07:00
62634ca2da . 2019-08-28 14:39:31 -07:00
846c96e8d5 . 2019-08-28 14:36:29 -07:00
63775723c1 . 2019-08-28 14:28:07 -07:00
2f7d3e655a . 2019-08-28 14:26:13 -07:00
b19634d7e4 . 2019-08-28 14:21:02 -07:00
a92967a7c1 . 2019-08-28 14:16:14 -07:00
8915b88de5 . 2019-08-28 14:06:45 -07:00
7bca81464b . 2019-08-28 14:04:42 -07:00
b974ece24f . 2019-08-28 13:59:23 -07:00
b1c8e6ad59 . 2019-08-28 13:51:13 -07:00
64f7185e3a . 2019-08-28 13:44:15 -07:00
807cc9afc3 . 2019-08-28 13:40:49 -07:00
0adf306dd4 . 2019-08-28 13:38:52 -07:00
db0f602e86 . 2019-08-28 13:10:36 -07:00
17ec47f5c0 . 2019-08-28 13:09:14 -07:00
cf831d9cd3 . 2019-08-28 13:04:58 -07:00
5e3c633f74 root work 2019-08-28 11:59:13 -07:00
4e4b27b6ab build fix 2019-08-28 11:54:09 -07:00
c0c9590904 High throughput root stuff 2019-08-28 11:49:45 -07:00
24c9577e39 cleanup 2019-08-28 11:28:51 -07:00
59ee0cfe88 Safety upgrades to code 2019-08-28 10:34:32 -07:00
1977b9b764 Use -flto on Mac for release 2019-08-28 07:45:49 -07:00
6f9d1fc14c Merge branch 'dev' into edge 2019-08-28 07:43:36 -07:00
1b6b38e395 Add default addIps() implementation to EthernetTap base class to fix build on systems that do not need addIps(). 2019-08-28 07:43:18 -07:00
8ac59ae2be cleanup 2019-08-28 07:40:13 -07:00
46db37e06c Yield in ticket lock 2019-08-28 07:34:24 -07:00
9d1207b339 Merge branch 'dev' into edge 2019-08-28 07:31:33 -07:00
6e730cfad1 Cleanup, multicast fingerprint, benchmark asymmetric crypto 2019-08-28 07:31:17 -07:00
1cf953c046 working docker image for end users.
GitHub Issue #1013
2019-08-27 16:57:07 -07:00
e5bf4565da readme in central controller docker folder 2019-08-27 15:43:11 -07:00
ddc904a502 remove docker line from readme 2019-08-27 15:27:41 -07:00
5cda292d15 comment out docker docker target from makefile because broken 2019-08-27 15:16:05 -07:00
e51cf0d4d2 moved elsewhere for controller builds 2019-08-27 15:14:55 -07:00
d8de837c60 LinuxEthernetTap addIps virtual function fix for SYNOLOGY builds 2019-08-27 14:43:30 -07:00
199b3345a0 cleanup 2019-08-27 14:42:49 -07:00
b7f504b8a4 cleanup 2019-08-27 14:40:01 -07:00
1b459b0560 cleanup 2019-08-27 14:31:04 -07:00
40803a4dc1 cleanup 2019-08-27 14:25:11 -07:00
6f22570648 Optimization and cleanup 2019-08-26 20:18:28 -07:00
8203547cfc Warning removal. 2019-08-26 20:01:54 -07:00
dad160209e Add -mmacosx-version-min=10.9 2019-08-26 19:54:24 -07:00
8faaaec710 Add check for PCLMUL instruction too. Virtually all CPUs with AES-NI have it but good to be sure. 2019-08-26 19:48:56 -07:00
012fba617d Set SSE/AES-NI flags only on x86/x64 targets. 2019-08-26 19:40:22 -07:00
9ca495229b Revert "optimization stuff"
This reverts commit e63f624d3a.
2019-08-26 19:03:09 -07:00
e63f624d3a optimization stuff 2019-08-26 19:02:28 -07:00
e1dd413266 cleanup 2019-08-26 18:44:56 -07:00
b9ef09dd58 Optimization stuff 2019-08-26 18:15:32 -07:00
990333e7ec cleanup, re-enable AES-NI check 2019-08-26 16:35:28 -07:00
ec9582f3f2 More test vectors, software mode GCM. 2019-08-26 16:24:42 -07:00
ea65386e15 Merge branch 'dev' into edge 2019-08-26 12:22:20 -07:00
ca89695270 Fix make central-controller-docker 2019-08-26 12:19:50 -07:00
a0fd4ad23f Cleanup, Linux build fix. 2019-08-26 12:17:23 -07:00
b6d7a95028 Merge branch 'dev' into edge 2019-08-26 11:09:19 -07:00
91b16310ea * Change license from GPL3 to BSL 1.1, see LICENSE.txt
* Fix an issue with the "ipauth" rule and auto-generated unforgeable IPv6 addresses
 * Fix socket/bind errors setting IPs and routes on Linux
2019-08-26 10:33:26 -07:00
609873e6d1 Windows version bump 2019-08-23 22:10:15 -07:00
4c616621c2 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-08-23 21:38:15 -07:00
05470bf202 Fix RPM targets 2019-08-23 21:38:04 -07:00
633cf9ec04 Warning removal 2019-08-23 21:28:26 -07:00
f3c3a90393 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-08-23 21:24:34 -07:00
25a48f2f44 Fix RedHat sub-version. 2019-08-23 21:24:05 -07:00
1d8f3cee62 cleanup 2019-08-23 21:12:24 -07:00
5ba6e21967 cleanup 2019-08-23 20:34:09 -07:00
52f7f6e6cf Fully implement the packet encryption/decryption algorithms. 2019-08-23 20:20:32 -07:00
9fd5ec673b Get rid of complicated AES-GCM + scramble construct in favor of a simpler construct thanks to "Squeamish Ossifrage" on crypto.stackexchange.com 2019-08-23 18:41:21 -07:00
e905b3c963 cleanup 2019-08-23 17:22:23 -07:00
d214a5437f Bump Mac pkg version 2019-08-23 15:24:52 -07:00
f12370c348 more opt 2019-08-23 12:40:08 -07:00
b727e2a67a More opt stuff 2019-08-23 12:34:45 -07:00
8e87319925 Optimization stuff 2019-08-23 12:18:02 -07:00
1ab29b1ab0 Merge branch 'dev' into edge 2019-08-23 12:11:07 -07:00
de0a5aa840 GitHub issue #994 2019-08-23 12:09:31 -07:00
52d55e34e6 Licenses, and use full strength AES-128 in scramble. 2019-08-23 12:03:13 -07:00
c79360f58b Merge dev 2019-08-23 11:37:40 -07:00
6f9e3e3b78 Back out unnecessary hack 2019-08-23 11:14:17 -07:00
5c5e7fc7ff Merge branch 'dev' of https://github.com/zerotier/ZeroTierOne into dev 2019-08-23 11:13:13 -07:00
43e98930e9 distro cleanup 2019-08-23 11:12:25 -07:00
51ebefc3ab Ifdef these to stop non-Windows IDEs from complaining. 2019-08-23 10:34:37 -07:00
86add4a6d3 Tolerate any libstdc++6 package "version" for Mint and other distros with weird versions on libstdc++6. 2019-08-23 10:31:12 -07:00
221a3f9a08 Merge branch 'dev' of http://10.187.0.8/zerotier/ZeroTierOne into dev 2019-08-23 10:20:04 -07:00
2f74bd5150 Add "make docker" for GitHub issue #1013 2019-08-23 10:19:59 -07:00
e8ae333443 Version bumps, license fixed, and GitHub issue #990 take two 2019-08-23 10:15:13 -07:00
8057c826bc cleanup 2019-08-23 09:34:26 -07:00
6f6138c500 Merge relicensing change from dev 2019-08-23 09:27:13 -07:00
52a166a71f Relicense: GPLv3 -> ZeroTier BSL 1.1 2019-08-23 09:23:39 -07:00
903a18db1d work in progress 2019-08-23 08:41:22 -07:00
0731f3f1a9 wiring more stuff up, and simplification of timing loops 2019-08-23 07:04:20 -07:00
37047a39f9 More cleanup, and fix SHA384 built-in C code. 2019-08-22 14:52:47 -07:00
91d0cbe892 cleanup 2019-08-22 13:08:10 -07:00
b66431bc29 Work in progress... 2019-08-22 13:06:08 -07:00
0e18b14087 Merge branch 'dev' into edge 2019-08-21 14:58:26 -07:00
31bd413166 stub out new verbs 2019-08-21 14:57:57 -07:00
95a6fce2b4 Yet more cleanup, it builds again now. 2019-08-21 14:36:56 -07:00
0b5472f9fb Tons and tons of cleanup and cruft removal 2019-08-21 14:24:45 -07:00
5280d28505 cleanup 2019-08-21 10:44:52 -07:00
67a9898a99 Bunch more work on DNS, cleanup, removal of obsolete cruft. 2019-08-21 09:27:45 -07:00
509da3ac34 Merge pull request #1012 from wendelb/wendelb-patch-1
Controller-Docs little cleanup
2019-08-21 08:14:38 -07:00
fe8815f80f cleanup 2019-08-20 15:36:18 -07:00
3a21fdc304 Crypto work, packet work 2019-08-20 15:34:30 -07:00
83d723eb79 type 1 (P-384) identities 2019-08-20 13:32:23 -07:00
6e771607c0 cleanup 2019-08-19 20:35:16 -07:00
e73b220104 cleanup 2019-08-19 20:30:34 -07:00
5c1fc43610 cleanup 2019-08-19 20:29:24 -07:00
cfbd7e3bf5 Add stubs to easily build and include all of libnatpmp and miniupnpc in osdep/ 2019-08-19 20:28:44 -07:00
c8ca1cfa3c Kill old inline software update, we will use https and secondary auth for new versions. 2019-08-19 19:24:23 -07:00
5cfbb0a423 Clean up dead stuff from OneService and fix build errors. 2019-08-19 19:21:33 -07:00
900ec143a8 . 2019-08-19 16:45:29 -07:00
7bda3d0f74 put sse4.1 back 2019-08-19 15:49:13 -07:00
7650786fb5 cleanup, Locator fix and self-test 2019-08-19 15:43:15 -07:00
ca60d08621 cleanup, scrambler functions 2019-08-19 12:49:33 -07:00
b34218c8c2 auto-set -j option in makefile, and split out cmake setup rule 2019-08-19 10:06:39 -07:00
b14a59629c cleanup 2019-08-19 06:58:42 -07:00
fe18579061 Removed duplicate line creationTime 2019-08-17 22:50:13 +02:00
0914bf8cf0 Some ARM NEON code (not finished) 2019-08-16 19:22:03 -07:00
7bdca83de3 Add decrypt 2019-08-16 18:40:22 -07:00
846f03504e Add DNS TXT resolver (need one for Windows) 2019-08-16 16:49:30 -07:00
01e8fd0b07 The newer C ed25519 is the same speed as the old ASM, so drop it to simplify. 2019-08-16 14:42:38 -07:00
7f301c44b7 more cleanup 2019-08-16 14:26:45 -07:00
51a25fdec9 Remove ASM Salsa20 since it will not be the default in 2.x any more... reduce build complexity. 2019-08-16 14:26:25 -07:00
2b681c37ac Consolidate common compiler flags 2019-08-16 11:42:43 -07:00
cb4ebfdbd2 Dragging adam into CMake kicking and screaming :) 2019-08-16 10:45:14 -07:00
206c85222c Fix Constants.hpp inclusion of version.h 2019-08-16 09:52:13 -07:00
18071e038e Fix MacEthernetTapAgent & Cmake integration 2019-08-16 09:44:31 -07:00
39f7ce15ad mac compiler flags 2019-08-15 17:40:21 -07:00
e39b42bbd3 fixing some CMake stuff on Linux 2019-08-15 17:29:33 -07:00
607d8f72e8 cruftectomy 2019-08-15 15:43:35 -07:00
c483f75fb4 cleanup 2019-08-15 15:32:16 -07:00
81f0175251 cleanup 2019-08-15 14:14:49 -07:00
f753519729 A bit more optimization 2019-08-15 14:07:52 -07:00
f39693f97e cleanup 2019-08-15 13:52:23 -07:00
f83ae0e39e Add self-test for AES and AES-GCM using public test vectors. 2019-08-15 13:47:43 -07:00
521d371b5d A bunch more refactoring to rip out obsolete stuff related to old root system and general cleanup. 2019-08-15 10:49:50 -07:00
b23d551d00 cleanup 2019-08-14 16:05:09 -07:00
1b20cc6075 More optimization and cleanup 2019-08-14 15:59:45 -07:00
2043e12ac2 . 2019-08-14 15:50:25 -07:00
9461bc948f . 2019-08-14 15:28:10 -07:00
9740ab8bd6 more cleanup 2019-08-14 15:17:06 -07:00
6947a6b1d4 more cleanup 2019-08-14 15:12:49 -07:00
4da8036222 More refactor 2019-08-14 15:00:18 -07:00
e6b4006c70 Refactoring to eliminate duplicated code 2019-08-14 14:55:37 -07:00
8f5f7f1baa More work in progress 2019-08-14 12:48:45 -07:00
573d3eea87 Merge branch 'dev' into edge 2019-08-14 10:53:03 -07:00
2ec53df7ab Put a limit on the multicast TX queue to prevent memory use ridiculousness. 2019-08-14 10:52:21 -07:00
eb84eec0f4 Merge branch 'dev' into edge 2019-08-14 10:48:07 -07:00
1c7b553331 GitHub issue #1000 2019-08-14 10:47:58 -07:00
d7a31088ba Cleanup, warning removal, cppcheck informed cleanup. 2019-08-14 10:35:57 -07:00
a028e04ab9 Merge branch 'dev' into edge 2019-08-13 15:51:19 -07:00
a0fb519696 Make sure libstdc++ is in RH spec file 2019-08-13 12:58:14 -07:00
83e6864b78 Version bump in Linux packages for new binaries. 2019-08-13 09:34:56 -07:00
a0520536df . 2019-08-13 08:49:25 -07:00
af137fd5d3 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2019-08-12 15:37:55 -07:00
f7bc9f01c9 More AES stuff 2019-08-12 15:37:50 -07:00
e4ce1ffd85 Windows detection of AES-NI 2019-08-12 15:28:42 -07:00
2384b49156 set cmake windows build target to Windows 7 2019-08-12 15:28:30 -07:00
f5e71f64ed Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2019-08-12 13:27:07 -07:00
927ef22cf8 Merge branch 'dev' into edge 2019-08-12 13:27:00 -07:00
b6eaec1278 run selftest 2019-08-12 13:26:34 -07:00
c7d1eb71da build & run selftest as part of jenkins 2019-08-12 13:25:14 -07:00
98af3c0dc1 * Fix high CPU use bug on some platforms
* Fix issues with PostgreSQL controller DB (only affects Central)
 * Restore backward compatibility with MacOS versions prior to 10.13
2019-08-12 13:25:12 -07:00
7d41d267a3 silencing warnings for code paths that will never be hit 2019-08-12 13:18:21 -07:00
0ead65ad2d change this 2019-08-12 13:11:43 -07:00
8c5481a3d5 Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2019-08-12 12:58:20 -07:00
741258051e this should work better 2019-08-12 12:58:10 -07:00
0f4fc8635b Merge branch 'edge' of http://git.int.zerotier.com/zerotier/ZeroTierOne into edge 2019-08-12 12:51:38 -07:00
d02d3f72fe AES-GCM code 2019-08-12 12:51:32 -07:00
710b69fc75 kill build dir before jenkins build 2019-08-12 12:44:47 -07:00
4fae382ffd Auto-generate version.h 2019-08-12 12:43:51 -07:00
68b94a3188 CMake for edge branch 2019-08-12 12:35:07 -07:00
8e04f83232 Merge branch 'edge' into cmake 2019-08-12 12:24:25 -07:00
cc9fd9f8ce Merge branch 'dev' into cmake 2019-08-12 12:23:36 -07:00
1e8fcf1344 Add AES to build 2019-08-09 13:42:40 -05:00
809c8305b1 AES code 2019-08-09 10:54:08 -05:00
652c7e8f37 Locator work 2019-08-08 23:23:16 -05:00
beebca98fe Merge branch 'dev' into edge 2019-08-08 19:42:16 -05:00
5341c216a7 Comment ugly query 2019-08-08 19:20:01 -05:00
96a0c3d764 ugly query is ugly 2019-08-08 19:16:11 -05:00
783b49e383 more worky less not worky 2019-08-08 18:58:22 -05:00
ce67abc32f Merge branch 'dev' into edge 2019-08-08 18:49:03 -05:00
d4dc983a01 fix bad column name 2019-08-08 18:31:41 -05:00
72ccd1020a Another exception fix 2019-08-08 18:11:06 -05:00
6a9a577c59 rulesSource needs to be required in network or pgsql has issues 2019-08-08 17:56:27 -05:00
730305ecc7 One more sync fix. 2019-08-08 17:31:32 -05:00
f8f2432ece Shutdown fix 2019-08-08 17:22:20 -05:00
55087521f6 Add periodic sync check when syncing LF<>another DB 2019-08-08 17:20:50 -05:00
760ae07d72 Sync bug fix 2019-08-08 16:30:52 -05:00
52cc482521 Merge branch 'dev' into edge 2019-08-08 15:59:58 -05:00
28d0070ce2 Fix race in multiple DB mirroring configurations. 2019-08-08 15:29:13 -05:00
ad2a7c2590 More windows build fixes 2019-08-08 15:15:12 -05:00
5eacad444d workinprogress 2019-08-08 15:03:52 -05:00
8b97755fc5 Windows fixes. 2019-08-08 14:08:35 -05:00
e8155cbbeb Merge dev 2019-08-08 13:05:28 -05:00
7bb0d9be1b warning removal 2019-08-08 11:04:11 -05:00
6c44fcc290 more warning cleanup 2019-08-08 10:28:57 -05:00
c8e7031198 warning cleanup 2019-08-08 10:01:57 -05:00
fb3b2820b5 centos 7 docs 2019-08-08 09:50:05 -05:00
663376e385 cleanup 2019-08-08 08:42:27 -05:00
3c590994db Finish up ECC384 identity generation. 2019-08-07 23:50:47 -05:00
14c8564893 Merge branch 'dev' into edge 2019-08-07 22:35:27 -05:00
91a37f8868 Add base64 code (unpadded standard alphabet) 2019-08-07 22:35:17 -05:00
c83a4aef55 cleanup 2019-08-07 21:47:06 -05:00
af7a70bf02 cleanup 2019-08-07 21:11:48 -05:00
1a2ff884b3 Merge branch 'dev' into edge 2019-08-07 19:08:35 -05:00
4d70640a15 Remove debug line 2019-08-07 19:06:02 -05:00
b11627a8bc add SDK VirtualTap to new factory method 2019-08-07 18:45:04 -05:00
7436f85ad0 Require MacOS 10.10 2019-08-07 18:22:03 -05:00
237c379866 Choose which tap to use (feth or kext) on Mac based on Darwin version. 2019-08-07 18:20:17 -05:00
aca31c7055 Put kext back in Mac distro and use on versions older than High Sierra (which lack the feth device) 2019-08-07 18:14:12 -05:00
0298719be0 Use SHA384 with ECC384 to match FIPS / Suite B recommendation. 2019-08-07 17:06:03 -05:00
d0746da5e2 Add SHA384 support, more cleanup 2019-08-07 16:41:58 -05:00
5b1cf33b1b Merge branch 'dev' into edge 2019-08-07 11:31:32 -05:00
6073e7972f Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-08-07 11:24:04 -05:00
f7e8d8f1dd Fix LFDB path issue when using with Postgress in DBMirrorSet config 2019-08-07 11:23:48 -05:00
54a1bbd016 . 2019-08-07 11:20:12 -05:00
87016ae815 network update to upsert 2019-08-06 15:30:50 -07:00
455cd5551b . 2019-08-06 17:06:39 -05:00
3ed8e46782 Use devtoolset-8 on RHEL/CentOS 7 2019-08-06 16:46:41 -05:00
b3e1783658 . 2019-08-06 16:46:13 -05:00
906c83af83 Merge branch 'dev' into edge 2019-08-06 15:47:54 -05:00
3db0197865 Add try/catch in LFDB and add introspection into multicast subscriptions in client network status API 2019-08-06 15:22:57 -05:00
f9900cc6fb Merge dev to edge 2019-08-06 14:13:07 -05:00
6174c0c103 Fix deadlock bug. 2019-08-06 13:20:37 -05:00
8898cb342b . 2019-08-06 13:12:45 -05:00
9cc76d1115 Remove debug line 2019-08-06 11:01:08 -05:00
5289d3327c Build fixes 2019-08-06 11:00:35 -05:00
00fb9c475e More work on DB mirroring. 2019-08-06 10:42:54 -05:00
3c776675b3 Cruftectomy, work in progress on mirrorring 2019-08-06 08:51:23 -05:00
37d508ab96 Refactoring in prep for mirroring 2019-08-06 07:51:50 -05:00
f4f8fef82e LFDB fix 2019-08-05 15:30:03 -05:00
cd2e3c79f2 Windows AIP version bump 2019-08-04 20:27:09 -07:00
7722350178 Version bump to 1.4.2 for all but Windows AIP 2019-08-04 20:13:12 -07:00
a77b4ecddb Add optional function in DB change listener for member online events. 2019-08-04 19:55:52 -07:00
818b7e4a2e GitHub issue #993 (???) 2019-08-04 15:35:43 -07:00
00d63f6046 GitHub issue #993 (???) 2019-08-04 15:15:02 -07:00
639fc60257 GitHub issue #990 2019-08-04 15:08:33 -07:00
21467596bc Merge branch 'remove_network_status_table' into dev 2019-08-04 12:38:12 -07:00
75ebe5172f Fix for sharing of capabilities in 1.4 (problem introduced when push frequency was reduced) 2019-08-02 20:43:02 -07:00
4a9030b4a0 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-08-02 13:59:10 -07:00
fdc708a624 GitHub issue #979 2019-08-02 13:59:03 -07:00
8e20187d8c set OS X deployment target to 10.9 2019-08-01 15:58:32 -07:00
28dac7ff0e build MacEthernetTapAgent 2019-08-01 15:41:50 -07:00
e385b3d377 Merge branch 'dev' into cmake 2019-08-01 15:16:31 -07:00
7e5c68c553 update jenkins to use cmake for builds 2019-08-01 15:13:06 -07:00
39ad7bc741 update cmake to add LFDB and force C++11 2019-08-01 14:36:35 -07:00
c2f9aab068 Merge branch 'master' into cmake 2019-08-01 13:49:30 -07:00
67beea1e3d Batch file to clean Windows build dir 2019-08-01 13:21:36 -07:00
34364ab8ee Bump version 2019-07-31 16:41:35 -07:00
bb99ef1351 Get rid of online status stuff in FileDB, not necessary at all. 2019-07-31 16:41:12 -07:00
b3891e5506 Version 1.4.0.1: bug fix for Mac multicast and IPv4 issues, no change for other platforms 2019-07-31 13:27:08 -07:00
632d6e04ad Mac multicast bug fix -- GitHub issue #986 2019-07-31 13:25:58 -07:00
db813db7e8 2019-07-29 -- Version 1.4.0
Major Changes

 * Mac version no longer requires a kernel extension, instead making use of the [feth interfaces](https://apple.stackexc
 * Added support for concurrent multipath (multiple paths at once) with traffic weighting by link quality and faster rec
 * Added under-the-hood support for QoS (not yet exposed) that will eventually be configurable via our rules engine.

Minor Changes and Bug Fixes

 * Experimental DB driver for [LF](https://github.com/zerotier/lf) to store network controller data (LFDB.cpp / LFDB.hpp
 * Modified credential push and direct path push timings and algorithms to somewhat reduce "chattiness" of the protocol
 * Removed our beta/half-baked integration of Central with the Windows UI. We're going to do a whole new UI of some kind
 * Fixed stack overflow issues on Linux versions using musl libc.
 * Fixed some alignment problems reported on ARM and ARM64, but some reports we could not reproduce so please report any
 * Fixed numerous other small issues and bugs such as ARM alignment issues causing crashes on some devices.
 * Windows now sets the adapter name such that it is consistent in both the Windows UI and command line utilities.
2019-07-29 16:11:06 -07:00
837c6270f2 More docs 2019-07-29 15:14:37 -07:00
8c3c07cb5d docs 2019-07-29 13:50:02 -07:00
5cc0dd7f55 Windows installer version bump 2019-07-29 12:36:10 -07:00
79c4d98b61 docs 2019-07-29 12:10:39 -07:00
678e11530e 1.4 bump 2019-07-29 12:07:44 -07:00
a8f2b39f15 Windows project fixes 2019-07-29 11:05:46 -07:00
add2ac0369 Merge pull request #963 from atopuzov/armv6l
Fix compiling on Raspberry PI Zero W on Arch Linux
2019-07-29 10:23:09 -07:00
1e475edd1c Merge pull request #973 from unquietwiki/patch-1
Update Dockerfile
2019-07-29 10:22:36 -07:00
745483708a Merge pull request #974 from squeakbat/master
Don't relink zerotier-one every time.
2019-07-29 10:21:35 -07:00
d9432f2f1e cleanup 2019-07-29 10:19:20 -07:00
eb7081d2a3 Fix for detecting changes in LF from other instances of the same controller. 2019-07-26 19:28:09 -07:00
d9befe3fb3 Debug code removal 2019-07-26 18:51:50 -07:00
0618452615 LF masking key should be a secret 2019-07-26 17:44:05 -07:00
f6b080b8a2 Abstract out change listener from controller itself to permit DBs to shadow changes from other DBs. 2019-07-26 17:39:00 -07:00
c8c33db1d1 . 2019-07-26 16:03:21 -07:00
196bac726c Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-07-23 16:06:40 -07:00
ac2688de58 More LFDB work 2019-07-23 16:06:35 -07:00
d2af12b6a0 Forgot to add ZT_DISABLE_COMPRESSION to linux makefile 2019-07-23 13:33:25 -07:00
6958ba9557 Added ZT_DISABLE_COMPRESSION build flag for SDK and low-end NAS builds 2019-07-23 12:39:07 -07:00
5f11daadf2 Build fix 2019-07-23 09:30:40 -07:00
99df3fe433 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-07-23 09:29:12 -07:00
d4d350a285 Work in progress 2019-07-23 09:29:08 -07:00
8a0b75c83a Added LFDB.o to objects.mk 2019-07-22 15:24:16 -07:00
9cf74657e0 Commented out rtnetlink error debug trace 2019-07-22 14:12:21 -07:00
5edd04638d LFDB work in progress 2019-07-22 13:43:06 -07:00
eb2f851e65 Don't relink zerotier-one every time.
Because zerotier-one depends on "one", which is a phony target,
making it relinks zerotier-one every time, which is probably
not the desired behavior.

In any case, zerotier-one, zerotier-cli, and zerotier-idtool are
real target, so they should have real dependencies and actions.
The "one" target now depends on these three files.

Behavior is mostly unchanged otherwise.
2019-07-21 21:37:01 -07:00
a0f47b12b4 Removed Synology-specific home path, changes made elsewhere in SPK 2019-07-19 16:34:31 -07:00
1b2d9e202e Remove 44/8 as pseudoprivate since it is now partly global. 2019-07-19 13:33:14 -07:00
daa8839005 Update Dockerfile
Update Dockerfile to use Debian 10 + pull the main.sh directly from Github; works for Portainer use.
2019-07-18 17:48:41 -07:00
7e105343e2 WIP 2019-07-17 16:53:33 -05:00
fe2215df00 TON of refactoring, moon/planet is DEAD, ECC P-384 is integrated (but not enabled), and multicast work and cleanup. Whew. 2019-07-17 10:52:08 -05:00
80124bb753 Update release notes 2019-07-16 15:34:26 -07:00
640bbaabbf Safer value 2019-07-16 17:28:42 -05:00
da2965cb4e P-384 test vectors 2019-07-16 17:25:25 -05:00
861a319014 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2019-07-16 15:20:05 -07:00
d43e810ecb Finally figured out how to update the network interface names on Windows so that they'll be visible in ipconfig, Get-NetAdapter etc. 2019-07-16 15:16:49 -07:00
94ba242c33 Nist P-384 guts and glory 2019-07-16 16:09:14 -05:00
7afcc17024 no usleep() on Windows 2019-07-16 13:09:10 -07:00
2ab2f68725 Add a central database schema version check to central controller startup 2019-07-16 12:15:38 -07:00
debd5a5c5e Add capability for P2P multicast propagation, and some cleanup. 2019-07-16 13:33:11 -05:00
98bbb84a63 Merge branch 'dev' into edge 2019-07-15 19:40:52 -05:00
90872c906f Fix FileDB stuff and latency measurement. 2019-07-15 16:30:34 -05:00
bdc2ec1f5e Track online status in FileDB 2019-07-15 15:27:53 -05:00
692733fffb Don't write to ztc_network_status table anymore in central controller 2019-07-15 13:00:16 -07:00
9d908a11ed Some new stuff, may not live forever... 2019-07-15 13:57:42 -05:00
d3728d5859 cleanup 2019-07-10 21:30:11 -04:00
389331ca29 Ticket #915, added allowSecondaryPort to optionally force ZT to use a single port 2019-07-09 10:31:03 -07:00
b2c4b7e99f Version bunmp 2019-07-09 10:36:25 -04:00
fee6aae442 Drop in faster C25519 agreement code. 2019-07-09 10:31:08 -04:00
409406d114 Whoops 2019-07-08 12:36:49 -07:00
203414910f Give up to a second for the interface to appear to assign IP addresses 2019-07-08 12:33:26 -07:00
ac0082a67e Update README.md 2019-07-02 11:56:19 -07:00
9ccbe85923 Fix compiling on Raspberry PI Zero W on Arch Linux
* Should also fix it for Raspberry PI 1
* "gcc -dumpmachine | cut -d '-' -f 1" reports armv6l
2019-07-01 14:56:02 +01:00
dffbd2113a Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-06-28 11:20:49 -07:00
7db073d993 Start 1.4.0 release notes. 2019-06-28 11:20:38 -07:00
3c02c2e4bd Windows installer bump 2019-06-28 08:48:06 -07:00
a17c760181 Fix Mac installer 2019-06-27 14:36:31 -07:00
54d2fa65dd Version bump, cleanup 2019-06-27 14:31:10 -07:00
a019c3dd5d Tighten up credential push just a bit for faster up-time with older nodes, should not have significant impact on bandwidth. Also some cleanup and push direct path timing fixes. 2019-06-25 13:42:20 -07:00
a3ef9b8a15 Cleanup 2019-06-25 10:06:50 -07:00
4d599e2f9f Linux build with CMake 2019-06-21 15:16:20 -07:00
d3b33e5512 Can now build the Windows UI via CMake as well 2019-06-21 12:54:53 -07:00
c8487cc395 no message 2019-06-20 16:15:19 -07:00
0b3b5f6174 Beginning CMake configuration for ZT
Only tested on Windows so far
2019-06-20 16:13:52 -07:00
554e0b7c6d Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-06-20 15:20:46 -07:00
fd74e2a583 Windows build changes for 1.2.99 (1.4.0pre) 2019-06-20 15:20:42 -07:00
af5d3a7f0b dockerfile updates 2019-06-20 14:17:38 -07:00
bb0808c99c Remove current multithreaded receive path, which is not that efficient. We will do something better in the future. 2019-06-19 10:19:59 -07:00
f0295b154b Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-06-17 15:50:11 -07:00
b041de831a More stack->heap 2019-06-17 15:50:05 -07:00
21e844cd82 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2019-06-17 15:32:27 -07:00
4e2439bd12 Don't call _phy->getIfName if localSocket is -1 2019-06-17 15:32:21 -07:00
c5a07c7f20 More stack->heap 2019-06-17 15:28:02 -07:00
e2900f4f3c Fix valgrind warning... not sure if it is an actual issue. 2019-06-17 15:23:52 -07:00
aa831dd843 More stack->heap... 2019-06-17 14:55:33 -07:00
2dc783214c Allocate outp on heap in Peer. 2019-06-17 14:38:27 -07:00
523df47a65 Check for null data ptr 2019-06-17 14:02:35 -07:00
f66fac3982 Win32 build fix 2019-06-17 13:48:42 -07:00
9c51ce9c40 Windows build fixes, fix double/float types to get rid of warnings. 2019-06-17 13:32:41 -07:00
9797540212 merge 2019-06-13 12:53:05 -07:00
ce2338c24a Fix null ptr on managed routes if no IPs are set. 2019-06-13 12:52:38 -07:00
3b188ba672 no message 2019-06-13 10:38:42 -07:00
eb84d61deb remove these from jenkins for now 2019-06-13 10:35:54 -07:00
47d29ddcaf Compiler warning cleanup 2019-06-13 10:28:09 -07:00
f411eb1651 Remove old RethinkDB.cpp/.hpp files from visual studio project 2019-06-13 10:15:45 -07:00
94bd2918fa Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2019-06-12 13:14:23 -07:00
c3bfcf560b Removed check for port number in multipath path replacement logic 2019-06-12 13:14:14 -07:00
5b2b088714 Cleanup, version bump. 2019-06-11 14:58:23 -07:00
0bdfad52e7 docs 2019-06-11 13:51:10 -07:00
cf046a4039 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-06-11 11:01:20 -07:00
700cc92083 Indent fix 2019-06-11 11:01:12 -07:00
2eb9c0924a Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2019-06-11 10:54:14 -07:00
ebadc6f203 Added s390x arch flags to makefile and ZeroTierOne.h for ticket #950 2019-06-11 10:54:06 -07:00
87bce1a36b GitHub issue #886 2019-06-11 10:53:35 -07:00
848f822171 . 2019-06-06 10:04:11 -07:00
d4199ddb3e Commented out RingBuffer::dump() as an alternative solution to PR #952 2019-06-03 11:00:04 -07:00
e4abc91d35 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2019-05-31 15:10:53 -07:00
37d321afc8 dont spin as much in the onlineNotificationThread 2019-05-31 15:10:45 -07:00
541e5c510e CLI improvements (peers, and get/set ip, ip4, ip6, etc) 2019-05-31 11:41:24 -07:00
90d324ae96 Fixed ZT_SDK build issue. Moved ZT_SDK preprocessor directives to more permanent homes 2019-05-17 10:15:40 -07:00
cacdb445c7 Bump protocol version to 10 2019-05-14 13:54:27 -07:00
4743ad0b16 Added convenience swtich for disabling JSON support in SDK build 2019-05-13 12:24:55 -07:00
2d5c6fa975 Disabled compression for outbound packets in SDK build 2019-05-13 12:24:22 -07:00
95ef13f7a1 Added divisor for ZT_PEER_ACTIVITY_TIMEOUT, gives quicker indication to status change in SDK 2019-05-13 12:24:01 -07:00
298e1d5a74 Added 90x90 AppIcon 2019-05-01 12:53:50 -07:00
87c75d033e pt 2 2019-04-22 11:36:14 -07:00
71ae678930 Make things compile with Android NDK again 2019-04-22 11:35:35 -07:00
6a027c9c0a amqp_consume_message now has a timeout
RabbitMQ::consume() will return an empty string if the call to amqp_consume_message times out
2019-04-18 14:57:06 -07:00
6014df2847 fix compile & sql errors 2019-04-04 15:11:01 -07:00
55a9e6e05e Queue up inserts in onlineNotificationThread() into a multiple insert statement 2019-04-04 12:40:49 -07:00
02f0eead1c More new Mac ethernet tap bugs. 2019-03-29 15:14:03 -07:00
d77846dcea Add bigness to buffers to prevent overflow on high traffic (Mac tap). 2019-03-29 12:45:02 -07:00
92c811deb7 Destroy feth devices before creating to delete old ones if they were left behind (MacEthernetTap). 2019-03-29 12:14:03 -07:00
92f199ab98 More bug fixing for AARCH64. 2019-03-28 22:40:28 +00:00
b65feeba85 One more AARCH64 fix. 2019-03-28 15:23:53 -07:00
6914425b03 cleanup 2019-03-28 13:58:19 -07:00
89f57124b2 Never mind, only unused on some builds so leave them there. 2019-03-27 09:30:45 -07:00
65823332d4 Comment out some unused functions. 2019-03-27 09:29:34 -07:00
ee8682ac75 Temporarily disable the symmetric NAT port prediction code since the current version adds protocol overhead and probably is not that effective. 2019-03-26 15:23:51 -07:00
e3e5137757 Fix more alignment hell in LinuxNetLink for AARCH64 and probably other pedantic architectures. 2019-03-25 22:53:06 +00:00
d81549a7b1 Various other fixes including removal of more mem*() issues and netlink fixes for AARCH64. 2019-03-25 22:19:52 +00:00
d5ac8512e3 ... 2019-03-25 12:58:43 -07:00
f23e354272 Nope, more... 2019-03-25 12:56:03 -07:00
6475e1faf6 I think this is the last one. 2019-03-25 12:53:31 -07:00
752fc0742e More mem*() stuff... sigh... 2019-03-25 12:52:19 -07:00
e1091611da More mem*() stuff... 2019-03-25 12:41:59 -07:00
678116b6d1 One more. 2019-03-25 12:36:54 -07:00
0a9e2227e8 ... and more 2019-03-25 12:00:54 -07:00
2600b1f144 Removal of more mem*() calls. 2019-03-25 11:59:14 -07:00
b56753ea9f Get rid of some mem* calls that are bad C++ form (but worked fine) and cause warnings. 2019-03-25 11:45:32 -07:00
97046b265c Kill ZT_FAST_MEMCPY in selftest. 2019-03-22 15:52:16 -07:00
2966eac64f Get rid of ZT_FAST_MEMCPY because this is not really needed. 2019-03-22 15:50:15 -07:00
d530356055 RingBuffer<> is now templated with size, buffer is now static. 2019-03-22 14:39:52 -07:00
af3ec000a0 Merge branch 'dev' into edge 2019-03-22 09:38:41 -07:00
8051127c3b Update credits. 2019-03-21 16:43:53 -07:00
e37eb0aa54 More cleanup of old stuff no longer used. 2019-03-21 16:42:52 -07:00
130fa35bb1 cleanup 2019-03-21 16:39:56 -07:00
39e1021f62 Replace certificate based gating of multicast like/gather with a simpler more efficient method, fix some minor issues with request based com/cert push, and clean up some other random stuff. 2019-03-21 16:18:49 -07:00
63ec19674c . 2019-03-19 16:43:43 -07:00
af60e769b0 Allow mac users to make central-controller
Made the smallest change I could figure out.
Had to remove -Werror because something in the postgres adapter woudn't
compile.

brew install postgresql rabbitmq-c
and seems to put the libs in the right place
2019-03-18 17:01:05 -07:00
087c75d5ee More cleanup. 2019-03-14 16:40:22 -07:00
e03102dbcb Clean out some unnecessarily pedantic auth stuff in favor of a simpler way of gating multicast gathers. 2019-03-14 14:29:15 -07:00
9d7b7c72b2 Merge branch 'dev' into edge 2019-03-14 13:49:49 -07:00
99c3f02343 Update controller readme
Delete `/controller/network/<network ID>/active` docs

re: #921
2019-03-12 13:02:49 -07:00
95bfc29c92 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2019-03-11 12:26:57 -07:00
e3cc7c9a80 fix non-central controller builds 2019-03-11 11:16:44 -07:00
d4c0349de9 Revert "#ifdef'd out multipath/QoS statistics buffers allocations for ZT_PROTOCOL_VERSION<10"
This reverts commit 270debb3fc.
2019-03-11 09:44:40 -07:00
d7a6357393 Merge branch 'dev' into edge 2019-03-08 13:16:02 -08:00
6fbf21b4f0 Use a smaller MTU, which should not impact throughput since 2800+overhead/2 still fits in two of these. 2019-03-08 13:15:47 -08:00
993d850f69 more logs 2019-03-08 10:50:33 -08:00
cda07b20a2 add mutex to channel numbering 2019-03-08 10:29:36 -08:00
52c85aa605 now with more -fPIC 2019-03-08 10:29:19 -08:00
e5155df6d5 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2019-03-08 10:21:19 -08:00
293d2064c4 librabbitmq built with same clang version as zt 2019-03-08 10:20:53 -08:00
171cc3e01a reorder a couple of things 2019-03-08 10:20:19 -08:00
8141043560 finish up rabbitmq integration 2019-03-06 16:16:49 -08:00
9a3cc93d74 update dockerfile to generate rabbitmq config settings when necessary 2019-03-05 15:47:04 -08:00
fcb4221f97 rabbitMQ implementation 2019-03-05 15:11:50 -08:00
1f13374a4f added struct for rabbitmq config 2019-03-04 17:01:16 -08:00
801401a6e7 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2019-03-04 16:31:36 -08:00
de1fc43cc5 added librabbitmq library for central controller 2019-03-04 16:27:39 -08:00
270debb3fc #ifdef'd out multipath/QoS statistics buffers allocations for ZT_PROTOCOL_VERSION<10 2019-03-01 13:28:00 -08:00
59a0a25f35 Merge branch 'controller-live' into dev 2019-03-01 11:13:49 -08:00
a788486803 Remove /controller/network/<network ID>/active from controller documentation as that path no longer exists.
GitHub Issue #921
2019-02-25 12:13:55 -08:00
3d21f0a91f update docker registry used 2019-02-08 10:40:57 -08:00
f726044e29 no message 2019-02-05 11:48:03 -08:00
a4b1917361 Fixed a bug where UI elements were attempting to be updated in a background thread.
Also code cleanup & removed confusing startup UI
2019-02-05 11:47:37 -08:00
a3b2aeb001 Take netmask bits from most specific route. 2019-02-01 14:06:34 -08:00
5b1ef2fb03 Take netmask bits from most specific route. 2019-02-01 14:05:29 -08:00
d0f78f1e03 Bugfix for heap-use-after-free in concurrent packet processing code (manifests only after terminate() is called) 2019-02-01 11:50:52 -08:00
541e91ed8e Fixed potential memory leak in RingBuffer 2019-02-01 11:44:43 -08:00
321cada1d7 Wrong criteria was wrong. Now with less wrong. 2019-02-01 11:38:19 -08:00
34c1023ba7 Wrong criteria was wrong. Now with less wrong. 2019-02-01 11:37:30 -08:00
82a21d4b71 Bugfix for heap-use-after-free in concurrent packet processing code (manifests only after terminate() is called) 2019-01-30 22:29:51 -08:00
23996c7e6b Fixed potential memory leak in RingBuffer 2019-01-27 14:43:29 -08:00
d7091a0bac Fixed sign-comparison compile warnings in QoS code 2019-01-25 13:24:31 -08:00
7414418e2e insert/update host_port on controller start 2019-01-21 11:29:13 -08:00
2294770e56 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2019-01-21 11:18:25 -08:00
d98bdb5643 WIP: Pass listen port down to Postgres 2019-01-21 11:18:20 -08:00
21f4f16e63 Disable HTTP control plane for libzt builds, introduction of getRoutes() for SDK API 2019-01-14 11:34:46 -08:00
0e597191b8 Updated licenses for 2019 2019-01-14 10:25:53 -08:00
001ba1a4a7 Update link to knowledge base. 2019-01-09 10:19:02 -08:00
b59c4a2106 Print error & exit on local.conf parsing error 2019-01-07 11:19:50 -08:00
c35933cd1e Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-12-10 12:27:00 -08:00
0da2efa633 add application_name to pgbouncer connectio string 2018-12-10 12:26:20 -08:00
e23d95bf03 sleep 60 seconds between deployments 2018-12-07 15:17:12 -08:00
f6e9f0e2a2 cleanup 2018-12-07 01:58:23 -08:00
4a89729529 add INCOMING_PACKET_CONCURRENCY environment variable to be able to specify max threads for receive in controller 2018-12-07 00:59:08 -08:00
56a58f2b11 more logging of exits from the central controller 2018-12-06 13:26:53 -08:00
e959908c51 log message 2018-12-06 13:19:36 -08:00
6e3144370a exit controller if onlinenotification thread exits while _run == 1 2018-12-06 13:10:59 -08:00
20f02bb772 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-12-06 13:08:39 -08:00
1c86f25fab update # of threads for Postgres 2018-12-06 13:08:31 -08:00
e6f9ab929d More speed stuff. 2018-12-06 12:47:58 -08:00
18d1772bb4 stuff for speed and stuff (testing) 2018-12-06 12:00:49 -08:00
5535cad773 Revert mutex change. 2018-12-04 16:15:46 -08:00
ec84934d48 Disable spinlock to check CPU usage implications on multithreaded controllers. 2018-12-04 15:59:39 -08:00
328d08781a finish pgbouncer integration 2018-12-03 16:12:15 -08:00
c8d5215870 add handling for PGBOUNCER_CONNSTR environment variable.
alows Central controllers to connect to PGBouncer on some threads.  LISTEN threads still require a direct connection to the DB
2018-12-03 15:19:15 -08:00
62ccb48a0b allow alternative ports for central controllers 2018-12-03 15:06:26 -08:00
82409eb345 add script to cycle central controllers 2018-12-03 15:04:46 -08:00
b75f212d70 Replace RethinkDB section in controller/README with PostgreSQL 2018-11-30 10:41:54 -08:00
ccb856749f back to plain old libpq in dev 2018-11-30 10:40:57 -08:00
9d2bc9bf4e Merge branch 'master' into dev 2018-11-28 08:44:45 -08:00
52c4385c16 Merge branch 'master' of http://git.int.zerotier.com/zerotier/ZeroTierOne 2018-11-28 08:44:12 -08:00
5da7d6d1ae Merge docker update PR 2018-11-28 08:43:50 -08:00
65e0a74718 Merge pull request #869 from bltavares/patch-2
Update ZeroTier version on Docker
2018-11-28 08:41:42 -08:00
01d5d7d78b Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-11-13 16:20:01 -08:00
e3381a4c1f fix member init query 2018-11-13 16:19:55 -08:00
03e35b25b8 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-11-13 16:02:31 -08:00
e2b0fb26b1 self-test build fix. 2018-11-13 16:02:26 -08:00
01c18cc442 update makefile for libpqxx controller 2018-11-13 16:01:43 -08:00
01e6df4d46 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-11-13 16:00:17 -08:00
882b03436d WIP: libpxx instead of libpq 2018-11-13 16:00:13 -08:00
690bd933d5 Support shutdown with postLimit in BlockingQueue 2018-11-13 13:52:45 -08:00
6684559cd9 More Mac tap improvements and threading efficiency improvements. 2018-11-13 13:51:25 -08:00
4ed7d20a48 Another stability fix... turns out vfork is problematic here. 2018-11-13 12:46:36 -08:00
350116c513 Stability improvements for Mac virtual Ethernet tap driver. 2018-11-13 12:42:03 -08:00
7bde2c089d Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-11-13 12:08:02 -08:00
90631adb9b Improve multithreading support for OneService (faster, dynamic adjustment of thread count based on HW concurrency). 2018-11-13 12:07:58 -08:00
f6450cd7e1 Cleanup and a minor performance improvement. 2018-11-13 10:19:51 -08:00
3b6b1d1674 Make incoming packet processor thread pool dynamic based on core count. 2018-11-13 09:35:20 -08:00
33d7b22abe Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-11-11 23:06:31 -08:00
2f9712e6a7 utility script to update public controllers 2018-11-11 23:06:24 -08:00
b937aeb857 cleanup 2018-11-11 23:03:51 -08:00
f3d8846df3 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-11-11 22:55:57 -08:00
2729db9555 exceptions 2018-11-11 22:55:53 -08:00
1cec4b1c4c Raise thread count to 8 2018-11-11 22:55:38 -08:00
7048c77ebc Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-11-11 22:35:26 -08:00
c9c17eaddd Retire RethinkDB, simple receive path multithreading. 2018-11-11 22:35:15 -08:00
f1b82b734a Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-11-11 21:09:35 -08:00
4c0e7aa8b0 more error checking 2018-11-11 21:08:51 -08:00
296e4616cc Migrate Windows to use Visual Studio 2017 Community instead of 2015. 2018-11-11 20:31:31 -08:00
15649334a6 Do not use new "feth" devices for ZT traffic. 2018-11-11 19:22:07 -08:00
b3c2c0866f Times should be int64_t, not uint64_t 2018-11-11 17:38:17 -08:00
c6ae81fac7 Added preprocessor check for __APPLE__ as an attempted fix for ticket #600 2018-11-11 14:23:24 -08:00
79086f0858 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-10-26 12:00:01 -07:00
c148a23df4 Added preprocessor check for ZT_NO_CAPABILITIES around header includes 2018-10-26 11:59:55 -07:00
c56831767e Fix Mac tap agent abort on EINTR. 2018-10-25 20:44:32 -07:00
72a724f075 Clean up some stuff after new feth tap implementation, and comment agent file. 2018-10-25 13:10:24 -07:00
96e1df5854 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-10-25 12:43:35 -07:00
2e44b90f63 OSX no longer requires the kext due to feth black magic! The MacEthernetTapAgent must be installed in /Library/Application Support/ZeroTier/One for ZT to work now. Eventually this can let us do an app bundle, get rid of the pkg, and have ZT itself run with normal or reduced privileges. Also fixes GitHub issue #870 (at least for me) and may be faster than the old kext. 2018-10-25 12:43:30 -07:00
5a0adba798 Setup docker container to use jemalloc 2018-10-24 13:36:21 -07:00
761cc5c923 remove another noisy log line 2018-10-24 13:36:07 -07:00
f901b9dd6b Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-10-24 12:08:48 -07:00
d87fcca176 Fully operational pgsql controller 2018-10-24 12:06:17 -07:00
7c72653385 because Windows.... 2018-10-23 13:21:25 -07:00
7dbccf08ae Removed unnecessary block before get request. Possible bug fix for Synology NAS ticket #27 2018-10-23 10:58:25 -07:00
2d21c18ebd Update ZeroTier version on Docker
This commit changes the Dockerfile ot use the multi-stage build and help
to get an automated build on Docker.

The idea of the multi-stage build is to use the already stable Debian
distribution channel to provide up-to-date versions of ZeroTier.

The benefit is that it would be possible to automate the image build,
either on Docker Hub, Travis or taking advantage of the [docker-library/official-images] infrastructure.

This changes follows the best-practices suggested by
[docker-library/official-images], such as using a High Availability GPG
keyserver, providing a default CMD, allowing "bash" on `docker run` and
others.

Given that both the builder `debian:stretch` and `alpine:latest` are
official messages and have [manifests], this means that this Dockerfile
is also multi-platform. This means that this same Dockerfile will
pick-up the correct Debian package according to the architecture of the
running system during build.

With this changes we could try to promote the image to be parte of
[docker-library/official-images], and take advantage of automated
publishing of multi-architecture images. Others would be able to use
`docker run zerotier` and download the latest version appropriate to
their system.

Related to #682

[docker-library/official-images]: https://github.com/docker-library/official-images
[manifests]: https://blog.docker.com/2017/09/docker-official-images-now-multi-platform/
2018-10-21 11:28:04 -03:00
15d0aad3c0 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-10-19 10:06:06 -05:00
f0fc9b1766 Merge branch 'master' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-10-19 10:05:51 -05:00
7c0331997a Ticket #739 - Fixed what appears to be a copy-paste error for machine type detection in linux makefile, added line for armv7hl 2018-10-03 15:40:16 -07:00
04de2302a7 More insightful errors for get command 2018-10-03 14:24:21 -07:00
1da1409db2 get rid of a noisy log line 2018-09-28 10:58:26 -07:00
c1ea1329c1 Merge branch 'dev' into libpq 2018-09-28 10:56:40 -07:00
417aa9547b Working controller & docker container for GKE 2018-09-28 10:55:39 -07:00
60d5a3c631 Merge pull request #853 from darkain/dev
Fix IPv6 address string representation
2018-09-25 15:32:39 -07:00
7a42416a78 Merge pull request #822 from dschulz/controller-patch1-dschulz
Add functionality to erase members from networks using file backend i…
2018-09-25 11:38:25 -07:00
2a143a7505 Merge pull request #858 from tommyang/fix/mac-uninstall-script
macOS uninstall script: remove symlinks from the actual location
2018-09-25 11:36:28 -07:00
0510f85a8f Merge branch 'dev' into libpq 2018-09-25 10:19:59 -07:00
5b222d0a09 cleanup connections after errors 2018-09-25 10:17:15 -07:00
133b64679c Update README.md 2018-09-24 15:02:11 -07:00
79b88a22c3 Update README.md
Document that allowManagementFrom is an array
2018-09-24 14:58:44 -07:00
88d879987d Remove symlinks from the actual location
Binary symlinks are in `/usr/local/bin` instead of `/usr/bin` since commit 0cf4ddd
2018-09-23 16:53:30 -07:00
27c37a18f3 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-09-17 14:42:33 -07:00
b8268d894b Changed home path for Synology 2018-09-17 11:44:56 -07:00
79b47b055a Only null terminate the first character 2018-09-15 12:13:06 -07:00
8e260bae11 Correcting conversion to/from IP address / string
1) Use existing standard libraries to convert to/from IPv4/IPv6 strings and binary representation.
2) Move null terminator assignment InetAddress::toIpString to top of function, this way if ANY errors occurs that don't write content to the buffer, we're not passing a potentially dangerous buffer around.
2018-09-14 22:42:58 -07:00
af61ee6f3a Merge pull request #836 from skunkwerks/feature/add-freebsd-debugs
add support for debug flags in FreeBSD
2018-09-14 08:08:59 -07:00
04d7a1df96 Merge pull request #837 from skunkwerks/feature/update-ext-json
update external JSON dependency to address libc++ compatibility
2018-09-14 08:08:21 -07:00
b9fd50e348 Merge pull request #845 from asbjornenge/docker-updates
Using multi-stage build for Dockerfile
2018-09-14 08:07:36 -07:00
ef48d11266 Merge pull request #848 from darkain/master
Fix compile on FreeBSD targeting ARMv6 (Raspberry Pi)
2018-09-14 08:05:39 -07:00
a47559d9e3 dev should have odd minor version 2018-09-14 08:05:07 -07:00
cffb992ae8 Adding ARM/NEON detection for non-Linux targets 2018-09-12 19:51:28 -07:00
39e720e811 Adding proper EABI target for ARM32/Salsa 2018-09-12 19:49:14 -07:00
7b87e9c0cb Added ability for OneService to monitor local.conf for changes and automatically reload 2018-09-11 16:55:46 -07:00
3dd9b1aa9b Added ability to specify zt home directory via ZEROTIER_HOME - Addresses ticket #829 2018-09-10 16:25:39 -07:00
0fddebc791 Added ability to manually set secondary and tertiary ports in local.conf 2018-09-10 13:06:05 -07:00
701d64936d Using builder pattern to build in container while keeping final image small 2018-09-07 14:11:25 +02:00
0ec6215493 Send member/network change notifications via Postgres 2018-09-06 15:14:16 -07:00
de45bdb448 quieting things down a little bit 2018-09-05 17:03:49 -07:00
7b608c6ca3 Fix testing for true/false. Dont attempt to update member status on networks that we know dont exist 2018-09-05 16:54:23 -07:00
6ff78c9c26 fix crashes 2018-09-05 16:08:06 -07:00
d701f4e331 Added some exception hadling. Dont want to live *too* dangerously here 2018-09-05 11:49:07 -07:00
92abc92463 Theoretically we have PostgreSQL support now 2018-09-05 11:30:17 -07:00
a4be9ceb5a dont insert/update creation time. Let the database handle it with the default value 2018-09-04 16:08:26 -07:00
e21b6e1daf commit thread WIP 2018-09-04 16:05:34 -07:00
2e3b03fff9 members initialized 2018-09-04 14:51:35 -07:00
cd657da431 Online Update/Notify thread 2018-09-04 14:00:02 -07:00
17af09a5cc Postgres Integration has begun 2018-08-31 14:58:15 -07:00
ceff48b07c Update bug_report.md 2018-08-29 10:15:10 -07:00
199566965e Update issue templates 2018-08-29 09:39:18 -07:00
46e46e9b7b Update issue templates 2018-08-29 09:37:39 -07:00
8b292d2dc7 ext: update nlohmann/json to v3.2.0
- include libc++7 compatibility for FreeBSD
- see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230629
2018-08-24 08:19:38 +00:00
88abd6ffc6 add support for debug flags in FreeBSD 2018-08-24 08:18:25 +00:00
76b4ec12a0 Vault-related amendments 2018-08-09 14:32:26 -07:00
0e4cfd897b Multipath-related amendments from merge into edge 2018-08-09 13:40:49 -07:00
515d7962b0 Build fixes. 2018-08-09 11:39:42 -07:00
553101e8b5 merge dev 2018-08-09 11:31:37 -07:00
3cd0ab1b3b Remove direct include of bits/sockaddr.h 2018-08-03 16:20:08 -07:00
fc6dba0797 Add functionality to erase members from networks using file backend in controller microservice
Signed-off-by: Diego Schulz <dschulz@gmail.com>
2018-08-02 17:13:55 -04:00
e01c0adff2 Added ifdef checks to omit some ManagedRoute code in SDK builds 2018-08-01 17:17:04 -07:00
e75a093a8c 2018-07-27 -- Version 1.2.12
* Fixed a bug that caused exits to take a long time on Mac due to huge numbers of redundant attempts to delete managed routes.
 * Fixed a socket limit problem on Windows that caused the ZeroTier service to run out of sockets, causing the UI and CLI to be unable to access the API.
 * Fixed a threading bug in the ZeroTier Core, albeit one that never manifested on the regular ZeroTier One service/client.
 * Fixed a bug that could cause the service to crash if an authorized local client accessed an invalid URL via the control API. (Not exploitable since you needed admin access anyway.)
2018-07-27 14:14:09 -07:00
dcffb042ff Windows Advanced Installer to 1.2.12 2018-07-27 13:35:20 -07:00
d724af6a99 Replace Sao Paolo root with Buenos Aires in default planet def (will push to network too) 2018-07-25 15:03:01 -07:00
b30f423fc9 . 2018-07-25 12:11:59 -07:00
1fc14292fe Version bumps. 2018-07-25 12:09:31 -07:00
fa7e7fc6f9 Revert fix for GitHub issue #600 because it causes route objects to build up forever (at least on Mac). Bleh. #600 is a rare issue and will need some other fix after reliable duplication. 2018-07-20 15:53:19 -07:00
5b114791e5 Fix a bug that caused a crash on empty HTTP requests (localhost only) and add a lightweight lock to the RX queue to prevent possible threads stepping on each other in parallel receive paths. 2018-07-20 14:01:58 -07:00
9bc11a369c Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-07-20 07:41:52 -07:00
ac40f2191c . 2018-07-20 07:41:47 -07:00
62a93c58fd Added ifdefs surrounding usage of getifaddrs() on Android 2018-07-19 17:50:10 -07:00
65b0030342 Added basic QoS rule handling 2018-07-11 16:55:13 -07:00
f302fac423 Minor tweak to linux makefile 2018-07-11 16:32:49 -07:00
f94aea8119 Return error 503 if RethinkDB is down when built as RethinkDB-based controller. 2018-07-11 10:42:31 -07:00
28cb40529d Rough draft of fq-codel implementation 2018-07-10 16:50:12 -07:00
37ae3b2b80 Remote debug printf. 2018-07-03 12:52:35 -07:00
73e4286fbf Fix two controller bugs: filesystem bug and another possible infinite recursion bug. 2018-07-03 12:51:41 -07:00
4e6151ebd9 Added "Create and Join Network" menu item to windows system tray UI 2018-06-28 15:24:45 -07:00
fc225401a5 use easy mode for network creation 2018-06-28 15:05:24 -07:00
d74817f79f Added blurb about allowTcpFallbackRelay to README 2018-06-22 16:46:50 -07:00
bdcdccfcc3 Improved path selection, more efficient traffic allocation, lower QoS/ACK overhead 2018-06-22 16:30:20 -07:00
352ec3430f Add a define to set FD_SETSIZE=1024 on Windows
Default on Windows is extremely low at 64 and is the likely culprit behind the UI and CLI not being able to talk to the background service
2018-06-21 12:11:10 -07:00
978d2fcb56 Optimize C25519 and Poly1305 on Windows even in debug. 2018-06-21 12:08:15 -07:00
52264d5e28 Fixed aggregateLinkLatency(). Also changed unit for throughput from byte to bit 2018-06-14 16:48:35 -07:00
17fbb020e7 Added multipath field to zerotier-cli status output. Adjusted how path estimates are computed and cached 2018-06-14 16:34:45 -07:00
f8005b88ad Minor cleanup. More efficient push() operation for RingBuffer 2018-06-13 14:50:37 -07:00
0faa655b83 Reduced how often relative path qualities and aggregate link allocations are computed 2018-06-12 16:30:46 -07:00
6fddf31db3 Improved rate limit logic for QoS/ACK packets. Also reduced how often processBackgroundPathMeasurements() is called 2018-06-12 15:24:12 -07:00
01257a461e Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2018-06-12 09:39:15 -07:00
817b9d012e Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-06-12 09:38:52 -07:00
04b3525e0f Merge pull request #755 from skunkwerks/fix/c++-17-deprecation
fix clang C++17 deprecation when building with ZT_DEBUG=1
2018-06-12 09:38:26 -07:00
d55c732e19 Merge pull request #764 from Elfe/master
fix MAC address rule parsing as even/uneven switches at every colon
2018-06-12 09:37:28 -07:00
d223427e22 Merge pull request #773 from alexforencich/master
Add UFW firewall application preset
2018-06-12 09:37:01 -07:00
64856adc3c Merge pull request #776 from Wykks/patch-1
Improve debian service requirements
2018-06-12 09:36:46 -07:00
7c53adbcfe quieting things down unless ZT_TRACE is defined 2018-06-11 10:47:58 -07:00
dce9cb27c1 helps to have an ==0 on a strcmp 2018-06-11 09:53:11 -07:00
4199c56e99 cant compare character arrays with == 2018-06-11 09:53:00 -07:00
9681fedbb4 Spellcheck sweep across codebase 2018-06-07 17:25:27 -07:00
b6d97af451 Added rate gates for QOS and ACK packets 2018-06-07 15:26:18 -07:00
a9ca26c698 Added TX queue cap for issue #769 2018-06-07 12:58:07 -07:00
9463d4abe4 Fix for issue #778
Double quote before member name in `/controller/network/network_id/member` API
2018-06-05 12:55:39 -07:00
b9975845ff Merge branch 'rtnetlink' into edge 2018-06-04 12:24:58 -07:00
b22405b64b rtnetlink integrated. no more callouts to iproute2 2018-06-04 12:24:12 -07:00
62210e57f1 helps to have an ==0 on a strcmp 2018-06-04 11:24:24 -07:00
4dd093efc9 cant compare character arrays with == 2018-06-04 11:07:12 -07:00
91a22a686a Added auto-escalation to multipath if both peers support it. Improved QoS/ACK tracking. Related bug fixes 2018-06-01 18:03:59 -07:00
a307dff3b7 Improve debian service requirements 2018-05-31 23:55:36 +02:00
20f0bed2f6 Add UFW firewall application preset 2018-05-30 19:10:51 -07:00
46a7a2be2e Added VERB_ACK and VERB_QOS_MEASUREMENT, refined notion of path quality 2018-05-30 17:45:29 -07:00
8199dbd0dc Merge branch 'dev' into edge 2018-05-30 11:19:12 -07:00
dfe426e4e0 fix MAC address rule parsing as even/uneven switches at every colon 2018-05-26 21:00:09 +02:00
3ace61ef85 comment out addInterface/removeInterface code for now
We already have ioctl based code to do this
2018-05-25 15:37:00 -07:00
442595d6fc also store binary representation of mac address in the interface lookup table for later use 2018-05-25 14:25:44 -07:00
be469f4dd0 add/remove routes via rtnetlink 2018-05-25 14:18:06 -07:00
7da4b0af15 better data localization in LinuxNetLink now that I know what Im doing 2018-05-24 16:15:03 -07:00
2fff651378 whoops. committed a binary 2018-05-24 16:14:32 -07:00
c24d16e62e ManagedRoute uses ioctl to add/remove routes on Linux
Added LinuxNetLink to talk to the rtnetlink socket for adding interfaces, addresses routes.  Not yet complete.  Can currently monitor changes on the system.
2018-05-24 15:22:11 -07:00
c36c92e077 node: remove deprecated register hint for C++17 compatibility
when building with `ZT_DEBUG=1` this hint produces a warning:

> node/Packet.cpp:335:43: error: 'register' storage class specifier is deprecated and incompatible with C++17 [-Werror,-Wdeprecated-register]
See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4340
2018-05-18 09:09:27 +00:00
c0efba79c7 Merge branch 'dev' of http://git.int.zerotier.com/zerotier/ZeroTierOne into dev 2018-05-11 13:40:22 -07:00
5809941ae9 Windows 1.2.10 2018-05-11 13:40:03 -07:00
535ba8a207 Consolidated powerpc64le machine types, added 32-bit powerpc machine type and a flag to disable use of Linux capabilities 2018-05-09 13:51:32 -07:00
43331d3fe8 Merge branch 'master' into dev 2018-05-09 10:31:19 -07:00
9765ba334a 1.2.10 2018-05-08 13:07:20 -07:00
0cd01b6ff8 Fix silly bug where moons and networks were being loaded by the address of an array rather than the proper value. 2018-05-07 12:51:39 -07:00
5f85e33510 GitHub issue #734 (warning removal) 2018-05-07 12:15:55 -07:00
22301a4599 Added override directive to CFLAGS for Synology builds in make-linux.mk 2018-05-04 14:31:34 -07:00
c8a907fd71 Added override directive to CXXFLAGS for Synology builds in make-linux.mk 2018-05-04 13:03:52 -07:00
d01b1ffde5 Added -fPIC for Synology builds 2018-05-04 12:09:04 -07:00
f4e993c814 Debian clean fix and CentOS 6 upgrade fix. 2018-05-03 12:51:49 -07:00
91c8e82c42 Adjusted locking order of _paths_m for path pruning. Other minor multipath changes 2018-05-02 15:24:14 -07:00
776ff46db7 User useradd not adduser on Debian. 2018-05-02 14:12:10 -07:00
9001ab5858 Do not add zerotier-one user if it does not exist (Debian) 2018-05-02 14:08:42 -07:00
1debe2292d Cleanup. Misc type conversion and signedness fixes 2018-05-02 11:22:07 -07:00
6a2ba4baca Introduced basic multipath support 2018-05-01 16:32:15 -07:00
836d897aec Re-ordered local.conf and node init logic, also split software update config into separate method to fix bad node pointer reference 2018-05-01 13:39:06 -07:00
740b0fbbf6 Merge branch 'dev' into edge 2018-04-30 13:08:24 -07:00
92e716d93d Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-04-30 13:08:16 -07:00
c7115a0671 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2018-04-30 13:07:52 -07:00
020bbed935 ARM32 fix. 2018-04-30 13:07:32 -07:00
0c60963a94 app icon with no alpha channel 2018-04-30 12:08:09 -07:00
d704f5f2d2 Remove alpha channel from app store icon 2018-04-30 12:06:41 -07:00
381bbb0e5e Merge branch 'dev' into edge 2018-04-30 08:47:51 -07:00
0ebd19c14a Merge branch 'dev' of /media/psf/Code/ZeroTier/ZeroTierOne into dev 2018-04-27 20:49:46 -07:00
d4160afac8 Another squeeze fix to see if we can make this work. 2018-04-27 19:51:27 -07:00
fffb037873 Fix for packaging on old Debian squeeze. 2018-04-27 18:53:55 -07:00
1df5d0453d Remove separate dh-systemd dependency since this is obsolete on newer Debian anyway. 2018-04-27 18:50:40 -07:00
19d453cb90 Add some more icon sizes
20x20, 60x60, 1024x1024 pngs
getting ready for an iOS release
2018-04-27 16:48:34 -07:00
6e7437a0d0 Add some more icon sizes
20x20, 60x60, 1024x1024 pngs
getting ready for an iOS release
2018-04-27 16:40:36 -07:00
caf849fcba Typo. 2018-04-27 16:22:36 -07:00
7533d244a9 Debian build fix. 2018-04-27 16:21:22 -07:00
0a52840fa3 1.2.8 Windows Advanced Installer update. 2018-04-27 13:52:33 -07:00
a7d0905b74 1.2.8 bump for all but Windows install files. 2018-04-27 13:06:00 -07:00
05bfafbce8 Merge branch 'master' into edge 2018-04-25 06:41:44 -07:00
d32a26f780 Merge pull request #428 from danielskowronski/netbsd-support
NetBSD support (we still consider this unsupported, but it might work -- thanks!)
2018-04-25 06:39:37 -07:00
42ec780a6f Merge branch 'dev' into netbsd-support 2018-04-25 06:39:02 -07:00
4608880fb0 Re-enable faster ed25519 signatures on x64 thanks to PR from @jonathonf 2018-04-25 06:34:34 -07:00
7492e2789f Merge pull request #722 from jonathonf/dev
Fix ed25519-amd64-asm PIC compatibility
2018-04-25 06:08:12 -07:00
9564a8eaf6 Delete junk. 2018-04-23 14:56:22 -07:00
f12c0e79c9 GitHub issue #723 2018-04-23 14:11:26 -07:00
e4e0be979e Fix ed25519-amd64-asm PIC compatibility
The Hyperledger implementation (https://github.com/hyperledger/iroha-ed25519)
contains changes to the assembly code to allow PIC. This in turn fixes
compilation/linking of ZeroTier One when "full hardening" flags are used.
2018-04-21 16:18:00 +01:00
86637cda9f Disable ASM ed25519 by default (it only helps significantly on controllers) so fPIE will work -- GitHub issue #717 2018-04-20 11:35:50 -07:00
94f41e2332 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2018-04-18 08:08:06 -07:00
3d2a50f811 Merge pull request #654 from atopuzov/armv7l
Add support for armv7l
2018-04-18 08:06:53 -07:00
c2ffbb8627 Merge pull request #673 from neutronscott/dev
check physical blacklist for interface binding as well
2018-04-18 08:05:51 -07:00
54218f6c3c Merge pull request #690 from Pablohn26/master
Warn about invalid network id instead of help
2018-04-18 08:05:28 -07:00
6fdbdf9272 Merge pull request #712 from elmar/master
fix typo in documentation
2018-04-18 08:04:19 -07:00
3de7691af3 Merge branch 'master' of github.com:zerotier/ZeroTierOne
* Features and Core Improvements
    * Path selection has been overhauled to improve path stability, simplify code, and prepare for multi-path and trunking in the next major release.
    * This version introduces remote tracing for remote diagnostics. Network controllers can set a node (usually the controller itself) to receive remote tracing events from all members of the network or from select members. Events are only sent if they pertain to a given network for security reasons.
    * Multicast replication can now be done by designated multicast replicators on a network (flagged as such at the controller) rather than by the sender. Most users won't want this, but it's useful for specialized use cases on hub-and-spoke networks and for low-power devices.
    * Cryptographic performance improvements on several platforms.
    * Multithreaded performance improvements throughout the code base, including the use of an inline lightweight spinlock for low-contention resources.
 * Bugs fixed
    * Disappearing routes on Mac (GitHub issue #600)
    * Route flapping and path instability in some dual-stack V4/V6 networks
    * Blacklist (in local.conf) doesn't work reliably (GitHub issue #656)
    * Connection instabilities due to unsigned integer overflows in timing comparisons (use int64_t instead of uint64_t)
    * Binaries don't run on some older or lower-end 32-bit ARM chips (build problem)
    * ARM NEON crypto code crashes (build problem)
    * Fixed some lock ordering issues revealed by "valgrind" tool
    * The "zerotier-idtool" command could not be accessed from "zerotier-one" via command line switch
    * Leaking sockets on some platforms when uPnP/NAT-PMP is enabled
    * Fixed two very rare multithreading issues that were only observed on certain systems
 * Platform-Specific Changes
    * MacOS
        * Installer now loads the kernel extension right away so that High Sierra users will see the prompt to authorize it. This is done in the "Security & Privacy" preference pane and must be done driectly on the console (not via remote desktop). On High Sierra and newer kexts must be authorized at the console via security settings system preferences pane.
    * Windows
        * The Windows installer should now install the driver without requiring a special prompt in most cases. This should make it easier for our packages to be accepted into and updated in the Chocolatey repository and should make it easier to perform remote installs across groups of machines using IT management and provisioning tools.
        * The Windows official packages are now signed with an EV certificate (with hardware key).
        * The Windows UI can now log into ZeroTier Central and join networks via the Central API.
        * The `zerotier-idtool` command should now work on Windows without ugly hacks.
        * Upgraded the installer version.
        * Made a few changes to hopefully fix sporadic "will not uninstall" problems, though we cannot duplicate these issues ourselves.
    * Linux
        * Device names are now generated deterministically based on network IDs for all newly joined networks.
    * Android
        * Multicast now works on Android in most cases! Android apps can send and receive multicast and subscribe to multicast group IPs. Note that in some cases the app must bind to the specific correct interface for this to work.
        * IPv6 can be disabled in UI for cases where it causes problems.
2018-04-17 13:32:39 -07:00
bbed93bcf4 * Features and Core Improvements
* Path selection has been overhauled to improve path stability, simplify code, and prepare for multi-path and trunking in the next major release.
    * This version introduces remote tracing for remote diagnostics. Network controllers can set a node (usually the controller itself) to receive remote tracing events from all members of the network or from select members. Events are only sent if they pertain to a given network for security reasons.
    * Multicast replication can now be done by designated multicast replicators on a network (flagged as such at the controller) rather than by the sender. Most users won't want this, but it's useful for specialized use cases on hub-and-spoke networks and for low-power devices.
    * Cryptographic performance improvements on several platforms.
    * Multithreaded performance improvements throughout the code base, including the use of an inline lightweight spinlock for low-contention resources.
 * Bugs fixed
    * Disappearing routes on Mac (GitHub issue #600)
    * Route flapping and path instability in some dual-stack V4/V6 networks
    * Blacklist (in local.conf) doesn't work reliably (GitHub issue #656)
    * Connection instabilities due to unsigned integer overflows in timing comparisons (use int64_t instead of uint64_t)
    * Binaries don't run on some older or lower-end 32-bit ARM chips (build problem)
    * ARM NEON crypto code crashes (build problem)
    * Fixed some lock ordering issues revealed by "valgrind" tool
    * The "zerotier-idtool" command could not be accessed from "zerotier-one" via command line switch
    * Leaking sockets on some platforms when uPnP/NAT-PMP is enabled
    * Fixed two very rare multithreading issues that were only observed on certain systems
 * Platform-Specific Changes
    * MacOS
        * Installer now loads the kernel extension right away so that High Sierra users will see the prompt to authorize it. This is done in the "Security & Privacy" preference pane and must be done driectly on the console (not via remote desktop). On High Sierra and newer kexts must be authorized at the console via security settings system preferences pane.
    * Windows
        * The Windows installer should now install the driver without requiring a special prompt in most cases. This should make it easier for our packages to be accepted into and updated in the Chocolatey repository and should make it easier to perform remote installs across groups of machines using IT management and provisioning tools.
        * The Windows official packages are now signed with an EV certificate (with hardware key).
        * The Windows UI can now log into ZeroTier Central and join networks via the Central API.
        * The `zerotier-idtool` command should now work on Windows without ugly hacks.
        * Upgraded the installer version.
        * Made a few changes to hopefully fix sporadic "will not uninstall" problems, though we cannot duplicate these issues ourselves.
    * Linux
        * Device names are now generated deterministically based on network IDs for all newly joined networks.
    * Android
        * Multicast now works on Android in most cases! Android apps can send and receive multicast and subscribe to multicast group IPs. Note that in some cases the app must bind to the specific correct interface for this to work.
        * IPv6 can be disabled in UI for cases where it causes problems.
2018-04-17 13:30:37 -07:00
8900b30b6e Windows installer tweaks and version bumps. 2018-04-17 12:47:33 -07:00
ae4fb799e4 More versioning 2018-04-17 12:14:59 -07:00
3f1d1fb3c3 'versioning' 2018-04-17 12:12:49 -07:00
f0a23ae0ea docs 2018-04-17 10:48:00 -07:00
c14f9cc247 fix typo in documentation 2018-04-14 10:52:30 +02:00
e276b6463e Release notes, and shorten Linux canonical network ID derived device names a bit. 2018-04-12 10:33:06 -04:00
9da7967197 Merge branch 'dev' into edge 2018-04-12 09:08:48 -04:00
74f2b78c04 Refactor some potentially unsafe SharedPtr<> code. 2018-04-06 08:10:34 -07:00
2021f8cb5f Merge branch 'dev' into edge 2018-03-29 13:34:54 -07:00
40a9ebd078 GitHub issue #675 2018-03-29 10:44:57 -07:00
8c1b73b29c GitHub issue #701 2018-03-29 10:25:29 -07:00
6679a55693 certutil needs -f in case TrustedProvider store is not yet created 2018-03-27 19:15:14 -07:00
1101c1d919 Works on 32-bit too now. 2018-03-27 18:46:06 -07:00
fcb529b348 Take two on unattended driver installs. I think it works now.' 2018-03-27 17:53:28 -07:00
680b1ca208 Upgrade installer AIP versions and redo how we bundle the driver sub-installer to allow unattended driver installs (hopefully). 2018-03-27 14:19:45 -07:00
af74fe1711 Merge branch 'dev' into edge 2018-03-21 15:32:04 -07:00
494cf4049e Add specification of anchor and multicast hub address (optional) to new multicast and IPv4 enabled ad-hoc network ID format. 2018-03-21 15:31:48 -07:00
c908b9f67a Add anchor and multicast hub address field to new multicast enabled ad-hoc address format. 2018-03-21 15:27:26 -07:00
209f6d9d2d Merge branch 'dev' into edge 2018-03-19 11:18:54 -07:00
916077012e Make sure fopen is in binary mode on Windows. 2018-03-16 11:27:11 -07:00
beb170e4fb Use X64 ASM ed25519 signatures on Linux/x64, which are about 10X faster. Will matter a lot for network controllers, not so much for other things. 2018-03-13 06:51:17 -07:00
a59912f3af SHA512 using libcrypto (not enabled by default) 2018-03-12 16:56:47 -07:00
610e594a50 Speed tweaks for signatures, etc. 2018-03-12 16:16:20 -07:00
b4e2547052 Minor tweak to QNAP path getter 2018-03-12 11:23:10 -07:00
a9778549f2 Warn about invalid network id instead of help 2018-03-11 03:39:13 +01:00
b601041b5b Merge branch 'edge' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2018-03-09 07:51:43 -08:00
0945d6ec0d Merge branch 'dev' into edge 2018-03-09 07:50:38 -08:00
78d9cee416 Other fixes to IPv4 ad-hoc networks. 2018-03-09 00:10:01 -08:00
bbdb2aa672 Some work on IPv4 enabled ad-hoc networks. 2018-03-08 23:53:57 -08:00
574b24c082 docs 2018-03-08 22:41:42 -08:00
874a187c7f cleanup 2018-03-08 22:39:51 -08:00
e8fb443313 Forgot one other use in RethinkDb driver. 2018-03-08 22:34:51 -08:00
57b96af2c4 Fix for FileDB _networkChanged / _memberChanged problem. 2018-03-08 22:33:08 -08:00
e61d4ab67a Merge branch 'dev' into edge 2018-02-23 13:58:24 -08:00
2ee358dbfc TAP driver requires input and output buffers for calls passed into DeviceIoControl
Otherwise the driver returns STATUS_INVALID_PARAMETER and the call fails.  This should fix some Multicast issues on Windows
2018-02-23 13:42:02 -08:00
e3bb67d188 Added debug output convenience macros 2018-02-16 16:55:31 -08:00
2d289a3308 Just a little cleanup 2018-02-16 15:20:07 -08:00
bdb2cc7c85 Linux: link system libcurl when compiling with ZT_VAULT_SUPPORT=1
Requires libcurl and development headers to be installed
2018-02-16 15:08:04 -08:00
7793060723 Add HashiCorp Vault storage of ZeroTier's public & secret identity
Adds a "vault" section to local.conf.  Example local.conf:

{
  "config": {
    "vault": {
      "vaultURL": "https://some.vault.host:8200",
      "vaultToken": "my-super-secret-vault-token",
      "vaultPath": "secure/place/to/put/identity"
    }
}

Additionally, the following environment variables can be set.  Environment variables override local.conf:

VAULT_ADDR
VAULT_TOKEN
VAULT_PATH

Identities will be placed in the keys "public" and "secret" under the user specified path.  If no path is specified, they will be placed in the token specific cubbyhole.

If identity.public and identity.secret exist on disk and vault is configured, they will be automatically added to Vault and removed from disk.

TODO:
 *  Decide behavior for if Vault cannot be reached.
 *  Add libcurl as a dependency in Linux & Mac builds
 *  Add libcurl as a requirement for linux packages
2018-02-16 14:30:27 -08:00
84302ae9c7 Add CURL libs to VC project 2018-02-16 14:21:38 -08:00
cd801b96fa libcurl binaries for Windows 2018-02-16 10:31:37 -08:00
5ff0653f9e Hooks into StateGet and StatePut for grabbing identity.secret from Vault 2018-02-16 10:18:10 -08:00
9574d635c1 Add Vault configuration option parsing to local.conf
{
   "settings": {
       ...
      "valut": {
         "vaultURL": "...",
         "vaultKey": "...",
         "vaultPath": "..."
      }
   }
}
2018-02-16 10:18:10 -08:00
1bec8ddce4 Better error messages when the ZeroTier service can't be contacted
Fixes #681
2018-02-13 16:41:21 -08:00
f9b07c63db Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-02-12 09:30:12 -08:00
8828fc7520 some JNI error checking 2018-02-12 09:29:44 -08:00
978d8fcd4a Merge branch 'dev' of http://10.187.63.16/zerotier/ZeroTierOne into dev 2018-02-09 06:35:09 +00:00
51aadcf901 A few fixes dicatated by valgrind. 2018-02-09 06:35:01 +00:00
db952a050a Added platform checks for Windows in OneService 2018-02-08 14:15:32 -08:00
f049740ae5 silence LOGV and LOGD in release builds for android 2018-02-07 15:53:23 -08:00
73ca9b6373 check physical blacklist for interface binding as well 2018-02-03 14:53:46 -05:00
c6949aad2d Linux build fix on some versions. 2018-02-02 17:11:23 -08:00
e57d0fdccc Update README.md
this ip changes sometimes
2018-02-02 10:30:49 -08:00
82f383be43 A few other make changes. 2018-02-01 15:58:58 -08:00
26aaf253ac Allow us to build a semi-dynamic official binary that works back to CentOS 6, at least on x64, and is very fast since we can build it with newer clang or icc. 2018-02-01 15:52:41 -08:00
51715376bf Use Intel icc if available on Linux. 2018-02-01 13:05:17 -08:00
ff95b0278c Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-02-01 12:46:40 -08:00
fe1fa20c6c Fix build on Intel C/C++ Compiler for Linux. 2018-02-01 12:46:35 -08:00
a867fe404b Omit pragma comment for ZT_SDK builds on Windows 2018-01-31 17:08:42 -08:00
d6e8a5f3ca Fix Windows compile error. 2018-01-30 16:07:41 -08:00
4878d8ec15 Add CAP_NET_BIND_SERVICE to capabilities 2018-01-30 10:47:31 -08:00
f7019d9e80 Tie up the rest of hub and spoke designated replicator multicast mode. 2018-01-26 22:14:10 -05:00
6d8e1e8783 More cleanup of old stuff. 2018-01-26 21:34:56 -05:00
939ab43ceb Do not send to origin in second buffered multicast path. 2018-01-26 21:22:51 -05:00
d3d58ba8a7 Add support for designated multicast replicators to Multicaster::send(). 2018-01-26 21:19:51 -05:00
f03fd57997 Clean up some multicast code. 2018-01-26 20:38:44 -05:00
e74cd4b4ef A little more cleanup. 2018-01-26 20:06:11 -05:00
f3dfd63634 Clean up some old stuff. 2018-01-26 20:00:37 -05:00
5f5302e595 More useful to allow arrays of IPs to bind to. 2018-01-25 17:27:08 -05:00
125ec622ca Add bindToWildcard local.conf option. 2018-01-25 14:59:11 -05:00
384e5b66de More work on GitHub issue #666 2018-01-25 14:16:07 -05:00
7e7723e98f A small memory use reduction. 2018-01-25 09:57:02 -05:00
4419734a7d Implement continuous contacting of designated anchors and multicast replicators - GitHub issue #666 2018-01-25 07:11:59 -05:00
f821db29f3 . 2018-01-24 17:12:53 -05:00
6c64f1816d cleanup 2018-01-24 16:16:00 -05:00
34e2ad0dfc Stub out NetworkConfig for GitHub issue #666 2018-01-24 14:43:04 -05:00
055b99c3cb cleanup 2018-01-12 15:44:27 -08:00
531842dc6b Update miniupnpc to latest version (included library) 2018-01-12 15:30:40 -08:00
d7f3c33d72 Add zerotier-idtool to Windows. 2018-01-12 15:03:45 -08:00
4e689998f9 Sanity checks on array sizes and fix a bug in IPv4 auto-assign. 2018-01-12 10:38:19 -08:00
cd2a4b709c Reduce maximum batcn size for status updates but increase the number of whole record commit threads. 2018-01-12 09:18:27 -08:00
d96aeac335 docs 2018-01-11 16:44:24 -08:00
c594351bcc Remove old code. 2018-01-11 14:32:55 -08:00
5f976d7430 Reenable faster lock. 2018-01-11 14:31:19 -08:00
f87326fc21 Fixes for lock ordering -- GitHub issue #573 2018-01-11 14:29:57 -08:00
0574a70fac docs 2018-01-11 09:49:13 -08:00
4e79804cd3 cleanup 2018-01-10 16:56:39 -08:00
86d5264167 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-01-10 16:55:15 -08:00
5bc4399a58 cleanup 2018-01-10 16:55:07 -08:00
406bcf7d3f Fix compilation on Windows
DEBUG macro from miniupnpc interferring with enum Trace::DEBUG;
2018-01-10 15:24:54 -08:00
f17cc1c6d8 cleanup 2018-01-10 15:03:39 -08:00
57077e4607 Added (get) command blurb in cli help 2018-01-10 14:40:31 -08:00
6304c85d3f Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-01-10 14:31:31 -08:00
a1992d76f2 Doc updates and other fixes. 2018-01-10 14:31:28 -08:00
98b07f7f3c Added (get) command to cli to single out JSON fields 2018-01-10 14:05:28 -08:00
6e1823ac81 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-01-10 12:43:18 -08:00
640cc22749 Added allowTcpFallbackRelay to local.conf, fixed logic in Binder's route enumeration 2018-01-10 12:41:52 -08:00
9bab49d2f9 Move DB stuff into Db. 2018-01-09 12:39:25 -08:00
2751a6d56d cleanup 2018-01-09 12:31:00 -08:00
07cb62a503 cleanup 2018-01-09 11:41:26 -08:00
8a3b698407 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-01-09 11:23:44 -08:00
0c71d658fb cleanup 2018-01-09 11:23:39 -08:00
7e2d614975 Attempted fix for ticket #656 (failes to acknowledge physical blacklists) 2018-01-09 10:16:49 -08:00
09e4ab9aa1 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2018-01-09 10:00:01 -08:00
2e1bc6e500 Cleaned up old code for attempted fix for ticket #600 2018-01-09 09:59:55 -08:00
1aea096b63 GitHub issue #492 2018-01-09 09:05:22 -08:00
30694f0b20 Allow trusted paths over global IPs for legacy config format too. 2018-01-09 08:59:26 -08:00
01b4cb64ee cleanup 2018-01-09 08:35:02 -08:00
6fbd15f8b2 cleanup 2018-01-08 15:56:53 -08:00
65c07afe05 Copyright updates for 2018. 2018-01-08 14:33:28 -08:00
e338c5f91d cleanup 2018-01-08 14:27:55 -08:00
0b0b5da240 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2018-01-08 13:06:30 -08:00
9c7ee5a21e Tear out old "link quality" stuff since it is not currently used and will be done differently. 2018-01-08 13:06:24 -08:00
f7b3ffe8a0 Commented out block which ignores added routes if there already exists an IP in the route's range. Attempted fix for #600 2018-01-05 17:10:59 -08:00
381857ea49 macOS: add libcurl to libraries when ZT_VAULT_SUPPORT=1 is specified on the make command line 2018-01-03 11:56:20 -08:00
50aef368f6 Add support for armv7l
* GCC running on Raspberry Pi 3 on Arch linux ARM reports arch as
  armv7l-unknown-linux-gnueabihf
2018-01-02 11:32:17 +01:00
a9c4ce38f0 eh 2017-12-18 15:07:58 -08:00
bbc39d7648 Restore managed ZT routes that are deleted or otherwise mangled locally (Attempted fix for ticket #600) 2017-12-18 15:05:19 -08:00
d3e8e9629b More optimization work. 2017-12-15 14:24:17 -08:00
1f0b3a32d5 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-12-15 11:03:27 -08:00
0608704626 Some micro-optimizations, including a memcpy that is faster than Linux for most distro/compiler versions. 2017-12-15 11:03:20 -08:00
cb8e7b4d5e Make UDP read loop eventually move on. 2017-12-15 10:15:13 -08:00
346fa4d7f4 Added ZT_SANITIZE option to makefiles. This your new memory debugging best friend 2017-12-14 13:27:49 -08:00
7a22f01dd8 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-12-14 08:53:32 -08:00
4704d115c4 Some controller fixes. 2017-12-14 08:53:24 -08:00
12c621c230 Removed build flag in CMake script 2017-12-13 14:57:20 -08:00
cba65d897a Added CMake build script for libzerotiercore.a 2017-12-13 14:55:17 -08:00
e4a10cc510 Member commit bug fix. 2017-12-08 19:00:38 -05:00
249c27afd5 Fix old bug invoking idtool personality with -i 2017-12-08 11:17:07 -08:00
38cc89b2ca Add time to rethinkdb message output in controller. 2017-12-08 12:39:20 -05:00
aeb1794be1 Comment out storage of secret ID in RethinkDb. 2017-12-07 16:04:41 -08:00
dae728124e Fix to network path in conventional filesystem controller DB. 2017-12-07 14:42:33 -08:00
cf30b1fcdf GitHub issue #589 2017-12-07 17:13:24 -05:00
19bfef36f1 Build fix. 2017-12-07 16:45:43 -05:00
8d9464c414 docs, and make RethinkDB controller DB driver upsert into the Controller DB and also update the hostname field. 2017-12-07 13:39:25 -08:00
ada611d597 Go ahead and load kext so MacOS High Sierra users will see kext auth dialog right away. 2017-12-07 08:56:15 -08:00
f13886d343 Warning removal. 2017-12-05 17:53:28 -05:00
520b0601db Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-12-05 14:51:06 -08:00
926ecf9640 docs 2017-12-05 14:50:59 -08:00
c57198decd Add remoteTraceLevel to controller. 2017-12-05 17:49:20 -05:00
431716e249 Disable trace by default, stderr message improvements in RethinkDB driver. 2017-12-05 17:16:45 -05:00
694709f392 Add timestamp to network status. 2017-12-04 19:21:56 -05:00
16613ab5fb Clean up remote tracing code, add per-network remote trace settings, add remote trace level, and make local trace output readable again. 2017-12-04 14:40:10 -08:00
c26bf45e28 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-11-29 04:47:16 -08:00
23e5c7b38d Fix self-test compile. 2017-11-29 04:47:10 -08:00
382dd82eb6 Fix for local.conf virtual path blacklist (ticket #594) 2017-11-27 15:31:25 -08:00
f18d5b2efe Attempted fix for github issue #597, leaking sockets. Added call to closenatpmp() after failure to init 2017-11-27 14:23:55 -08:00
0fb22df633 Get ephemeral status fields out of the configs. They do not belong there and it just complicates things. 2017-11-09 17:01:16 -05:00
750e36993f GitHub issue #617 2017-11-09 11:35:46 -05:00
f7f658605d Move more ephemeral stuff to a tiny MemberLastRequest table instead of the main Member table. 2017-11-08 20:19:46 -05:00
192e5dbff8 Another fix for uptime logging. 2017-11-08 20:02:10 -05:00
ef224c3547 RethinkDB build fix. 2017-11-08 19:52:36 -05:00
c12b68a6b2 More Central work. 2017-11-08 11:32:01 -08:00
4166d8ca35 Fix a deadlock and some more work on RethinkDB (for central) integration. 2017-11-08 11:06:14 -08:00
53e7e950f1 Windows build fixes. 2017-11-07 16:39:12 -08:00
0612879dec Fix const. 2017-11-07 16:23:56 -08:00
3b21f946e4 Remove manual define of include rethinkdb driver symbol. 2017-11-07 16:18:48 -08:00
9f85371073 cleanup 2017-11-07 15:23:16 -08:00
cb550ab4fe Merge branch 'dev' into edge 2017-11-07 14:59:18 -08:00
b8cbf08617 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-11-07 14:59:03 -08:00
1613f42d00 Re-integrate in-filesystem DB into new controller DB structure. 2017-11-07 14:44:46 -08:00
e5d1243dd2 Minor changes to SDK-related portions of OneService 2017-11-06 13:43:56 -08:00
7fc9094d8e More fixes to RethinkDB. 2017-11-03 22:40:26 -04:00
92c7070aa8 RethinkDB fixes. 2017-11-03 20:55:16 -04:00
b68bca35db Linux build fixes, linux build rule for RethinkDB mode controller, also force disable shitty allocators in libstdc++. 2017-11-03 16:59:36 -04:00
d97adc8789 Preparing for test. 2017-11-03 12:32:56 -07:00
f5014d7d71 RethinkDB direct connectivity integration. 2017-11-03 11:39:27 -07:00
4e88c80a22 RethinkDB native connector work, minor fixes. 2017-11-02 07:05:11 -07:00
a6203ed038 icon 2017-10-29 12:01:15 -07:00
1db547d607 Windows build fixes, AIP file update. 2017-10-25 16:25:57 -07:00
2cc4dc5a6f Clean peers.d periodically and delete peers older than 30 days. 2017-10-25 16:08:14 -07:00
fac7dc9c91 Stop duplciate IPv6 addresses due to privacy mode IPs. 2017-10-25 16:01:36 -07:00
508fa6a7fe A few fixes for cluster mode. 2017-10-25 15:44:10 -07:00
71bdaa9508 Now with more worky. 2017-10-25 13:27:28 -07:00
459f1e7bfb Refactor path stability stuff and add basic multipath support. 2017-10-25 12:42:14 -07:00
0d8b8d8426 Remove some unused constants. 2017-10-24 15:04:19 -07:00
2d0dc62a53 docs 2017-10-24 14:57:02 -07:00
0d8e134f9f Warning removal. 2017-10-24 14:54:15 -07:00
c7d370c17f Delete something that turns out not to be useful. This will be handled differently. 2017-10-24 14:49:38 -07:00
395d8b3139 Full and clearer implementation of GitHub issue #588 2017-10-24 13:33:53 -07:00
b92ef67e56 Merge pull request #550 from surgicalcoder/patch-2
Peer's role misses a PLANET role
2017-10-24 12:22:38 -07:00
5a8aa66641 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-10-24 12:22:02 -07:00
e87ef18826 cleanup 2017-10-24 12:21:56 -07:00
7b78d4f11f Merge pull request #605 from oneguynick/patch-1
Update make-linux.mk to include support for Armv7l
2017-10-24 12:21:32 -07:00
65ac61b2ea Update make-linux.mk to include support for Armv7l
When running ArchlinuxARM with 64bit support on Raspberry Pi3, the default build fails due to the architecture look-up at the beginning of the build process. A simple addition of the Armv7l section above allows the build to continue and successfully run.
2017-10-19 09:21:24 -04:00
629a3a2a24 call setFriendlyName() after tap adapter is initialized 2017-10-16 12:16:05 -07:00
ee4783e3fb ifdef omit of deletePersistentTapDevice() in OneService for libzt builds on Windows 2017-10-10 15:01:15 -07:00
f2c69ede96 Conditionally omit reference to CancelSynchronousIo in Thread.hp when MINGW32/64 is detected for libzt build - Symbol not supported 2017-10-10 12:21:52 -07:00
ceeb35eaac If lastSend/lastReceive is < 0, just put 0. 2017-10-05 13:19:25 -07:00
099bedd2e9 A few more uint64_t -> int64_t changes for timestamps 2017-10-04 12:01:17 -07:00
4177a11522 remove some leftover debug code 2017-10-04 09:18:13 -07:00
3d4a1b575e Update Android NDK with uint64_t -> int64_t changes 2017-10-03 11:25:26 -07:00
b1d60df44c timestamps changed from uint64_t to int64_t
There were cases in the code where time calculations and comparisons were overflowing and causing connection instability.  This will keep time calculations within expected ranges.
2017-10-02 15:52:57 -07:00
7cf70d111a Return an explicit NULL shared pointer at the end of Topology::getPeer() 2017-09-28 10:40:27 -07:00
e564c56dce Set size of buffer after setting data with unsafeData() call 2017-09-28 10:39:43 -07:00
239c2540d6 Mutex::lock and ::unlock just called themselves 2017-09-27 15:05:13 -07:00
c53d140145 Replace '_' with '__' in network names on toolbar menu in Windows
Otherwise WPF gobbles up the underscores
2017-09-27 13:24:29 -07:00
12a6a2f2d2 remove reference to invalid file 2017-09-27 13:07:24 -07:00
9c903567bb Hashtable needs to include Constants.hpp for ZT_EXCEPTION_OUT_OF_MEMORY 2017-09-25 13:42:19 -07:00
6782dee64a Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2017-09-25 10:10:17 -07:00
302c15140e Fix API problem with path configuration.. 2017-09-25 08:53:55 -07:00
c666f92e35 new startup process UI for Windows 2017-09-22 15:33:09 -07:00
eb42ef68ee Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2017-09-22 10:22:22 -07:00
52916eebcf Keep attemting to upgrade direct path if path is not private to facilitate better use of LANs and backplane networks. 2017-09-14 20:56:50 -07:00
f8014413a3 Add UDP MTU configurability. 2017-09-01 16:25:34 -07:00
2d858b05ac Another fix for ye old tyme clients. 2017-09-01 12:03:31 -07:00
b1fb020aea Raise chunk size to max packet size for network configs. Chunking breaks really ancient clients, so this helps them live a little longer. No real downside for new clients. 2017-09-01 10:43:44 -07:00
02ed84774c Non-x86 build fix. 2017-08-31 20:47:44 -04:00
283e8d5bc0 Start threads in Central harnessed mode. 2017-08-31 18:01:21 -04:00
f39e2e2a53 Fixed typo of mysterious origin 2017-08-31 11:37:29 -07:00
5bf5d5e9cb Minor controller stuff. 2017-08-30 17:22:25 -07:00
e51e212b95 Add some defines of use to low level developers. 2017-08-25 16:04:04 -07:00
6418d02572 Fix HTTP DELETE stupid bug. 2017-08-24 15:33:24 -07:00
49fa30d495 Ticket lock for x64/gcc/clang platforms. 2017-08-23 18:52:32 -07:00
dd8b03a5c5 Threading issue fix? 2017-08-23 18:28:40 -07:00
4d5983114c Fix another deadlock. 2017-08-23 17:14:06 -07:00
0a9c3b5571 Fix possible deadlock. 2017-08-23 16:59:31 -07:00
180049a277 Fix pointer bug. 2017-08-23 16:55:22 -07:00
6ee201865b Clean up WHOIS code. 2017-08-23 16:42:17 -07:00
b1d94c9f93 Performance improvement to RX queue ring buffer. 2017-08-23 15:19:26 -07:00
a156a4dbe2 Symmetric NAT cleanup. 2017-08-23 15:12:00 -07:00
2cebe7a5e0 Fix name difference. 2017-08-23 14:09:29 -07:00
9cfc109527 Tighten a few timings. 2017-08-23 14:00:08 -07:00
64758c46b6 Implement peer serialization and deserialization. 2017-08-23 13:40:51 -07:00
4352202349 Reduce TCP relay latency -- see GitHub issue #564 2017-08-18 14:54:10 -07:00
ba07a60c44 Fix PPC PR. 2017-08-18 14:40:10 -07:00
72bfe0953a Merge pull request #560 from andyfangdz/patch-1
Add `ppc64le` arch
2017-08-18 14:38:41 -07:00
bab5647522 Add make rule for official-static. 2017-08-18 14:00:35 -07:00
fcaf1d89c2 Get rid of some noisy remote traces that should not be needed. 2017-08-18 13:59:22 -07:00
106dff0d53 Make remote trace target null by default, which is probably what we want. 2017-08-18 13:52:10 -07:00
174ba8884e Delete support in harnessed mode. 2017-08-17 13:10:10 -07:00
1ce0dcf0ea Another Central harnessed mode fix. 2017-08-16 14:41:42 -07:00
1387e15c1b Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-08-16 14:14:56 -07:00
50e7ea088b More work on controller for new Central harnessed mode, remove old http mode. 2017-08-16 14:14:49 -07:00
59b7cbb591 Rename SocketTap to VirtualTap to prevent confusion on role 2017-08-15 16:22:28 -07:00
23fe8975e7 . 2017-08-14 11:44:07 -07:00
a4bc40542b GCC/G++ build fixes, GitHub issue #563 2017-08-14 11:43:39 -07:00
ee1dc16e8f Added getRoutes() for libzt 2017-08-10 00:59:15 -07:00
1c04cc0485 . 2017-08-09 17:42:35 -07:00
2c682b4d1c Small controller revisions, first run of controller API model JavaScript. 2017-08-09 14:37:19 -07:00
6842490c1f Add menu option to open ZeroTier Central in the system default browser 2017-08-09 14:19:37 -07:00
ff5e22031a Small fix: should expire packets to prevent repeated WHOISes. 2017-08-08 13:24:37 -07:00
e3cf756785 Make rxQueue lock-free using an atomic counter ring buffer. 2017-08-08 13:21:10 -07:00
7e6598e9ca Possible deadlock fix. 2017-08-07 14:13:08 -07:00
48d2017629 Add ppc64le arch
I've only tested locally, on a power8 box running Ubuntu 16.10, but everything (and earth) checks out.

Let me know if more testing infrastructure is needed.
2017-08-06 02:06:00 -07:00
e4823381c6 . 2017-07-19 15:16:15 -07:00
66feaeb519 . 2017-07-19 15:06:23 -07:00
8c6b833fb3 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-07-19 14:13:23 -07:00
b62296a40b Bug fixes in new harness mode. 2017-07-19 14:13:17 -07:00
fc7728212f Fix ifndef on Windows 2017-07-18 15:59:11 -07:00
31785f7f6e Automatic periodic status dump from controller. 2017-07-18 15:36:33 -07:00
ae65eb5105 Cleanup and replace trace field names with sane ones because usability > a few bytes. 2017-07-18 14:28:38 -07:00
727ccb1125 Cleanup and stdin/stdout harness mode for controller. 2017-07-18 13:57:37 -07:00
77ce238457 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-07-17 17:02:57 -07:00
1685659e37 Remote tracing works. 2017-07-17 17:02:50 -07:00
0f03d4ef51 Update Jenkinsfile for new NDK in Jenkins 2017-07-17 16:55:00 -07:00
bcf697cc2b Wire up PortMapper in Android
Enables UPnP port mapping for Android client on networks with UPnP routers
2017-07-17 16:16:25 -07:00
5e2ea4a81a Cleanup. 2017-07-17 14:24:57 -07:00
b9e1d53d7a Minor cleanup. 2017-07-17 14:21:09 -07:00
ab0806a036 Cleanup. 2017-07-17 13:48:39 -07:00
3a1ec07db0 Remove some exception copypasta. 2017-07-17 10:43:28 -07:00
d939d8d21d A bit more remote tracing stuff. 2017-07-14 14:57:40 -07:00
d9552fb120 Add remoteTraceTarget to network and member configs in controller. 2017-07-14 14:33:36 -07:00
4ecc0c59ca Plumbing through of remote trace into controller code. 2017-07-14 13:03:16 -07:00
0655a1fcbe Move old cluster code into attic. 2017-07-13 16:42:43 -07:00
c8d0cf2c40 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2017-07-13 16:31:30 -07:00
c692f2e740 Fix for new identity generation bug. 2017-07-13 16:31:16 -07:00
a83c7c0d07 remove debugging flag 2017-07-13 15:13:20 -07:00
ba6fd16823 More tracing stuff. 2017-07-13 15:08:57 -07:00
54893c35c1 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-07-13 10:51:19 -07:00
495c5ce81d Bunch of remote tracing work. 2017-07-13 10:51:05 -07:00
4cc773ec1b fix Windows build 2017-07-12 13:52:45 -07:00
69ae35494e put the correct file extensions on data written to disk in JNI 2017-07-12 13:36:22 -07:00
512c3af4ea fix packet sending functions 2017-07-12 13:12:45 -07:00
d8f1c3dff7 Update JNI code to reflect new ZeroTier API 2017-07-12 11:34:53 -07:00
0a11dd2d24 Fix NeighborDiscovery code now that ZT_SOCKADDR_NULL doesn’t exist 2017-07-11 15:45:36 -07:00
78ee7f6573 Peer's role misses a PLANET role
Peer's role misses a PLANET role in documentation vs what's returned from API.
2017-07-09 15:39:49 +01:00
dab0fb9e05 Remote trace: plumbing, replace old TRACE with calls to Trace object. 2017-07-07 16:58:05 -07:00
e14d5d49a1 Merge branch 'master' into dev 2017-07-07 09:36:54 -07:00
782b2b1514 Merge pull request #537 from laduke/patch-1
Update README.md
2017-07-07 09:32:37 -07:00
a9582417e2 Merge pull request #547 from surgicalcoder/patch-1
Clarification on how to use JSON API with secret
2017-07-07 09:32:23 -07:00
69922b6c39 BSD build fix. 2017-07-07 09:29:24 -07:00
6fc70f7c16 More cleanup, Linux build fixes. 2017-07-07 06:50:40 -07:00
a274e774ee Clarification on how to use JSON API with secret
Makes it clear on how to use the authtoken.secret file when making requests.
2017-07-07 10:11:21 +01:00
f23a43fb81 More cleanup. 2017-07-06 17:32:41 -07:00
88997a0314 Windows build fixes. 2017-07-06 16:29:11 -07:00
d2415dee00 Cleanup. 2017-07-06 16:11:11 -07:00
53728b79b4 . 2017-07-06 12:35:23 -07:00
dff8c02cfe Pull out and deprecate old cluster code. New cluster code will not be merged yet. 2017-07-06 12:33:00 -07:00
640ad577d1 . 2017-07-06 11:56:46 -07:00
cd63ecd3f3 . 2017-07-06 11:45:48 -07:00
f18158a52d . 2017-07-06 11:45:22 -07:00
84748aab51 Merge branch 'dev' into edge 2017-07-06 10:26:04 -07:00
3fadc64ee0 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-07-06 10:25:58 -07:00
47594f7c99 Merge branch 'edge' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2017-07-06 10:25:44 -07:00
2f20258807 . 2017-07-06 10:25:36 -07:00
47122a3804 Merge branch 'dev' into edge 2017-07-03 13:29:54 -07:00
1730f8f5b7 also cluster.hpp 2017-07-03 13:04:11 -07:00
d258a75cd3 remove Cluster.cpp from build list as it's been removed 2017-07-03 13:03:43 -07:00
baa10c2995 . 2017-06-30 17:32:07 -07:00
207d6572e0 fix for changelist posting to mattermost 2017-06-30 14:24:40 -07:00
10264cec2f slackSend -> mattermostSend 2017-06-30 13:43:39 -07:00
0ea1749c59 Merge pull request #540 from skunkwerks/master
build: all BSDs expect gmake here
2017-06-30 09:55:43 -07:00
dd83c680e5 build: all BSDs expect gmake here 2017-06-30 13:11:05 +00:00
1a40f35fd4 Merge branch 'dev' into edge 2017-06-27 11:32:14 -07:00
8a99113c88 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-06-27 11:32:07 -07:00
ada2ea3a6b Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2017-06-27 11:31:39 -07:00
355cce3938 Rename Utils::snprintf due to it being a #define on one platform. 2017-06-27 11:31:29 -07:00
9b2e08dd09 Update README.md
We've had multiple questions in the community chat regarding posting new
network and getting the curl syntax correct.
2017-06-26 11:53:35 -07:00
04cee3b8d3 Merge branch 'dev' of https://github.com/zerotier/ZeroTierOne into dev 2017-06-26 02:13:40 -07:00
c61440efea Detect platformDefaultHomePath on QNAP systems 2017-06-25 20:20:30 -07:00
02d18af57d Remove Cluster.hpp 2017-06-23 16:10:26 -07:00
2225bb093a Merge branch 'edge' into dev 2017-06-23 16:06:38 -07:00
75a6a7baca Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-06-23 16:05:58 -07:00
6b130e8311 fix for windows compilation (related to SDK implementation) 2017-06-21 14:58:39 -07:00
1b18923824 except wondows/lib 2017-06-13 14:25:53 -07:00
fc2ce439e2 remove unneeded files 2017-06-13 14:23:11 -07:00
5b3d9f9184 added Windows SDK in form of dlls 2017-06-13 13:28:23 -07:00
dd68c207f4 Stuff old Cluster code in attic. 2017-06-08 08:51:49 -07:00
9a3c34b5b3 Build fix, use -Os on Linux too. 2017-06-07 17:19:33 -07:00
951d911531 Last bit of new cluster code, ready to test. 2017-06-06 16:11:19 -07:00
4f2179b0df . 2017-06-05 13:42:43 -07:00
9b287392a4 . 2017-06-05 12:15:28 -07:00
aa06470cb6 More cleanup for cluster refactor. 2017-06-01 20:32:43 -07:00
d7b4f24a7a . 2017-06-01 17:21:57 -07:00
e8d11eb5c5 . 2017-06-01 17:21:04 -07:00
7f4da08ff7 . 2017-06-01 12:57:44 -07:00
1f9414a30f . 2017-06-01 12:38:04 -07:00
6015b529a0 More clustering work. 2017-06-01 12:33:05 -07:00
76452b4e28 Data structure fixup. 2017-06-01 07:39:31 -07:00
64b7d9ef82 New clustering work. 2017-06-01 07:15:46 -07:00
7bc9666aac fix for SDK's route/tap association in getTap() 2017-05-31 13:07:03 -07:00
2a4a50b1da Add some also-ZeroTier-written ext/ code for use in new clustering, delete some old code, and change Mac to use -Os which is just as fast as -Ofast and may be faster due to cache effects. 2017-05-31 08:36:09 -07:00
2ec88e8008 Remove old circuit test code. Rules engine will let us do this much better and more simply. 2017-05-30 10:19:45 -07:00
36049a940c added campaign tags to README.md 2017-05-25 17:09:21 -07:00
952834f7f3 Let Android Studio determine debug/release build 2017-05-23 14:56:29 -07:00
f9a9c2d009 Config object was never even being initialized on leave. Never noticed since desktop and server clients did not use. 2017-05-23 14:45:16 -07:00
fb71a6e2b4 skipRootCheck should also prevent dropping of privs on Linux 2017-05-19 16:16:10 -07:00
5e6a2a17b0 Cluster build fix. 2017-05-19 15:32:52 -07:00
92289c1981 Move to canonical device naming on Linux. 2017-05-19 15:18:47 -07:00
99e2098a48 Add a way to specify a different interface prefix (for internal use mostly). 2017-05-19 14:00:08 -07:00
5fc1c1de28 . 2017-05-19 13:24:40 -07:00
2fac693243 I guess there's a bug in Clipboard.SetText(). Clipboard.SetDataObject() works, though. 2017-05-12 16:42:54 -07:00
e9b956ed71 Swallow a possible ArgumentNullException when copying text to the system clipboard 2017-05-12 16:05:29 -07:00
236a952458 typo 2017-05-11 14:26:46 -07:00
426b7c2c76 Stupid bug is stupid. 2017-05-11 14:13:38 -07:00
22780a8504 Merge branch 'dev' of http://10.187.63.16/zerotier/ZeroTierOne into dev 2017-05-10 13:48:55 -07:00
a437fd420c version 2017-05-10 13:48:47 -07:00
2d74c60d47 Add branch hints to bounds checking in Buffer. 2017-05-09 21:54:23 -07:00
ceee56af51 Fix for small stacks. 2017-05-09 21:36:25 -07:00
d297d8fe2e Musl fix 2017-05-09 21:21:56 -07:00
f479b76772 define likely/unlikely 2017-05-09 20:22:08 -07:00
73f7088b45 Run Join/Leave commands asynchronously so the UI doesn't lock up on thoise commands 2017-05-08 16:17:33 -07:00
b3dd5c0e3a Build fix. 2017-05-08 14:51:12 -07:00
ee7ee22555 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-05-08 14:46:54 -07:00
cf49e511a5 More makefile changes. 2017-05-08 14:46:45 -07:00
505b9c7f56 Makefile reorg to allow core to be built as a library. 2017-05-08 14:36:55 -07:00
8c30b2b9f5 Fixed falling out of the network monitor thread if the ZeroTier service isn't running on Windows 2017-05-08 13:27:54 -07:00
b9c1407013 Adjust PUSH_DIRECT_PATH circuit breaker, and comment out traces to reduce noise. 2017-05-08 09:36:37 -07:00
d905607353 Small optimizations. 2017-05-08 08:35:55 -07:00
e5e90b1f71 Wire MTU through to service. 2017-05-04 20:10:49 -07:00
d5ed025871 Support MTU reconfigure for Windows. 2017-05-04 19:50:02 -07:00
b55422a528 MTU integration in taps. 2017-05-04 19:31:50 -07:00
909a14fb48 MTU support in controller. 2017-05-04 17:22:24 -07:00
107e3e4106 First pass of configurable MTU and max MTU increase. 2017-05-04 17:12:02 -07:00
6ef247fb93 More ARM stuff. 2017-05-04 16:00:53 -07:00
b8e46b835b Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-05-04 15:54:15 -07:00
0900fee5d9 Linux build stuff for ARM. 2017-05-04 15:54:08 -07:00
1f26cb98de updated OneService convenience functions for SDK 2017-05-04 15:26:44 -07:00
ceeb8ee0bc added isEqualPrefix to InetAddress 2017-05-04 15:25:48 -07:00
54c47a1e03 Add some historic code just for the heck of it. 2017-05-04 10:42:22 -07:00
6bb855873d GitHub issue #494 -- shut down and restart UI on Mac pkg install/upgrade. 2017-05-03 15:03:26 -07:00
39db45e144 Fix crash on exit (sometimes) in controller. 2017-05-03 09:48:08 -07:00
41c187ba12 Another very small crypto optimization. 2017-05-03 07:43:23 -07:00
d7c99728bc Echo back ping payload. 2017-05-02 17:28:18 -07:00
8e19188f49 Do the sometimes rather big "pong" in a background worker thread. 2017-05-02 16:58:51 -07:00
625e3e8e25 Tiny optimization to prealloc string space. 2017-05-02 13:53:47 -07:00
fde99e2fcf Fix for post size limit in Http library. 2017-05-02 12:08:53 -07:00
132643cd4a Fix small issue preventing pongs if there are never seen members. 2017-05-02 10:34:33 -07:00
faf7b81c01 Send last requets time in status, and do not set physicalAddr unless we know one. 2017-05-01 15:48:52 -07:00
bcc6799902 Send member uptime in pong posts. 2017-05-01 15:23:21 -07:00
718e1d6c08 Finish removing constantly changing stuff from controller. 2017-05-01 13:21:26 -07:00
a9ce773584 Remove lastModified field in config which literally nothing uses anywhere, and prevent some unnecessary writes. 2017-04-28 19:58:21 -07:00
d69bc4fb5e Main license file. 2017-04-27 20:54:42 -07:00
1b68d6dbdc License header update. 2017-04-27 20:47:25 -07:00
62578a2162 Reduce memory use and a bit of cleanup. 2017-04-27 19:36:03 -07:00
9e80db0fd1 Cleanup, fix a valgrind error, stack use reduction. 2017-04-27 00:59:36 -07:00
e8ab6adf89 Deadlock fix. 2017-04-26 12:17:43 -07:00
7c184cf991 Another performance improvement to controller. 2017-04-26 10:35:59 -07:00
72def658d0 Add a dummy Ethernet tap and a build option to enable it. 2017-04-26 08:42:49 -07:00
e7cd888c7d dev is now 1.2.5 2017-04-26 06:50:12 -07:00
1205578935 Big cleanup of controller code, should help performance. 2017-04-26 06:48:08 -07:00
4e77365e8d Remove a little cruft. 2017-04-25 16:17:54 -07:00
4f2a779769 JSONDB performance improvements, threading fix. 2017-04-24 20:51:02 -07:00
cafbe44dde Controller optimizations -- make locking more fine-grained, use true hardware concurrency, etc. 2017-04-24 19:16:36 -07:00
6234bfd8bf 4-core Debian build. 2017-04-24 18:40:34 -07:00
77796caba6 Static ARM32 build fixes. 2017-04-24 18:12:58 -07:00
97f1d7ae2e . 2017-04-24 16:56:18 -07:00
487e89d4d0 Add i486 and i586 to Linux makefile for detection of ia32. 2017-04-24 15:19:03 -07:00
fe5257df81 VERSION 1.2.4: Bug fixes and performance improvements
* Managed routes are now only bifurcated for the default route. This is a change in behavior, though few people will probably notice. Bifurcating all managed routes was causing more trouble than it was worth for most users.
 * Up to 2X crypto speedup on x86-64 (except Windows, which will take some porting) and 32-bit ARM platforms due to integration of fast assembly language implementations of Salsa20/12 from the [supercop](http://bench.cr.yp.to/supercop.html) code base. These were written by Daniel J. Bernstein and are in the public domain. My Macbook Pro (Core i5 2.8ghz) now does almost 1.5GiB/sec Salsa20/12 per core and a Raspberry Pi got a 2X boost. 64-bit ARM support and Windows support will take some work but should not be too hard.
 * Refactored code that manages credentials to greatly reduce memory use in most cases. This may also result in a small performance improvement.
 * Reworked and simplified path selection and priority logic to fix path instability and dead path persistence edge cases. There have been some sporadic reports of persistent path instabilities and dead paths hanging around that take minutes to resolve. These have proven difficult to reproduce in house, but hopefully this will fix them. In any case it seems to speed up path establishment in our tests and it makes the code simpler and more readable.
 * Eliminated some unused cruft from the code around path management and in the peer class.
 * Fixed an issue causing build problems on some MIPS architecture systems.
 * Fixed Windows forgetting routes on sleep/wake or in some other circumstances. (GitHub issue #465)
2017-04-24 11:41:23 -07:00
9161424c97 Version bumps. 2017-04-24 11:41:01 -07:00
cdda0dd043 Windows version bump. 2017-04-24 11:37:54 -07:00
f4feccc626 Do not serve controller requests until init is done. 2017-04-24 09:09:04 -07:00
44cb2f4efd ++version 2017-04-21 15:32:00 -07:00
cacb8fae0d GitHub issue #463 -- fix MacOS uninstall script. 2017-04-21 13:55:44 -07:00
fa99a5cf12 docs 2017-04-21 13:27:34 -07:00
e700165eba GitHub issue #465 - Windows route amnesia 2017-04-21 13:26:02 -07:00
8542ee59db Windows crash fix. 2017-04-21 12:42:51 -07:00
76108671f6 BSD makefile fix for OpenBSD. 2017-04-21 08:42:45 -07:00
8b0ce1cc00 More BSD make fixes. 2017-04-21 08:09:18 -07:00
0e88c73f68 Mirror over some arch rules from Linux to BSD make, and enable fast crypto there. 2017-04-21 08:04:33 -07:00
ba0d73d102 Windows build fixes. 2017-04-20 10:21:40 -07:00
d3ecd1d670 docs 2017-04-20 10:21:08 -07:00
f9ae5938d0 Makefile fix, only bifurcate routes for default, and release notes. 2017-04-20 10:08:46 -07:00
a8ced184dc Some code cleanup and make sure any type punning is guarded with ZT_NO_TYPE_PUNNING. 2017-04-20 09:33:35 -07:00
e7a2c6ecef Integrate ARM/NEON crypto. 2017-04-19 17:11:56 -07:00
a376bcc654 ARM NEON Salsa20/12 in build and selftest. Almost 2X speedup on a Raspberry Pi. 2017-04-19 23:49:26 +00:00
8e1ac9fb0c ARM NEON Salsa20/12. 2017-04-19 15:58:20 -07:00
bc61357a44 HTTP backend support for JSONDB 2017-04-18 17:37:44 -07:00
f6d92eb737 JSONDB fix. 2017-04-18 13:48:19 -07:00
48cadcd2fc More build fixes. 2017-04-18 12:48:56 -07:00
bd63a840c7 Mac build fix. 2017-04-18 12:44:27 -07:00
aaf597f020 Cleanup, Windows fixes, Self test fix 2017-04-18 12:22:44 -07:00
72bd3064a2 Windows build fixes, self test cleanup. 2017-04-18 11:00:29 -07:00
a1c316b940 Makefile cruft. 2017-04-18 09:19:39 -07:00
02f84b225c Add MIPS architectures to Linux Makefile and add an error if architecture cannot be determined. 2017-04-18 09:14:33 -07:00
6551c20005 Enable x64 ASM Salsa20/12 on Linux. 2017-04-18 08:57:32 -07:00
a1e94154be Just incorporate the X64 ASM version of Salsa20/12 for X64 platforms. This gives us (for example) 1.5gb/sec encryption on a Core i5 2.8ghz. 2017-04-18 08:45:37 -07:00
4938e82795 Delete junk. 2017-04-17 18:01:51 -07:00
7a94f63058 Back out NaCl since the old one with xmm6 salsa2012 does not support multi-block use and the new one is slower. 2017-04-17 17:54:12 -07:00
db0edf154c Use right deployment target in OSX bin. 2017-04-17 16:54:41 -07:00
a1cd94a61d Actually include .a 2017-04-17 16:43:36 -07:00
df48738ac9 Enable use of NaCl for faster X64 Salsa20 implementations. Also include binary for OSX for easy build. Blazingly fast. 2017-04-17 16:43:03 -07:00
d8f5cfdee4 Windows profile build target (CPU profiling), and a little bit of optimization revealed by such. 2017-04-17 15:45:49 -07:00
95e5345cc3 Cluster build fix. 2017-04-17 10:12:13 -07:00
ba5d0cc2f9 Silence some TRACE noise. 2017-04-17 09:31:07 -07:00
1d8ded3293 Tiny largely non-consequential credential fix. 2017-04-17 09:30:28 -07:00
2487a8bede Fix for 100% cpu issue. 2017-04-17 09:14:21 -07:00
f1c0563c40 Fix for cluster handoff. 2017-04-14 18:02:04 -07:00
139c4b5633 Significant simplification to path logic. 2017-04-14 17:53:32 -07:00
645bf4a764 Resurrect zerotier-containerized. 2017-04-14 13:30:12 -07:00
88a4a3b1ba Pass tptr on leave. 2017-04-11 08:47:02 -07:00
6fabaae736 Add simple root server watcher (for our own new dashboard, but also for user use). 2017-04-04 16:47:14 -07:00
1b2cfd63e5 add libstdc++ dependency 2017-04-04 14:10:38 -07:00
ff2b219abd root-watcher code 2017-04-04 12:39:14 -07:00
33c3af752b Need to just have a make option for soft float ARM. 2017-04-04 11:26:50 -07:00
f73a1d2d56 Linux ARM flags. 2017-04-04 09:41:34 -07:00
470ad39d0d More Linux ARM stuff. 2017-04-04 09:15:38 -07:00
5ad120208f Small fix, should filter by temporal validity. 2017-04-04 08:46:12 -07:00
b48a70db2e Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-04-04 08:39:22 -07:00
cd050b3423 Performance improvement in controller. 2017-04-04 08:39:19 -07:00
eddbc7e757 Logic simplification, cleanup, and memory use improvements in Membership. Also fix an issue that may cause network instability in some cases. 2017-04-04 08:07:38 -07:00
8a62ba07e5 Membership cleanup work in progress. 2017-04-04 06:47:01 -07:00
b3298a8f57 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-03-30 09:54:10 -07:00
e5284771e4 Add ping/pong to API so controller supervisor in Central can do a full-path check of controller uptime, etc. 2017-03-30 09:54:04 -07:00
5f611dad51 added orbit/deorbit methods to java Node implementation 2017-03-29 13:29:02 -07:00
1c5fdb8a0a fix path checker initialization 2017-03-29 13:28:06 -07:00
de4b9e9a16 Added path checking interface for Java 2017-03-29 12:52:52 -07:00
57b5a33fbb Fix bug preventing default from being set to null if already set to an integer. 2017-03-29 12:32:59 -07:00
3f4f7145a3 Another rule compiler fix. 2017-03-28 22:25:24 -07:00
b959148447 Small rule compiler fix with tag defaults. 2017-03-28 21:50:44 -07:00
855361b5b8 fix native end of JNI code for new thread data ptr 2017-03-28 17:49:00 -07:00
91c9f4cb20 Fix TRACE and CLUSTER builds. 2017-03-27 17:33:25 -07:00
e4896b257f Add thread PTR that gets passed through the entire ZT core call stack and then passed to handler functions resulting from a call. 2017-03-27 17:03:17 -07:00
592cac5815 Remove from a few other places. 2017-03-27 12:09:37 -07:00
4244cca48c Delete comically named SSL gateway code, which is going elsewhere. 2017-03-27 12:08:38 -07:00
179ab5220a Set macOS deployment target to 10.10 for UI applet
Must use CLI for older versions of macOS
2017-03-27 11:36:11 -07:00
d6bb1b72c3 Fix some text colors to work on old OS X versions 2017-03-27 11:15:36 -07:00
3d9a5a4f91 Popovers now appear to work 2017-03-27 10:55:47 -07:00
683ba79ff0 Added ButtFlare stub code 2017-03-24 17:00:14 -07:00
0c69fc719f Windows UI will attempt to re-copy the auth token if a 401 error is received 2017-03-22 10:48:42 -07:00
03b48a4ad4 add lock around [ServiceCom key] and remove some debug code 2017-03-22 10:22:15 -07:00
aa71292265 A couple more places we should check HTTP status 2017-03-22 10:18:12 -07:00
d72eee6cf7 If we get a 401 error from the ZeroTier service in the macOS UI, try re-copying the auth token 2017-03-22 09:58:13 -07:00
6bb19e7947 build fix 2017-03-21 09:08:32 -07:00
3d2518f799 crazy formatting fix 2017-03-21 08:21:11 -07:00
5268909075 Add a facility for full flow-through uptime test of controller by Central. 2017-03-21 06:31:15 -07:00
c62141fd98 Make controller do a simple write-through cache without revalidating. Means you must restart if files change on disk, but will decrease I/O considerably. 2017-03-21 06:15:49 -07:00
ae303ee902 dev is now 1.2.3 2017-03-20 16:17:11 -07:00
cfe0d0971f VERSION 1.2.2
Version 1.2.2 fixes a few bugs discovered after the 1.2.0 release. These are:

 * A bug causing unreliable multicast propagation (GitHub issue #461).
 * A crash in ARM binaries due to a build chain and flags problem.
 * A bug in the network controller preventing members from being listed (GitHub issue #460).
2017-03-17 21:13:41 -07:00
c5c8facc2d Windows installer version bump and a build fix. 2017-03-17 20:20:47 -07:00
f78d6a8a93 docs 2017-03-17 20:04:25 -07:00
78ef2c5f16 Windows build fixes, app about text revisions. 2017-03-17 20:01:58 -07:00
ec8e1178e5 Version bumps, and fix Debian so default is to build normally and .static files are used in our builds. 2017-03-17 19:16:34 -07:00
4f3f471b4c GitHub issue #460 2017-03-17 18:19:51 -07:00
e10325e133 GitHub issue #461 -- plus a bit of cleanup and optimization 2017-03-17 17:15:23 -07:00
ef46d3c97d LZ4 cleanup 2017-03-17 23:09:18 +00:00
a9c08c5975 . 2017-03-17 22:35:56 +00:00
c467c3b7e4 ARM tweaks 2017-03-17 22:26:08 +00:00
cdc0eaec3a Fix attempt to WHOIS self. 2017-03-17 22:13:34 +00:00
a7cb738175 . 2017-03-17 14:25:54 -07:00
d1bb22a583 . 2017-03-17 14:09:30 -07:00
553d972de5 bump that version. bump it good. 2017-03-17 13:56:45 -07:00
cc883cc3d8 Merge branch 'master' of http://10.6.6.2/zerotier/ZeroTierOne 2017-03-17 13:56:01 -07:00
c6a39ed927 Fixes for possible ARM issues, cleanup, fix for spurious meaningless exceptions on NETWORK_CONFIG_REQUEST 2017-03-17 13:55:26 -07:00
df30255542 Merge branch 'master' into dev 2017-03-17 12:37:23 -07:00
d5102539dd Merge pull request #457 from skunkwerks/master
build: use clang on FreeBSD
2017-03-17 12:18:54 -07:00
e3feaf3f5d Warning removal, and dev is now 1.2.1 2017-03-16 16:45:11 -07:00
25dc596397 build: use clang on FreeBSD
this avoids a whopping 500+Mb dependency on gcc and friends at runtime
2017-03-16 12:58:04 +01:00
0daff26fba Version 1.2.0 is a major milestone release representing almost nine months of work. It includes our rules engine for distributed network packet filtering and security monitoring, federated roots, and many other architectural and UI improvements and bug fixes.
The largest new feature in 1.2.0, and the product of many months of work, is our advanced network rules engine. With this release we achieve traffic control, security monitoring, and micro-segmentation capability on par with many enterprise SDN solutions designed for use in advanced data centers and corporate networks.

Rules allow you to filter packets on your network and vector traffic to security observers. Security observation can be performed in-band using REDIRECT or out of band using TEE.

Tags and capabilites provide advanced methods for implementing fine grained permission structures and micro-segmentation schemes without bloating the size and complexity of your rules table.

See the [rules engine announcement blog post](https://www.zerotier.com/blog/?p=927) for an in-depth discussion of theory and implementation. The [manual](https://www.zerotier.com/manual.shtml) contains detailed information on rule, tag, and capability use, and the `rule-compiler/` subfolder of the ZeroTier source tree contains a JavaScript function to compile rules in our human-readable rule definition language into rules suitable for import into a network controller. (ZeroTier Central uses this same script to compile rules on [my.zerotier.com](https://my.zerotier.com/).)

It's now possible to create your own root servers and add them to the root server pool on your nodes. This is done by creating what's called a "moon," which is a signed enumeration of root servers and their stable points on the network. Refer to the [manual](https://www.zerotier.com/manual.shtml) for instructions.

Federated roots achieve a number of things:

 * You can deploy your own infrastructure to reduce dependency on ours.
 * You can deploy roots *inside your LAN* to ensure that network connectivity inside your facility still works if the Internet goes down. This is the first step toward making ZeroTier viable as an in-house SDN solution.
 * Roots can be deployed inside national boundaries for countries with data residency laws or "great firewalls." (As of 1.2.0 there is still no way to force all traffic to use these roots, but that will be easy to do in a later version.)
 * Last but not least this makes ZeroTier somewhat less centralized by eliminating any hard dependency on ZeroTier, Inc.'s infrastructure.

Our roots will of course remain and continue to provide zero-configuration instant-on deployment, a secure global authority for identities, and free traffic relaying for those who can't establish peer to peer connections.

An element of our design philosophy is "features are bugs." This isn't an absolute dogma but more of a guiding principle. We try as hard as we can to avoid adding features, especially "knobs" that must be tweaked by a user.

As of 1.2.0 we've decided that certain knobs are unavoidable, and so there is now a `local.conf` file that can be used to configure them. See the ZeroTier One documentation for these. They include:

 * Blacklisting interfaces you want to make sure ZeroTier doesn't use for network traffic, such as VPNs, slow links, or backplanes designated for only certain kinds of traffic.
 * Turning uPnP/NAT-PMP on or off.
 * Configuring software updates on Windows and Mac platforms.
 * Defining trusted paths (the old trusted paths file is now deprecated)
 * Setting the ZeroTier main port so it doesn't have to be changed on the command line, which is very inconvenient in many cases.

A good software update system for Windows and Mac clients has been a missing feature in previous versions. It does exist but we've been shy about using it so far due to its fragility in some environments.

We've greatly improved this mechanism in 1.2.0. Not only does it now do a better job of actually invoking the update, but it also transfers updates in-band using the ZeroTier protocol. This means it can work in environments that do not allows http/https traffic or that force it through proxies. There's also now an update channel setting: `beta` or `release` (the default).

Software updates are authenticated three ways:

 1. ZeroTier's own signing key is used to sign all updates and this signature is checked prior to installation. ZeroTier, Inc.'s signatures are performed on an air-gapped machine.

 2. Updates for Mac and Windows are signed using Apple and Microsoft (DigiCert EV) keys and will not install unless these signatures are also valid.

 3. The new in-band update mechanism also authenticates the source of the update via ZeroTier's built-in security features. This provides transport security, while 1 and 2 provide security of the update at rest.

Updates are now configurable via `local.conf`. There are three options: `disable`, `download`, and `apply`. The third (apply) is the default for official builds on Windows and Mac, making updates happen silently and automatically as they do for popular browsers like Chrome and Firefox. Updates are disabled by default on Linux and other Unix-type systems as these are typically updated through package managers.

Version 1.2.0 is now aware of the link quality of direct paths with other 1.2.0 nodes. This information isn't used yet but is visible through the JSON API. (Quality always shows as 100% with pre-1.2.0 nodes.) Quality is measured passively with no additional overhead using a counter based packet loss detection algorithm.

This information is visible from the command line via `listpeers`:

    200 listpeers XXXXXXXXXX 199.XXX.XXX.XXX/9993;10574;15250;1.00 48 1.2.0 LEAF
    200 listpeers XXXXXXXXXX 195.XXX.XXX.XXX/45584;467;7608;0.44 290 1.2.0 LEAF

The first peer's path is at 100% (1.00), while the second peer's path is suffering quite a bit of packet loss (0.44).

Link quality awareness is a precursor to intelligent multi-path and QoS support, which will in future versions bring us to feature parity with SD-WAN products like Cisco iWAN.

Version 1.2.0 adds anti-DOS (denial of service) rate limits and other hardening for improved resiliency against a number of denial of service attack scenarios.

It also adds a mechanism for instantaneous credential revocation. This can be used to revoke certificates of membership instantly to kick a node off a network (for private networks) and also to revoke capabilities and tags. The new controller sends revocations by default when a peer is de-authorized.

Revocations propagate using a "rumor mill" peer to peer algorithm. This means that a controller need only successfully send a revocation to at least one member of a network with connections to other active members. At this point the revocation will flood through the network peer to peer very quickly. This helps make revocations more robust in the face of poor connectivity with the controller or attempts to incapacitate the controller with denial of service attacks, as well as making revocations faster on huge networks.

The Mac has a whole new UI built natively in Objective-C. It provides a pulldown similar in appearance and operation to the Mac WiFi task bar menu.

The Windows UI has also been improved and now provides a task bar icon that can be right-clicked to manage networks. Both now expose managed route and IP permissions, allowing nodes to easily opt in to full tunnel operation if you have a router configured on your network.

A special kind of public network called an ad-hoc network may be accessed by joining a network ID with the format:

    ffSSSSEEEE000000
    | |   |   |
    | |   |   Reserved for future use, must be 0
    | |   End of port range (hex)
    | Start of port range (hex)
    Reserved ZeroTier address prefix indicating a controller-less network

Ad-hoc networks are public (no access control) networks that have no network controller. Instead their configuration and other credentials are generated locally. Ad-hoc networks permit only IPv6 UDP and TCP unicast traffic (no multicast or broadcast) using 6plane format NDP-emulated IPv6 addresses. In addition an ad-hoc network ID encodes an IP port range. UDP packets and TCP SYN (connection open) packets are only allowed to desintation ports within the encoded range.

For example `ff00160016000000` is an ad-hoc network allowing only SSH, while `ff0000ffff000000` is an ad-hoc network allowing any UDP or TCP port.

Keep in mind that these networks are public and anyone in the entire world can join them. Care must be taken to avoid exposing vulnerable services or sharing unwanted files or other resources.

The network controller has been largely rewritten to use a simple in-filesystem JSON data store in place of SQLite, and it is now included by default in all Windows, Mac, Linux, and BSD builds. This means any desktop or server node running ZeroTier One can now be a controller with no recompilation needed.

If you have data in an old SQLite3 controller we've included a NodeJS script in `controller/migrate-sqlite` to migrate data to the new format. If you don't migrate, members will start getting `NOT_FOUND` when they attempt to query for updates.

 * **The Windows HyperV 100% CPU bug is FINALLY DEAD**: This long-running problem turns out to have been an issue with Windows itself, but one we were triggering by placing invalid data into the Windows registry. Microsoft is aware of the issue but we've also fixed the triggering problem on our side. ZeroTier should now co-exist quite well with HyperV and should now be able to be bridged with a HyperV virtual switch.
 * **Segmenation faults on musl-libc based Linux systems**: Alpine Linux and some embedded Linux systems that use musl libc (a minimal libc) experienced segmentation faults. These were due to a smaller default stack size. A work-around that sets the stack size for new threads has been added.
 * **Windows firewall blocks local JSON API**: On some Windows systems the firewall likes to block 127.0.0.1:9993 for mysterious reasons. This is now fixed in the installer via the addition of another firewall exemption rule.
 * **UI crash on embedded Windows due to missing fonts**: The MSI installer now ships fonts and will install them if they are not present, so this should be fixed.

 * **Improved dead path detection**: ZeroTier is now more aggressive about expiring paths that do not seem to be active. If a path seems marginal it is re-confirmed before re-use.
 * **Minor performance improvements**: We've reduced unnecessary memcpy's and made a few other performance improvements in the core.
 * **Linux static binaries**: For our official packages (the ones in the download.zerotier.com apt and yum repositories) we now build Linux binaries with static linking. Hopefully this will stop all the bug reports relating to library inconsistencies, as well as allowing our deb packages to run on a wider variety of Debian-based distributions. (There are far too many of these to support officially!) The overhead for this is very small, especially since we built our static versions against musl-libc. Distribution maintainers are of course free to build dynamically linked versions for inclusion into distributions; this only affects our official binaries.

Merge branch 'master' of github.com:zerotier/ZeroTierOne
2017-03-14 22:08:48 -07:00
94ba5b3fbe Version 1.2.0 is a major milestone release representing almost nine months of work. It includes our rules engine for distributed network packet filtering and security monitoring, federated roots, and many other architectural and UI improvements and bug fixes.
The largest new feature in 1.2.0, and the product of many months of work, is our advanced network rules engine. With this release we achieve traffic control, security monitoring, and micro-segmentation capability on par with many enterprise SDN solutions designed for use in advanced data centers and corporate networks.

Rules allow you to filter packets on your network and vector traffic to security observers. Security observation can be performed in-band using REDIRECT or out of band using TEE.

Tags and capabilites provide advanced methods for implementing fine grained permission structures and micro-segmentation schemes without bloating the size and complexity of your rules table.

See the [rules engine announcement blog post](https://www.zerotier.com/blog/?p=927) for an in-depth discussion of theory and implementation. The [manual](https://www.zerotier.com/manual.shtml) contains detailed information on rule, tag, and capability use, and the `rule-compiler/` subfolder of the ZeroTier source tree contains a JavaScript function to compile rules in our human-readable rule definition language into rules suitable for import into a network controller. (ZeroTier Central uses this same script to compile rules on [my.zerotier.com](https://my.zerotier.com/).)

It's now possible to create your own root servers and add them to the root server pool on your nodes. This is done by creating what's called a "moon," which is a signed enumeration of root servers and their stable points on the network. Refer to the [manual](https://www.zerotier.com/manual.shtml) for instructions.

Federated roots achieve a number of things:

 * You can deploy your own infrastructure to reduce dependency on ours.
 * You can deploy roots *inside your LAN* to ensure that network connectivity inside your facility still works if the Internet goes down. This is the first step toward making ZeroTier viable as an in-house SDN solution.
 * Roots can be deployed inside national boundaries for countries with data residency laws or "great firewalls." (As of 1.2.0 there is still no way to force all traffic to use these roots, but that will be easy to do in a later version.)
 * Last but not least this makes ZeroTier somewhat less centralized by eliminating any hard dependency on ZeroTier, Inc.'s infrastructure.

Our roots will of course remain and continue to provide zero-configuration instant-on deployment, a secure global authority for identities, and free traffic relaying for those who can't establish peer to peer connections.

An element of our design philosophy is "features are bugs." This isn't an absolute dogma but more of a guiding principle. We try as hard as we can to avoid adding features, especially "knobs" that must be tweaked by a user.

As of 1.2.0 we've decided that certain knobs are unavoidable, and so there is now a `local.conf` file that can be used to configure them. See the ZeroTier One documentation for these. They include:

 * Blacklisting interfaces you want to make sure ZeroTier doesn't use for network traffic, such as VPNs, slow links, or backplanes designated for only certain kinds of traffic.
 * Turning uPnP/NAT-PMP on or off.
 * Configuring software updates on Windows and Mac platforms.
 * Defining trusted paths (the old trusted paths file is now deprecated)
 * Setting the ZeroTier main port so it doesn't have to be changed on the command line, which is very inconvenient in many cases.

A good software update system for Windows and Mac clients has been a missing feature in previous versions. It does exist but we've been shy about using it so far due to its fragility in some environments.

We've greatly improved this mechanism in 1.2.0. Not only does it now do a better job of actually invoking the update, but it also transfers updates in-band using the ZeroTier protocol. This means it can work in environments that do not allows http/https traffic or that force it through proxies. There's also now an update channel setting: `beta` or `release` (the default).

Software updates are authenticated three ways:

 1. ZeroTier's own signing key is used to sign all updates and this signature is checked prior to installation. ZeroTier, Inc.'s signatures are performed on an air-gapped machine.

 2. Updates for Mac and Windows are signed using Apple and Microsoft (DigiCert EV) keys and will not install unless these signatures are also valid.

 3. The new in-band update mechanism also authenticates the source of the update via ZeroTier's built-in security features. This provides transport security, while 1 and 2 provide security of the update at rest.

Updates are now configurable via `local.conf`. There are three options: `disable`, `download`, and `apply`. The third (apply) is the default for official builds on Windows and Mac, making updates happen silently and automatically as they do for popular browsers like Chrome and Firefox. Updates are disabled by default on Linux and other Unix-type systems as these are typically updated through package managers.

Version 1.2.0 is now aware of the link quality of direct paths with other 1.2.0 nodes. This information isn't used yet but is visible through the JSON API. (Quality always shows as 100% with pre-1.2.0 nodes.) Quality is measured passively with no additional overhead using a counter based packet loss detection algorithm.

This information is visible from the command line via `listpeers`:

    200 listpeers XXXXXXXXXX 199.XXX.XXX.XXX/9993;10574;15250;1.00 48 1.2.0 LEAF
    200 listpeers XXXXXXXXXX 195.XXX.XXX.XXX/45584;467;7608;0.44 290 1.2.0 LEAF

The first peer's path is at 100% (1.00), while the second peer's path is suffering quite a bit of packet loss (0.44).

Link quality awareness is a precursor to intelligent multi-path and QoS support, which will in future versions bring us to feature parity with SD-WAN products like Cisco iWAN.

Version 1.2.0 adds anti-DOS (denial of service) rate limits and other hardening for improved resiliency against a number of denial of service attack scenarios.

It also adds a mechanism for instantaneous credential revocation. This can be used to revoke certificates of membership instantly to kick a node off a network (for private networks) and also to revoke capabilities and tags. The new controller sends revocations by default when a peer is de-authorized.

Revocations propagate using a "rumor mill" peer to peer algorithm. This means that a controller need only successfully send a revocation to at least one member of a network with connections to other active members. At this point the revocation will flood through the network peer to peer very quickly. This helps make revocations more robust in the face of poor connectivity with the controller or attempts to incapacitate the controller with denial of service attacks, as well as making revocations faster on huge networks.

The Mac has a whole new UI built natively in Objective-C. It provides a pulldown similar in appearance and operation to the Mac WiFi task bar menu.

The Windows UI has also been improved and now provides a task bar icon that can be right-clicked to manage networks. Both now expose managed route and IP permissions, allowing nodes to easily opt in to full tunnel operation if you have a router configured on your network.

A special kind of public network called an ad-hoc network may be accessed by joining a network ID with the format:

    ffSSSSEEEE000000
    | |   |   |
    | |   |   Reserved for future use, must be 0
    | |   End of port range (hex)
    | Start of port range (hex)
    Reserved ZeroTier address prefix indicating a controller-less network

Ad-hoc networks are public (no access control) networks that have no network controller. Instead their configuration and other credentials are generated locally. Ad-hoc networks permit only IPv6 UDP and TCP unicast traffic (no multicast or broadcast) using 6plane format NDP-emulated IPv6 addresses. In addition an ad-hoc network ID encodes an IP port range. UDP packets and TCP SYN (connection open) packets are only allowed to desintation ports within the encoded range.

For example `ff00160016000000` is an ad-hoc network allowing only SSH, while `ff0000ffff000000` is an ad-hoc network allowing any UDP or TCP port.

Keep in mind that these networks are public and anyone in the entire world can join them. Care must be taken to avoid exposing vulnerable services or sharing unwanted files or other resources.

The network controller has been largely rewritten to use a simple in-filesystem JSON data store in place of SQLite, and it is now included by default in all Windows, Mac, Linux, and BSD builds. This means any desktop or server node running ZeroTier One can now be a controller with no recompilation needed.

If you have data in an old SQLite3 controller we've included a NodeJS script in `controller/migrate-sqlite` to migrate data to the new format. If you don't migrate, members will start getting `NOT_FOUND` when they attempt to query for updates.

 * **The Windows HyperV 100% CPU bug is FINALLY DEAD**: This long-running problem turns out to have been an issue with Windows itself, but one we were triggering by placing invalid data into the Windows registry. Microsoft is aware of the issue but we've also fixed the triggering problem on our side. ZeroTier should now co-exist quite well with HyperV and should now be able to be bridged with a HyperV virtual switch.
 * **Segmenation faults on musl-libc based Linux systems**: Alpine Linux and some embedded Linux systems that use musl libc (a minimal libc) experienced segmentation faults. These were due to a smaller default stack size. A work-around that sets the stack size for new threads has been added.
 * **Windows firewall blocks local JSON API**: On some Windows systems the firewall likes to block 127.0.0.1:9993 for mysterious reasons. This is now fixed in the installer via the addition of another firewall exemption rule.
 * **UI crash on embedded Windows due to missing fonts**: The MSI installer now ships fonts and will install them if they are not present, so this should be fixed.

 * **Improved dead path detection**: ZeroTier is now more aggressive about expiring paths that do not seem to be active. If a path seems marginal it is re-confirmed before re-use.
 * **Minor performance improvements**: We've reduced unnecessary memcpy's and made a few other performance improvements in the core.
 * **Linux static binaries**: For our official packages (the ones in the download.zerotier.com apt and yum repositories) we now build Linux binaries with static linking. Hopefully this will stop all the bug reports relating to library inconsistencies, as well as allowing our deb packages to run on a wider variety of Debian-based distributions. (There are far too many of these to support officially!) The overhead for this is very small, especially since we built our static versions against musl-libc. Distribution maintainers are of course free to build dynamically linked versions for inclusion into distributions; this only affects our official binaries.
2017-03-14 22:07:26 -07:00
002f9bb105 . 2017-03-14 22:05:39 -07:00
e86b1146a6 Windows version bump. 2017-03-14 21:35:41 -07:00
d44fb3a2f6 bump bump bump that version 2017-03-14 21:23:47 -07:00
1ef3069a7e 1.2.0 release notes and a few final tweaks and cleanup. 2017-03-14 21:21:12 -07:00
f99b62c48d fix stupid thing. 2017-03-14 15:38:24 -07:00
0fd45a640b Allow multiple architectures in software update dist .json file arch fields. 2017-03-14 15:19:16 -07:00
0b0d03dbe2 Merge branch 'dev' of http://10.187.63.16/zerotier/ZeroTierOne into dev 2017-03-14 14:40:27 -07:00
533baf921f Software update cleanup, and a fix for updates on Windows. 2017-03-14 14:40:17 -07:00
8e9767f3c6 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-03-14 13:17:16 -07:00
27d4bedd73 Wait a minute (literally) before doing software update check on startup. 2017-03-14 13:17:10 -07:00
c1c26ec73a Version 1.2.0 bump 2017-03-13 15:41:42 -07:00
8f592ff6e8 Controller performance tweaks. 2017-03-13 13:58:29 -07:00
37629aaf87 Use cache on requests to decrease DB load. 2017-03-13 12:22:06 -07:00
d09d193715 release notes, and delete MANUAL from this repo for now since it isn't quite done and will take shape on the web site 2017-03-13 09:37:24 -07:00
010d0a7d56 Docs and a bit of cleanup. In particular ALL makes no sense for revocations because they have IDs. In that case you would just revoke the COM. 2017-03-13 06:53:23 -07:00
902807ea50 Software update check every 10min. 2017-03-10 22:03:07 -08:00
d0224b3623 Software update fix. 2017-03-10 22:02:08 -08:00
0f3148bda2 Roots need to respond to lots of WHOISes 2017-03-10 20:08:07 -08:00
e3b1fc2ac0 Tweak WHOIS path for federation. 2017-03-10 19:52:08 -08:00
6194d2af3d Return 200 from JSON API when moon is POSTed. 2017-03-10 19:37:03 -08:00
db87d95c1d getUpstreamPeer issue with interim federated roots 2017-03-10 19:31:51 -08:00
47166c9614 Sigh. Another thinko. 2017-03-10 17:54:14 -08:00
ecacdf27a9 Build fix (typo) 2017-03-10 17:45:05 -08:00
aad6f79efa Also must mask off counter bits in IV in cryptField. 2017-03-10 17:44:25 -08:00
0c00b83702 cryptField() used to obscure extended fields in HELLO cannot use mangleKey() 2017-03-10 17:34:41 -08:00
7320e26730 Merge branch 'edge' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2017-03-10 11:34:00 -08:00
1520534660 fix some rediculousness in NDK-14
Apparently having -fPIC on the command line multiple times turns it back off
2017-03-09 17:48:40 -08:00
6d6719da27 Clarify key semantics. 2017-03-08 17:03:32 -08:00
20085cd15b No need to put time in .moon filename. 2017-03-08 16:51:12 -08:00
9b001823f6 Add ifdef for synology around synology-only code in Linux Ethernet tap. 2017-03-08 16:12:54 -08:00
ed4f84cc57 Fix exception thrown in NetworkMonitor thread that can cause the UI to stop polling service for updates 2017-03-08 14:54:58 -08:00
c8e66a2b45 Don't crash when attempting to join a network while the zerotier service isn't running 2017-03-08 14:50:37 -08:00
6eb2e3ffa9 forgot to add prereq for adduser getent on fedora 2017-03-08 13:13:12 -08:00
748ad8a978 create zerotier-one user via rpm 2017-03-08 12:26:16 -08:00
d2f897f8de add dependency on adduser 2017-03-08 12:26:16 -08:00
4b511d80a1 Windows directory cleanup and a Windows build fix. 2017-03-08 10:38:43 -08:00
a74e9e1dd3 remove debug line 2017-03-08 10:27:13 -08:00
9c1a9f984b Clean iddb.d periodically. 2017-03-08 10:18:12 -08:00
04c7adea07 cleanup 2017-03-08 08:58:07 -08:00
5249ce8fb4 Small amount of cleanup. 2017-03-08 08:45:04 -08:00
ebd865dbda Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-03-07 18:25:44 -08:00
d377ef01af Windows build process updates, and repackage everything using new EV certificate and SHA256. 2017-03-07 18:25:06 -08:00
393aa3c527 fix debuild comand 2017-03-07 14:20:06 -08:00
d7b6de57c5 update debian build files 2017-03-07 14:20:06 -08:00
05d4b0cd94 Update RPM spec file 2017-03-07 14:20:06 -08:00
5dbafc2eeb Add config to status in JSON API. 2017-03-07 14:17:51 -08:00
a97918f812 Windows build fixes. 2017-03-07 13:57:31 -08:00
22f86df606 Merge ControlPlane into OneService to make variable access simpler. 2017-03-07 13:53:11 -08:00
712e8e828b use .exe naming convention 2017-03-07 11:58:17 -08:00
7d3846bc49 Bump version to 1.1.19 in prep for release and software update testing. 2017-03-07 10:26:36 -08:00
9980526aaf Consistent field names. 2017-03-07 10:12:05 -08:00
1d2cb867b2 Close all open FDs before exec in Unix software update code. 2017-03-07 09:26:27 -08:00
3859533e73 Minor software updater cleanup. 2017-03-07 09:18:00 -08:00
7ea7e1898a Fix a bug that could cause duplicate IP address assignment on networks if many new members join the controller at once. 2017-03-06 16:21:49 -08:00
5e6a4e5f5e Send revocations automatically on deauth for instant kill, also fix some issues with the RP. 2017-03-06 15:12:28 -08:00
66dfc33de9 Fix circuit test post in controller. 2017-03-06 11:23:46 -08:00
d56f740dc6 Now with less bugs. 2017-03-03 13:49:21 -08:00
a109d341ef Send timestamp with new circuit test response. 2017-03-02 14:35:38 -08:00
87b53d67c5 Fix selftest build. 2017-03-02 10:02:29 -08:00
a577b8d381 Update how controller handles circuit tests -- save results to filesystem. 2017-03-01 16:33:34 -08:00
136fddc7f1 Fix FILTER_TRACE breakage. 2017-03-01 15:14:57 -08:00
ce0c87f8ff Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-03-01 15:12:26 -08:00
d79585d44d Circuit tests now report link quality. Also fixed a little thing in revocation propagation. 2017-03-01 15:12:17 -08:00
592b628523 comment broken TRACE message 2017-03-01 14:50:28 -08:00
39f886ad88 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-03-01 14:37:01 -08:00
1d39be61b2 ZeroTier now has link quality measurement. We are not using this yet but decided to put it in to prep for future QoS support and SD-WAN stuff. 2017-03-01 14:36:52 -08:00
2bf9145ae6 Outgoing side of packet counter for link quality reporting. Also some cleanup and a cluster mode build fix. 2017-03-01 10:22:57 -08:00
127bcb02ff Save space in expecting-reply-to tracking. 2017-03-01 09:41:37 -08:00
4430fc47c6 Added HTTP authorization block for synology builds 2017-02-28 16:30:20 -08:00
2b10a982e9 Match on tag sender equals or tag recipient equals. 2017-02-28 09:22:10 -08:00
31bece7fa0 Add ipauth handling of IPv6 NDP neighbor solicitations and advertisements. IPv6 works well now with ipauth. 2017-02-28 07:43:40 -08:00
4436824faf ipauth characteristic now works with ARP 2017-02-27 17:51:58 -08:00
dd92f1d03d . 2017-02-23 17:56:36 -08:00
b6f87565a9 Add wake on LAN (wol) to rules language ethertype shorthand. 2017-02-23 16:03:43 -08:00
0b909997b8 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-02-23 14:27:48 -08:00
9d7ff26f25 Helps if you actually add the ipauth mask to the characteristics mask. 2017-02-23 14:27:31 -08:00
06c866ceb4 Android JNI fix 2017-02-23 12:47:07 -08:00
fe19ad328c Windows build fix. 2017-02-23 12:40:21 -08:00
010dbc8b2b Merge. 2017-02-23 12:35:20 -08:00
72653e54f9 Finish wiring up ipauth and macauth to Network filter. 2017-02-23 12:34:17 -08:00
93ec86a26e iOS fixes 2017-02-23 12:26:11 -08:00
10185e92fa Certificate of ownership -- used to secure against IP address spoofing, especially for IPv4 and regular IPv6. 2017-02-23 11:47:36 -08:00
33b94e8478 fixed double firing of the leave network API call causing an error popup on windows 2017-02-22 16:54:57 -08:00
2ee53b0e75 Fix bug in default capability flag in rule parser. 2017-02-22 15:52:55 -08:00
fb00f0f94c Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-02-22 15:34:49 -08:00
b679ebde3b Ad-hoc networks, a cool and easy to implement little feature that allows controllerless networks. These only allow IPv6 6plane, no multicast, and the network ID encodes the allowed port range. 2017-02-22 15:32:55 -08:00
f3ca08b0f1 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2017-02-21 17:55:07 -08:00
946e413997 properly fill out ifcfg files. also removed route re-add code for synology 2017-02-21 17:55:00 -08:00
b475bf4a21 . 2017-02-21 15:28:01 -08:00
54fa73844c Fix crash. 2017-02-21 13:48:29 -08:00
32f5a0ab18 Add default tag values and default set capabilities for new members. 2017-02-21 13:27:20 -08:00
e4135ffb35 Decreased ZT_BINDER_REFRESH_PERIOD for Synology build 2017-02-16 16:56:23 -08:00
b5b335a6f8 Route re-add patch for linux build on Synology devices 2017-02-16 16:41:26 -08:00
57ef31d51c Route re-add patch for linux build on Synology devices 2017-02-16 16:06:04 -08:00
61b413b57f Found it in a few other places. 2017-02-16 09:54:52 -08:00
d2c0203dc9 Fix stupid inverted sense bug. 2017-02-16 09:53:39 -08:00
afba19e01c When deciding whether to send PUSH_DIRECT_PATHS we should check global trust flag, not the one passed into receive(). 2017-02-16 09:44:04 -08:00
b989c03416 Fix build on Linux if PR_CAP_AMBIENT is not defined, which is the case for some libc-dev installs. 2017-02-16 00:57:33 +00:00
3361b4030b Integrate and test linux privilege drop code (from contributor PR). It works now if a "zerotier-one" user is present on a Linux system. Does everything automagically. 2017-02-15 16:25:49 -08:00
bdadd50251 . 2017-02-14 16:49:10 -08:00
d01f31197a Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-02-14 16:43:29 -08:00
8b82f1c609 Add rules compiler script. 2017-02-14 16:43:22 -08:00
de7e8a1ca4 fix About view on Mac so that it opens links in the system web browser 2017-02-14 16:39:15 -08:00
aa2ee3f7be Right and left click both will now open the context menu on Windows 2017-02-14 16:31:11 -08:00
af4e79735c Fix "orbit" semantics. Federation works. 2017-02-13 16:38:21 -08:00
969e09210d Fix loading of existing moons. 2017-02-13 16:14:48 -08:00
cd7b571da0 Add a local.conf option to set the port. 2017-02-13 15:55:38 -08:00
0052877d2f Add CLI shortcuts for adding federated roots. 2017-02-13 15:41:53 -08:00
23bb44f2d6 Fix small typo. 2017-02-13 14:28:17 -08:00
16f11e91d1 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-02-13 14:27:14 -08:00
4b11566505 Integrate moon concept into http config bus, and clean up that code quite a bit. 2017-02-13 14:27:08 -08:00
9ae49b5b85 Update JNI with new root terminology 2017-02-13 10:51:36 -08:00
c95bae2d73 Small fixes to moon-management code in CLI. 2017-02-13 10:05:00 -08:00
e4b6611201 Only accept world updates from upstreams. 2017-02-13 09:46:34 -08:00
e6840a1863 Can't erase from vector using const_iterator on some C++ compilers.' 2017-02-13 09:26:05 -08:00
78d5f1a803 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-02-13 09:03:54 -08:00
42f28bce52 Cleanup and make moons (federated roots) a little easier to deal with. 2017-02-13 09:03:48 -08:00
9a6c3e05ad Fix for deleted networks not being removed from the network details list on macOS 2017-02-10 16:10:23 -08:00
cdc289fa9c Tags work. 2017-02-07 14:06:40 -08:00
672f17c6e9 Add a mask and value range to the IP tos rule field. This allows TOS to be matched more usefully. This will break anyone using tos in the beta, but nobody seems to be and its pre-release so now is the time. 2017-02-07 09:33:39 -08:00
723a9a6e9a Small additional efficiency improvement. 2017-02-06 17:20:22 -08:00
59ba7c8bf5 Improve efficiency of pushCredentials() method since it gets called a lot. 2017-02-06 17:10:20 -08:00
78d548458b Capabilities basically work but need to refactor a bit for performance reasons. 2017-02-06 16:38:48 -08:00
ac3e883c05 One more place to add "break". 2017-02-06 14:07:30 -08:00
9ddc2a4331 Add a break action to rules engine to make capabilities easier to use. 2017-02-06 14:00:49 -08:00
435e4c4695 Fix HELLO parse bug. 2017-02-06 12:06:10 -08:00
21f4a97c35 CSPRNG performance improvement, self test build fix. 2017-02-06 11:49:41 -08:00
e0d63c50db One more tweak after thinking about related keys and key stream reuse. Just a precaution. 2017-02-06 07:45:57 -08:00
803f74634a Tweak how we do crypto of the masked portions of HELLO just to be more "boring" in the DJB sense. 2017-02-06 07:39:38 -08:00
f85a630a64 Docs and a small build fix in debug mode. 2017-02-06 07:17:45 -08:00
43182f8f57 Docs, code cleanup, and protect the extra new fields of HELLO with encryption as a precaution. 2017-02-05 16:19:03 -08:00
594cb1fad8 Small fix for duplicates in world definitions. 2017-02-04 19:29:39 -08:00
5eab6c2e5d More docs. 2017-02-04 19:19:30 -08:00
3587aa1ea7 Add and send certificates of representation to tell people what our valid upstreams are. These are not used yet but will be needed for future privacy modes, etc. Also some cleanup. 2017-02-04 13:17:00 -08:00
beb642faa5 Stub out CAN_REACH. 2017-02-04 10:21:31 -08:00
31db768e4d A bit of code cleanup. 2017-02-04 00:23:31 -08:00
d9e4ba1280 Eliminate a little copypasta. 2017-02-04 00:04:44 -08:00
dcb1233b0d Slight refactor to RENEDEZVOUS sending code for federation. 2017-02-03 23:54:02 -08:00
8a2ff0b31e Actual documentation. 2017-02-03 19:47:00 -08:00
be2881ae8d . 2017-02-02 16:53:27 -08:00
88cba48f45 Eliminate warning. 2017-02-01 15:24:41 -08:00
9284e4edfe agree() must be called on our identity, the one with the secret 2017-02-01 15:22:14 -08:00
62a705af1c Eliminate another check in cluster frontplane mode. 2017-02-01 14:35:07 -08:00
29ec7bf3a2 Add more specific check in source==self case instead of dumping it. 2017-02-01 14:18:56 -08:00
fc3f4fb988 Yeah that could never have worked (normal packets in cluster mode). 2017-02-01 14:05:13 -08:00
60ff280dcb Another tweak to cluster I/O rules. 2017-02-01 13:52:53 -08:00
b378f5dcd7 Take 3 2017-02-01 13:20:51 -08:00
e778d45128 Still want to send WANT_PEER under two failure modes. 2017-02-01 12:51:52 -08:00
5e11cf6378 Can't armor() a packet until all flags are set. 2017-02-01 12:32:06 -08:00
5dbebc513a Minor send path refactor to make packet I/O work on clusters if they are members of networks. Also fix a crash if compiled in cluster mode but no cluster is enabled. 2017-02-01 12:00:25 -08:00
6d5a3cd2e2 Remove debug code. Cluster network config sharing seems to work. 2017-01-30 16:23:38 -08:00
f9ad80aa13 . 2017-01-30 16:15:47 -08:00
ed31cb76d6 Fix to cluster network configs. 2017-01-30 16:04:05 -08:00
eebd271bb1 Implement cross cluster sharing of network configs to make clusters able to actually join networks. 2017-01-30 15:40:22 -08:00
ff74ec2482 Cluster build fix. 2017-01-30 21:39:44 +00:00
49e31ca647 InetAddress.hpp needs to be included in OneService.hpp 2017-01-30 09:16:16 -08:00
471108f2e4 Slightly increase thread stack size for safety (primary Alpine related) possibly GitHub #443 2017-01-30 08:01:36 -08:00
2ceb162df0 Merge pull request #442 from zielmicha/allow-managed
allow user to specify arbitrary allowed IP networks in allowManaged
2017-01-30 06:54:49 -08:00
915206405c docs 2017-01-27 17:41:07 -08:00
5fa1d9796c zerotier-idtool commands to init and generate moons 2017-01-27 17:34:39 -08:00
77a1dd4737 Dead code removal, fix minor issue in upstream endpoint check. 2017-01-27 16:25:53 -08:00
9e7c778cc8 Fix deadlock. 2017-01-27 16:16:06 -08:00
1d775af34a Fix moon persistence. 2017-01-27 15:35:21 -08:00
9f7919f71f Add comments to join ("orbit") moons. 2017-01-27 15:27:26 -08:00
0b3b994241 Relay policy can now be computed. 2017-01-27 14:05:09 -08:00
bc218f9414 little fix 2017-01-27 13:52:29 -08:00
f102fd7f92 Extend in-band world updates to handle moons too. 2017-01-27 13:50:56 -08:00
64774d0d4f Replace piecemeal designation of upstreams with the concept of moons, which is simpler and easier to use and inherits all the cool live update stuff of worlds (now called planets) and global roots. 2017-01-27 13:27:52 -08:00
b88f573733 tap-windows-ndis5 is definitely dead 2017-01-27 07:29:42 -08:00
b211e61671 debian rules 2017-01-26 16:12:50 -08:00
871cacf040 Remove junk. 2017-01-26 15:02:52 -08:00
7c3984413e Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-01-26 15:02:20 -08:00
967ce78a57 Add static build option so we can build a static Linux binary for ancient distros (wheezy, etc.) 2017-01-26 15:02:03 -08:00
923d3f1fe8 remove references to deleted source files in Android NDK build files 2017-01-26 15:01:45 -08:00
e11f42a089 remove reference to BackgroundResolver.cpp/.hpp on Windows 2017-01-26 14:29:39 -08:00
9b8d9b7042 fix copy stage for paths with spaces 2017-01-26 14:27:39 -08:00
902e03bccc build fix 2017-01-26 14:23:22 -08:00
ec0e8a9a43 Rip out resolver and use anycast address instead. In the long term existing TCP proxy dies anyway. Fixes static build problem for old Linux versions. 2017-01-26 13:59:20 -08:00
9e488ce322 delete binary 2017-01-26 21:55:35 +00:00
c111bf3080 Fix tcp-proxy build. 2017-01-26 21:54:55 +00:00
8f2a42d1ad allow user to specify arbitrary allowed IP networks in allowManaged 2017-01-23 12:16:40 +01:00
9a475eeff9 Windows build fix, warning removal. 2017-01-20 12:00:18 -08:00
91a37ec639 docs 2017-01-20 11:02:54 -08:00
db1e2aae41 docs 2017-01-20 11:00:18 -08:00
4a7c76a11b docs, cleanup, temporarily put cli in attic since it is not done. 2017-01-20 10:51:55 -08:00
f1ed57c62d Update nlohmann/json (header only lib). 2017-01-20 10:09:47 -08:00
3b0969e3a5 Fix build on G++ 4.9 on FreeBSD-11. 2017-01-20 10:07:25 -08:00
35174a8766 Basic BSD gmake install/uninstall. 2017-01-19 15:15:31 -08:00
d79f792e6f OpenBSD fixes, workaround for apparent libstdc++ bug. 2017-01-19 15:05:26 -08:00
7b231b38b0 Now builds on OpenBSD, but segfaults. So not yet but close. GitHub issue #439 2017-01-19 10:39:42 -08:00
13263b8401 docs 2017-01-19 16:23:25 -08:00
a604294b1b local.conf docs 2017-01-19 16:10:36 -08:00
89d74cd293 Add a portMappingEnabled flag to local.conf to allow uPnP/NAT-PMP to be disabled. 2017-01-19 15:57:50 -08:00
56e5b34934 Bump bundled miniupnpc to 20161216 2017-01-19 15:52:39 -08:00
f43365e4ba Take LZ4 out of Debian depends. 2017-01-19 15:44:16 -08:00
4d071081bb docs 2017-01-19 15:22:43 -08:00
b67b370dba docs 2017-01-19 15:20:55 -08:00
0995c1dcaa Encapsulate LZ4 in Packet.cpp to eliminate dependency. 2017-01-19 15:16:04 -08:00
7612bf3302 Fix LZ4 warning. 2017-01-19 14:54:39 -08:00
ba158d8dc6 Include LZ4 README and LICENSE. 2017-01-19 14:48:40 -08:00
a90f2249e8 Upgrade LZ4. 2017-01-19 14:48:01 -08:00
d8f36db5dd Fix FreeBSD build in dev. 2017-01-19 12:11:49 -08:00
fd460d93c4 docs 2017-01-19 10:53:44 -08:00
989cbb4d8d Merge pull request #434 from zielmicha/fix-ip
Binder.hpp: gather all IPv4 interface addresses
2017-01-19 10:47:47 -08:00
e9007b1f56 NodeJS migration script for old Sqlite controller.db to new controller data format. 2017-01-19 10:44:26 -08:00
0fb3d1d582 Add a build version for software update use so we can do very minor updates within a version. 2017-01-18 09:16:23 -08:00
81910c1d92 Replace update signing key with real key generated on air-gapped system. 2017-01-13 16:07:57 -08:00
d150f9b2bd Windows update build in Advanced Installer, and warning removal. 2017-01-13 15:19:59 -08:00
1346e31a8e Windows build fixes, Software update fix, warning removal. 2017-01-13 14:22:36 -08:00
54f25b14ee Software updater log for distributors (does not affect real users much). 2017-01-13 14:03:06 -08:00
0e4d3244b2 "make official" for Mac now builds update image as well as pkg (update image is just PKG + SFX script) 2017-01-13 13:09:42 -08:00
87e3b5f076 Mac updater SFX code. 2017-01-13 12:42:49 -08:00
f8e18f2098 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-01-13 12:13:20 -08:00
f81c67c0f0 Make sure to respond to GET_LATEST with the actual latest. 2017-01-13 12:13:14 -08:00
4f4dd3446c Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2017-01-13 11:36:53 -08:00
f149dd9401 fix Android NDK build 2017-01-13 11:36:48 -08:00
3a730c4a5c Remove debug printfs in software updater. It works! At least for unix. Now to test Windows. 2017-01-13 11:24:00 -08:00
b03247ec3c SoftwareUpdate::apply() 2017-01-13 10:46:16 -08:00
8ebb49e972 Cache downloaded updates to disk. 2017-01-12 15:21:14 -08:00
84bfec8329 . 2017-01-12 14:35:52 -08:00
e1727d6297 Fix to software update repeat downloads. 2017-01-12 14:34:52 -08:00
e7bab66d29 Auto-apply updates if enabled. 2017-01-12 13:54:08 -08:00
ab25c96821 Build fixes. 2017-01-12 13:51:06 -08:00
c6b0b07605 More software update work, and settings in local.conf. 2017-01-12 13:18:11 -08:00
b5b583c397 . 2017-01-11 18:10:42 -08:00
56d969c709 . 2017-01-11 17:59:51 -08:00
3fedf16f35 . 2017-01-11 17:57:12 -08:00
5da56776d6 . 2017-01-11 17:54:43 -08:00
d58870a92d . 2017-01-11 17:53:19 -08:00
15ed7423ac . 2017-01-11 17:50:02 -08:00
d7e7ad4f88 Can't send a user message to self. 2017-01-11 17:46:52 -08:00
823a1963f6 init fix. 2017-01-11 17:45:09 -08:00
6513b21426 debug code. 2017-01-11 17:42:57 -08:00
d4321cdd41 Wire up user message handling in OneService event handler. 2017-01-11 17:20:43 -08:00
d301540d92 Software update stuff for test. 2017-01-11 16:58:37 -08:00
af5a3376f3 Should fix Windows build. 2017-01-11 16:56:16 -08:00
4aa52ffc77 Software update stuff. 2017-01-11 16:47:42 -08:00
47b62ece18 Software update integration. 2017-01-11 16:34:33 -08:00
2aab26a08e Software update work. 2017-01-11 15:22:16 -08:00
565842b5ec Software updater work. 2017-01-11 14:37:31 -08:00
a064e19b8a Refactor some JSON stuff for performance, and fix a build error. 2017-01-10 13:51:10 -08:00
6fb49f68fc Comment out and disable old auto-update code. 2017-01-10 12:20:29 -08:00
ef7faa7291 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2017-01-09 15:55:13 -08:00
d5528e4e9a Wire up VERB_USER_MESSAGE in core. 2017-01-09 15:55:07 -08:00
f730f65aaf bring window to front if already open 2017-01-09 14:23:37 -08:00
dbd577c6b0 Merge branch 'winroute' into dev 2017-01-09 12:41:45 -08:00
7ebb207005 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2017-01-05 13:56:15 -08:00
e41d71cd19 add implementations of compareTo() and equals() for VirtualNetworkRoute().
Android app was relying on these, but since they didn't exist, they didn't function properly
2017-01-05 13:56:07 -08:00
0f6c53589e remove commented out function declaration 2017-01-05 11:46:33 -08:00
e2b1a7157e Potential fix for routing issue on Windows
Move setting _initialized = true until after WindowsEthernetTap::threadMain() has actually created and brought up the adapter.  Also in OneService::nodeVirtualNetworkConfigFunction(), wait up to 5 seconds for WindowsEthernatTap::isInitialized() to return true before attempting to configure the interface and managed routes.  Without this, the adapter doesnt actually exist yet when trying to add routes
2017-01-05 11:43:26 -08:00
aaf69d1aff properly quote string arguments to copyutil in case there are spaces in the path 2017-01-03 14:03:50 -08:00
203b7e17de Binder.hpp: gather all IPv4 interface addresses 2017-01-01 23:57:15 +01:00
18c9dc8a06 fix RTF_MULTICAST and g++ -w 2016-12-27 13:07:05 +01:00
ba07d1f91d cleanup 2016-12-27 11:57:05 +01:00
9a2310395d mimic BSDEthernetTap but with creating/destroying char tap device 2016-12-27 11:42:43 +01:00
218ace51a7 use /dev/tap{0..3}; it is fully working now 2016-12-26 02:52:07 +01:00
f09eedbd7a make it compilable 2016-12-25 22:54:27 +01:00
546e8a3b44 initial netbsd support in makefile/flags 2016-12-25 20:59:12 +01:00
9a2b766aad Windows installer updates. 2016-12-23 15:57:21 -08:00
24017659df Update installer, etc., for Mac. 2016-12-23 15:25:04 -08:00
c175a5fcd7 Change org names, add makefile rule for Mac to build new UI. 2016-12-23 15:11:44 -08:00
5ec8465374 Remove dead Mac stuff. 2016-12-23 14:38:36 -08:00
6b5d6efe6c Retire old build farm (something new is coming) and update makefile for linux to not auto-build doc. 2016-12-23 14:33:04 -08:00
5bff70194b Ship pre-build man pages. We stopped doing this for a bit due to nit-picky Debian craziness but since we are not targeting core Debian at the moment bring it back. 2016-12-23 14:30:27 -08:00
d94d04d7d5 Bump to 1.1.17 for pre-1.2.0 beta. 2016-12-23 13:52:41 -08:00
bf2b9e3692 Auto-authorize new members on public networks properly. 2016-12-22 18:52:34 -08:00
c8554504f3 . 2016-12-22 18:37:46 -08:00
0d066e3b08 Fix JSON parse bug in REDIRECT target. 2016-12-22 18:26:43 -08:00
6b12d86209 Add a workaround for an edge case in TEE/REDIRECT if we are the inbound destination and teeing is only being done on the outbound side. 2016-12-22 18:06:35 -08:00
fe530548bb Fix MATCH_RANDOM in controller. 2016-12-22 16:57:45 -08:00
2eaff6d484 Fix to characteristcs in rules engine. 2016-12-22 16:36:38 -08:00
a54c2b438c Basic support for streaming of changes via stdout from controller. 2016-12-15 15:08:47 -08:00
890f6f0d35 Make allow management from a local.conf parameters. 2016-12-12 16:25:41 -08:00
bad4b72f82 Remove debug printf. 2016-12-12 14:44:21 -08:00
4702c5b4ee Add local.conf option to blacklist interfaces by name. 2016-12-12 14:43:09 -08:00
4459d5ad54 Remove debug printf 2016-12-12 12:58:39 -08:00
39fb4b1b42 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-12-12 12:55:14 -08:00
3864a2e111 Use an alternative method for enumerating interface addresses on Linux to avoid poor performance of getifaddrs() when there are many network namespaces. 2016-12-12 12:53:51 -08:00
697520f1f5 Dont write IPv6 addresses to IPv4 sections of registry TCPIP settings.
Also, dont add the prefix length to the IP addresses in there.

Appears to fix Github Issue #357.  Still waiting on some info from Microsoft for confirmation of a few things.
2016-12-09 11:36:01 -08:00
244f37179c Minor security: lock roots to only be reachable via World IPs. 2016-12-05 16:09:42 -08:00
4b3a47849d Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2016-11-30 15:21:33 -08:00
56faf774ff Store MTU as String instead of DWORD
WindowsEthernetTap was storing the MTU for the ZeroTier Adapter as a
DWORD.  When changing the value from the network adapter settings UI, it
was stored as a string.  Updated the call when creating the adapter to
store it as a string as windows expects.
2016-11-30 15:18:38 -08:00
fa2bb91ae5 Kill some old debug code. 2016-11-30 10:48:09 -08:00
32478845b2 Merge branch 'dev' into systemtray 2016-11-30 10:21:19 -08:00
44f0e3097e docs 2016-11-29 10:56:16 -08:00
289917e2b3 use msbuild instead of devenv 2016-11-28 15:30:52 -08:00
14fcb5867f rethrow windows build error 2016-11-28 14:57:37 -08:00
cf59362c4a add windows build to Jenkinsfile 2016-11-28 13:06:28 -08:00
8472918559 Change 'localhost' to 127.0.0.1
@makerspherehq reported it not working as 'localhost' via Twitter
2016-11-28 09:40:34 -08:00
ae8f51d608 . 2016-11-23 16:27:15 -08:00
4a7ee5472d Small fixes. 2016-11-23 16:23:44 -08:00
8718b33a66 docs 2016-11-23 15:57:06 -08:00
27f1155f1b docs and API stuff 2016-11-23 15:53:53 -08:00
84732fcb12 Wire through external path lookup. Static paths should now work. 2016-11-22 14:23:13 -08:00
c6c578ce1d Fixes to allow usage of ZeroTierOne.h with a C compiler 2016-11-22 13:18:52 -08:00
3c5e28a27d use new ZT_Node_Callbacks struct in JNI 2016-11-22 13:03:36 -08:00
a39f6e9b4c clear cached window positions when display settings change 2016-11-22 12:02:49 -08:00
adb7a88836 cache window positions so we only have to move after open once. 2016-11-22 11:53:06 -08:00
9892f7bb47 Upgrade nlohmann::json 2016-11-22 11:06:58 -08:00
42ba70e79e Replace long callback arg list with struct, and implement path whitelisting, path blacklisting, and local.conf support for roles. 2016-11-22 10:54:58 -08:00
cbaef66e82 Fix a deadlock in federation/upstream code. 2016-11-21 16:04:01 -08:00
97d915b06c Expose relay policy in node settings. 2016-11-21 15:35:18 -08:00
3a3a23db34 hacky way to set window position but it works 2016-11-21 15:31:32 -08:00
d159e5ca44 Allow relay policy setting in local.conf 2016-11-21 15:21:24 -08:00
d3bd10952e hyperlinks in the about page are clickable 2016-11-21 14:32:25 -08:00
40078a99de Make parse failure of local.conf non-fatal in case people have ancient files sitting around. 2016-11-21 14:14:43 -08:00
0142c0d339 fill out the about view 2016-11-21 13:25:10 -08:00
2e5de46584 local.conf and support for virtual role definition 2016-11-21 13:20:56 -08:00
1be55d6182 Merge branch 'dev' into systemtray 2016-11-21 12:59:43 -08:00
8ebcd44405 dont close the network list. just hide it so its reusable 2016-11-21 12:54:27 -08:00
ccdd4ffda7 Move split() to OSUtils since it is not used in core. 2016-11-18 15:49:28 -08:00
a6ed711492 wired up the startup registry key to the registry 2016-11-18 15:44:41 -08:00
3fb224cb22 add a checkbox for startup option in preferences 2016-11-18 15:23:07 -08:00
5ca5af619d Merge branch 'systemtray' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into systemtray 2016-11-18 14:58:01 -08:00
f61c5836b2 copy node ID by clicking on node ID menu item 2016-11-18 14:57:14 -08:00
535b33b46e copy node ID by clicking on node ID menu item 2016-11-18 14:52:04 -08:00
a8847de910 proper shutdown 2016-11-18 14:23:22 -08:00
2231e878d5 Merge branch 'dev' into systemtray 2016-11-18 14:00:25 -08:00
299a7cab20 fixed an issue where sometimes network data wouldnt be updated 2016-11-18 13:59:31 -08:00
e48d6880c9 Wired up connected checkbox and delete button. just something not working with refresh. 2016-11-18 13:52:48 -08:00
673c0c811e Wire through upstream stuff and add setRole(). 2016-11-18 13:48:49 -08:00
6e1da35c12 Remove debug. 2016-11-18 13:15:58 -08:00
25f9c294dc Small bug fix and warning removal. 2016-11-18 13:01:45 -08:00
2ea9f516e1 Rate gate expensive validation of new identities in HELLO. 2016-11-18 12:59:04 -08:00
dbe1461886 wire up the quit button 2016-11-18 12:17:57 -08:00
7bea709747 wire up the rest of the views to the menu. views not implemented yet tho. 2016-11-18 12:03:21 -08:00
6536474b94 moved stuff around again. WPF didnt like things once they were moved. Also wired up Join dialog. 2016-11-18 11:33:46 -08:00
ab4021dd0e Do packet MAC check before locallyValidate(), and add timing measurement in selftest. 2016-11-18 11:09:19 -08:00
1fcbb1fbed Proactively auto-load designated upstreams. 2016-11-18 10:39:26 -08:00
39333c9e8e Modify unite() to deal with a second layer of upstreams. 2016-11-17 16:59:04 -08:00
1615ef1114 Rename getBestRoot() etc. 2016-11-17 16:31:58 -08:00
bf8d71e82c Add notion of upstream that is separate from root in Topology, etc. 2016-11-17 16:20:41 -08:00
a4c2740852 added skeletons for join and about windows. moving things around a little bit too 2016-11-17 14:25:55 -08:00
afa1b8cb2d add timeouts to requests to the json api 2016-11-17 14:23:04 -08:00
5447c01e1f can finally join/leave networks by clicking on them in the context menu 2016-11-17 14:13:05 -08:00
b4bacd50a1 Merge branch 'dev' into systemtray 2016-11-16 16:23:56 -08:00
3c248ec61a handle removing of networks we are no longer connected to from the UI 2016-11-16 15:50:56 -08:00
78a8ceda0e IP addresses now selectable in Windows UI 2016-11-16 15:11:28 -08:00
14bf326de2 make device ID selectable 2016-11-16 14:50:25 -08:00
dc549b7f3c add JSONDB.cpp 2016-11-16 14:50:03 -08:00
456c7ca661 only changed items in the full network list are updated now 2016-11-15 16:55:24 -08:00
bab75186f5 make some fields in the network list selectable 2016-11-15 15:51:25 -08:00
07b2a3818c Fix TTL scaling in cert. 2016-11-15 14:26:05 -08:00
15c6e2ec70 Fix member deauthorization time threshold bug. 2016-11-15 14:06:25 -08:00
5bd8968eb8 Add rules engine debugging switch to make-linux.mk 2016-11-15 11:50:53 -08:00
4ad942522b Kill unnecessary check in another spot. 2016-11-14 15:57:46 -08:00
b6c99ba3ef Add (currently undocumented) option to allow management from certain networks. 2016-11-14 15:47:06 -08:00
ee5bd57d40 We don't bind to non-local IP for TCP yet, but eliminate double check. 2016-11-14 15:29:36 -08:00
6445337a32 looks like a garbage file got committed. deleting 2016-11-14 15:02:40 -08:00
f20c7303e8 remove timer thats no longer needed 2016-11-14 14:58:57 -08:00
c4c8ea62e2 Added network monitor pub/sub class 2016-11-14 14:56:36 -08:00
71aadcbecb fix serialization issue.
Apparently the JSON parser uses this same serialization method under the hood to create objects from JSON.
2016-11-10 15:21:54 -08:00
fd71ceeab5 menu now dynamically populates the network list 2016-11-10 14:17:57 -08:00
e26bee45fb Multithreading in network controller. Threads are only started if controller is used. 2016-11-10 13:57:01 -08:00
1b10d3413a Use circuit breaker only for requests. 2016-11-10 13:08:43 -08:00
f0fcd222a1 Actually push updates when things change. 2016-11-10 12:54:43 -08:00
298e4a9f14 Also avoid sending tags and caps to old members since there is no point. 2016-11-10 12:33:09 -08:00
12d32b9311 Small fix to send pushes if not a reply. 2016-11-10 11:57:45 -08:00
226123ca08 Refactor controller to permit sending of pushes as well as just replies to config requests. 2016-11-10 11:54:47 -08:00
5ebf5077f5 Log last meta-data in controller, and ease up just a bit on keepalives. 2016-11-09 17:11:10 -08:00
e1c930f1b7 update JNI wrapper to reflect removal of lastMulticastFrame and lastUnicastFrame from ZT_Peer struct 2016-11-09 16:33:01 -08:00
c61ca1dea2 Keep connections up for netconf stuff as well as frames. 2016-11-09 16:04:08 -08:00
eea712a1ae Field in wrong place fixed. 2016-11-09 13:26:14 -08:00
1ebfca666d Memo-ize some computed stuff to control CPU utilization. 2016-11-09 12:34:20 -08:00
005b5aacaf rename 2016-11-09 10:32:18 -08:00
7cf3d2caa1 Network list window opens with click on the menu item 2016-11-08 16:31:07 -08:00
e1f9f7b6dc turn APIHandler into a singleton 2016-11-08 15:50:08 -08:00
6b0543ba27 starts up to a toolbar icon with context menu. still much more to do 2016-11-08 14:54:55 -08:00
3d948a930e Send a blanket rule to old versions. New versions will still bidirecitonally enforce on the inbound side. 2016-11-08 14:24:30 -08:00
6f3595bfd2 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-11-08 12:41:32 -08:00
4524899e4d Update LM time on members on request. 2016-11-08 12:41:27 -08:00
54206fd44d add NotifyIcon NuGet package for tray icon support 2016-11-08 11:24:12 -08:00
6d8c8f9fd1 update JSON library to latest 2016-11-08 11:23:15 -08:00
00e1b0ed10 added docs for allowManaged, allowGlobal, allowDefault 2016-11-08 11:00:48 -08:00
4f8feaa530 update JSON API docs for OneService 2016-11-08 10:23:25 -08:00
0324e6ca3d Merge pull request #402 from bobberb/patch-1
Typo fix line 77
2016-11-08 08:32:47 -08:00
d773ab2806 Merge pull request #407 from misuzu/chownfix
Chown fix
2016-11-08 08:32:31 -08:00
8e76363ccf Fix chown on /var/lib/zerotier-one 2016-11-08 16:50:32 +02:00
360c84e035 Minor fixes. 2016-11-08 00:05:18 +00:00
4868d21526 Bug fixes in controller refactor. 2016-11-07 23:49:03 +00:00
c802811ad2 Added a file copy util for Windows UI
Copies the authtoken.secret file into a private local folder for the user so that the UI doesnt have to be run with Admin privileges.
2016-11-07 14:09:01 -08:00
5f63d5039b Bug fixes, self test of JSONDB disabled by default. 2016-11-07 14:01:23 -08:00
a454a37a6e Self test JSONDB. 2016-11-07 13:27:17 -08:00
a78d7311a6 Fix network list API call. 2016-11-04 16:23:41 -07:00
08ff666e99 . 2016-11-04 16:14:58 -07:00
0d108d37f6 . 2016-11-04 16:12:44 -07:00
cae9041c2a . 2016-11-04 15:52:01 -07:00
330a07a554 cleanup 2016-11-04 15:48:23 -07:00
7729cbe313 Fix ambiguous error on some compilers. 2016-11-04 15:34:49 -07:00
3e865067be Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-11-04 15:18:35 -07:00
b03c7b2f30 Refactor controller to use split-out DB for better performance and less ugly. 2016-11-04 15:18:31 -07:00
1ab9c43135 wire up allowDefault, allowManaged, allowGlobal, allowDefault options 2016-11-04 14:50:07 -07:00
efcc24a76b increase window width so IPv6 addreses don't wrap 2016-11-04 14:49:15 -07:00
4762311977 work in progress windows UI update 2016-11-04 12:39:57 -07:00
ab2ccb094a Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-11-03 14:44:49 -07:00
3c00cd0f88 Separate out JSON store from controller code. 2016-11-03 14:17:46 -07:00
a7718bae39 link in notelemetry.obj even though Microsoft said CRT telemetry would be disabled in VS2015 Update 3. Just in case. 2016-11-03 12:25:09 -07:00
8ffae313fd add new files & remove old ones from VS project. Now builds & runs on Windows again 2016-11-03 12:10:50 -07:00
8cced06a2d upgraded vcxprojs to VS2015. got the tap driver building. 2016-11-03 10:04:50 -07:00
965399ba0c fix a few warnings 2016-10-31 15:16:42 -07:00
231cc11a62 Update path to nkd-build 2016-10-27 14:28:42 -07:00
1afa9e992c add color to success output in slack 2016-10-27 14:01:00 -07:00
be543c4039 use internal changelog library 2016-10-25 15:51:30 -07:00
7e7462b39e attempting #2 2016-10-25 15:01:59 -07:00
d2ee37a3e0 attempting to add the changelog to the starting build slack message 2016-10-25 14:58:27 -07:00
1fcedb8d16 fix duplicate branch name in slack 2016-10-25 14:38:57 -07:00
5c476391da fixed build number in slack messages 2016-10-25 14:37:19 -07:00
6cb23e7069 added slack notifications 2016-10-25 14:35:31 -07:00
c976b87ac7 -scheme -> -target 2016-10-25 13:33:50 -07:00
af2bdfc421 dir directive appears to create a tmpdir rather than just cd 2016-10-25 13:14:28 -07:00
b01c551197 fix directory directive in jenkinsfile 2016-10-25 13:04:24 -07:00
df6d3ca66b add stage for building the new macOS UI in Jenkins 2016-10-25 12:58:54 -07:00
5be7374f56 added macOS build for jenkins 2016-10-25 12:40:03 -07:00
7300005398 fixed one more stage syntax for jenkins build 2016-10-25 11:21:39 -07:00
6cd36edf45 Update stages 2016-10-25 11:18:26 -07:00
604a0b1fe6 added Jenkinsfile for jenkins build config 2016-10-25 11:10:21 -07:00
046d5bb9ff Typo fix line 77 2016-10-23 15:45:45 -04:00
0e8442064e Merge pull request #376 from siigna/debian
Move debian/format to debian/source/format
2016-10-21 13:39:55 -07:00
ea1f2762cf Merge pull request #401 from zielmicha/dev
Run as nonroot user on Linux (with CAP_NET_ADMIN and CAP_NET_RAW added).
2016-10-21 13:37:27 -07:00
0f3095f130 Merge remote-tracking branch 'macui/master' into macui-merge
# Conflicts:
#	.gitignore
2016-10-17 14:50:18 -07:00
7b7ec13349 Prepare for merging into main ZeroTier repo 2016-10-17 14:44:32 -07:00
7025c7090b set proper copyright/license in code files 2016-10-17 14:43:24 -07:00
7c12991f57 wasn't setting the Connected checkbox to off if the network wasn't connected 2016-10-17 13:48:25 -07:00
f444da80bc Add a 2 second delay before the About window shows up on the first run 2016-10-17 13:43:44 -07:00
ed58467d12 Clicking "Join" to join a new network now properly closes the popover 2016-10-17 13:43:27 -07:00
c44c3b0530 cleanup 2016-10-17 12:31:59 -07:00
46e9c1195c more removal of NSMenuDelegate 2016-10-17 12:29:28 -07:00
4730111492 updated project settings for Xcode 8.0 2016-10-17 12:27:07 -07:00
a813e29491 Don't need AppDelegate to be a NSMenuDelegate 2016-10-17 12:26:48 -07:00
344a25c133 Run as nonroot user on Linux (with CAP_NET_ADMIN and CAP_NET_RAW added).
- ZT will only drop root privileges if zerotier-one user exists. It is created by
Debian postinst script - in other cases the user has to be created by administrator.
- Linux >=4.3 with ambient capabilities is required, otherwise ZT will silently
- "-U" option now also disables privileges dropping
2016-10-16 13:53:44 +02:00
772599a6fc Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2016-10-13 15:18:12 -07:00
3a3fe272bb add Revocation.cpp to android build 2016-10-13 15:18:07 -07:00
88e3fe699c Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-10-13 15:17:27 -07:00
27d997a2e5 . 2016-10-13 15:17:17 -07:00
8809c6d122 link atomic library. seems to be required in the latest Android NDK 2016-10-13 14:34:54 -07:00
6469aa9df9 typo 2016-10-13 14:28:39 -07:00
ce6b5bc6f5 . 2016-10-13 14:21:24 -07:00
4f3775bb86 Fix ICMP match. 2016-10-13 14:21:00 -07:00
2cb760e0ac Fix ICMP json. 2016-10-13 14:14:46 -07:00
8850a8610a Fix filter trace. 2016-10-13 13:59:17 -07:00
2d6a4e5974 cleanup 2016-10-13 13:52:45 -07:00
93b4ac5cb2 Remove unused POW code, will revisit later. 2016-10-13 13:17:30 -07:00
e2509af163 Fix bug in default rules init in new networks. 2016-10-12 12:30:32 -07:00
3f4c166861 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-10-11 12:00:38 -07:00
e53f63ca87 Broke down and added an OR to the rules engine. It is now possible to have a series of MATCHes that are ORed. 2016-10-11 12:00:16 -07:00
6a50291aa2 Fix the case for InetAddress::containsAddress for IPv6 route of :: 2016-10-07 14:29:06 -07:00
e59ed3e68f Fix size of neighbor solicitation struct 2016-10-07 10:03:07 -07:00
45c4ccb153 Add a tags both equal match. 2016-10-05 16:38:42 -07:00
adeb7e7da0 Make capability flags match more user-friendly and appropriate since "match any flag" is generally what we want. 2016-10-05 12:54:46 -07:00
f1c8706485 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-10-05 10:12:16 -07:00
d5f4d381d0 Go ahead and loop back packets whose destination is self. Some OSes require this since they aactually follow the full network path even for local IPs. 2016-10-05 10:12:06 -07:00
69c5976775 fix typo in assert size 2016-10-04 17:35:52 -07:00
988049f39b Add new rule to rules engine: random match. 2016-09-30 14:07:00 -07:00
6651b8310e Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-09-30 13:47:40 -07:00
0843ed62fa Network delete fix. 2016-09-30 13:47:30 -07:00
d817039f79 Add IPv6 Neighbor Discovery code. Not yet tested. 2016-09-30 13:18:17 -07:00
f0794e09b7 Controller cleanup. 2016-09-30 13:04:26 -07:00
9eaa3756f8 Fix deadlock-causing regression in Network. 2016-09-30 12:22:54 -07:00
1eeebba2f7 Drop old /active path from network. 2016-09-29 17:59:27 -07:00
2fc3d12fb6 Minor tweaks to member code in controller, and fix Linux build. 2016-09-29 14:48:39 -07:00
4fe9a4fe83 Fix memory leak. 2016-09-28 16:13:59 -07:00
01129d02b3 hashCode() for InetAddress 2016-09-28 13:45:25 -07:00
e1fbf7b34c Check multicast limit on send after NDP emulation code. 2016-09-28 12:21:08 -07:00
7e90ab3534 TRACE verbosity increase on exceptions in NETWORK_CREDENTIALS. 2016-09-28 11:06:44 -07:00
5ee1ccd659 Send need credential error on more cases. 2016-09-27 16:41:08 -07:00
0b44919ba2 Clusters can send multiple OKs so we must allow this. 2016-09-27 16:33:37 -07:00
9f550292fe Simply network auth logic and always sent error on auth failure even for unknown networks to prevent forensics. 2016-09-27 13:49:43 -07:00
5ba7ca91c0 TRACE build fix. 2016-09-27 12:44:44 -07:00
cc4bacc199 Cleanup, and implement compression disable flag for networks. 2016-09-27 12:22:25 -07:00
15c07c58b6 Refactored network config chunking to sign every chunk to prevent stupid DOS attack potential, and implement network config fast propagate (though we probably will not use this for a bit). 2016-09-27 11:33:48 -07:00
236fdb450c cleanup attic 2016-09-27 07:02:16 -07:00
7e4b6b594b It now builds. 2016-09-26 17:05:39 -07:00
eac3667ec1 Bunch more refactoring and work on revocations, etc. 2016-09-26 16:17:02 -07:00
e35bca2c3c Move debian/format to debian/source/format
Fixes the following error during package building:
dpkg-source: warning: no source format specified in debian/source/format, see dpkg-source(1)

Reference:
https://www.debian.org/doc/manuals/maint-guide/dother.en.html#sourcef
2016-09-23 20:13:37 -07:00
46049a1ef6 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-09-23 16:08:44 -07:00
1f74dd4589 Revocation work in progress, add WATCH which is TEE with implicit rate sync (thanks JG@DCVC!), and clean up some cruft in Network. 2016-09-23 16:08:38 -07:00
40d3993ceb java code still needed to reflect PEER_ROLE_RELAY rename to PEER_ROLE_UPSTREAM 2016-09-21 14:12:20 -07:00
0564bb3b35 added missing copyright/license info from ZT_jniutils 2016-09-21 14:09:46 -07:00
29711e123f Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-09-20 21:21:43 -07:00
d3524f3609 Refactor COM stuff a bit, and respond to COM requests a bit more readily for rapid setup. Will need to revisit later. 2016-09-20 21:21:34 -07:00
d87f0293e3 Don't print a few error messages when they don't matter. 2016-09-19 13:40:53 -07:00
5fadd8bdd2 ZT_PEER_ROLE_RELAY -> ZT_PEER_ROLE_UPSTREAM in JNI glue 2016-09-19 12:54:19 -07:00
3366b53247 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2016-09-18 18:10:03 -07:00
68e549233d Revise bearer token code in controller, and add relay policy as a meta-data item presented to controller by nodes (to facilitate future meshiness). 2016-09-15 13:17:37 -07:00
24fce0be86 No, definitely have to back out GitHub issue #385 (non-bisected routes) since this breaks IPv6 on OSX and probably IPv4 too if you were to encounter a 6-only situation. 2016-09-14 22:23:56 -07:00
740b34124f Naming... 2016-09-14 17:35:50 -07:00
15402933bc Add physical MTU recommendation hint to network config via API. 2016-09-14 16:55:25 -07:00
8d0b2b781e Route management bug fixes. 2016-09-13 16:25:48 -07:00
83abc00aae docs 2016-09-13 14:58:59 -07:00
5b6d27e659 Implement relay policy, and setting multicast limit to 0 now disables multicast on the network as would be expected. 2016-09-13 14:27:18 -07:00
ced8dfc639 Try a version of GitHub issue #385 (non-bifurcated default if not present) on Mac. This version adds the bifurcated routes always but also adds a device-specific non-bifurcated route. Will have to see if this still interferes with OSX route settings, since by definition device specific routes should not conflict with general routes. 2016-09-13 11:07:59 -07:00
8ef0e4bbaf Get rid of HELLO rate gate on path since its basically worthless. There are 65535 ports per IP. 2016-09-13 10:46:36 -07:00
0da9a9a3e0 Set trustEstablished in a few more places. 2016-09-13 10:33:03 -07:00
cba37c6107 Add a few more rate limit gates for anti-DOS hardening. 2016-09-13 10:13:23 -07:00
ea1da3321a Rate gate requests for COM. 2016-09-12 15:19:21 -07:00
34b146f28b Back out of GitHub issue #385 for now and maybe for this release. Would be nice but it is non-critical and rules are the priority. Current implementation bangs heads with OSX route assignment on WiFi join, etc. 2016-09-12 14:56:18 -07:00
fb46a546db Just always do route bifurcation on Linux for now... basically the old behavior. 2016-09-09 12:53:44 -07:00
debc4c45ee Set trust established flag in MULTICAST_GATHER. 2016-09-09 11:45:34 -07:00
ab9afbc749 (1) Public networks now get COMs even though they do not gate with them since they will need them to push auth for multicast stuff, (2) added a bunch of rate limit circuit breakers for anti-DOS, (3) cleanup. 2016-09-09 11:36:10 -07:00
ef87069957 Fix gating of multicast GATHER replies since these can come from upstream, etc., and fix an issue with sending ECHO to recheck marginal paths. 2016-09-09 09:32:00 -07:00
0d4109a9f1 More refactoring to clean up code, and add a gate function to make sure we do not handle OK packets we did not expect. This hardens up a few potential edge cases around security, since such messages might be used to e.g. pollute a cache and DOS under certain conditions. 2016-09-09 08:43:58 -07:00
16df2c3363 Clean up handling of COMs, network access control, and fix a backward compatiblity issue. 2016-09-08 19:48:05 -07:00
5ed5b22525 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2016-09-08 17:45:46 -07:00
dccca7df1a another couple of missing semicolons 2016-09-08 17:45:40 -07:00
1f6b13b7fd Fix bug causing null addresses to get in memberships[] hash. 2016-09-08 16:09:56 -07:00
d23ade879b Do not bifurcate if not replacing an existing route. (Still need to tie up Linux and Windows.) 2016-09-08 15:42:46 -07:00
8afdb0aa65 GitHub issue #346 2016-09-07 17:07:06 -07:00
daf8a66ced More correct and efficient to initialize member relationship push stuff lazily when member is learned. 2016-09-07 15:47:20 -07:00
20278bb9e4 Also send MULTICAST_LIKEs to controllers. 2016-09-07 15:34:34 -07:00
c7a4da3dd3 Turns out we do not need to pass network to receive(). 2016-09-07 15:24:53 -07:00
1908aa55f5 Refactor MULTICAST_LIKE pushing to eliminate redundant and unnecessary pushes and simplify code. 2016-09-07 15:15:52 -07:00
1c08f5e857 Tweak some expire times. 2016-09-07 12:25:19 -07:00
c9ee8612e4 Credential TTL (tags/capabilities) should be credential time max delta, since we could get pushed one that is newer. 2016-09-07 12:12:52 -07:00
a7d988745b Use ECHO instead of HELLO where possible. 2016-09-07 12:01:03 -07:00
a9f404aac3 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-09-07 11:20:47 -07:00
ff9f8b1c2b Typo fix. 2016-09-07 11:15:36 -07:00
b5c86b6ba4 Bunch more path refactoring. Peers no longer forget paths, but do not normally use expired paths. Expired paths might still be tried if nothing else is reachable. 2016-09-07 11:13:17 -07:00
407ad659ea Reflect changes to strut ZT_PeerPhysicalPath 2016-09-06 17:59:01 -07:00
f2d2df2b11 Cluster build fix. 2016-09-06 15:06:07 -07:00
48a374c82c (1) fix crazy bug introduced in doRENDEZVOUS(), (2) reclaim Paths after paths[] condense, (3) fix an edge case around symmetric NAT and external IP change detection. 2016-09-06 14:05:58 -07:00
deee39343e Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-09-06 12:45:37 -07:00
8a2e8bd585 Rework how paths are set as remote cluster preferred. The code is now clearer and cluster preference indications are now very sticky as they should be. 2016-09-06 12:45:28 -07:00
43780742b0 comments, docs 2016-09-06 11:10:04 -07:00
68a966fa55 Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev 2016-09-05 16:19:10 -07:00
43b3ec4b1a forgot a semicolon in a JNI java type specifier. 2016-09-05 16:19:04 -07:00
dcf1f70868 re-adding file 2016-09-05 16:12:29 -07:00
598ca48ed6 Attempting to fix VirtualNetworkRoute having 2 entries in git. Yay non case sensitive filesystems 2016-09-05 16:12:06 -07:00
3790ebe77a Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-09-05 15:49:07 -07:00
d7f2287ce9 More tweaks to path behavior. 2016-09-05 15:47:22 -07:00
9f717e79ea Fixing filename again.... 2016-09-05 14:42:36 -07:00
26d43c9b06 fix capitalization on file 2016-09-05 14:27:44 -07:00
8682c90c7d ensure routes are also equal when checking for equality on VirtualNetworkConfig objects 2016-09-05 14:10:07 -07:00
d063f583ee Added VirtualNetworkRoute class and added it to VirtualNetworkConfig 2016-09-05 13:52:29 -07:00
eebcf08084 Tweaks to new Path code for dual-stack operation, and other fixes. 2016-09-03 15:39:05 -07:00
01aa469591 Remove debug line. 2016-09-02 14:26:04 -07:00
4992ac2d9f Cluster sub-optimal is in fact necessary... 2016-09-02 14:20:55 -07:00
412979ba8f Attempt to reactivate dead paths. 2016-09-02 13:55:33 -07:00
4f8253dcdb Tweaks to path handling... 2016-09-02 13:33:56 -07:00
4931e44998 Implement "weak pointer" behavior on Topology Path canonicalization hash table. 2016-09-02 12:34:02 -07:00
d1101441b3 Tweak some timings. 2016-09-02 11:54:59 -07:00
e8f6b4b5d3 Rest of big Path canonicalization refactor. 2016-09-02 11:51:33 -07:00
94263ffcc1 Added error handling messages 2016-09-01 19:02:27 -07:00
a3bdae9735 Work in progress: Path canonicalization refactor. 2016-09-01 15:43:07 -07:00
d5e6f59004 . 2016-09-01 13:45:32 -07:00
22271f2a49 Cleanup. 2016-09-01 13:36:41 -07:00
8b6d23b9f6 Optimize filter code a bit, and add a network-level setting for what should happen if an unsupported or unknown MATCH is encountered in a rules table. 2016-09-01 12:07:17 -07:00
25056de5d3 Also need to send credentials when TEEing and REDIRECTing. 2016-08-31 17:56:59 -07:00
994b25af4e Simplify some logic. 2016-08-31 17:45:55 -07:00
74afef8eb1 Think through and refine a few things in rules, especially edge case TEE and REDIRECT behavior and semantics. 2016-08-31 16:50:22 -07:00
54489a7f61 rename SAMENESS to DIFFERENCE which is less confusing 2016-08-31 14:14:58 -07:00
8e3004591b Add overlooked MATCH_ICMP to rule set. 2016-08-31 14:01:15 -07:00
2ff2a8fd9a Cluster build fixes and warning elimination. 2016-08-31 09:38:21 -07:00
c2a01f6db4 Added a path for error handling when fetching data from the ZeroTier daemon
Still need to wire up error messages to the user.
2016-08-30 20:28:52 -07:00
7a00036954 Tweak log length to fit JSON for members within two 4096-kb blocks. 2016-08-29 18:10:02 -07:00
914c42537c Type fixes. 2016-08-29 17:48:36 -07:00
cb63babac4 Debug output fixes. 2016-08-29 16:38:10 -07:00
ac1c127b68 Debug output fixes. 2016-08-29 16:24:08 -07:00
cb82193333 Debug output fixes. 2016-08-29 16:19:26 -07:00
f0636ffd4a EXT_FRAME messages should always be accepted if we are the destination for a matching TEE or REDIRECT rule. 2016-08-29 15:54:06 -07:00
51a420671f Make rules engine debug a bit more verbose. 2016-08-29 15:17:34 -07:00
77c2bf3ad9 Kill dead field from network JSON. 2016-08-29 14:47:19 -07:00
7223685b96 . 2016-08-26 15:30:20 -07:00
e7dff1c785 Change logic a little for self-as-destination in TEE and REDIRECT. 2016-08-26 15:28:31 -07:00
a5383d83d8 Do not TEE or REDIRECT to self. 2016-08-26 15:25:00 -07:00
a3c7627acf Push more than one packet for credentials if we happen to have a whole lot. Should not happen often but might if a member has tons of tags. 2016-08-26 14:43:16 -07:00
297b1b4258 Another tiny API bug fix. 2016-08-26 14:16:55 -07:00
35ac995d05 Fix setting of v6AssignMode in controller. 2016-08-26 14:04:27 -07:00
6bd5aba4fa fix frame size range bug 2016-08-26 13:26:26 -07:00
fb5217761b Add missing names in filter debug code. 2016-08-26 13:20:55 -07:00
90f3e94565 Always output trace info when debugging rules. 2016-08-26 12:21:44 -07:00
ded5a53a6c Documentation updates, add rules engine revision to network config request meta-data. 2016-08-26 10:38:43 -07:00
d637988ccf Fix chicken or egg problem in tags, and better filter debug instrumentation. 2016-08-25 18:21:20 -07:00
858e8c5217 one more... 2016-08-25 16:28:54 -07:00
df1ce856c9 A little bit more controller code cleanup. 2016-08-25 16:25:28 -07:00
b5e0d014ab Controller bug fixes 2016-08-25 16:08:40 -07:00
5eaf397a94 Add a debug log feature in the filter, which only works if enabled in Network.cpp. 2016-08-25 13:31:23 -07:00
1814016eb7 Add daemon thread to controller and move network member cache refreshes there. 2016-08-25 11:26:45 -07:00
6ecb42b031 docs and null check in controller code 2016-08-25 10:46:03 -07:00
584228b2b5 Dead code removal, and get rid of reliable() because we will no longer make that distinction. 2016-08-24 17:56:35 -07:00
cd3683f2ba Fix a missing receive(). 2016-08-24 17:50:51 -07:00
347ebcd899 Set trust flag in network controllers if remote query is accepted to allow NATed network controllers to better traverse. 2016-08-24 17:48:13 -07:00
e52c2c41ec Add a circuit breaker to prevent too many credentials from being stored per member. 2016-08-24 17:24:35 -07:00
95ff057e04 Increase rule limits a little since chunking in netconf can accomodate this. 2016-08-24 17:16:26 -07:00
60bc291414 Add noAutoAssignIps for member of networks. 2016-08-24 17:05:43 -07:00
c476285bd6 Harden PUSH_DIRECT_PATHS and simplify things by only doing it on receive when hops>0 and trust has been established. 2016-08-24 16:16:39 -07:00
63e8ad4cc3 TRACE stuff. 2016-08-24 15:45:37 -07:00
2cdda38dc4 It basically works... at least on current controllers. 2016-08-24 15:26:18 -07:00
ccea3d04d6 Push NETWORK_CONFIG_REFRESH on POSTs to /member/... in controller. 2016-08-24 14:28:16 -07:00
90bd3e07a0 Remove http-parser from RPM spec. 2016-08-24 13:53:24 -07:00
8e3463d47a Add length limit to TEE and REDIRECT, and completely factor out old C json-parser to eliminate a dependency. 2016-08-24 13:37:57 -07:00
8d594f8b53 cleanup 2016-08-23 16:05:10 -07:00
5f4df0c6a9 Controller cleanup and perf improvements. 2016-08-23 15:30:36 -07:00
0ee4d3554a Stub out USER_MESSAGE. 2016-08-23 14:38:20 -07:00
0a7a33ef8f Instantaneous blacklisting and credential revocation. 2016-08-23 13:46:36 -07:00
32fa061700 Compute credential TTL et al. 2016-08-23 13:02:59 -07:00
7036831203 Sign Dictionary in doNETWORK_CONFIG_REQUEST. 2016-08-23 11:57:56 -07:00
68b4ca9b31 Cleanup. 2016-08-23 11:52:10 -07:00
0dfc08b317 Tidy up a few minor protocol things, improve documentation in Packet.hpp. 2016-08-23 11:29:02 -07:00
77f7dcf40a Obsolete "test network" removal. 2016-08-23 09:39:38 -07:00
9a3c652a51 Get rid of expiration in Capability and Tag and move this to NetworkConfig so it can be set network-wide and reset if needed. Also add NetworkConfig field for this and centralize checking of credential time validity. 2016-08-22 18:06:46 -07:00
6db47de25e Merge branch 'edge' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2016-08-22 14:26:17 -07:00
b0d888d235 Signing of Capability and Tag objects. 2016-08-22 14:25:59 -07:00
af53e63ae2 Kube tut update 2016-08-22 11:33:10 -07:00
35d5ed9c2b version bump i forgot to commit 2016-08-19 18:13:00 -07:00
9827b8991d Merge branch 'edge' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2016-08-18 18:18:56 -07:00
4dce71879f . 2016-08-18 18:18:50 -07:00
727fb197d8 kube tutorial update 2016-08-18 15:32:26 -07:00
c2f10a52de zt-kubernetes tutorial update 2016-08-18 15:16:24 -07:00
cf2ec0797e zt-kubernetes tutorial update 2016-08-18 15:15:38 -07:00
6443049f86 Merge branch 'edge' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into edge 2016-08-18 15:13:49 -07:00
44bee4e3ff zt-kubernetes tutorial update 2016-08-18 15:13:43 -07:00
212a5af9a5 Capabilities and tags in POST JSON. 2016-08-18 14:37:56 -07:00
1cadbfb4d1 Little fixes. 2016-08-18 13:47:02 -07:00
4729fec2eb Merge branch 'edge' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2016-08-18 13:00:00 -07:00
f119c4a456 Cache network members for performance, add network non-persisted fields. 2016-08-18 12:59:48 -07:00
3e261fb999 updated entrypoint 2016-08-17 18:33:49 -07:00
0fd3afe2c8 examples files for kube int 2016-08-17 18:03:34 -07:00
9dc507c9ae examples files for kube int 2016-08-17 17:52:19 -07:00
5d37eabb59 Merge branch 'edge' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into edge 2016-08-17 17:43:44 -07:00
169664ffc2 examples files for kube int 2016-08-17 17:43:34 -07:00
4c0a7c0fb2 Merge branch 'edge' of http://10.6.6.2/zerotier/ZeroTierOne into edge 2016-08-17 17:37:48 -07:00
faa9a06bf5 Controller fixes... 2016-08-17 17:37:37 -07:00
183434d30e examples files for kube int 2016-08-17 17:29:14 -07:00
c84ce76c59 examples files for kube int 2016-08-17 17:22:05 -07:00
1833c61556 kubernetes tutorial update 2016-08-17 15:35:00 -07:00
ba78676ace kubernetes tutorial update 2016-08-17 15:28:48 -07:00
0d37b7b665 zt-kubernetes tutorial outline 2016-08-17 15:12:48 -07:00
1254dece5b Linux build fixes, and build controller. 2016-08-17 14:19:29 -07:00
b7ebf6edbf Cleanup and log how member was authorized. 2016-08-17 13:54:32 -07:00
b72847d504 Finally implement network join auth tokens, at least at the protocol level. 2016-08-17 13:41:45 -07:00
168b86fdcd Controller docs and API fix. 2016-08-17 12:27:07 -07:00
a13f4d8353 We now always build the controller in ZeroTier One, at least for desktop and server targets. Also means that ZeroTier One now requires C++11. (Still keeping C++11 out of the core in node/ though.) 2016-08-17 10:42:32 -07:00
cc808cc2dd Rules parsing stuff. 2016-08-17 10:25:25 -07:00
ce001198d8 . 2016-08-16 16:57:45 -07:00
c0639ccd37 Just about ready to test. 2016-08-16 16:46:08 -07:00
58701c1ca8 . 2016-08-16 14:08:08 -07:00
402d99ea8d C++11 mode build fix. 2016-08-16 14:07:11 -07:00
b08ca49580 More controller work -- it builds! 2016-08-16 14:05:17 -07:00
bd15262e54 Bunch of rule JSON stuff. 2016-08-15 18:49:50 -07:00
3cb2e1197f . 2016-08-12 15:32:45 -07:00
7762cd680b fix json include path in cli 2016-08-12 11:30:50 -07:00
c30f74987f Starting refactor of controller... 2016-08-12 11:30:27 -07:00
628ef14d80 added more spacing at the bottom of each network info cell 2016-08-11 17:50:15 -07:00
bc48a097f8 add @2x versions of menu bar icon 2016-08-11 17:41:54 -07:00
dd21c8a577 Rev nlohmann/json 2016-08-10 17:27:46 -07:00
7d906df805 Better instrumentation for filter, and filter bug fixes. 2016-08-10 14:27:52 -07:00
d166b494ee Rule parse fix. 2016-08-10 13:41:22 -07:00
81959f14af Refactor and redesign symmetric NAT predictor. This is cleaner. 2016-08-10 10:28:54 -07:00
2300f3c92b bump build number 2016-08-09 20:04:33 -07:00
73fd934fec * Fixed menu icon size
* Added icon for dark mode
* Added detection for interface mode changing from light to dark and adjusting the icon accordingly
2016-08-09 20:02:12 -07:00
a7b635a980 add border around About web view. added padding to text div in the about page 2016-08-09 19:03:09 -07:00
91b8d6f34f [pasteboard declareTypes] needs to be called before every time you set a string to the pasteboard. 2016-08-09 18:03:48 -07:00
c9d7845fea Minor bug fix and some instrumentation stuff for testing. 2016-08-09 17:00:01 -07:00
0b0cda2be4 ZT_TRACE fix. 2016-08-09 15:55:41 -07:00
e1310a764a More cleanup and removal of cruft due to obsolete network-specific relays (will be replaced with federation stuff). 2016-08-09 15:45:26 -07:00
dbf3e6c3c9 Dead code removal. 2016-08-09 15:01:46 -07:00
dee7f75f7e Minor cleanup. 2016-08-09 14:46:11 -07:00
774c7e0ea5 Put CONFIG_REFRESH back. 2016-08-09 13:52:08 -07:00
4d498b3765 Handling of multi-part chunked network configs on the inbound side. 2016-08-09 13:14:38 -07:00
bcd05fbdfa Chunking of network config replies. 2016-08-09 09:34:13 -07:00
2ba9343607 Encode and decode of tags and capabilities in NetworkConfig. 2016-08-09 08:32:42 -07:00
8ae07fb9c9 build number bump 2016-08-08 19:04:50 -07:00
13682bd919 Change Deployment Target to 10.7. Apparently going below 10.10 was only an issue with Swift 2016-08-08 19:02:09 -07:00
b5cab8afaa update build number 2016-08-08 17:46:01 -07:00
c15c9775bd explicitly link to WebKit framework 2016-08-08 17:45:52 -07:00
51cf49a24f cleanup 2016-08-08 17:40:22 -07:00
00fd9c3a15 It builds... almost ready to test some rules engine stuff. 2016-08-08 17:33:26 -07:00
8007ca56aa Refactor and tie-up of capabilities and tags and packet evaluation points. Some optimization is possible here but it is minor and we will make it work first. 2016-08-08 16:50:00 -07:00
8d7f851b4e Now translated. One minor crash to figure out. 2016-08-07 20:19:36 -07:00
5b13b282ed Replace JoinNetworkViewController with obj-c 2016-08-07 19:13:12 -07:00
d965768004 Replaced the network list with Obj-C 2016-08-07 18:19:47 -07:00
a91187e60e Convert NetworkMonitor to obj-c 2016-08-07 17:25:34 -07:00
179324e44a Replace Preferences view. Removed LaunchAtLoginController and replaced with simpler code 2016-08-07 16:34:54 -07:00
c6dba50e35 replace AboutViewController 2016-08-07 15:18:32 -07:00
b51d68a419 replace ServiceCom with objc class 2016-08-06 19:45:58 -07:00
a0db48571d Convert Network to OBJC 2016-08-06 18:50:50 -07:00
4d7f625aa1 . 2016-08-05 15:55:38 -07:00
e2f783ebbd . 2016-08-05 15:02:01 -07:00
7a12d8193b Replace NodeStatus object with Obj-C Class 2016-08-04 17:55:57 -07:00
4d9b74b171 . 2016-08-04 15:27:20 -07:00
37d139177d Integrate Filter into OutboundMulticast properly. 2016-08-04 13:01:14 -07:00
8a7753cfe3 Filter cleanup, prep for filter integration in a few places. 2016-08-04 12:35:25 -07:00
331382cf2f More cleanup and a tiny federation prep item. 2016-08-04 12:14:13 -07:00
98152d974a More cleanup and removal of DeferredPackets, will do the latter in a more elegant way. 2016-08-04 11:40:38 -07:00
56febbf2ba . 2016-08-04 10:39:28 -07:00
5cf410490e . 2016-08-04 10:18:33 -07:00
404a0bbddd ... 2016-08-04 09:51:15 -07:00
f057bb63cd More work on tags and capabilities. 2016-08-04 09:02:35 -07:00
7e6e56e2bc Bunch of work on pushing and replication of tags and capabilities, and protocol cleanup. 2016-08-03 18:04:08 -07:00
67cb03742e Add tag rules and split out rule serialize/deserialize so the code can be reused. 2016-08-03 14:12:38 -07:00
a08246ce5d update build number 2016-08-02 20:30:49 -07:00
f54d5e9e8f the quest for leaks is over.
Why a singleton doesn't leak, vs calling static methods on a class is beyond me
2016-08-02 20:30:09 -07:00
91940cbcf5 Kill network preferred relays -- this feature is gone (and was seldom used anyway) in favor of federation. 2016-08-02 14:40:26 -07:00
77bd8aacd1 merge cli from edge 2016-08-02 13:50:09 -07:00
ecc1324bb0 Rules engine work: capability based security model with tags and capabilities, and some cleanup across other places. 2016-08-02 13:36:17 -07:00
d3b0081447 Cleanup... 2016-07-28 12:09:58 -07:00
22e44c762b More rules engine work: key/value pair matching for microsegmentation. 2016-07-28 10:58:10 -07:00
78e5a00a68 Only poll the ZeroTier service when the menu or Network List are visible. Reduces CPU idle prevention by a a LOT 2016-07-26 20:31:06 -07:00
b9a4d138fc only update the network list view if it's visible 2016-07-26 20:05:33 -07:00
36a9aff283 Show "About" view on first run.
Still needs some work to show up in the right place
2016-07-26 20:04:59 -07:00
e1755e569e build number bump 2016-07-26 19:16:33 -07:00
ae374a78fc add some non Lorem Ipsum content to the about page 2016-07-26 19:15:12 -07:00
62befe006d Route clicked links in the web view to the default web browser 2016-07-26 18:21:39 -07:00
1e6e112806 Dockerfile for building zerotier/zerotier-containerized for CoreOS et al. 2016-07-26 17:08:09 -07:00
830250759c Fix for running under MUSL libc (e.g. Alpine Linux) 2016-07-26 16:39:02 -07:00
13100b245c Fix for running under MUSL libc (e.g. Alpine Linux) 2016-07-26 16:36:20 -07:00
4929be08f7 Cleanup and stub out new object transfer messages. 2016-07-26 12:33:51 -07:00
088bbd1c08 Filter fixes. 2016-07-25 17:03:26 -07:00
7404eb46c4 Integration of Filter into inbound and outbound packet path. 2016-07-25 16:51:10 -07:00
eaf6d6c938 Basic L2/L3 filter for rules engine (not integrated yet) and some cleanup. 2016-07-25 15:52:16 -07:00
02d288e9d4 Merge branch 'dev' of Y:/ZeroTier/ZeroTierOne into dev 2016-07-21 20:45:17 -07:00
6f15c4a561 1.1.14 Windows version stuff 2016-07-21 20:45:05 -07:00
ae491c277e VERSION 1.1.14: bug fixes!
This version fixes two bugs: a possible infinite loop when using network-specific relays,
and a bug causing a crash on Android.
2016-07-21 20:29:15 -07:00
ebe7e15475 sys/sysctl.h is required on OSX and probably other BSD 2016-07-21 19:21:51 -07:00
dced40361b Bump version in most places to 1.1.14 2016-07-21 19:15:03 -07:00
faf864b8a2 Merge branch 'master' into dev 2016-07-21 19:07:50 -07:00
8a23d764de Merge branch 'master' of http://10.6.6.2/zerotier/ZeroTierOne 2016-07-21 19:06:31 -07:00
f21af60a13 Init trusted path count to zero. Meh. 2016-07-21 19:06:18 -07:00
10564d8e14 Init trusted path count to zero. Meh. 2016-07-21 19:05:14 -07:00
095aef5f30 Merge pull request #348 from the-maldridge/remove-sysctl
Remove explicit sys/sysctl.h includes
2016-07-21 15:16:22 -07:00
145ac31c8a Merge pull request #362 from mwarning/space-between-literal-and-string-macro
C++11 requires a space between literal and string macro
2016-07-21 15:16:05 -07:00
b7a5f783ba Merge pull request #364 from mwarning/fortify-source-needs-optimization-flag
fix _FORTIFY_SOURCE warning
2016-07-21 15:15:42 -07:00
3d25a2ea02 Merge pull request #363 from mwarning/move-declaration-out-of-scope
move sourceAddress out of scope
2016-07-21 15:15:27 -07:00
76b785c90f fix _FORTIFY_SOURCE warning
warning: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Wcpp]
2016-07-21 23:08:58 +02:00
b3073f44a2 move sourceAddress out of scope
sourceAddress is used in the catch block
2016-07-21 23:03:04 +02:00
bcdd158ad8 C++11 requires a space between literal and string macro 2016-07-21 22:41:02 +02:00
693ac4e86c add web view and placeholder about page with ZT logo and lorem ipsum 2016-07-19 19:12:41 -07:00
6320879fe1 Fix for GitHub issue #358 and bump version to 1.1.13 (dev) 2016-07-18 10:56:33 -07:00
2afe3d89d0 Merge branch 'master' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne 2016-07-14 19:29:10 -07:00
8a15b42dab switch to GCC for Android 2016-07-14 19:29:00 -07:00
4b9e84f42f docs 2016-07-14 17:47:32 -07:00
ba87640e4c Release howto for internal use. 2016-07-14 17:46:22 -07:00
a5400e0162 Windows installer now installs a batch file and Path variable settings to make zerotier-cli work in the Windows CLI (1.1.12 MSI updated on web for this too) and a Chocolatey packaging job for ZeroTier One. 2016-07-14 17:09:40 -07:00
bdc3b0834b VERSION 1.1.12: yet another minor fix to managed routes
This version just contains another minor fix to managed routes for
GitHub issue #352.
2016-07-12 15:09:44 -07:00
1a285e5342 Version bump again. Slack has updated their client twice in one day so its okay. 2016-07-12 15:03:06 -07:00
8912515011 Fix to fix to GitHub issue #352 2016-07-12 15:00:30 -07:00
6ec3464ee9 JSON fix for trusted paths (does not affect normal op) 2016-07-12 13:58:15 -07:00
4b5e43ab0d VERSION 1.1.10: minor managed route fixes
Version 1.1.10 is a minor bug fix release. It fixes the following two issues:

 * Routes are no longer added 'via' IP addresses of the current node's ZT interface.
 * IPv6 default route is now fixed on Mac.
 * IP addresses are now deleted before new ones are added to allow changes to netmask
   on Mac and some other platforms.

This version also quietly introduces a feature called trusted paths. We'll be
documenting this in our community section soon. This is an experimental feature
for in-LAN SDN use.
2016-07-12 13:37:38 -07:00
a6d9ae3a36 Man page fix on fedora-22 2016-07-12 13:30:15 -07:00
34e7c8652a Version bumps. 2016-07-12 12:30:35 -07:00
1861f67fa7 Version bump to 1.1.10 2016-07-12 12:21:36 -07:00
b5e9d3f6f4 Rename file to be intuitive. 2016-07-12 11:41:19 -07:00
9785fde32a Trusted paths work! 2016-07-12 11:40:45 -07:00
9657675755 Plumbing through trusted path stuff to OneService. 2016-07-12 11:30:22 -07:00
5d7174b162 Go back to bundling libhttp-parser on Debian, at least for our own internally-created packages, since this library has a massively unstable ABI and causes nothing but problems if referenced from the distro. 2016-07-12 10:11:00 -07:00
cdb5ceac7b Should remove old IPs before trying to add new ones. 2016-07-12 09:43:12 -07:00
23391ff9da More OSX IPv6 fixes. 2016-07-12 09:22:04 -07:00
3f2b21ce71 Do not shadow our own route twice on Mac if there is no default route. (Fix for issue found during IPv6 default route override testing.) 2016-07-12 08:55:57 -07:00
6535730255 GitHub issue #352 2016-07-12 08:42:36 -07:00
765082fdb6 Trusted path support, and version bump to 1.1.9 2016-07-12 08:29:50 -07:00
aff62e9e10 Version bump in Mac pkg. 2016-07-08 14:28:34 -07:00
2d598dd433 Automatically add symlinks to redhat distro. 2016-07-08 14:25:25 -07:00
f86e9b7df2 Bump version in RPM spec and DEB. 2016-07-08 13:57:16 -07:00
898d889537 VERSION 1.1.8: minor Linux bug fix, controller fixes, controller doc improvements
1.1.8 is a very minor update. It contains a small fix to IP address management
on Linux but other than that there are no changes to the regular ZeroTier One
code.

The 1.1.8 controller contains several fixes and improvements:

 * Network authorizedMemberCount works again
 * Managed IP addresses are pushed as long as they fall within a LAN-local managed
   route. The v4AssignMode and v6AssignMode settings only control automatic IP
   assignment from pools. In previous versions v4AssignMode had to be on for IPs
   to be pushed at all, making it impossible to just manually assign IPs.
 * IPv6 now has an auto-assign mode ('zt' to match V4) that can work alongside the
   special RFC4193 and 6PLANE modes (though it is not NDP emulated). If this is
   enabled IPv6 addresses will be auto-assigned from IPv6 ranges in the assignment
   pool list.
 * Controller documentation is MUCH better! See controller/README.md for actual
   useful information!

Finally 1.1.8 has several improvements to linux-build-farm including Debian wheezy
support.
2016-07-08 13:53:37 -07:00
0e2964261f docs 2016-07-08 13:42:04 -07:00
ffe7d8d024 docs 2016-07-08 13:40:21 -07:00
c01ebbcbde docs 2016-07-08 13:38:47 -07:00
a6e5914aa7 docs 2016-07-08 13:37:51 -07:00
6d8de214eb Docs and controller API version 2016-07-08 13:10:02 -07:00
5bf3c54cd3 Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev 2016-07-08 10:08:06 -07:00
959b64777f 1.1.8 bump 2016-07-08 10:08:01 -07:00
be0af135bc update JNI code for 1.1.6 2016-07-07 20:07:07 -07:00
2d7c58540f v6AssignMode bug fix 2016-07-07 17:05:12 -07:00
951038a304 Ignore /bits in IP assignments and just copy it from the corresponding LAN-local route. Having each managed IP assignment have its own bits field was just a source of user error and poor UX and was completely worthless. 2016-07-07 16:28:43 -07:00
912ee199ed Tiny fixes to LinuxEthernetTap 2016-07-07 16:10:36 -07:00
b9329dc49a Fix to IPv6 picking for small ranges. 2016-07-07 15:55:40 -07:00
6e08e1ae97 A few controller changes: (1) assign managed IPs that are assigned regardless of "assign mode" which now only controls auto-assignment or special addressing, (2) support proper issuing of managed IPv6 IPs, (3) support IPv6 auto-assign ranges 2016-07-07 15:42:10 -07:00
dd1d2b4d00 GitHub issue #343 -- fix authorizedMemberCount 2016-07-07 14:49:54 -07:00
f6d53cc568 . 2016-07-06 18:12:31 -07:00
b6cc815447 . 2016-07-06 18:07:42 -07:00
ddbbb8afec Wheezy stuff 2016-07-06 18:04:13 -07:00
a8a497c621 Debian wheezy work. 2016-07-06 17:59:08 -07:00
1a89694980 Remove explicit sys/sysctl.h includes
Explicitly including sys/sysctl.h breaks the ability to build
against muslc.
2016-07-06 02:38:23 -05:00
5c03416e84 Actually remove http-parser-devel 2016-07-05 14:28:58 -07:00
b732c445b8 Xenial fix (clang broken) and bundle http-parser even in Fedora because it is so version sensitive. 2016-07-05 14:09:33 -07:00
97ec88e346 . 2016-07-05 12:30:58 -07:00
192bc4fcf0 More repo work. 2016-07-05 10:54:07 -07:00
0e6065e3d5 another build number bump 2016-06-30 21:25:14 -07:00
a156fec25a put node ID into the main menu.
Clicking on the menu item copies the node ID into the clipboard.
2016-06-30 21:24:45 -07:00
fe725f9995 fix a case where the "Allow Default" checkbox would be enabled when a network wasn't connected. 2016-06-30 20:35:32 -07:00
58207b30d1 now that the network details list uses the default background color of the pane its embedded in, we don't have to force to the "Light" theme, even if the user has selected the "dark" theme for the top menu bar. 2016-06-30 20:28:04 -07:00
f4192d7b9e added separator between items in the network detail list 2016-06-30 20:17:33 -07:00
e747692727 remove background from network details view 2016-06-30 20:07:22 -07:00
d786c5265f bump version number 2016-06-30 19:46:59 -07:00
ba0a45365c Work around for several strange corner cases in Automatic Reference Counting in Apple's runtime 2016-06-30 19:42:23 -07:00
fc4ea57a9c debian-stretch 2016-06-30 18:03:06 -07:00
751497a748 aptly script 2016-06-30 16:44:22 -07:00
c714e8baa6 Get rid of broken test code for controller so selftest build works with controller enabled. 2016-06-30 08:30:45 -07:00
2331a00555 Fedora-22 32-bit fix. 2016-06-29 18:53:31 -07:00
decb4261d4 wire up control to launch at startup in preferences 2016-06-27 19:14:15 -07:00
b0971e3a01 setup launch at login on first start 2016-06-27 19:04:55 -07:00
583cd25506 slightly resize icons 2016-06-27 18:05:17 -07:00
1beacc8c32 wire up network delete again 2016-06-27 17:54:54 -07:00
9f880d07ab build number change 2016-06-26 18:21:26 -07:00
3fc11e2278 misc bug fixes related to default routes 2016-06-26 18:18:59 -07:00
1756e8b0f2 Wire up checkboxes for allowGlobal, allowDefault, allowManaged to set the proper state in zerotier daemon
checkboxes are disabled if the network is not currently connected.
2016-06-26 17:33:46 -07:00
d57e343245 add UI elements in network details for allowDefault, allowGlobal, allowManaged 2016-06-26 17:21:45 -07:00
7e17a2072c add allowManaged, allowGlobal, allowDefault to Network object 2016-06-26 16:41:52 -07:00
9c94d6527a add allowGlobal, allowDefault, allowManaged options to joining a network 2016-06-26 16:11:30 -07:00
5da4fd2aef Added "..." to menu items to signify it pops up in a window 2016-06-24 15:24:29 -07:00
e621058cfd build number 5 2016-06-24 15:24:03 -07:00
f2e2632ae7 Added About view
also not yet populated
2016-06-23 20:22:03 -07:00
35d1736c97 add preferences view
not populated yet
2016-06-23 20:04:57 -07:00
3c534abc99 "Show Networks" -> "Network Details" 2016-06-23 19:48:48 -07:00
c3deedd6fd Fix menu bar icon. Add app icon. 2016-06-23 19:44:00 -07:00
b256111a17 misc cleanup 2016-06-21 20:02:18 -07:00
b5a90a437b update build number 2016-06-21 19:45:08 -07:00
6d114b7480 dynamically generate the menu so that networks are listed
can join/leave networks directly from the menu
2016-06-21 19:44:59 -07:00
c8f85ffec9 Factored network updates into its own class. Delivered via notification 2016-06-16 20:53:55 -07:00
bae0060552 add a timer to retrieve the network list every second. 2016-06-14 19:59:45 -07:00
c8750e5812 more error checking when parsing JSON for network list
remove "multicastSubscriptions" field as it isn't used anyway
2016-06-14 18:09:30 -07:00
89cb0e260a Set deployment target to 10.10 for the minimum OS X version for this app
I'm currently using features only available in 10.10 or above.  We'll have to discuss this and see what can be done for OS X 10.7 through 10.9.
2016-06-13 19:58:21 -07:00
2c1a8524f0 remove unused variables 2016-06-13 19:56:43 -07:00
b085329bca Base functionality complete. Can join/leave/list networks. Can disconnect from networks without removing them from the network list. 2016-06-13 19:46:54 -07:00
188f8021f8 Joining/Deleting networks now implemented.
Still need to implement known networks cache so we can join/leave networks without deleting them from the UI
2016-06-09 19:59:05 -07:00
975bcb8aff some OS X Authentication Services wizardry to get /Library/Application Support/ZeroTier/One/authtoken.secret and copy it to ~/Library/Application Support/ZeroTier/One/authtoken.secret 2016-05-31 17:23:11 -07:00
51e74f8d4f remove some extra logging 2016-05-31 15:01:42 -07:00
b4f3dfc347 look up authtoken in user's app support directory 2016-05-31 13:50:43 -07:00
41328eef94 . 2016-05-27 15:25:32 -07:00
59cf2ea341 add proper border around the network list 2016-05-27 15:21:23 -07:00
67d472424d make the view show up light instead of dark 2016-05-27 15:07:20 -07:00
1d27adb102 Finished wiring up the view 2016-05-27 13:48:22 -07:00
940c0f2b93 WIP. Mac UI 2016-05-27 13:28:32 -07:00
d5620288d5 Parse JSON network list into Network objects for the view 2016-05-17 19:41:54 -07:00
da30d2898e beginning of communicating with the zero tier service 2016-05-16 19:58:24 -07:00
40198d6c13 call super functions on a few overrides 2016-05-16 19:25:20 -07:00
4653ebc97f add table view to show networks view 2016-05-16 19:08:00 -07:00
acd6978a30 set the combo box to use a data source and remember the last 20 networks input 2016-05-16 18:26:33 -07:00
ccbd6f97cd remove some mistakenly committed files and add .gitignore for Xcode projects 2016-05-16 18:02:26 -07:00
b4a8057994 limit the join network combobox to hex characters.
Join only clickable when a valid network is entered
2016-05-16 17:51:14 -07:00
225c2b095b Initial start of the menu bar app.
Has menu items to join/leave networks which currently displays an empty popover from the icon (icon needs to be made still)
2016-05-14 15:42:45 -07:00
0582338015 Initial Commit 2016-05-14 13:54:49 -07:00
1005 changed files with 160844 additions and 91241 deletions

3
.dockerignore Normal file
View File

@ -0,0 +1,3 @@
.git/
build/
!build/zerotier

46
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,46 @@
---
name: Bug report
about: Create a report to help us improve
---
**Alternative, faster ways to get help**
If you have just started using ZeroTier, here are some places to get help:
- my.zerotier.com has a _Community_ tab. It's a live chat with other users and the developers.
- [ZeroTier Knowledge Base](https://zerotier.atlassian.net/wiki/spaces/SD/overview)
- www.zerotier.com has a Contact Us button
- email contact@zerotier.com
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Create a Network '...'
2. Install zerotier-one '....'
3. '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots or console output to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Mac, Linux, Windows, BSD]
- OS/Distribution Version
- ZeroTier Version [e.g. 1.2.4]
- Hardware [e.g. raspberry pi 3]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Version [e.g. 1.2.4]
**Additional context**
Add any other context about the problem here.
- ZeroTier Network Configuration
- Router Config
- Firewall Config (try turning the firewall off)
- General Network Environment: [ e.g Home, University Campus, Corporate LAN ]

View File

@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest an idea for this project
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

83
.gitignore vendored Executable file → Normal file
View File

@ -1,46 +1,23 @@
# Main binaries created in *nix builds
/zerotier-one
/zerotier-idtool
/zerotier-cli
/zerotier-selftest
/zerotier
# OS-created garbage files from various platforms
/build
/cmake-build-debug
/cmake-build-release
/core/version.h
/.idea
/.ide-*
.DS_Store
.Trashes
*.swp
._*
*~
*~.nib
*.secret
.Apple*
Thumbs.db
# Windows build droppings
/windows/ZeroTierOne.sdf
/windows/ZeroTierOne.v11.suo
/windows/x64
/windows/Win32
/windows/*/x64
/windows/*/Win32
/windows/ZeroTierOne/Release
/windows/ZeroTierOneService/obj
/windows/ZeroTierOneService/bin
/windows/Build
/windows/Debug
/windows/Release
/windows/WebUIWrapper/bin
/windows/WebUIWrapper/obj
/ext/installfiles/windows/ZeroTier One-SetupFiles
/ext/installfiles/windows/Prerequisites
/ext/installfiles/windows/*-cache
/ZeroTier One.msi
# *nix/Mac build droppings
/build-*
/ZeroTierOneInstaller-*
/examples/docker/zerotier-one
/examples/docker/test-*.env
/world/mkworld
/world/*.c25519
zt1-src.tar.gz
# Miscellaneous temporaries, build files, etc.
@eaDir
.vscode
__pycache__
*.log
*.bak
*.opensdf
*.user
*.cache
@ -49,36 +26,14 @@ zt1-src.tar.gz
*.pid
*.pkg
*.o
*.a
*.dylib
*.so
*.so.*
*.o-*
*.core
*.deb
*.rpm
*.autosave
*.tmp
doc/*.1
doc/*.2
doc/*.8
.depend
node_modules
debian/files
debian/zerotier-one
debian/zerotier-one*.debhelper
debian/*.log
debian/zerotier-one.substvars
# Java/Android/JNI build droppings
java/obj/
java/libs/
java/bin/
java/classes/
java/doc/
java/build_win64/
java/build_win32/
/java/mac32_64/
windows/WinUI/obj/
windows/WinUI/bin/
windows/ZeroTierOne/Debug/
*.vcxproj.backup
/*.db
/*.opendb

View File

@ -1,12 +1,15 @@
# Authors and Third Party Code Licensing Information
## Primary Authors
* ZeroTier Core and ZeroTier One virtual networking service<br>
Adam Ierymenko / adam.ierymenko@zerotier.com
Joseph Henry / joseph.henry@zerotier.com (QoS and multipath)
* Java JNI Interface to enable Android application development, and Android app itself (code for that is elsewhere)<br>
Grant Limberg / glimberg@gmail.com
* ZeroTier SDK (formerly known as Network Containers)<br>
* ZeroTier SDK / libzt<br>
Joseph Henry / joseph.henry@zerotier.com
## Third Party Contributors
@ -25,56 +28,34 @@
## Third-Party Code
These are included in ext/ for platforms that do not have them available in common repositories. Otherwise they may be linked and the package may ship with them as dependencies.
ZeroTier includes the following third party code, either in ext/ or incorporated into the ZeroTier core. This third party code remains licensed under its original license and is not subject to ZeroTier's BSL license.
* LZ4 compression algorithm by Yann Collet
* Files: ext/lz4/*
* Files: node/LZ4.cpp
* Home page: http://code.google.com/p/lz4/
* License grant: BSD attribution
* License: BSD 2-clause
* http-parser by Joyent, Inc. (many authors)
* C++11 json (nlohmann/json) by Niels Lohmann
* Files: ext/http-parser/*
* Home page: https://github.com/joyent/http-parser/
* License grant: MIT/Expat
* json-parser by James McLaughlin
* Files: ext/json-parser/*
* Home page: https://github.com/udp/json-parser/
* License grant: BSD attribution
* TunTapOSX by Mattias Nissler
* Files: ext/tap-mac/tuntap/*
* Home page: http://tuntaposx.sourceforge.net/
* License grant: BSD attribution no-endorsement
* ZeroTier Modifications: change interface name to zt#, increase max MTU, increase max devices
* Files: ext/json/*
* Home page: https://github.com/nlohmann/json
* License: MIT
* tap-windows6 by the OpenVPN project
* Files: windows/TapDriver6/*
* Home page:
https://github.com/OpenVPN/tap-windows6/
* License grant: GNU GPL v2
* ZeroTier Modifications: change name of driver to ZeroTier, add ioctl() to get L2 multicast memberships (source is in ext/ and modifications inherit GPL)
* Home page: https://github.com/OpenVPN/tap-windows6/
* License: GNU GPL v2
* Salsa20 stream cipher, Curve25519 elliptic curve cipher, Ed25519
digital signature algorithm, and Poly1305 MAC algorithm, all by
Daniel J. Bernstein
* Salsa20 stream cipher, Curve25519 elliptic curve cipher, Ed25519 digital signature algorithm, and Poly1305 MAC algorithm, all by Daniel J. Bernstein
* Files:
node/Salsa20.hpp
node/C25519.hpp
node/Poly1305.hpp
* Files: node/Salsa20.* node/C25519.* node/Poly1305.*
* Home page: http://cr.yp.to/
* License grant: public domain
* License: public domain
* MiniUPNPC and libnatpmp by Thomas Bernard
* cpp-httplib by yhirose
* Files:
ext/libnatpmp/*
ext/miniupnpc/*
* Home page: http://miniupnp.free.fr/
* License grant: BSD attribution no-endorsement
* Files: ext/cpp-httplib/*
* Home page: https://github.com/yhirose/cpp-httplib
* License: MIT

346
CMakeLists.txt Normal file
View File

@ -0,0 +1,346 @@
cmake_minimum_required (VERSION 3.8)
cmake_policy(SET CMP0048 NEW)
if(${CMAKE_VERSION} VERSION_LESS 3.15)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else()
cmake_policy(VERSION 3.15)
endif()
set(ZEROTIER_VERSION_MAJOR 1 CACHE INTERNAL "")
set(ZEROTIER_VERSION_MINOR 9 CACHE INTERNAL "")
set(ZEROTIER_VERSION_REVISION 0 CACHE INTERNAL "")
set(ZEROTIER_VERSION_BUILD 0 CACHE INTERNAL "")
project(zerotier
VERSION ${ZEROTIER_VERSION_MAJOR}.${ZEROTIER_VERSION_MINOR}.${ZEROTIER_VERSION_REVISION}.${ZEROTIER_VERSION_BUILD}
DESCRIPTION "ZeroTier Network Hypervisor"
LANGUAGES CXX C)
if(NOT PACKAGE_STATIC)
find_program(
GO go
HINTS "/usr/local/go/bin" "/usr/bin" "/usr/local/bin" "C:/go/bin"
)
if(NOT GO)
message(FATAL_ERROR "Golang not found")
else(NOT GO)
message(STATUS "Found Golang at ${GO}")
endif(NOT GO)
set(default_build_type "Release")
if(WIN32)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_SYSTEM_VERSION "7" CACHE STRING INTERNAL FORCE)
else(WIN32)
if(APPLE)
set(CMAKE_CXX_STANDARD 17)
else(APPLE)
set(CMAKE_CXX_STANDARD 11)
endif(APPLE)
endif(WIN32)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
option(BUILD_CENTRAL_CONTROLLER "Build ZeroTier Central Controller" OFF)
if(BUILD_CENTRAL_CONTROLLER)
find_package(PkgConfig REQUIRED)
if(APPLE)
set(CMAKE_PREFIX_PATH
${CMAKE_PREFIX_PATH}
/usr/local/opt/libpq
/usr/local/lib
)
endif(APPLE)
find_package(PostgreSQL REQUIRED)
pkg_check_modules(hiredis REQUIRED IMPORTED_TARGET hiredis)
add_subdirectory(controller/thirdparty/redis-plus-plus-1.1.1)
set(redispp_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/controller/thirdparty/redis-plus-plus-1.1.1/src/sw)
set(redispp_STATIC_LIB redispp_static)
endif(BUILD_CENTRAL_CONTROLLER)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DZT_DEBUG)
endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
if(WIN32)
message("++ Setting Windows Compiler Flags ${CMAKE_BUILD_TYPE}")
add_definitions(-DNOMINMAX)
add_compile_options(
-Wall
-Wno-deprecated
-Wno-unused-function
-Wno-format
$<$<CONFIG:DEBUG>:-g>
$<$<CONFIG:DEBUG>:-O0>
$<$<CONFIG:RELEASE>:-O3>
$<$<CONFIG:RELEASE>:-ffast-math>
$<$<CONFIG:RELWITHDEBINFO>:-O3>
$<$<CONFIG:RELWITHDEBINFO>:-g>
)
set(GOFLAGS
-a
-trimpath
)
if(BUILD_32BIT)
set(CMAKE_SYSTEM_PROCESSOR "x86" CACHE STRING "system processor")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags")
set(GOARCH "GOARCH=386" CACHE STRING "go architecture")
add_compile_options(
-m32
)
add_link_options(
-m32
)
endif(BUILD_32BIT)
else(WIN32)
set(GOFLAGS
-trimpath
-buildmode=pie
)
if(APPLE)
message("++ Setting MacOS Compiler Flags ${CMAKE_BUILD_TYPE}")
set(MACOS_VERSION_MIN "10.12")
add_compile_options(
-Wall
-Wno-deprecated
-Wno-unused-function
-mmacosx-version-min=${MACOS_VERSION_MIN}
$<$<CONFIG:DEBUG>:-g>
$<$<CONFIG:DEBUG>:-O0>
$<$<CONFIG:RELEASE>:-Ofast>
$<$<CONFIG:RELEASE>:-ffast-math>
$<$<CONFIG:RELEASE>:-fPIE>
$<$<CONFIG:RELEASE>:-flto>
$<$<CONFIG:RELWITHDEBINFO>:-O1>
$<$<CONFIG:RELWITHDEBINFO>:-fPIE>
$<$<CONFIG:RELWITHDEBINFO>:-g>
)
add_link_options(
-mmacosx-version-min=${MACOS_VERSION_MIN}
$<$<CONFIG:RELEASE>:-flto>
)
set(GOFLAGS
${GOFLAGS}
-a
-ldflags '-w -extldflags \"-Wl,-undefined -Wl,dynamic_lookup\"'
)
else(APPLE)
message("++ Setting Linux/BSD/Posix Compiler Flags (${CMAKE_BUILD_TYPE})")
add_compile_options(
-Wall
-Wno-deprecated
-Wno-unused-function
-Wno-format
$<$<CONFIG:DEBUG>:-g>
$<$<CONFIG:DEBUG>:-O0>
$<$<CONFIG:RELEASE>:-O3>
$<$<CONFIG:RELEASE>:-ffast-math>
$<$<CONFIG:RELEASE>:-fPIE>
$<$<CONFIG:RELWITHDEBINFO>:-O3>
$<$<CONFIG:RELWITHDEBINFO>:-fPIE>
$<$<CONFIG:RELWITHDEBINFO>:-g>
)
option(BUILD_32BIT "Force building as 32-bit binary" OFF)
option(BUILD_STATIC "Build statically linked executable" OFF)
option(BUILD_ARM_V5 "Build ARMv5" OFF)
option(BUILD_ARM_V6 "Build ARMv6" OFF)
if(BUILD_ARM_V5 AND BUILD_ARM_V6)
message(FATAL_ERROR "BUILD_ARM_V5 and BUILD_ARM_V6 are mutually exclusive!")
endif(BUILD_ARM_V5 AND BUILD_ARM_V6)
if(BUILD_32BIT)
set(CMAKE_SYSTEM_PROCESSOR "x86" CACHE STRING "system processor")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags")
set(GOARCH "GOARCH=386" CACHE STRING "go architecture")
add_compile_options(
-m32
)
endif(BUILD_32BIT)
if(BUILD_STATIC)
add_link_options(
-static
)
set(CMAKE_EXE_LINKER_FLAGS "-static ${CMAKE_EXE_LINKER_FLAGS}")
set(GOFLAGS
${GOFLAGS}
-a
-tags osusergo,netgo
-ldflags '-w -extldflags \"-static -Wl,-unresolved-symbols=ignore-all\"'
)
else(BUILD_STATIC)
set(GOFLAGS
${GOFLAGS}
-a
-ldflags '-w -extldflags \"-Wl,-unresolved-symbols=ignore-all\"'
)
endif(BUILD_STATIC)
if(BUILD_ARM_V5)
set(GOARM "GOARM=5")
endif(BUILD_ARM_V5)
if(BUILD_ARM_V6)
set(GOARM "GOARM=6")
endif(BUILD_ARM_V6)
endif(APPLE)
endif(WIN32)
if (
CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "amd64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "X86_64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "x64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "X64"
)
message("++ Adding flags for processor ${CMAKE_SYSTEM_PROCESSOR}")
add_compile_options(-maes -mrdrnd -mpclmul -msse -msse2)
endif()
if (
CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "arm64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64" OR
CMAKE_SYSTEM_PROCESSOR MATCHES "AARCH64"
)
message("++ Adding flags for processor ${CMAKE_SYSTEM_PROCESSOR}")
add_compile_options(-march=armv8-a+aes+crypto -mtune=generic -mstrict-align)
endif()
set(GO_BUILD_TAGS)
if(BUILD_CENTRAL_CONTROLLER)
add_definitions(-DZT_CONTROLLER_USE_LIBPQ=1)
set(GO_BUILD_TAGS -tags central)
endif(BUILD_CENTRAL_CONTROLLER)
add_subdirectory(core)
add_subdirectory(controller)
add_subdirectory(osdep)
add_subdirectory(serviceiocore)
file(GLOB go_src
${CMAKE_SOURCE_DIR}/cmd/*.go
${CMAKE_SOURCE_DIR}/cmd/cmd/*.go
${CMAKE_SOURCE_DIR}/pkg/zerotier/*.go
)
file(GLOB go_zt_service_tests_cmd_src
${CMAKE_SOURCE_DIR}/cmd/zt_service_tests/*.go
)
if(WIN32)
set(GO_EXE_NAME "zerotier.exe")
set(GO_SERVICE_TESTS_EXE_NAME "zt_service_tests.exe")
set(GO_EXTRA_LIBRARIES "-lstdc++ -lwsock32 -lws2_32 -liphlpapi -lole32 -loleaut32 -lrpcrt4 -luuid")
else(WIN32)
set(GO_EXE_NAME "zerotier")
set(GO_SERVICE_TESTS_EXE_NAME "zt_service_tests")
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(GO_EXTRA_LIBRARIES "-lstdc++")
if(BUILD_ARM_V5)
set(GO_EXTRA_LIBRARIES
${GO_EXTRA_LIBRARIES}
"-latomic"
)
endif(BUILD_ARM_V5)
else()
set(GO_EXTRA_LIBRARIES "-lc++" "-lm")
endif()
endif(WIN32)
add_custom_target(
zt_service_tests ALL
BYPRODUCTS ${CMAKE_BINARY_DIR}/zt_service_tests
SOURCES ${go_src} ${go_zt_service_tests_cmd_src}
COMMAND ${CMAKE_COMMAND} -E env ${GOARCH} ${GOARM} CGO_ENABLED=1 CGO_CFLAGS=\"-O3\" CGO_LDFLAGS=\"$<TARGET_FILE:zt_core> $<TARGET_FILE:zt_controller> $<TARGET_FILE:zt_service_io_core> $<TARGET_FILE:zt_osdep> ${GO_EXTRA_LIBRARIES}\" ${GO} build -mod=vendor ${GOFLAGS} -o ${CMAKE_BINARY_DIR}/${GO_SERVICE_TESTS_EXE_NAME} ${go_zt_service_tests_cmd_src}
COMMENT "Compiling zt_service_tests (Go/cgo self-tests)..."
)
add_dependencies(zt_service_tests zt_osdep zt_core zt_controller zt_service_io_core)
add_custom_target(
zerotier ALL
BYPRODUCTS ${CMAKE_BINARY_DIR}/zerotier
SOURCES ${go_src}
COMMAND ${CMAKE_COMMAND} -E env ${GOARCH} ${GOARM} CGO_ENABLED=1 CGO_CFLAGS=\"-O3\" CGO_LDFLAGS=\"$<TARGET_FILE:zt_core> $<TARGET_FILE:zt_controller> $<TARGET_FILE:zt_service_io_core> $<TARGET_FILE:zt_osdep> ${GO_EXTRA_LIBRARIES}\" ${GO} build -mod=vendor ${GOFLAGS} -o ${CMAKE_BINARY_DIR}/${GO_EXE_NAME} ${CMAKE_SOURCE_DIR}/cmd/zerotier/zerotier.go
COMMENT "Compiling Go Code..."
)
add_dependencies(zerotier zt_osdep zt_core zt_controller zt_service_io_core)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/zerotier DESTINATION bin)
else(NOT PACKAGE_STATIC)
if(BUILD_32BIT)
set(CMAKE_SYSTEM_PROCESSOR "x86" CACHE STRING "system processor")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags")
add_compile_options(
-m32
)
endif(BUILD_32BIT)
set(STATIC_BINARY ${CMAKE_BINARY_DIR}/zerotier)
set(IMPORTED_LOCATION ${CMAKE_BINARY_DIR})
add_executable(zerotier IMPORTED GLOBAL)
install(PROGRAMS ${STATIC_BINARY} DESTINATION bin)
endif(NOT PACKAGE_STATIC)
# Linux packaging
if("${CMAKE_SYSTEM_NAME}" EQUAL "Linux")
if(IS_DIRECTORY /lib/systemd/system)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/packaging/debian/zerotier.service
DESTINATION /lib/systemd/system
)
elseif(IS_DIRECTORY /usr/lib/systemd/system)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/packaging/debian/zerotier.service
DESTINATION /usr/lib/systemd/system
)
else()
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/packaging/debian/zerotier.init
DESTINATION /etc/init.d
)
endif()
endif()
if("${ZT_PACKAGE_FORMAT}" MATCHES "DEB")
include(packaging/debian.cmake)
elseif("${ZT_PACKAGE_FORMAT}" MATCHES "RPM")
include(packaging/rpm.cmake)
else()
endif()

11
COPYING
View File

@ -1,13 +1,8 @@
ZeroTier One, an endpoint server for the ZeroTier virtual network layer.
Copyright © 20112016 ZeroTier, Inc.
Copyright © 20132020 ZeroTier, Inc.
ZeroTier One is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or (at
your option) any later version.
See the file LICENSE.GPL-3 for the text of the GNU GPL version 3.
If that file is not present, see <http://www.gnu.org/licenses/>.
ZeroTier is released under the terms of the BSL version 1.1. See the
file LICENSE.txt for details.
..
Local variables:

502
Jenkinsfile vendored Normal file
View File

@ -0,0 +1,502 @@
pipeline {
options {
disableConcurrentBuilds()
preserveStashes(buildCount: 10)
timestamps()
}
parameters {
booleanParam(name: "BUILD_ALL", defaultValue: false, description: "Build all supported platform/architecture combos. Defaults to x86/x64 only")
}
environment {
PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
}
agent none
stages {
stage ("Build") {
steps {
script {
def tasks = [:]
tasks << buildStaticBinaries()
tasks << buildDebianNative()
tasks << buildCentosNative()
tasks << buildMacOS()
tasks << buildWindows()
tasks << buildFreeBSD()
parallel tasks
}
}
}
stage ("Package Static") {
steps {
script {
parallel packageStatic()
}
}
}
}
}
def buildMacOS() {
def tasks = [:]
tasks << getTasks(['mac'],['amd64'], {unused1, unused2 ->
def myNode = {
env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
node ('mac') {
dir("build") {
checkout scm
sh 'make'
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
return myNode
})
return tasks
}
def buildWindows() {
def tasks = [:]
tasks << getTasks(['windows'], ['amd64', 'i386'], { unused1, platform ->
def myNode = {
node ('windows') {
env.SHELL = 'C:/Windows/System32/cmd.exe'
dir ("build") {
checkout scm
dir ("build") {
withEnv(["PATH=C:\\TDM-GCC-64\\bin;C:\\WINDOWS;C:\\Windows\\system32;C:\\CMake\\bin;C:\\Go\\bin"]) {
def cmakeFlags = ""
if (platform == "i386") {
cmakeFlags = '-DBUILD_32BIT=1'
}
bat """
cmake -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ${cmakeFlags} ..
mingw32-make -j8
"""
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
}
return myNode
})
return tasks
}
def buildFreeBSD() {
def tasks = [:]
tasks << getTasks(['freebsd12'], ['amd64'], { unused1, unused2 ->
def myNode = {
node ('freebsd12') {
dir('build') {
checkout scm
sh 'make setup'
dir('build') {
sh 'make -j4'
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
return myNode
})
return tasks
}
def buildStaticBinaries() {
def tasks = [:]
def dist = ["alpine"]
def archs = []
if (params.BUILD_ALL == true) {
archs = ["arm64", "amd64", "i386", "armhf", "ppc64le", "s390x"]
} else {
archs = ["amd64", "i386"]
}
tasks << getTasks(dist, archs, { distro, platform ->
def myNode = {
node ('linux-build') {
env.PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${platform}:latest")
runtime.inside {
dir("build") {
def cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1"'
if (platform == "i386") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1"'
} else if (platform == "armhf") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DBUILD_ARM_V6=1"'
}
sh "${cmakeFlags} make"
dir("build") {
sh "mv zerotier zerotier-static-${platform}"
stash includes: 'zerotier-static-*', name: "static-${platform}"
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
}
return myNode
})
return tasks
}
def getTasks(axisDistro, axisPlatform, task) {
def tasks = [:]
for(int i=0; i< axisDistro.size(); i++) {
def axisDistroValue = axisDistro[i]
for(int j=0; j< axisPlatform.size(); j++) {
def axisPlatformValue = axisPlatform[j]
tasks["${axisDistroValue}/${axisPlatformValue}"] = task(axisDistroValue, axisPlatformValue)
}
}
return tasks
}
def packageStatic() {
def tasks = [:]
def centos7 = ["centos7"]
def centos7Arch = ["i386"]
tasks << getTasks(centos7, centos7Arch, { distro, arch ->
def myNode = {
node ('linux-build') {
env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
runtime.inside {
dir("build") {
unstash "static-${arch}"
sh "mkdir -p build"
sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier"
sh 'CMAKE_ARGS="-DBUILD_32BIT=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=RPM" make setup'
dir("build") {
sh 'make package -j4 VERBOSE=1'
}
sh "mkdir -p ${distro}"
sh "cp -av build/*.rpm ${distro}/"
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
return myNode
})
if (params.BUILD_ALL == true) {
def s390xStatics = ["clefos", "debian-buster", "debian-sid", "debian-bullseye", "debian-stretch", "ubuntu-bionic", "ubuntu-eoan", "ubuntu-focal"]
def s390x = ["s390x"]
tasks << getTasks(s390xStatics, s390x , { distro, arch ->
def myNode = {
node ('linux-build') {
env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
def pkgFormat = "DEB"
if (distro == "clefos") {
pkgFormat = "RPM"
}
runtime.inside {
dir("build/") {
unstash "static-${arch}"
sh "mkdir -p build"
sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier"
sh "CMAKE_ARGS=\"-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=${pkgFormat}\" make setup"
dir("build") {
sh 'make package -j4 VERBOSE=1'
}
sh "mkdir -p ${distro}"
sh "cp -av build/*.rpm ${distro}/"
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
return myNode
})
}
def debianJessie = ["debian-jessie"]
def debianJessieArchs = []
if (params.BUILD_ALL == true) {
debianJessieArch = ["armhf", "amd64", "i386"]
} else {
debianJessieArch = ["amd64", "i386"]
}
tasks << getTasks(debianJessie, debianJessieArch, { distro, arch ->
def myNode = {
node ('linux-build') {
env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
runtime.inside {
dir('build/') {
def cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
if (arch == "i386") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
} else if (arch == "armel") {
cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
} else if (arch == "armhf") {
cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
}
unstash "static-${arch}"
sh "mkdir -p build"
sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier"
sh "${cmakeFlags} make setup"
dir("build") {
sh 'make package -j4 VERBOSE=1'
}
sh "mkdir -p ${distro}"
sh "cp -av build/*.deb ${distro}/"
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
return myNode
})
def ubuntuTrusty = ["ubuntu-trusty"]
def ubuntuTrustyArch = []
if (params.BUILD_ALL == true) {
ubuntuTrustyArch = ["i386", "amd64", "arm64", "ppc64le"]
} else {
ubuntuTrustyArch = ["i386", "amd64"]
}
tasks << getTasks(ubuntuTrusty, ubuntuTrustyArch, { distro, arch ->
def myNode = {
node ('linux-build') {
env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
runtime.inside {
dir('build/') {
def cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
if (arch == "i386") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
} else if (arch == "armel") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
} else if (arch == "armhf") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
}
unstash "static-${arch}"
sh "mkdir -p build"
sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier"
sh "${cmakeFlags} make setup"
dir("build") {
sh 'make package -j4 VERBOSE=1'
}
sh "mkdir -p ${distro}"
sh "cp -av build/*.deb ${distro}/"
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
return myNode
})
def debianWheezy = ["debian-wheezy"]
def debianWheezyArchs = []
if (params.BUILD_ALL == true) {
debianWheezyArchs = ["armhf", "amd64", "i386"]
} else {
debianWheezyArchs = ["amd64", "i386"]
}
tasks << getTasks(debianJessie, debianJessieArch, { distro, arch ->
def myNode = {
node ('linux-build') {
env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
runtime.inside {
dir('build/') {
def cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
if (arch == "i386") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
} else if (arch == "armel") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
} else if (arch == "armhf") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
}
unstash "static-${arch}"
sh "mkdir -p build"
sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier"
sh "${cmakeFlags} make setup"
dir("build") {
sh 'make package -j4 VERBOSE=1'
}
sh "mkdir -p ${distro}"
sh "cp -av build/*.deb ${distro}/"
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
}
}
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
return myNode
})
return tasks
}
def buildDebianNative() {
def tasks = [:]
def debian = ["debian-buster" , "debian-stretch", "debian-sid", "debian-bullseye"]
def debianArchs = []
if (params.BUILD_ALL) {
debianArchs = ["ppc64le", "i386", "armhf", "armel", "arm64", "amd64"]
} else {
debianArchs = ["amd64", "i386"]
}
def build = { distro, arch ->
def myNode = {
node ('linux-build') {
env.PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
runtime.inside {
def cmakeFlags = 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=DEB"'
if (arch == "i386") {
cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DZT_PACKAGE_FORMAT=DEB"'
} else if (arch == "armel") {
cmakeFlags = 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
} else if (arch == "armhf") {
cmakeFlags = 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
}
dir("build") {
sh "${cmakeFlags} make setup"
dir("build") {
sh "make package -j4 VERBOSE=1"
}
}
sh "mkdir -p ${distro}"
sh "mv build/build/*.deb ${distro}"
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
}
return myNode
}
tasks << getTasks(debian, debianArchs, build)
// bash is broken when running under QEMU-s390x on Xenial
def xenial = ["ubuntu-xenial"]
def xenialArchs = []
if (params.BUILD_ALL == true) {
xenialArchs = ["i386", "amd64", "armhf", "arm64", "ppc64le"]
} else {
xenialArchs = ["i386", "amd64"]
}
tasks << getTasks(xenial, xenialArchs, build)
def ubuntu = ["ubuntu-bionic", "ubuntu-eoan"]
def ubuntuArchs = []
if (params.BUILD_ALL == true) {
ubuntuArchs = ["i386", "amd64", "armhf", "arm64", "ppc64le"]
} else {
ubuntuArchs = ["i386", "amd64"]
}
tasks << getTasks(ubuntu, ubuntuArchs, build)
def ubuntuFocal = ["ubuntu-focal"]
def ubuntuFocalArchs = []
if (params.BUILD_ALL == true) {
ubuntuFocalArchs = ["amd64", "arm64", "ppc64le"]
} else {
ubuntuFocalArchs = ["amd64"]
}
tasks << getTasks(ubuntuFocal, ubuntuFocalArchs, build)
def kali = ["kali-rolling"]
def kaliArchs = ["amd64"]
tasks << getTasks(kali, kaliArchs, build)
return tasks
}
def buildCentosNative() {
def tasks = [:]
def build = { distro, arch ->
def myNode = {
node ('linux-build') {
env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
dir ("build") {
checkout scm
}
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
runtime.inside {
dir("build") {
if (distro == 'centos7' && arch == 'amd64') {
sh 'source scl_source enable devtoolset-8 llvm-toolset-7 && CMAKE_ARGS="-DZT_PACKAGE_FORMAT=RPM" make setup'
} else {
sh 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=RPM" make setup'
}
dir ("build") {
if (distro == 'centos7' && arch == 'amd64') {
sh 'source scl_source enable devtoolset-8 llvm-toolset-7 && make package -j4 VERBOSE=1'
} else {
sh 'make package -j4 VERBOSE=1'
}
}
}
sh "mkdir -p ${distro}"
sh "cp -av build/build/*.rpm ${distro}/"
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
}
}
}
return myNode
}
def centos8 = ["centos8"]
def centos8Archs = []
if (params.BUILD_ALL == true) {
centos8Archs = ["amd64", "arm64", "ppc64le"]
} else {
centos8Archs = ["amd64"]
}
tasks << getTasks(centos8, centos8Archs, build)
def centos7 = ["centos7"]
def centos7Archs = ["amd64"]
tasks << getTasks(centos7, centos7Archs, build)
return tasks
}

View File

@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

149
LICENSE.txt Normal file
View File

@ -0,0 +1,149 @@
-----------------------------------------------------------------------------
Business Source License 1.1
License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
"Business Source License" is a trademark of MariaDB Corporation Ab.
-----------------------------------------------------------------------------
Parameters
Licensor: ZeroTier, Inc.
Licensed Work: ZeroTier Network Virtualization Engine
The Licensed Work is (c)2013-2020 ZeroTier, Inc.
Additional Use Grant: You may make use of the Licensed Work, provided you
do not use it in any of the following ways:
* Sell hosted ZeroTier services as a "SaaS" Product
(1) Operate or sell access to ZeroTier root servers,
network controllers, or authorization key or certificate
generation components of the Licensed Work as a
for-profit service, regardless of whether the use of
these components is sold alone or is bundled with other
services. Note that this does not apply to the use of
ZeroTier behind the scenes to operate a service not
related to ZeroTier network administration.
* Create Non-Open-Source Commercial Derivative Works
(2) Link or directly include the Licensed Work in a
commercial or for-profit application or other product
not distributed under an Open Source Initiative (OSI)
compliant license. See: https://opensource.org/licenses
(3) Remove the name, logo, copyright, or other branding
material from the Licensed Work to create a "rebranded"
or "white labeled" version to distribute as part of
any commercial or for-profit product or service.
* Certain Government Uses
(4) Use or deploy the Licensed Work in a government
setting in support of any active government function
or operation with the exception of the following:
physical or mental health care, family and social
services, social welfare, senior care, child care, and
the care of persons with disabilities.
Change Date: 2025-01-01
Change License: Apache License version 2.0 as published by the Apache
Software Foundation
https://www.apache.org/licenses/
Alternative Licensing
If you would like to use the Licensed Work in any way that conflicts with
the stipulations of the Additional Use Grant, contact ZeroTier, Inc. to
obtain an alternative commercial license.
Visit us on the web at: https://www.zerotier.com/
Notice
The Business Source License (this document, or the "License") is not an Open
Source license. However, the Licensed Work will eventually be made available
under an Open Source License, as stated in this License.
For more information on the use of the Business Source License for ZeroTier
products, please visit our pricing page which contains license details and
and license FAQ: https://zerotier.com/pricing
For more information on the use of the Business Source License generally,
please visit the Adopting and Developing Business Source License FAQ at
https://mariadb.com/bsl-faq-adopting.
-----------------------------------------------------------------------------
Business Source License 1.1
Terms
The Licensor hereby grants you the right to copy, modify, create derivative
works, redistribute, and make non-production use of the Licensed Work. The
Licensor may make an Additional Use Grant, above, permitting limited
production use.
Effective on the Change Date, or the fourth anniversary of the first publicly
available distribution of a specific version of the Licensed Work under this
License, whichever comes first, the Licensor hereby grants you rights under
the terms of the Change License, and the rights granted in the paragraph
above terminate.
If your use of the Licensed Work does not comply with the requirements
currently in effect as described in this License, you must purchase a
commercial license from the Licensor, its affiliated entities, or authorized
resellers, or you must refrain from using the Licensed Work.
All copies of the original and modified Licensed Work, and derivative works
of the Licensed Work, are subject to this License. This License applies
separately for each version of the Licensed Work and the Change Date may vary
for each version of the Licensed Work released by Licensor.
You must conspicuously display this License on each original or modified copy
of the Licensed Work. If you receive the Licensed Work in original or
modified form from a third party, the terms and conditions set forth in this
License apply to your use of that work.
Any use of the Licensed Work in violation of this License will automatically
terminate your rights under this License for the current and all other
versions of the Licensed Work.
This License does not grant you any right in any trademark or logo of
Licensor or its affiliates (provided that you may use a trademark or logo of
Licensor as expressly required by this License).
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
TITLE.
-----------------------------------------------------------------------------
MariaDB hereby grants you permission to use this Licenses text to license
your works, and to refer to it using the trademark "Business Source License",
as long as you comply with the Covenants of Licensor below.
Covenants of Licensor
In consideration of the right to use this Licenses text and the "Business
Source License" name and trademark, Licensor covenants to MariaDB, and to all
other recipients of the licensed work to be provided by Licensor:
1. To specify as the Change License the GPL Version 2.0 or any later version,
or a license that is compatible with GPL Version 2.0 or a later version,
where "compatible" means that software provided under the Change License can
be included in a program with software provided under GPL Version 2.0 or a
later version. Licensor may specify additional Change Licenses without
limitation.
2. To either: (a) specify an additional grant of rights to use that does not
impose any additional restriction on the right granted in this License, as
the Additional Use Grant; or (b) insert the text "None".
3. To specify a Change Date.
4. Not to modify this License in any other way.

View File

@ -1,18 +1,31 @@
# Common makefile -- loads make rules for each platform
BUILDDIR := build
TIMESTAMP=$(shell date +"%Y%m%d%H%M")
OSTYPE=$(shell uname -s)
.PHONY: all
ifeq ($(OSTYPE),Darwin)
include make-mac.mk
endif
all: setup
cd ${BUILDDIR} && $(MAKE) -j4 VERBOSE=1
ifeq ($(OSTYPE),Linux)
include make-linux.mk
endif
setup:
mkdir -p ${BUILDDIR} && cd ${BUILDDIR} && cmake .. -DCMAKE_BUILD_TYPE=Release ${CMAKE_ARGS}
ifeq ($(OSTYPE),FreeBSD)
include make-freebsd.mk
endif
ifeq ($(OSTYPE),OpenBSD)
include make-freebsd.mk
endif
setup-debug:
mkdir -p ${BUILDDIR} && cd ${BUILDDIR} && cmake .. -DCMAKE_BUILD_TYPE=Debug ${CMAKE_ARGS}
debug:
mkdir -p ${BUILDDIR} && cd ${BUILDDIR} && cmake .. -DCMAKE_BUILD_TYPE=Debug ${CMAKE_ARGS} && $(MAKE)
central-controller:
mkdir -p ${BUILDDIR} && cd ${BUILDDIR} && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CENTRAL_CONTROLLER=1 ${CMAKE_ARGS} && $(MAKE) -j4
central-controller-debug:
mkdir -p ${BUILDDIR} && cd ${BUILDDIR} && cmake .. -DCMAKE_BUILD_TYPE=Debug -DBUILD_CENTRAL_CONTROLLER=1 ${CMAKE_ARGS} && $(MAKE) -j4
central-controller-docker:
docker build -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} -f controller/central-docker/Dockerfile .
clean:
rm -rf ${BUILDDIR}
distclean:
rm -rf ${BUILDDIR}

View File

@ -1,52 +1,67 @@
ZeroTier - A Planetary Ethernet Switch
ZeroTier - Global Area Networking
======
ZeroTier is a software-based managed Ethernet switch for planet Earth.
ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and applications to communicate as if they all reside in the same physical data center or cloud region.
It erases the LAN/WAN distinction and makes VPNs, tunnels, proxies, and other kludges arising from the inflexible nature of physical networks obsolete. Everything is encrypted end-to-end and traffic takes the most direct (peer to peer) path available.
This is accomplished by combining a cryptographically addressed and secure peer to peer network (termed VL1) with an Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring.
This repository contains ZeroTier One, a service that provides ZeroTier network connectivity to devices running Windows, Mac, Linux, iOS, Android, and FreeBSD and makes joining virtual networks as easy as joining IRC or Slack channels. It also contains the OS-independent core ZeroTier protocol implementation in [node/](node/).
All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer to peer, though we offer free (but slow) relaying for users who cannot establish peer to peer connetions.
Visit [ZeroTier's site](https://www.zerotier.com/) for more information and [pre-built binary packages](https://www.zerotier.com/download.shtml). Apps for Android and iOS are available for free in the Google Play and Apple app stores.
The goals and design principles of ZeroTier are inspired by among other things the original [Google BeyondCorp](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43231.pdf) paper and the [Jericho Forum](https://en.wikipedia.org/wiki/Jericho_Forum) with its notion of "deperimeterization."
Visit [ZeroTier's site](https://www.zerotier.com/) for more information and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in the Google Play and Apple app stores.
ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](LICENSE.txt) and the [ZeroTier pricing page](https://www.zerotier.com/pricing) for details. ZeroTier is free to use internally in businesses and academic institutions and for non-commercial purposes. Certain types of commercial use such as building closed-source apps and devices based on ZeroTier or offering ZeroTier network controllers and network management as a SaaS service require a commercial license.
A small amount of third party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md] for a list of third party code, where it is included, and the licenses that apply to it. All of the third party code in ZeroTier is liberally licensed (MIT, BSD, Apache, public domain, etc.).
### Getting Started
ZeroTier's basic operation is easy to understand. Devices have 10-digit *ZeroTier addresses* like `89e92ceee5` and networks have 16-digit network IDs like `8056c2e21c000001`. All it takes for a device to join a network is its 16-digit ID, and all it takes for a network to authorize a device is its 10-digit address. Everything else is automatic.
Everything in the ZeroTier world is controlled by two types of identifier: 40-bit/10-digit *ZeroTier addresses* and 64-bit/16-digit *network IDs*. These identifiers are easily distinguished by their length. A ZeroTier address identifies a node or "device" (laptop, phone, server, VM, app, etc.) while a network ID identifies a virtual Ethernet network that can be joined by devices.
A "device" can be anything really: desktops, laptops, phones, servers, VMs/VPSes, containers, and even (soon) apps.
ZeroTier addresses can be thought of as port numbers on an enormous planet-wide enterprise Ethernet smart switch supporting VLANs. Network IDs are VLAN IDs to which these ports may be assigned. A single port can be assigned to more than one VLAN.
For testing we provide a public virtual network called *Earth* with network ID `8056c2e21c000001`. On Linux and Mac you can do this with:
A ZeroTier address looks like `8056c2e21c` and a network ID looks like `8056c2e21c000001`. Network IDs are composed of the ZeroTier address of that network's primary controller and an arbitrary 24-bit ID that identifies the network on this controller. Network controllers are roughly analogous to SDN controllers in SDN protocols like [OpenFlow](https://en.wikipedia.org/wiki/OpenFlow), though as with the analogy between VXLAN and VL2 this should not be read to imply that the protocols or design are the same. You can use our convenient and inexpensive SaaS hosted controllers at [my.zerotier.com](https://my.zerotier.com/) or [run your own controller](controller/) if you don't mind messing around with JSON configuration files or writing scripts to do so.
sudo zerotier-cli join 8056c2e21c000001
### Project Layout
Now wait about 30 seconds and check your system with `ip addr list` or `ifconfig`. You'll see a new interface whose name starts with *zt* and it should quickly get an IPv4 and an IPv6 address. Once you see it get an IP, try pinging `earth.zerotier.net` at `29.209.112.93`. If you've joined Earth from more than one system, try pinging your other machine.
The base path contains the ZeroTier One service main entry point (`one.cpp`), self test code, makefiles, etc.
*(IPv4 addresses for Earth are assigned from the block 28.0.0.0/7, which is not a part of the public Internet but is non-standard for private networks. It's used to avoid IP conflicts during testing. Your networks can run any IP addressing scheme you want.)*
- `artwork/`: icons, logos, etc.
- `attic/`: old stuff and experimental code that we want to keep around for reference.
- `controller/`: the reference network controller implementation, which is built and included by default on desktop and server build targets.
- `debian/`: files for building Debian packages on Linux.
- `doc/`: manual pages and other documentation.
- `ext/`: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files.
- `include/`: include files for the ZeroTier core.
- `java/`: a JNI wrapper used with our Android mobile app. (The whole Android app is not open source but may be made so in the future.)
- `macui/`: a Macintosh menu-bar app for controlling ZeroTier One, written in Objective C.
- `node/`: the ZeroTier virtual Ethernet switch core, which is designed to be entirely separate from the rest of the code and able to be built as a stand-alone OS-independent library. Note to developers: do not use C++11 features in here, since we want this to build on old embedded platforms that lack C++11 support. C++11 can be used elsewhere.
- `osdep/`: code to support and integrate with OSes, including platform-specific stuff only built for certain targets.
- `rule-compiler/`: JavaScript rules language compiler for defining network-level rules.
- `service/`: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks for desktops, laptops, servers, VMs, and containers.
- `windows/`: Visual Studio solution files, Windows service code, and the Windows task bar app UI.
If you don't want to belong to a giant Ethernet party line anymore, just type:
### Build and Platform Notes
sudo zerotier-cli leave 8056c2e21c000001
To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/'.
The *zt* interface will disappear. You're no longer on the network.
To create networks of your own you'll need a network controller. You can use [our hosted controller at my.zerotier.com](https://my.zerotier.com) which is free for up to 100 devices on an unlimited number of networks, or you can build your own controller and run it through its local JSON API. See [README.md in controller/](controller/) for more information.
### Building from Source
For Mac, Linux, and BSD, just type "make" (or "gmake" on BSD). You won't need much installed; here are the requirements for various platforms:
* **Mac**: Xcode command line tools. It should build on OSX 10.7 or newer.
* **Linux**: gcc/g++ (4.9 or newer recommended) or clang/clang++ (3.4 or newer recommended) Makefile will use clang by default if available. The Linux build will auto-detect the presence of development headers for *json-parser*, *http-parser*, *li8bnatpmp*, and *libminiupnpc* and will link against the system libraries for these if they are present and recent enough. Otherwise the bundled versions in [ext/](ext/) will be used. Type `make install` to install the binaries and other files on the system, though this will not create init.d or systemd links.
* **FreeBSD**: C++ compiler (G++ usually) and GNU make (gmake).
Each supported platform has its own *make-XXX.mk* file that contains the actual make rules for the platform. The right .mk file is included by the main Makefile based on the GNU make *OSTYPE* variable. Take a look at the .mk file for your platform for other targets, debug build rules, etc.
- **Mac**
- Xcode command line tools for OSX 10.8 or newer are required.
- **Linux**
- The minimum compiler versions required are GCC/G++ 4.9.3 or CLANG/CLANG++ 3.4.2. (Install `clang` on CentOS 7 as G++ is too old.)
- Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line.
- **Windows**
- Windows 7 or newer is supported. This *may* work on Vista but isn't officially supported there. It will not work on Windows XP.
- We build with Visual Studio 2017. Older versions may not work. Clang or MinGW will also probably work but may require some makefile hacking.
- **FreeBSD**
- GNU make is required. Type `gmake` to build.
- **OpenBSD**
- There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through `/dev/tap3`).
- GNU make is required. Type `gmake` to build.
Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few aspects of the build environment. It's a good idea to try this on novel platforms or architectures.
Windows, of course, is special. We build for Windows with Microsoft Visual Studio 2012 on Windows 7. A solution file is located in the *windows/* subfolder. Newer versions of Visual Studio (and Windows) may work but haven't been tested. Older versions almost certainly will not, since they lack things like *stdint.h* and certain STL features. MinGW or other ports of gcc/clang to Windows should also work but haven't been tested.
32 and 64 bit X86 and ARM (e.g. Raspberry Pi, Android) are officially supported. Community members have built for MIPS and Sparc without issues.
### Running
Running *zerotier-one* with -h will show help.
@ -62,7 +77,7 @@ The service is controlled via the JSON API, which by default is available at 127
Here's where home folders live (by default) on each OS:
* **Linux**: `/var/lib/zerotier-one`
* **FreeBSD**: `/var/db/zerotier-one`
* **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one`
* **Mac**: `/Library/Application Support/ZeroTier/One`
* **Windows**: `\ProgramData\ZeroTier\One` (That's for Windows 7. The base 'shared app data' folder might be different on different Windows versions.)
@ -72,7 +87,7 @@ Running ZeroTier One on a Mac is the same, but OSX requires a kernel extension.
This will create the home folder for Mac, place *tap.kext* there, and set its modes correctly to enable ZeroTier One to manage it with *kextload* and *kextunload*.
### Troubleshooting
### Basic Troubleshooting
For most users, it just works.
@ -88,14 +103,6 @@ ZeroTier One peers will automatically locate each other and communicate directly
Users behind certain types of firewalls and "symmetric" NAT devices may not able able to connect to external peers directly at all. ZeroTier has limited support for port prediction and will *attempt* to traverse symmetric NATs, but this doesn't always work. If P2P connectivity fails you'll be bouncing UDP packets off our relay servers resulting in slower performance. Some NAT router(s) have a configurable NAT mode, and setting this to "full cone" will eliminate this problem. If you do this you may also see a magical improvement for things like VoIP phones, Skype, BitTorrent, WebRTC, certain games, etc., since all of these use NAT traversal techniques similar to ours.
If you're interested, there's a [technical deep dive about NAT traversal on our blog](https://www.zerotier.com/blog/?p=226). A troubleshooting tool to help you diagnose NAT issues is planned for the future as are uPnP/IGD/NAT-PMP and IPv6 transport.
If a firewall between you and the Internet blocks ZeroTier's UDP traffic, you will fall back to last-resort TCP tunneling to rootservers over port 443 (https impersonation). This will work almost anywhere but is *very slow* compared to UDP or direct peer to peer connectivity.
### Contributing
Please make pull requests against the `dev` branch. The `master` branch is release, and `edge` is for unstable and work in progress changes and is not likely to work.
### License
The ZeroTier source code is open source and is licensed under the GNU GPL v3 (not LGPL). If you'd like to embed it in a closed-source commercial product or appliance, please e-mail [contact@zerotier.com](mailto:contact@zerotier.com) to discuss commercial licensing. Otherwise it can be used for free.
Additional help [can be found in our knowledge base](https://zerotier.atlassian.net/wiki/spaces/SD/overview).

270
RELEASE-NOTES.md Normal file
View File

@ -0,0 +1,270 @@
ZeroTier Release Notes
======
# Version 1.9.0 (2.0 beta)
Version 2.0 is a very significant release with many changes. It remains backward compatibility to version 1.4.0 (and possibly earlier versions but this is not guaranteed) but makes numerous local and behavioral changes that should be reviewed before upgrading production systems.
After this release we're going to be working to get to a more frequent, less extreme, more "agile" release cadence.
Protocol changes:
* Trusted paths have been completely removed. The new AES mode is so fast on CPUs with AES acceleration that much of the rationale for this is gone, and this feature was never used much to begin with due to inconvenience and obvious security concerns. Environments using trusted paths will need to upgrade all nodes at once.
* The symmetric encryption algorithm and mode is now AES-GMAC-SIV, a variation of AES-GCM using the same primitives but offering superior security bounds and behavior under non-ideal conditions. It's also a lot faster than Salsa20/12 and Poly1305 on CPUs with AES acceleration (almost all desktops, laptops, and newer routers and phones). Salsa20/12 with Poly1305 is still supported for communication with older versions and small devices that lack AES acceleration.
* A new identity type (1) has been introduced that contains both Curve25519 and NIST P-384 public key types, but classic type 0 remains the default for new identities for now. ECDH key agreement between V1 identities uses both keys and hashes the resulting secrets to yield security equal to the best of the two, but V1 identities can also agree with V0 identities using only their Curve25519 component.
* Roots can now be joined and left like networks in a much more convenient way, and the old "moon" and "planet" terminology is deprecated.
* A new peer to peer multicast algorithm has been introduced that offers much better scalability and better performance, especially when the physical network itself is hub-and-spoke with many low latency peers connected by higher latency WAN links.
* Forward secrecy is finally supported via periodic re-keying using ephemeral asymmetric keys. Both Curve25519 and NIST P-384 keys are used with secrets being hashed to provide security equal to the stronger of the two curves.
* As part of forward secrecy implementation peers now always exchange HELLO messages even if they don't have a direct path.
* Compression is only enabled for control packets as almost all data packets are largely un-compressable.
* New NAT traversal tricks have been added, such as (ab)use of port 500.
Code changes:
* Migrated from GNU make to cmake for easier cross platform builds and simplified build files.
* The core network hypervisor has been significantly refactored, almost amounting to a partial rewrite.
* Critical packet handling paths have been streamlined with unnecessary memcpy() steps removed.
* Host service code has been completely rewritten in Go. Packet handling code remains in C++, but Go offers superior developer productivity when it comes to implementing more complex local service and local API features. Go imposes a little bit more memory overhead but not much and has been tuned to minimize memory use.
User interface:
* Command line interface has been redesigned and rewritten. Old commands names are supported but their output will be different.
Other things:
* The V2 design, protocol, and cryptographic primitives (AES-GMAC-SIV) have been security audited by [Trail of Bits](https://www.trailofbits.com), and the code is being audited as well prior to full 2.0 release.
---
# Older version release notes
# 2019-08-30 -- Version 1.4.6
* Update default root list to latest
* ARM32 platform build and flag fixes
* Add a clarification line to LICENSE.txt
* Fix license message in CLI
* Windows service now looks for service command line arguments
* Fixed a bug that could cause excessive queued multicasts
# 2019-08-23 -- Version 1.4.4
* Change license from GPL3 to BSL 1.1, see LICENSE.txt
* Fix an issue with the "ipauth" rule and auto-generated unforgeable IPv6 addresses
* Fix socket/bind errors setting IPs and routes on Linux
# 2019-08-12 -- Version 1.4.2
* Fix high CPU use bug on some platforms
* Fix issues with PostgreSQL controller DB (only affects Central)
* Restore backward compatibility with MacOS versions prior to 10.13
# 2019-07-29 -- Version 1.4.0
### Major Changes
* Mac version no longer requires a kernel extension, instead making use of the [feth interfaces](https://apple.stackexchange.com/questions/337715/fake-ethernet-interfaces-feth-if-fake-anyone-ever-seen-this).
* Added support for concurrent multipath (multiple paths at once) with traffic weighting by link quality and faster recovery from lost links.
* Added under-the-hood support for QoS (not yet exposed) that will eventually be configurable via our rules engine.
### Minor Changes and Bug Fixes
* Experimental controller DB driver for [LF](https://github.com/zerotier/lf) to store network controller data (LFDB.cpp / LFDB.hpp).
* Modified credential push and direct path push timings and algorithms to somewhat reduce "chattiness" of the protocol when idle. More radical background overhead reductions will have to wait for the 2.x line.
* Removed our beta/half-baked integration of Central with the Windows UI. We're going to do a whole new UI of some kind in the future at least for Windows and Mac.
* Fixed stack overflow issues on Linux versions using musl libc.
* Fixed some alignment problems reported on ARM and ARM64, but some reports we could not reproduce so please report any issues with exact chip, OS/distro, and ZeroTier version in use.
* Fixed numerous other small issues and bugs such as ARM alignment issues causing crashes on some devices.
* Windows now sets the adapter name such that it is consistent in both the Windows UI and command line utilities.
# 2018-07-27 -- Version 1.2.12
* Fixed a bug that caused exits to take a long time on Mac due to huge numbers of redundant attempts to delete managed routes.
* Fixed a socket limit problem on Windows that caused the ZeroTier service to run out of sockets, causing the UI and CLI to be unable to access the API.
* Fixed a threading bug in the ZeroTier Core, albeit one that never manifested on the regular ZeroTier One service/client.
* Fixed a bug that could cause the service to crash if an authorized local client accessed an invalid URL via the control API. (Not exploitable since you needed admin access anyway.)
# 2018-05-08 -- Version 1.2.10
* Fix bug loading `moons.d/` files for federated root operation.
* Fix compile problem with ZT_DEBUG on some versions of `clang`
* Fix slow network startup bug related to loading of `networks.d/` cache files
# 2018-04-27 -- Version 1.2.8
* Linux version once again builds with PIE (position independent executable) flags
* Fixed bug in zerotier-idtool file sign and verify
* Fixed minor OSX app typo
* Merged alpha NetBSD support (mostly untested, so YMMV)
* Merged several minor typo and one-liner bug fixes
# 2018-04-17 -- Version 1.2.6
* Features and Core Improvements
* Path selection has been overhauled to improve path stability, simplify code, and prepare for multi-path and trunking in the next major release.
* This version introduces remote tracing for remote diagnostics. Network controllers can set a node (usually the controller itself) to receive remote tracing events from all members of the network or from select members. Events are only sent if they pertain to a given network for security reasons.
* Multicast replication can now be done by designated multicast replicators on a network (flagged as such at the controller) rather than by the sender. Most users won't want this, but it's useful for specialized use cases on hub-and-spoke networks and for low-power devices.
* Cryptographic performance improvements on several platforms.
* Multithreaded performance improvements throughout the code base, including the use of an inline lightweight spinlock for low-contention resources.
* Bugs fixed
* Disappearing routes on Mac (GitHub issue #600)
* Route flapping and path instability in some dual-stack V4/V6 networks
* Blacklist (in local.conf) doesn't work reliably (GitHub issue #656)
* Connection instabilities due to unsigned integer overflows in timing comparisons (use int64_t instead of uint64_t)
* Binaries don't run on some older or lower-end 32-bit ARM chips (build problem)
* ARM NEON crypto code crashes (build problem)
* Fixed some lock ordering issues revealed by "valgrind" tool
* The "zerotier-idtool" command could not be accessed from "zerotier-one" via command line switch
* Leaking sockets on some platforms when uPnP/NAT-PMP is enabled
* Fixed two very rare multithreading issues that were only observed on certain systems
* Platform-Specific Changes
* MacOS
* Installer now loads the kernel extension right away so that High Sierra users will see the prompt to authorize it. This is done in the "Security & Privacy" preference pane and must be done directly on the console (not via remote desktop). On High Sierra and newer kexts must be authorized at the console via security settings system preferences pane.
* Windows
* The Windows installer should now install the driver without requiring a special prompt in most cases. This should make it easier for our packages to be accepted into and updated in the Chocolatey repository and should make it easier to perform remote installs across groups of machines using IT management and provisioning tools.
* The Windows official packages are now signed with an EV certificate (with hardware key).
* The Windows UI can now log into ZeroTier Central and join networks via the Central API.
* The `zerotier-idtool` command should now work on Windows without ugly hacks.
* Upgraded the installer version.
* Made a few changes to hopefully fix sporadic "will not uninstall" problems, though we cannot duplicate these issues ourselves.
* Linux
* Device names are now generated deterministically based on network IDs for all newly joined networks.
* Android
* Multicast now works on Android in most cases! Android apps can send and receive multicast and subscribe to multicast group IPs. Note that in some cases the app must bind to the specific correct interface for this to work.
* IPv6 can be disabled in UI for cases where it causes problems.
# 2017-04-20 -- Version 1.2.4
* Managed routes are now only bifurcated for the default route. This is a change in behavior, though few people will probably notice. Bifurcating all managed routes was causing more trouble than it was worth for most users.
* Up to 2X crypto speedup on x86-64 (except Windows, which will take some porting) and 32-bit ARM platforms due to integration of fast assembly language implementations of Salsa20/12 from the [supercop](http://bench.cr.yp.to/supercop.html) code base. These were written by Daniel J. Bernstein and are in the public domain. My Macbook Pro (Core i5 2.8ghz) now does almost 1.5GiB/sec Salsa20/12 per core and a Raspberry Pi got a 2X boost. 64-bit ARM support and Windows support will take some work but should not be too hard.
* Refactored code that manages credentials to greatly reduce memory use in most cases. This may also result in a small performance improvement.
* Reworked and simplified path selection and priority logic to fix path instability and dead path persistence edge cases. There have been some sporadic reports of persistent path instabilities and dead paths hanging around that take minutes to resolve. These have proven difficult to reproduce in house, but hopefully this will fix them. In any case it seems to speed up path establishment in our tests and it makes the code simpler and more readable.
* Eliminated some unused cruft from the code around path management and in the peer class.
* Fixed an issue causing build problems on some MIPS architecture systems.
* Fixed Windows forgetting routes on sleep/wake or in some other circumstances. (GitHub issue #465)
# 2017-03-17 -- Version 1.2.2
* A bug causing unreliable multicast propagation (GitHub issue #461).
* A crash in ARM binaries due to a build chain and flags problem.
* A bug in the network controller preventing members from being listed (GitHub issue #460).
# 2017-03-14 -- Version 1.2.0
Version 1.2.0 is a major milestone release representing almost nine months of work. It includes our rules engine for distributed network packet filtering and security monitoring, federated roots, and many other architectural and UI improvements and bug fixes.
## New Features in 1.2.0
### The ZeroTier Rules Engine
The largest new feature in 1.2.0, and the product of many months of work, is our advanced network rules engine. With this release we achieve traffic control, security monitoring, and micro-segmentation capability on par with many enterprise SDN solutions designed for use in advanced data centers and corporate networks.
Rules allow you to filter packets on your network and vector traffic to security observers. Security observation can be performed in-band using REDIRECT or out of band using TEE.
Tags and capabilities provide advanced methods for implementing fine grained permission structures and micro-segmentation schemes without bloating the size and complexity of your rules table.
See the [rules engine announcement blog post](https://www.zerotier.com/blog/?p=927) for an in-depth discussion of theory and implementation. The [manual](https://www.zerotier.com/manual.shtml) contains detailed information on rule, tag, and capability use, and the `rule-compiler/` subfolder of the ZeroTier source tree contains a JavaScript function to compile rules in our human-readable rule definition language into rules suitable for import into a network controller. (ZeroTier Central uses this same script to compile rules on [my.zerotier.com](https://my.zerotier.com/).)
### Root Server Federation
It's now possible to create your own root servers and add them to the root server pool on your nodes. This is done by creating what's called a "moon," which is a signed enumeration of root servers and their stable points on the network. Refer to the [manual](https://www.zerotier.com/manual.shtml) for instructions.
Federated roots achieve a number of things:
* You can deploy your own infrastructure to reduce dependency on ours.
* You can deploy roots *inside your LAN* to ensure that network connectivity inside your facility still works if the Internet goes down. This is the first step toward making ZeroTier viable as an in-house SDN solution.
* Roots can be deployed inside national boundaries for countries with data residency laws or "great firewalls." (As of 1.2.0 there is still no way to force all traffic to use these roots, but that will be easy to do in a later version.)
* Last but not least this makes ZeroTier somewhat less centralized by eliminating any hard dependency on ZeroTier, Inc.'s infrastructure.
Our roots will of course remain and continue to provide zero-configuration instant-on deployment, a secure global authority for identities, and free traffic relaying for those who can't establish peer to peer connections.
### Local Configuration
An element of our design philosophy is "features are bugs." This isn't an absolute dogma but more of a guiding principle. We try as hard as we can to avoid adding features, especially "knobs" that must be tweaked by a user.
As of 1.2.0 we've decided that certain knobs are unavoidable, and so there is now a `local.conf` file that can be used to configure them. See the ZeroTier One documentation for these. They include:
* Blacklisting interfaces you want to make sure ZeroTier doesn't use for network traffic, such as VPNs, slow links, or backplanes designated for only certain kinds of traffic.
* Turning uPnP/NAT-PMP on or off.
* Configuring software updates on Windows and Mac platforms.
* Defining trusted paths (the old trusted paths file is now deprecated)
* Setting the ZeroTier main port so it doesn't have to be changed on the command line, which is very inconvenient in many cases.
### Improved In-Band Software Updates
A good software update system for Windows and Mac clients has been a missing feature in previous versions. It does exist but we've been shy about using it so far due to its fragility in some environments.
We've greatly improved this mechanism in 1.2.0. Not only does it now do a better job of actually invoking the update, but it also transfers updates in-band using the ZeroTier protocol. This means it can work in environments that do not allows http/https traffic or that force it through proxies. There's also now an update channel setting: `beta` or `release` (the default).
Software updates are authenticated three ways:
1. ZeroTier's own signing key is used to sign all updates and this signature is checked prior to installation. ZeroTier, Inc.'s signatures are performed on an air-gapped machine.
2. Updates for Mac and Windows are signed using Apple and Microsoft (DigiCert EV) keys and will not install unless these signatures are also valid.
3. The new in-band update mechanism also authenticates the source of the update via ZeroTier's built-in security features. This provides transport security, while 1 and 2 provide security of the update at rest.
Updates are now configurable via `local.conf`. There are three options: `disable`, `download`, and `apply`. The third (apply) is the default for official builds on Windows and Mac, making updates happen silently and automatically as they do for popular browsers like Chrome and Firefox. Updates are disabled by default on Linux and other Unix-type systems as these are typically updated through package managers.
### Path Link Quality Awareness
Version 1.2.0 is now aware of the link quality of direct paths with other 1.2.0 nodes. This information isn't used yet but is visible through the JSON API. (Quality always shows as 100% with pre-1.2.0 nodes.) Quality is measured passively with no additional overhead using a counter based packet loss detection algorithm.
This information is visible from the command line via `listpeers`:
200 listpeers XXXXXXXXXX 199.XXX.XXX.XXX/9993;10574;15250;1.00 48 1.2.0 LEAF
200 listpeers XXXXXXXXXX 195.XXX.XXX.XXX/45584;467;7608;0.44 290 1.2.0 LEAF
The first peer's path is at 100% (1.00), while the second peer's path is suffering quite a bit of packet loss (0.44).
Link quality awareness is a precursor to intelligent multi-path and QoS support, which will in future versions bring us to feature parity with SD-WAN products like Cisco iWAN.
### Security Improvements
Version 1.2.0 adds anti-DOS (denial of service) rate limits and other hardening for improved resiliency against a number of denial of service attack scenarios.
It also adds a mechanism for instantaneous credential revocation. This can be used to revoke certificates of membership instantly to kick a node off a network (for private networks) and also to revoke capabilities and tags. The new controller sends revocations by default when a peer is de-authorized.
Revocations propagate using a "rumor mill" peer to peer algorithm. This means that a controller need only successfully send a revocation to at least one member of a network with connections to other active members. At this point the revocation will flood through the network peer to peer very quickly. This helps make revocations more robust in the face of poor connectivity with the controller or attempts to incapacitate the controller with denial of service attacks, as well as making revocations faster on huge networks.
### Windows and Macintosh UI Improvements (ZeroTier One)
The Mac has a whole new UI built natively in Objective-C. It provides a pulldown similar in appearance and operation to the Mac WiFi task bar menu.
The Windows UI has also been improved and now provides a task bar icon that can be right-clicked to manage networks. Both now expose managed route and IP permissions, allowing nodes to easily opt in to full tunnel operation if you have a router configured on your network.
### Ad-Hoc Networks
A special kind of public network called an ad-hoc network may be accessed by joining a network ID with the format:
ffSSSSEEEE000000
| | | |
| | | Reserved for future use, must be 0
| | End of port range (hex)
| Start of port range (hex)
Reserved ZeroTier address prefix indicating a controller-less network
Ad-hoc networks are public (no access control) networks that have no network controller. Instead their configuration and other credentials are generated locally. Ad-hoc networks permit only IPv6 UDP and TCP unicast traffic (no multicast or broadcast) using 6plane format NDP-emulated IPv6 addresses. In addition an ad-hoc network ID encodes an IP port range. UDP packets and TCP SYN (connection open) packets are only allowed to destination ports within the encoded range.
For example `ff00160016000000` is an ad-hoc network allowing only SSH, while `ff0000ffff000000` is an ad-hoc network allowing any UDP or TCP port.
Keep in mind that these networks are public and anyone in the entire world can join them. Care must be taken to avoid exposing vulnerable services or sharing unwanted files or other resources.
### Network Controller (Partial) Rewrite
The network controller has been largely rewritten to use a simple in-filesystem JSON data store in place of SQLite, and it is now included by default in all Windows, Mac, Linux, and BSD builds. This means any desktop or server node running ZeroTier One can now be a controller with no recompilation needed.
If you have data in an old SQLite3 controller we've included a NodeJS script in `controller/migrate-sqlite` to migrate data to the new format. If you don't migrate, members will start getting `NOT_FOUND` when they attempt to query for updates.
## Major Bug Fixes in 1.2.0
* **The Windows HyperV 100% CPU bug is FINALLY DEAD**: This long-running problem turns out to have been an issue with Windows itself, but one we were triggering by placing invalid data into the Windows registry. Microsoft is aware of the issue but we've also fixed the triggering problem on our side. ZeroTier should now co-exist quite well with HyperV and should now be able to be bridged with a HyperV virtual switch.
* **Segmentation faults on musl-libc based Linux systems**: Alpine Linux and some embedded Linux systems that use musl libc (a minimal libc) experienced segmentation faults. These were due to a smaller default stack size. A work-around that sets the stack size for new threads has been added.
* **Windows firewall blocks local JSON API**: On some Windows systems the firewall likes to block 127.0.0.1:9993 for mysterious reasons. This is now fixed in the installer via the addition of another firewall exemption rule.
* **UI crash on embedded Windows due to missing fonts**: The MSI installer now ships fonts and will install them if they are not present, so this should be fixed.
## Other Improvements in 1.2.0
* **Improved dead path detection**: ZeroTier is now more aggressive about expiring paths that do not seem to be active. If a path seems marginal it is re-confirmed before re-use.
* **Minor performance improvements**: We've reduced unnecessary memcpy's and made a few other performance improvements in the core.
* **Linux static binaries**: For our official packages (the ones in the download.zerotier.com apt and yum repositories) we now build Linux binaries with static linking. Hopefully this will stop all the bug reports relating to library inconsistencies, as well as allowing our deb packages to run on a wider variety of Debian-based distributions. (There are far too many of these to support officially!) The overhead for this is very small, especially since we built our static versions against musl-libc. Distribution maintainers are of course free to build dynamically linked versions for inclusion into distributions; this only affects our official binaries.

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
artwork/AppIcon_20x20.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

BIN
artwork/AppIcon_60x60.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
artwork/AppIcon_90x90.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -1,408 +0,0 @@
/*
* ZeroTier One - Network Virtualization Everywhere
* Copyright (C) 2011-2015 ZeroTier, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <algorithm>
#include "RuntimeEnvironment.hpp"
#include "Logger.hpp"
#include "Filter.hpp"
#include "Utils.hpp"
namespace ZeroTier {
const char *const Filter::UNKNOWN_NAME = "(unknown)";
const Range<unsigned int> Filter::ANY;
static inline Range<unsigned int> __parseRange(char *r)
throw(std::invalid_argument)
{
char *saveptr = (char *)0;
unsigned int a = 0;
unsigned int b = 0;
unsigned int fn = 0;
for(char *f=Utils::stok(r,"-",&saveptr);(f);f=Utils::stok((char *)0,"-",&saveptr)) {
if (*f) {
switch(fn++) {
case 0:
if (*f != '*')
a = b = (unsigned int)strtoul(f,(char **)0,10);
break;
case 1:
if (*f != '*')
b = (unsigned int)strtoul(f,(char **)0,10);
break;
default:
throw std::invalid_argument("rule range must be <int>, <int>-<int>, or *");
}
}
}
return Range<unsigned int>(a,b);
}
Filter::Rule::Rule(const char *s)
throw(std::invalid_argument)
{
char *saveptr = (char *)0;
char tmp[256];
if (!Utils::scopy(tmp,sizeof(tmp),s))
throw std::invalid_argument("rule string too long");
unsigned int fn = 0;
for(char *f=Utils::stok(tmp,";",&saveptr);(f);f=Utils::stok((char *)0,";",&saveptr)) {
if (*f) {
switch(fn++) {
case 0:
_etherType = __parseRange(f);
break;
case 1:
_protocol = __parseRange(f);
break;
case 2:
_port = __parseRange(f);
break;
default:
throw std::invalid_argument("rule string has unknown extra fields");
}
}
}
if (fn != 3)
throw std::invalid_argument("rule string must contain 3 fields");
}
bool Filter::Rule::operator()(unsigned int etype,const void *data,unsigned int len) const
throw(std::invalid_argument)
{
if ((!_etherType)||(_etherType(etype))) { // ethertype is ANY, or matches
// Ethertype determines meaning of protocol and port
switch(etype) {
case ZT_ETHERTYPE_IPV4:
if (len > 20) {
if ((!_protocol)||(_protocol(((const uint8_t *)data)[9]))) { // protocol is ANY or match
if (!_port) // port is ANY
return true;
// Don't match on fragments beyond fragment 0. If we've blocked
// fragment 0, further fragments will fall on deaf ears anyway.
if ((Utils::ntoh(((const uint16_t *)data)[3]) & 0x1fff))
return false;
// Internet header length determines where data begins, in multiples of 32 bits
unsigned int ihl = 4 * (((const uint8_t *)data)[0] & 0x0f);
switch(((const uint8_t *)data)[9]) { // port's meaning depends on IP protocol
case ZT_IPPROTO_ICMP:
// For ICMP, port is ICMP type
return _port(((const uint8_t *)data)[ihl]);
case ZT_IPPROTO_TCP:
case ZT_IPPROTO_UDP:
case ZT_IPPROTO_SCTP:
case ZT_IPPROTO_UDPLITE:
// For these, port is destination port. Protocol designers were
// nice enough to put the field in the same place.
return _port(((const uint16_t *)data)[(ihl / 2) + 1]);
default:
// port has no meaning for other IP types, so ignore it
return true;
}
return false; // no match on port
}
} else throw std::invalid_argument("undersized IPv4 packet");
break;
case ZT_ETHERTYPE_IPV6:
if (len > 40) {
int nextHeader = ((const uint8_t *)data)[6];
unsigned int pos = 40;
while ((pos < len)&&(nextHeader >= 0)&&(nextHeader != 59)) { // 59 == no next header
fprintf(stderr,"[rule] V6: start header parse, header %.2x pos %d\n",nextHeader,pos);
switch(nextHeader) {
case 0: // hop-by-hop options
case 60: // destination options
case 43: // routing
case 135: // mobility (mobile IPv6 options)
if (_protocol((unsigned int)nextHeader))
return true; // match if our goal was to match any of these
nextHeader = ((const uint8_t *)data)[pos];
pos += 8 + (8 * ((const uint8_t *)data)[pos + 1]);
break;
case 44: // fragment
if (_protocol(44))
return true; // match if our goal was to match fragments
nextHeader = ((const uint8_t *)data)[pos];
pos += 8;
break;
case ZT_IPPROTO_AH: // AH
return _protocol(ZT_IPPROTO_AH); // true if AH is matched protocol, otherwise false since packet will be IPsec
case ZT_IPPROTO_ESP: // ESP
return _protocol(ZT_IPPROTO_ESP); // true if ESP is matched protocol, otherwise false since packet will be IPsec
case ZT_IPPROTO_ICMPV6:
// Only match ICMPv6 if we've selected it specifically
if (_protocol(ZT_IPPROTO_ICMPV6)) {
// Port is interpreted as ICMPv6 type
if ((!_port)||(_port(((const uint8_t *)data)[pos])))
return true;
}
break;
case ZT_IPPROTO_TCP:
case ZT_IPPROTO_UDP:
case ZT_IPPROTO_SCTP:
case ZT_IPPROTO_UDPLITE:
// If we encounter any of these, match if protocol matches or is wildcard as
// we'll consider these the "real payload" if present.
if ((!_protocol)||(_protocol(nextHeader))) {
if ((!_port)||(_port(((const uint16_t *)data)[(pos / 2) + 1])))
return true; // protocol matches or is ANY, port is ANY or matches
}
break;
default: {
char foo[128];
Utils::snprintf(foo,sizeof(foo),"unrecognized IPv6 header type %d",(int)nextHeader);
throw std::invalid_argument(foo);
}
}
fprintf(stderr,"[rule] V6: end header parse, next header %.2x, new pos %d\n",nextHeader,pos);
}
} else throw std::invalid_argument("undersized IPv6 packet");
break;
default:
// For other ethertypes, protocol and port are ignored. What would they mean?
return true;
}
}
return false;
}
std::string Filter::Rule::toString() const
{
char buf[128];
std::string s;
switch(_etherType.magnitude()) {
case 0:
s.push_back('*');
break;
case 1:
Utils::snprintf(buf,sizeof(buf),"%u",_etherType.start);
s.append(buf);
break;
default:
Utils::snprintf(buf,sizeof(buf),"%u-%u",_etherType.start,_etherType.end);
s.append(buf);
break;
}
s.push_back(';');
switch(_protocol.magnitude()) {
case 0:
s.push_back('*');
break;
case 1:
Utils::snprintf(buf,sizeof(buf),"%u",_protocol.start);
s.append(buf);
break;
default:
Utils::snprintf(buf,sizeof(buf),"%u-%u",_protocol.start,_protocol.end);
s.append(buf);
break;
}
s.push_back(';');
switch(_port.magnitude()) {
case 0:
s.push_back('*');
break;
case 1:
Utils::snprintf(buf,sizeof(buf),"%u",_port.start);
s.append(buf);
break;
default:
Utils::snprintf(buf,sizeof(buf),"%u-%u",_port.start,_port.end);
s.append(buf);
break;
}
return s;
}
Filter::Filter(const char *s)
throw(std::invalid_argument)
{
char tmp[16384];
if (!Utils::scopy(tmp,sizeof(tmp),s))
throw std::invalid_argument("filter string too long");
char *saveptr = (char *)0;
unsigned int fn = 0;
for(char *f=Utils::stok(tmp,",",&saveptr);(f);f=Utils::stok((char *)0,",",&saveptr)) {
try {
_rules.push_back(Rule(f));
++fn;
} catch (std::invalid_argument &exc) {
char tmp[256];
Utils::snprintf(tmp,sizeof(tmp),"invalid rule at index %u: %s",fn,exc.what());
throw std::invalid_argument(tmp);
}
}
std::sort(_rules.begin(),_rules.end());
}
std::string Filter::toString() const
{
std::string s;
for(std::vector<Rule>::const_iterator r(_rules.begin());r!=_rules.end();++r) {
if (s.length() > 0)
s.push_back(',');
s.append(r->toString());
}
return s;
}
void Filter::add(const Rule &r)
{
for(std::vector<Rule>::iterator rr(_rules.begin());rr!=_rules.end();++rr) {
if (r == *rr)
return;
}
_rules.push_back(r);
std::sort(_rules.begin(),_rules.end());
}
const char *Filter::etherTypeName(const unsigned int etherType)
throw()
{
switch(etherType) {
case ZT_ETHERTYPE_IPV4: return "ETHERTYPE_IPV4";
case ZT_ETHERTYPE_ARP: return "ETHERTYPE_ARP";
case ZT_ETHERTYPE_RARP: return "ETHERTYPE_RARP";
case ZT_ETHERTYPE_ATALK: return "ETHERTYPE_ATALK";
case ZT_ETHERTYPE_AARP: return "ETHERTYPE_AARP";
case ZT_ETHERTYPE_IPX_A: return "ETHERTYPE_IPX_A";
case ZT_ETHERTYPE_IPX_B: return "ETHERTYPE_IPX_B";
case ZT_ETHERTYPE_IPV6: return "ETHERTYPE_IPV6";
}
return UNKNOWN_NAME;
}
const char *Filter::ipProtocolName(const unsigned int ipp)
throw()
{
switch(ipp) {
case ZT_IPPROTO_ICMP: return "IPPROTO_ICMP";
case ZT_IPPROTO_IGMP: return "IPPROTO_IGMP";
case ZT_IPPROTO_TCP: return "IPPROTO_TCP";
case ZT_IPPROTO_UDP: return "IPPROTO_UDP";
case ZT_IPPROTO_GRE: return "IPPROTO_GRE";
case ZT_IPPROTO_ESP: return "IPPROTO_ESP";
case ZT_IPPROTO_AH: return "IPPROTO_AH";
case ZT_IPPROTO_ICMPV6: return "IPPROTO_ICMPV6";
case ZT_IPPROTO_OSPF: return "IPPROTO_OSPF";
case ZT_IPPROTO_IPIP: return "IPPROTO_IPIP";
case ZT_IPPROTO_IPCOMP: return "IPPROTO_IPCOMP";
case ZT_IPPROTO_L2TP: return "IPPROTO_L2TP";
case ZT_IPPROTO_SCTP: return "IPPROTO_SCTP";
case ZT_IPPROTO_FC: return "IPPROTO_FC";
case ZT_IPPROTO_UDPLITE: return "IPPROTO_UDPLITE";
case ZT_IPPROTO_HIP: return "IPPROTO_HIP";
}
return UNKNOWN_NAME;
}
const char *Filter::icmpTypeName(const unsigned int icmpType)
throw()
{
switch(icmpType) {
case ZT_ICMP_ECHO_REPLY: return "ICMP_ECHO_REPLY";
case ZT_ICMP_DESTINATION_UNREACHABLE: return "ICMP_DESTINATION_UNREACHABLE";
case ZT_ICMP_SOURCE_QUENCH: return "ICMP_SOURCE_QUENCH";
case ZT_ICMP_REDIRECT: return "ICMP_REDIRECT";
case ZT_ICMP_ALTERNATE_HOST_ADDRESS: return "ICMP_ALTERNATE_HOST_ADDRESS";
case ZT_ICMP_ECHO_REQUEST: return "ICMP_ECHO_REQUEST";
case ZT_ICMP_ROUTER_ADVERTISEMENT: return "ICMP_ROUTER_ADVERTISEMENT";
case ZT_ICMP_ROUTER_SOLICITATION: return "ICMP_ROUTER_SOLICITATION";
case ZT_ICMP_TIME_EXCEEDED: return "ICMP_TIME_EXCEEDED";
case ZT_ICMP_BAD_IP_HEADER: return "ICMP_BAD_IP_HEADER";
case ZT_ICMP_TIMESTAMP: return "ICMP_TIMESTAMP";
case ZT_ICMP_TIMESTAMP_REPLY: return "ICMP_TIMESTAMP_REPLY";
case ZT_ICMP_INFORMATION_REQUEST: return "ICMP_INFORMATION_REQUEST";
case ZT_ICMP_INFORMATION_REPLY: return "ICMP_INFORMATION_REPLY";
case ZT_ICMP_ADDRESS_MASK_REQUEST: return "ICMP_ADDRESS_MASK_REQUEST";
case ZT_ICMP_ADDRESS_MASK_REPLY: return "ICMP_ADDRESS_MASK_REPLY";
case ZT_ICMP_TRACEROUTE: return "ICMP_TRACEROUTE";
case ZT_ICMP_MOBILE_HOST_REDIRECT: return "ICMP_MOBILE_HOST_REDIRECT";
case ZT_ICMP_MOBILE_REGISTRATION_REQUEST: return "ICMP_MOBILE_REGISTRATION_REQUEST";
case ZT_ICMP_MOBILE_REGISTRATION_REPLY: return "ICMP_MOBILE_REGISTRATION_REPLY";
}
return UNKNOWN_NAME;
}
const char *Filter::icmp6TypeName(const unsigned int icmp6Type)
throw()
{
switch(icmp6Type) {
case ZT_ICMP6_DESTINATION_UNREACHABLE: return "ICMP6_DESTINATION_UNREACHABLE";
case ZT_ICMP6_PACKET_TOO_BIG: return "ICMP6_PACKET_TOO_BIG";
case ZT_ICMP6_TIME_EXCEEDED: return "ICMP6_TIME_EXCEEDED";
case ZT_ICMP6_PARAMETER_PROBLEM: return "ICMP6_PARAMETER_PROBLEM";
case ZT_ICMP6_ECHO_REQUEST: return "ICMP6_ECHO_REQUEST";
case ZT_ICMP6_ECHO_REPLY: return "ICMP6_ECHO_REPLY";
case ZT_ICMP6_MULTICAST_LISTENER_QUERY: return "ICMP6_MULTICAST_LISTENER_QUERY";
case ZT_ICMP6_MULTICAST_LISTENER_REPORT: return "ICMP6_MULTICAST_LISTENER_REPORT";
case ZT_ICMP6_MULTICAST_LISTENER_DONE: return "ICMP6_MULTICAST_LISTENER_DONE";
case ZT_ICMP6_ROUTER_SOLICITATION: return "ICMP6_ROUTER_SOLICITATION";
case ZT_ICMP6_ROUTER_ADVERTISEMENT: return "ICMP6_ROUTER_ADVERTISEMENT";
case ZT_ICMP6_NEIGHBOR_SOLICITATION: return "ICMP6_NEIGHBOR_SOLICITATION";
case ZT_ICMP6_NEIGHBOR_ADVERTISEMENT: return "ICMP6_NEIGHBOR_ADVERTISEMENT";
case ZT_ICMP6_REDIRECT_MESSAGE: return "ICMP6_REDIRECT_MESSAGE";
case ZT_ICMP6_ROUTER_RENUMBERING: return "ICMP6_ROUTER_RENUMBERING";
case ZT_ICMP6_NODE_INFORMATION_QUERY: return "ICMP6_NODE_INFORMATION_QUERY";
case ZT_ICMP6_NODE_INFORMATION_RESPONSE: return "ICMP6_NODE_INFORMATION_RESPONSE";
case ZT_ICMP6_INV_NEIGHBOR_SOLICITATION: return "ICMP6_INV_NEIGHBOR_SOLICITATION";
case ZT_ICMP6_INV_NEIGHBOR_ADVERTISEMENT: return "ICMP6_INV_NEIGHBOR_ADVERTISEMENT";
case ZT_ICMP6_MLDV2: return "ICMP6_MLDV2";
case ZT_ICMP6_HOME_AGENT_ADDRESS_DISCOVERY_REQUEST: return "ICMP6_HOME_AGENT_ADDRESS_DISCOVERY_REQUEST";
case ZT_ICMP6_HOME_AGENT_ADDRESS_DISCOVERY_REPLY: return "ICMP6_HOME_AGENT_ADDRESS_DISCOVERY_REPLY";
case ZT_ICMP6_MOBILE_PREFIX_SOLICITATION: return "ICMP6_MOBILE_PREFIX_SOLICITATION";
case ZT_ICMP6_MOBILE_PREFIX_ADVERTISEMENT: return "ICMP6_MOBILE_PREFIX_ADVERTISEMENT";
case ZT_ICMP6_CERTIFICATION_PATH_SOLICITATION: return "ICMP6_CERTIFICATION_PATH_SOLICITATION";
case ZT_ICMP6_CERTIFICATION_PATH_ADVERTISEMENT: return "ICMP6_CERTIFICATION_PATH_ADVERTISEMENT";
case ZT_ICMP6_MULTICAST_ROUTER_ADVERTISEMENT: return "ICMP6_MULTICAST_ROUTER_ADVERTISEMENT";
case ZT_ICMP6_MULTICAST_ROUTER_SOLICITATION: return "ICMP6_MULTICAST_ROUTER_SOLICITATION";
case ZT_ICMP6_MULTICAST_ROUTER_TERMINATION: return "ICMP6_MULTICAST_ROUTER_TERMINATION";
case ZT_ICMP6_RPL_CONTROL_MESSAGE: return "ICMP6_RPL_CONTROL_MESSAGE";
}
return UNKNOWN_NAME;
}
} // namespace ZeroTier

View File

@ -1,284 +0,0 @@
/*
* ZeroTier One - Network Virtualization Everywhere
* Copyright (C) 2011-2015 ZeroTier, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#ifndef _ZT_FILTER_HPP
#define _ZT_FILTER_HPP
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <vector>
#include <utility>
#include <stdexcept>
#include "Range.hpp"
/* Ethernet frame types that might be relevant to us */
#define ZT_ETHERTYPE_IPV4 0x0800
#define ZT_ETHERTYPE_ARP 0x0806
#define ZT_ETHERTYPE_RARP 0x8035
#define ZT_ETHERTYPE_ATALK 0x809b
#define ZT_ETHERTYPE_AARP 0x80f3
#define ZT_ETHERTYPE_IPX_A 0x8137
#define ZT_ETHERTYPE_IPX_B 0x8138
#define ZT_ETHERTYPE_IPV6 0x86dd
/* IP protocols we might care about */
#define ZT_IPPROTO_ICMP 0x01
#define ZT_IPPROTO_IGMP 0x02
#define ZT_IPPROTO_TCP 0x06
#define ZT_IPPROTO_UDP 0x11
#define ZT_IPPROTO_GRE 0x2f
#define ZT_IPPROTO_ESP 0x32
#define ZT_IPPROTO_AH 0x33
#define ZT_IPPROTO_ICMPV6 0x3a
#define ZT_IPPROTO_OSPF 0x59
#define ZT_IPPROTO_IPIP 0x5e
#define ZT_IPPROTO_IPCOMP 0x6c
#define ZT_IPPROTO_L2TP 0x73
#define ZT_IPPROTO_SCTP 0x84
#define ZT_IPPROTO_FC 0x85
#define ZT_IPPROTO_UDPLITE 0x88
#define ZT_IPPROTO_HIP 0x8b
/* IPv4 ICMP types */
#define ZT_ICMP_ECHO_REPLY 0
#define ZT_ICMP_DESTINATION_UNREACHABLE 3
#define ZT_ICMP_SOURCE_QUENCH 4
#define ZT_ICMP_REDIRECT 5
#define ZT_ICMP_ALTERNATE_HOST_ADDRESS 6
#define ZT_ICMP_ECHO_REQUEST 8
#define ZT_ICMP_ROUTER_ADVERTISEMENT 9
#define ZT_ICMP_ROUTER_SOLICITATION 10
#define ZT_ICMP_TIME_EXCEEDED 11
#define ZT_ICMP_BAD_IP_HEADER 12
#define ZT_ICMP_TIMESTAMP 13
#define ZT_ICMP_TIMESTAMP_REPLY 14
#define ZT_ICMP_INFORMATION_REQUEST 15
#define ZT_ICMP_INFORMATION_REPLY 16
#define ZT_ICMP_ADDRESS_MASK_REQUEST 17
#define ZT_ICMP_ADDRESS_MASK_REPLY 18
#define ZT_ICMP_TRACEROUTE 30
#define ZT_ICMP_MOBILE_HOST_REDIRECT 32
#define ZT_ICMP_MOBILE_REGISTRATION_REQUEST 35
#define ZT_ICMP_MOBILE_REGISTRATION_REPLY 36
/* IPv6 ICMP types */
#define ZT_ICMP6_DESTINATION_UNREACHABLE 1
#define ZT_ICMP6_PACKET_TOO_BIG 2
#define ZT_ICMP6_TIME_EXCEEDED 3
#define ZT_ICMP6_PARAMETER_PROBLEM 4
#define ZT_ICMP6_ECHO_REQUEST 128
#define ZT_ICMP6_ECHO_REPLY 129
#define ZT_ICMP6_MULTICAST_LISTENER_QUERY 130
#define ZT_ICMP6_MULTICAST_LISTENER_REPORT 131
#define ZT_ICMP6_MULTICAST_LISTENER_DONE 132
#define ZT_ICMP6_ROUTER_SOLICITATION 133
#define ZT_ICMP6_ROUTER_ADVERTISEMENT 134
#define ZT_ICMP6_NEIGHBOR_SOLICITATION 135
#define ZT_ICMP6_NEIGHBOR_ADVERTISEMENT 136
#define ZT_ICMP6_REDIRECT_MESSAGE 137
#define ZT_ICMP6_ROUTER_RENUMBERING 138
#define ZT_ICMP6_NODE_INFORMATION_QUERY 139
#define ZT_ICMP6_NODE_INFORMATION_RESPONSE 140
#define ZT_ICMP6_INV_NEIGHBOR_SOLICITATION 141
#define ZT_ICMP6_INV_NEIGHBOR_ADVERTISEMENT 142
#define ZT_ICMP6_MLDV2 143
#define ZT_ICMP6_HOME_AGENT_ADDRESS_DISCOVERY_REQUEST 144
#define ZT_ICMP6_HOME_AGENT_ADDRESS_DISCOVERY_REPLY 145
#define ZT_ICMP6_MOBILE_PREFIX_SOLICITATION 146
#define ZT_ICMP6_MOBILE_PREFIX_ADVERTISEMENT 147
#define ZT_ICMP6_CERTIFICATION_PATH_SOLICITATION 148
#define ZT_ICMP6_CERTIFICATION_PATH_ADVERTISEMENT 149
#define ZT_ICMP6_MULTICAST_ROUTER_ADVERTISEMENT 151
#define ZT_ICMP6_MULTICAST_ROUTER_SOLICITATION 152
#define ZT_ICMP6_MULTICAST_ROUTER_TERMINATION 153
#define ZT_ICMP6_RPL_CONTROL_MESSAGE 155
namespace ZeroTier {
class RuntimeEnvironment;
/**
* A simple Ethernet frame level filter
*
* This doesn't specify actions, since it's used as a deny filter. The rule
* in ZT1 is "that which is not explicitly prohibited is allowed." (Except for
* ethertypes, which are handled by a whitelist.)
*/
class Filter
{
public:
/**
* Value returned by etherTypeName, etc. on unknown
*
* These static methods return precisely this, so a pointer equality
* check will work.
*/
static const char *const UNKNOWN_NAME;
/**
* An empty range as a more idiomatic way of specifying a wildcard match
*/
static const Range<unsigned int> ANY;
/**
* A filter rule
*/
class Rule
{
public:
Rule()
throw() :
_etherType(),
_protocol(),
_port()
{
}
/**
* Construct a rule from a string-serialized value
*
* @param s String formatted rule, such as returned by toString()
* @throws std::invalid_argument String formatted rule is not valid
*/
Rule(const char *s)
throw(std::invalid_argument);
/**
* Construct a new rule
*
* @param etype Ethernet type or empty range for ANY
* @param prot Protocol or empty range for ANY (meaning depends on ethertype, e.g. IP protocol numbers)
* @param prt Port or empty range for ANY (only applies to some protocols)
*/
Rule(const Range<unsigned int> &etype,const Range<unsigned int> &prot,const Range<unsigned int> &prt)
throw() :
_etherType(etype),
_protocol(prot),
_port(prt)
{
}
inline const Range<unsigned int> &etherType() const throw() { return _etherType; }
inline const Range<unsigned int> &protocol() const throw() { return _protocol; }
inline const Range<unsigned int> &port() const throw() { return _port; }
/**
* Test this rule against a frame
*
* @param etype Type of ethernet frame
* @param data Ethernet frame data
* @param len Length of ethernet frame
* @return True if rule matches
* @throws std::invalid_argument Frame invalid or not parseable
*/
bool operator()(unsigned int etype,const void *data,unsigned int len) const
throw(std::invalid_argument);
/**
* Serialize rule as string
*
* @return Human readable representation of rule
*/
std::string toString() const;
inline bool operator==(const Rule &r) const throw() { return ((_etherType == r._etherType)&&(_protocol == r._protocol)&&(_port == r._port)); }
inline bool operator!=(const Rule &r) const throw() { return !(*this == r); }
inline bool operator<(const Rule &r) const
throw()
{
if (_etherType < r._etherType)
return true;
else if (_etherType == r._etherType) {
if (_protocol < r._protocol)
return true;
else if (_protocol == r._protocol) {
if (_port < r._port)
return true;
}
}
return false;
}
inline bool operator>(const Rule &r) const throw() { return (r < *this); }
inline bool operator<=(const Rule &r) const throw() { return !(r < *this); }
inline bool operator>=(const Rule &r) const throw() { return !(*this < r); }
private:
Range<unsigned int> _etherType;
Range<unsigned int> _protocol;
Range<unsigned int> _port;
};
Filter() {}
/**
* @param s String-serialized filter representation
*/
Filter(const char *s)
throw(std::invalid_argument);
/**
* @return Comma-delimited list of string-format rules
*/
std::string toString() const;
/**
* Add a rule to this filter
*
* @param r Rule to add to filter
*/
void add(const Rule &r);
inline bool operator()(unsigned int etype,const void *data,unsigned int len) const
throw(std::invalid_argument)
{
for(std::vector<Rule>::const_iterator r(_rules.begin());r!=_rules.end();++r) {
if ((*r)(etype,data,len))
return true;
}
return false;
}
static const char *etherTypeName(const unsigned int etherType)
throw();
static const char *ipProtocolName(const unsigned int ipp)
throw();
static const char *icmpTypeName(const unsigned int icmpType)
throw();
static const char *icmp6TypeName(const unsigned int icmp6Type)
throw();
private:
std::vector<Rule> _rules;
};
} // namespace ZeroTier
#endif

View File

@ -0,0 +1,33 @@
ZeroTier Official Release Steps
======
This is mostly for ZeroTier internal use, but others who want to do builds might find it helpful.
Note: Many of these steps will require GPG and other signing keys that are kept in cold storage and must be mounted.
# Bumping the Version and Preparing Installers
The version must be incremented in all of the following files:
/version.h
/zerotier-one.spec
/debian/changelog
/ext/installfiles/mac/ZeroTier One.pkgproj
/ext/installfiles/windows/ZeroTier One.aip
/windows/WinUI/AboutView.xaml
The final .AIP file can only be edited on Windows with [Advanced Installer Enterprise](http://www.advancedinstaller.com/). In addition to incrementing the version be sure that a new product code is generated. (The "upgrade code" GUID on the other hand must never change.)
# Building for Supported Platforms
## Macintosh
Mac's easy. Just type:
make official
You will need [Packages](http://s.sudre.free.fr/Software/Packages/about.html) and our release signing key in the keychain.
## Windows
First load the Visual Studio solution and rebuild the UI and ZeroTier One in both x64 and i386 `Release` mode. Then load [Advanced Installer Enterprise](http://www.advancedinstaller.com/), check that the version is correct, and build. The build will fail if any build artifacts are missing, and Windows must have our product singing key (from DigiCert) available to sign the resulting MSI file. The MSI must then be tested on at least a few different CLEAN Windows VMs to ensure that the installer is valid and properly signed.

View File

@ -1,651 +0,0 @@
/*
* ZeroTier One - Network Virtualization Everywhere
* Copyright (C) 2011-2015 ZeroTier, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <sys/select.h>
#include <sys/cdefs.h>
#include <sys/uio.h>
#include <sys/param.h>
#include <sys/sysctl.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <net/if_dl.h>
#include <net/if_media.h>
#include <netinet6/in6_var.h>
#include <netinet/in_var.h>
#include <netinet/icmp6.h>
#include <pcap/pcap.h>
// OSX compile fix... in6_var defines this in a struct which namespaces it for C++ ... why?!?
struct prf_ra {
u_char onlink : 1;
u_char autonomous : 1;
u_char reserved : 6;
} prf_ra;
#include <netinet6/nd6.h>
#include <ifaddrs.h>
// These are KERNEL_PRIVATE... why?
#ifndef SIOCAUTOCONF_START
#define SIOCAUTOCONF_START _IOWR('i', 132, struct in6_ifreq) /* accept rtadvd on this interface */
#endif
#ifndef SIOCAUTOCONF_STOP
#define SIOCAUTOCONF_STOP _IOWR('i', 133, struct in6_ifreq) /* stop accepting rtadv for this interface */
#endif
#ifndef ETH_ALEN
#define ETH_ALEN 6
#endif
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
// This source is from:
// http://www.opensource.apple.com/source/Libinfo/Libinfo-406.17/gen.subproj/getifmaddrs.c?txt
// It's here because OSX 10.6 does not have this convenience function.
#define SALIGN (sizeof(uint32_t) - 1)
#define SA_RLEN(sa) ((sa)->sa_len ? (((sa)->sa_len + SALIGN) & ~SALIGN) : \
(SALIGN + 1))
#define MAX_SYSCTL_TRY 5
#define RTA_MASKS (RTA_GATEWAY | RTA_IFP | RTA_IFA)
/* FreeBSD uses NET_RT_IFMALIST and RTM_NEWMADDR from <sys/socket.h> */
/* We can use NET_RT_IFLIST2 and RTM_NEWMADDR2 on Darwin */
//#define DARWIN_COMPAT
//#ifdef DARWIN_COMPAT
#define GIM_SYSCTL_MIB NET_RT_IFLIST2
#define GIM_RTM_ADDR RTM_NEWMADDR2
//#else
//#define GIM_SYSCTL_MIB NET_RT_IFMALIST
//#define GIM_RTM_ADDR RTM_NEWMADDR
//#endif
// Not in 10.6 includes so use our own
struct _intl_ifmaddrs {
struct _intl_ifmaddrs *ifma_next;
struct sockaddr *ifma_name;
struct sockaddr *ifma_addr;
struct sockaddr *ifma_lladdr;
};
static inline int _intl_getifmaddrs(struct _intl_ifmaddrs **pif)
{
int icnt = 1;
int dcnt = 0;
int ntry = 0;
size_t len;
size_t needed;
int mib[6];
int i;
char *buf;
char *data;
char *next;
char *p;
struct ifma_msghdr2 *ifmam;
struct _intl_ifmaddrs *ifa, *ift;
struct rt_msghdr *rtm;
struct sockaddr *sa;
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0; /* protocol */
mib[3] = 0; /* wildcard address family */
mib[4] = GIM_SYSCTL_MIB;
mib[5] = 0; /* no flags */
do {
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
return (-1);
if ((buf = (char *)malloc(needed)) == NULL)
return (-1);
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) {
if (errno != ENOMEM || ++ntry >= MAX_SYSCTL_TRY) {
free(buf);
return (-1);
}
free(buf);
buf = NULL;
}
} while (buf == NULL);
for (next = buf; next < buf + needed; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)(void *)next;
if (rtm->rtm_version != RTM_VERSION)
continue;
switch (rtm->rtm_type) {
case GIM_RTM_ADDR:
ifmam = (struct ifma_msghdr2 *)(void *)rtm;
if ((ifmam->ifmam_addrs & RTA_IFA) == 0)
break;
icnt++;
p = (char *)(ifmam + 1);
for (i = 0; i < RTAX_MAX; i++) {
if ((RTA_MASKS & ifmam->ifmam_addrs &
(1 << i)) == 0)
continue;
sa = (struct sockaddr *)(void *)p;
len = SA_RLEN(sa);
dcnt += len;
p += len;
}
break;
}
}
data = (char *)malloc(sizeof(struct _intl_ifmaddrs) * icnt + dcnt);
if (data == NULL) {
free(buf);
return (-1);
}
ifa = (struct _intl_ifmaddrs *)(void *)data;
data += sizeof(struct _intl_ifmaddrs) * icnt;
memset(ifa, 0, sizeof(struct _intl_ifmaddrs) * icnt);
ift = ifa;
for (next = buf; next < buf + needed; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)(void *)next;
if (rtm->rtm_version != RTM_VERSION)
continue;
switch (rtm->rtm_type) {
case GIM_RTM_ADDR:
ifmam = (struct ifma_msghdr2 *)(void *)rtm;
if ((ifmam->ifmam_addrs & RTA_IFA) == 0)
break;
p = (char *)(ifmam + 1);
for (i = 0; i < RTAX_MAX; i++) {
if ((RTA_MASKS & ifmam->ifmam_addrs &
(1 << i)) == 0)
continue;
sa = (struct sockaddr *)(void *)p;
len = SA_RLEN(sa);
switch (i) {
case RTAX_GATEWAY:
ift->ifma_lladdr =
(struct sockaddr *)(void *)data;
memcpy(data, p, len);
data += len;
break;
case RTAX_IFP:
ift->ifma_name =
(struct sockaddr *)(void *)data;
memcpy(data, p, len);
data += len;
break;
case RTAX_IFA:
ift->ifma_addr =
(struct sockaddr *)(void *)data;
memcpy(data, p, len);
data += len;
break;
default:
data += len;
break;
}
p += len;
}
ift->ifma_next = ift + 1;
ift = ift->ifma_next;
break;
}
}
free(buf);
if (ift > ifa) {
ift--;
ift->ifma_next = NULL;
*pif = ifa;
} else {
*pif = NULL;
free(ifa);
}
return (0);
}
static inline void _intl_freeifmaddrs(struct _intl_ifmaddrs *ifmp)
{
free(ifmp);
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include "../node/Constants.hpp"
#include "../node/Utils.hpp"
#include "../node/Mutex.hpp"
#include "../node/Dictionary.hpp"
#include "OSUtils.hpp"
#include "OSXEthernetTap.hpp"
// ff:ff:ff:ff:ff:ff with no ADI
static const ZeroTier::MulticastGroup _blindWildcardMulticastGroup(ZeroTier::MAC(0xff),0);
static inline bool _setIpv6Stuff(const char *ifname,bool performNUD,bool acceptRouterAdverts)
{
struct in6_ndireq nd;
struct in6_ifreq ifr;
int s = socket(AF_INET6,SOCK_DGRAM,0);
if (s <= 0)
return false;
memset(&nd,0,sizeof(nd));
strncpy(nd.ifname,ifname,sizeof(nd.ifname));
if (ioctl(s,SIOCGIFINFO_IN6,&nd)) {
close(s);
return false;
}
unsigned long oldFlags = (unsigned long)nd.ndi.flags;
if (performNUD)
nd.ndi.flags |= ND6_IFF_PERFORMNUD;
else nd.ndi.flags &= ~ND6_IFF_PERFORMNUD;
if (oldFlags != (unsigned long)nd.ndi.flags) {
if (ioctl(s,SIOCSIFINFO_FLAGS,&nd)) {
close(s);
return false;
}
}
memset(&ifr,0,sizeof(ifr));
strncpy(ifr.ifr_name,ifname,sizeof(ifr.ifr_name));
if (ioctl(s,acceptRouterAdverts ? SIOCAUTOCONF_START : SIOCAUTOCONF_STOP,&ifr)) {
close(s);
return false;
}
close(s);
return true;
}
namespace ZeroTier {
static std::set<std::string> globalDeviceNames;
static Mutex globalTapCreateLock;
OSXEthernetTap::OSXEthernetTap(
const char *homePath,
const MAC &mac,
unsigned int mtu,
unsigned int metric,
uint64_t nwid,
const char *friendlyName,
void (*handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *data,unsigned int len),
void *arg) :
_handler(handler),
_arg(arg),
_pcap((void *)0),
_nwid(nwid),
_mac(mac),
_homePath(homePath),
_mtu(mtu),
_metric(metric),
_enabled(true)
{
char errbuf[PCAP_ERRBUF_SIZE];
char devname[64],ethaddr[64],mtustr[32],metstr[32],nwids[32];
Utils::snprintf(nwids,sizeof(nwids),"%.16llx",nwid);
if (mtu > 2800)
throw std::runtime_error("max tap MTU is 2800");
Mutex::Lock _gl(globalTapCreateLock);
std::string desiredDevice;
Dictionary devmap;
{
std::string devmapbuf;
if (OSUtils::readFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmapbuf)) {
devmap.fromString(devmapbuf);
desiredDevice = devmap.get(nwids,"");
}
}
if ((desiredDevice.length() >= 9)&&(desiredDevice.substr(0,6) == "bridge")) {
// length() >= 9 matches bridge### or bridge####
_dev = desiredDevice;
} else {
if (globalDeviceNames.size() >= (10000 - 128)) // sanity check... this would be nuts
throw std::runtime_error("too many devices!");
unsigned int pseudoBridgeNo = (unsigned int)((nwid ^ (nwid >> 32)) % (10000 - 128)) + 128; // range: bridge128 to bridge9999
sprintf(devname,"bridge%u",pseudoBridgeNo);
while (globalDeviceNames.count(std::string(devname)) > 0) {
++pseudoBridgeNo;
if (pseudoBridgeNo > 9999)
pseudoBridgeNo = 64;
sprintf(devname,"bridge%u",pseudoBridgeNo);
}
_dev = devname;
}
// Configure MAC address and MTU, bring interface up
long cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"create",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
if (exitcode != 0)
throw std::runtime_error("ifconfig failure setting link-layer address and activating tap interface");
} else throw std::runtime_error("unable to fork()");
Utils::snprintf(ethaddr,sizeof(ethaddr),"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(int)mac[0],(int)mac[1],(int)mac[2],(int)mac[3],(int)mac[4],(int)mac[5]);
Utils::snprintf(mtustr,sizeof(mtustr),"%u",_mtu);
Utils::snprintf(metstr,sizeof(metstr),"%u",_metric);
cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"lladdr",ethaddr,"mtu",mtustr,"metric",metstr,"up",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
if (exitcode != 0)
throw std::runtime_error("ifconfig failure setting link-layer address and activating tap interface");
} else throw std::runtime_error("unable to fork()");
_setIpv6Stuff(_dev.c_str(),true,false);
_pcap = (void *)pcap_create(_dev.c_str(),errbuf);
if (!_pcap) {
cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"destroy",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
}
throw std::runtime_error((std::string("pcap_create() on new bridge device failed: ") + errbuf).c_str());
}
pcap_set_promisc(reinterpret_cast<pcap_t *>(_pcap),1);
pcap_set_timeout(reinterpret_cast<pcap_t *>(_pcap),120000);
pcap_set_immediate_mode(reinterpret_cast<pcap_t *>(_pcap),1);
if (pcap_set_buffer_size(reinterpret_cast<pcap_t *>(_pcap),1024 * 1024 * 16) != 0) // 16MB
fprintf(stderr,"WARNING: pcap_set_buffer_size() failed!\n");
if (pcap_set_snaplen(reinterpret_cast<pcap_t *>(_pcap),4096) != 0)
fprintf(stderr,"WARNING: pcap_set_snaplen() failed!\n");
if (pcap_activate(reinterpret_cast<pcap_t *>(_pcap)) != 0) {
pcap_close(reinterpret_cast<pcap_t *>(_pcap));
cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"destroy",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
}
throw std::runtime_error("pcap_activate() on new bridge device failed.");
}
globalDeviceNames.insert(_dev);
devmap[nwids] = _dev;
OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmap.toString());
_thread = Thread::start(this);
}
OSXEthernetTap::~OSXEthernetTap()
{
_enabled = false;
Mutex::Lock _gl(globalTapCreateLock);
globalDeviceNames.erase(_dev);
long cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"destroy",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
if (exitcode == 0) {
// Destroying the interface nukes pcap and terminates the thread.
Thread::join(_thread);
}
}
pcap_close(reinterpret_cast<pcap_t *>(_pcap));
}
static bool ___removeIp(const std::string &_dev,const InetAddress &ip)
{
long cpid = (long)vfork();
if (cpid == 0) {
execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"inet",ip.toIpString().c_str(),"-alias",(const char *)0);
_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
waitpid(cpid,&exitcode,0);
return (exitcode == 0);
}
return false; // never reached, make compiler shut up about return value
}
bool OSXEthernetTap::addIp(const InetAddress &ip)
{
if (!ip)
return false;
std::vector<InetAddress> allIps(ips());
if (std::binary_search(allIps.begin(),allIps.end(),ip))
return true;
// Remove and reconfigure if address is the same but netmask is different
for(std::vector<InetAddress>::iterator i(allIps.begin());i!=allIps.end();++i) {
if ((i->ipsEqual(ip))&&(i->netmaskBits() != ip.netmaskBits())) {
if (___removeIp(_dev,*i))
break;
}
}
long cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),ip.isV4() ? "inet" : "inet6",ip.toString().c_str(),"alias",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
return (exitcode == 0);
} // else return false...
return false;
}
bool OSXEthernetTap::removeIp(const InetAddress &ip)
{
if (!ip)
return true;
std::vector<InetAddress> allIps(ips());
if (!std::binary_search(allIps.begin(),allIps.end(),ip)) {
if (___removeIp(_dev,ip))
return true;
}
return false;
}
std::vector<InetAddress> OSXEthernetTap::ips() const
{
struct ifaddrs *ifa = (struct ifaddrs *)0;
if (getifaddrs(&ifa))
return std::vector<InetAddress>();
std::vector<InetAddress> r;
struct ifaddrs *p = ifa;
while (p) {
if ((!strcmp(p->ifa_name,_dev.c_str()))&&(p->ifa_addr)&&(p->ifa_netmask)&&(p->ifa_addr->sa_family == p->ifa_netmask->sa_family)) {
switch(p->ifa_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *sin = (struct sockaddr_in *)p->ifa_addr;
struct sockaddr_in *nm = (struct sockaddr_in *)p->ifa_netmask;
r.push_back(InetAddress(&(sin->sin_addr.s_addr),4,Utils::countBits((uint32_t)nm->sin_addr.s_addr)));
} break;
case AF_INET6: {
struct sockaddr_in6 *sin = (struct sockaddr_in6 *)p->ifa_addr;
struct sockaddr_in6 *nm = (struct sockaddr_in6 *)p->ifa_netmask;
uint32_t b[4];
memcpy(b,nm->sin6_addr.s6_addr,sizeof(b));
r.push_back(InetAddress(sin->sin6_addr.s6_addr,16,Utils::countBits(b[0]) + Utils::countBits(b[1]) + Utils::countBits(b[2]) + Utils::countBits(b[3])));
} break;
}
}
p = p->ifa_next;
}
if (ifa)
freeifaddrs(ifa);
std::sort(r.begin(),r.end());
std::unique(r.begin(),r.end());
return r;
}
void OSXEthernetTap::put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len)
{
char putBuf[4096];
if ((len <= _mtu)&&(_enabled)) {
to.copyTo(putBuf,6);
from.copyTo(putBuf + 6,6);
*((uint16_t *)(putBuf + 12)) = htons((uint16_t)etherType);
memcpy(putBuf + 14,data,len);
len += 14;
int r = pcap_inject(reinterpret_cast<pcap_t *>(_pcap),putBuf,len);
if (r <= 0) {
printf("%s: pcap_inject() failed\n",_dev.c_str());
return;
}
printf("%s: inject %s -> %s etherType==%u len=%u r==%d\n",_dev.c_str(),from.toString().c_str(),to.toString().c_str(),etherType,len,r);
}
}
std::string OSXEthernetTap::deviceName() const
{
return _dev;
}
void OSXEthernetTap::setFriendlyName(const char *friendlyName)
{
}
void OSXEthernetTap::scanMulticastGroups(std::vector<MulticastGroup> &added,std::vector<MulticastGroup> &removed)
{
std::vector<MulticastGroup> newGroups;
struct _intl_ifmaddrs *ifmap = (struct _intl_ifmaddrs *)0;
if (!_intl_getifmaddrs(&ifmap)) {
struct _intl_ifmaddrs *p = ifmap;
while (p) {
if (p->ifma_addr->sa_family == AF_LINK) {
struct sockaddr_dl *in = (struct sockaddr_dl *)p->ifma_name;
struct sockaddr_dl *la = (struct sockaddr_dl *)p->ifma_addr;
if ((la->sdl_alen == 6)&&(in->sdl_nlen <= _dev.length())&&(!memcmp(_dev.data(),in->sdl_data,in->sdl_nlen)))
newGroups.push_back(MulticastGroup(MAC(la->sdl_data + la->sdl_nlen,6),0));
}
p = p->ifma_next;
}
_intl_freeifmaddrs(ifmap);
}
std::vector<InetAddress> allIps(ips());
for(std::vector<InetAddress>::iterator ip(allIps.begin());ip!=allIps.end();++ip)
newGroups.push_back(MulticastGroup::deriveMulticastGroupForAddressResolution(*ip));
std::sort(newGroups.begin(),newGroups.end());
std::unique(newGroups.begin(),newGroups.end());
for(std::vector<MulticastGroup>::iterator m(newGroups.begin());m!=newGroups.end();++m) {
if (!std::binary_search(_multicastGroups.begin(),_multicastGroups.end(),*m))
added.push_back(*m);
}
for(std::vector<MulticastGroup>::iterator m(_multicastGroups.begin());m!=_multicastGroups.end();++m) {
if (!std::binary_search(newGroups.begin(),newGroups.end(),*m))
removed.push_back(*m);
}
_multicastGroups.swap(newGroups);
}
static void _pcapHandler(u_char *ptr,const struct pcap_pkthdr *hdr,const u_char *data)
{
OSXEthernetTap *tap = reinterpret_cast<OSXEthernetTap *>(ptr);
if (hdr->caplen > 14) {
MAC to(data,6);
MAC from(data + 6,6);
if (from == tap->_mac) {
unsigned int etherType = ntohs(((const uint16_t *)data)[6]);
printf("%s: %s -> %s etherType==%u len==%u\n",tap->_dev.c_str(),from.toString().c_str(),to.toString().c_str(),etherType,(unsigned int)hdr->caplen);
// TODO: VLAN support
tap->_handler(tap->_arg,tap->_nwid,from,to,etherType,0,(const void *)(data + 14),hdr->len - 14);
}
}
}
void OSXEthernetTap::threadMain()
throw()
{
pcap_loop(reinterpret_cast<pcap_t *>(_pcap),-1,&_pcapHandler,reinterpret_cast<u_char *>(this));
}
} // namespace ZeroTier

View File

@ -1,832 +0,0 @@
/*
* ZeroTier One - Network Virtualization Everywhere
* Copyright (C) 2011-2015 ZeroTier, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <sys/select.h>
#include <sys/cdefs.h>
#include <sys/uio.h>
#include <sys/param.h>
#include <sys/sysctl.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/sys_domain.h>
#include <sys/kern_control.h>
#include <net/if_utun.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <net/if_dl.h>
#include <net/if_media.h>
#include <netinet6/in6_var.h>
#include <netinet/in_var.h>
#include <netinet/icmp6.h>
// OSX compile fix... in6_var defines this in a struct which namespaces it for C++ ... why?!?
struct prf_ra {
u_char onlink : 1;
u_char autonomous : 1;
u_char reserved : 6;
} prf_ra;
#include <netinet6/nd6.h>
#include <ifaddrs.h>
// These are KERNEL_PRIVATE... why?
#ifndef SIOCAUTOCONF_START
#define SIOCAUTOCONF_START _IOWR('i', 132, struct in6_ifreq) /* accept rtadvd on this interface */
#endif
#ifndef SIOCAUTOCONF_STOP
#define SIOCAUTOCONF_STOP _IOWR('i', 133, struct in6_ifreq) /* stop accepting rtadv for this interface */
#endif
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
// This source is from:
// http://www.opensource.apple.com/source/Libinfo/Libinfo-406.17/gen.subproj/getifmaddrs.c?txt
// It's here because OSX 10.6 does not have this convenience function.
#define SALIGN (sizeof(uint32_t) - 1)
#define SA_RLEN(sa) ((sa)->sa_len ? (((sa)->sa_len + SALIGN) & ~SALIGN) : \
(SALIGN + 1))
#define MAX_SYSCTL_TRY 5
#define RTA_MASKS (RTA_GATEWAY | RTA_IFP | RTA_IFA)
/* FreeBSD uses NET_RT_IFMALIST and RTM_NEWMADDR from <sys/socket.h> */
/* We can use NET_RT_IFLIST2 and RTM_NEWMADDR2 on Darwin */
//#define DARWIN_COMPAT
//#ifdef DARWIN_COMPAT
#define GIM_SYSCTL_MIB NET_RT_IFLIST2
#define GIM_RTM_ADDR RTM_NEWMADDR2
//#else
//#define GIM_SYSCTL_MIB NET_RT_IFMALIST
//#define GIM_RTM_ADDR RTM_NEWMADDR
//#endif
// Not in 10.6 includes so use our own
struct _intl_ifmaddrs {
struct _intl_ifmaddrs *ifma_next;
struct sockaddr *ifma_name;
struct sockaddr *ifma_addr;
struct sockaddr *ifma_lladdr;
};
static inline int _intl_getifmaddrs(struct _intl_ifmaddrs **pif)
{
int icnt = 1;
int dcnt = 0;
int ntry = 0;
size_t len;
size_t needed;
int mib[6];
int i;
char *buf;
char *data;
char *next;
char *p;
struct ifma_msghdr2 *ifmam;
struct _intl_ifmaddrs *ifa, *ift;
struct rt_msghdr *rtm;
struct sockaddr *sa;
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0; /* protocol */
mib[3] = 0; /* wildcard address family */
mib[4] = GIM_SYSCTL_MIB;
mib[5] = 0; /* no flags */
do {
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
return (-1);
if ((buf = (char *)malloc(needed)) == NULL)
return (-1);
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) {
if (errno != ENOMEM || ++ntry >= MAX_SYSCTL_TRY) {
free(buf);
return (-1);
}
free(buf);
buf = NULL;
}
} while (buf == NULL);
for (next = buf; next < buf + needed; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)(void *)next;
if (rtm->rtm_version != RTM_VERSION)
continue;
switch (rtm->rtm_type) {
case GIM_RTM_ADDR:
ifmam = (struct ifma_msghdr2 *)(void *)rtm;
if ((ifmam->ifmam_addrs & RTA_IFA) == 0)
break;
icnt++;
p = (char *)(ifmam + 1);
for (i = 0; i < RTAX_MAX; i++) {
if ((RTA_MASKS & ifmam->ifmam_addrs &
(1 << i)) == 0)
continue;
sa = (struct sockaddr *)(void *)p;
len = SA_RLEN(sa);
dcnt += len;
p += len;
}
break;
}
}
data = (char *)malloc(sizeof(struct _intl_ifmaddrs) * icnt + dcnt);
if (data == NULL) {
free(buf);
return (-1);
}
ifa = (struct _intl_ifmaddrs *)(void *)data;
data += sizeof(struct _intl_ifmaddrs) * icnt;
memset(ifa, 0, sizeof(struct _intl_ifmaddrs) * icnt);
ift = ifa;
for (next = buf; next < buf + needed; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)(void *)next;
if (rtm->rtm_version != RTM_VERSION)
continue;
switch (rtm->rtm_type) {
case GIM_RTM_ADDR:
ifmam = (struct ifma_msghdr2 *)(void *)rtm;
if ((ifmam->ifmam_addrs & RTA_IFA) == 0)
break;
p = (char *)(ifmam + 1);
for (i = 0; i < RTAX_MAX; i++) {
if ((RTA_MASKS & ifmam->ifmam_addrs &
(1 << i)) == 0)
continue;
sa = (struct sockaddr *)(void *)p;
len = SA_RLEN(sa);
switch (i) {
case RTAX_GATEWAY:
ift->ifma_lladdr =
(struct sockaddr *)(void *)data;
memcpy(data, p, len);
data += len;
break;
case RTAX_IFP:
ift->ifma_name =
(struct sockaddr *)(void *)data;
memcpy(data, p, len);
data += len;
break;
case RTAX_IFA:
ift->ifma_addr =
(struct sockaddr *)(void *)data;
memcpy(data, p, len);
data += len;
break;
default:
data += len;
break;
}
p += len;
}
ift->ifma_next = ift + 1;
ift = ift->ifma_next;
break;
}
}
free(buf);
if (ift > ifa) {
ift--;
ift->ifma_next = NULL;
*pif = ifa;
} else {
*pif = NULL;
free(ifa);
}
return (0);
}
static inline void _intl_freeifmaddrs(struct _intl_ifmaddrs *ifmp)
{
free(ifmp);
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include "../node/Constants.hpp"
#include "../node/Utils.hpp"
#include "../node/Mutex.hpp"
#include "../node/Dictionary.hpp"
#include "Arp.hpp"
#include "OSUtils.hpp"
#include "OSXEthernetTap.hpp"
// ff:ff:ff:ff:ff:ff with no ADI
static const ZeroTier::MulticastGroup _blindWildcardMulticastGroup(ZeroTier::MAC(0xff),0);
static inline bool _setIpv6Stuff(const char *ifname,bool performNUD,bool acceptRouterAdverts)
{
struct in6_ndireq nd;
struct in6_ifreq ifr;
int s = socket(AF_INET6,SOCK_DGRAM,0);
if (s <= 0)
return false;
memset(&nd,0,sizeof(nd));
strncpy(nd.ifname,ifname,sizeof(nd.ifname));
if (ioctl(s,SIOCGIFINFO_IN6,&nd)) {
close(s);
return false;
}
unsigned long oldFlags = (unsigned long)nd.ndi.flags;
if (performNUD)
nd.ndi.flags |= ND6_IFF_PERFORMNUD;
else nd.ndi.flags &= ~ND6_IFF_PERFORMNUD;
if (oldFlags != (unsigned long)nd.ndi.flags) {
if (ioctl(s,SIOCSIFINFO_FLAGS,&nd)) {
close(s);
return false;
}
}
memset(&ifr,0,sizeof(ifr));
strncpy(ifr.ifr_name,ifname,sizeof(ifr.ifr_name));
if (ioctl(s,acceptRouterAdverts ? SIOCAUTOCONF_START : SIOCAUTOCONF_STOP,&ifr)) {
close(s);
return false;
}
close(s);
return true;
}
// Create an OSX-native utun device (utun# where # is desiredNumber)
// Adapted from public domain utun example code by Jonathan Levin
static int _make_utun(int desiredNumber)
{
struct sockaddr_ctl sc;
struct ctl_info ctlInfo;
struct ifreq ifr;
memset(&ctlInfo, 0, sizeof(ctlInfo));
if (strlcpy(ctlInfo.ctl_name, UTUN_CONTROL_NAME, sizeof(ctlInfo.ctl_name)) >= sizeof(ctlInfo.ctl_name)) {
return -1;
}
int fd = socket(PF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL);
if (fd == -1)
return -1;
if (ioctl(fd, CTLIOCGINFO, &ctlInfo) == -1) {
close(fd);
return -1;
}
sc.sc_id = ctlInfo.ctl_id;
sc.sc_len = sizeof(sc);
sc.sc_family = AF_SYSTEM;
sc.ss_sysaddr = AF_SYS_CONTROL;
sc.sc_unit = desiredNumber + 1;
if (connect(fd, (struct sockaddr *)&sc, sizeof(sc)) == -1) {
close(fd);
return -1;
}
memset(&ifr,0,sizeof(ifr));
sprintf(ifr.ifr_name,"utun%d",desiredNumber);
if (ioctl(fd,SIOCGIFFLAGS,(void *)&ifr) < 0) {
printf("SIOCGIFFLAGS failed\n");
}
ifr.ifr_flags &= ~IFF_POINTOPOINT;
if (ioctl(fd,SIOCSIFFLAGS,(void *)&ifr) < 0) {
printf("clear IFF_POINTOPOINT failed\n");
}
return fd;
}
namespace ZeroTier {
static long globalTapsRunning = 0;
static Mutex globalTapCreateLock;
OSXEthernetTap::OSXEthernetTap(
const char *homePath,
const MAC &mac,
unsigned int mtu,
unsigned int metric,
uint64_t nwid,
const char *friendlyName,
void (*handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *data,unsigned int len),
void *arg) :
_handler(handler),
_arg(arg),
_arp((Arp *)0),
_nwid(nwid),
_homePath(homePath),
_mtu(mtu),
_metric(metric),
_fd(0),
_utun(false),
_enabled(true)
{
char devpath[64],ethaddr[64],mtustr[32],metstr[32],nwids[32];
struct stat stattmp;
Utils::snprintf(nwids,sizeof(nwids),"%.16llx",nwid);
if (mtu > 2800)
throw std::runtime_error("max tap MTU is 2800");
Mutex::Lock _gl(globalTapCreateLock);
// Read remembered previous device name, if any -- we'll try to reuse
Dictionary devmap;
std::string desiredDevice;
{
std::string devmapbuf;
if (OSUtils::readFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmapbuf)) {
devmap.fromString(devmapbuf);
desiredDevice = devmap.get(nwids,"");
}
}
if (::stat((_homePath + ZT_PATH_SEPARATOR_S + "tap.kext").c_str(),&stattmp) == 0) {
// Try to init kext if it's there, otherwise revert to utun mode
if (::stat("/dev/zt0",&stattmp)) {
long kextpid = (long)vfork();
if (kextpid == 0) {
::chdir(homePath);
OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
::execl("/sbin/kextload","/sbin/kextload","-q","-repository",homePath,"tap.kext",(const char *)0);
::_exit(-1);
} else if (kextpid > 0) {
int exitcode = -1;
::waitpid(kextpid,&exitcode,0);
}
::usleep(500); // give tap device driver time to start up and try again
if (::stat("/dev/zt0",&stattmp))
_utun = true;
}
if (!_utun) {
// See if we can re-use the last device we had.
bool recalledDevice = false;
if (desiredDevice.length() > 2) {
Utils::snprintf(devpath,sizeof(devpath),"/dev/%s",desiredDevice.c_str());
if (stat(devpath,&stattmp) == 0) {
_fd = ::open(devpath,O_RDWR);
if (_fd > 0) {
_dev = desiredDevice;
recalledDevice = true;
}
}
}
// Open the first unused tap device if we didn't recall a previous one.
if (!recalledDevice) {
for(int i=0;i<64;++i) {
Utils::snprintf(devpath,sizeof(devpath),"/dev/zt%d",i);
if (stat(devpath,&stattmp)) {
_utun = true;
break;
}
_fd = ::open(devpath,O_RDWR);
if (_fd > 0) {
char foo[16];
Utils::snprintf(foo,sizeof(foo),"zt%d",i);
_dev = foo;
break;
}
}
}
if (_fd <= 0)
_utun = true;
}
} else {
_utun = true;
}
if (_utun) {
// Use OSX built-in utun device if kext is not available or doesn't work
int utunNo = 0;
if ((desiredDevice.length() > 4)&&(desiredDevice.substr(0,4) == "utun")) {
utunNo = Utils::strToInt(desiredDevice.substr(4).c_str());
if (utunNo >= 0)
_fd = _make_utun(utunNo);
}
if (_fd <= 0) {
// Start at utun8 to leave lower utuns unused since other stuff might
// want them -- OpenVPN, cjdns, etc. I'm not sure if those are smart
// enough to scan upward like this.
for(utunNo=8;utunNo<=256;++utunNo) {
if ((_fd = _make_utun(utunNo)) > 0)
break;
}
}
if (_fd <= 0)
throw std::runtime_error("unable to find/load ZeroTier tap driver OR use built-in utun driver in OSX; permission or system problem or too many open devices?");
Utils::snprintf(devpath,sizeof(devpath),"utun%d",utunNo);
_dev = devpath;
// Configure address and bring it up
Utils::snprintf(mtustr,sizeof(mtustr),"%u",_mtu);
Utils::snprintf(metstr,sizeof(metstr),"%u",_metric);
long cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"mtu",mtustr,"metric",metstr,"up",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
if (exitcode) {
::close(_fd);
throw std::runtime_error("ifconfig failure activating utun interface");
}
}
} else {
// Use our ZeroTier OSX tun/tap driver for zt# Ethernet tap device
if (fcntl(_fd,F_SETFL,fcntl(_fd,F_GETFL) & ~O_NONBLOCK) == -1) {
::close(_fd);
throw std::runtime_error("unable to set flags on file descriptor for TAP device");
}
// Configure MAC address and MTU, bring interface up
Utils::snprintf(ethaddr,sizeof(ethaddr),"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(int)mac[0],(int)mac[1],(int)mac[2],(int)mac[3],(int)mac[4],(int)mac[5]);
Utils::snprintf(mtustr,sizeof(mtustr),"%u",_mtu);
Utils::snprintf(metstr,sizeof(metstr),"%u",_metric);
long cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"lladdr",ethaddr,"mtu",mtustr,"metric",metstr,"up",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
if (exitcode) {
::close(_fd);
throw std::runtime_error("ifconfig failure setting link-layer address and activating tap interface");
}
}
_setIpv6Stuff(_dev.c_str(),true,false);
}
// Set close-on-exec so that devices cannot persist if we fork/exec for update
fcntl(_fd,F_SETFD,fcntl(_fd,F_GETFD) | FD_CLOEXEC);
::pipe(_shutdownSignalPipe);
++globalTapsRunning;
devmap[nwids] = _dev;
OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmap.toString());
_thread = Thread::start(this);
}
OSXEthernetTap::~OSXEthernetTap()
{
Mutex::Lock _gl(globalTapCreateLock);
::write(_shutdownSignalPipe[1],(const void *)this,1); // writing a byte causes thread to exit
Thread::join(_thread);
::close(_fd);
::close(_shutdownSignalPipe[0]);
::close(_shutdownSignalPipe[1]);
if (_utun) {
delete _arp;
} else {
if (--globalTapsRunning <= 0) {
globalTapsRunning = 0; // sanity check -- should not be possible
char tmp[16384];
sprintf(tmp,"%s/%s",_homePath.c_str(),"tap.kext");
long kextpid = (long)vfork();
if (kextpid == 0) {
OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
::execl("/sbin/kextunload","/sbin/kextunload",tmp,(const char *)0);
::_exit(-1);
} else if (kextpid > 0) {
int exitcode = -1;
::waitpid(kextpid,&exitcode,0);
}
}
}
}
void OSXEthernetTap::setEnabled(bool en)
{
_enabled = en;
// TODO: interface status change
}
bool OSXEthernetTap::enabled() const
{
return _enabled;
}
static bool ___removeIp(const std::string &_dev,const InetAddress &ip)
{
long cpid = (long)vfork();
if (cpid == 0) {
execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"inet",ip.toIpString().c_str(),"-alias",(const char *)0);
_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
waitpid(cpid,&exitcode,0);
return (exitcode == 0);
}
return false; // never reached, make compiler shut up about return value
}
bool OSXEthernetTap::addIp(const InetAddress &ip)
{
if (!ip)
return false;
std::vector<InetAddress> allIps(ips());
if (std::binary_search(allIps.begin(),allIps.end(),ip))
return true;
// Remove and reconfigure if address is the same but netmask is different
for(std::vector<InetAddress>::iterator i(allIps.begin());i!=allIps.end();++i) {
if ((i->ipsEqual(ip))&&(i->netmaskBits() != ip.netmaskBits())) {
if (___removeIp(_dev,*i))
break;
}
}
if (_utun) {
long cpid = (long)vfork();
if (cpid == 0) {
if (ip.ss_family == AF_INET6) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"inet6",ip.toString().c_str(),"alias",(const char *)0);
} else {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),ip.toString().c_str(),ip.toIpString().c_str(),"alias",(const char *)0);
}
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
if (exitcode == 0) {
if (ip.ss_family == AF_INET) {
// Add route to network over tun for IPv4 -- otherwise it behaves
// as a simple point to point tunnel instead of a true route.
cpid = (long)vfork();
if (cpid == 0) {
::close(STDERR_FILENO);
::close(STDOUT_FILENO);
::execl("/sbin/route","/sbin/route","add",ip.network().toString().c_str(),ip.toIpString().c_str(),(const char *)0);
::exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
return (exitcode == 0);
}
} else return true;
}
}
} else {
long cpid = (long)vfork();
if (cpid == 0) {
::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),ip.isV4() ? "inet" : "inet6",ip.toString().c_str(),"alias",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
::waitpid(cpid,&exitcode,0);
return (exitcode == 0);
}
}
return false;
}
bool OSXEthernetTap::removeIp(const InetAddress &ip)
{
if (!ip)
return true;
std::vector<InetAddress> allIps(ips());
if (!std::binary_search(allIps.begin(),allIps.end(),ip)) {
if (___removeIp(_dev,ip))
return true;
}
return false;
}
std::vector<InetAddress> OSXEthernetTap::ips() const
{
struct ifaddrs *ifa = (struct ifaddrs *)0;
if (getifaddrs(&ifa))
return std::vector<InetAddress>();
std::vector<InetAddress> r;
struct ifaddrs *p = ifa;
while (p) {
if ((!strcmp(p->ifa_name,_dev.c_str()))&&(p->ifa_addr)&&(p->ifa_netmask)&&(p->ifa_addr->sa_family == p->ifa_netmask->sa_family)) {
switch(p->ifa_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *sin = (struct sockaddr_in *)p->ifa_addr;
struct sockaddr_in *nm = (struct sockaddr_in *)p->ifa_netmask;
r.push_back(InetAddress(&(sin->sin_addr.s_addr),4,Utils::countBits((uint32_t)nm->sin_addr.s_addr)));
} break;
case AF_INET6: {
struct sockaddr_in6 *sin = (struct sockaddr_in6 *)p->ifa_addr;
struct sockaddr_in6 *nm = (struct sockaddr_in6 *)p->ifa_netmask;
uint32_t b[4];
memcpy(b,nm->sin6_addr.s6_addr,sizeof(b));
r.push_back(InetAddress(sin->sin6_addr.s6_addr,16,Utils::countBits(b[0]) + Utils::countBits(b[1]) + Utils::countBits(b[2]) + Utils::countBits(b[3])));
} break;
}
}
p = p->ifa_next;
}
if (ifa)
freeifaddrs(ifa);
std::sort(r.begin(),r.end());
std::unique(r.begin(),r.end());
return r;
}
void OSXEthernetTap::put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len)
{
char putBuf[4096];
if ((_fd > 0)&&(len <= _mtu)&&(_enabled)) {
to.copyTo(putBuf,6);
from.copyTo(putBuf + 6,6);
*((uint16_t *)(putBuf + 12)) = htons((uint16_t)etherType);
memcpy(putBuf + 14,data,len);
len += 14;
::write(_fd,putBuf,len);
}
}
std::string OSXEthernetTap::deviceName() const
{
return _dev;
}
void OSXEthernetTap::setFriendlyName(const char *friendlyName)
{
}
void OSXEthernetTap::scanMulticastGroups(std::vector<MulticastGroup> &added,std::vector<MulticastGroup> &removed)
{
std::vector<MulticastGroup> newGroups;
struct _intl_ifmaddrs *ifmap = (struct _intl_ifmaddrs *)0;
if (!_intl_getifmaddrs(&ifmap)) {
struct _intl_ifmaddrs *p = ifmap;
while (p) {
if (p->ifma_addr->sa_family == AF_LINK) {
struct sockaddr_dl *in = (struct sockaddr_dl *)p->ifma_name;
struct sockaddr_dl *la = (struct sockaddr_dl *)p->ifma_addr;
if ((la->sdl_alen == 6)&&(in->sdl_nlen <= _dev.length())&&(!memcmp(_dev.data(),in->sdl_data,in->sdl_nlen)))
newGroups.push_back(MulticastGroup(MAC(la->sdl_data + la->sdl_nlen,6),0));
}
p = p->ifma_next;
}
_intl_freeifmaddrs(ifmap);
}
std::vector<InetAddress> allIps(ips());
for(std::vector<InetAddress>::iterator ip(allIps.begin());ip!=allIps.end();++ip)
newGroups.push_back(MulticastGroup::deriveMulticastGroupForAddressResolution(*ip));
std::sort(newGroups.begin(),newGroups.end());
std::unique(newGroups.begin(),newGroups.end());
for(std::vector<MulticastGroup>::iterator m(newGroups.begin());m!=newGroups.end();++m) {
if (!std::binary_search(_multicastGroups.begin(),_multicastGroups.end(),*m))
added.push_back(*m);
}
for(std::vector<MulticastGroup>::iterator m(_multicastGroups.begin());m!=_multicastGroups.end();++m) {
if (!std::binary_search(newGroups.begin(),newGroups.end(),*m))
removed.push_back(*m);
}
_multicastGroups.swap(newGroups);
}
void OSXEthernetTap::threadMain()
throw()
{
fd_set readfds,nullfds;
MAC to,from;
int n,nfds,r;
char getBuf[8194];
Thread::sleep(500);
FD_ZERO(&readfds);
FD_ZERO(&nullfds);
nfds = (int)std::max(_shutdownSignalPipe[0],_fd) + 1;
r = 0;
for(;;) {
FD_SET(_shutdownSignalPipe[0],&readfds);
FD_SET(_fd,&readfds);
select(nfds,&readfds,&nullfds,&nullfds,(struct timeval *)0);
if (FD_ISSET(_shutdownSignalPipe[0],&readfds)) // writes to shutdown pipe terminate thread
break;
if (FD_ISSET(_fd,&readfds)) {
n = (int)::read(_fd,getBuf + r,sizeof(getBuf) - r);
if (n < 0) {
if ((errno != EINTR)&&(errno != ETIMEDOUT))
break;
} else {
// Some tap drivers like to send the ethernet frame and the
// payload in two chunks, so handle that by accumulating
// data until we have at least a frame.
r += n;
if (r > 14) {
if (r > ((int)_mtu + 14)) // sanity check for weird TAP behavior on some platforms
r = _mtu + 14;
if (_enabled) {
to.setTo(getBuf,6);
from.setTo(getBuf + 6,6);
unsigned int etherType = ntohs(((const uint16_t *)getBuf)[6]);
// TODO: VLAN support
_handler(_arg,_nwid,from,to,etherType,0,(const void *)(getBuf + 14),r - 14);
}
r = 0;
}
}
}
}
}
} // namespace ZeroTier

View File

@ -1,96 +0,0 @@
/*
* ZeroTier One - Network Virtualization Everywhere
* Copyright (C) 2011-2015 ZeroTier, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#ifndef ZT_OSXETHERNETTAP_HPP
#define ZT_OSXETHERNETTAP_HPP
#include <stdio.h>
#include <stdlib.h>
#include <stdexcept>
#include <string>
#include <vector>
#include "../node/Constants.hpp"
#include "../node/MAC.hpp"
#include "../node/InetAddress.hpp"
#include "../node/MulticastGroup.hpp"
#include "Thread.hpp"
namespace ZeroTier {
/**
* OSX Ethernet tap using ZeroTier kernel extension zt# devices
*/
class OSXEthernetTap
{
public:
OSXEthernetTap(
const char *homePath,
const MAC &mac,
unsigned int mtu,
unsigned int metric,
uint64_t nwid,
const char *friendlyName,
void (*handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int),
void *arg);
~OSXEthernetTap();
inline void setEnabled(bool en) { _enabled = en; }
inline bool enabled() const { return _enabled; }
bool addIp(const InetAddress &ip);
bool removeIp(const InetAddress &ip);
std::vector<InetAddress> ips() const;
void put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len);
std::string deviceName() const;
void setFriendlyName(const char *friendlyName);
void scanMulticastGroups(std::vector<MulticastGroup> &added,std::vector<MulticastGroup> &removed);
void threadMain()
throw();
// Private members of OSXEthernetTap have public visibility to be accessable
// from an internal bounce function; don't modify directly.
void (*_handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int);
void *_arg;
void *_pcap; // pcap_t *
uint64_t _nwid;
MAC _mac;
Thread _thread;
std::string _homePath;
std::string _dev;
std::vector<MulticastGroup> _multicastGroups;
unsigned int _mtu;
unsigned int _metric;
volatile bool _enabled;
};
} // namespace ZeroTier
#endif

View File

@ -1,101 +0,0 @@
/*
* ZeroTier One - Network Virtualization Everywhere
* Copyright (C) 2011-2015 ZeroTier, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*
* ZeroTier may be used and distributed under the terms of the GPLv3, which
* are available at: http://www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form, please contact ZeroTier Networks
* LLC. Start here: http://www.zerotier.com/
*/
#ifndef ZT_OSXETHERNETTAP_HPP
#define ZT_OSXETHERNETTAP_HPP
#include <stdio.h>
#include <stdlib.h>
#include <stdexcept>
#include <string>
#include <vector>
#include "../node/Constants.hpp"
#include "../node/MAC.hpp"
#include "../node/InetAddress.hpp"
#include "../node/MulticastGroup.hpp"
#include "Thread.hpp"
namespace ZeroTier {
class Arp;
/**
* OSX Ethernet tap supporting either ZeroTier tun/tap kext or OSX-native utun
*/
class OSXEthernetTap
{
public:
OSXEthernetTap(
const char *homePath,
const MAC &mac,
unsigned int mtu,
unsigned int metric,
uint64_t nwid,
const char *friendlyName,
void (*handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int),
void *arg);
~OSXEthernetTap();
void setEnabled(bool en);
bool enabled() const;
bool addIp(const InetAddress &ip);
bool removeIp(const InetAddress &ip);
std::vector<InetAddress> ips() const;
void put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len);
std::string deviceName() const;
void setFriendlyName(const char *friendlyName);
void scanMulticastGroups(std::vector<MulticastGroup> &added,std::vector<MulticastGroup> &removed);
inline bool isNativeUtun() const { return _utun; }
void threadMain()
throw();
private:
void (*_handler)(void *,uint64_t,const MAC &,const MAC &,unsigned int,unsigned int,const void *,unsigned int);
void *_arg;
Arp *_arp; // created and used if utun is enabled
uint64_t _nwid;
Thread _thread;
std::string _homePath;
std::string _dev;
std::vector<MulticastGroup> _multicastGroups;
unsigned int _mtu;
unsigned int _metric;
int _fd;
int _shutdownSignalPipe[2];
bool _utun;
volatile bool _enabled;
};
} // namespace ZeroTier
#endif

119
attic/PeerList.hpp Normal file
View File

@ -0,0 +1,119 @@
/*
* Copyright (c)2013-2020 ZeroTier, Inc.
*
* Use of this software is governed by the Business Source License included
* in the LICENSE.TXT file in the project's root directory.
*
* Change Date: 2025-01-01
*
* On the date above, in accordance with the Business Source License, use
* of this software will be governed by version 2.0 of the Apache License.
*/
/****/
#ifndef ZT_PEERLIST_HPP
#define ZT_PEERLIST_HPP
#include "Constants.hpp"
#include "SharedPtr.hpp"
#include "Peer.hpp"
namespace ZeroTier {
/**
* A list of peers
*
* This is a simple vector optimized for the case where there will almost always
* be zero or one element. In that case it doesn't allocate. If there's more than
* one element, it will grow to include all elements.
*
* It's used to return lookups in Topology where there will almost always be zero
* or one peers returned but where there technically (but very rarely) can be more.
*/
class PeerList
{
public:
ZT_INLINE PeerList() noexcept:
m_onePeer(),
m_peers(&m_onePeer),
m_peerCount(0)
{}
ZT_INLINE PeerList(const PeerList &pl)
{
const unsigned int pc = pl.m_peerCount;
if (likely(pc <= 1)) {
m_onePeer = pl.m_onePeer;
m_peers = &m_onePeer;
} else {
m_peers = new SharedPtr<Peer>[pc];
for (unsigned int i = 0;i < pc;++i)
m_peers[i] = pl.m_peers[i];
}
m_peerCount = pc;
}
ZT_INLINE ~PeerList()
{
if (unlikely(m_peers != &m_onePeer))
delete[] m_peers;
}
ZT_INLINE PeerList &operator=(const PeerList &pl)
{
if (&pl != this) {
if (unlikely(m_peers != &m_onePeer))
delete[] m_peers;
if (likely(pl.m_peerCount <= 1)) {
m_onePeer = pl.m_onePeer;
m_peers = &m_onePeer;
} else {
m_onePeer.zero();
m_peers = new SharedPtr<Peer>[pl.m_peerCount];
for (unsigned int i = 0;i < pl.m_peerCount;++i)
m_peers[i] = pl.m_peers[i];
}
m_peerCount = pl.m_peerCount;
}
return *this;
}
/**
* Resize the peer list to store a given number of members
*
* To populate the list, this must be called first followed by each member
* being set with the [] operator. List content after this call is undefined
* and may contain old data if the object is being re-used.
*
* @param s New size of list
*/
ZT_INLINE void resize(const unsigned int s)
{
if (unlikely(m_peers != &m_onePeer))
delete[] m_peers;
m_peerCount = s;
if (likely(s <= 1)) {
m_peers = &m_onePeer;
} else {
m_peers = new SharedPtr<Peer>[s];
}
}
ZT_INLINE SharedPtr <Peer> &operator[](const unsigned int i) noexcept
{ return m_peers[i]; }
ZT_INLINE const SharedPtr <Peer> &operator[](const unsigned int i) const noexcept
{ return m_peers[i]; }
ZT_INLINE unsigned int size() const noexcept
{ return m_peerCount; }
private:
SharedPtr <Peer> m_onePeer;
SharedPtr <Peer> *m_peers;
unsigned int m_peerCount;
};
} // namespace ZeroTier
#endif

View File

@ -1,4 +0,0 @@
Retired Code and Miscellaneous Junk
======
This directory is for old code that isn't used but we don't want to lose track of, and for anything else random like debug scripts.

View File

@ -1,84 +0,0 @@
ZeroTier Security
======
## Summary
## Using ZeroTier Securely
### Overall Recommendations
*TL;DR: same as anything else: defense in depth defense in depth defense in depth.*
We encourage our users to treat private ZeroTier networks as being rougly equivalent in security to WPA2-enterprise securied WiFi or on-premise wired Ethernet. (Public networks on the other hand are open by design.) That means they're networks with perimeters, but like all networks the compromise of any participating device or network controller allows an attacker to breach this perimeter.
**Never trust the network.** Many modern security professionals discourage reliance on network perimeters as major components in any security strategy, and we strongly agree regardless of whether your network is physical or virtual.
As part of a defense in depth approach **we specifically encourage the use of other secure protocols and authentication systems over ZeroTier networks**. While the use of secure encrypted protocols like SSH and SSL over ZeroTier adds a bit more overhead, it greatly reduces the chance of total compromise.
Imagine that the per-day probability of a major "0-day" security flaw in ZeroTier and OpenSSH are both roughly 0.001 or one per thousand days. Using both at the same time gives you a cumulative 0-day risk of roughly 0.000001 or one per one million days.
Those are made-up numbers. In reality these probabilities can't be known ahead of time. History shows that a 0-day could be found in anything tomorrow, next week, or never. But layers of security give you an overall posture that is the product -- more than the sum -- of its parts. That's how defense in depth works.
### ZeroTier Specifics
#### Protect Your Identity
Each ZeroTier device has an identity. The secret portion of this identity is stored in a file called "identity.secret." *Protect this file.* If it's stolen your device's identity (as represented by its 10-digit ZeroTier address) can easily be stolen or impersonated and your traffic can be decrypted or man-in-the-middle'd.
#### Protect Your Controller
The second major component of ZeroTier network security is the network controller. It's responsible for issuing certificates and configuration information to all network members. That makes it a certificate authority. Compromise of the controller allows an attacker to join or disrupt any network the controller controls. It does *not*, however, allow an attacker to decrypt peer to peer unicast traffic.
If you are using our controller-as-a-service at [my.zerotier.com](https://my.zerotier.com), you are delegating this responsibility to us.
## Security Priorities
These are our security "must-haves." If the system fails in any of these objectives it is broken.
* ZeroTier must be secure against remote vulnerabilities. This includes things like unauthorized remote control, remote penetration of the device using ZeroTier as a vector, or remote injection of malware.
* The content (but not meta-data) of communication must be secure against eavesdropping on the wire by any known means. (We can't warrant against secret vulnerabilities against ciphers, etc., or anything else we don't know about.)
* Communication must be secure against man-in-the-middle attacks and remote device impersonation.
## Security Non-Priorities
There are a few aspects of security we knowingly do not address, since doing so would be beyond scope or would conflict too greatly with other priorities.
* ZeroTier makes no effort to conceal communication meta-data such as source and destination addresses and the amount of information transferred between peers. To do this more or less requires onion routing or other "heavy" approaches to anonymity, and this is beyond scope.
* ZeroTier does not implement complex certificate chains, X.509, or other feature-rich (some would say feature-laden) cryptographic stuff. We only implement the crypto we need to get the job done.
* We don't take extraordinary measures to preserve security under conditions in which an endpoint device has been penetrated by other means (e.g. "rooted" by third party malware) or physicall compromised. If someone steals your keys they've stolen your keys, and if they've "pwned" your device they can easily eavesdrop on everything directly.
## Insecurities and Areas for Improvement
The only perfectly secure system is one that is off. All real world systems have potential security weaknesses. If possible, we like to know what these are and acknowledge their existence.
In some cases we plan to improve these. In other cases we have deliberately decided to "punt" on them in favor of some other priority (see philosophy). We may or may not revisit this decision in the future.
* We don't implement forward secrecy / ephemeral keys. A [discussion of this can be found at the closed GitHub issue for this feature](https://github.com/zerotier/ZeroTierOne/issues/204). In short: we've decided to "punt" on this feature because it introduces complexity and state negotiation. One of the design goals of ZeroTier is "reliability convergence" -- the reliability of ZeroTier virtual networks should rapidly converge with that of the underlying physical wire. Any state that must be negotiated prior to communication multiplies the probability of delay or failure due to packet loss. We *may* revisit this decision at a later date.
## Secure Coding Practices
The first line of defense employed against remote vulnerabilities and other major security flaws is the use of secure coding practices. These are, in no particular order:
* All parsing of remote messages is performed via higher level safe bounds-checked data structures and interfaces. See node/Buffer.hpp for one of the core elements of this.
* C++ exceptions are used to ensure that any unhandled failure or error condition (such as a bounds checking violation) results in the safe and complete termination of message processing. Invalid messages are dropped and ignored.
* Minimalism is a secure coding practice. There is an exponential relationship between complexity and the probability of bugs, and complex designs are much harder to audit and reason about.
* Our build scripts try to enable any OS and compiler level security features such as ASLR and "stack canaries" on non-debug builds.
## Cryptographic Security Practices
* We use [boring crypto](https://cr.yp.to/talks/2015.10.05/slides-djb-20151005-a4.pdf). A single symmetric algorithm (Salsa20/12), a single asymmetric algorithm (Curve25519 ECDH-256), and a single MAC (Poly1305). The way these algorithms are used is identical to how they're used in the NaCl reference implementation. The protocol supports selection of alternative algorithms but only for "future proofing" in the case that a serious flaw is discovered in any of these. Avoding algorithm bloat and cryptographic state negotiation helps guard against down-grade, "oracle," and other protocol level attacks.
* Authenticated encryption is employed with authentication being performed prior to any other operations on received messages. See also: [the cryptographic doom principle](https://moxie.org/blog/the-cryptographic-doom-principle/).
* "Never branch on anything secret" -- deterministic-time comparisons and other operations are used in cryptographic operations. See Utils::secureEq() in node/Utils.hpp.
* OS-derived crypographic random numbers (/dev/urandom or Windows CryptGenRandom) are further randomized using encryption by a secondary key with a secondary source of entropy to guard against CSPRNG bugs. Such OS-level CSPRNG bugs have been found in the past. See Utils::getSecureRandom() in node/Utils.hpp.

View File

@ -1,24 +0,0 @@
FROM centos:latest
MAINTAINER https://www.zerotier.com/
EXPOSE 9993/udp
ADD nodesource-el.repo /etc/yum.repos.d/nodesource-el.repo
RUN yum -y update && yum install -y nodejs && yum clean all
RUN mkdir -p /var/lib/zerotier-one
RUN mkdir -p /var/lib/zerotier-one/networks.d
RUN touch /var/lib/zerotier-one/networks.d/ffffffffffffffff.conf
ADD package.json /
RUN npm install
ADD zerotier-one /
RUN chmod a+x /zerotier-one
ADD agent.js /
ADD docker-main.sh /
RUN chmod a+x /docker-main.sh
CMD ["./docker-main.sh"]

View File

@ -1,12 +0,0 @@
HTTP one-to-all test
======
*This is really internal use code. You're free to test it out but expect to do some editing/tweaking to make it work. We used this to run some massive scale tests of our new geo-cluster-based root server infrastructure prior to taking it live.*
Before using this code you will want to edit agent.js to change SERVER_HOST to the IP address of where you will run server.js. This should typically be an open Internet IP, since this makes reporting not dependent upon the thing being tested. Also note that this thing does no security of any kind. It's designed for one-off tests run over a short period of time, not to be anything that runs permanently. You will also want to edit the Dockerfile if you want to build containers and change the network ID to the network you want to run tests over.
This code can be deployed across a large number of VMs or containers to test and benchmark HTTP traffic within a virtual network at scale. The agent acts as a server and can query other agents, while the server collects agent data and tells agents about each other. It's designed to use RFC4193-based ZeroTier IPv6 addresses within the cluster, which allows the easy provisioning of a large cluster without IP conflicts.
The Dockerfile builds an image that launches the agent. The image must be "docker run" with "--device=/dev/net/tun --privileged" to permit it to open a tun/tap device within the container. (Unfortunately CAP_NET_ADMIN may not work due to a bug in Docker and/or Linux.) You can run a bunch with a command like:
for ((n=0;n<10;n++)); do docker run --device=/dev/net/tun --privileged -d zerotier/http-test; done

View File

@ -1,196 +0,0 @@
// ZeroTier distributed HTTP test agent
// ---------------------------------------------------------------------------
// Customizable parameters:
// Time between startup and first test attempt
var TEST_STARTUP_LAG = 10000;
// Maximum interval between test attempts (actual timing is random % this)
var TEST_INTERVAL_MAX = (60000 * 10);
// Test timeout in ms
var TEST_TIMEOUT = 30000;
// Where should I get other agents' IDs and POST results?
var SERVER_HOST = '52.26.196.147';
var SERVER_PORT = 18080;
// Which port do agents use to serve up test data to each other?
var AGENT_PORT = 18888;
// Payload size in bytes
var PAYLOAD_SIZE = 5000;
// ---------------------------------------------------------------------------
var ipaddr = require('ipaddr.js');
var os = require('os');
var http = require('http');
var async = require('async');
var express = require('express');
var app = express();
// Find our ZeroTier-assigned RFC4193 IPv6 address
var thisAgentId = null;
var interfaces = os.networkInterfaces();
if (!interfaces) {
console.error('FATAL: os.networkInterfaces() failed.');
process.exit(1);
}
for(var ifname in interfaces) {
var ifaddrs = interfaces[ifname];
if (Array.isArray(ifaddrs)) {
for(var i=0;i<ifaddrs.length;++i) {
if (ifaddrs[i].family == 'IPv6') {
try {
var ipbytes = ipaddr.parse(ifaddrs[i].address).toByteArray();
if ((ipbytes.length === 16)&&(ipbytes[0] == 0xfd)&&(ipbytes[9] == 0x99)&&(ipbytes[10] == 0x93)) {
thisAgentId = '';
for(var j=0;j<16;++j) {
var tmp = ipbytes[j].toString(16);
if (tmp.length === 1)
thisAgentId += '0';
thisAgentId += tmp;
}
}
} catch (e) {
console.error(e);
}
}
}
}
}
if (thisAgentId === null) {
console.error('FATAL: no ZeroTier-assigned RFC4193 IPv6 addresses found on any local interface!');
process.exit(1);
}
//console.log(thisAgentId);
// Create a random (and therefore not very compressable) payload
var payload = new Buffer(PAYLOAD_SIZE);
for(var xx=0;xx<PAYLOAD_SIZE;++xx) {
payload.writeUInt8(Math.round(Math.random() * 255.0),xx);
}
function agentIdToIp(agentId)
{
var ip = '';
ip += agentId.substr(0,4);
ip += ':';
ip += agentId.substr(4,4);
ip += ':';
ip += agentId.substr(8,4);
ip += ':';
ip += agentId.substr(12,4);
ip += ':';
ip += agentId.substr(16,4);
ip += ':';
ip += agentId.substr(20,4);
ip += ':';
ip += agentId.substr(24,4);
ip += ':';
ip += agentId.substr(28,4);
return ip;
};
var lastTestResult = null;
var allOtherAgents = {};
function doTest()
{
var submit = http.request({
host: SERVER_HOST,
port: SERVER_PORT,
path: '/'+thisAgentId,
method: 'POST'
},function(res) {
var body = '';
res.on('data',function(chunk) { body += chunk.toString(); });
res.on('end',function() {
if (body) {
try {
var peers = JSON.parse(body);
if (Array.isArray(peers)) {
for(var xx=0;xx<peers.length;++xx)
allOtherAgents[peers[xx]] = true;
}
} catch (e) {}
}
var agents = Object.keys(allOtherAgents);
if (agents.length > 1) {
var target = agents[Math.floor(Math.random() * agents.length)];
while (target === thisAgentId)
target = agents[Math.floor(Math.random() * agents.length)];
var testRequest = null;
var timeoutId = null;
timeoutId = setTimeout(function() {
if (testRequest !== null)
testRequest.abort();
timeoutId = null;
},TEST_TIMEOUT);
var startTime = Date.now();
testRequest = http.get({
host: agentIdToIp(target),
port: AGENT_PORT,
path: '/'
},function(res) {
var bytes = 0;
res.on('data',function(chunk) { bytes += chunk.length; });
res.on('end',function() {
lastTestResult = {
source: thisAgentId,
target: target,
time: (Date.now() - startTime),
bytes: bytes,
timedOut: (timeoutId === null),
error: null
};
if (timeoutId !== null)
clearTimeout(timeoutId);
return setTimeout(doTest,Math.round(Math.random() * TEST_INTERVAL_MAX) + 1);
});
}).on('error',function(e) {
lastTestResult = {
source: thisAgentId,
target: target,
time: (Date.now() - startTime),
bytes: 0,
timedOut: (timeoutId === null),
error: e.toString()
};
if (timeoutId !== null)
clearTimeout(timeoutId);
return setTimeout(doTest,Math.round(Math.random() * TEST_INTERVAL_MAX) + 1);
});
} else {
return setTimeout(doTest,1000);
}
});
}).on('error',function(e) {
console.log('POST failed: '+e.toString());
return setTimeout(doTest,1000);
});
if (lastTestResult !== null) {
submit.write(JSON.stringify(lastTestResult));
lastTestResult = null;
}
submit.end();
};
// Agents just serve up a test payload
app.get('/',function(req,res) { return res.status(200).send(payload); });
var expressServer = app.listen(AGENT_PORT,function () {
// Start timeout-based loop
setTimeout(doTest(),TEST_STARTUP_LAG);
});

View File

@ -1,9 +0,0 @@
#!/bin/bash
# Kills all running Docker containers on all big-test-hosts
export PATH=/bin:/usr/bin:/usr/local/bin:/usr/sbin:/sbin
pssh -h big-test-hosts -x '-t -t' -i -OUserKnownHostsFile=/dev/null -OStrictHostKeyChecking=no -t 0 -p 256 "sudo docker ps -aq | xargs -r sudo docker rm -f"
exit 0

View File

@ -1,13 +0,0 @@
#!/bin/bash
# More than 500 container seems to result in a lot of sporadic failures, probably due to Linux kernel scaling issues with virtual network ports
# 250 with a 16GB RAM VM like Amazon m4.xlarge seems good
NUM_CONTAINERS=250
CONTAINER_IMAGE=zerotier/http-test
SCALE_UP_DELAY=10
export PATH=/bin:/usr/bin:/usr/local/bin:/usr/sbin:/sbin
pssh -h big-test-hosts -x '-t -t' -i -OUserKnownHostsFile=/dev/null -OStrictHostKeyChecking=no -t 0 -p 256 "sudo sysctl -w net.netfilter.nf_conntrack_max=262144 ; for ((n=0;n<$NUM_CONTAINERS;n++)); do sudo docker run --device=/dev/net/tun --privileged -d $CONTAINER_IMAGE; sleep $SCALE_UP_DELAY; done"
exit 0

View File

@ -1,65 +0,0 @@
//
// Pipe the output of server.js into this to convert raw test results into bracketed statistics
// suitable for graphing.
//
// Time duration per statistical bracket
var BRACKET_SIZE = 10000;
// Number of bytes expected from each test
var EXPECTED_BYTES = 5000;
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
var count = 0.0;
var overallCount = 0.0;
var totalFailures = 0.0;
var totalOverallFailures = 0.0;
var totalMs = 0;
var totalData = 0;
var devices = {};
var lastBracketTs = 0;
rl.on('line',function(line) {
line = line.trim();
var ls = line.split(',');
if (ls.length == 7) {
var ts = parseInt(ls[0]);
var fromId = ls[1];
var toId = ls[2];
var ms = parseFloat(ls[3]);
var bytes = parseInt(ls[4]);
var timedOut = (ls[5] == 'true') ? true : false;
var errMsg = ls[6];
count += 1.0;
overallCount += 1.0;
if ((bytes !== EXPECTED_BYTES)||(timedOut)) {
totalFailures += 1.0;
totalOverallFailures += 1.0;
}
totalMs += ms;
totalData += bytes;
devices[fromId] = true;
devices[toId] = true;
if (lastBracketTs === 0)
lastBracketTs = ts;
if (((ts - lastBracketTs) >= BRACKET_SIZE)&&(count > 0.0)) {
console.log(count.toString()+','+overallCount.toString()+','+(totalMs / count)+','+(totalFailures / count)+','+(totalOverallFailures / overallCount)+','+totalData+','+Object.keys(devices).length);
count = 0.0;
totalFailures = 0.0;
totalMs = 0;
totalData = 0;
lastBracketTs = ts;
}
} // else ignore junk
});

View File

@ -1,16 +0,0 @@
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
/zerotier-one -d >>zerotier-one.out 2>&1
# Wait for ZeroTier to start and join the network
while [ ! -d "/proc/sys/net/ipv6/conf/zt0" ]; do
sleep 0.25
done
# Wait just a bit longer for stuff to settle
sleep 5
exec node --harmony /agent.js >>agent.out 2>&1
#exec node --harmony /agent.js

View File

@ -1,6 +0,0 @@
[nodesource]
name=Node.js Packages for Enterprise Linux 7 - $basearch
baseurl=https://rpm.nodesource.com/pub_4.x/el/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0

View File

@ -1,16 +0,0 @@
{
"name": "zerotier-test-http",
"version": "1.0.0",
"description": "ZeroTier in-network HTTP test",
"main": "agent.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "ZeroTier, Inc.",
"license": "GPL-3.0",
"dependencies": {
"async": "^1.5.0",
"express": "^4.13.3",
"ipaddr.js": "^1.0.3"
}
}

View File

@ -1,53 +0,0 @@
// ZeroTier distributed HTTP test coordinator and result-reporting server
// ---------------------------------------------------------------------------
// Customizable parameters:
var SERVER_PORT = 18080;
// ---------------------------------------------------------------------------
var fs = require('fs');
var express = require('express');
var app = express();
app.use(function(req,res,next) {
req.rawBody = '';
req.on('data', function(chunk) { req.rawBody += chunk.toString(); });
req.on('end', function() { return next(); });
});
var knownAgents = {};
app.post('/:agentId',function(req,res) {
var agentId = req.params.agentId;
if ((!agentId)||(agentId.length !== 32))
return res.status(404).send('');
if (req.rawBody) {
var receiveTime = Date.now();
var resultData = null;
try {
resultData = JSON.parse(req.rawBody);
console.log(Date.now().toString()+','+resultData.source+','+resultData.target+','+resultData.time+','+resultData.bytes+','+resultData.timedOut+',"'+((resultData.error) ? resultData.error : '')+'"');
} catch (e) {}
}
knownAgents[agentId] = true;
var thisUpdate = [];
var agents = Object.keys(knownAgents);
if (agents.length < 100)
thisUpdate = agents;
else {
for(var xx=0;xx<100;++xx)
thisUpdate.push(agents[Math.floor(Math.random() * agents.length)]);
}
return res.status(200).send(JSON.stringify(thisUpdate));
});
var expressServer = app.listen(SERVER_PORT,function () {
console.log('LISTENING ON '+SERVER_PORT);
console.log('');
});

View File

@ -0,0 +1,26 @@
# Dockerfile for ZeroTier Central Controllers
FROM centos:7 as builder
MAINTAINER Adam Ierymekno <adam.ierymenko@zerotier.com>, Grant Limberg <grant.limberg@zerotier.com>
ARG git_branch=master
RUN yum update -y
RUN yum install -y https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
RUN yum -y install epel-release && yum -y update && yum clean all
RUN yum groupinstall -y "Development Tools"
RUN yum install -y bash postgresql10 postgresql10-devel libpqxx-devel glibc-static libstdc++-static clang jemalloc jemalloc-devel
RUN git clone http://git.int.zerotier.com/zerotier/ZeroTierOne.git
RUN if [ "$git_branch" != "master" ]; then cd ZeroTierOne && git checkout -b $git_branch origin/$git_branch; fi
RUN ldconfig
RUN cd ZeroTierOne && make central-controller
FROM centos:7
COPY --from=builder /ZeroTierOne/zerotier-one /usr/local/bin/zerotier-one
RUN chmod a+x /usr/local/bin/zerotier-one
ADD ext/central-controller-docker/main.sh /
RUN chmod a+x /main.sh
ENTRYPOINT /main.sh

View File

@ -0,0 +1,3 @@
# ZeroTier Central Controller Docker Image
Dockerfile & startup script for use with [ZeroTier Central](https://my.zerotier.com). Not intended for public use.

View File

@ -0,0 +1,80 @@
#!/bin/bash
if [ -z "$ZT_IDENTITY_PATH" ]; then
echo '*** FAILED: ZT_IDENTITY_PATH environment variable is not defined'
exit 1
fi
if [ -z "$ZT_DB_HOST" ]; then
echo '*** FAILED: ZT_DB_HOST environment variable not defined'
exit 1
fi
if [ -z "$ZT_DB_PORT" ]; then
echo '*** FAILED: ZT_DB_PORT environment variable not defined'
exit 1
fi
if [ -z "$ZT_DB_NAME" ]; then
echo '*** FAILED: ZT_DB_NAME environment variable not defined'
exit 1
fi
if [ -z "$ZT_DB_USER" ]; then
echo '*** FAILED: ZT_DB_USER environment variable not defined'
exit 1
fi
if [ -z "$ZT_DB_PASSWORD" ]; then
echo '*** FAILED: ZT_DB_PASSWORD environment variable not defined'
exit 1
fi
RMQ=""
if [ "$ZT_USE_RABBITMQ" == "true" ]; then
if [ -z "$RABBITMQ_HOST" ]; then
echo '*** FAILED: RABBITMQ_HOST environment variable not defined'
exit 1
fi
if [ -z "$RABBITMQ_PORT" ]; then
echo '*** FAILED: RABBITMQ_PORT environment variable not defined'
exit 1
fi
if [ -z "$RABBITMQ_USERNAME" ]; then
echo '*** FAILED: RABBITMQ_USERNAME environment variable not defined'
exit 1
fi
if [ -z "$RABBITMQ_PASSWORD" ]; then
echo '*** FAILED: RABBITMQ_PASSWORD environment variable not defined'
exit 1
fi
RMQ=", \"rabbitmq\": {
\"host\": \"${RABBITMQ_HOST}\",
\"port\": ${RABBITMQ_PORT},
\"username\": \"${RABBITMQ_USERNAME}\",
\"password\": \"${RABBITMQ_PASSWORD}\"
}"
fi
mkdir -p /var/lib/zerotier-one
pushd /var/lib/zerotier-one
ln -s $ZT_IDENTITY_PATH/identity.public identity.public
ln -s $ZT_IDENTITY_PATH/identity.secret identity.secret
popd
DEFAULT_PORT=9993
echo "{
\"settings\": {
\"portMappingEnabled\": true,
\"softwareUpdate\": \"disable\",
\"interfacePrefixBlacklist\": [
\"inot\",
\"nat64\"
],
\"controllerDbPath\": \"postgres:host=${ZT_DB_HOST} port=${ZT_DB_PORT} dbname=${ZT_DB_NAME} user=${ZT_DB_USER} password=${ZT_DB_PASSWORD} sslmode=prefer sslcert=${DB_CLIENT_CERT} sslkey=${DB_CLIENT_KEY} sslrootcert=${DB_SERVER_CA}\"
${RMQ}
}
}
" > /var/lib/zerotier-one/local.conf
export GLIBCXX_FORCE_NEW=1
export GLIBCPP_FORCE_NEW=1
export LD_PRELOAD="/usr/lib64/libjemalloc.so"
exec /usr/local/bin/zerotier-one -p${ZT_CONTROLLER_PORT:-$DEFAULT_PORT} /var/lib/zerotier-one

9
attic/cycle_controllers.sh Executable file
View File

@ -0,0 +1,9 @@
#!/usr/bin/env bash
CONTROLLERS=`kubectl get pods -o=name | grep controller | sed "s/^.\{4\}//"`
for c in ${CONTROLLERS[@]}
do
kubectl delete pod ${c}
sleep 30
done

116
attic/debian/changelog Normal file
View File

@ -0,0 +1,116 @@
zerotier-one (1.4.6) unstable; urgency=medium
* Update default root server list
* Fix build flags on "armhf" (32-bit ARM) platforms for better
compatibility with Pi Zero and other devices.
* Fix license text in one.cpp.
* Add a clarification to LICENSE.txt.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Fri, 30 Aug 2019 01:00:00 -0700
zerotier-one (1.4.4) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
* License changed to BSL 1.1
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Fri, 23 Aug 2019 01:00:00 -0700
zerotier-one (1.4.2-2) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
* This is a new build that fixes a binary build issue with containers and SELinux
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Thu, 04 Aug 2019 01:00:00 -0700
zerotier-one (1.4.2) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Thu, 04 Aug 2019 01:00:00 -0700
zerotier-one (1.4.0) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Thu, 29 Jul 2019 01:00:00 -0700
zerotier-one (1.2.12) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 25 Jul 2018 01:00:00 -0700
zerotier-one (1.2.10) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 08 May 2018 01:00:00 -0700
zerotier-one (1.2.8) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 27 Apr 2018 01:00:00 -0700
zerotier-one (1.2.6) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 17 Apr 2018 01:00:00 -0700
zerotier-one (1.2.4) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Mon, 24 Mar 2017 01:00:00 -0700
zerotier-one (1.2.2) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Fri, 17 Mar 2017 01:00:00 -0700
zerotier-one (1.2.0) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 14 Mar 2017 09:08:00 -0700
zerotier-one (1.1.14) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 21 Jul 2016 07:14:12 -0700
zerotier-one (1.1.12) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 12 Jul 2016 03:02:22 -0700
zerotier-one (1.1.10) unstable; urgency=medium
* See https://github.com/zerotier/ZeroTierOne for release notes.
* ZeroTier Debian packages no longer depend on http-parser since its ABI is too unstable.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Tue, 12 Jul 2016 12:29:00 -0700
zerotier-one (1.1.8) unstable; urgency=low
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Fri, 08 Jul 2016 01:56:00 -0700
zerotier-one (1.1.6) unstable; urgency=medium
* First Debian release on ZeroTier, Inc. private apt repository.
* See https://github.com/zerotier/ZeroTierOne for release notes.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Fri, 24 Jun 2016 10:00:00 -0700
zerotier-one (1.1.5) UNRELEASED; urgency=medium
* Development package -- first clean Debian packaging test.
-- Adam Ierymenko <adam.ierymenko@zerotier.com> Wed, 08 Jun 2016 10:05:01 -0700

1
attic/debian/compat Normal file
View File

@ -0,0 +1 @@
8

View File

@ -3,14 +3,14 @@ Maintainer: Adam Ierymenko <adam.ierymenko@zerotier.com>
Section: net
Priority: optional
Standards-Version: 3.9.6
Build-Depends: debhelper (>= 9), libhttp-parser-dev (>= 2.1), liblz4-dev, libnatpmp-dev, dh-systemd, ruby-ronn
Build-Depends: debhelper (>= 9)
Vcs-Git: git://github.com/zerotier/ZeroTierOne
Vcs-Browser: https://github.com/zerotier/ZeroTierOne
Homepage: https://www.zerotier.com/
Package: zerotier-one
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libhttp-parser2.1, liblz4-1, libnatpmp1, iproute2
Depends: ${shlibs:Depends}, ${misc:Depends}, iproute2, adduser, libstdc++6
Homepage: https://www.zerotier.com/
Description: ZeroTier network virtualization service
ZeroTier One lets you join ZeroTier virtual networks and

View File

@ -0,0 +1,19 @@
Source: zerotier-one
Maintainer: Adam Ierymenko <adam.ierymenko@zerotier.com>
Section: net
Priority: optional
Standards-Version: 3.9.4
Build-Depends: debhelper
Vcs-Git: git://github.com/zerotier/ZeroTierOne
Vcs-Browser: https://github.com/zerotier/ZeroTierOne
Homepage: https://www.zerotier.com/
Package: zerotier-one
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, iproute, libstdc++6
Homepage: https://www.zerotier.com/
Description: ZeroTier network virtualization service
ZeroTier One lets you join ZeroTier virtual networks and
have them appear as tun/tap ports on your system. See
https://www.zerotier.com/ for instructions and
documentation.

18
attic/debian/copyright Normal file
View File

@ -0,0 +1,18 @@
Format: http://dep.debian.net/deps/dep5
Upstream-Name: zerotier-one
Source: https://github.com/zerotier/ZeroTierOne
Files: *
Copyright: 2011-2016 ZeroTier, Inc.
License: ZeroTier BSL 1.1
License: ZeroTier BSL 1.1
Copyright (c)2019 ZeroTier, Inc.
Use of this software is governed by the Business Source License included
in the LICENSE.TXT file in the project's root directory.
Change Date: 2023-01-01
On the date above, in accordance with the Business Source License, use
of this software will be governed by version 2.0 of the Apache License.

11
attic/debian/postinst Normal file
View File

@ -0,0 +1,11 @@
#!/bin/sh -e
case "$1" in
configure)
if ! id zerotier-one >>/dev/null 2>&1; then
useradd --system --user-group --home-dir /var/lib/zerotier-one --no-create-home zerotier-one
fi
;;
esac
#DEBHELPER#

View File

@ -7,7 +7,7 @@ CXXFLAGS=-O3 -fstack-protector-strong
dh $@ --with systemd
override_dh_auto_build:
make ZT_USE_MINIUPNPC=1 -j 2
make -j 4
override_dh_systemd_start:
dh_systemd_start --restart-after-upgrade

16
attic/debian/rules.static Normal file
View File

@ -0,0 +1,16 @@
#!/usr/bin/make -f
CFLAGS=-O3 -fstack-protector-strong
CXXFLAGS=-O3 -fstack-protector-strong
%:
dh $@ --with systemd
override_dh_auto_build:
# make -j 2
override_dh_systemd_start:
dh_systemd_start --restart-after-upgrade
override_dh_installinit:
dh_installinit --name=zerotier-one -- defaults

11
attic/debian/rules.wheezy Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/make -f
CFLAGS=-O3 -fstack-protector
CXXFLAGS=-O3 -fstack-protector
%:
dh $@
override_dh_auto_build:
make -j 2

View File

@ -0,0 +1,11 @@
#!/usr/bin/make -f
CFLAGS=-O3 -fstack-protector
CXXFLAGS=-O3 -fstack-protector
%:
dh $@
override_dh_auto_build:
# make -j 2

View File

@ -0,0 +1,4 @@
[zerotier-one]
title=ZeroTier One
description=A planetary Ethernet switch
ports=9993/udp

View File

@ -1,6 +1,7 @@
[Unit]
Description=ZeroTier One
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/sbin/zerotier-one

BIN
attic/doc/2015-GCM-SIV.pdf Normal file

Binary file not shown.

BIN
attic/doc/AES-GMAC-SIV.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

149
attic/doc/SECURITY.md Normal file
View File

@ -0,0 +1,149 @@
ZeroTier security and cryptographic design
=======
(c)2020 ZeroTier, Inc.
Author(s): Adam Ierymenko <adam@zerotier.com>
# Introduction
This document describes the core components of ZeroTier's cryptographic and security architecture. It focuses primarily on version 2.0 and only briefly touches on v1.x constructions that are being phased out.
The intended audience for this document is developers, auditors, and security professionals wishing to understand ZeroTier's design from a security posture point of view. It's also written to serve as the basis for professional security audits of the ZeroTier protocol and code base.
## High-Level Protocol Design
ZeroTier's protocol is split into two conceptual layers that we term **VL1** and **VL2**.
VL1 stands for *virtual layer 1* and is a cryptographically addressed secure global peer-to-peer network responsible for moving packets between ZeroTier nodes. It's a virtual analogue of the physical wire or radio transciever in an Ethernet or WiFi network respectively. Think of it as a gigantic wire closet for planet Earth.
VL2 stands for *virtual layer 2* and is a full Ethernet emulation layer incorporating cryptographic certificate and token based access control. It is similar (but not identical) to other Ethernet virtualization protocols like VXLAN. VL2 is conceptually separate from VL1 but for the sake of simplicity and ease of use leverages VL1's cryptographic infrastructure for its own authentication needs.
## VL1 Asymmetric Cryptography: Identities, and Addressing
VL1 peers are cryptographically addressed, meaning addresses are strongly bound to public keys. Cryptographic addressing is extremely convenient in peer-to-peer networks as it leverages authenticated (AEAD) encryption to implicity authenticate endpoint addresses.
A ZeroTier identity is comprised of one or more cryptographic public keys and a short **ZeroTier address** derived from a hash of those keys. In addition to this short address there also exists a longer fingerprint in the form of a SHA-384 hash of identity public key(s).
#### Identity Types and Corresponding Algorithms
* **Type 0** (v1.x and v2.x): one Curve25519 key for elliptic curve Diffie-Hellman and one Ed25519 key for Ed25519 signatures, with the address and fingerprint computed from a hash of both.
* **Type 1** (v2.x only): Curve25519, Ed25519, and NIST P-384 public keys, with the latter being used for signatures (the Ed25519 key is still there but is presently unused) and with *both* Curve25519 and NIST P-384 being used for elliptic curve Diffie-Hellman key agreement. In key agreement the resulting raw secret keys are hashed together using SHA-384 to combine them and yield a single session key.
Session keys resulting from identity key exchange and agreement are *long-lived keys* that remain static for the lifetime of a particular pair of identities. A different mechanism is used for ephemeral key negotiation.
#### ZeroTier Addresses and Identity Fingerprints
In the simplest form of cryptographic addressing, keys are used directly as addresses throughout the system. Unfortunately even public key cryptosystems with short keys like Curve25519 still result in string representations that are prohibitively long for human beings to type. ZeroTier mitigates this usability problem by using a short hash of the public key termed a **ZeroTier address** to refer to a peer's full identity. This short address is also used at the wire level to reduce the size of the packet header. Peers may request full identities based on addresses from from root servers.
ZeroTier addresses are very short: only 40 bits or 10 hexadecimal digits, e.g. `89e92ceee5.` This makes them convenient to type, but such a short hash would in a naive implementation introduce a significant risk that an attacker could create a duplicate identity with a different key pair but the same address. With 40 bits an intentional collision would require only an average of about 549,755,813,888 attempts for a 50% chance of colliding. If an attempt requires 0.5ms of CPU time on a typical contemporary desktop or server CPU, this would require about 3,000 CPU-days. Since this type of search is easy to parallelize, it would take only a few days for someone with access to a few thousand CPU cores.
To provide this short hash with a larger security margin, an intentionally slow one-way "hashcash" or "proof of work" function is required during identity generation. This work function is slow to compute but fast to verify, and an address is not valid unless its work checks out. This gives identity address derivation the following costs:
* Type 1 identities: an average of about 500ms per key pair per typical 2.4ghz CPU core, requiring around 3 million CPU-days to reach a 50% collision probability.
* Type 2 identities: an average of about one second per key pair per typical 2.4ghz CPU core, requiring around 6.3 million CPU-days to reach a 50% collision probability.
While too costly for the vast majority of attackers, this cost may not be prohibitive to a nation-state level attacker or to a criminal with significant funds and/or access to a very large "botnet." It's also possible that FPGA, GPU, or ASIC acceleration could be leveraged to decrease this time in a manner similar to what's been accomplished in the area of cryptocurrency mining.
Fingerprints are full SHA-384 hashes of identity public keys. In base32-encoding they look like this:
```
bzg7fc3sn46fzyxcxw2ev4c4m2u5fyisb3o4wz5hfmvexbzwk6et3fsglkdcn6nnjobxi3bq7hgxqox3n4u4k
```
These are too large to type but not to copy/paste, store in databases, or use in scripts and APIs.
Once a device has joined a network, network controllers will remember and check its full identity or identity fingerprint (depending on implementation) rather than just the device's ZeroTier address.
## VL1 Wire Protocol
ZeroTier's wire protocol is packet based with packets having the following format:
```
[0:8] 64-bit packet ID and cryptographic nonce
[8:13] 40-bit destination ZeroTier address
[13:18] 40-bit source ZeroTier address
[18:19] 8-bit cleartext flags, cipher, and hop count (bits: FFCCCHHH)
[19:27] 64-bit message authentication code (MAC)
-- BEGIN ENCRYPTED SECTION --
[27:28] 8-bit inner flags and 5-bit protocol verb (bits: FFFVVVVV)
[28:...] Verb-specific packet payload
```
All fields (both those that remain cleartext and those that are encrypted) in a packet are authenticated except for the last three "hops" bits of the combined flags/cipher/hops field. These are masked to zero during MAC computation and verification. This is because the hops field is the only field that can be modified by third party peers in transit. It's incremented whenever a packet is forwarded by a root server or connectivity-assisting peer and is checked against a limit to prevent infinite forwarding loops.
Packets can be up to 16,384 bytes in size. Since the most common transport is UDP and this transport does not reliably support fragmentation, ZeroTier implements its own packet fragmentation and re-assembly scheme using fragments with the following wire format:
```
[0:8] 64-bit packet ID of packet of which this is a fragment
[8:13] 40-bit destination ZeroTier address
[13:14] 0xff here indicates a fragment since addresses cannot start with this byte
[14:15] 4-bit total fragments and 4-bit fragment number (bits: TTTTNNNN)
[15:16] 5 reserved bits, 3-bit hop count (bits: rrrrrHHH)
[16:...] Fragment data
```
A fragmented packet is indicated by the presence of the flag 0x40 in its cleartext flags field. If this flag is present the receiver must expect the receipt of one or more fragments in addition to the packet's header and first fragment. The total number of fragments expected is not contained in the header but will be contained within each subsequent fragment. If a fragment is received prior to its head, it's held in the event that its head arrives as the protocol does support out of order receipt of fragments.
Fragmentation can be effectively ignored from a security point of view (with the exception of denial of service concerns, which are mitigated by way of limits and heuristics in the code) since packet message authentication codes are checked at the packet level. Any improperly fragmented packet will fail cryptographic MAC check and be discarded.
*Legacy: In v1.x the packet ID and nonce field was assigned from a counter maintained to avoid duplicate nonce assignment and the MAC field was the first 64 bits of a Poly1305 MAC of the packet. The overall construction was identical in form to the NaCl Salsa20/Poly1305 "secret box" construction in which the first 32 bytes of Salsa20 output are used as a one-time Poly1305 key for each packet.*
In v2.x the packet ID and MAC field are in reality a single split 128-bit encrypted nonce and MAC field. See AES-GMAC-SIV below.
## Symmetric Encryption: AES-GMAC-SIV
**This is a draft and may change based on peer review and feedback.**
In v1.x there is a risk of nonce re-use due in part to the small size of the MAC and in part to the way ZeroTier is used. More specifically the risk arises when ZeroTier VMs are cloned or ZeroTier is used on small devices that have the potential to lack both accurate timekeeping and native strong random sources.
Salsa20 was used in v1.x since at the time the protocol was initially designed AES acceleration was not available on most mobile phones, embedded chips, and small ARM processors such as those use on Raspberry Pi and similar devices. This is no longer the case.
For v2.x our design has three objectives:
- Make use of FIPS140-compliant cryptographic primitives that would be available in a FIPS140-ceritified library (e.g. a FIPS build of crypto++ or openssl libcrypto), and use them in a way that could pass FIPS/NIST/NSA review.
- Use AES with hardware acceleration for extremely high performance processors with AES hardware acceleration, which is most non-trivial CPUs today.
- Incorporate some form of nonce-reuse-resistance to reduce the risk of duplicate nonces when virtual machines are cloned or on small devices, and to mitigate the short MAC.
The proposed AES-GMAC-SIV construction attempts to achieve all these objectives by using GMAC combined with AES-CTR (both FIPS140 primitives) in a way that achieves the security bounds and characteristics of AES-GCM-SIV but could be certified as FIPS compliant. The design is almost identical to another proposed mode called AES-GCM-SIV except that GMAC is used "as-is" for FIPS-certifiability reasons.
#### AES-GMAC-SIV Session Setup
For each new session key, derive two sub-keys **K0** and **K1** using a key derivation function such as KBKDF-HMAC-SHA384.
#### AES-GMAC-SIV Encryption
<img src="AES-GMAC-SIV.png">
As with all other SIV (synthetic IV) modes of operation, encryption requires two passes. Since messages are small in our system it's very likely that the second pass would be operating on data already in CPU L0 cache, reducing the additional overhead of this two-pass requirement.
1. Generate a new unique 64-bit packet ID in the same manner as v1.x.
2. Expand this 64-bit ID to a 96-bit AES-GMAC nonce by padding the remainder with the size of the packet in bytes and the direction of communication (sender > recipient or recipient > sender). This adds a small amount of additional entropy taken from characteristics of the packet.
3. Using session sub-key **K0** compute AES-GMAC(K0, plaintext) to yield a 128-bit GMAC tag.
4. Take the first 64 bits of this 128-bit GMAC tag and append it to the 64-bit packet ID generated in step 1 to yield a 128-bit combined nonce+MAC field.
5. Obtain a 128-bit AES-CTR nonce by encrypting this 128-bit combined nonce+MAC field as a single AES block using **K1**. This is done because GMAC alone is not a cryptographic PRF (pseudo-random function) and we want to ensure that we destroy any algebraic structure before using it with AES-CTR.
6. Using the encrypted nonce+MAC field as a 128-bit nonce, encrypt the encrypted section of the packet with AES-CTR. This is also done using **K1**, meaning that the first block of CTR padding data is actually AES(K1,AES(K1,nonce+MAC)).
7. Encrypt the 128-bit AES-CTR nonce again as a single AES block using **K0** to yield a final encrypted 128-bit combined nonce and MAC. *(Question for peer review: does this step have any attack-mitigating value? AES-CTR does not require that its nonce/IV be a secret.)*
8. Split this final encrypted nonce+IV into two 64-bit chunks, replacing the packet ID with one and placing the other in the packet MAC field.
#### AES-GMAC-SIV Decryption
Unlike encryption, SIV decryption can be performed in a single pass if there is a performance benefit to doing so.
1. Re-combine the packet ID and MAC fields into a single 128-bit block.
2. Decrypt this block with AES using **K0** to yield the AES-CTR nonce.
3. Decrypt the packet using AES-CTR with **K1**.
4. Decrypt the 128-bit AES-CTR nonce field *again* as a single AES block using **K1** to obtain the original packet nonce and 64-bit truncated GMAC tag.
5. Expand the 64-bit packet ID / nonce into a 96-bit GMAC nonce as in encryption step 2.
6. Compute AES-GMAC(K0,plaintext) as in encryption step 3.
7. Verify that the first 64 bytes of the resulting GMAC tag equals the tag (last 64 bits) obtained in decryption step 4 and discard the packet if they do not match.
#### Discussion
Most standard stream cipher modes such as AES-GCM or Salsa20/Poly1305 require that message nonce/IV values are never duplicated for the same session key. Since these stream modes generate key streams that are simply XORed with message plaintext, nonce duplication reveals the plaintext of both messages for which the nonce is duplicated due to the commutativity of the XOR operation. It may also allow the MAC (GMAC or Poly1305) itself to be attacked in such a way as to enable message forgery.
SIV modes mitigate these attacks by making the actual cryptographic nonce used for stream encryption dependent on the content of the message. If a nonce is repeated when two messages differ, ciphertext will still be unique unless a MAC collision also occurs. The chance of this is quite small, only 1/2^64 in our system for any given pair of repeated nonce values. If a repeated nonce occurs and both messages are the same, the protocol will leak only the fact that a message was repeated. The actual plaintext and MAC are not compromised.
Our AES-GMAC-SIV mode is almost identical to a proposed mode called [AES-GCM-SIV](https://cyber.biu.ac.il/aes-gcm-siv/). The proposed AES-GCM-SIV mode uses a variant of GMAC called POLYVAL with very minor performance improvements while ours retains standard GMAC for compatibility with existing standards and libraries. We call our mode AES-GMAC-SIV to distinguish it.
*Question for peer review: both GMAC and AES-CTR are FIPS140 approved primitives, and the use of AES-CTR with an approved MAC is permitted. Is it actually feasible that this could be FIPS certified if it were documented in a correct and "strategic" way? It would be described as GMAC authenticated AES-CTR with the CTR IV being constructed via keyed hash (AES) from an initial plaintext IV and a "salt" taken from the MAC, or some similar description.*

83
attic/doc/zerotier-cli.1 Normal file
View File

@ -0,0 +1,83 @@
.TH "ZEROTIER\-CLI" "1" "December 2016" "" ""
.SH "NAME"
\fBzerotier-cli\fR \- control local ZeroTier virtual network service
.SH SYNOPSIS
.P
\fBzerotier\-cli\fP [\-switches] <command> [arguments]
.SH DESCRIPTION
.P
\fBzerotier\-cli\fR provides a simple command line interface to the local JSON API of the ZeroTier virtual network endpoint service zerotier\-one(8)\.
.P
By default \fBzerotier\-cli\fR must be run as root or with \fBsudo\fP\|\. If you want to allow an unprivileged user to use \fBzerotier\-cli\fR to control the system ZeroTier service, you can create a local copy of the ZeroTier service authorization token in the user's home directory:
.P
.RS 2
.nf
sudo cp /var/lib/zerotier\-one/authtoken\.secret /home/user/\.zeroTierOneAuthToken
chown user /home/user/\.zeroTierOneAuthToken
chmod 0600 /home/user/\.zeroTierOneAuthToken
.fi
.RE
.P
(The location of ZeroTier's service home may differ by platform\. See zerotier\-one(8)\.)
.P
Note that this gives the user the power to connect or disconnect the system to or from any virtual network, which is a significant permission\.
.P
\fBzerotier\-cli\fR has several command line arguments that are visible in \fBhelp\fP output\. The two most commonly used are \fB\-j\fP for raw JSON output and \fB\-D<path>\fP to specify an alternative ZeroTier service working directory\. Raw JSON output is easier to parse in scripts and also contains verbose details not present in the tabular output\. The \fB\-D<path>\fP option specifies where the service's zerotier\-one\.port and authtoken\.secret files are located if the service is not running at the default location for your system\.
.SH COMMANDS
.RS 0
.IP \(bu 2
\fBhelp\fP:
Displays \fBzerotier\-cli\fR help\.
.IP \(bu 2
\fBinfo\fP:
Shows information about this device including its 10\-digit ZeroTier address and apparent connection status\. Use \fB\-j\fP for more verbose output\.
.IP \(bu 2
\fBlistpeers\fP:
This command lists the ZeroTier VL1 (virtual layer 1, the peer to peer network) peers this service knows about and has recently (within the past 30 minutes or so) communicated with\. These are not necessarily all the devices on your virtual network(s), and may also include a few devices not on any virtual network you've joined\. These are typically either root servers or network controllers\.
.IP \(bu 2
\fBlistnetworks\fP:
This lists the networks your system belongs to and some information about them, such as any ZeroTier\-managed IP addresses you have been assigned\. (IP addresses assigned manually to ZeroTier interfaces will not be listed here\. Use the standard network interface commands to see these\.)
.IP \(bu 2
\fBjoin\fP:
To join a network just use \fBjoin\fP and its 16\-digit hex network ID\. That's it\. Then use \fBlistnetworks\fP to see the status\. You'll either get a reply from the network controller with a certificate and other info such as IP assignments, or you'll get "access denied\." In this case you'll need the administrator of this network to authorize your device by its 10\-digit device ID (visible with \fBinfo\fP) on the network's controller\.
.IP \(bu 2
\fBleave\fP:
Leaving a network is as easy as joining it\. This disconnects from the network and deletes its interface from the system\. Note that peers on the network may hang around in \fBlistpeers\fP for up to 30 minutes until they time out due to lack of traffic\. But if they no longer share a network with you, they can't actually communicate with you in any meaningful way\.
.RE
.SH EXAMPLES
.P
Join "Earth," ZeroTier's big public party line network:
.P
.RS 2
.nf
$ sudo zerotier\-cli join 8056c2e21c000001
$ sudo zerotier\-cli listnetworks
( wait until you get an Earth IP )
$ ping earth\.zerotier\.net
( you should now be able to ping our Earth test IP )
.fi
.RE
.P
Leave "Earth":
.P
.RS 2
.nf
$ sudo zerotier\-cli leave 8056c2e21c000001
.fi
.RE
.P
List VL1 peers:
.P
.RS 2
.nf
$ sudo zerotier\-cli listpeers
.fi
.RE
.SH COPYRIGHT
.P
(c)2011\-2016 ZeroTier, Inc\. \-\- https://www\.zerotier\.com/ \-\- https://github\.com/zerotier
.SH SEE ALSO
.P
zerotier\-one(8), zerotier\-idtool(1)

View File

@ -0,0 +1,84 @@
.TH "ZEROTIER\-IDTOOL" "1" "December 2016" "" ""
.SH "NAME"
\fBzerotier-idtool\fR \- tool for creating and manipulating ZeroTier identities
.SH SYNOPSIS
.P
\fBzerotier\-idtool\fP <command> [args]
.SH DESCRIPTION
.P
\fBzerotier\-idtool\fR is a command line utility for doing things with ZeroTier identities\. A ZeroTier identity consists of a public/private key pair (or just the public if it's only an identity\.public) and a 10\-digit hexadecimal ZeroTier address derived from the public key by way of a proof of work based hash function\.
.SH COMMANDS
.P
When command arguments call for a public or secret (full) identity, the identity can be specified as a path to a file or directly on the command line\.
.RS 0
.IP \(bu 2
\fBhelp\fP:
Display help\. (Also running with no command does this\.)
.IP \(bu 2
\fBgenerate\fP [secret file] [public file] [vanity]:
Generate a new ZeroTier identity\. If a secret file is specified, the full identity including the private key will be written to this file\. If the public file is specified, the public portion will be written there\. If no file paths are specified the full secret identity is output to STDOUT\. The vanity prefix is a series of hexadecimal digits that the generated identity's address should start with\. Typically this isn't used, and if it's specified generation can take a very long time due to the intrinsic cost of generating identities with their proof of work function\. Generating an identity with a known 16\-bit (4 digit) prefix on a 2\.8ghz Core i5 (using one core) takes an average of two hours\.
.IP \(bu 2
\fBvalidate\fP <identity, only public part required>:
Locally validate an identity's key and proof of work function correspondence\.
.IP \(bu 2
\fBgetpublic\fP <full identity with secret>:
Extract the public portion of an identity\.secret and print to STDOUT\.
.IP \(bu 2
\fBsign\fP <full identity with secret> <file to sign>:
Sign a file's contents with SHA512+ECC\-256 (ed25519)\. The signature is output in hex to STDOUT\.
.IP \(bu 2
\fBverify\fP <identity, only public part required> <file to check> <signature in hex>:
Verify a signature created with \fBsign\fP\|\.
.IP \(bu 2
\fBmkcom\fP <full identity with secret> [id,value,maxdelta] [\|\.\.\.]:
Create and sign a network membership certificate\. This is not generally useful since network controllers do this automatically and is included mostly for testing purposes\.
.RE
.SH EXAMPLES
.P
Generate and dump a new identity:
.P
.RS 2
.nf
$ zerotier\-idtool generate
.fi
.RE
.P
Generate and write a new identity, both secret and public parts:
.P
.RS 2
.nf
$ zerotier\-idtool generate identity\.secret identity\.public
.fi
.RE
.P
Generate a vanity address that begins with the hex digits "beef" (this will take a while!):
.P
.RS 2
.nf
$ zerotier\-idtool generate beef\.secret beef\.public beef
.fi
.RE
.P
Sign a file with an identity's secret key:
.P
.RS 2
.nf
$ zerotier\-idtool sign identity\.secret last_will_and_testament\.txt
.fi
.RE
.P
Verify a file's signature with a public key:
.P
.RS 2
.nf
$ zerotier\-idtool verify identity\.public last_will_and_testament\.txt
.fi
.RE
.SH COPYRIGHT
.P
(c)2011\-2016 ZeroTier, Inc\. \-\- https://www\.zerotier\.com/ \-\- https://github\.com/zerotier
.SH SEE ALSO
.P
zerotier\-one(8), zerotier\-cli(1)

104
attic/doc/zerotier-one.8 Normal file
View File

@ -0,0 +1,104 @@
.TH "ZEROTIER\-ONE" "8" "December 2016" "" ""
.SH "NAME"
\fBzerotier-one\fR \- ZeroTier virtual network endpoint service
.SH SYNOPSIS
.P
\fBzerotier\-one\fP [\-switches] [working directory]
.SH DESCRIPTION
.P
\fBzerotier\-one\fR is the service/daemon responsible for connecting a Unix (Linux/BSD/OSX) system to one or more ZeroTier virtual networks and presenting those networks to the system as virtual network ports\. You can think of it as a peer to peer VPN client\.
.P
It's typically run by init systems like systemd (Linux) or launchd (Mac) rather than directly by the user, and it must be run as root unless you give it the \fB\-U\fP switch and don't plan on actually joining networks (e\.g\. to run a network controller microservice only)\.
.P
The \fBzerotier\-one\fR service keeps its state and other files in a working directory\. If this directory is not specified at launch it defaults to "/var/lib/zerotier\-one" on Linux, "/Library/Application Support/ZeroTier/One" on Mac, and "/var/db/zerotier\-one" on FreeBSD and other similar BSDs\. The working directory should persist\. It shouldn't be automatically cleaned by system cleanup daemons or stored in a volatile location\. Loss of its identity\.secret file results in loss of this system's unique 10\-digit ZeroTier address and key\.
.P
Multiple instances of \fBzerotier\-one\fR can be run on the same system as long as they are run with different primary ports (see switches) and a different working directory\. But since a single service can join any number of networks, typically there's no point in doing this\.
.P
The \fBzerotier\-one\fR service is controlled via a JSON API available at 127\.0\.0\.1:<primary port> with the default primary port being 9993\. Access to this API requires an authorization token normally found in the authtoken\.secret file in the service's working directory\. On some platforms access may be guarded by other measures such as socket peer UID/GID lookup if additional security options are enabled (this is not the default)\.
.P
The first time the service is started in a fresh working directory, it generates a ZeroTier identity\. On slow systems this process can take ten seconds or more due to an anti\-DDOS/anti\-counterfeit proof of work function used by ZeroTier in address generation\. This only happens once, and once generated the result is saved in identity\.secret in the working directory\. This file represents and defines/claims your ZeroTier address and associated ECC\-256 key pair\.
.SH SWITCHES
.RS 0
.IP \(bu 2
\fB\-h\fP:
Display help\.
.IP \(bu 2
\fB\-v\fP:
Display ZeroTier One version\.
.IP \(bu 2
\fB\-U\fP:
Skip privilege check and allow to be run by non\-privileged user\. This is typically used when \fBzerotier\-one\fR is built with the network controller option included\. In this case the ZeroTier service might only be acting as a network controller and might never actually join networks, in which case it does not require elevated system permissions\.
.IP \(bu 2
\fB\-p<port>\fP:
Specify a different primary port\. If this is not given the default is 9993\. If zero is given a random port is chosen each time\.
.IP \(bu 2
\fB\-d\fP:
Fork and run as a daemon\.
.IP \(bu 2
\fB\-i\fP:
Invoke the \fBzerotier\-idtool\fR personality, in which case the binary behaves like zerotier\-idtool(1)\. This happens automatically if the name of the binary (or a symlink to it) is zerotier\-idtool\.
.IP \(bu 2
\fB\-q\fP:
Invoke the \fBzerotier\-cli\fR personality, in which case the binary behaves like zerotier\-cli(1)\. This happens automatically if the name of the binary (or a symlink to it) is zerotier\-cli\.
.RE
.SH EXAMPLES
.P
Run as daemon with OS default working directory and default port:
.P
.RS 2
.nf
$ sudo zerotier\-one \-d
.fi
.RE
.P
Run as daemon with a different working directory and port:
.P
.RS 2
.nf
$ sudo zerotier\-one \-d \-p12345 /tmp/zerotier\-working\-directory\-test
.fi
.RE
.SH FILES
.P
These are found in the service's working directory\.
.RS 0
.IP \(bu 2
\fBidentity\.public\fP:
The public portion of your ZeroTier identity, which is your 10\-digit hex address and the associated public key\.
.IP \(bu 2
\fBidentity\.secret\fP:
Your full ZeroTier identity including its private key\. This file identifies the system on the network, which means you can move a ZeroTier address around by copying this file and you should back up this file if you want to save your system's static ZeroTier address\. This file must be protected, since theft of its secret key will allow anyone to impersonate your device on any network and decrypt traffic\. For network controllers this file is particularly sensitive since it constitutes the private key for a certificate authority for the controller's networks\.
.IP \(bu 2
\fBauthtoken\.secret\fP:
The secret token used to authenticate requests to the service's local JSON API\. If it does not exist it is generated from a secure random source on service start\. To use, send it in the "X\-ZT1\-Auth" header with HTTP requests to 127\.0\.0\.1:<primary port>\|\.
.IP \(bu 2
\fBdevicemap\fP:
Remembers mappings of zt# interface numbers to ZeroTier networks so they'll persist across restarts\. On some systems that support longer interface names that can encode the network ID (such as FreeBSD) this file may not be present\.
.IP \(bu 2
\fBzerotier\-one\.pid\fP:
ZeroTier's PID\. This file is deleted on normal shutdown\.
.IP \(bu 2
\fBzerotier\-one\.port\fP:
ZeroTier's primary port, which is also where its JSON API is found at 127\.0\.0\.1:<this port>\|\. This file is created on startup and is read by zerotier\-cli(1) to determine where it should find the control API\.
.IP \(bu 2
\fBcontroller\.db\fP:
If the ZeroTier One service is built with the network controller enabled, this file contains the controller's SQLite3 database\.
.IP \(bu 2
\fBcontroller\.db\.backup\fP:
If the ZeroTier One service is built with the network controller enabled, it periodically backs up its controller\.db database in this file (currently every 5 minutes if there have been changes)\. Since this file is not a currently in use SQLite3 database it's safer to back up without corruption\. On new backups the file is rotated out rather than being rewritten in place\.
.IP \(bu 2
\fBiddb\.d/\fP (directory):
Caches the public identity of every peer ZeroTier has spoken with in the last 60 days\. This directory and its contents can be deleted, but this may result in slower connection initations since it will require that we go out and re\-fetch full identities for peers we're speaking to\.
.IP \(bu 2
\fBnetworks\.d\fP (directory):
This caches network configurations and certificate information for networks you belong to\. ZeroTier scans this directory for <network ID>\|\.conf files on startup to recall its networks, so "touch"ing an empty <network ID>\|\.conf file in this directory is a way of pre\-configuring ZeroTier to join a specific network on startup without using the API\. If the config file is empty ZeroTIer will just fetch it from the network's controller\.
.RE
.SH COPYRIGHT
.P
(c)2011\-2016 ZeroTier, Inc\. \-\- https://www\.zerotier\.com/ \-\- https://github\.com/zerotier
.SH SEE ALSO
.P
zerotier\-cli(1), zerotier\-idtool(1)

View File

@ -0,0 +1,23 @@
FROM alpine:3.11.3
ARG go_pkg_url
RUN apk add --update alpine-sdk linux-headers cmake openssh curl
RUN adduser -D -s /bin/ash jenkins && \
passwd -u jenkins && \
ssh-keygen -A && \
mkdir /home/jenkins/.ssh && \
chown -R jenkins:jenkins /home/jenkins
RUN curl -s $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz
COPY authorized_keys /home/jenkins/.ssh/authorized_keys
RUN chown -R jenkins:jenkins /home/jenkins/.ssh && \
chmod 600 /home/jenkins/.ssh/authorized_keys
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

View File

@ -0,0 +1,20 @@
FROM centos:6
ARG go_pkg_url
RUN yum update -y
RUN yum install -y curl git wget openssh-server sudo make rpmdevtools && yum clean all
RUN curl -s $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN echo $'\n\
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n'\
>> ~/.bash_profile
RUN mkdir /rpmbuild && chmod 777 /rpmbuild
CMD ["/usr/sbin/sshd", "-D"]

View File

@ -0,0 +1,21 @@
FROM i386/centos:6
ARG go_pkg_url
RUN echo i386 > /etc/yum/vars/basearch && echo i686 > /etc/yum/vars/arch
RUN yum install -y curl git wget openssh-server sudo make rpmdevtools && yum clean all
RUN curl -s $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN echo $'\n\
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n'\
>> ~/.bash_profile
RUN mkdir /rpmbuild && chmod 777 /rpmbuild
CMD ["/usr/sbin/sshd", "-D"]

View File

@ -0,0 +1,32 @@
FROM centos:7
ARG go_pkg_url
RUN yum install -y epel-release
RUN yum install -y curl git wget openssh-server sudo make development-tools rpmdevtools clang gcc-c++ ruby ruby-devel centos-release-scl devtoolset-8 llvm-toolset-7 openssl-devel && yum clean all
RUN curl -sL https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
cd cmake-3.16.3 && \
./bootstrap && \
make -j4 && \
make install
RUN curl -s $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN wget -qO- "https://cmake.org/files/v3.15/cmake-3.15.1-Linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C /usr/local
RUN /usr/bin/ssh-keygen -A
RUN useradd jenkins-build
RUN echo $'\n\
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n\
source scl_source enable devtoolset-8 llvm-toolset-7\n'\
>> ~/.bash_profile
RUN mkdir /rpmbuild && chmod 777 /rpmbuild
CMD ["/usr/sbin/sshd", "-D"]

View File

@ -0,0 +1,29 @@
FROM centos:7
ARG go_pkg_url
RUN yum install -y curl git wget openssh-server sudo make development-tools rpmdevtools clang gcc-c++ ruby ruby-devel openssl-devel && yum clean all
RUN curl -sL https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
cd cmake-3.16.3 && \
./bootstrap && \
make -j4 && \
make install
RUN curl -s $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN /usr/bin/ssh-keygen -A
RUN useradd jenkins-build
RUN echo $'\n\
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n'\
>> ~/.bash_profile
RUN mkdir /rpmbuild && chmod 777 /rpmbuild
CMD ["/usr/sbin/sshd", "-D"]

View File

@ -0,0 +1,25 @@
FROM centos:8
ARG go_pkg_url
RUN yum install -y epel-release
RUN yum install -y curl git wget openssh-server sudo make rpmdevtools clang gcc-c++ ruby ruby-devel cmake && yum clean all
RUN curl -s $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN wget -qO- "https://cmake.org/files/v3.15/cmake-3.15.1-Linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C /usr/local
RUN /usr/bin/ssh-keygen -A
RUN useradd jenkins-build
RUN echo $'\n\
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n\
source scl_source enable devtoolset-8 llvm-toolset-7\n'\
>> ~/.bash_profile
RUN mkdir /rpmbuild && chmod 777 /rpmbuild
CMD ["/usr/sbin/sshd", "-D"]

View File

@ -0,0 +1,26 @@
FROM s390x/clefos:7
ARG go_pkg_url
RUN yum install -y curl git wget openssh-server sudo make development-tools rpmdevtools clang gcc-c++ ruby ruby-devel openssl-devel && yum clean all
RUN curl -sL https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
cd cmake-3.16.3 && \
./bootstrap && \
make -j4 && \
make install
RUN curl -s $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN /usr/bin/ssh-keygen -A
RUN echo $'\n\
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n'\
>> ~/.bash_profile
RUN mkdir /rpmbuild && chmod 777 /rpmbuild
CMD ["/usr/sbin/sshd", "-D"]

View File

@ -0,0 +1,15 @@
FROM debian:bullseye-20191224
ARG go_pkg_url
RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd cmake
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,15 @@
FROM debian:buster-20191224
ARG go_pkg_url
RUN apt-get update && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd cmake
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,22 @@
FROM debian:jessie-20191224
ARG go_pkg_url
RUN apt-get update && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd libssl-dev
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN curl -sL https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
cd cmake-3.16.3 && \
./bootstrap && \
make -j4 && \
make install
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,15 @@
FROM debian:sid-20191224
ARG go_pkg_url
RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd cmake
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,22 @@
FROM debian:stretch-20191224
ARG go_pkg_url
RUN apt-get update && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd libssl-dev
RUN curl -sL https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
cd cmake-3.16.3 && \
./bootstrap && \
make -j4 && \
make install
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,23 @@
FROM debian:wheezy-20190228
ARG go_pkg_url
RUN echo "deb http://archive.debian.org/debian/ wheezy contrib main non-free" > /etc/apt/sources.list && \
echo "deb-src http://archive.debian.org/debian/ wheezy contrib main non-free" >> /etc/apt/sources.list && \
apt-get update && apt-get install -y apt-utils && \
apt-get install -y --force-yes \
curl gcc make sudo expect gnupg fakeroot perl-base=5.14.2-21+deb7u3 perl \
libc-bin=2.13-38+deb7u10 libc6=2.13-38+deb7u10 libc6-dev build-essential \
cdbs devscripts equivs automake autoconf libtool libaudit-dev selinux-basics \
libdb5.1=5.1.29-5 libdb5.1-dev libssl1.0.0=1.0.1e-2+deb7u20 procps gawk libsigsegv2 \
curl ca-certificates devscripts
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,15 @@
FROM kalilinux/kali-rolling:latest
ARG go_pkg_url
RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd cmake
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,15 @@
FROM ubuntu:bionic-20200112
ARG go_pkg_url
RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd cmake
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,15 @@
FROM ubuntu:eoan-20200114
ARG go_pkg_url
RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd cmake
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,22 @@
FROM ubuntu:trusty-20191217
ARG go_pkg_url
RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd libssl-dev
RUN curl -sL https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
cd cmake-3.16.3 && \
./bootstrap && \
make -j4 && \
make install
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

View File

@ -0,0 +1,22 @@
FROM ubuntu:xenial-20200114
ARG go_pkg_url
RUN apt-get update && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd
RUN curl -sL https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz -o cmake.tar.gz && \
tar -xzf cmake.tar.gz && \
cd cmake-3.16.3 && \
./bootstrap && \
make -j4 && \
make install
RUN curl -s -k $go_pkg_url -o go.tar.gz && \
tar -C /usr/local -xzf go.tar.gz && \
rm go.tar.gz
RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
RUN chmod 777 /home
CMD ["/usr/bin/sshd", "-D"]

111
attic/dockerbuild/Makefile Normal file
View File

@ -0,0 +1,111 @@
.PHONY: all
all: alpine centos clefos debian ubuntu kali-rolling
alpine:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.alpine . -t ztbuild/alpine-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.alpine . -t ztbuild/alpine-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.alpine . -t ztbuild/alpine-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v6 -f Dockerfile.alpine . -t ztbuild/alpine-armel --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.alpine . -t ztbuild/alpine-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.alpine . -t ztbuild/alpine-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.alpine . -t ztbuild/alpine-s390x --load
centos:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.centos7 . -t ztbuild/centos7-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.centos7-i386 . -t ztbuild/centos7-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.centos6 . -t ztbuild/centos6-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.centos6-i386 . -t ztbuild/centos6-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.centos8 . -t ztbuild/centos8-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.centos8 . -t ztbuild/centos8-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.centos8 . -t ztbuild/centos8-ppc64le --load
clefos:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.clefos-s390x . -t ztbuild/clefos-s390x --load
debian: debian-wheezy debian-jessie debian-buster debian-stretch debian-bullseye debian-sid
debian-wheezy:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.debian-wheezy . -t ztbuild/debian-wheezy-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.debian-wheezy . -t ztbuild/debian-wheezy-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v6 -f Dockerfile.debian-wheezy . -t ztbuild/debian-wheezy-armel --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.debian-wheezy . -t ztbuild/debian-wheezy-i386 --load
debian-jessie:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.debian-jessie . -t ztbuild/debian-jessie-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.debian-jessie . -t ztbuild/debian-jessie-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v6 -f Dockerfile.debian-jessie . -t ztbuild/debian-jessie-armel --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.debian-jessie . -t ztbuild/debian-jessie-i386 --load
debian-buster:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.debian-buster . -t ztbuild/debian-buster-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.debian-buster . -t ztbuild/debian-buster-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v6 -f Dockerfile.debian-buster . -t ztbuild/debian-buster-armel --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.debian-buster . -t ztbuild/debian-buster-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.debian-buster . -t ztbuild/debian-buster-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.debian-buster . -t ztbuild/debian-buster-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.debian-buster . -t ztbuild/debian-buster-s390x --load
debian-stretch:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.debian-stretch . -t ztbuild/debian-stretch-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.debian-stretch . -t ztbuild/debian-stretch-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v6 -f Dockerfile.debian-stretch . -t ztbuild/debian-stretch-armel --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.debian-stretch . -t ztbuild/debian-stretch-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.debian-stretch . -t ztbuild/debian-stretch-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.debian-stretch . -t ztbuild/debian-stretch-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.debian-stretch . -t ztbuild/debian-stretch-s390x --load
debian-bullseye:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.debian-bullseye . -t ztbuild/debian-bullseye-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.debian-bullseye . -t ztbuild/debian-bullseye-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v6 -f Dockerfile.debian-bullseye . -t ztbuild/debian-bullseye-armel --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.debian-bullseye . -t ztbuild/debian-bullseye-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.debian-bullseye . -t ztbuild/debian-bullseye-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.debian-bullseye . -t ztbuild/debian-bullseye-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.debian-bullseye . -t ztbuild/debian-bullseye-s390x --load
debian-sid:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.debian-sid . -t ztbuild/debian-sid-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.debian-sid . -t ztbuild/debian-sid-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v6 -f Dockerfile.debian-sid . -t ztbuild/debian-sid-armel --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.debian-sid . -t ztbuild/debian-sid-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.debian-sid . -t ztbuild/debian-sid-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.debian-sid . -t ztbuild/debian-sid-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.debian-sid . -t ztbuild/debian-sid-s390x --load
ubuntu: ubuntu-trusty ubuntu-xenial ubuntu-bionic ubuntu-eoan
ubuntu-trusty:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.ubuntu-trusty . -t ztbuild/ubuntu-trusty-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.ubuntu-trusty . -t ztbuild/ubuntu-trusty-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.ubuntu-trusty . -t ztbuild/ubuntu-trusty-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.ubuntu-trusty . -t ztbuild/ubuntu-trusty-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.ubuntu-trusty . -t ztbuild/ubuntu-trusty-ppc64le --load
ubuntu-xenial:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.ubuntu-xenial . -t ztbuild/ubuntu-xenial-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.ubuntu-xenial . -t ztbuild/ubuntu-xenial-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.ubuntu-xenial . -t ztbuild/ubuntu-xenial-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.ubuntu-xenial . -t ztbuild/ubuntu-xenial-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.ubuntu-xenial . -t ztbuild/ubuntu-xenial-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.ubuntu-xenial . -t ztbuild/ubuntu-xenial-s390x --load
ubuntu-bionic:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.ubuntu-bionic . -t ztbuild/ubuntu-bionic-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.ubuntu-bionic . -t ztbuild/ubuntu-bionic-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.ubuntu-bionic . -t ztbuild/ubuntu-bionic-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.ubuntu-bionic . -t ztbuild/ubuntu-bionic-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.ubuntu-bionic . -t ztbuild/ubuntu-bionic-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.ubuntu-bionic . -t ztbuild/ubuntu-bionic-s390x --load
ubuntu-eoan:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.ubuntu-eoan . -t ztbuild/ubuntu-eoan-amd64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.ubuntu-eoan . -t ztbuild/ubuntu-eoan-arm64 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz" --platform linux/arm/v7 -f Dockerfile.ubuntu-eoan . -t ztbuild/ubuntu-eoan-armhf --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-386.tar.gz" --platform linux/386 -f Dockerfile.ubuntu-eoan . -t ztbuild/ubuntu-eoan-i386 --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.ubuntu-eoan . -t ztbuild/ubuntu-eoan-ppc64le --load
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-s390x.tar.gz" --platform linux/s390x -f Dockerfile.ubuntu-eoan . -t ztbuild/ubuntu-eoan-s390x --load
kali-rolling:
@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.kali-rolling . -t ztbuild/kali-rolling-amd64 --load

View File

@ -0,0 +1,2 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8hgysbj2Luu3aN/Ya2wr4Y9LpUGqWWfn3k+UhIwOIE/Kd7/YpLjxHpseUA1hLnj9kHFShH8eiqoY0S6EDIYrTUwbXMMu8454lX/LcJOCJ9RlSeMMf7vpkxcI7cVRgOA430a3FR7M0Q8vKlyJzxxAEjMIxMyuVyinknfanNt+sQFiDUvOXoacqgZAHBWMlO7wOPyHWHNOzy7g8N0dHiJveKZqX/UUwuqJuS6UBq7MBMSU6TcMvJwHr+AbNvfyIUWCqlTByqFL9cmviRbIvQanxoRxi/5fVUGhtVBXUYvbCdFxDw5W2Svo9fDMm4Z5xWAD7rY1J3AM15RVyRTTtYvgD

View File

@ -0,0 +1,13 @@
# curl (REST API)
# User
JENKINS_USER=grant
# Api key from "/me/configure" on my Jenkins instance
JENKINS_USER_KEY=11edf2d49321321119712c46c6349eaad7
# Url for my local Jenkins instance.
JENKINS_URL=http://$JENKINS_USER:$JENKINS_USER_KEY@jenkins.int.zerotier.com
# JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled (which it should)
JENKINS_CRUMB=`curl "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)"`
curl -X POST -H $JENKINS_CRUMB -F "jenkinsfile=<Jenkinsfile" $JENKINS_URL/pipeline-model-converter/validate

View File

@ -0,0 +1,17 @@
CC=gcc
CXX=g++
#ARCH_FLAGS=-arch x86_64 -arch i386 -arch ppc
DEFS=-DHAS_DEV_URANDOM
CXXDEFS=-DBOOST_DISABLE_ASSERTS -DBOOST_NO_TYPEID -DNDEBUG
CFLAGS=-mmacosx-version-min=10.4 -std=c99 -O6 -ftree-vectorize -Wall $(DEFS) $(ARCH_FLAGS)
CXXFLAGS=-mmacosx-version-min=10.4 -Drestrict=__restrict__ -O6 -ftree-vectorize -Wall $(DEFS) $(CXXDEFS) $(ARCH_FLAGS)
LDFLAGS=-mmacosx-version-min=10.4 $(ARCH_FLAGS)
DLLFLAGS=$(ARCH_FLAGS) -shared
DLLEXT=dylib
LIBANODE_LIBS=-lcrypto -lpthread -lresolv
LIBSPARK_LIBS=-lz

View File

@ -0,0 +1,17 @@
CC=gcc
CXX=g++
DEFS=-DHAS_DEV_URANDOM
CFLAGS=-std=c99 -O6 -fPIC -Wall $(DEFS)
CXXFLAGS=-Drestrict=__restrict__ -O6 -Wall $(DEFS) -I..
#CFLAGS=-g -Wall $(DEFS)
#CXXFLAGS=-g -Wall $(DEFS)
LDFLAGS=
DLLFLAGS=-shared
DLLEXT=so
LIBANODE_LIBS=-lcrypto -lresolv -pthread
LIBSPARK_LIBS=-lz

View File

@ -0,0 +1,764 @@
*****************************************************************************
Anode Protocol Specification Draft
Version 0.8
(c)2009-2010 Adam Ierymenko
*****************************************************************************
Table of Contents
*****************************************************************************
1. Introduction
Anode provides three components that work together to provide a global,
secure, and mobile addressing system for computer networks:
1) An addressing system based on public key cryptography enabling network
devices or applications to assign themselves secure, unique, and globally
reachable network addresses in a flat address space.
2) A system enabling network participants holding global addresses to locate
one another on local or global networks with "zero configuration."
3) A communications protocol for communication between addressed network
participants that requires no special operating system support and no
changes to existing network infrastructure.
Using Anode, both fixed and mobile applications and devices can communicate
directly as if they were all connected to the same VPN. Anode restores the
original vision of the Internet as a "flat" network where anything can talk
to anything, and adds the added benefits of address mobility and strong
protection against address spoofing and other protocol level attacks.
1.1. Design Philosophy
Anode's design philosophy is the classical "KISS" principle: "Keep It Simple
Stupid." Anode's design principles are:
#1: Do not try to solve too many problems at once, and stay in scope.
Anode does not attempt to solve too many problems at once. It attempts to
solve the problems of mobile addressing, address portability, and "flat"
addressing in the presence of NAT or other barriers.
It does not attempt to duplicate the full functionality of SSL, X.509, SSH,
XMPP, an enterprise service bus, a pub/sub architecture, BitTorrent, etc. All
of those protocols and services can be used over Anode if their functionality
is desired.
#2: Avoid state management.
State multiplies the complexity and failure modes of network protocols. State
also tends to get in the way of the achievement of new features implicitly
(see principle #4). Avoid state whenever possible.
#3: Avoid algorithm and dependency bloat.
Anode uses only elliptic curve Diffie-Hellman (EC-DH) and AES-256. No other
cryptographic algorithms or hash functions are presently necessary. This
yields implementations compact enough for embedded devices.
Anode also requires few or no dependencies, depending on whether the two
needed cryptographic algorithms are obtained through a library or included.
No other protocols or libraries are required in an implementation.
#4: Achieve features implicitly.
Use a simple stateless design that allows features to be achieved implicitly
rather than specified explicitly. For example, Anode can do multi-homing and
could be used to build a mesh network, but neither of these features is
explicitly specified.
*****************************************************************************
2. Core Concepts and Algorithms
This section describes addresses, zones, common algorithms, and other core
concepts.
2.1. Zones
A zone is a 32-bit integer encoded into every Anode address. Zones serve to
assist in the location of peers by address on global IP networks. They are
not presently significant for local communications, though they could be
used to partition addresses into groups or link them with configuration
options.
Each zone has a corresponding zone file which can be fetched in a number of
ways (see below). A zone file is a flat text format dictionary of the format
"key=value" separated by carriage returns. Line feeds are ignored, and any
character may be escaped with a backslash (\) character. Blank lines are
ignored.
The following entries must appear in a zone file:
n=<zone name>
d=<zone description>
c=<zone contact, e-mail address of zone administrator>
r=<zone revision, monotonically increasing integer with each edit>
ttl=<seconds before zone file should be re-checked for changes>
Additional fields may appear as well, including fields specific to special
applications or protocols supported within the zone. Some of these are
defined in this document.
Zone file fetching mechanisms are described below. Multiple mechanisms are
specified to enable fallback in the event that one mechanism is not available.
2.1.1. Zone File Retrieval
Zone files are retrieved via HTTP, with the HTTP address being formed in one
of two ways.
The preferred DNS method:
To fetch a zone file via DNS, use the zone ID to generate a host name and URI
of the form:
http://a--XXXXXXXX.net/z
The XXXXXXXX field is the zone ID in hexadecimal.
The fallback IP method:
For fallback in the absence of DNS, the zone ID can be used directly as an
IPv4 or IPv4-mapped-to-IPv6 IP address. A URI is generated of the form:
http://ip_address/z
Support for this method requires that a zone ID be chosen to correspond to a
permanent IPv4 (preferably mappable to IPv6 space as well) IP address.
2.1.2. Zone ID Reservation
By convention, a zone ID is considered reserved when a domain of the form
"a--XXXXXXXX.net" (where XXXXXXXX is the ID in hex) is registered.
It is recommended that this be done even for zone IDs not used for global
address location in order to globally reserve them.
2.2. Addresses
Anode addresses are binary strings containing a 32-bit zone ID, a public key,
and possibly other fields. Only one address type is presently defined:
|---------------------------------------------------------------------------|
| Name | Type ID | Elliptic Curve Parameters | Total Length |
|---------------------------------------------------------------------------|
| ANODE-256-40 | 1 | NIST-P-256 | 40 |
|---------------------------------------------------------------------------|
|---------------------------------------------------------------------------|
| Name | Binary Layout |
|---------------------------------------------------------------------------|
| ANODE-256-40 | <type[1]><zone[4]><unused[2]><public key[33]> |
|---------------------------------------------------------------------------|
The public key is a "compressed" form elliptic curve public key as described
in RFC5480.
The unused section of the address must be zero. These bytes are reserved for
future use.
2.2.1. ASCII Format For Addresses
Addresses are encoded in ASCII using base-32, which provides a quotable and
printable encoding that is of manageable length and is case-insensitive. For
example, an ANODE-256-40 address is 64 characters long in base-32 encoding.
2.3. Relaying
An Anode peer may optionally relay packets to any other reachable peer.
Relaying is accomplished by sending a packet to a peer with the recipient set
to the final recipient. The receiving peer will, if relaying is allowed and if
it knows of or can reach the recipient, forward the packet.
No error is returned if relaying fails, so relay paths are treated as possible
paths for communication until a return is received in the same way as direct
paths.
Relaying can be used by peers to send messages indirectly, locate one
another, and determine network location information to facilitate the
establishment of direct communications.
Peers may refuse to relay or may limit the transmission rate at which packets
can be relayed.
2.3.1. Zone Relays
If a zone's addresses are globally reachable on global IP networks, it must
have one or more zone relays. These must have globally reachable public
static IP addresses.
Zone relays are specified in the zone file in the following format:
zr.<address checksum>=<ip>[,<ip>]:<udp port>:<tcp port>:<anode addresses>
The address checksum is the sum of the bytes in the Anode address modulus
the number of "zr" entries, in hexadecimal. For example, if a zone had four
global relays its zone file could contain the lines:
zr.0=1.2.3.4:4343:4344:klj4j3...
zr.1=2.3.4.5:4343:4344:00194j...
zr.2=3.4.5.6:4343:4344:1j42zz...
zr.3=4.5.6.7:4343:4344:z94j1q...
The relay would be chosen by taking the sum of the bytes in the address
modulo 4. For example, if the bytes of an address sum to 5081 then relay
zr.1 would be used to communicate with that address.
If more than one IP address is listed for a given relay, the peer must choose
at random from among the addresses of the desired type (IPv4 or IPv6).
Each relay must have one Anode address for every address type supported within
the zone. (At present there is only one address type defined.)
Peers should prefer UDP and fall back to TCP only if UDP is not available.
To make itself available, a peer must make itself known to its designated zone
relay. This is accomplished by sending a PING message.
2.4. Key Agreement and Derivation
Key agreement is performed using elliptic curve Diffie-Hellman. This yields
a raw key whose size depends on the elliptic curve parameters in use.
The following algorithm is used to derive a key of any length from a raw
key generated through key agreement:
1) Zero the derived key buffer.
2) Determine the largest of the original raw key or the derived key.
3) Loop from 0 to the largest length determined in step 2, XOR each byte of
the derived key buffer with the corresponding byte of the original key
buffer with each index being modulus the length of the respective buffer.
2.5. Message Authentication
For message authentication, CMAC-AES (with AES-256) is used. This is also
known in some literature as OMAC1-AES. The key is derived from key agreement
between the key pair of the sending peer and the address of the recipient.
2.6. AES-DIGEST
To maintain cryptographic algorithm frugality, a cryptographic hash function
is constructed from the AES-256 cipher. This hash function uses the common
Davis-Meyer construction with Merkle-Damgård length padding.
It is described by the following pseudocode:
byte previous_digest[16]
byte digest[16] = { 0,0,... }
byte block[32] = { 0,0,... }
integer block_counter = 0
; digest message
for each byte b of message
block[block_counter] = b
block_counter = block_counter + 1
if block_counter == 32 then
block_counter = 0
save digest[] in previous_digest[]
encrypt digest[] with aes-256 using block[] as 256-bit aes-256 key
xor digest[] with previous_digest[]
end if
next
; append end marker, do final block
block[block_counter] = 0x80
block_counter = block_counter + 1
zero rest of block[] from block_counter to 15
save digest[] in previous_digest[]
encrypt digest[] with aes-256 using block[] as 256-bit aes-256 key
xor digest[] with previous_digest[]
; Merkle-Damgård length padding
zero first 8 bytes of block[]
fill last 8 bytes of block[] w/64-bit length in big-endian order
save digest[] in previous_digest[]
encrypt digest[] with aes-256 using block[] as 256-bit aes-128 key
xor digest[] with previous_digest[]
; digest[] now contains 128-bit message digest
2.7. Short Address Identifiers (Address IDs)
A short 8-byte version of the Anode address is used in the protocol to reduce
transmission overhead when both sides are already aware of the other's full
address.
The short address identifier is formed by computing the AES-DIGEST of the
full address and then XORing the first 8 bytes of the digest with the last
8 bytes to yield an 8-byte shortened digest.
2.8. DNS Resolution of Anode Addresses
Anode addresses can be saved in DNS TXT records in the following format:
anode:<address in base32 ASCII encoding>
This permits Anode addresses to be resolved from normal DNS host name.
2.9. Packet Transmission Mechanisms
2.9.1. UDP Transmission
The recommended method of sending Anode packets is UDP. Each packet is simply
sent as a UDP packet.
2.9.2. TCP Transmission
To send packets over TCP, each packet is prefixed by its size as a 16-bit
integer.
2.9.3. HTTP Transmission
Anode packets may be submitted in HTTP POST transactions for transport over
networks where HTTP is the only available protocol.
Anode packets are simply prefixed with a 16-byte packet size and concatenated
together just as they are in a TCP stream. One or more packets may be sent
with each HTTP POST transaction for improved performance.
Since this method is intended for use in "hostile" or highly restricted
circumstances, no additional details such as special headers or MIME types
are specified to allow maximum flexibility. Peers should ignore anything
other than the payload.
2.10. Endpoints
An endpoint indicates a place where Anode packets may be sent. The following
endpoint types are specified:
|---------------------------------------------------------------------------|
| Endpoint Type | Description | Address Format |
|---------------------------------------------------------------------------|
| 0x00 | Unspecified | (none) |
| 0x01 | Ethernet | <mac[6]> |
| 0x02 | UDP/IPv4 | <ip[4]><port[2]> |
| 0x03 | TCP/IPv4 | <ip[4]><port[2]> |
| 0x04 | UDP/IPv6 | <ip[16]><port[2]> |
| 0x05 | TCP/IPv6 | <ip[16]><port[2]> |
| 0x06 | HTTP | <null-terminated full URI> |
|---------------------------------------------------------------------------|
Endpoints are encoded by beginning with a single byte indicating the endpoint
type followed by the address information required for the given type.
Note that IP ports bear no relationship to Anode protocol ports.
2.11. Notes
All integers in the protocol are transmitted in network (big endian) byte
order.
*****************************************************************************
3. Common Packet Format
A common header is used for all Anode packets:
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Hop Count | 1 | 8-bit hop count (not included in MAC) |
| Flags | 1 | 8-bit flags |
| MAC | 8 | 8 byte shortened CMAC-AES of packet |
| Sender Address | ? | Full address or short ID of sender |
| Recipient Address | ? | Full address or short ID of recipient |
| Peer IDs | 1 | Two 4-bit peer IDs: sender, recipient |
| Message Type | 1 | 8-bit message type |
| Message | ? | Message payload |
|---------------------------------------------------------------------------|
3.1. Hop Count
The hop count begins at zero and must be incremented by each peer that relays
the packet to another peer. The hop count must not wrap to zero at 255.
Because the hop count is modified in transit, it is not included in MAC
calculation or authentication.
The hop count is used to prioritize endpoints that are direct over endpoints
that involve relaying, or to prioritize closer routes over more distant
ones.
3.2. Flags and Flag Behavior
|---------------------------------------------------------------------------|
| Flag | Description |
|---------------------------------------------------------------------------|
| 0x01 | Sender address fully specified |
| 0x02 | Recipient address fully specified |
| 0x04 | Authentication error response |
|---------------------------------------------------------------------------|
If flag 0x01 is set, then the sender address will be the full address rather
than a short address identifier. The length of the address can be determined
from the first byte of the address, which always specifies the address type.
Flag 0x02 has the same meaning for the recipient address.
A peer must send fully specified sender addresses until it receives a response
from the recipient. At this point the sender may assume that the recipient
knows its address and use short a short sender address instead. This
assumption should time out, with a recommended timeout of 60 seconds.
There is presently no need to send fully specified recipient addresses, but
the flag is present in case it is needed and must be honored.
Flag 0x04 indicates that this is an error response containing a failed
authentication error. Since authentication failed, this packet may not have
a valid MAC. Packets with this flag must never have any effect other than
to inform of an error. This error, since it is unauthenticated, must never
have any side effects such as terminating a connection.
3.3. MAC
The MAC is calculated as follows:
1) Temporarily set the 64-bit/8-byte MAC field in the packet to the packet's
size as a 64-bit big-endian integer.
2) Calculate the MAC for the entire packet (excluding the first byte) using
the key agreed upon between the sender and the recipient, resulting in a
16 byte full CMAC-AES MAC.
3) Derive the 8 byte packet MAC by XORing the first 8 bytes of the full 16
byte CMAC-AES MAC with the last 8 bytes. Place this into the packet's MAC
field.
3.4. Peer IDs
Peer IDs provide a method for up to 15 different peers to share an address,
each with a unique ID allowing packets to be routed to them individually.
A peer ID of zero indicates "any" or "unspecified." Real peers must have a
nonzero peer ID. In the normal single peer per address case, any peer ID may
be used. If multiple peers are to share an address, some implementation-
dependent method must be used to ensure that each peer has a unique peer ID.
Relaying peers must follow these rules based on the recipient peer ID when
relaying messages:
- IF the peer ID is zero or if the peer ID is not known, the message must
be forwarded to a random endpoint for the given recipient address.
- IF the peer ID is nonzero and matches one or more known endpoints for the
given recipient address and peer ID, the message must only be sent to
a matching endpoint.
A receiving peer should process any message that it receives regardless of
whether its recipient peer ID is correct. The peer ID is primarily for relays.
Peers should typically send messages with a nonzero recipient peer ID when
responding to or involved in a conversation with a specific peer (e.g. a
streaming connection), and send zero recipient peer IDs otherwise.
3.5. Short Address Conflict Disambiguation
In the unlikely event of two Anode addresses with the same short identifier,
the recipient should use MAC validation to disambiguate. The peer ID must not
be relied upon for this purpose.
*****************************************************************************
4. Basic Signaling and Transport Protocol
4.1. Message Types
|---------------------------------------------------------------------------|
| Type | ID | Description |
|---------------------------------------------------------------------------|
| ERROR | 0x00 | Error response |
| PING | 0x01 | Echo request |
| PONG | 0x02 | Echo response |
| EPC_REQ | 0x03 | Endpoint check request |
| EPC | 0x04 | Endpoint check response |
| EPI | 0x05 | Endpoint information |
| NAT_T | 0x06 | NAT traversal message |
| NETID_REQ | 0x07 | Request network address identification and/or test |
| NETID | 0x08 | Response to network address identification request |
| DGRAM | 0x09 | Simple UDP-like datagram |
|---------------------------------------------------------------------------|
4.2. Message Details
4.2.1. ERROR
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Error Code | 2 | 16-bit error code |
| Error Arguments | ? | Error arguments, depending on error type |
|---------------------------------------------------------------------------|
Error arguments are empty unless otherwise stated below.
Error codes:
|---------------------------------------------------------------------------|
| Error Code | Description |
|---------------------------------------------------------------------------|
| 0x01 | Message not valid |
| 0x02 | Message authentication or decryption failed |
| 0x03 | Relaying and related features not authorized |
| 0x04 | Relay recipient not reachable |
|---------------------------------------------------------------------------|
Generation of errors is optional. A peer may choose to ignore invalid
messages or to throttle the sending of errors.
4.2.2. PING
(Payload unspecified.)
Request echo of payload as PONG message.
4.2.3. PONG
(Payload unspecified.)
Echoed payload of received PING message.
4.2.4. EPC_REQ
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Request ID | 4 | 32-bit request ID |
|---------------------------------------------------------------------------|
Request echo of request ID in EPC message, used to check and learn endpoints.
To learn a network endpoint for a peer, CHECK_REQ is sent. If CHECK is
returned with a valid request ID, the endpoint is considered valid.
4.2.5. EPC
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Request ID | 4 | 32-bit request ID echoed back |
|---------------------------------------------------------------------------|
Response to EPC_REQ containing request ID.
4.2.6. EPI
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Flags | 1 | 8-bit flags |
| Endpoint | ? | Endpoint type and address |
| NAT-T mode | 1 | 8-bit NAT traversal mode |
| NAT-T options | ? | Options related to specified NAT-T mode |
|---------------------------------------------------------------------------|
EPI stands for EndPoint Identification, and is sent to notify another peer of
a network endpoint where the sending peer is reachable.
If the receiving peer is interested in communicating with the sending peer,
the receiving peer must send EPC_REQ to the sending peer at the specified
endpoint to check the validity of that endpoint. The endpoint is learned if a
valid EPC is returned.
If the endpoint in EPI is unspecified, the actual source of the EPI message
is the endpoint. This allows EPI messages to be broadcast on a local LAN
segment to advertise the presence of an address on a local network. EPI
broadcasts on local IP networks must be made to UDP port 8737.
Usually EPI is sent via relays (usually zone relays) to inform a peer of an
endpoint for direct communication.
There are presently no flags, so flags must be zero.
4.2.7. NAT_T
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| NAT-T mode | 1 | 8-bit NAT traversal mode |
| NAT-T options | ? | Options related to specified NAT-T mode |
|---------------------------------------------------------------------------|
NAT_T is used to send messages specific to certain NAT traversal modes.
4.2.8. NETID_REQ
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Request ID | 4 | 32-bit request ID |
| Endpoint | ? | Endpoint type and address information |
|---------------------------------------------------------------------------|
When a NETID_REQ message is received, the recipient attempts to echo it back
as a NETID message to the specified endpoint address. If the endpoint is
unspecified, the recipient must fill it in with the actual origin of the
NETID_REQ message. This allows a peer to cooperate with another peer (usually
a zone relay) to empirically determine its externally visible network
address information.
A peer may ignore NETID_REQ or respond with an error if it does not allow
relaying.
4.2.9. NETID
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Request ID | 4 | 32-bit request ID echoed back |
| Endpoint Type | 1 | 8-bit endpoint type |
| Endpoint Address | ? | Endpoint Address (size depends on type) |
|---------------------------------------------------------------------------|
NETID is sent in response to NETID_REQ to the specified endpoint address. It
always contains the endpoint address to which it was sent.
4.2.10. DGRAM
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Source Port | 2 | 16-bit source port |
| Destination Port | 2 | 16-bit destination port |
| Payload | ? | Datagram packet payload |
|---------------------------------------------------------------------------|
A datagram is a UDP-like message without flow control or delivery assurance.
*****************************************************************************
5. Stream Protocol
The stream protocol is very similar to TCP, though it omits some features
that are not required since they are taken care of by the encapsulating
protocol. SCTP was also an inspiration in the design.
5.1. Message Types
|---------------------------------------------------------------------------|
| Type | ID | Description |
|---------------------------------------------------------------------------|
| S_OPEN | 20 | Initiate a streaming connection (like TCP SYN) |
| S_CLOSE | 21 | Terminate a streaming connection (like TCP RST/FIN) |
| S_DATA | 22 | Data packet |
| S_ACK | 23 | Acknowedge receipt of one or more data packets |
| S_DACK | 24 | Combination of DATA and ACK |
|---------------------------------------------------------------------------|
5.2. Message Details
5.2.1. S_OPEN
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Sender Link ID | 2 | 16-bit sender link ID |
| Destination Port | 2 | 16-bit destination port |
| Window Size | 2 | 16-bit window size in 1024-byte increments |
| Init. Seq. Number | 4 | 32-bit initial sequence number |
| Flags | 1 | 8-bit flags |
|---------------------------------------------------------------------------|
The OPEN message corresponds to TCP SYN, and initiates a connection. It
specifies the initial window size for the sender and the sender's initial
sequence number, which should be randomly chosen to prevent replay attacks.
If OPEN is successful, the recipient sends its own OPEN to establish the
connetion. If OPEN is unsuccessful, CLOSE is sent with its initial and current
sequence numbers equal and an appropriate reason such as "connection refused."
The sender link ID must be unique for a given recipient.
If flag 01 is set, the sender link ID is actually a source port where the
sender might be listening for connections as well. This exactly duplicates
the behavior of standard TCP. Otherwise, the sender link ID is simply an
arbitrary number that the sender uses to identify the connection with this
recipient and there is no port of origin. Ports of origin are optional for
Anode streaming connections to permit greater scalability.
5.2.2. S_CLOSE
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Sender Link ID | 2 | 16-bit sender link ID |
| Destination Port | 2 | 16-bit destination port |
| Flags | 1 | 8-bit flags |
| Reason | 1 | 8-bit close reason |
| Init. Seq. Number | 4 | 32-bit initial sequence number |
| Sequence Number | 4 | 32-bit current sequence number |
|---------------------------------------------------------------------------|
The CLOSE message serves a function similar to TCP FIN. The initial sequence
number is the original starting sequence number sent with S_OPEN, while the
current sequence number is the sequence number corresponding to the close
and must be ACKed to complete the close operation. The use of the initial
sequence number helps to serve as a key to prevent replay attacks.
CLOSE is also used to indicate a failed OPEN attempt. In this case the current
sequence number will be equal to the initial sequence number and no ACK will
be expected.
There are currently no flags, so flags must be zero.
The reason field describes the reason for the close:
|---------------------------------------------------------------------------|
| Reason Code | Description |
|---------------------------------------------------------------------------|
| 00 | Application closed connection |
| 01 | Connection refused |
| 02 | Protocol error |
| 03 | Timed out |
|---------------------------------------------------------------------------|
Established connections will usually be closed with reason 00, while reason
01 is usually provided if an OPEN is received but the port is not bound.
5.2.3. S_DATA
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Sender Link ID | 2 | 16-bit sender link ID |
| Destination Port | 2 | 16-bit destination port |
| Sequence Number | 4 | 32-bit sequence number |
| Payload | ? | Data payload |
|---------------------------------------------------------------------------|
The DATA message carries a packet of data, with the sequence number
determining order. The sequence number is monotonically incremented with
each data packet, and wraps at the maximum value of an unsigned 32-bit
integer.
5.2.4. S_ACK
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Sender Link ID | 2 | 16-bit sender link ID |
| Destination Port | 2 | 16-bit destination port |
| Window Size | 2 | 16-bit window size in 1024-byte increments |
| Acknowledgements | ? | One or more acknowledgements (see below) |
|---------------------------------------------------------------------------|
Each acknowledgement is a 32-bit integer followed by an 8-bit integer (5 bytes
total). The 32-bit integer is the first sequence number to acknowledge, and
the 8-bit integer is the number of sequential following sequence numbers to
acknowledge. For example "1, 4" would acknowledge sequence numbers 1, 2, 3,
and 4.
5.2.5. S_DACK
|---------------------------------------------------------------------------|
| Field | Length | Description |
|---------------------------------------------------------------------------|
| Sender Link ID | 2 | 16-bit sender link ID |
| Destination Port | 2 | 16-bit destination port |
| Window Size | 2 | 16-bit window size in 1024-byte increments |
| Num. Acks | 1 | 8-bit number of acknowledgements |
| Acknowledgements | ? | One or more acknowledgements |
| Payload | ? | Data payload |
|---------------------------------------------------------------------------|
The DACK message combines ACK and DATA, allowing two peers that are both
transmitting data to efficiently ACK without a separate packet.

View File

@ -0,0 +1,33 @@
SYSNAME:=${shell uname}
SYSNAME!=uname
include ../config.mk.${SYSNAME}
LIBANODE_OBJS= \
impl/aes.o \
impl/dictionary.o \
impl/dns_txt.o \
impl/ec.o \
impl/environment.o \
impl/misc.o \
impl/thread.o \
address.o \
aes_digest.o \
errors.o \
identity.o \
network_address.o \
secure_random.o \
system_transport.o \
uri.o
# zone.o
all: $(LIBANODE_OBJS)
ar rcs libanode.a $(LIBANODE_OBJS)
ranlib libanode.a
$(CC) $(CFLAGS) -o utils/anode-make-identity utils/anode-make-identity.c $(LIBANODE_OBJS) $(LIBANODE_LIBS)
clean: force
rm -f $(LIBANODE_OBJS)
rm -f libanode.$(DLLEXT) libanode.a
rm -f utils/anode-make-identity
force: ;

View File

@ -0,0 +1,98 @@
/* libanode: the Anode C reference implementation
* Copyright (C) 2009-2010 Adam Ierymenko <adam.ierymenko@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "impl/aes.h"
#include "impl/ec.h"
#include "impl/misc.h"
#include "impl/types.h"
#include "anode.h"
int AnodeAddress_calc_short_id(
const AnodeAddress *address,
AnodeAddressId *short_address_id)
{
unsigned char digest[16];
switch(AnodeAddress_get_type(address)) {
case ANODE_ADDRESS_ANODE_256_40:
Anode_aes_digest(address->bits,ANODE_ADDRESS_LENGTH_ANODE_256_40,digest);
break;
default:
return ANODE_ERR_ADDRESS_INVALID;
}
*((uint64_t *)short_address_id->bits) = ((uint64_t *)digest)[0] ^ ((uint64_t *)digest)[1];
return 0;
}
int AnodeAddress_get_zone(const AnodeAddress *address,AnodeZone *zone)
{
switch(AnodeAddress_get_type(address)) {
case ANODE_ADDRESS_ANODE_256_40:
*((uint32_t *)&(zone->bits[0])) = *((uint32_t *)&(address->bits[1]));
return 0;
}
return ANODE_ERR_ADDRESS_INVALID;
}
int AnodeAddress_to_string(const AnodeAddress *address,char *buf,int len)
{
const unsigned char *inptr;
char *outptr;
unsigned int i;
switch(AnodeAddress_get_type(address)) {
case ANODE_ADDRESS_ANODE_256_40:
if (len < (((ANODE_ADDRESS_LENGTH_ANODE_256_40 / 5) * 8) + 1))
return ANODE_ERR_BUFFER_TOO_SMALL;
inptr = (const unsigned char *)address->bits;
outptr = buf;
for(i=0;i<(ANODE_ADDRESS_LENGTH_ANODE_256_40 / 5);++i) {
Anode_base32_5_to_8(inptr,outptr);
inptr += 5;
outptr += 8;
}
*outptr = (char)0;
return ((ANODE_ADDRESS_LENGTH_ANODE_256_40 / 5) * 8);
}
return ANODE_ERR_ADDRESS_INVALID;
}
int AnodeAddress_from_string(const char *str,AnodeAddress *address)
{
const char *blk_start = str;
const char *ptr = str;
unsigned int address_len = 0;
while (*ptr) {
if ((unsigned long)(ptr - blk_start) == 8) {
if ((address_len + 5) > sizeof(address->bits))
return ANODE_ERR_ADDRESS_INVALID;
Anode_base32_8_to_5(blk_start,(unsigned char *)&(address->bits[address_len]));
address_len += 5;
blk_start = ptr;
}
++ptr;
}
if (ptr != blk_start)
return ANODE_ERR_ADDRESS_INVALID;
if (AnodeAddress_get_type(address) != ANODE_ADDRESS_ANODE_256_40)
return ANODE_ERR_ADDRESS_INVALID;
return 0;
}

Some files were not shown because too many files have changed in this diff Show More