From 697011df7b795a54f5af62e7ccecc9948aa43adc Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 11 Jul 2025 10:48:12 -0400 Subject: [PATCH] Cleanup, define specialist for network specific relays, remove some dead code. --- node/Multicaster.cpp | 10 ----- node/NetworkConfig.cpp | 50 +++++++++++++++++++++++++ node/NetworkConfig.hpp | 84 ++++++------------------------------------ 3 files changed, 61 insertions(+), 83 deletions(-) diff --git a/node/Multicaster.cpp b/node/Multicaster.cpp index 0d5fd7ce4..29cac68a8 100644 --- a/node/Multicaster.cpp +++ b/node/Multicaster.cpp @@ -300,16 +300,6 @@ void Multicaster::send(void* tPtr, int64_t now, const SharedPtr& networ } } - std::vector
anchors(network->config().anchors()); - for (std::vector
::const_iterator a(anchors.begin()); a != anchors.end(); ++a) { - if (*a != RR->identity.address()) { - explicitGatherPeers[numExplicitGatherPeers++] = *a; - if (numExplicitGatherPeers == 16) { - break; - } - } - } - for (unsigned int k = 0; k < numExplicitGatherPeers; ++k) { const CertificateOfMembership* com = (network) ? ((network->config().com) ? &(network->config().com) : (const CertificateOfMembership*)0) : (const CertificateOfMembership*)0; Packet outp(explicitGatherPeers[k], RR->identity.address(), Packet::VERB_MULTICAST_GATHER); diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index a51fe1b29..255ec9602 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -13,11 +13,61 @@ #include "NetworkConfig.hpp" +#include "DNS.hpp" + #include #include namespace ZeroTier { +NetworkConfig::NetworkConfig() + : networkId(0) + , timestamp(0) + , credentialTimeMaxDelta(0) + , revision(0) + , issuedTo() + , remoteTraceTarget() + , flags(0) + , remoteTraceLevel(Trace::LEVEL_NORMAL) + , mtu(0) + , multicastLimit(0) + , specialistCount(0) + , routeCount(0) + , staticIpCount(0) + , ruleCount(0) + , capabilityCount(0) + , tagCount(0) + , certificateOfOwnershipCount(0) + , capabilities() + , tags() + , certificatesOfOwnership() + , type(ZT_NETWORK_TYPE_PRIVATE) + , dnsCount(0) + , ssoEnabled(false) + , authenticationURL() + , authenticationExpiryTime(0) + , issuerURL() + , centralAuthURL() + , ssoNonce() + , ssoState() + , ssoClientID() +{ + name[0] = 0; + memset(specialists, 0, sizeof(uint64_t) * ZT_MAX_NETWORK_SPECIALISTS); + memset(routes, 0, sizeof(ZT_VirtualNetworkRoute) * ZT_MAX_NETWORK_ROUTES); + memset(staticIps, 0, sizeof(InetAddress) * ZT_MAX_ZT_ASSIGNED_ADDRESSES); + memset(rules, 0, sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES); + memset(&dns, 0, sizeof(ZT_VirtualNetworkDNS)); + memset(authenticationURL, 0, sizeof(authenticationURL)); + memset(issuerURL, 0, sizeof(issuerURL)); + memset(centralAuthURL, 0, sizeof(centralAuthURL)); + memset(ssoNonce, 0, sizeof(ssoNonce)); + memset(ssoState, 0, sizeof(ssoState)); + memset(ssoClientID, 0, sizeof(ssoClientID)); + strncpy(ssoProvider, "default", sizeof(ssoProvider)); + ssoProvider[sizeof(ssoProvider) - 1] = 0; +} + bool NetworkConfig::toDictionary(Dictionary& d, bool includeLegacy) const { Buffer* tmp = new Buffer(); diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index 30598cf2f..86bc3ffa9 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -16,23 +16,15 @@ #include "../include/ZeroTierOne.h" #include "Address.hpp" -#include "Buffer.hpp" #include "Capability.hpp" #include "CertificateOfMembership.hpp" #include "CertificateOfOwnership.hpp" -#include "Constants.hpp" -#include "DNS.hpp" #include "Dictionary.hpp" #include "Hashtable.hpp" -#include "Identity.hpp" #include "InetAddress.hpp" -#include "MulticastGroup.hpp" #include "Tag.hpp" #include "Trace.hpp" -#include "Utils.hpp" -#include -#include #include #include #include @@ -78,16 +70,18 @@ */ #define ZT_NETWORKCONFIG_SPECIALIST_TYPE_ACTIVE_BRIDGE 0x0000020000000000ULL -/** - * Anchors are stable devices on this network that can act like roots when none are up - */ -#define ZT_NETWORKCONFIG_SPECIALIST_TYPE_ANCHOR 0x0000040000000000ULL - /** * Designated multicast replicators replicate multicast in place of sender-side replication + * + * This is currently not really used. */ #define ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR 0x0000080000000000ULL +/** + * Designated per-network relays + */ +#define ZT_NETWORKCONFIG_SPECIALIST_TYPE_NETWORK_RELAY 0x0000100000000000ULL + namespace ZeroTier { // Dictionary capacity needed for max size network config @@ -250,52 +244,7 @@ namespace ZeroTier { */ class NetworkConfig { public: - NetworkConfig() - : networkId(0) - , timestamp(0) - , credentialTimeMaxDelta(0) - , revision(0) - , issuedTo() - , remoteTraceTarget() - , flags(0) - , remoteTraceLevel(Trace::LEVEL_NORMAL) - , mtu(0) - , multicastLimit(0) - , specialistCount(0) - , routeCount(0) - , staticIpCount(0) - , ruleCount(0) - , capabilityCount(0) - , tagCount(0) - , certificateOfOwnershipCount(0) - , capabilities() - , tags() - , certificatesOfOwnership() - , type(ZT_NETWORK_TYPE_PRIVATE) - , dnsCount(0) - , ssoEnabled(false) - , authenticationURL() - , authenticationExpiryTime(0) - , issuerURL() - , centralAuthURL() - , ssoNonce() - , ssoState() - , ssoClientID() - { - name[0] = 0; - memset(specialists, 0, sizeof(uint64_t) * ZT_MAX_NETWORK_SPECIALISTS); - memset(routes, 0, sizeof(ZT_VirtualNetworkRoute) * ZT_MAX_NETWORK_ROUTES); - memset(staticIps, 0, sizeof(InetAddress) * ZT_MAX_ZT_ASSIGNED_ADDRESSES); - memset(rules, 0, sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES); - memset(&dns, 0, sizeof(ZT_VirtualNetworkDNS)); - memset(authenticationURL, 0, sizeof(authenticationURL)); - memset(issuerURL, 0, sizeof(issuerURL)); - memset(centralAuthURL, 0, sizeof(centralAuthURL)); - memset(ssoNonce, 0, sizeof(ssoNonce)); - memset(ssoState, 0, sizeof(ssoState)); - memset(ssoClientID, 0, sizeof(ssoClientID)); - strncpy(ssoProvider, "default", sizeof(ssoProvider)); - } + NetworkConfig(); /** * Write this network config to a dictionary for transport @@ -397,17 +346,6 @@ class NetworkConfig { return false; } - inline std::vector
anchors() const - { - std::vector
r; - for (unsigned int i = 0; i < specialistCount; ++i) { - if ((specialists[i] & ZT_NETWORKCONFIG_SPECIALIST_TYPE_ANCHOR) != 0) { - r.push_back(Address(specialists[i])); - } - } - return r; - } - inline std::vector
multicastReplicators() const { std::vector
r; @@ -444,7 +382,7 @@ class NetworkConfig { { std::vector
r; for (unsigned int i = 0; i < specialistCount; ++i) { - if ((specialists[i] & (ZT_NETWORKCONFIG_SPECIALIST_TYPE_ANCHOR | ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR)) != 0) { + if ((specialists[i] & (ZT_NETWORKCONFIG_SPECIALIST_TYPE_NETWORK_RELAY | ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR)) != 0) { r.push_back(Address(specialists[i])); } } @@ -455,7 +393,7 @@ class NetworkConfig { { unsigned int c = 0; for (unsigned int i = 0; i < specialistCount; ++i) { - if ((specialists[i] & (ZT_NETWORKCONFIG_SPECIALIST_TYPE_ANCHOR | ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR)) != 0) { + if ((specialists[i] & (ZT_NETWORKCONFIG_SPECIALIST_TYPE_NETWORK_RELAY | ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR)) != 0) { ac[c++] = specialists[i]; } } @@ -465,7 +403,7 @@ class NetworkConfig { inline void alwaysContactAddresses(Hashtable >& a) const { for (unsigned int i = 0; i < specialistCount; ++i) { - if ((specialists[i] & (ZT_NETWORKCONFIG_SPECIALIST_TYPE_ANCHOR | ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR)) != 0) { + if ((specialists[i] & (ZT_NETWORKCONFIG_SPECIALIST_TYPE_NETWORK_RELAY | ZT_NETWORKCONFIG_SPECIALIST_TYPE_MULTICAST_REPLICATOR)) != 0) { a[Address(specialists[i])]; } }