From 2c5ded78e362fe64b35014f53ba7915bbe017733 Mon Sep 17 00:00:00 2001 From: William Yates Date: Fri, 18 Jul 2025 18:03:33 -0700 Subject: [PATCH 01/16] Fix link select field in bond CLI --- service/OneService.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/service/OneService.cpp b/service/OneService.cpp index 8c7cd8386..ff09703c7 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -662,6 +662,7 @@ static void _peerToJson(nlohmann::json& pj, const ZT_Peer* peer, SharedPtr if (bond && peer->isBonded) { pj["bondingPolicyCode"] = peer->bondingPolicy; pj["bondingPolicyStr"] = Bond::getPolicyStrByCode(peer->bondingPolicy); + pj["linkSelectMethod"] = bond->getLinkSelectMethod(); pj["numAliveLinks"] = peer->numAliveLinks; pj["numTotalLinks"] = peer->numTotalLinks; pj["failoverInterval"] = bond->getFailoverInterval(); From 66a8c01d0eccf0faec98042b4ff9d853d04d0894 Mon Sep 17 00:00:00 2001 From: Jeremy Fleischman Date: Thu, 31 Jul 2025 14:39:46 -0700 Subject: [PATCH 02/16] Add a warning about missing DNS functionality on Linux It took me quite some searching before I found out that this simply is not implemented. A warning would have been very useful. refs: https://github.com/zerotier/ZeroTierOne/issues/2492 --- osdep/LinuxEthernetTap.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/osdep/LinuxEthernetTap.hpp b/osdep/LinuxEthernetTap.hpp index fe8079360..88122f4bf 100644 --- a/osdep/LinuxEthernetTap.hpp +++ b/osdep/LinuxEthernetTap.hpp @@ -59,6 +59,7 @@ class LinuxEthernetTap : public EthernetTap { virtual void setMtu(unsigned int mtu); virtual void setDns(const char* domain, const std::vector& servers) { + fprintf(stderr, "WARNING: ignoring call to LinuxEthernetTap::setDns on Linux. This is not implemented yet. See https://github.com/zerotier/ZeroTierOne/issues/2492 for details" ZT_EOL_S); } private: From 03a198a1b590d51150fb5741850da94ef44d8347 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 4 Sep 2025 17:16:23 -0400 Subject: [PATCH 03/16] bump rust versions per bot recommendation. --- rustybits/Cargo.lock | 317 +++++++++++++++++++++---------------------- 1 file changed, 156 insertions(+), 161 deletions(-) diff --git a/rustybits/Cargo.lock b/rustybits/Cargo.lock index e31e5ded6..ba8d1f836 100644 --- a/rustybits/Cargo.lock +++ b/rustybits/Cargo.lock @@ -211,9 +211,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.2" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "block-buffer" @@ -263,10 +263,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.33" +version = "1.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" +checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" dependencies = [ + "find-msvc-tools", "shlex", ] @@ -482,9 +483,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", "serde", @@ -731,6 +732,12 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "find-msvc-tools" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" + [[package]] name = "fixedbitset" version = "0.5.7" @@ -929,7 +936,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", "wasm-bindgen", ] @@ -941,9 +948,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "governor" -version = "0.8.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" +checksum = "444405bbb1a762387aa22dd569429533b54a1d8759d35d3b64cb39b0293eaa19" dependencies = [ "cfg-if", "dashmap", @@ -951,7 +958,7 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.3", - "no-std-compat", + "hashbrown 0.15.5", "nonzero_ext", "parking_lot", "portable-atomic", @@ -985,7 +992,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.10.0", + "indexmap 2.11.0", "slab", "tokio", "tokio-util", @@ -1004,7 +1011,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.10.0", + "indexmap 2.11.0", "slab", "tokio", "tokio-util", @@ -1256,7 +1263,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core", ] [[package]] @@ -1394,9 +1401,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -1423,11 +1430,11 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -1464,9 +1471,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ "once_cell", "wasm-bindgen", @@ -1531,26 +1538,26 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" -version = "0.13.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" dependencies = [ "hashbrown 0.15.5", ] [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -1640,12 +1647,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - [[package]] name = "nonzero_ext" version = "0.3.0" @@ -1663,12 +1664,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -1744,6 +1744,25 @@ dependencies = [ "url", ] +[[package]] +name = "objc2-core-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" +dependencies = [ + "libc", + "objc2-core-foundation", +] + [[package]] name = "object" version = "0.36.7" @@ -1797,7 +1816,7 @@ version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "foreign-types", "libc", @@ -1858,12 +1877,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "p256" version = "0.13.2" @@ -1933,7 +1946,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.10.0", + "indexmap 2.11.0", ] [[package]] @@ -2021,9 +2034,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -2290,7 +2303,7 @@ version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] @@ -2299,7 +2312,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] @@ -2324,47 +2337,32 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" @@ -2479,7 +2477,7 @@ dependencies = [ [[package]] name = "rustfsm" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "rustfsm_procmacro", "rustfsm_trait", @@ -2488,7 +2486,7 @@ dependencies = [ [[package]] name = "rustfsm_procmacro" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "derive_more", "proc-macro2", @@ -2500,7 +2498,7 @@ dependencies = [ [[package]] name = "rustfsm_trait" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" [[package]] name = "rustix" @@ -2508,7 +2506,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys", @@ -2642,7 +2640,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -2655,7 +2653,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -2761,7 +2759,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.11.0", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -2985,14 +2983,15 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.33.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753" dependencies = [ - "core-foundation-sys", "libc", "memchr", "ntapi", + "objc2-core-foundation", + "objc2-io-kit", "windows", ] @@ -3033,7 +3032,7 @@ dependencies = [ [[package]] name = "temporal-client" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "async-trait", @@ -3065,7 +3064,7 @@ dependencies = [ [[package]] name = "temporal-sdk" version = "0.1.0-alpha.1" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "async-trait", @@ -3087,7 +3086,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "async-trait", @@ -3136,7 +3135,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core-api" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "async-trait", "derive_builder", @@ -3155,7 +3154,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core-protos" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#199880d2f5673895e6437bc39a031243c7b7861c" +source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "base64 0.22.1", @@ -3240,12 +3239,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde", @@ -3255,15 +3253,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -3416,7 +3414,7 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "indexmap 2.10.0", + "indexmap 2.11.0", "pin-project-lite", "slab", "sync_wrapper 1.0.2", @@ -3473,15 +3471,15 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", "parking_lot", - "regex", + "regex-automata", "sharded-slab", "thread_local", "tracing", @@ -3562,9 +3560,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -3580,9 +3578,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -3630,30 +3628,31 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", "log", @@ -3665,9 +3664,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" dependencies = [ "cfg-if", "js-sys", @@ -3678,9 +3677,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3688,9 +3687,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", @@ -3701,18 +3700,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" dependencies = [ "js-sys", "wasm-bindgen", @@ -3752,24 +3751,24 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.57.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core", + "windows-future", + "windows-link", + "windows-numerics", ] [[package]] -name = "windows-core" -version = "0.57.0" +name = "windows-collections" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", + "windows-core", ] [[package]] @@ -3778,22 +3777,22 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement", + "windows-interface", "windows-link", - "windows-result 0.3.4", + "windows-result", "windows-strings", ] [[package]] -name = "windows-implement" -version = "0.57.0" +name = "windows-future" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "windows-core", + "windows-link", + "windows-threading", ] [[package]] @@ -3807,17 +3806,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "windows-interface" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "windows-interface" version = "0.59.1" @@ -3836,12 +3824,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "windows-result" -version = "0.1.2" +name = "windows-numerics" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-targets 0.52.6", + "windows-core", + "windows-link", ] [[package]] @@ -3946,6 +3935,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -4095,13 +4093,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.2", -] +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] name = "writeable" From a4d762d404068159621138d91922db3bf4e7f232 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 5 Sep 2025 15:39:47 -0400 Subject: [PATCH 04/16] messages for non-free builds --- make-mac.mk | 2 +- one.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/make-mac.mk b/make-mac.mk index 55b81c48d..e63fb7f88 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -200,7 +200,7 @@ mac-dist-pkg: FORCE official: FORCE cd ../DesktopUI ; make ZT_OFFICIAL_RELEASE=1 make clean - make ZT_OFFICIAL_RELEASE=1 -j 8 one + make ZT_OFFICIAL_RELEASE=1 -j 8 one ZT_NONFREE=1 make ZT_OFFICIAL_RELEASE=1 mac-dist-pkg _buildx: diff --git a/one.cpp b/one.cpp index a84e8d65d..0e2ac4cfa 100644 --- a/one.cpp +++ b/one.cpp @@ -103,7 +103,7 @@ static OneService* volatile zt1Service = (OneService*)0; #define COPYRIGHT_NOTICE "Copyright (c) ZeroTier, Inc." #ifdef ZT_NONFREE_CONTROLLER -#define LICENSE_GRANT "Licensed under a non-commercial source-available license (nonfree/LICENSE.md)." +#define LICENSE_GRANT ZT_EOL_S "Licensed under a Source-Available License for Non-Commercial" ZT_EOL_S "Use (nonfree/LICENSE.md). Use of this build for Commercial Use" ZT_EOL_S "requires a paid subscription plan or a commercial license" ZT_EOL_S "agreement with ZeroTier, Inc. Visit https://www.zerotier.com for" ZT_EOL_S "more information." #else #define LICENSE_GRANT "Licensed under Mozilla Public License v2.0 (LICENSE-MPL.txt)." #endif From 5db2abab73b64d2c276862d9b0c934bd079d799f Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 5 Sep 2025 17:49:10 -0400 Subject: [PATCH 05/16] Make nonfree the official build for Linux. --- make-linux.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make-linux.mk b/make-linux.mk index 97076745d..5ac8a7d95 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -453,7 +453,7 @@ distclean: clean realclean: distclean official: FORCE - make -j`nproc` ZT_OFFICIAL=1 all + make -j`nproc` ZT_OFFICIAL=1 ZT_NONFREE=1 all docker: FORCE docker build --no-cache -f ext/installfiles/linux/zerotier-containerized/Dockerfile -t zerotier-containerized . From fad7123417fa0888680c7e65bae5644d15da0c3a Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 8 Sep 2025 12:36:57 -0400 Subject: [PATCH 06/16] Enable controller on production Windows builds. --- windows/ZeroTierOne/ZeroTierOne.vcxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj index ef1f8c484..e072660f4 100644 --- a/windows/ZeroTierOne/ZeroTierOne.vcxproj +++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj @@ -546,7 +546,7 @@ true true $(SolutionDir)\..\ext;$(SolutionDir)\..\ext\prometheus-cpp-lite-1.0\core\include;$(SolutionDir)\..\ext\prometheus-cpp-lite-1.0\simpleapi\include;$(SolutionDir)\..\rustybits\target;$(SolutionDir)\..\ext\opentelemetry-cpp-api-only\include;%(AdditionalIncludeDirectories) - ZT_SSO_ENABLED=1;ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SALSA20_SSE;ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=1;%(PreprocessorDefinitions) + ZT_NONFREE_CONTROLLER=1;ZT_NONFREE=1;ZT_SSO_ENABLED=1;ZT_NONFREE=1;ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SALSA20_SSE;ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=1;%(PreprocessorDefinitions) MultiThreaded true AnySuitable @@ -582,7 +582,7 @@ true true $(SolutionDir)\..\ext;$(SolutionDir)\..\ext\prometheus-cpp-lite-1.0\core\include;$(SolutionDir)\..\ext\prometheus-cpp-lite-1.0\simpleapi\include;$(SolutionDir)\..\rustybits\target;$(SolutionDir)\..\ext\opentelemetry-cpp-api-only\include;%(AdditionalIncludeDirectories) - ZT_SSO_ENABLED=1;ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_SALSA20_SSE;ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=2;%(PreprocessorDefinitions) + ZT_NONFREE_CONTROLLER=1;ZT_NONFREE=1;ZT_SSO_ENABLED=1;ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_SALSA20_SSE;ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=2;%(PreprocessorDefinitions) MultiThreaded NotSet true @@ -620,7 +620,7 @@ true true $(SolutionDir)\..\ext;$(SolutionDir)\..\ext\prometheus-cpp-lite-1.0\core\include;$(SolutionDir)\..\ext\prometheus-cpp-lite-1.0\simpleapi\include;$(SolutionDir)\..\rustybits\target;$(SolutionDir)\..\ext\opentelemetry-cpp-api-only\include;%(AdditionalIncludeDirectories) - ZT_SSO_ENABLED=1;ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=2;%(PreprocessorDefinitions) + ZT_NONFREE_CONTROLLER=1;ZT_NONFREE=1;ZT_SSO_ENABLED=1;ZT_EXPORT;FD_SETSIZE=1024;STATICLIB;ZT_SOFTWARE_UPDATE_DEFAULT="apply";ZT_USE_MINIUPNPC;MINIUPNP_STATICLIB;WIN32;NOMINMAX;ZT_BUILD_PLATFORM=2;ZT_BUILD_ARCHITECTURE=2;%(PreprocessorDefinitions) MultiThreaded NotSet true From ffd34a3e46c2082b5b2935c52eb6b41b071d5af3 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 8 Sep 2025 13:05:25 -0400 Subject: [PATCH 07/16] Add merged PRs. --- RELEASE-NOTES.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index ecec6b984..5cecf3400 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -25,6 +25,35 @@ ZeroTier Release Notes * Compiler warnings removed through removing use of deprecated functions on some platforms. * Other minor bug fixes. + * Merged PRs: + * PR #2495: Hosted controller changes for cv1 os/arch reporting + * PR #2493: Add a warning about missing DNS functionality on Linux + * PR #2491: Fix: standardize bond link selection method JSON field naming + * PR #2489: Fix link select field in bond CLI + * PR #2487: Windows installer fixes + * PR #2486: Add 'apt update' to validation action + * PR #2482: Add OpenTelemetry support in Central Controllers + * PR #2481: Rust warning removal, clippy allows, update library versions + * PR #2477: Don't count bridges towards multicast limit. Send to all bridges + * PR #2475: clang-format + * PR #2474: Hello encryption + * PR #2452: CV2 db schema support + * PR #2451: Bump crossbeam-channel from 0.5.13 to 0.5.15 in /rustybits + * PR #2450: Bump tokio from 1.42.0 to 1.43.1 in /rustybits + * PR #2449: Bump openssl from 0.10.70 to 0.10.72 in /rustybits + * PR #2445: Allow setting local.conf content from Docker environment variable + * PR #2444: Temporal sdk fix + * PR #2443: Fix AuthInfo Provider not being set + * PR #2442: Bump ring from 0.17.8 to 0.17.13 in /rustybits + * PR #2441: Run CI on pull requests + * PR #2438: Add custom control plane for third-party device vendors + * PR #2432: Update upload-artifact action to use v4 + * PR #2430: Bump openssl from 0.10.68 to 0.10.70 in /rustybits + * PR #2427: Fix active backup link selection + * PR #2417: Update rust dependencies + * PR #2409: Bump rustls from 0.23.15 to 0.23.18 in /rustybits + * PR #2405: Build fix for OpenBSD - See ticket #2397 + ---- # 1.14 From 223fa90e6cc93efed4244d000e6fcc0743755f0b Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 8 Sep 2025 16:17:24 -0400 Subject: [PATCH 08/16] Advanced installer update. --- ext/installfiles/windows/ZeroTier One.aip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index 5eb6c639c..b787dac15 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -21,7 +21,7 @@ - + From 3e6a22c3d895cbdb29ebc128072be1d70e988ff1 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 11 Sep 2025 07:36:25 -0700 Subject: [PATCH 09/16] Fix JNI after `ZT_Node_New` function signature change --- java/jni/com_zerotierone_sdk_Node.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index ba1627856..3e5de2786 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -53,7 +53,8 @@ namespace { jobject eventListenerLocalIn, jobject frameListenerLocalIn, jobject configListenerLocalIn, - jobject pathCheckerLocalIn) + jobject pathCheckerLocalIn, + ZT_Node_Config *nc) : id(id) , jvm(jvm) , node() @@ -64,6 +65,7 @@ namespace { , frameListener() , configListener() , pathChecker() + , nodeConfig(nc) , inited() { JNIEnv *env; @@ -90,6 +92,9 @@ namespace { env->DeleteGlobalRef(frameListener); env->DeleteGlobalRef(configListener); env->DeleteGlobalRef(pathChecker); + + delete nodeConfig; + nodeConfig = NULL; } int64_t id; @@ -105,6 +110,7 @@ namespace { jobject frameListener; jobject configListener; jobject pathChecker; + ZT_Node_Config *nodeConfig; bool inited; @@ -865,6 +871,10 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init( callbacks.pathCheckFunction = &PathCheckFunction; callbacks.pathLookupFunction = &PathLookupFunction; + ZT_Node_Config *nodeConfig = new ZT_Node_Config(); + nodeConfig->enableEncryptedHello = 0; + nodeConfig->lowBandwidthMode = 0; + // // a bit of a confusing dance here where ref and node both know about each other // @@ -877,11 +887,13 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init( eventListener, frameListener, configListener, - pathChecker); + pathChecker, + nodeConfig); ZT_Node *node; ZT_ResultCode rc = ZT_Node_new( &node, + nodeConfig, ref, NULL, &callbacks, From b0ba0d7227b40fff58422244c9d63f2b9316b959 Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:16:33 -0700 Subject: [PATCH 10/16] Update README.md --- README.md | 193 ++++++++---------------------------------------------- 1 file changed, 27 insertions(+), 166 deletions(-) diff --git a/README.md b/README.md index e881ce810..c1dbb0a47 100644 --- a/README.md +++ b/README.md @@ -1,197 +1,58 @@ 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).* +# ZeroTier \- Global Area Networking 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." +Visit [ZeroTier’s site](https://www.zerotier.com/) or [ZeroTier's documentation](https://docs.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. -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. +## Project Layout -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. +* artwork/: icons, logos, etc. -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.). +* attic/: old stuff and experimental code that we want to keep around for reference. -### Getting Started +* controller/: the reference network controller implementation, which is built and included by default on desktop and server build targets. -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. +* debian/: files for building Debian packages on Linux. -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. +* doc/: manual pages and other documentation. -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. +* ext/: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files. -### Project Layout +* include/: include files for the ZeroTier core. -The base path contains the ZeroTier One service main entry point (`one.cpp`), self test code, makefiles, etc. +* java/: a JNI wrapper used with our Android mobile app. - - `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.) - - `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.) +* node/: the ZeroTier virtual Ethernet switch core. Note: do not use C++11 features in here, since we want this to build on old embedded platforms. -### Contributing +* osdep/: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. -Please do pull requests off of the `dev` branch. +* rule-compiler/: JavaScript rules language compiler for defining network-level rules. -Releases are done by merging `dev` into `main` and then tagging and doing builds. +* service/: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks. -### Build and Platform Notes +* windows/: Visual Studio solution files, Windows service code, and the Windows task bar app UI. -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/`. +* zeroidc/: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (Written in Rust) - - **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++ 8.x or CLANG/CLANG++ 5.x. - - 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. - - `binutils` is required. Type `pkg install binutils` to install. - - 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*. +## License -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. +ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](http://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. -### Running +A small amount of third-party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](http://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.). -Running *zerotier-one* with `-h` option will show help. +## Additional Resources -On Linux and BSD, if you built from source, you can start the service with: +* [User Documentation](https://docs.zerotier.com) - sudo ./zerotier-one -d +* [API Reference](http://service/README.md) -On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. +* [Network Controller](http://controller/README.md) -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:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. 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 be 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). - -### Prometheus Metrics - -Prometheus Metrics are available at the `/metrics` API endpoint. This endpoint is protected by an API key stored in `metricstoken.secret` to prevent unwanted information leakage. Information that could be gleaned from the metrics include joined networks and peers your instance is talking to. - -Access control is via the ZeroTier control interface itself and `metricstoken.secret`. This can be sent as a bearer auth token, via the `X-ZT1-Auth` HTTP header field, or appended to the URL as `?auth=`. You can see the current metrics via `cURL` with the following command: - - // Linux - curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics - - // macOS - curl -H "X-ZT1-Auth: $(sudo cat /Library/Application\ Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics - - // Windows PowerShell (Admin) - Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:\ProgramData\ZeroTier\One\metricstoken.secret)"; } -Uri http://localhost:9993/metrics - -To configure a scrape job in Prometheus on the machine ZeroTier is running on, add this to your Prometheus `scrape_config`: - - - job_name: zerotier-one - honor_labels: true - scrape_interval: 15s - metrics_path: /metrics - static_configs: - - targets: - - 127.0.0.1:9993 - labels: - group: zerotier-one - node_id: $YOUR_10_CHARACTER_NODE_ID - authorization: - credentials: $YOUR_METRICS_TOKEN_SECRET - -If neither of these methods are desirable, it is probably possible to distribute metrics via [Prometheus Proxy](https://github.com/pambrose/prometheus-proxy) or some other tool. Note: We have not tested this internally, but will probably work with the correct configuration. - -Metrics are also available on disk in ZeroTier's working directory: - - // Linux - /var/lib/zerotier-one/metrics.prom - - // macOS - /Library/Application\ Support/ZeroTier/One/metrics.prom - - //Windows - C:\ProgramData\ZeroTier\One\metrics.prom - -#### Available Metrics - -| Metric Name | Labels | Metric Type | Description | -| --- | --- | --- | --- | -| zt_packet | packet_type, direction | Counter | ZeroTier packet type counts | -| zt_packet_error | error_type, direction | Counter | ZeroTier packet errors| -| zt_data | protocol, direction | Counter | number of bytes ZeroTier has transmitted or received | -| zt_num_networks | | Gauge | number of networks this instance is joined to | -| zt_network_multicast_groups_subscribed | network_id | Gauge | number of multicast groups networks are subscribed to | -| zt_network_packets | network_id, direction | Counter | number of incoming/outgoing packets per network | -| zt_peer_latency | node_id | Histogram | peer latency (ms) | -| zt_peer_path_count | node_id, status | Gauge | number of paths to peer | -| zt_peer_packets | node_id, direction | Counter | number of packets to/from a peer | -| zt_peer_packet_errors | node_id | Counter | number of incoming packet errors from a peer | - -If there are other metrics you'd like to see tracked, ask us in an Issue or send us a Pull Request! - -### HTTP / App server - -There is a static http file server suitable for hosting Single Page Apps at http://localhost:9993/app/ - -Use `zerotier-cli info -j` to find your zerotier-one service's homeDir - -``` sh -cd $ZT_HOME -sudo mkdir -p app/app1 -sudo mkdir -p app/appB -echo 'appA

hello world A' | sudo tee app/appA/index.html -echo 'app2

hello world 2' | sudo tee app/app2/index.html -curl -sL http://localhost:9993/app/appA http://localhost:9993/app/app2 -``` - -Then visit [http://localhost:9993/app/app1/](http://localhost:9993/app/app1/) and [http://localhost:9993/app/appB/](http://localhost:9993/app/appB/) - -Requests to paths don't exist return the app root index.html, as is customary for SPAs. -If you want, you can write some javascript that talks to the service or controller [api](https://docs.zerotier.com/service/v1). +* [Commercial Support](https://www.zerotier.com/contact) \ No newline at end of file From be5baa76b905538158581ec639b1baa934b5d2b6 Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:14:06 -0700 Subject: [PATCH 11/16] Update README.md --- README.md | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index c1dbb0a47..e0d6f0dc7 100644 --- a/README.md +++ b/README.md @@ -11,35 +11,51 @@ All ZeroTier traffic is encrypted end-to-end using secret keys that only you con Visit [ZeroTier’s site](https://www.zerotier.com/) or [ZeroTier's documentation](https://docs.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. -## Project Layout +### Build and Platform Notes -* artwork/: icons, logos, etc. +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/`. -* attic/: old stuff and experimental code that we want to keep around for reference. + - **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++ 8.x or CLANG/CLANG++ 5.x. + - 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. + - `binutils` is required. Type `pkg install binutils` to install. + - 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*. -* controller/: the reference network controller implementation, which is built and included by default on desktop and server build targets. +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. -* debian/: files for building Debian packages on Linux. +### Running -* doc/: manual pages and other documentation. +Running *zerotier-one* with `-h` option will show help. -* ext/: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files. +On Linux and BSD, if you built from source, you can start the service with: -* include/: include files for the ZeroTier core. + sudo ./zerotier-one -d -* java/: a JNI wrapper used with our Android mobile app. +On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. -* node/: the ZeroTier virtual Ethernet switch core. Note: do not use C++11 features in here, since we want this to build on old embedded platforms. +A home folder for your system will automatically be created. -* osdep/: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. +The service is controlled via the JSON API, which by default is available at `127.0.0.1:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. 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. -* rule-compiler/: JavaScript rules language compiler for defining network-level rules. +Here's where home folders live (by default) on each OS: -* service/: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks. - -* 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. (Written in Rust) + * **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.) ## License From 5d18a575184d754d6630f75d8d4adda2c9e991fe Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Sep 2025 19:17:11 -0400 Subject: [PATCH 12/16] Include controller on debian. --- debian/changelog | 6 ++++++ debian/rules | 2 +- debian/rules.wheezy | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 01ef8cf65..84b78f697 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +zerotier-one (1.16.0-2) unstable; urgency=medium + + * Fix build settings to include controller. + + -- Adam Ierymenko Thu, 12 Sep 2025 01:00:00 -0700 + zerotier-one (1.16.0) unstable; urgency=medium * See RELEASE-NOTES.md for release notes. diff --git a/debian/rules b/debian/rules index 81fde680b..56382eab4 100644 --- a/debian/rules +++ b/debian/rules @@ -7,7 +7,7 @@ CXXFLAGS=-O3 -fstack-protector-strong dh $@ --with systemd override_dh_auto_build: - make + make ZT_OFFICIAL=1 ZT_NONFREE=1 all override_dh_systemd_start: dh_systemd_start --restart-after-upgrade diff --git a/debian/rules.wheezy b/debian/rules.wheezy index 55e2647a2..832ad9afe 100644 --- a/debian/rules.wheezy +++ b/debian/rules.wheezy @@ -7,5 +7,5 @@ CXXFLAGS=-O3 -fstack-protector dh $@ override_dh_auto_build: - make -j 2 + make -j 2 ZT_OFFICIAL=1 ZT_NONFREE=1 all From 692162861038ea24fac01f840c194e7956fb07c7 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Sep 2025 19:17:37 -0400 Subject: [PATCH 13/16] RPM too --- zerotier-one.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zerotier-one.spec b/zerotier-one.spec index 5d24c2366..2ef6c1dbe 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -107,7 +107,7 @@ rm -f %{name}-%{version} %build %if "%{?dist}" != ".el6" -make ZT_USE_MINIUPNPC=1 %{?_smp_mflags} one +make ZT_USE_MINIUPNPC=1 %{?_smp_mflags} ZT_OFFICIAL=1 ZT_NONFREE=1 one %endif %pre From a28a6d1bf5c817001da0c4fe3775fa47e77545b9 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Sat, 13 Sep 2025 11:07:36 -0400 Subject: [PATCH 14/16] Build fix. --- make-linux.mk | 8 ++++---- zerotier-one.spec | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/make-linux.mk b/make-linux.mk index 5ac8a7d95..77d3e0b1a 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -341,10 +341,10 @@ ifeq ($(ZT_STATIC),1) endif # For building an official semi-static binary on CentOS 7 -ifeq ($(ZT_OFFICIAL),1) - CORE_OBJS+=ext/misc/linux-old-glibc-compat.o - override LDFLAGS+=-Wl,--wrap=memcpy -static-libstdc++ -endif +#ifeq ($(ZT_OFFICIAL),1) +# CORE_OBJS+=ext/misc/linux-old-glibc-compat.o +# override LDFLAGS+=-Wl,--wrap=memcpy -static-libstdc++ +#endif ifeq ($(ZT_CONTROLLER),1) override CXXFLAGS+=-Wall -Wno-deprecated -std=c++17 -pthread $(INCLUDES) -DNDEBUG $(DEFS) diff --git a/zerotier-one.spec b/zerotier-one.spec index 2ef6c1dbe..ffb010c24 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -102,7 +102,7 @@ ln -s %{getenv:PWD} %{name}-%{version} mkdir -p SOURCES tar --exclude=%{name}-%{version}/.git --exclude=%{name}-%{version}/%{name}-%{version} -czf SOURCES/%{name}-%{version}.tar.gz %{name}-%{version}/* rm -f %{name}-%{version} -# cp -a %{getenv:PWD}/* . +cp -a %{getenv:PWD}/* . %endif %build From 4f2717c244840ff18b7d2899ff85136d0c8c7ccb Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Thu, 18 Sep 2025 14:29:09 -0700 Subject: [PATCH 15/16] added build.md Drastically shortened main readme and linked out to build notes instead. Clarified licensing info to just match license.txt. --- README.md | 76 ++++++++++++----------------------------------- build.md | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 57 deletions(-) create mode 100644 build.md diff --git a/README.md b/README.md index e0d6f0dc7..fcd3f2c51 100644 --- a/README.md +++ b/README.md @@ -3,72 +3,34 @@ ZeroTier - Global Area Networking # ZeroTier \- Global Area Networking +## Quick Links + +* [ZeroTier Documentation](https://docs.zerotier.com) - **Start here for downloads, installation, and usage** +* [Corporate Site](https://www.zerotier.com/) +* [Downloads](https://www.zerotier.com/download/) +* [Architecture Overview](architecture.md) +* [Build and Project Information](build.md) +* [Service API Reference](service/README.md) +* [Network Controller](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. 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. -Visit [ZeroTier’s site](https://www.zerotier.com/) or [ZeroTier's documentation](https://docs.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. +Apps for Android and iOS are available for free in the Google Play and Apple app stores. -### 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++ 8.x or CLANG/CLANG++ 5.x. - - 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. - - `binutils` is required. Type `pkg install binutils` to install. - - 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:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. 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.) +For repository layout, build instructions, platform requirements, and information about running ZeroTier, see [build.md](build.md). ## License -ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](http://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. +See [LICENSE-MPL.txt](LICENSE-MPL.txt) for all code in node/, osdep/. service/, and everywhere else except ext/ and nonfree/. -A small amount of third-party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](http://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 [nonfree/LICENSE.md](nonfree/LICENSE.md) for all non-free ("source available") portions of this repository. -## Additional Resources - -* [User Documentation](https://docs.zerotier.com) - -* [API Reference](http://service/README.md) - -* [Network Controller](http://controller/README.md) - -* [Commercial Support](https://www.zerotier.com/contact) \ No newline at end of file +Code in ext/ is external code included for build convenience or backward compatibility and retains its original license. diff --git a/build.md b/build.md new file mode 100644 index 000000000..84710fe44 --- /dev/null +++ b/build.md @@ -0,0 +1,88 @@ +# ZeroTier Build and Project Information + +## Build and Platform Notes + +### Basic Build Instructions + +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/`. + +### Platform Requirements + +#### 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++ 8.x or CLANG/CLANG++ 5.x. +- 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. +- `binutils` is required. Type `pkg install binutils` to install. +- 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*. + +### Testing + +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 ZeroTier + +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:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. 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. + +## Directory Structure + +### Home Folder Locations + +ZeroTier stores its configuration and state files in platform-specific locations: + +* **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.) + +### Project Structure + +The repository is organized as follows: + +- **node/** - Core ZeroTier networking code +- **osdep/** - Operating system dependent code +- **service/** - Service implementation and API +- **controller/** - Network controller implementation +- **ext/** - External code included for build convenience (retains original licenses) +- **nonfree/** - Source available (non-free) portions +- **windows/** - Windows-specific Visual Studio solution files + +### Build System + +The project supports various build targets and platforms: +- Standard build: `make` +- Self-test build: `make selftest` +- Platform-specific requirements: + - FreeBSD/OpenBSD: Use `gmake` (GNU make) + - Windows: Visual Studio solution in `windows/` + +### License Structure + +- **node/**, **osdep/**, **service/**: Licensed under MPL-2.0 (see LICENSE-MPL.txt) +- **nonfree/**: Non-free "source available" code (see nonfree/LICENSE.md) +- **ext/**: External code with original licenses retained \ No newline at end of file From f2d4a882d978dedc47f5b23f0608e810e3f103ae Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Tue, 23 Sep 2025 10:20:49 -0700 Subject: [PATCH 16/16] removed duplicate title, added build link, fixed controller link --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fcd3f2c51..ec119e8d7 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,13 @@ -ZeroTier - Global Area Networking -====== - -# ZeroTier \- Global Area Networking +# ZeroTier - Global Area Networking ## 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/) -* [Architecture Overview](architecture.md) -* [Build and Project Information](build.md) * [Service API Reference](service/README.md) -* [Network Controller](controller/README.md) +* [Network Controller](nonfree/controller/README.md) * [Commercial Support](https://www.zerotier.com/contact) * [License Information](#license)