ZeroTierOne/node
Adam Ierymenko 1c5897895b
1.10.4 merge into main (#1893)
* add note about forceTcpRelay

* Create a sample systemd unit for tcp proxy

* set gitattributes for rust & cargo so hashes dont conflict on Windows

* Revert "set gitattributes for rust & cargo so hashes dont conflict on Windows"

This reverts commit 032dc5c108.

* Turn off autocrlf for rust source

Doesn't appear to play nice well when it comes to git and vendored cargo package hashes

* Fix #1883 (#1886)

Still unknown as to why, but the call to `nc->GetProperties()` can fail
when setting a friendly name on the Windows virtual ethernet adapter.
Ensure that `ncp` is not null before continuing and accessing the device
GUID.

* Don't vendor packages for zeroidc (#1885)

* Added docker environment way to join networks (#1871)

* add StringUtils

* fix headers
use recommended headers and remove unused headers

* move extern "C"
only JNI functions need to be exported

* cleanup

* fix ANDROID-50: RESULT_ERROR_BAD_PARAMETER typo

* fix typo in log message

* fix typos in JNI method signatures

* fix typo

* fix ANDROID-51: fieldName is uninitialized

* fix ANDROID-35: memory leak

* fix missing DeleteLocalRef in loops

* update to use unique error codes

* add GETENV macro

* add LOG_TAG defines

* ANDROID-48: add ZT_jnicache.cpp

* ANDROID-48: use ZT_jnicache.cpp and remove ZT_jnilookup.cpp and ZT_jniarray.cpp

* add Event.fromInt

* add PeerRole.fromInt

* add ResultCode.fromInt

* fix ANDROID-36: issues with ResultCode

* add VirtualNetworkConfigOperation.fromInt

* fix ANDROID-40: VirtualNetworkConfigOperation out-of-sync with ZT_VirtualNetworkConfigOperation enum

* add VirtualNetworkStatus.fromInt

* fix ANDROID-37: VirtualNetworkStatus out-of-sync with ZT_VirtualNetworkStatus enum

* add VirtualNetworkType.fromInt

* make NodeStatus a plain data class

* fix ANDROID-52: synchronization bug with nodeMap

* Node init work: separate Node construction and init

* add Node.toString

* make PeerPhysicalPath a plain data class

* remove unused PeerPhysicalPath.fixed

* add array functions

* make Peer a plain data class

* make Version a plain data class

* fix ANDROID-42: copy/paste error

* fix ANDROID-49: VirtualNetworkConfig.equals is wrong

* reimplement VirtualNetworkConfig.equals

* reimplement VirtualNetworkConfig.compareTo

* add VirtualNetworkConfig.hashCode

* make VirtualNetworkConfig a plain data class

* remove unused VirtualNetworkConfig.enabled

* reimplement VirtualNetworkDNS.equals

* add VirtualNetworkDNS.hashCode

* make VirtualNetworkDNS a plain data class

* reimplement VirtualNetworkRoute.equals

* reimplement VirtualNetworkRoute.compareTo

* reimplement VirtualNetworkRoute.toString

* add VirtualNetworkRoute.hashCode

* make VirtualNetworkRoute a plain data class

* add isSocketAddressEmpty

* add addressPort

* add fromSocketAddressObject

* invert logic in a couple of places and return early

* newInetAddress and newInetSocketAddress work
allow newInetSocketAddress to return NULL if given empty address

* fix ANDROID-38: stack corruption in onSendPacketRequested

* use GETENV macro

* JniRef work
JniRef does not use callbacks struct, so remove
fix NewGlobalRef / DeleteGlobalRef mismatch

* use PRId64 macros

* switch statement work

* comments and logging

* Modifier 'public' is redundant for interface members

* NodeException can be made a checked Exception

* 'NodeException' does not define a 'serialVersionUID' field

* 'finalize()' should not be overridden
this is fine to do because ZeroTierOneService calls close() when it is done

* error handling, error reporting, asserts, logging

* simplify loadLibrary

* rename Node.networks -> Node.networkConfigs

* Windows file permissions fix (#1887)

* Allow macOS interfaces to use multiple IP addresses (#1879)

Co-authored-by: Sean OMeara <someara@users.noreply.github.com>
Co-authored-by: Grant Limberg <glimberg@users.noreply.github.com>

* Fix condition where full HELLOs might not be sent when necessary (#1877)

Co-authored-by: Grant Limberg <glimberg@users.noreply.github.com>

* 1.10.4 version bumps

* Add security policy to repo (#1889)

* [+] add e2k64 arch (#1890)

* temp fix for ANDROID-56: crash inside newNetworkConfig from too many args

* 1.10.4 release notes

---------

Co-authored-by: travis laduke <travisladuke@gmail.com>
Co-authored-by: Grant Limberg <grant.limberg@zerotier.com>
Co-authored-by: Grant Limberg <glimberg@users.noreply.github.com>
Co-authored-by: Leonardo Amaral <leleobhz@users.noreply.github.com>
Co-authored-by: Brenton Bostick <bostick@gmail.com>
Co-authored-by: Sean OMeara <someara@users.noreply.github.com>
Co-authored-by: Joseph Henry <joseph-henry@users.noreply.github.com>
Co-authored-by: Roman Peshkichev <roman.peshkichev@gmail.com>
2023-03-07 16:50:34 -05:00
..
Address.hpp BSL date bump 2020-08-20 12:51:39 -07:00
AES_aesni.cpp Windows build fixes, version bump in AIP. 2020-11-06 11:18:41 -08:00
AES_armcrypto.cpp Fixing regression in AES for ARM targets 2020-11-27 08:22:55 +00:00
AES.cpp Likely fix for some alignment issues on ARM. 2020-11-25 14:28:41 -05:00
AES.hpp Check for ARM Cryptography Extension support 2023-01-20 09:29:09 +01:00
AtomicCounter.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Bond.cpp User-configurable physical MTU for individual links 2023-01-12 07:12:19 +01:00
Bond.hpp User-configurable physical MTU for individual links 2023-01-12 07:12:19 +01:00
Buffer.hpp BSL date bump 2020-08-20 12:51:39 -07:00
C25519.cpp AES integrated on send side. 2020-08-21 14:23:31 -07:00
C25519.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Capability.cpp BSL date bump 2020-08-20 12:51:39 -07:00
Capability.hpp BSL date bump 2020-08-20 12:51:39 -07:00
CertificateOfMembership.cpp Revert "Use a faster method of fingerprinting identities." 2021-09-20 22:05:39 -04:00
CertificateOfMembership.hpp Remove ancient controller support. 2021-09-20 18:38:29 -04:00
CertificateOfOwnership.cpp BSL date bump 2020-08-20 12:51:39 -07:00
CertificateOfOwnership.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Constants.hpp Check for ARM Cryptography Extension support 2023-01-20 09:29:09 +01:00
Credential.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Dictionary.hpp BSL date bump 2020-08-20 12:51:39 -07:00
DNS.hpp fix typos in comments and strings 2022-11-28 09:23:45 -05:00
Hashtable.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Identity.cpp AES integrated on send side. 2020-08-21 14:23:31 -07:00
Identity.hpp Revert "Use a faster method of fingerprinting identities." 2021-09-20 22:05:39 -04:00
IncomingPacket.cpp Client & Central Controller updates to support additonal OIDC features (#1848) 2023-01-19 15:39:15 -08:00
IncomingPacket.hpp Fix for ab-mode link failure, QoS metrics (WIP) 2022-06-08 10:01:54 -07:00
InetAddress.cpp missing break in InetAddress::ipScope() 2020-11-23 14:54:13 -08:00
InetAddress.hpp Fix for ZTO-33 (Jira), only assign routes if there is a viable source IP. 2020-11-06 11:01:45 -05:00
MAC.hpp fix typos (#1843) 2023-01-11 19:42:30 +01:00
Membership.cpp Fix a possible excessive memory use issue in controller and clean up a bunch of COM handling and other code in the normal node. 2022-04-19 19:59:54 -04:00
Membership.hpp Several more SSO/OIDC related fixes, and bump version to 1.8.9. 2022-04-19 21:29:11 -04:00
Multicaster.cpp Add low-bandwidth mode 2022-12-05 13:21:05 -08:00
Multicaster.hpp Fix some timestamp signedness mismatches. 2020-11-11 11:46:09 -05:00
MulticastGroup.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Mutex.hpp Use lowercase when including Windows headers 2021-12-29 16:29:08 -05:00
Network.cpp Client & Central Controller updates to support additonal OIDC features (#1848) 2023-01-19 15:39:15 -08:00
Network.hpp Client & Central Controller updates to support additonal OIDC features (#1848) 2023-01-19 15:39:15 -08:00
NetworkConfig.cpp Client & Central Controller updates to support additonal OIDC features (#1848) 2023-01-19 15:39:15 -08:00
NetworkConfig.hpp Client & Central Controller updates to support additonal OIDC features (#1848) 2023-01-19 15:39:15 -08:00
NetworkController.hpp Basic plumbing for authentication requirement and piping through of URL information. 2021-05-24 22:58:17 -04:00
Node.cpp Add missing default initialization of _lowBandwidthMode 2022-12-22 10:08:02 -08:00
Node.hpp Add low-bandwidth mode 2022-12-05 13:21:05 -08:00
OutboundMulticast.cpp BSL date bump 2020-08-20 12:51:39 -07:00
OutboundMulticast.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Packet.cpp Fix Possible misuse of comma operator here (#1851) 2023-01-17 12:38:10 -05:00
Packet.hpp Prevent re-armoring of packets when in multipath broadcast mode 2022-09-07 15:03:02 -07:00
Path.cpp BSL date bump 2020-08-20 12:51:39 -07:00
Path.hpp User-configurable physical MTU for individual links 2023-01-12 07:12:19 +01:00
Peer.cpp 1.10.4 merge into main (#1893) 2023-03-07 16:50:34 -05:00
Peer.hpp Add low-bandwidth mode 2022-12-05 13:21:05 -08:00
Poly1305.cpp RingBuffer<> is now templated with size, buffer is now static. 2019-03-22 14:39:52 -07:00
Poly1305.hpp BSL date bump 2020-08-20 12:51:39 -07:00
README.md Actual documentation. 2017-02-03 19:47:00 -08:00
Revocation.cpp BSL date bump 2020-08-20 12:51:39 -07:00
Revocation.hpp Push credentials always if updated (client-side) and some controller-side cleanup that should be logically irrelevant but will prevent unnecessary DB lookups. 2022-04-19 12:41:38 -04:00
RingBuffer.hpp BSL date bump 2020-08-20 12:51:39 -07:00
RuntimeEnvironment.hpp Consolidation of multipath logic. Better system separation 2021-09-01 21:37:49 -07:00
Salsa20.cpp Spellcheck sweep across codebase 2018-06-07 17:25:27 -07:00
Salsa20.hpp ALMOST compiles for ARM64 Windows, only remaining barrier is ring in zeroidc. 2022-04-27 12:19:42 -04:00
SelfAwareness.cpp Proactively seek, enumerate, and distribute external surface addresses 2022-02-17 15:39:17 -08:00
SelfAwareness.hpp Proactively seek, enumerate, and distribute external surface addresses 2022-02-17 15:39:17 -08:00
SHA512.cpp Add missing <algorithm> include (#1709) 2022-08-29 10:39:04 -07:00
SHA512.hpp AES integrated on send side. 2020-08-21 14:23:31 -07:00
SharedPtr.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Switch.cpp User-configurable physical MTU for individual links 2023-01-12 07:12:19 +01:00
Switch.hpp User-configurable physical MTU for individual links 2023-01-12 07:12:19 +01:00
Tag.cpp BSL date bump 2020-08-20 12:51:39 -07:00
Tag.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Topology.cpp Rev roots. 2022-02-15 09:13:58 -05:00
Topology.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Trace.cpp Fix erroneous cast of verb to double that causes invalid tracing output 2021-05-04 08:59:52 -07:00
Trace.hpp BSL date bump 2020-08-20 12:51:39 -07:00
Utils.cpp yes 2021-04-13 16:12:11 +00:00
Utils.hpp Fix for ZTO-33 (Jira), only assign routes if there is a viable source IP. 2020-11-06 11:01:45 -05:00
World.hpp BSL date bump 2020-08-20 12:51:39 -07:00

ZeroTier Network Hypervisor Core

This directory contains the real ZeroTier: a completely OS-independent global virtual Ethernet switch engine. This is where the magic happens.

Give it wire packets and it gives you Ethernet packets, and vice versa. The core contains absolutely no actual I/O, port configuration, or other OS-specific code (except Utils::getSecureRandom()). It provides a simple C API via /include/ZeroTierOne.h. It's designed to be small and maximally portable for future use on small embedded and special purpose systems.

Code in here follows these guidelines:

  • Keep it minimal, especially in terms of code footprint and memory use.
  • There should be no OS-dependent code here unless absolutely necessary (e.g. getSecureRandom).
  • If it's not part of the core virtual Ethernet switch it does not belong here.
  • No C++11 or C++14 since older and embedded compilers don't support it yet and this should be maximally portable.
  • Minimize the use of complex C++ features since at some point we might end up "minus-minus'ing" this code if doing so proves necessary to port to tiny embedded systems.