mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2026-09-22 15:29:03 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe29cd8888 | ||
|
|
2ed9b86852 | ||
|
|
f87d5477f6 | ||
|
|
544809e738 | ||
|
|
d678338b28 | ||
|
|
7b747aff3b | ||
|
|
484d9e0d8c | ||
|
|
55aa87c372 | ||
|
|
aa586efbb5 | ||
|
|
a2340bf60c | ||
|
|
e918ec44d5 | ||
|
|
34777b6bb4 | ||
|
|
97db010112 | ||
|
|
e81053aed7 | ||
|
|
91428eacae | ||
|
|
936801a51b | ||
|
|
8f1b213994 | ||
|
|
7f47b2ba8f | ||
|
|
eac140aa73 | ||
|
|
d9a7f62a5c | ||
|
|
294af67370 | ||
|
|
67648579b5 | ||
|
|
fa601636aa | ||
|
|
d2b4b6e91d | ||
|
|
a77009e4f0 | ||
|
|
9c2bd25d86 | ||
|
|
22b47f851e | ||
|
|
2342926442 | ||
|
|
458c5c9709 | ||
|
|
4f6b9038f1 | ||
|
|
20007a73df | ||
|
|
7f5850a943 | ||
|
|
8e5d81728f | ||
|
|
300b05aaf0 | ||
|
|
595a70c5ed | ||
|
|
9e53fe4b12 | ||
|
|
fb162084f5 | ||
|
|
1d9f06d4ac | ||
|
|
48311896f8 | ||
|
|
616698fa91 | ||
|
|
b8e3ca6a2c | ||
|
|
f231561276 | ||
|
|
ce5556a677 | ||
|
|
8d4cb1e05b | ||
|
|
45773f0b6e | ||
|
|
ab75985766 | ||
|
|
4b9724c8fa | ||
|
|
f2d4a882d9 | ||
|
|
0cf5ab9375 | ||
|
|
4f2717c244 | ||
|
|
895b8211e1 | ||
|
|
a28a6d1bf5 | ||
|
|
6921628610 | ||
|
|
5d18a57518 | ||
|
|
b62b9e28b9 | ||
|
|
be5baa76b9 | ||
|
|
a6d2e80b08 | ||
|
|
b0ba0d7227 | ||
|
|
bc0a42651b | ||
|
|
a16d6dbc01 | ||
|
|
7b7d39becc | ||
|
|
3e6a22c3d8 | ||
|
|
dd3dbb6f24 | ||
|
|
223fa90e6c | ||
|
|
ffd34a3e46 | ||
|
|
fad7123417 | ||
|
|
5db2abab73 | ||
|
|
a4d762d404 | ||
|
|
03a198a1b5 | ||
|
|
a51029a503 | ||
|
|
f754d716d0 | ||
|
|
bbba390e97 | ||
|
|
ad044f9272 | ||
|
|
5a62824049 | ||
|
|
bfa4bd2584 | ||
|
|
1e62d69762 | ||
|
|
bed6557a6d | ||
|
|
0d3ed4769e | ||
|
|
bee3ea79f0 | ||
|
|
ca4e35d52c | ||
|
|
6623aa3a7d | ||
|
|
67360aaeef | ||
|
|
3e21edb891 | ||
|
|
6e6fc9a704 | ||
|
|
86f402edb7 | ||
|
|
6bf7b4d9ba | ||
|
|
2f2f864aa8 | ||
|
|
c479cba71a | ||
|
|
564d29e445 | ||
|
|
ab208bb8f9 | ||
|
|
eb422ddf08 | ||
|
|
c668990b4d | ||
|
|
c21636b295 | ||
|
|
3cd413ed1f | ||
|
|
8518d28dc4 | ||
|
|
52de8ff62d | ||
|
|
d3d738f93b | ||
|
|
f6d52dd96c | ||
|
|
9aff094b6f | ||
|
|
02a3929472 | ||
|
|
41c4642a21 | ||
|
|
f319078694 | ||
|
|
a548c7ea71 | ||
|
|
6e34b192e3 | ||
|
|
969e8ff0ec | ||
|
|
66a8c01d0e | ||
|
|
21986038be | ||
|
|
3eb7ed2892 | ||
|
|
2410389912 | ||
|
|
a8ead37312 | ||
|
|
ecec45697b | ||
|
|
2c5ded78e3 | ||
|
|
d51b82d0e6 | ||
|
|
815c20c822 | ||
|
|
92838fa1b2 | ||
|
|
307c4ed4b6 | ||
|
|
14c0ccc94c | ||
|
|
4aea588eef | ||
|
|
4c4a360469 | ||
|
|
a0253a0970 | ||
|
|
7662ffb64a | ||
|
|
9375c48e33 | ||
|
|
5494c44a30 | ||
|
|
3f19712178 | ||
|
|
4a15671e84 | ||
|
|
51b2f284f0 | ||
|
|
055be92ef0 | ||
|
|
67c2336176 | ||
|
|
6667c57e89 | ||
|
|
4edeacd1f0 | ||
|
|
01bd4373b6 | ||
|
|
2db20f0a6c | ||
|
|
7934fef84c | ||
|
|
58c80ff0ab | ||
|
|
4b6ff77fea | ||
|
|
a0cc7babdf | ||
|
|
cf77a6a805 | ||
|
|
b3da8d9aa1 | ||
|
|
d8272b7370 | ||
|
|
5329326591 | ||
|
|
06bc1e5e6b | ||
|
|
9b31fe1e98 | ||
|
|
0ae551a970 | ||
|
|
8e733ff0da | ||
|
|
52b6355a54 | ||
|
|
54fb480ade | ||
|
|
b292d4f06d | ||
|
|
076ed83b81 | ||
|
|
b12bc59b57 | ||
|
|
8e5522647a | ||
|
|
3fd42ad2a0 | ||
|
|
99cd9d174b | ||
|
|
f71a85a675 | ||
|
|
b9de551e0c | ||
|
|
0e87c21d87 | ||
|
|
2c2574e182 | ||
|
|
5c3daca2a0 | ||
|
|
5232af0a61 | ||
|
|
7f835b414a | ||
|
|
8895ad182f | ||
|
|
3784b66cdb | ||
|
|
0c7afe3d0a | ||
|
|
478cd2840b | ||
|
|
fbac205e65 | ||
|
|
697011df7b | ||
|
|
67e8f344ac | ||
|
|
5fb8d2aa37 | ||
|
|
d50ec3094f | ||
|
|
7473d1942d | ||
|
|
e22c80dce6 | ||
|
|
8affcb0e3d | ||
|
|
16dd3fd7af | ||
|
|
a46fb73260 | ||
|
|
db6045fe9c | ||
|
|
4efd206dd4 | ||
|
|
b0889e1454 | ||
|
|
69de477d0b | ||
|
|
5eb3cd2699 | ||
|
|
226bb1d4ef | ||
|
|
8753829c1b | ||
|
|
55e9320299 | ||
|
|
c4af2d79c5 | ||
|
|
ce708df877 | ||
|
|
342fa9d33f | ||
|
|
fd9a23f30f | ||
|
|
d72b98b434 | ||
|
|
813fb7a394 | ||
|
|
6d532944bd | ||
|
|
ba2a4a605c | ||
|
|
d45f280cb7 | ||
|
|
7cf0d7a5d8 | ||
|
|
8b77ef538a | ||
|
|
e366661a09 | ||
|
|
8636fe3c33 | ||
|
|
08e0da7921 | ||
|
|
27021ff425 | ||
|
|
ecedddb19b | ||
|
|
ee73ac1a74 | ||
|
|
169250d484 | ||
|
|
4fea4fc76f | ||
|
|
6fa849c956 | ||
|
|
3cef1b0842 | ||
|
|
08b1ceb9a1 | ||
|
|
af0a9118c1 | ||
|
|
568da750bb | ||
|
|
d5f6f6b98e | ||
|
|
10ac0c2e1a | ||
|
|
1ffadf31de | ||
|
|
224ee88b91 | ||
|
|
b42067e654 | ||
|
|
c9e08c951a | ||
|
|
42f760d72f | ||
|
|
c68acebe31 | ||
|
|
4b7c5159a3 | ||
|
|
4a8daf43e4 | ||
|
|
182148a26c | ||
|
|
af715ca0ff | ||
|
|
990ecb5eb1 | ||
|
|
7c88b3f124 | ||
|
|
f4053c8af3 | ||
|
|
af3f8b00a4 | ||
|
|
db06c98608 | ||
|
|
332a7d1488 | ||
|
|
48f9f7de14 | ||
|
|
35d37559c8 | ||
|
|
1a6c0a5f12 | ||
|
|
2c8f032a76 | ||
|
|
bcc766f70d | ||
|
|
dcadc2c4d4 | ||
|
|
55ed5d61e0 | ||
|
|
86f424130d | ||
|
|
4e9b69f0a7 | ||
|
|
0a17738f39 | ||
|
|
fb7b07fc42 | ||
|
|
1d2130610c | ||
|
|
0b04f772ef | ||
|
|
5c73fe9304 | ||
|
|
2af105000f | ||
|
|
cadfa0bc4d | ||
|
|
f2521c8536 | ||
|
|
d353e0c6fa | ||
|
|
346731ea5d | ||
|
|
2ef38d84d1 | ||
|
|
5630d48a66 | ||
|
|
b44a9b8b62 | ||
|
|
f5b0fc6a8f | ||
|
|
a20bc772f2 | ||
|
|
010c4b0d64 | ||
|
|
dcb4bc5ef4 | ||
|
|
47e05d5a23 | ||
|
|
17abb58651 | ||
|
|
05b60bd818 | ||
|
|
5998f1497a | ||
|
|
269c8d415a | ||
|
|
cd191778c2 | ||
|
|
3e7aacf301 | ||
|
|
6b113c8270 | ||
|
|
a2162c01e3 | ||
|
|
870c221690 | ||
|
|
87ad848202 | ||
|
|
b736b6835d | ||
|
|
91bec01da8 | ||
|
|
a0c3f432c4 | ||
|
|
b5c51796b9 | ||
|
|
724002f142 | ||
|
|
377a9d6f41 | ||
|
|
003b4cf876 | ||
|
|
b12dd19d44 | ||
|
|
82c6454950 | ||
|
|
969c0ee6e3 | ||
|
|
c092b63987 | ||
|
|
47efee1df4 | ||
|
|
18a5452de8 | ||
|
|
c3794ba8d4 | ||
|
|
75a5b4438b | ||
|
|
185a3a2c76 | ||
|
|
3fcef51137 | ||
|
|
f959c2f4ca | ||
|
|
b7a6e106fd | ||
|
|
7dca7fac11 | ||
|
|
4ef2d4cc8e | ||
|
|
55bbd2aec6 | ||
|
|
36b4659f77 | ||
|
|
0b5666bde2 | ||
|
|
e1c72e6d51 | ||
|
|
5799d9a15b | ||
|
|
74404f56ee | ||
|
|
e53abe8bde | ||
|
|
29ef10e759 | ||
|
|
1e679cc94d | ||
|
|
96ba1079b2 | ||
|
|
f190df8621 | ||
|
|
6b078ee935 | ||
|
|
3de5cbd105 | ||
|
|
6faee38395 | ||
|
|
a44fd40889 | ||
|
|
5b7e1ceb68 | ||
|
|
d9d58c8bde | ||
|
|
d34481d830 | ||
|
|
307befa892 | ||
|
|
7647c8e8d1 | ||
|
|
b2d71f900a | ||
|
|
9e4ce68444 | ||
|
|
4920b68d2c | ||
|
|
5ce3d1e7a1 | ||
|
|
8140264cb6 | ||
|
|
a0acc82e99 | ||
|
|
98e532de20 | ||
|
|
e1ee3eb494 | ||
|
|
4a485df0c7 | ||
|
|
2522d29fdc | ||
|
|
560d6fba1b | ||
|
|
223ec0c59d | ||
|
|
6bc785e771 | ||
|
|
fb8cbb69aa | ||
|
|
861147b845 | ||
|
|
763caaebab | ||
|
|
276259394a | ||
|
|
46c0d1a732 | ||
|
|
31d2dcec17 | ||
|
|
c9234ee027 | ||
|
|
9a8d715666 | ||
|
|
8d474e1395 | ||
|
|
52e3d9b804 | ||
|
|
8f5cc4ed33 | ||
|
|
059d05f41f | ||
|
|
c86b91c5f0 | ||
|
|
e42848d37d | ||
|
|
bf7dddbd84 | ||
|
|
95983ba168 | ||
|
|
c97943d69d | ||
|
|
b813ea70a5 | ||
|
|
e734019216 | ||
|
|
b7d9290de9 | ||
|
|
b1a30ae4ff | ||
|
|
8283a6d6d4 | ||
|
|
36adae3d82 | ||
|
|
f176e2539e | ||
|
|
d6bfb8889a | ||
|
|
24fb1ced3c | ||
|
|
82b8a4f584 | ||
|
|
979bca57d5 | ||
|
|
93fd93da5c | ||
|
|
508527f7cd | ||
|
|
64634c916c | ||
|
|
34cc26176c | ||
|
|
e2840b0eb8 | ||
|
|
f4edb092b7 | ||
|
|
8caede300c | ||
|
|
f9c6ee0181 | ||
|
|
f5cc7746b6 | ||
|
|
41a4690372 | ||
|
|
9d57ccd7b1 | ||
|
|
ad60d708e1 | ||
|
|
f79af92599 | ||
|
|
f368fdbc76 | ||
|
|
2f3ea8882b | ||
|
|
e32fecd16d | ||
|
|
dca77cb0d2 | ||
|
|
9ec6c2901c | ||
|
|
e915d10953 | ||
|
|
ddb2759a52 | ||
|
|
28cf1423c9 | ||
|
|
0fb9d43998 | ||
|
|
91e7ce87f0 | ||
|
|
e59790b401 | ||
|
|
d0b8f76ecb | ||
|
|
fe05372c67 | ||
|
|
4394ab58d7 | ||
|
|
fcaf008beb | ||
|
|
1e15a510fd | ||
|
|
9de2b90528 | ||
|
|
a71e0bf551 | ||
|
|
280cc77e23 | ||
|
|
a681fbf533 | ||
|
|
448df73a35 | ||
|
|
1982071d46 | ||
|
|
4dfb15e37c | ||
|
|
154b72b4f1 | ||
|
|
de4ee08ad4 | ||
|
|
5ae862ff54 | ||
|
|
859031dcd9 | ||
|
|
39e1aabd2a | ||
|
|
9f499827af | ||
|
|
9bde5b9065 | ||
|
|
acaebbd75e | ||
|
|
3ed6379c4c | ||
|
|
b4eb39fb16 | ||
|
|
6be0e67a5c | ||
|
|
abad7d8fe1 | ||
|
|
72cf3f2315 | ||
|
|
c02ea1bf60 | ||
|
|
b9d0cf9c89 | ||
|
|
80cfc2bd26 | ||
|
|
08d85d4ae1 | ||
|
|
43b141547e | ||
|
|
d658c1187c | ||
|
|
1f4c00c7b5 | ||
|
|
bbe97dd080 | ||
|
|
9724e04e6e | ||
|
|
364ac499eb | ||
|
|
8b15fa2422 | ||
|
|
41cb6fb0d5 | ||
|
|
5d8bd674cd | ||
|
|
2e6cda38f6 | ||
|
|
6e8fcce777 | ||
|
|
559e8a907b | ||
|
|
024649c175 | ||
|
|
7fb3711ed6 | ||
|
|
1dff0c6b5f | ||
|
|
768c6242cd | ||
|
|
bca650e1fc | ||
|
|
0bf67bf67c | ||
|
|
99ef1e2696 | ||
|
|
57b6b790c1 | ||
|
|
3593a2d49f | ||
|
|
dad33c9bde | ||
|
|
683d332abc | ||
|
|
ac6d532651 | ||
|
|
d1a306a021 | ||
|
|
4cd1dcfee1 | ||
|
|
3ab31545f4 | ||
|
|
197bbbb267 | ||
|
|
58adecc3a1 | ||
|
|
830d96d2ed | ||
|
|
f027d8f519 | ||
|
|
8b44ac984c | ||
|
|
5542dbcc0b | ||
|
|
0ca8ae7970 | ||
|
|
0b83f850e4 | ||
|
|
06399c86f6 | ||
|
|
663ed73768 | ||
|
|
d37dce508a | ||
|
|
2e882b4af2 | ||
|
|
1aa31e0414 | ||
|
|
a477688e51 | ||
|
|
5533b82450 | ||
|
|
1bd2fecbf6 | ||
|
|
8b5ac93388 | ||
|
|
2fd50b104c | ||
|
|
0088cef2fc | ||
|
|
85cab3d0f1 | ||
|
|
f89cde8186 | ||
|
|
e171384c19 | ||
|
|
c89683fb0f | ||
|
|
e7ed1e4f93 | ||
|
|
c6d5dc1534 | ||
|
|
9ae8b0b3b6 | ||
|
|
327eb9013b | ||
|
|
42f290b037 | ||
|
|
b7fb4eeda5 | ||
|
|
f03aae7a34 | ||
|
|
78eb35010f | ||
|
|
fd9afdce34 | ||
|
|
21e4e2924e | ||
|
|
e3d1565261 | ||
|
|
557b92a167 | ||
|
|
e299eea2b1 | ||
|
|
e1f1d05e08 | ||
|
|
125257f264 | ||
|
|
2d49931300 | ||
|
|
8426677c55 | ||
|
|
d322f332e8 | ||
|
|
f8359f554b | ||
|
|
60fb8c941a | ||
|
|
cb6a99408c | ||
|
|
d865c42ef8 | ||
|
|
69c590ff81 | ||
|
|
72533cbd13 | ||
|
|
c974a159af | ||
|
+6 |
54efb62731 | ||
|
|
464bca5d20 | ||
|
|
7637ef10d7 | ||
|
+6 |
0e5651f353 | ||
|
|
ffb63f3ee5 | ||
|
|
0859a0d1e5 | ||
|
|
e41a6f2ec4 | ||
|
|
c53c6bd9c3 | ||
|
|
707d7deed2 | ||
|
|
ed0a388bcd | ||
|
|
826a1ee346 | ||
|
|
d4e63fcdfe | ||
|
|
0806b881ea | ||
|
|
5becb41bd4 | ||
|
|
ead68038a3 | ||
|
|
b8b5d0bff8 | ||
|
|
e18172d434 | ||
|
|
a15883d49b | ||
|
|
714ef59814 | ||
|
|
1d095e81d9 | ||
|
|
d976a9f5a0 | ||
|
|
f2060e0c76 | ||
|
|
b81ad9a84d | ||
|
|
53bc05fe89 | ||
|
|
a6d5c452d5 | ||
|
|
515fdc22a5 | ||
|
|
424e276150 | ||
|
|
b071d6bbec | ||
|
|
27a9cc6254 | ||
|
|
bb9ad5e41a | ||
|
|
d91f80464d | ||
|
|
d826ddb294 | ||
|
|
a7600c8072 | ||
|
|
82a9122fc3 | ||
|
|
0e9e7f2ebc | ||
|
|
14671009f8 | ||
|
|
802c9907a1 | ||
|
|
88b96265d7 | ||
|
|
0bc10923a1 | ||
|
|
0dc92c2d7b | ||
|
|
04a3206e53 | ||
|
|
98360d94a5 | ||
|
|
a9c8307d97 | ||
|
|
581489f67b | ||
|
|
5e89d5a03f | ||
|
|
d71d051c53 | ||
|
|
d2aeff6752 | ||
|
|
36be14de06 | ||
|
|
f9af9a15f2 | ||
|
|
4674bb5c8b | ||
|
|
a6b764bf7c | ||
|
|
c6f07ee19f | ||
|
|
e36127283c | ||
|
|
230ae6bd16 | ||
|
|
5b5ef07350 | ||
|
|
fb6af1971b | ||
|
|
41f9bdc5db | ||
|
|
12e64aa191 | ||
|
|
22ab673480 | ||
|
|
03841dcb81 | ||
|
|
64c2634b71 | ||
|
|
f1019dc4ee | ||
|
|
50ede37a58 | ||
|
|
60ddca1354 | ||
|
|
19f1f02d91 | ||
|
|
5a36b315a3 | ||
|
|
b67cd2cf7a | ||
|
|
97492eec7c | ||
|
|
fdc2e0f692 | ||
|
|
2672d037a8 | ||
|
|
ee663d61cd | ||
|
|
008a768f15 | ||
|
|
33b2e6a856 | ||
|
|
6540107ccb | ||
|
|
1ce08a62a9 | ||
|
|
b82bdc7782 | ||
|
|
e0e21dfdda | ||
|
|
981d09cc28 | ||
|
|
2fbd5dc828 | ||
|
|
931b02dbb1 | ||
|
|
0962af5e72 | ||
|
|
9b7d13476f | ||
|
|
3efb731b40 | ||
|
|
ce989d0d67 | ||
|
|
405f96c4b7 | ||
|
|
5ad0212b93 | ||
|
|
30799dd73f | ||
|
|
8ebe2c563a | ||
|
|
57588dec7a | ||
|
|
9a8b74d744 | ||
|
|
e11d70e408 | ||
|
|
60d2138f30 | ||
|
|
259ee610a6 | ||
|
|
4192f6a6d9 | ||
|
|
54decda7a4 | ||
|
|
f42841a6ab | ||
|
|
524363dcf7 | ||
|
|
17f6b3a10b | ||
|
|
da71e2524c | ||
|
|
f3da2b4031 | ||
|
|
e2dad367b4 | ||
|
|
9b7ff43118 | ||
|
|
adfbbc3fb0 | ||
|
|
f621261ff9 | ||
|
|
00d55fc4b4 | ||
|
|
74dc41c7c7 | ||
|
|
925599cab0 | ||
|
|
a43048a1ad | ||
|
|
d6c5a6cd59 | ||
|
|
54f339f0c0 | ||
|
|
115b9147b9 | ||
|
|
6b5c9b1b8e | ||
|
|
06b487119d | ||
|
|
4ca3f27293 | ||
|
|
785a121825 | ||
|
|
f73e51e94c | ||
|
|
e6802690b8 | ||
|
|
595e033776 | ||
|
|
e5fc89821f | ||
|
|
411e54023a | ||
|
|
8f05c85838 | ||
|
|
e4cb74896b | ||
|
|
8e6e4ede6d | ||
|
|
0b03ad9a21 | ||
|
|
0e6a314d86 | ||
|
|
1b59712c48 | ||
|
|
7c8d5b0afd | ||
|
|
7f63d896f9 | ||
|
|
2115b18ae3 | ||
|
|
4ac3e7b864 | ||
|
|
03bd96d1d1 | ||
|
|
4a85cf5e74 | ||
|
|
a8fde9e530 | ||
|
|
1f9a15dd18 | ||
|
|
a872cc3418 | ||
|
|
646147c275 | ||
|
|
314099a267 | ||
|
|
ce9330e9bb | ||
|
|
b2a981f353 | ||
|
|
a372619fee | ||
|
|
12cdf39165 | ||
|
|
19c5343a0a | ||
|
|
4a4c8f84d5 | ||
|
|
f94208f493 | ||
|
|
f2cb9b36b2 | ||
|
|
1c5897895b | ||
|
|
64423f3a09 | ||
|
|
9fb3f04385 | ||
|
|
dd627cd7f4 | ||
|
|
eedf270127 | ||
|
|
a1af94f4e9 | ||
|
|
9f5bf06f95 | ||
|
|
40705caf7e | ||
|
|
9d5b9efc2f | ||
|
|
cc4251c5b7 | ||
|
|
8d74d34f2a | ||
|
|
7f996ea6d5 | ||
|
|
0aa4a4ba7a | ||
|
|
1ab36d891c | ||
|
|
5b5625a6f0 | ||
|
|
33a9cd02ba | ||
|
|
ca73651e12 | ||
|
|
fbd834716f | ||
|
|
914b4fae7b | ||
|
|
a1bf139188 | ||
|
|
a2f753986b | ||
|
|
d28f44335a | ||
|
|
0a925a6f21 | ||
|
|
132bff25df | ||
|
|
e1c16a8e68 | ||
|
|
4ee73fa272 | ||
|
|
30cfe65b39 | ||
|
|
40d5f9b5d2 | ||
|
|
809022b273 | ||
|
|
d0c0585553 | ||
|
|
d60929514b | ||
|
|
920e1f56c2 | ||
|
|
86122e1646 | ||
|
|
f9a27d6778 | ||
|
|
8b0be5c1fc | ||
|
|
686561dc5b | ||
|
|
b8b8e58586 | ||
|
|
54fd7c7e9a | ||
|
|
e060ae3176 | ||
|
|
7392a32cd8 | ||
|
|
8b724493cc | ||
|
|
9cb16accfd | ||
|
|
d5944ae69c | ||
|
|
6102c70855 | ||
|
|
6cc055dbba | ||
|
|
f51ce077a3 | ||
|
|
2de4c95446 | ||
|
|
63f70ba465 | ||
|
|
7ef68a9d6a | ||
|
|
90bf300bd8 | ||
|
|
f9528f1248 | ||
|
|
4861ec5a40 | ||
|
|
acf5b3579b | ||
|
|
d1460ab65b | ||
|
|
85bd773c55 | ||
|
|
ed3918b508 | ||
|
|
7c2766096c | ||
|
|
acd8b95114 | ||
|
|
34ff813e2a | ||
|
|
056cef7292 | ||
|
|
7c5f256d4a | ||
|
|
82749e4442 | ||
|
|
7890185e81 | ||
|
|
71fc0dd097 | ||
|
|
8373a0fa60 | ||
|
|
21264baaae | ||
|
|
703f9290c9 | ||
|
|
dd1b52c7d9 | ||
|
|
01003617cd | ||
|
|
bfe4bc2894 | ||
|
|
1c88037ea0 | ||
|
|
0027e6bdab | ||
|
|
87edbb2d3a | ||
|
|
5be92a96df | ||
|
|
0733af5239 | ||
|
|
216ed8c8ea | ||
|
|
58e3b8c5ad | ||
|
|
c6adfd9d67 | ||
|
|
672c58be01 | ||
|
|
6cf3b65953 | ||
|
|
936dda4773 | ||
|
|
047e327f01 | ||
|
|
032dc5c108 | ||
|
|
dc54e0e1c4 | ||
|
|
9124b0a7a3 | ||
|
|
dea47f601d | ||
|
|
67cf4c42d5 | ||
|
|
dc762196dc | ||
|
|
0a900dc275 | ||
|
|
6f58510431 | ||
|
|
666fb7ea2d | ||
|
|
f0778860e5 | ||
|
|
6aea546d6f | ||
|
|
e0a3291235 | ||
|
|
b88d7091c8 | ||
|
|
15cfa3bf62 | ||
|
|
9c9d1650d1 | ||
|
|
0ae09577f6 | ||
|
|
a59f82093a | ||
|
|
be95b56c10 | ||
|
|
ea0f7dde95 | ||
|
|
a59626c971 | ||
|
|
67a7534c21 | ||
|
|
39f3f5b2d9 | ||
|
|
eccc31a4b9 | ||
|
|
d31f238be0 | ||
|
|
27c26a77a2 | ||
|
|
ab503902c8 | ||
|
|
ed53b62f1b | ||
|
|
ad5ba54cd4 | ||
|
|
a6742b7f82 | ||
|
|
91bae4b1a8 | ||
|
|
4959d8079b | ||
|
|
a558bd9312 | ||
|
|
3e41163bbe | ||
|
|
10170b41c3 | ||
|
|
e0e91e8397 | ||
|
|
d2de0292cc | ||
|
|
0210ba9c13 | ||
|
|
117d7194af | ||
|
|
7587ef5136 | ||
|
|
087a797257 | ||
|
|
a02f42188c | ||
|
|
98e0bf22d3 | ||
|
|
1e2ff042b4 | ||
|
|
b8eb9196e8 | ||
|
|
db1df58955 | ||
|
|
2f5dc10399 | ||
|
|
4100615cd6 | ||
|
|
e27c3edaba | ||
|
|
3c9ea2b667 | ||
|
|
065f42af1d | ||
|
|
1d503f45ad | ||
|
|
5b5f9a069a | ||
|
|
77c7f9133f | ||
|
|
475281935e | ||
|
|
cdf248b1e2 | ||
|
|
85c0322313 | ||
|
|
ebc1ed4015 | ||
|
|
a25da7f771 | ||
|
|
c78f103ca6 | ||
|
|
4d50ed0b9d | ||
|
|
9ac2cfe611 | ||
|
|
85da0b419c | ||
|
|
3ddaa60de9 | ||
|
|
25641d956e | ||
|
|
3b8c33d49a | ||
|
|
f74a594e98 | ||
|
|
668ab8b85c | ||
|
|
98b190c626 | ||
|
|
9568a4f2b4 | ||
|
|
b41e0910b0 | ||
|
|
6448189d20 | ||
|
|
1694d510ec | ||
|
|
af7ccff846 | ||
|
|
381460fd97 | ||
|
|
b02a41751c | ||
|
|
e0acccc3c9 | ||
|
|
bcf27d78e5 | ||
|
|
ad54d0ed52 | ||
|
|
880a99adf8 | ||
|
|
3b11915eab | ||
|
|
82c799b9d1 | ||
|
|
99c0ca621b | ||
|
|
e1f60e3f83 | ||
|
|
5a6c229b27 | ||
|
|
86a436e9bf | ||
|
|
7516fd03a3 | ||
|
|
9826c20d1a | ||
|
|
12392b5190 | ||
|
|
4e57abb159 | ||
|
|
2b1ba60f24 | ||
|
|
638c868a07 | ||
|
|
b909330518 | ||
|
|
802072ec17 | ||
|
|
3c343eb775 | ||
|
|
8b67d06272 | ||
|
|
bc521504ca | ||
|
|
0797adf223 | ||
|
|
718039561e | ||
|
|
85698860ae | ||
|
|
50e131a4ff | ||
|
|
b733bb8ead | ||
|
|
e18d206248 | ||
|
|
2248b1f846 | ||
|
|
58e19e86f4 | ||
|
|
04d1862e3a | ||
|
|
7ecfc37854 | ||
|
|
21d7806064 | ||
|
|
c5b2d6cbc8 | ||
|
|
75c7e501ef | ||
|
|
dba0931b58 | ||
|
|
e0a7d6bfb9 | ||
|
|
add854d31b | ||
|
|
66b70a8043 | ||
|
|
1d1843bf3b | ||
|
|
0e23ba8f1a | ||
|
|
b6074da498 | ||
|
|
7e92d478a1 | ||
|
|
a9ec057b91 | ||
|
|
64a5e0d93f | ||
|
|
378e4ea34e | ||
|
|
ff670d044a | ||
|
|
fac212fafa | ||
|
|
e83c7e6691 | ||
|
|
e0c4877d76 | ||
|
|
457b5d2fe8 | ||
|
|
9cf8dacfbb | ||
|
|
b5d7d71e1e | ||
|
|
6fdc7be502 | ||
|
|
8fe858c5c6 | ||
|
|
0d7197381a | ||
|
|
651f45fe29 | ||
|
|
02270e0e3d | ||
|
|
cb692d73c8 | ||
|
|
1300cf23c5 | ||
|
|
3cb24410a8 | ||
|
|
be7ce4110e | ||
|
|
c07e4a8c01 | ||
|
|
ff8da9d246 | ||
|
|
b1faebae4a | ||
|
|
e96515433d | ||
|
|
5a8d2c3cb4 | ||
|
|
183a9d7088 | ||
|
|
c1384422c3 | ||
|
|
ccc0ebd0f9 | ||
|
|
9d4336d296 | ||
|
|
17bc9d3085 | ||
|
|
436f481a34 | ||
|
|
9e8215b213 | ||
|
|
e958a83dd4 | ||
|
|
f44b122262 | ||
|
|
26d1cf9186 | ||
|
|
895ee77c38 | ||
|
|
caf8b15f6d | ||
|
|
bc7f18064f | ||
|
|
355d3f44fb | ||
|
|
9de863e68b | ||
|
|
64b7f8e445 | ||
|
|
626f488cb4 | ||
|
|
10212e376a | ||
|
|
81462cd530 | ||
|
|
7d4e4ac646 | ||
|
|
0ed339f19d | ||
|
|
c6fc3560f2 | ||
|
|
9ddc0327d4 |
No files matched your search
@@ -0,0 +1,11 @@
|
||||
CompileFlags:
|
||||
Add:
|
||||
- "-std=c++17"
|
||||
- "-I../ext"
|
||||
- "-I../ext/prometheus-cpp-lite-1.0/core/include"
|
||||
- "-I../ext/prometheus-cpp-lite-1.0/simpleapi/include"
|
||||
- "-I../ext/opentelemetry-cpp-1.21.0/api/include"
|
||||
- "-I./ext"
|
||||
- "-I./ext/prometheus-cpp-lite-1.0/core/include"
|
||||
- "-I./ext/prometheus-cpp-lite-1.0/simpleapi/include"
|
||||
- "-I./ext/opentelemetry-cpp-1.21.0/api/include"
|
||||
@@ -1,68 +0,0 @@
|
||||
|
||||
local targets = [
|
||||
//
|
||||
// Render these into .drone.yaml by running "make drone"
|
||||
//
|
||||
{ "os": "linux", "name": "el9", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "el8", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "el7", "isas": [ "amd64", "ppc64le"], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "el6", "isas": [ "amd64" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "amzn2", "isas": [ "amd64", "arm64" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "fc37", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "fc36", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "fc35", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "jammy", "isas": [ "amd64", "arm64", "armv7", "riscv64", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "focal", "isas": [ "amd64", "arm64", "armv7", "riscv64", "ppc64le" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "bionic", "isas": [ "amd64", "arm64", "386", "ppc64le", "s390x" ], "events": ["tag" ] },
|
||||
{ "os": "linux", "name": "xenial", "isas": [ "amd64", "arm64", "386" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "sid", "isas": [ "386", "amd64", "arm64", "armv7", "riscv64", "mips64le", "ppc64le", "s390x" ], "events": [ "push", "tag" ] },
|
||||
{ "os": "linux", "name": "bookworm", "isas": [ "amd64", "arm64", "armv7", "386", "mips64le", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "bullseye", "isas": [ "amd64", "arm64", "armv7", "386", "mips64le", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "buster", "isas": [ "amd64", "arm64", "armv7", "386", "mips64le", "ppc64le", "s390x" ], "events": [ "tag" ] },
|
||||
{ "os": "linux", "name": "stretch", "isas": [ "amd64", "arm64", "386" ], "events": [ "tag" ] },
|
||||
// { "os": "windows", "name": "win2k19", "isas": [ "amd64" ], "events": ["push", "tag" ] }
|
||||
];
|
||||
|
||||
local Build(platform, os, isa, events) = {
|
||||
"kind": "pipeline",
|
||||
"type": "docker",
|
||||
"pull": "always",
|
||||
"name": platform + " " + isa + " " + "build",
|
||||
"clone": { "depth": 1 },
|
||||
"steps": [
|
||||
{
|
||||
"name": "build",
|
||||
"image": "registry.sean.farm/honda-builder",
|
||||
"commands": [ "./ci/scripts/build.sh " + platform + " " + isa + " " + "100.0.0+${DRONE_COMMIT_SHA:0:8}" + " " + "${DRONE_BUILD_EVENT}" ]
|
||||
},
|
||||
{
|
||||
"name": "list",
|
||||
"image": "registry.sean.farm/honda-builder",
|
||||
"commands": [ "ls -la " + platform ]
|
||||
},
|
||||
{
|
||||
"name": "notify-mattermost",
|
||||
"image": "registry.sean.farm/mattermost-notify",
|
||||
"environment": {
|
||||
"token": { "from_secret": "mattermost-token" },
|
||||
"host": { "from_secret": "mattermost-host" },
|
||||
"channel": { "from_secret": "mattermost-channel" },
|
||||
"maxRetry": 3,
|
||||
},
|
||||
"when": { "status": [ "failure" ] }
|
||||
}
|
||||
],
|
||||
"image_pull_secrets": [ "dockerconfigjson" ],
|
||||
[ if isa == "arm64" || isa == "armv7" then "platform" ]: { os: os, arch: "arm64" },
|
||||
"trigger": { "event": events }
|
||||
};
|
||||
|
||||
// puttin on the bits
|
||||
|
||||
std.flattenArrays([
|
||||
[
|
||||
Build(p.name, p.os, isa, p.events)
|
||||
for isa in p.isas
|
||||
]
|
||||
for p in targets
|
||||
])
|
||||
-2655
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,126 @@
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build_ubuntu:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: gitconfig
|
||||
run: |
|
||||
git config --global core.autocrlf input
|
||||
# git config --global core.eol lf
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
targets: x86_64-unknown-linux-gnu
|
||||
components: rustfmt, clippy
|
||||
|
||||
- name: Set up cargo cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
continue-on-error: false
|
||||
with:
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }}
|
||||
shared-key: ${{ runner.os }}-cargo-
|
||||
workspaces: |
|
||||
rustybits/
|
||||
|
||||
- name: make
|
||||
run: make
|
||||
- name: selftest
|
||||
run: |
|
||||
make selftest
|
||||
./zerotier-selftest
|
||||
- name: 'Tar files' # keeps permissions (execute)
|
||||
run: tar -cvf zerotier-one.tar zerotier-one
|
||||
- name: Archive production artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zerotier-one-ubuntu-x64
|
||||
path: zerotier-one.tar
|
||||
retention-days: 7
|
||||
|
||||
build_macos:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: gitconfig
|
||||
run: |
|
||||
git config --global core.autocrlf input
|
||||
# git config --global core.eol lf
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Rust aarch64
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
target: aarch64-apple-darwin
|
||||
components: rustfmt, clippy
|
||||
- name: Install Rust x86_64
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
target: x86_64-apple-darwin
|
||||
components: rustfmt, clippy
|
||||
- name: Set up cargo cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
continue-on-error: false
|
||||
with:
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }}
|
||||
shared-key: ${{ runner.os }}-cargo-
|
||||
workspaces: |
|
||||
rustybits/
|
||||
- name: make
|
||||
run: make
|
||||
- name: selftest
|
||||
run: |
|
||||
make selftest
|
||||
./zerotier-selftest
|
||||
- name: 'Tar files' # keeps permissions (execute)
|
||||
run: tar -cvf zerotier-one.tar zerotier-one
|
||||
- name: Archive production artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zerotier-one-mac
|
||||
path: zerotier-one.tar
|
||||
retention-days: 7
|
||||
|
||||
|
||||
build_windows:
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- name: gitconfig
|
||||
run: |
|
||||
git config --global core.autocrlf true
|
||||
# git config --global core.eol lf
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
targets: x86_64-pc-windows-msvc
|
||||
components: rustfmt, clippy
|
||||
- name: Set up cargo cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
continue-on-error: false
|
||||
with:
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }}
|
||||
shared-key: ${{ runner.os }}-cargo-
|
||||
workspaces: |
|
||||
rustybits/
|
||||
|
||||
- name: setup msbuild
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
- name: msbuild
|
||||
run: |
|
||||
msbuild windows\ZeroTierOne.sln /m /p:Configuration=Release /property:Platform=x64 /t:ZeroTierOne
|
||||
- name: Archive production artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zerotier-one-windows
|
||||
path: windows/Build
|
||||
retention-days: 7
|
||||
Executable
+497
@@ -0,0 +1,497 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This test script joins Earth and pokes some stuff
|
||||
|
||||
TEST_NETWORK=8056c2e21c000001
|
||||
RUN_LENGTH=30
|
||||
TEST_FINISHED=false
|
||||
ZTO_VER=$(git describe --tags $(git rev-list --tags --max-count=1))
|
||||
ZTO_COMMIT=$(git rev-parse HEAD)
|
||||
ZTO_COMMIT_SHORT=$(git rev-parse --short HEAD)
|
||||
TEST_DIR_PREFIX="$ZTO_VER-$ZTO_COMMIT_SHORT-test-results"
|
||||
|
||||
TEST_OK=0
|
||||
TEST_FAIL=1
|
||||
|
||||
echo "Performing test on: $ZTO_VER-$ZTO_COMMIT_SHORT"
|
||||
TEST_FILEPATH_PREFIX="$TEST_DIR_PREFIX/$ZTO_COMMIT_SHORT"
|
||||
mkdir $TEST_DIR_PREFIX
|
||||
|
||||
# How long we will wait for ZT to come online before considering it a failure
|
||||
MAX_WAIT_SECS=30
|
||||
|
||||
ZT_PORT_NODE_1=9996
|
||||
ZT_PORT_NODE_2=9997
|
||||
|
||||
################################################################################
|
||||
# Multi-node connectivity and performance test #
|
||||
################################################################################
|
||||
|
||||
test() {
|
||||
|
||||
echo -e "\nPerforming pre-flight checks"
|
||||
|
||||
check_exit_on_invalid_identity
|
||||
|
||||
echo -e "\nRunning test for $RUN_LENGTH seconds"
|
||||
|
||||
export NS1="ip netns exec ns1"
|
||||
export NS2="ip netns exec ns2"
|
||||
|
||||
export ZT1="$NS1 ./zerotier-cli -p9996 -D$(pwd)/node1"
|
||||
# Specify custom port on one node to ensure that feature works
|
||||
export ZT2="$NS2 ./zerotier-cli -p9997 -D$(pwd)/node2"
|
||||
|
||||
echo -e "\nSetting up network namespaces..."
|
||||
echo "Setting up ns1"
|
||||
|
||||
ip netns add ns1
|
||||
$NS1 ip link set dev lo up
|
||||
ip link add veth0 type veth peer name veth1
|
||||
ip link set veth1 netns ns1
|
||||
ip addr add 192.168.0.1/24 dev veth0
|
||||
ip link set dev veth0 up
|
||||
|
||||
$NS1 ip addr add 192.168.0.2/24 dev veth1
|
||||
$NS1 ip link set dev veth1 up
|
||||
|
||||
# Add default route
|
||||
$NS1 ip route add default via 192.168.0.1
|
||||
|
||||
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 \
|
||||
-o eth0 -j MASQUERADE
|
||||
iptables -A FORWARD -i eth0 -o veth0 -j ACCEPT
|
||||
iptables -A FORWARD -o eth0 -i veth0 -j ACCEPT
|
||||
|
||||
echo "Setting up ns2"
|
||||
ip netns add ns2
|
||||
$NS2 ip link set dev lo up
|
||||
ip link add veth2 type veth peer name veth3
|
||||
ip link set veth3 netns ns2
|
||||
ip addr add 192.168.1.1/24 dev veth2
|
||||
ip link set dev veth2 up
|
||||
|
||||
$NS2 ip addr add 192.168.1.2/24 dev veth3
|
||||
$NS2 ip link set dev veth3 up
|
||||
$NS2 ip route add default via 192.168.1.1
|
||||
|
||||
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 \
|
||||
-o eth0 -j MASQUERADE
|
||||
iptables -A FORWARD -i eth0 -o veth2 -j ACCEPT
|
||||
iptables -A FORWARD -o eth0 -i veth2 -j ACCEPT
|
||||
|
||||
# Allow forwarding
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
|
||||
################################################################################
|
||||
# Memory Leak Check #
|
||||
################################################################################
|
||||
|
||||
export FILENAME_MEMORY_LOG="$TEST_FILEPATH_PREFIX-memory.log"
|
||||
|
||||
echo -e "\nStarting a ZeroTier instance in each namespace..."
|
||||
|
||||
export time_test_start=$(date +%s)
|
||||
|
||||
# Spam the CLI as ZeroTier is starting
|
||||
spam_cli 100
|
||||
|
||||
echo "Starting memory leak check"
|
||||
$NS1 sudo valgrind --demangle=yes --exit-on-first-error=yes \
|
||||
--error-exitcode=1 \
|
||||
--xml=yes \
|
||||
--xml-file=$FILENAME_MEMORY_LOG \
|
||||
--leak-check=full \
|
||||
./zerotier-one node1 -p$ZT_PORT_NODE_1 -U >>node_1.log 2>&1 &
|
||||
|
||||
# Second instance, not run in memory profiler
|
||||
# Don't set up internet access until _after_ zerotier is running
|
||||
# This has been a source of stuckness in the past.
|
||||
$NS2 ip addr del 192.168.1.2/24 dev veth3
|
||||
$NS2 sudo ./zerotier-one node2 -U -p$ZT_PORT_NODE_2 >>node_2.log 2>&1 &
|
||||
|
||||
sleep 10; # New HTTP control plane is a bit sluggish, so we delay here
|
||||
|
||||
check_bind_to_correct_ports $ZT_PORT_NODE_1
|
||||
check_bind_to_correct_ports $ZT_PORT_NODE_2
|
||||
|
||||
$NS2 ip addr add 192.168.1.2/24 dev veth3
|
||||
$NS2 ip route add default via 192.168.1.1
|
||||
|
||||
echo -e "\nPing from host to namespaces"
|
||||
|
||||
ping -c 3 192.168.0.1
|
||||
ping -c 3 192.168.1.1
|
||||
|
||||
echo -e "\nPing from namespace to host"
|
||||
|
||||
$NS1 ping -c 3 192.168.0.1
|
||||
$NS1 ping -c 3 192.168.0.1
|
||||
$NS2 ping -c 3 192.168.0.2
|
||||
$NS2 ping -c 3 192.168.0.2
|
||||
|
||||
echo -e "\nPing from ns1 to ns2"
|
||||
|
||||
$NS1 ping -c 3 192.168.0.1
|
||||
|
||||
echo -e "\nPing from ns2 to ns1"
|
||||
|
||||
$NS2 ping -c 3 192.168.0.1
|
||||
|
||||
################################################################################
|
||||
# Online Check #
|
||||
################################################################################
|
||||
|
||||
echo "Waiting for ZeroTier to come online before attempting test..."
|
||||
node1_online=false
|
||||
node2_online=false
|
||||
both_instances_online=false
|
||||
time_zt_node1_start=$(date +%s)
|
||||
time_zt_node2_start=$(date +%s)
|
||||
|
||||
for ((s = 0; s <= $MAX_WAIT_SECS; s++)); do
|
||||
node1_online="$($ZT1 -j info | jq '.online' 2>/dev/null)"
|
||||
node2_online="$($ZT2 -j info | jq '.online' 2>/dev/null)"
|
||||
echo "Checking for online status: try #$s, node1:$node1_online, node2:$node2_online"
|
||||
if [[ "$node2_online" == "true" && "$node1_online" == "true" ]]; then
|
||||
export both_instances_online=true
|
||||
export time_to_both_nodes_online=$(date +%s)
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo -e "\n\nContents of ZeroTier home paths:"
|
||||
|
||||
ls -lga node1
|
||||
tree node1
|
||||
ls -lga node2
|
||||
tree node2
|
||||
|
||||
echo -e "\n\nRunning ZeroTier processes:"
|
||||
echo -e "\nNode 1:\n"
|
||||
$NS1 ps aux | grep zerotier-one
|
||||
echo -e "\nNode 2:\n"
|
||||
$NS2 ps aux | grep zerotier-one
|
||||
|
||||
echo -e "\n\nStatus of each instance:"
|
||||
|
||||
echo -e "\n\nNode 1:\n"
|
||||
$ZT1 status
|
||||
echo -e "\n\nNode 2:\n"
|
||||
$ZT2 status
|
||||
|
||||
if [[ "$both_instances_online" != "true" ]]; then
|
||||
exit_test_and_generate_report $TEST_FAIL "one or more nodes failed to come online"
|
||||
fi
|
||||
|
||||
echo -e "\nJoining networks"
|
||||
|
||||
$ZT1 join $TEST_NETWORK
|
||||
$ZT2 join $TEST_NETWORK
|
||||
|
||||
sleep 10
|
||||
|
||||
node1_ip4=$($ZT1 get $TEST_NETWORK ip4)
|
||||
node2_ip4=$($ZT2 get $TEST_NETWORK ip4)
|
||||
|
||||
echo "node1_ip4=$node1_ip4"
|
||||
echo "node2_ip4=$node2_ip4"
|
||||
|
||||
echo -e "\nPinging each node"
|
||||
|
||||
PING12_FILENAME="$TEST_FILEPATH_PREFIX-ping-1-to-2.txt"
|
||||
PING21_FILENAME="$TEST_FILEPATH_PREFIX-ping-2-to-1.txt"
|
||||
|
||||
$NS1 ping -c 16 $node2_ip4 >$PING12_FILENAME
|
||||
$NS2 ping -c 16 $node1_ip4 >$PING21_FILENAME
|
||||
|
||||
ping_loss_percent_1_to_2=$(cat $PING12_FILENAME |
|
||||
grep "packet loss" | awk '{print $6}' | sed 's/%//')
|
||||
ping_loss_percent_2_to_1=$(cat $PING21_FILENAME |
|
||||
grep "packet loss" | awk '{print $6}' | sed 's/%//')
|
||||
|
||||
# Normalize loss value
|
||||
export ping_loss_percent_1_to_2=$(echo "scale=2; $ping_loss_percent_1_to_2/100.0" | bc)
|
||||
export ping_loss_percent_2_to_1=$(echo "scale=2; $ping_loss_percent_2_to_1/100.0" | bc)
|
||||
|
||||
################################################################################
|
||||
# CLI Check #
|
||||
################################################################################
|
||||
|
||||
echo "Testing basic CLI functionality..."
|
||||
|
||||
spam_cli 10
|
||||
|
||||
$ZT1 join $TEST_NETWORK
|
||||
|
||||
$ZT1 -h
|
||||
$ZT1 -v
|
||||
$ZT1 status
|
||||
$ZT1 info
|
||||
$ZT1 listnetworks
|
||||
$ZT1 peers
|
||||
$ZT1 listpeers
|
||||
|
||||
$ZT1 -j status
|
||||
$ZT1 -j info
|
||||
$ZT1 -j listnetworks
|
||||
$ZT1 -j peers
|
||||
$ZT1 -j listpeers
|
||||
|
||||
$ZT1 dump
|
||||
|
||||
$ZT1 get $TEST_NETWORK allowDNS
|
||||
$ZT1 get $TEST_NETWORK allowDefault
|
||||
$ZT1 get $TEST_NETWORK allowGlobal
|
||||
$ZT1 get $TEST_NETWORK allowManaged
|
||||
$ZT1 get $TEST_NETWORK bridge
|
||||
$ZT1 get $TEST_NETWORK broadcastEnabled
|
||||
$ZT1 get $TEST_NETWORK dhcp
|
||||
$ZT1 get $TEST_NETWORK id
|
||||
$ZT1 get $TEST_NETWORK mac
|
||||
$ZT1 get $TEST_NETWORK mtu
|
||||
$ZT1 get $TEST_NETWORK name
|
||||
$ZT1 get $TEST_NETWORK netconfRevision
|
||||
$ZT1 get $TEST_NETWORK nwid
|
||||
$ZT1 get $TEST_NETWORK portDeviceName
|
||||
$ZT1 get $TEST_NETWORK portError
|
||||
$ZT1 get $TEST_NETWORK status
|
||||
$ZT1 get $TEST_NETWORK type
|
||||
|
||||
# Test an invalid command
|
||||
$ZT1 get $TEST_NETWORK derpderp
|
||||
|
||||
# TODO: Validate JSON
|
||||
|
||||
# Performance Test
|
||||
|
||||
export FILENAME_PERF_JSON="$TEST_FILEPATH_PREFIX-iperf.json"
|
||||
|
||||
echo -e "\nBeginning performance test:"
|
||||
|
||||
echo -e "\nStarting server:"
|
||||
|
||||
echo "$NS1 iperf3 -s &"
|
||||
sleep 1
|
||||
|
||||
echo -e "\nStarting client:"
|
||||
sleep 1
|
||||
|
||||
echo "$NS2 iperf3 --json -c $node1_ip4 > $FILENAME_PERF_JSON"
|
||||
|
||||
cat $FILENAME_PERF_JSON
|
||||
|
||||
# Let ZeroTier idle long enough for various timers
|
||||
|
||||
echo -e "\nIdling ZeroTier for $RUN_LENGTH seconds..."
|
||||
sleep $RUN_LENGTH
|
||||
|
||||
echo -e "\nLeaving networks"
|
||||
|
||||
$ZT1 leave $TEST_NETWORK
|
||||
$ZT2 leave $TEST_NETWORK
|
||||
|
||||
sleep 5
|
||||
|
||||
exit_test_and_generate_report $TEST_OK "completed test"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Generate report #
|
||||
################################################################################
|
||||
|
||||
exit_test_and_generate_report() {
|
||||
|
||||
echo -e "\nStopping memory check..."
|
||||
sudo pkill -15 -f valgrind
|
||||
sleep 10
|
||||
|
||||
time_test_end=$(date +%s)
|
||||
|
||||
echo "Exiting test with reason: $2 ($1)"
|
||||
|
||||
# Collect ZeroTier dump files
|
||||
|
||||
echo -e "\nCollecting ZeroTier dump files"
|
||||
|
||||
node1_id=$($ZT1 -j status | jq -r .address)
|
||||
node2_id=$($ZT2 -j status | jq -r .address)
|
||||
|
||||
$ZT1 dump
|
||||
mv zerotier_dump.txt "$TEST_FILEPATH_PREFIX-node-dump-$node1_id.txt"
|
||||
|
||||
$ZT2 dump
|
||||
mv zerotier_dump.txt "$TEST_FILEPATH_PREFIX-node-dump-$node2_id.txt"
|
||||
|
||||
# Copy ZeroTier stdout/stderr logs
|
||||
|
||||
cp node_1.log "$TEST_FILEPATH_PREFIX-node-log-$node1_id.txt"
|
||||
cp node_2.log "$TEST_FILEPATH_PREFIX-node-log-$node2_id.txt"
|
||||
|
||||
# Generate report
|
||||
|
||||
cat $FILENAME_MEMORY_LOG
|
||||
|
||||
DEFINITELY_LOST=$(xmlstarlet sel -t -v '/valgrindoutput/error/xwhat' \
|
||||
$FILENAME_MEMORY_LOG | grep "definitely" | awk '{print $1;}')
|
||||
POSSIBLY_LOST=$(xmlstarlet sel -t -v '/valgrindoutput/error/xwhat' \
|
||||
$FILENAME_MEMORY_LOG | grep "possibly" | awk '{print $1;}')
|
||||
|
||||
# Generate coverage report artifact and summary
|
||||
|
||||
FILENAME_COVERAGE_JSON="$TEST_FILEPATH_PREFIX-coverage.json"
|
||||
FILENAME_COVERAGE_HTML="$TEST_FILEPATH_PREFIX-coverage.html"
|
||||
|
||||
echo -e "\nGenerating coverage test report..."
|
||||
|
||||
gcovr -r . --exclude ext --json-summary $FILENAME_COVERAGE_JSON \
|
||||
--html >$FILENAME_COVERAGE_HTML
|
||||
|
||||
cat $FILENAME_COVERAGE_JSON
|
||||
|
||||
COVERAGE_LINE_COVERED=$(cat $FILENAME_COVERAGE_JSON | jq .line_covered)
|
||||
COVERAGE_LINE_TOTAL=$(cat $FILENAME_COVERAGE_JSON | jq .line_total)
|
||||
COVERAGE_LINE_PERCENT=$(cat $FILENAME_COVERAGE_JSON | jq .line_percent)
|
||||
|
||||
COVERAGE_LINE_COVERED="${COVERAGE_LINE_COVERED:-0}"
|
||||
COVERAGE_LINE_TOTAL="${COVERAGE_LINE_TOTAL:-0}"
|
||||
COVERAGE_LINE_PERCENT="${COVERAGE_LINE_PERCENT:-0}"
|
||||
|
||||
# Default values
|
||||
|
||||
DEFINITELY_LOST="${DEFINITELY_LOST:-0}"
|
||||
POSSIBLY_LOST="${POSSIBLY_LOST:-0}"
|
||||
ping_loss_percent_1_to_2="${ping_loss_percent_1_to_2:-100.0}"
|
||||
ping_loss_percent_2_to_1="${ping_loss_percent_2_to_1:-100.0}"
|
||||
time_to_both_nodes_online="${time_to_both_nodes_online:--1}"
|
||||
|
||||
# Summarize and emit json for trend reporting
|
||||
|
||||
FILENAME_SUMMARY="$TEST_FILEPATH_PREFIX-summary.json"
|
||||
|
||||
time_length_test=$((time_test_end - time_test_start))
|
||||
if [[ $time_to_both_nodes_online != -1 ]];
|
||||
then
|
||||
time_to_both_nodes_online=$((time_to_both_nodes_online - time_test_start))
|
||||
fi
|
||||
#time_length_zt_join=$((time_zt_join_end-time_zt_join_start))
|
||||
#time_length_zt_leave=$((time_zt_leave_end-time_zt_leave_start))
|
||||
#time_length_zt_can_still_ping=$((time_zt_can_still_ping-time_zt_leave_start))
|
||||
|
||||
summary=$(
|
||||
cat <<EOF
|
||||
{
|
||||
"version":"$ZTO_VER",
|
||||
"commit":"$ZTO_COMMIT",
|
||||
"arch_m":"$(uname -m)",
|
||||
"arch_a":"$(uname -a)",
|
||||
"binary_size":"$(stat -c %s zerotier-one)",
|
||||
"time_length_test":$time_length_test,
|
||||
"time_to_both_nodes_online":$time_to_both_nodes_online,
|
||||
"num_possible_bytes_lost": $POSSIBLY_LOST,
|
||||
"num_definite_bytes_lost": $DEFINITELY_LOST,
|
||||
"num_bad_formattings": $POSSIBLY_LOST,
|
||||
"coverage_lines_covered": $COVERAGE_LINE_COVERED,
|
||||
"coverage_lines_total": $COVERAGE_LINE_TOTAL,
|
||||
"coverage_lines_percent": $COVERAGE_LINE_PERCENT,
|
||||
"ping_loss_percent_1_to_2": $ping_loss_percent_1_to_2,
|
||||
"ping_loss_percent_2_to_1": $ping_loss_percent_2_to_1,
|
||||
"test_exit_code": $1,
|
||||
"test_exit_reason":"$2"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
echo $summary >$FILENAME_SUMMARY
|
||||
cat $FILENAME_SUMMARY
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# CLI Check #
|
||||
################################################################################
|
||||
|
||||
spam_cli() {
|
||||
echo "Spamming CLI..."
|
||||
# Rapidly spam the CLI with joins/leaves
|
||||
|
||||
MAX_TRIES="${1:-10}"
|
||||
|
||||
for ((s = 0; s <= MAX_TRIES; s++)); do
|
||||
$ZT1 status
|
||||
$ZT2 status
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
SPAM_TRIES=128
|
||||
|
||||
for ((s = 0; s <= SPAM_TRIES; s++)); do
|
||||
$ZT1 join $TEST_NETWORK
|
||||
done
|
||||
|
||||
for ((s = 0; s <= SPAM_TRIES; s++)); do
|
||||
$ZT1 leave $TEST_NETWORK
|
||||
done
|
||||
|
||||
for ((s = 0; s <= SPAM_TRIES; s++)); do
|
||||
$ZT1 leave $TEST_NETWORK
|
||||
$ZT1 join $TEST_NETWORK
|
||||
done
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Check for proper exit on load of invalid identity #
|
||||
################################################################################
|
||||
|
||||
check_exit_on_invalid_identity() {
|
||||
echo "Checking ZeroTier exits on invalid identity..."
|
||||
mkdir -p $(pwd)/exit_test
|
||||
ZT1="sudo ./zerotier-one -p9999 $(pwd)/exit_test"
|
||||
echo "asdfasdfasdfasdf" > $(pwd)/exit_test/identity.secret
|
||||
echo "asdfasdfasdfasdf" > $(pwd)/exit_test/authtoken.secret
|
||||
|
||||
echo "Launch ZeroTier with an invalid identity"
|
||||
$ZT1 &
|
||||
my_pid=$!
|
||||
|
||||
echo "Waiting 5 seconds"
|
||||
sleep 5
|
||||
|
||||
# check if process is running
|
||||
kill -0 $my_pid
|
||||
if [ $? -eq 0 ]; then
|
||||
exit_test_and_generate_report $TEST_FAIL "Exit test FAILED: Process still running after being fed an invalid identity"
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Check that we're binding to the primary port for TCP/TCP6/UDP #
|
||||
################################################################################
|
||||
|
||||
check_bind_to_correct_ports() {
|
||||
PORT_NUMBER=$1
|
||||
echo "Checking bound ports:"
|
||||
sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier"
|
||||
if [[ $(sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier" | grep "tcp") ]];
|
||||
then
|
||||
:
|
||||
else
|
||||
exit_test_and_generate_report $TEST_FAIL "ZeroTier did not bind to tcp/$1"
|
||||
fi
|
||||
if [[ $(sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier" | grep "tcp6") ]];
|
||||
then
|
||||
:
|
||||
else
|
||||
exit_test_and_generate_report $TEST_FAIL "ZeroTier did not bind to tcp6/$1"
|
||||
fi
|
||||
if [[ $(sudo netstat -anp | grep "$PORT_NUMBER" | grep "zerotier" | grep "udp") ]];
|
||||
then
|
||||
:
|
||||
else
|
||||
exit_test_and_generate_report $TEST_FAIL "ZeroTier did not bind to udp/$1"
|
||||
fi
|
||||
}
|
||||
|
||||
test "$@"
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
################################################################################
|
||||
# Set exit code depending on tool reports #
|
||||
################################################################################
|
||||
|
||||
DEFINITELY_LOST=$(cat *test-results/*summary.json | jq .num_definite_bytes_lost)
|
||||
EXIT_CODE=$(cat *test-results/*summary.json | jq .exit_code)
|
||||
EXIT_REASON=$(cat *test-results/*summary.json | jq .exit_reason)
|
||||
|
||||
cat *test-results/*summary.json
|
||||
|
||||
echo -e "\nBytes of memory definitely lost: $DEFINITELY_LOST"
|
||||
|
||||
if [[ "$DEFINITELY_LOST" -gt 0 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Catch-all for other non-zero exit codes
|
||||
|
||||
if [[ "$EXIT_CODE" -gt 0 ]]; then
|
||||
echo "Test failed: $EXIT_REASON"
|
||||
exit 1
|
||||
fi
|
||||
@@ -0,0 +1,56 @@
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build_ubuntu:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: gitconfig
|
||||
run: |
|
||||
git config --global core.autocrlf input
|
||||
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
targets: x86_64-unknown-linux-gnu
|
||||
components: rustfmt, clippy
|
||||
|
||||
- name: Set up cargo cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
continue-on-error: false
|
||||
with:
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }}
|
||||
shared-key: ${{ runner.os }}-cargo-
|
||||
workspaces: |
|
||||
rustybits/
|
||||
|
||||
- name: validate-1m-linux
|
||||
env:
|
||||
CC: 'gcc'
|
||||
CXX: 'g++'
|
||||
BRANCH: ${{ github.ref_name }}
|
||||
run: |
|
||||
sudo apt update && sudo apt install -y valgrind xmlstarlet gcovr iperf3 tree
|
||||
make one ZT_COVERAGE=1 ZT_TRACE=1
|
||||
sudo chmod +x ./.github/workflows/validate-linux.sh
|
||||
sudo ./.github/workflows/validate-linux.sh
|
||||
|
||||
- name: Archive test results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{github.sha}}-test-results
|
||||
path: "*test-results*"
|
||||
|
||||
- name: final-report
|
||||
run: |
|
||||
sudo chmod +x ./.github/workflows/validate-report.sh
|
||||
sudo ./.github/workflows/validate-report.sh
|
||||
|
||||
+15
-6
@@ -6,16 +6,19 @@
|
||||
/zerotier
|
||||
/nltest
|
||||
|
||||
# IDE stuff
|
||||
# IDE and dev tool stuff
|
||||
/.idea
|
||||
/.nova
|
||||
/compile_commands.json
|
||||
/.claude
|
||||
/.aider
|
||||
|
||||
# OS-created garbage files from various platforms
|
||||
.DS_Store
|
||||
.Apple*
|
||||
Thumbs.db
|
||||
@eaDir
|
||||
lost+found
|
||||
._*
|
||||
|
||||
# Windows build droppings
|
||||
@@ -58,6 +61,9 @@ zt1-src.tar.gz
|
||||
/MacEthernetTapAgent
|
||||
|
||||
# Miscellaneous temporaries, build files, etc.
|
||||
ext/installfiles/windows/*.back*.aip
|
||||
tcp-proxy/tcp-proxy
|
||||
rustybits/target
|
||||
*.log
|
||||
*.opensdf
|
||||
*.user
|
||||
@@ -85,6 +91,7 @@ debian/zerotier-one*.debhelper
|
||||
debian/*.log
|
||||
debian/zerotier-one.substvars
|
||||
root-watcher/config.json
|
||||
build/
|
||||
|
||||
# Java/Android/JNI build droppings
|
||||
java/obj/
|
||||
@@ -100,8 +107,8 @@ windows/WinUI/bin/
|
||||
windows/ZeroTierOne/Debug/
|
||||
/ext/installfiles/windows/chocolatey/zerotier-one/*.nupkg
|
||||
|
||||
|
||||
# Miscellaneous mac/Xcode droppings
|
||||
.DS_Store
|
||||
.Trashes
|
||||
*.swp
|
||||
*~.nib
|
||||
@@ -124,16 +131,18 @@ attic/world/mkworld
|
||||
workspace/
|
||||
workspace2/
|
||||
zeroidc/target/
|
||||
tcp-proxy/target
|
||||
|
||||
#snapcraft specifics
|
||||
# Snapcraft Linux build stuff
|
||||
/parts/
|
||||
/stage/
|
||||
/prime/
|
||||
|
||||
*.snap
|
||||
|
||||
.snapcraft
|
||||
__pycache__
|
||||
*.pyc
|
||||
*_source.tar.bz2
|
||||
snap/.snapcraft
|
||||
snap/.snapcraft
|
||||
|
||||
# local Claude configurations
|
||||
.claude/*.local.*
|
||||
-75
@@ -1,75 +0,0 @@
|
||||
# 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>
|
||||
Joseph Henry / joseph.henry@zerotier.com
|
||||
|
||||
## Third Party Contributors
|
||||
|
||||
* A number of fixes and improvements to the new controller, other stuff.<br>
|
||||
Kees Bos / https://github.com/keesbos/
|
||||
|
||||
* Debugging and testing, OpenWRT support fixes.<br>
|
||||
Moritz Warning / moritzwarning@web.de
|
||||
|
||||
* Debian GNU/Linux packaging, manual pages, and license compliance edits.<br>
|
||||
Ben Finney <ben+zerotier@benfinney.id.au>
|
||||
|
||||
* Several others made smaller contributions, which GitHub tracks here:<br>
|
||||
https://github.com/zerotier/ZeroTierOne/graphs/contributors/
|
||||
|
||||
## Third-Party Code
|
||||
|
||||
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: node/Packet.cpp (bundled within anonymous namespace)
|
||||
* Home page: http://code.google.com/p/lz4/
|
||||
* License grant: BSD 2-clause
|
||||
|
||||
* http-parser by Joyent, Inc. (many authors)
|
||||
|
||||
* Files: ext/http-parser/*
|
||||
* Home page: https://github.com/joyent/http-parser/
|
||||
* License grant: MIT/Expat
|
||||
|
||||
* C++11 json (nlohmann/json) by Niels Lohmann
|
||||
|
||||
* Files: ext/json/*
|
||||
* Home page: https://github.com/nlohmann/json
|
||||
* License grant: 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)
|
||||
|
||||
* Salsa20 stream cipher, Curve25519 elliptic curve cipher, Ed25519 digital signature algorithm, and Poly1305 MAC algorithm, all by Daniel J. Bernstein
|
||||
|
||||
* Files: node/Salsa20.* node/C25519.* node/Poly1305.*
|
||||
* Home page: http://cr.yp.to/
|
||||
* License grant: public domain
|
||||
* ZeroTier Modifications: slight cryptographically-irrelevant modifications for inclusion into ZeroTier core
|
||||
|
||||
* MiniUPNPC and libnatpmp by Thomas Bernard
|
||||
|
||||
* Files: ext/libnatpmp/* ext/miniupnpc/*
|
||||
* Home page: http://miniupnp.free.fr/
|
||||
* License grant: BSD attribution no-endorsement
|
||||
|
||||
* cpp-httplib by yhirose
|
||||
|
||||
* Files: ext/cpp-httplib/*
|
||||
* Home page: https://github.com/yhirose/cpp-httplib
|
||||
* License grant: MIT
|
||||
@@ -1,12 +0,0 @@
|
||||
ZeroTier One, an endpoint server for the ZeroTier virtual network layer.
|
||||
Copyright © 2011–2019 ZeroTier, Inc.
|
||||
|
||||
ZeroTier is released under the terms of the BSL version 1.1. See the
|
||||
file LICENSE.txt for details.
|
||||
|
||||
..
|
||||
Local variables:
|
||||
coding: utf-8
|
||||
mode: text
|
||||
End:
|
||||
vim: fileencoding=utf-8 filetype=text :
|
||||
+8
-13
@@ -1,22 +1,17 @@
|
||||
# vim: ft=dockerfile
|
||||
|
||||
FROM debian:buster as stage
|
||||
FROM debian:bookworm
|
||||
|
||||
ARG PACKAGE_BASEURL=https://download.zerotier.com/debian/buster/pool/main/z/zerotier-one/
|
||||
ARG ARCH=amd64
|
||||
ARG VERSION
|
||||
|
||||
RUN apt-get update -qq && apt-get install curl -y
|
||||
RUN curl -sSL -o zerotier-one.deb "${PACKAGE_BASEURL}/zerotier-one_${VERSION}_${ARCH}.deb"
|
||||
RUN apt-get update -qq && apt-get install curl gpg -y
|
||||
RUN mkdir -p /usr/share/zerotier && \
|
||||
curl -o /usr/share/zerotier/tmp.asc "https://download.zerotier.com/contact%40zerotier.com.gpg" && \
|
||||
gpg --no-default-keyring --keyring /usr/share/zerotier/zerotier.gpg --import /usr/share/zerotier/tmp.asc && \
|
||||
rm -f /usr/share/zerotier/tmp.asc && \
|
||||
echo "deb [signed-by=/usr/share/zerotier/zerotier.gpg] http://download.zerotier.com/debian/bookworm bookworm main" > /etc/apt/sources.list.d/zerotier.list
|
||||
|
||||
FROM debian:buster
|
||||
|
||||
RUN apt-get update -qq && apt-get install openssl libssl1.1 -y
|
||||
|
||||
COPY --from=stage zerotier-one.deb .
|
||||
|
||||
RUN dpkg -i zerotier-one.deb && rm -f zerotier-one.deb
|
||||
RUN echo "${VERSION}" >/etc/zerotier-version
|
||||
RUN apt-get update -qq && apt-get install zerotier-one=${VERSION} curl iproute2 net-tools iputils-ping openssl libssl3 -y
|
||||
RUN rm -rf /var/lib/zerotier-one
|
||||
|
||||
COPY entrypoint.sh.release /entrypoint.sh
|
||||
|
||||
Vendored
-365
@@ -1,365 +0,0 @@
|
||||
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")
|
||||
}
|
||||
|
||||
agent none
|
||||
|
||||
stages {
|
||||
stage ("Build") {
|
||||
steps {
|
||||
script {
|
||||
def tasks = [:]
|
||||
tasks << buildStaticBinaries()
|
||||
tasks << buildDebianNative()
|
||||
tasks << buildCentosNative()
|
||||
|
||||
parallel tasks
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Package Static") {
|
||||
steps {
|
||||
script {
|
||||
parallel packageStatic()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def buildStaticBinaries() {
|
||||
def tasks = [:]
|
||||
def dist = ["alpine"]
|
||||
def archs = []
|
||||
if (params.BUILD_ALL == true) {
|
||||
archs = ["arm64", "amd64", "i386", "armhf", "armel", "ppc64le", "s390x"]
|
||||
} else {
|
||||
archs = ["amd64", "i386"]
|
||||
}
|
||||
|
||||
tasks << getTasks(dist, archs, { distro, platform ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
sh "echo ${distro}-${platform}"
|
||||
def runtime = docker.image("ztbuild/${distro}-${platform}:latest")
|
||||
runtime.inside {
|
||||
dir("build") {
|
||||
sh 'make -j8 ZT_STATIC=1 all'
|
||||
sh "file ./zerotier-one"
|
||||
sh "mv zerotier-one zerotier-one-static-${platform}"
|
||||
stash includes: 'zerotier-one-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 centos6 = ["centos6"]
|
||||
def centos6Arch = ["i386", "amd64"]
|
||||
tasks << getTasks(centos6, centos6Arch, { distro, arch ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
dir("build") {
|
||||
unstash "static-${arch}"
|
||||
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one"
|
||||
sh "make redhat"
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/"
|
||||
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
|
||||
}
|
||||
}
|
||||
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
|
||||
}
|
||||
}
|
||||
return myNode
|
||||
})
|
||||
|
||||
def centos7 = ["centos7"]
|
||||
def centos7Arch = ["i386"]
|
||||
tasks << getTasks(centos7, centos7Arch, { distro, arch ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
dir("build") {
|
||||
unstash "static-${arch}"
|
||||
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one"
|
||||
sh "make redhat"
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/"
|
||||
archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
|
||||
}
|
||||
}
|
||||
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
|
||||
}
|
||||
}
|
||||
return myNode
|
||||
})
|
||||
|
||||
if (params.BUILD_ALL == true) {
|
||||
def clefos7 = ["clefos"]
|
||||
def clefos7Arch = ["s390x"]
|
||||
tasks << getTasks(clefos7, clefos7Arch, { distro, arch ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
dir("build/") {
|
||||
unstash "static-${arch}"
|
||||
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one"
|
||||
sh "make redhat"
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.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", "armel", "amd64", "i386"]
|
||||
} else {
|
||||
debianJessieArch = ["amd64", "i386"]
|
||||
}
|
||||
tasks << getTasks(debianJessie, debianJessieArch, { distro, arch ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
sh "ls -la ."
|
||||
dir('build/') {
|
||||
sh "ls -la ."
|
||||
unstash "static-${arch}"
|
||||
sh "pwd"
|
||||
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one && file ./zerotier-one"
|
||||
sh "mv -f debian/rules.static debian/rules"
|
||||
sh "make debian"
|
||||
}
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "mv *.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", "armhf", "arm64", "ppc64le"]
|
||||
} else {
|
||||
ubuntuTrustyArch = ["i386", "amd64"]
|
||||
}
|
||||
tasks << getTasks(ubuntuTrusty, ubuntuTrustyArch, { distro, arch ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
sh "ls -la ."
|
||||
dir('build/') {
|
||||
sh "ls -la ."
|
||||
unstash "static-${arch}"
|
||||
sh "pwd"
|
||||
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one && file ./zerotier-one"
|
||||
sh "mv -f debian/rules.static debian/rules"
|
||||
sh "make debian"
|
||||
}
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "mv *.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", "armel", "amd64", "i386"]
|
||||
} else {
|
||||
debianWheezyArchs = ["amd64", "i386"]
|
||||
}
|
||||
tasks << getTasks(debianJessie, debianJessieArch, { distro, arch ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
dir('build/') {
|
||||
unstash "static-${arch}"
|
||||
sh "mv zerotier-one-static-${arch} zerotier-one && chmod +x zerotier-one && file ./zerotier-one"
|
||||
sh "mv -f debian/rules.wheezy.static debian/rules"
|
||||
sh "mv -f debian/control.wheezy debian/control"
|
||||
sh "make debian"
|
||||
}
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "mv *.deb ${distro}"
|
||||
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
|
||||
}
|
||||
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
|
||||
}
|
||||
}
|
||||
return myNode
|
||||
})
|
||||
|
||||
return tasks
|
||||
}
|
||||
|
||||
def buildDebianNative() {
|
||||
def tasks = [:]
|
||||
def buster = ["debian-buster", "debian-stretch", "debian-bullseye", "debian-sid"]
|
||||
def busterArchs = []
|
||||
if (params.BUILD_ALL) {
|
||||
busterArchs = ["s390x", "ppc64le", "i386", "armhf", "armel", "arm64", "amd64"]
|
||||
} else {
|
||||
busterArchs = ["amd64", "i386"]
|
||||
}
|
||||
|
||||
def build = { distro, arch ->
|
||||
def myNode = {
|
||||
node ('linux-build') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
dir("build") {
|
||||
sh 'make debian'
|
||||
}
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "mv *.deb ${distro}"
|
||||
archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
|
||||
cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
|
||||
}
|
||||
}
|
||||
}
|
||||
return myNode
|
||||
}
|
||||
|
||||
tasks << getTasks(buster, busterArchs, 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", "s390x"]
|
||||
} else {
|
||||
ubuntuArchs = ["i386", "amd64"]
|
||||
}
|
||||
tasks << getTasks(ubuntu, ubuntuArchs, 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') {
|
||||
dir ("build") {
|
||||
checkout scm
|
||||
}
|
||||
def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
|
||||
runtime.inside {
|
||||
dir("build") {
|
||||
sh 'make -j4'
|
||||
sh 'make redhat'
|
||||
sh "mkdir -p ${distro}"
|
||||
sh "cp -av `find ~/rpmbuild/ -type f -name \"*.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
|
||||
}
|
||||
File renamed without changes.
+3
-147
@@ -1,149 +1,5 @@
|
||||
-----------------------------------------------------------------------------
|
||||
See LICENSE-MPL.txt for all code in node/, osdep/. service/, and everywhere else except ext/ and nonfree/.
|
||||
|
||||
Business Source License 1.1
|
||||
See nonfree/LICENSE.md for all non-free ("source available") portions of this repository.
|
||||
|
||||
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 1.4.4
|
||||
The Licensed Work is (c)2019 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 Derviative 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 License’s 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 License’s 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.
|
||||
Code in ext/ is external code included for build convenience or backward compatibility and retains its original license.
|
||||
@@ -30,3 +30,7 @@ endif
|
||||
drone:
|
||||
@echo "rendering .drone.yaml from .drone.jsonnet"
|
||||
drone jsonnet --format --stream
|
||||
drone sign zerotier/ZeroTierOne --save
|
||||
|
||||
clang-format:
|
||||
find node osdep service tcp-proxy nonfree/controller -iname '*.cpp' -o -iname '*.hpp' | xargs clang-format -i
|
||||
@@ -14,6 +14,7 @@ The version must be incremented in all of the following files:
|
||||
/debian/changelog
|
||||
/ext/installfiles/mac/ZeroTier One.pkgproj
|
||||
/ext/installfiles/windows/ZeroTier One.aip
|
||||
../DesktopUI/mac-app-template/ZeroTier.app/Contents/Info.plist
|
||||
|
||||
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.)
|
||||
|
||||
@@ -29,4 +30,4 @@ You will need [Packages](http://s.sudre.free.fr/Software/Packages/about.html) an
|
||||
|
||||
## 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.
|
||||
First load the Visual Studio solution and rebuild the UI and ZeroTier One in both x64, i386, and arm64 `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.
|
||||
@@ -60,9 +60,11 @@ To ensure you have a network available before trying to listen on it. Without pr
|
||||
|
||||
You can control a few settings including the identity used and the authtoken used to interact with the control socket (which you can forward and access through `localhost:9993`).
|
||||
|
||||
- `ZEROTIER_JOIN_NETWORKS`: additional way to set networks to join.
|
||||
- `ZEROTIER_API_SECRET`: replaces the `authtoken.secret` before booting and allows you to manage the control socket's authentication key.
|
||||
- `ZEROTIER_IDENTITY_PUBLIC`: the `identity.public` file for zerotier-one. Use `zerotier-idtool` to generate one of these for you.
|
||||
- `ZEROTIER_IDENTITY_SECRET`: the `identity.secret` file for zerotier-one. Use `zerotier-idtool` to generate one of these for you.
|
||||
- `ZEROTIER_LOCAL_CONF`: Sets the the `local.conf` file content for zerotier-one
|
||||
|
||||
### Tips
|
||||
|
||||
|
||||
@@ -1,111 +1,32 @@
|
||||
ZeroTier - Global Area Networking
|
||||
======
|
||||
# ZeroTier - Global Area Networking
|
||||
|
||||
*This document is written for a software developer audience. For information on using ZeroTier, see the: [Website](https://www.zerotier.com), [Documentation Site](https://docs.zerotier.com), and [Discussion Forum](https://discuss.zerotier.com).*
|
||||
## Quick Links
|
||||
|
||||
* [ZeroTier Documentation](https://docs.zerotier.com) - **Start here for downloads, installation, and usage**
|
||||
* [How to build](build.md) - **Build instructions and platform requirements**
|
||||
* [Corporate Site](https://www.zerotier.com/)
|
||||
* [Downloads](https://www.zerotier.com/download/)
|
||||
* [Service API Reference](service/README.md)
|
||||
* [Network Controller](nonfree/controller/README.md)
|
||||
* [Commercial Support](https://www.zerotier.com/contact)
|
||||
* [License Information](#license)
|
||||
|
||||
## About
|
||||
|
||||
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.
|
||||
|
||||
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 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.
|
||||
|
||||
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 connections.
|
||||
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 connections.
|
||||
|
||||
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."
|
||||
Apps for Android and iOS are available for free in the Google Play and Apple app stores.
|
||||
|
||||
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.
|
||||
For repository layout, build instructions, platform requirements, and information about running ZeroTier, see [build.md](build.md).
|
||||
|
||||
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.
|
||||
## License
|
||||
|
||||
A small amount of third party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](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.).
|
||||
See [LICENSE-MPL.txt](LICENSE-MPL.txt) for all code in node/, osdep/. service/, and everywhere else except ext/ and nonfree/.
|
||||
|
||||
### Getting Started
|
||||
See [nonfree/LICENSE.md](nonfree/LICENSE.md) for all non-free ("source available") portions of this repository.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
### Project Layout
|
||||
|
||||
The base path contains the ZeroTier One service main entry point (`one.cpp`), self test code, makefiles, etc.
|
||||
|
||||
- `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.
|
||||
- `zeroidc/`: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (This part is written in Rust, and more Rust will be appearing in this repository in the future.)
|
||||
|
||||
### Build and Platform Notes
|
||||
|
||||
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/`.
|
||||
|
||||
- **Mac**
|
||||
- Xcode command line tools for macOS 10.13 or newer are required.
|
||||
- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*.
|
||||
- **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.
|
||||
- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*.
|
||||
- **Windows**
|
||||
- Visual Studio 2022 on Windows 10 or newer.
|
||||
- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*.
|
||||
- **FreeBSD**
|
||||
- GNU make is required. Type `gmake` to build.
|
||||
- Rust for x86_64 and ARM64 targets *if SSO is enabled in the 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.
|
||||
- Rust for x86_64 and ARM64 targets *if SSO is enabled in the 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.
|
||||
|
||||
### Running
|
||||
|
||||
Running *zerotier-one* with `-h` option will show help.
|
||||
|
||||
On Linux and BSD, if you built from source, you can start the service with:
|
||||
|
||||
sudo ./zerotier-one -d
|
||||
|
||||
On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot.
|
||||
|
||||
A home folder for your system will automatically be created.
|
||||
|
||||
The service is controlled via the JSON API, which by default is available at 127.0.0.1 port 9993. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation.
|
||||
|
||||
Here's where home folders live (by default) on each OS:
|
||||
|
||||
* **Linux**: `/var/lib/zerotier-one`
|
||||
* **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one`
|
||||
* **Mac**: `/Library/Application Support/ZeroTier/One`
|
||||
* **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if Windows is installed with a non-standard drive letter assignment or layout.)
|
||||
|
||||
### Basic Troubleshooting
|
||||
|
||||
For most users, it just works.
|
||||
|
||||
If you are running a local system firewall, we recommend adding a rules permitting zerotier. If you installed binaries for Windows this should be done automatically. Other platforms might require manual editing of local firewall rules depending on your configuration.
|
||||
|
||||
See the [documentation site](https://docs.zerotier.com/zerotier/troubleshooting) for more information.
|
||||
|
||||
The Mac firewall can be found under "Security" in System Preferences. Linux has a variety of firewall configuration systems and tools.
|
||||
|
||||
On CentOS check `/etc/sysconfig/iptables` for IPTables rules. For other distributions consult your distribution's documentation. You'll also have to check the UIs or documentation for commercial third party firewall applications like Little Snitch (Mac), McAfee Firewall Enterprise (Windows), etc. if you are running any of those. Some corporate environments might have centrally managed firewall software, so you might also have to contact IT.
|
||||
|
||||
ZeroTier One peers will automatically locate each other and communicate directly over a local wired LAN *if UDP port 9993 inbound is open*. If that port is filtered, they won't be able to see each others' LAN announcement packets. If you're experiencing poor performance between devices on the same physical network, check their firewall settings. Without LAN auto-location peers must attempt "loopback" NAT traversal, which sometimes fails and in any case requires that every packet traverse your external router twice.
|
||||
|
||||
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 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.
|
||||
|
||||
Additional help can be found in our [knowledge base](https://zerotier.atlassian.net/wiki/spaces/SD/overview).
|
||||
Code in ext/ is external code included for build convenience or backward compatibility and retains its original license.
|
||||
+212
-149
File diff suppressed because it is too large.
Load diff
+94
@@ -0,0 +1,94 @@
|
||||
# Security
|
||||
|
||||
ZeroTier takes the security of our software products and services seriously, which
|
||||
includes all source code repositories managed through our GitHub organization.
|
||||
|
||||
## Supported Versions
|
||||
|
||||
The following versions of ZeroTier One receive security updates
|
||||
|
||||
| Version | Supported |
|
||||
| -------- | ------------------ |
|
||||
| 1.16.x | :white_check_mark: |
|
||||
| 1.14.x | :white_check_mark: |
|
||||
| 1.12.x | :x: |
|
||||
| < 1.12.0 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
**Please do not report security issues through public GitHub issues**
|
||||
|
||||
Instead, please report vulnerabilities via email to security@zerotier.com. If possible,
|
||||
please encrypt with our PGP key (see below).
|
||||
|
||||
Please include the following information, or as much as you can provide to help us
|
||||
understand the nature and scope of the issue:
|
||||
|
||||
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
|
||||
* Full paths of source file(s) related to the manifestation of the issue
|
||||
* The location of the affected source code (tag/branch/commit or direct URL)
|
||||
* Any special configuration required to reproduce the issue
|
||||
* Step-by-step instructions to reproduce the issue
|
||||
* Proof-of-concept or exploit code (if possible)
|
||||
* Impact of the issue, including how an attacker might exploit the issue
|
||||
|
||||
## Preferred Languages
|
||||
|
||||
We prefer all communications to be in English.
|
||||
|
||||
## security@zerotier.com PGP key
|
||||
|
||||
```
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBGQGOVIBEACalXTnNqaiSOVLFEiqHpDMg8N/OI5D5850Xy1ZEvx3B3rz7cbn
|
||||
k30ozHtJKbh+vqpyItE7DjyQAuF19gP5Q64Yh0Y+MmLHq60q/GwOwAYz7cI+UzA3
|
||||
5x8YqcmTp32LAM1xJn+iMlMLBuAmJl4kULKmOXPlpqPiyTFs5saizvm7fgRmfgJJ
|
||||
HpsnIrTkaDFJhAR+jvMJohVYwmhuydeI0DsHu7KGpG1ddcHDrUjOPNqXnnAPSPwx
|
||||
llw4yfKlQb8GYErsv/G5QVyzd5+SxEuiI4MARRnrk8LlMQ33CR6pzIQ/Bk5AAmye
|
||||
mHqfEAknkiOf++urYhRs9BL3Kz3MdV0cg92zr9EFOg0u56jxf5OnAiTOhGUUA0hn
|
||||
dS7peVGl46R9Oy2JYIazNDGi+4NIsYDFXsnsss9xOQVygPyeQd71zFHfix0jct9w
|
||||
j3o/kj7Egsnm9nc13354bYT6bbalqXiRWwGH1eAFpjueNWiVFwZS6NZUP3WeNDiY
|
||||
BlPo1LodvolbXiJcTILTCyEkERJPCK2zoE2nTdVfvTLWsuehw1M6Yd2/q74TVYy/
|
||||
RY+KjHkrChEBQ9PqXsXRHj6opKbT8JLfZkvU5k+3IiqqxOpB+QXFI/whj493CxWW
|
||||
so7QAmzOCyJq8GDVPxzkwUac22YIkXdiOmb8i/HWq+kLY/HjQE259Gx6KwARAQAB
|
||||
tClaZXJvVGllciBTZWN1cml0eSA8c2VjdXJpdHlAemVyb3RpZXIuY29tPokCTAQT
|
||||
AQoANhYhBH1HQGb+4jzl6mnFqf09m6uqADkABQJkBjlSAhsDBAsJCAcEFQoJCAUW
|
||||
AgMBAAIeAQIXgAAKCRD9PZurqgA5ACqPD/sFt6SG6Tu0HwTY2ofJtYsa2GBLL0pf
|
||||
dYlX4cWSs1PVB5+m5Oj18y+GB2umA9GnsVtmvaSfp3XEngt2zNWX27uUsVfL35b2
|
||||
/5TVVe8RjzOedqMN+lQWMvO+f/C1zmWYXjjpC+iGjgMMaRRrofkkn+7uL4N9y6gY
|
||||
rcXtpACT1rYFC+i1AKnZfUO8Vr5ji7odq0f7bDkN/N38rB0kRRwEmO8wqdpQK6gK
|
||||
nxf9vgJl5ggimDk5Xtz1sfd3y28bf5N4hdOCkXUbd10nUFY3wDNTM4VxozxTGJeG
|
||||
imdcc19Wuw/1fGUZ5SIjgPanCdPLGYwSTr+M6Fuern9uTtlC1GOby3BUtmVGP6EU
|
||||
1pSAJSRpmoBPHKKOYtSMwV8PCboXru9P1ab8y8STKM3SKyghUJrl17gdc0LaksZa
|
||||
E54pJudGPIQMFRqZjMdV6jgMuaLTozjZ4mW8EThf4mkX4xDkO8l7cOn0225ZYJZC
|
||||
lZKpdnwzk9owkJA80u4KBNJxTtB4ZAPzjBsD5hFzCZQTLNQp/psU3EjZsau28eXT
|
||||
E/C1QjEQHgy4ohkgQlCm1H1+clKssCWcdmsVGXuS1u8gh4K6X9b0Z6LeCGRaQvH2
|
||||
+DB8oTAdqp9nUZv9rP4pbo+sR4fF67CFLriVuxjedAiFkbM4uHMFcL4tc/X9+DRo
|
||||
YN5X7oEkZvO507kCDQRkBjlSARAAz58UMF7K1qKyQjzKTcutaYZ5SaIGky9lCLZn
|
||||
/2vjpFCoBogkxS/6IKQcwZk8b4S9QstaaQZDFEkxqNeKC0GiFTAMAb6SmYcK495h
|
||||
EZnHl0NA5Nc2dBlZk5E/ENzTCz2bXaxCcVESc2z+xCzu07brbhGrqvliKiwOUzt9
|
||||
JzqEsar6I95OutBcZvkFCs44/Uf9bS1qf1w4klE8w3vdMtGH23umrET4tFZ+sh6o
|
||||
ZFtQx0u2eKjsRdn/RMtsxLNaJlcE1DdIAqBpQrcmuwMC8v5wUGfCGZjhClzmyQlq
|
||||
akUkayir7UtbHbFT/mgO+YI77YGXWk5QrwPscqqT2l8KB/YMujNDmaWa/0KV1lIY
|
||||
zr5s4dzVeiwqFLR9ANFIhzFwzf3JLi6XSx123Qix0TxZoYPZCHl7yoi9qi6qybz5
|
||||
0Od2LSz3jbApeKYymZ+zjE+YV5y9DI6Wzy1j2M1FogNvTO9fMk+6dLt4HhTdSNvH
|
||||
cKya462YCcy+tnZTkhmh+FTebbJlV6D4wG7skE5KCdBhjm53xLwp6XW9L6n2CrkL
|
||||
W1IDBcCz0oPd1sMkXbO3wnxdXprV2XurCfsg/R2nszSNzvdJ8/xj3cr9hpoJ714R
|
||||
qqyoEDRZ1Ss9kGL166o5MpN5qb/EewdkqGgWP7YFXbhsdHQiW7Z7dAqzjoaybD4O
|
||||
nakkwyUAEQEAAYkCNgQYAQoAIBYhBH1HQGb+4jzl6mnFqf09m6uqADkABQJkBjlS
|
||||
AhsMAAoJEP09m6uqADkAax0P/Rh8EZYRqW6dPYTl1YQusAK10rAcRNq3ekjofXGk
|
||||
oXK1S7HWGoFgl5++5nfSfNgFJ5VLcgIM56wtIf49zFjWe5oC6fw8k+ghh4d2chMP
|
||||
hdDILx6e0c30Iq1+EvovGR9hWa0wJ4cKTdzlwhY9ZC09q0ia+bl2mwpie1JQDR0c
|
||||
zXCjt+PldLeeK9z1/XT0Q7KowYC+U18oR+KFm+EaRV4QT85JVequnIeGkmaHJrHB
|
||||
lH4T5A5ib7y8edon1c0Zx3GsaxJUojkEJ0SX7ffVDu6ztUZfkHfCVpMW4VzUeGA/
|
||||
m+CtFO9ciLRGZEkRa+zhIGoBvwEXU0GiwiF4nZ0F2C8UioeW0YIEV9zl3nXJctYE
|
||||
ZKc2whSENQRTGgaYHVoVZhznt71LKWgFLshwBo81UCXVkzwAjMW1ActDnmPw5M7q
|
||||
xR5Qp5G49Z1GmfSozazha0HVFPKNV5i3RlTzs4yLUnZyH0yC9IvtOefMHcLjG96L
|
||||
N5miEV97gvJJjrn8rhRvpUwAWgmT/9IuYjBNQTtNN40arto5HxezR76WCjdKYxdL
|
||||
p3dM1iiBDShHNm7LdyZlLFhTOMU0tNBxJJ7B09ar5gakeZjD+2aB1ODX9VuFtozL
|
||||
onBjI2gIkry0UIkuznHfFw05lZAZAiqHEVgVi/WTk4C/bklDZNgE0lx+IWzEz2iS
|
||||
L455
|
||||
=lheL
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
```
|
||||
Loaded 20 of 15499 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user