From b984eb280805aa860465bfd36b4a758a63afb745 Mon Sep 17 00:00:00 2001 From: Kamil Cholewinski Date: Thu, 6 May 2021 13:04:58 +0200 Subject: [PATCH 001/144] Use clang on OpenBSD --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 144225fc4..39dabafdd 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ ifeq ($(OSTYPE),FreeBSD) include make-bsd.mk endif ifeq ($(OSTYPE),OpenBSD) - CC=egcc - CXX=eg++ + CC=clang + CXX=clang++ ZT_BUILD_PLATFORM=9 include make-bsd.mk endif From 6faca86bb424d0b9643b6efa50571f73310d8276 Mon Sep 17 00:00:00 2001 From: joseph-henry Date: Thu, 27 May 2021 19:48:01 -0700 Subject: [PATCH 002/144] Update bugs-and-issues.md Add troubleshooting tip --- .github/ISSUE_TEMPLATE/bugs-and-issues.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bugs-and-issues.md b/.github/ISSUE_TEMPLATE/bugs-and-issues.md index 629c0cae5..ff6f95fd9 100644 --- a/.github/ISSUE_TEMPLATE/bugs-and-issues.md +++ b/.github/ISSUE_TEMPLATE/bugs-and-issues.md @@ -46,3 +46,4 @@ _Using these will ensure you get quicker support, and make this space available - Router Config: are you permitting port 9993, uPnP, and NAT-PMP? - Firewall Config: are you permitting port 9993 on your OS; setting it to "Private" on Windows? - Are you using this at home, in an office, college, etc? +- Have you tried screaming into your router? From 740c77a4886232e02e1d0623c61ca3bef87d92a1 Mon Sep 17 00:00:00 2001 From: Travis LaDuke Date: Fri, 16 Jul 2021 14:20:30 -0700 Subject: [PATCH 003/144] Add more help for local.conf --- service/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/service/README.md b/service/README.md index 762bd3683..94e920a58 100644 --- a/service/README.md +++ b/service/README.md @@ -5,7 +5,11 @@ This is the actual implementation of ZeroTier One, a service providing connectiv ### Local Configuration File -A file called `local.conf` in the ZeroTier home folder contains configuration options that apply to the local node. (It does not exist unless you create it). It can be used to set up trusted paths, blacklist physical paths, set up physical path hints for certain nodes, and define trusted upstream devices (federated roots). In a large deployment it can be deployed using a tool like Puppet, Chef, SaltStack, etc. to set a uniform configuration across systems. It's a JSON format file that can also be edited and rewritten by ZeroTier One itself, so ensure that proper JSON formatting is used. +A file called `local.conf` in the ZeroTier [home](https://github.com/zerotier/ZeroTierOne/blob/6faca86bb424d0b9643b6efa50571f73310d8276/README.md) folder contains configuration options that apply to the local node. (It does not exist unless you create it). It can be used to set up trusted paths, blacklist physical paths, set up physical path hints for certain nodes, and define trusted upstream devices (federated roots). In a large deployment it can be deployed using a tool like Puppet, Chef, SaltStack, etc. to set a uniform configuration across systems. + +It's a JSON format file that can also be edited and rewritten by ZeroTier One itself, so ensure that proper JSON formatting is used. To validate your config, paste it into a website like [jsonlint.com](https://jsonlint.com), or use a tool like `jq`. + +Check the output of `zerotier-cli info -j` to see if your configuration is being loaded. Settings available in `local.conf` (this is not valid JSON, and JSON does not allow comments): From e5007f12901459dc8442b364a3a7ff03da7b5ee3 Mon Sep 17 00:00:00 2001 From: Travis LaDuke Date: Fri, 16 Jul 2021 14:20:43 -0700 Subject: [PATCH 004/144] Delete outdated --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 406ae3193..401335d11 100644 --- a/README.md +++ b/README.md @@ -81,12 +81,6 @@ Here's where home folders live (by default) on each OS: * **Mac**: `/Library/Application Support/ZeroTier/One` * **Windows**: `\ProgramData\ZeroTier\One` (That's for Windows 7. The base 'shared app data' folder might be different on different Windows versions.) -Running ZeroTier One on a Mac is the same, but OSX requires a kernel extension. We ship a signed binary build of the ZeroTier tap device driver, which can be installed on Mac with: - - sudo make install-mac-tap - -This will create the home folder for Mac, place *tap.kext* there, and set its modes correctly to enable ZeroTier One to manage it with *kextload* and *kextunload*. - ### Basic Troubleshooting For most users, it just works. From 8913f13b36753a4fbbf455225cf3e7a61f6027dc Mon Sep 17 00:00:00 2001 From: Travis LaDuke Date: Fri, 16 Jul 2021 14:46:53 -0700 Subject: [PATCH 005/144] Add website links to top of readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 401335d11..5f2cba89f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ 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 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. From 46387e2f2b2df539f2ba94ae540d0d19a202478e Mon Sep 17 00:00:00 2001 From: Travis LaDuke Date: Fri, 16 Jul 2021 15:16:29 -0700 Subject: [PATCH 006/144] Minor Readme updates People with support issues still commonly say "9993 is open. why doesn't work?" Trying to improve this across all of our docs. --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5f2cba89f..a53dca476 100644 --- a/README.md +++ b/README.md @@ -67,10 +67,12 @@ Typing `make selftest` will build a *zerotier-selftest* binary which unit tests Running *zerotier-one* with `-h` option will show help. -On Linux and BSD you can start the service with: +On Linux and BSD, if you built from source, you can start the service with: sudo ./zerotier-one -d +On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. + A home folder for your system will automatically be created. The service is controlled via the JSON API, which by default is available at 127.0.0.1 port 9993. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. @@ -86,11 +88,11 @@ Here's where home folders live (by default) on each OS: For most users, it just works. -If you are running a local system firewall, we recommend adding a rule permitting UDP port 9993 inbound and outbound. 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. +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. -The Mac firewall can be found under "Security" in System Preferences. Linux has a variety of firewall configuration systems and tools. If you're using Ubuntu's *ufw*, you can do this: +See the [documentation site](https://docs.zerotier.com/zerotier/troubleshooting) for more information. - sudo ufw allow 9993/udp +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. From 48ce7632fa39faedd7ac46c267e0d333ab5f7ffd Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 21 Sep 2021 11:20:15 -0400 Subject: [PATCH 007/144] Backport guts of 1.8 to 1.6 tree so we can point release without waiting for UI quirks to be fixed. --- controller/ConnectionPool.hpp | 161 ++ controller/DB.cpp | 18 +- controller/DB.hpp | 12 +- controller/DBMirrorSet.cpp | 65 +- controller/DBMirrorSet.hpp | 8 + controller/EmbeddedNetworkController.cpp | 134 +- controller/EmbeddedNetworkController.hpp | 3 + controller/FileDB.cpp | 3 +- controller/PostgreSQL.cpp | 1693 +++++++--------- controller/PostgreSQL.hpp | 79 +- include/ZeroTierOne.h | 173 +- node/Bond.cpp | 2246 +++++++++++----------- node/Bond.hpp | 1210 +++++++++--- node/BondController.cpp | 212 -- node/BondController.hpp | 239 --- node/CertificateOfMembership.cpp | 192 +- node/CertificateOfMembership.hpp | 50 +- node/Constants.hpp | 205 +- node/Flow.hpp | 124 -- node/Identity.hpp | 12 + node/IncomingPacket.cpp | 51 +- node/IncomingPacket.hpp | 1 - node/Membership.hpp | 7 +- node/Network.cpp | 16 +- node/Network.hpp | 15 +- node/NetworkConfig.cpp | 22 + node/NetworkConfig.hpp | 28 +- node/NetworkController.hpp | 10 +- node/Node.cpp | 39 +- node/Node.hpp | 6 +- node/Packet.hpp | 11 +- node/Path.hpp | 441 +---- node/Peer.cpp | 67 +- node/Peer.hpp | 60 +- node/RuntimeEnvironment.hpp | 4 +- node/Switch.cpp | 5 +- node/Trace.cpp | 2 +- node/Utils.cpp | 2 + objects.mk | 3 +- one.cpp | 81 +- selftest.cpp | 16 +- service/OneService.cpp | 181 +- 42 files changed, 3754 insertions(+), 4153 deletions(-) create mode 100644 controller/ConnectionPool.hpp delete mode 100644 node/BondController.cpp delete mode 100644 node/BondController.hpp delete mode 100644 node/Flow.hpp diff --git a/controller/ConnectionPool.hpp b/controller/ConnectionPool.hpp new file mode 100644 index 000000000..8ffc1645c --- /dev/null +++ b/controller/ConnectionPool.hpp @@ -0,0 +1,161 @@ +/* + * Copyright (c)2021 ZeroTier, Inc. + * + * Use of this software is governed by the Business Source License included + * in the LICENSE.TXT file in the project's root directory. + * + * Change Date: 2025-01-01 + * + * On the date above, in accordance with the Business Source License, use + * of this software will be governed by version 2.0 of the Apache License. + */ +/****/ + +#ifndef ZT_CONNECTION_POOL_H_ +#define ZT_CONNECTION_POOL_H_ + + +#ifndef _DEBUG + #define _DEBUG(x) +#endif + +#include +#include +#include +#include +#include +#include + +namespace ZeroTier { + +struct ConnectionUnavailable : std::exception { + char const* what() const throw() { + return "Unable to allocate connection"; + }; +}; + + +class Connection { +public: + virtual ~Connection() {}; +}; + +class ConnectionFactory { +public: + virtual ~ConnectionFactory() {}; + virtual std::shared_ptr create()=0; +}; + +struct ConnectionPoolStats { + size_t pool_size; + size_t borrowed_size; +}; + +template +class ConnectionPool { +public: + ConnectionPool(size_t max_pool_size, size_t min_pool_size, std::shared_ptr factory) + : m_maxPoolSize(max_pool_size) + , m_minPoolSize(min_pool_size) + , m_factory(factory) + { + while(m_pool.size() < m_minPoolSize){ + m_pool.push_back(m_factory->create()); + } + }; + + ConnectionPoolStats get_stats() { + std::unique_lock lock(m_poolMutex); + + ConnectionPoolStats stats; + stats.pool_size = m_pool.size(); + stats.borrowed_size = m_borrowed.size(); + + return stats; + }; + + ~ConnectionPool() { + }; + + /** + * Borrow + * + * Borrow a connection for temporary use + * + * When done, either (a) call unborrow() to return it, or (b) (if it's bad) just let it go out of scope. This will cause it to automatically be replaced. + * @retval a shared_ptr to the connection object + */ + std::shared_ptr borrow() { + std::unique_lock l(m_poolMutex); + + while((m_pool.size() + m_borrowed.size()) < m_minPoolSize) { + std::shared_ptr conn = m_factory->create(); + m_pool.push_back(conn); + } + + if(m_pool.size()==0){ + + if ((m_pool.size() + m_borrowed.size()) <= m_maxPoolSize) { + try { + std::shared_ptr conn = m_factory->create(); + m_borrowed.insert(conn); + return std::static_pointer_cast(conn); + } catch (std::exception &e) { + throw ConnectionUnavailable(); + } + } else { + for(auto it = m_borrowed.begin(); it != m_borrowed.end(); ++it){ + if((*it).unique()) { + // This connection has been abandoned! Destroy it and create a new connection + try { + // If we are able to create a new connection, return it + _DEBUG("Creating new connection to replace discarded connection"); + std::shared_ptr conn = m_factory->create(); + m_borrowed.erase(it); + m_borrowed.insert(conn); + return std::static_pointer_cast(conn); + } catch(std::exception& e) { + // Error creating a replacement connection + throw ConnectionUnavailable(); + } + } + } + // Nothing available + throw ConnectionUnavailable(); + } + } + + // Take one off the front + std::shared_ptr conn = m_pool.front(); + m_pool.pop_front(); + // Add it to the borrowed list + m_borrowed.insert(conn); + return std::static_pointer_cast(conn); + }; + + /** + * Unborrow a connection + * + * Only call this if you are returning a working connection. If the connection was bad, just let it go out of scope (so the connection manager can replace it). + * @param the connection + */ + void unborrow(std::shared_ptr conn) { + // Lock + std::unique_lock lock(m_poolMutex); + m_borrowed.erase(conn); + if ((m_pool.size() + m_borrowed.size()) < m_maxPoolSize) { + m_pool.push_back(conn); + } + }; +protected: + size_t m_maxPoolSize; + size_t m_minPoolSize; + std::shared_ptr m_factory; + std::deque > m_pool; + std::set > m_borrowed; + std::mutex m_poolMutex; +}; + +} + +#endif \ No newline at end of file diff --git a/controller/DB.cpp b/controller/DB.cpp index 8a86ae376..27578bf77 100644 --- a/controller/DB.cpp +++ b/controller/DB.cpp @@ -49,6 +49,9 @@ void DB::initNetwork(nlohmann::json &network) }}; } if (!network.count("dns")) network["dns"] = nlohmann::json::array(); + if (!network.count("ssoEnabled")) network["ssoEnabled"] = false; + if (!network.count("clientId")) network["clientId"] = ""; + if (!network.count("authorizationEndpoint")) network["authorizationEndpoint"] = ""; network["objtype"] = "network"; } @@ -56,6 +59,7 @@ void DB::initNetwork(nlohmann::json &network) void DB::initMember(nlohmann::json &member) { if (!member.count("authorized")) member["authorized"] = false; + if (!member.count("ssoExempt")) member["ssoExempt"] = false; if (!member.count("ipAssignments")) member["ipAssignments"] = nlohmann::json::array(); if (!member.count("activeBridge")) member["activeBridge"] = false; if (!member.count("tags")) member["tags"] = nlohmann::json::array(); @@ -67,6 +71,7 @@ void DB::initMember(nlohmann::json &member) if (!member.count("lastAuthorizedTime")) member["lastAuthorizedTime"] = 0ULL; if (!member.count("lastAuthorizedCredentialType")) member["lastAuthorizedCredentialType"] = nlohmann::json(); if (!member.count("lastAuthorizedCredential")) member["lastAuthorizedCredential"] = nlohmann::json(); + if (!member.count("authenticationExpiryTime")) member["authenticationExpiryTime"] = 0LL; if (!member.count("vMajor")) member["vMajor"] = -1; if (!member.count("vMinor")) member["vMinor"] = -1; if (!member.count("vRev")) member["vRev"] = -1; @@ -92,6 +97,8 @@ void DB::cleanMember(nlohmann::json &member) member.erase("recentLog"); member.erase("lastModified"); member.erase("lastRequestMetaData"); + member.erase("authenticationURL"); // computed + member.erase("authenticationClientID"); // computed } DB::DB() {} @@ -174,8 +181,9 @@ bool DB::get(const uint64_t networkId,nlohmann::json &network,std::vector l2(nw->lock); network = nw->config; - for(auto m=nw->members.begin();m!=nw->members.end();++m) + for(auto m=nw->members.begin();m!=nw->members.end();++m) { members.push_back(m->second); + } } return true; } @@ -188,6 +196,14 @@ void DB::networks(std::set &networks) networks.insert(n->first); } +void DB::networkMemberSSOHasExpired(uint64_t nwid, int64_t now) { + std::lock_guard l(_networks_l); + auto nw = _networks.find(nwid); + if (nw != _networks.end()) { + nw->second->mostRecentDeauthTime = now; + } +} + void DB::_memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners) { uint64_t memberId = 0; diff --git a/controller/DB.hpp b/controller/DB.hpp index 6a6906eff..0a5d784c2 100644 --- a/controller/DB.hpp +++ b/controller/DB.hpp @@ -31,9 +31,12 @@ #include #include #include +#include #include "../ext/json/json.hpp" +#define ZT_MEMBER_AUTH_TIMEOUT_NOTIFY_BEFORE 25000 + namespace ZeroTier { @@ -101,12 +104,13 @@ public: } virtual bool save(nlohmann::json &record,bool notifyListeners) = 0; - virtual void eraseNetwork(const uint64_t networkId) = 0; virtual void eraseMember(const uint64_t networkId,const uint64_t memberId) = 0; - virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) = 0; + virtual std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) { return ""; } + virtual void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts); + inline void addListener(DB::ChangeListener *const listener) { std::lock_guard l(_changeListeners_l); @@ -148,8 +152,8 @@ protected: std::mutex lock; }; - void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners); - void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners); + virtual void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners); + virtual void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners); void _fillSummaryInfo(const std::shared_ptr<_Network> &nw,NetworkSummaryInfo &info); std::vector _changeListeners; diff --git a/controller/DBMirrorSet.cpp b/controller/DBMirrorSet.cpp index f19741bb3..de7ebefe1 100644 --- a/controller/DBMirrorSet.cpp +++ b/controller/DBMirrorSet.cpp @@ -36,7 +36,7 @@ DBMirrorSet::DBMirrorSet(DB::ChangeListener *listener) : } for(auto db=dbs.begin();db!=dbs.end();++db) { - (*db)->each([this,&dbs,&db](uint64_t networkId,const nlohmann::json &network,uint64_t memberId,const nlohmann::json &member) { + (*db)->each([&dbs,&db](uint64_t networkId,const nlohmann::json &network,uint64_t memberId,const nlohmann::json &member) { try { if (network.is_object()) { if (memberId == 0) { @@ -125,6 +125,26 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,std::vect return false; } +std::string DBMirrorSet::getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) +{ + std::lock_guard l(_dbs_l); + for(auto d=_dbs.begin();d!=_dbs.end();++d) { + std::string url = (*d)->getSSOAuthURL(member, redirectURL); + if (!url.empty()) { + return url; + } + } + return ""; +} + +void DBMirrorSet::networkMemberSSOHasExpired(uint64_t nwid, int64_t ts) +{ + std::lock_guard l(_dbs_l); + for(auto d=_dbs.begin();d!=_dbs.end();++d) { + (*d)->networkMemberSSOHasExpired(nwid, ts); + } +} + void DBMirrorSet::networks(std::set &networks) { std::lock_guard l(_dbs_l); @@ -228,4 +248,47 @@ void DBMirrorSet::onNetworkMemberDeauthorize(const void *db,uint64_t networkId,u _listener->onNetworkMemberDeauthorize(this,networkId,memberId); } +void DBMirrorSet::membersExpiring(std::set< std::pair > &soon, std::set< std::pair > &expired) +{ + std::unique_lock l(_membersExpiringSoon_l); + int64_t now = OSUtils::now(); + for(auto next=_membersExpiringSoon.begin();next!=_membersExpiringSoon.end();) { + if (next->first > now) { + const uint64_t nwid = next->second.first; + const uint64_t memberId = next->second.second; + nlohmann::json network, member; + if (this->get(nwid, network, memberId, member)) { + try { + const bool authorized = member["authorized"]; + const bool ssoExempt = member["ssoExempt"]; + const int64_t authenticationExpiryTime = member["authenticationExpiryTime"]; + if ((authenticationExpiryTime == next->first)&&(authorized)&&(!ssoExempt)) { + if ((authenticationExpiryTime - now) > ZT_MEMBER_AUTH_TIMEOUT_NOTIFY_BEFORE) { + // Stop when we get to entries too far in the future. + break; + } else { + const bool ssoEnabled = network["ssoEnabled"]; + if (ssoEnabled) + soon.insert(std::pair(nwid, memberId)); + } + } else { + // Obsolete entry, no longer authorized, or SSO exempt. + } + } catch ( ... ) { + // Invalid member object, erase. + } + } else { + // Not found. + } + } + _membersExpiringSoon.erase(next++); + } +} + +void DBMirrorSet::memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId) +{ + std::unique_lock l(_membersExpiringSoon_l); + _membersExpiringSoon.insert(std::pair< int64_t, std::pair< uint64_t, uint64_t > >(expTime, std::pair< uint64_t, uint64_t >(nwid, memberId))); +} + } // namespace ZeroTier diff --git a/controller/DBMirrorSet.hpp b/controller/DBMirrorSet.hpp index 967cd9360..4ce962740 100644 --- a/controller/DBMirrorSet.hpp +++ b/controller/DBMirrorSet.hpp @@ -51,6 +51,9 @@ public: virtual void onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member); virtual void onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId); + std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL); + void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts); + inline void addDB(const std::shared_ptr &db) { db->addListener(this); @@ -58,12 +61,17 @@ public: _dbs.push_back(db); } + void membersExpiring(std::set< std::pair > &soon, std::set< std::pair > &expired); + void memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId); + private: DB::ChangeListener *const _listener; std::atomic_bool _running; std::thread _syncCheckerThread; std::vector< std::shared_ptr< DB > > _dbs; mutable std::mutex _dbs_l; + std::set< std::pair< int64_t, std::pair > > _membersExpiringSoon; + mutable std::mutex _membersExpiringSoon_l; }; } // namespace ZeroTier diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index 1b2da4c56..ea70cb3ae 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -28,6 +28,9 @@ #include #include #include +#include +#include +#include #include "../include/ZeroTierOne.h" #include "../version.h" @@ -60,6 +63,29 @@ namespace ZeroTier { namespace { +std::string url_encode(const std::string &value) { + std::ostringstream escaped; + escaped.fill('0'); + escaped << std::hex; + + for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { + std::string::value_type c = (*i); + + // Keep alphanumeric and other accepted characters intact + if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { + escaped << c; + continue; + } + + // Any other characters are percent-encoded + escaped << std::uppercase; + escaped << '%' << std::setw(2) << int((unsigned char) c); + escaped << std::nouppercase; + } + + return escaped.str(); +} + static json _renderRule(ZT_VirtualNetworkRule &rule) { char tmp[128]; @@ -476,6 +502,10 @@ EmbeddedNetworkController::~EmbeddedNetworkController() t->join(); } +void EmbeddedNetworkController::setSSORedirectURL(const std::string &url) { + _ssoRedirectURL = url_encode(url); +} + void EmbeddedNetworkController::init(const Identity &signingId,Sender *sender) { char tmp[64]; @@ -688,8 +718,10 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST( DB::initMember(member); try { - if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"],false); - if (b.count("noAutoAssignIps")) member["noAutoAssignIps"] = OSUtils::jsonBool(b["noAutoAssignIps"],false); + if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"], false); + if (b.count("noAutoAssignIps")) member["noAutoAssignIps"] = OSUtils::jsonBool(b["noAutoAssignIps"], false); + if (b.count("authenticationExpiryTime")) member["authenticationExpiryTime"] = (uint64_t)OSUtils::jsonInt(b["authenticationExpiryTime"], 0ULL); + if (b.count("authenticationURL")) member["authenticationURL"] = OSUtils::jsonString(b["authenticationURL"], ""); if (b.count("remoteTraceTarget")) { const std::string rtt(OSUtils::jsonString(b["remoteTraceTarget"],"")); @@ -1248,7 +1280,7 @@ void EmbeddedNetworkController::_request( Utils::hex(nwid,nwids); _db.get(nwid,network,identity.address().toInt(),member,ns); if ((!network.is_object())||(network.empty())) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_OBJECT_NOT_FOUND); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_OBJECT_NOT_FOUND, nullptr, 0); return; } const bool newMember = ((!member.is_object())||(member.empty())); @@ -1262,11 +1294,11 @@ void EmbeddedNetworkController::_request( // known member. try { if (Identity(haveIdStr.c_str()) != identity) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); return; } } catch ( ... ) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); return; } } else { @@ -1323,6 +1355,38 @@ void EmbeddedNetworkController::_request( member["lastAuthorizedCredential"] = autoAuthCredential; } + // Should we check SSO Stuff? + // If network is configured with SSO, and the member is not marked exempt: yes + // Otherwise no, we use standard auth logic. + bool networkSSOEnabled = OSUtils::jsonBool(network["ssoEnabled"], false); + bool memberSSOExempt = OSUtils::jsonBool(member["ssoExempt"], false); + std::string authenticationURL; + if (networkSSOEnabled && !memberSSOExempt) { + authenticationURL = _db.getSSOAuthURL(member, _ssoRedirectURL); + std::string memberId = member["id"]; + //fprintf(stderr, "ssoEnabled && !ssoExempt %s-%s\n", nwids, memberId.c_str()); + uint64_t authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0); + //fprintf(stderr, "authExpiryTime: %lld\n", authenticationExpiryTime); + if (authenticationExpiryTime < now) { + if (!authenticationURL.empty()) { + _db.networkMemberSSOHasExpired(nwid, now); + onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt()); + + Dictionary<3072> authInfo; + authInfo.add("aU", authenticationURL.c_str()); + //fprintf(stderr, "sending auth URL: %s\n", authenticationURL.c_str()); + + DB::cleanMember(member); + _db.save(member,true); + + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes()); + return; + } + } else if (authorized) { + _db.memberWillExpire(authenticationExpiryTime, nwid, identity.address().toInt()); + } + } + if (authorized) { // Update version info and meta-data if authorized and if this is a genuine request if (requestPacketId) { @@ -1347,17 +1411,18 @@ void EmbeddedNetworkController::_request( ms.lastRequestMetaData = metaData; ms.identity = identity; } - } + } } else { + // If they are not authorized, STOP! DB::cleanMember(member); _db.save(member,true); - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); return; } // ------------------------------------------------------------------------- - // If we made it this far, they are authorized. + // If we made it this far, they are authorized (and authenticated). // ------------------------------------------------------------------------- int64_t credentialtmd = ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MAX_MAX_DELTA; @@ -1386,7 +1451,11 @@ void EmbeddedNetworkController::_request( nc->mtu = std::max(std::min((unsigned int)OSUtils::jsonInt(network["mtu"],ZT_DEFAULT_MTU),(unsigned int)ZT_MAX_MTU),(unsigned int)ZT_MIN_MTU); nc->multicastLimit = (unsigned int)OSUtils::jsonInt(network["multicastLimit"],32ULL); - + nc->ssoEnabled = OSUtils::jsonBool(network["ssoEnabled"], false); + nc->authenticationExpiryTime = OSUtils::jsonInt(member["authenticationExpiryTime"], 0LL); + if (!authenticationURL.empty()) + Utils::scopy(nc->authenticationURL, sizeof(nc->authenticationURL), authenticationURL.c_str()); + std::string rtt(OSUtils::jsonString(member["remoteTraceTarget"],"")); if (rtt.length() == 10) { nc->remoteTraceTarget = Address(Utils::hexStrToU64(rtt.c_str())); @@ -1415,6 +1484,8 @@ void EmbeddedNetworkController::_request( json &memberTags = member["tags"]; json &dns = network["dns"]; + //fprintf(stderr, "IP Assignment Pools for Network %s: %s\n", nwids, OSUtils::jsonDump(ipAssignmentPools, 2).c_str()); + if (metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_RULES_ENGINE_REV,0) <= 0) { // Old versions with no rules engine support get an allow everything rule. // Since rules are enforced bidirectionally, newer versions *will* still @@ -1730,11 +1801,11 @@ void EmbeddedNetworkController::_request( nc->certificateOfOwnershipCount = 1; } - CertificateOfMembership com(now,credentialtmd,nwid,identity.address()); + CertificateOfMembership com(now,credentialtmd,nwid,identity); if (com.sign(_signingId)) { nc->com = com; } else { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_INTERNAL_SERVER_ERROR); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_INTERNAL_SERVER_ERROR, nullptr, 0); return; } @@ -1753,17 +1824,44 @@ void EmbeddedNetworkController::_startThreads() _threads.emplace_back([this]() { for(;;) { _RQEntry *qe = (_RQEntry *)0; - if (!_queue.get(qe)) + auto timedWaitResult = _queue.get(qe, 1000); + if (timedWaitResult == BlockingQueue<_RQEntry *>::STOP) { break; - try { + } else if (timedWaitResult == BlockingQueue<_RQEntry *>::OK) { if (qe) { - _request(qe->nwid,qe->fromAddr,qe->requestPacketId,qe->identity,qe->metaData); + try { + _request(qe->nwid,qe->fromAddr,qe->requestPacketId,qe->identity,qe->metaData); + } catch (std::exception &e) { + fprintf(stderr,"ERROR: exception in controller request handling thread: %s" ZT_EOL_S,e.what()); + } catch ( ... ) { + fprintf(stderr,"ERROR: exception in controller request handling thread: unknown exception" ZT_EOL_S); + } delete qe; } - } catch (std::exception &e) { - fprintf(stderr,"ERROR: exception in controller request handling thread: %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: exception in controller request handling thread: unknown exception" ZT_EOL_S); + } + + std::set< std::pair > soon; + std::set< std::pair > expired; + _db.membersExpiring(soon, expired); + + for(auto s=soon.begin();s!=soon.end();++s) { + Identity identity; + Dictionary lastMetaData; + { + std::unique_lock ll(_memberStatus_l); + auto ms = _memberStatus.find(_MemberStatusKey(s->first, s->second)); + if (ms != _memberStatus.end()) { + lastMetaData = ms->second.lastRequestMetaData; + identity = ms->second.identity; + } + } + if (identity) { + request(s->first,InetAddress(),0,identity,lastMetaData); + } + } + + for(auto e=expired.begin();e!=expired.end();++e) { + onNetworkMemberDeauthorize(nullptr, e->first, e->second); } } }); diff --git a/controller/EmbeddedNetworkController.hpp b/controller/EmbeddedNetworkController.hpp index e499dd647..fc18cbded 100644 --- a/controller/EmbeddedNetworkController.hpp +++ b/controller/EmbeddedNetworkController.hpp @@ -57,6 +57,8 @@ public: virtual void init(const Identity &signingId,Sender *sender); + void setSSORedirectURL(const std::string &url); + virtual void request( uint64_t nwid, const InetAddress &fromAddr, @@ -151,6 +153,7 @@ private: std::mutex _memberStatus_l; RedisConfig *_rc; + std::string _ssoRedirectURL; }; } // namespace ZeroTier diff --git a/controller/FileDB.cpp b/controller/FileDB.cpp index bf573f3bf..d454e93e1 100644 --- a/controller/FileDB.cpp +++ b/controller/FileDB.cpp @@ -140,8 +140,7 @@ void FileDB::eraseNetwork(const uint64_t networkId) void FileDB::eraseMember(const uint64_t networkId,const uint64_t memberId) { nlohmann::json network,member,nullJson; - get(networkId,network); - get(memberId,member); + get(networkId,network,memberId,member); char p[4096]; OSUtils::ztsnprintf(p,sizeof(p),"%s" ZT_PATH_SEPARATOR_S "%.16llx" ZT_PATH_SEPARATOR_S "member" ZT_PATH_SEPARATOR_S "%.10llx.json",_networksPath.c_str(),networkId,memberId); OSUtils::rm(p); diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index a031c1ff0..5f71a3699 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -16,6 +16,7 @@ #ifdef ZT_CONTROLLER_USE_LIBPQ #include "../node/Constants.hpp" +#include "../node/SHA512.hpp" #include "EmbeddedNetworkController.hpp" #include "../version.h" #include "Redis.hpp" @@ -23,16 +24,20 @@ #include #include #include +#include +// #define ZT_TRACE 1 + using json = nlohmann::json; namespace { -static const int DB_MINIMUM_VERSION = 5; +static const int DB_MINIMUM_VERSION = 20; static const char *_timestr() { + time_t t = time(0); char *ts = ctime(&t); char *p = ts; @@ -65,16 +70,73 @@ std::string join(const std::vector &elements, const char * const se } */ +std::vector split(std::string str, char delim){ + std::istringstream iss(str); + std::vector tokens; + std::string item; + while(std::getline(iss, item, delim)) { + tokens.push_back(item); + } + return tokens; +} + + } // anonymous namespace using namespace ZeroTier; + +MemberNotificationReceiver::MemberNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel) + : pqxx::notification_receiver(c, channel) + , _psql(p) +{ + fprintf(stderr, "initialize MemberNotificaitonReceiver\n"); +} + + +void MemberNotificationReceiver::operator() (const std::string &payload, int packend_pid) { + fprintf(stderr, "Member Notification received: %s\n", payload.c_str()); + json tmp(json::parse(payload)); + json &ov = tmp["old_val"]; + json &nv = tmp["new_val"]; + json oldConfig, newConfig; + if (ov.is_object()) oldConfig = ov; + if (nv.is_object()) newConfig = nv; + if (oldConfig.is_object() || newConfig.is_object()) { + _psql->_memberChanged(oldConfig,newConfig,(_psql->_ready>=2)); + fprintf(stderr, "payload sent\n"); + } +} + + +NetworkNotificationReceiver::NetworkNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel) + : pqxx::notification_receiver(c, channel) + , _psql(p) +{ + fprintf(stderr, "initialize NetworkNotificationReceiver\n"); +} + +void NetworkNotificationReceiver::operator() (const std::string &payload, int packend_pid) { + fprintf(stderr, "Network Notificaiton received: %s\n", payload.c_str()); + json tmp(json::parse(payload)); + json &ov = tmp["old_val"]; + json &nv = tmp["new_val"]; + json oldConfig, newConfig; + if (ov.is_object()) oldConfig = ov; + if (nv.is_object()) newConfig = nv; + if (oldConfig.is_object() || newConfig.is_object()) { + _psql->_networkChanged(oldConfig,newConfig,(_psql->_ready>=2)); + fprintf(stderr, "payload sent\n"); + } +} + using Attrs = std::vector>; using Item = std::pair; using ItemStream = std::vector; PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, RedisConfig *rc) : DB() + , _pool() , _myId(myId) , _myAddress(myId.address()) , _ready(0) @@ -88,34 +150,35 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R { char myAddress[64]; _myAddressStr = myId.address().toString(myAddress); - _connString = std::string(path) + " application_name=controller_" + _myAddressStr; - - // Database Schema Version Check - PGconn *conn = getPgConn(); - if (PQstatus(conn) != CONNECTION_OK) { - fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); - exit(1); + _connString = std::string(path); + auto f = std::make_shared(_connString); + _pool = std::make_shared >( + 15, 5, std::static_pointer_cast(f)); + + memset(_ssoPsk, 0, sizeof(_ssoPsk)); + char *const ssoPskHex = getenv("ZT_SSO_PSK"); +#ifdef ZT_TRACE + fprintf(stderr, "ZT_SSO_PSK: %s\n", ssoPskHex); +#endif + if (ssoPskHex) { + // SECURITY: note that ssoPskHex will always be null-terminated if libc acatually + // returns something non-NULL. If the hex encodes something shorter than 48 bytes, + // it will be padded at the end with zeroes. If longer, it'll be truncated. + Utils::unhex(ssoPskHex, _ssoPsk, sizeof(_ssoPsk)); } - PGresult *res = PQexec(conn, "SELECT version FROM ztc_database"); - if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, "Error determining database version"); - exit(1); - } + auto c = _pool->borrow(); + pqxx::work txn{*c->c}; - if (PQntuples(res) != 1) { - fprintf(stderr, "Invalid number of db version tuples returned."); - exit(1); - } - - int dbVersion = std::stoi(PQgetvalue(res, 0, 0)); + pqxx::row r{txn.exec1("SELECT version FROM ztc_database")}; + int dbVersion = r[0].as(); + txn.commit(); if (dbVersion < DB_MINIMUM_VERSION) { fprintf(stderr, "Central database schema version too low. This controller version requires a minimum schema version of %d. Please upgrade your Central instance", DB_MINIMUM_VERSION); exit(1); } - PQclear(res); - res = NULL; + _pool->unborrow(c); if (_rc != NULL) { sw::redis::ConnectionOptions opts; @@ -139,11 +202,8 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R fprintf(stderr, "[%s] NOTICE: %.10llx controller PostgreSQL waiting for initial data download..." ZT_EOL_S, ::_timestr(), (unsigned long long)_myAddress.toInt()); _waitNoticePrinted = true; - initializeNetworks(conn); - initializeMembers(conn); - - PQfinish(conn); - conn = NULL; + initializeNetworks(); + initializeMembers(); _heartbeatThread = std::thread(&PostgreSQL::heartbeat, this); _membersDbWatcher = std::thread(&PostgreSQL::membersDbWatcher, this); @@ -188,10 +248,13 @@ bool PostgreSQL::save(nlohmann::json &record,bool notifyListeners) { bool modified = false; try { - if (!record.is_object()) + if (!record.is_object()) { + fprintf(stderr, "record is not an object?!?\n"); return false; + } const std::string objtype = record["objtype"]; if (objtype == "network") { + //fprintf(stderr, "network save\n"); const uint64_t nwid = OSUtils::jsonIntHex(record["id"],0ULL); if (nwid) { nlohmann::json old; @@ -203,17 +266,25 @@ bool PostgreSQL::save(nlohmann::json &record,bool notifyListeners) } } } else if (objtype == "member") { + std::string networkId = record["nwid"]; + std::string memberId = record["id"]; const uint64_t nwid = OSUtils::jsonIntHex(record["nwid"],0ULL); const uint64_t id = OSUtils::jsonIntHex(record["id"],0ULL); + //fprintf(stderr, "member save %s-%s\n", networkId.c_str(), memberId.c_str()); if ((id)&&(nwid)) { nlohmann::json network,old; get(nwid,network,id,old); if ((!old.is_object())||(!_compareRecords(old,record))) { + //fprintf(stderr, "commit queue post\n"); record["revision"] = OSUtils::jsonInt(record["revision"],0ULL) + 1ULL; _commitQueue.post(std::pair(record,notifyListeners)); modified = true; + } else { + //fprintf(stderr, "no change\n"); } } + } else { + fprintf(stderr, "uhh waaat\n"); } } catch (std::exception &e) { fprintf(stderr, "Error on PostgreSQL::save: %s\n", e.what()); @@ -225,6 +296,7 @@ bool PostgreSQL::save(nlohmann::json &record,bool notifyListeners) void PostgreSQL::eraseNetwork(const uint64_t networkId) { + fprintf(stderr, "PostgreSQL::eraseNetwork\n"); char tmp2[24]; waitForReady(); Utils::hex(networkId, tmp2); @@ -239,6 +311,7 @@ void PostgreSQL::eraseNetwork(const uint64_t networkId) void PostgreSQL::eraseMember(const uint64_t networkId, const uint64_t memberId) { + fprintf(stderr, "PostgreSQL::eraseMember\n"); char tmp2[24]; waitForReady(); std::pair tmp, nw; @@ -263,196 +336,219 @@ void PostgreSQL::nodeIsOnline(const uint64_t networkId, const uint64_t memberId, } } -void PostgreSQL::initializeNetworks(PGconn *conn) +std::string PostgreSQL::getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) +{ + // NONCE is just a random character string. no semantic meaning + // state = HMAC SHA384 of Nonce based on shared sso key + // + // need nonce timeout in database? make sure it's used within X time + // X is 5 minutes for now. Make configurable later? + // + // how do we tell when a nonce is used? if auth_expiration_time is set + std::string networkId = member["nwid"]; + std::string memberId = member["id"]; + char authenticationURL[4096] = {0}; + + //fprintf(stderr, "PostgreSQL::updateMemberOnLoad: %s-%s\n", networkId.c_str(), memberId.c_str()); + bool have_auth = false; + try { + auto c = _pool->borrow(); + pqxx::work w(*c->c); + + char nonceBytes[16] = {0}; + std::string nonce = ""; + + // check if the member exists first. + pqxx::row count = w.exec_params1("SELECT count(id) FROM ztc_member WHERE id = $1 AND network_id = $2 AND deleted = false", memberId, networkId); + if (count[0].as() == 1) { + // find an unused nonce, if one exists. + pqxx::result r = w.exec_params("SELECT nonce FROM ztc_sso_expiry " + "WHERE network_id = $1 AND member_id = $2 " + "AND authentication_expiry_time IS NULL AND ((NOW() AT TIME ZONE 'UTC') <= nonce_expiration)", + networkId, memberId); + + if (r.size() == 1) { + // we have an existing nonce. Use it + nonce = r.at(0)[0].as(); + Utils::unhex(nonce.c_str(), nonceBytes, sizeof(nonceBytes)); + } else if (r.empty()) { + // create a nonce + Utils::getSecureRandom(nonceBytes, 16); + char nonceBuf[64] = {0}; + Utils::hex(nonceBytes, sizeof(nonceBytes), nonceBuf); + nonce = std::string(nonceBuf); + + pqxx::result ir = w.exec_params0("INSERT INTO ztc_sso_expiry " + "(nonce, nonce_expiration, network_id, member_id) VALUES " + "($1, TO_TIMESTAMP($2::double precision/1000), $3, $4)", + nonce, OSUtils::now() + 300000, networkId, memberId); + + w.commit(); + } else { + // > 1 ?!? Thats an error! + fprintf(stderr, "> 1 unused nonce!\n"); + exit(6); + } + + r = w.exec_params("SELECT org.client_id, org.authorization_endpoint " + "FROM ztc_network AS nw, ztc_org AS org " + "WHERE nw.id = $1 AND nw.sso_enabled = true AND org.owner_id = nw.owner_id", networkId); + + std::string client_id = ""; + std::string authorization_endpoint = ""; + + if (r.size() == 1) { + client_id = r.at(0)[0].as(); + authorization_endpoint = r.at(0)[1].as(); + } else if (r.size() > 1) { + fprintf(stderr, "ERROR: More than one auth endpoint for an organization?!?!? NetworkID: %s\n", networkId.c_str()); + } else { + fprintf(stderr, "No client or auth endpoint?!?\n"); + } + + // no catch all else because we don't actually care if no records exist here. just continue as normal. + if ((!client_id.empty())&&(!authorization_endpoint.empty())) { + have_auth = true; + + uint8_t state[48]; + HMACSHA384(_ssoPsk, nonceBytes, sizeof(nonceBytes), state); + char state_hex[256]; + Utils::hex(state, 48, state_hex); + + OSUtils::ztsnprintf(authenticationURL, sizeof(authenticationURL), + "%s?response_type=id_token&response_mode=form_post&scope=openid+email+profile&redirect_uri=%s&nonce=%s&state=%s&client_id=%s", + authorization_endpoint.c_str(), + redirectURL.c_str(), + nonce.c_str(), + state_hex, + client_id.c_str()); + } else { + fprintf(stderr, "client_id: %s\nauthorization_endpoint: %s\n", client_id.c_str(), authorization_endpoint.c_str()); + } + } + + _pool->unborrow(c); + } catch (std::exception &e) { + fprintf(stderr, "ERROR: Error updating member on load: %s\n", e.what()); + } + + return std::string(authenticationURL); +} + +void PostgreSQL::initializeNetworks() { try { - if (PQstatus(conn) != CONNECTION_OK) { - fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); - exit(1); - } - std::string setKey = "networks:{" + _myAddressStr + "}"; - - // if (_rc != NULL) { - // try { - // if (_rc->clusterMode) { - // _cluster->del(setKey); - // } else { - // _redis->del(setKey); - // } - // } catch (sw::redis::Error &e) { - // // del can throw an error if the key doesn't exist - // // swallow it and move along - // } - // } - std::unordered_set networkSet; - - const char *params[1] = { - _myAddressStr.c_str() - }; - fprintf(stderr, "Initializing Networks...\n"); - PGresult *res = PQexecParams(conn, "SELECT id, EXTRACT(EPOCH FROM creation_time AT TIME ZONE 'UTC')*1000, capabilities, " - "enable_broadcast, EXTRACT(EPOCH FROM last_modified AT TIME ZONE 'UTC')*1000, mtu, multicast_limit, name, private, remote_trace_level, " - "remote_trace_target, revision, rules, tags, v4_assign_mode, v6_assign_mode FROM ztc_network " - "WHERE deleted = false AND controller_id = $1", - 1, - NULL, - params, - NULL, - NULL, - 0); + char qbuf[2048] = {0}; + sprintf(qbuf, "SELECT n.id, (EXTRACT(EPOCH FROM n.creation_time AT TIME ZONE 'UTC')*1000)::bigint as creation_time, n.capabilities, " + "n.enable_broadcast, (EXTRACT(EPOCH FROM n.last_modified AT TIME ZONE 'UTC')*1000)::bigint AS last_modified, n.mtu, n.multicast_limit, n.name, n.private, n.remote_trace_level, " + "n.remote_trace_target, n.revision, n.rules, n.tags, n.v4_assign_mode, n.v6_assign_mode, n.sso_enabled, (CASE WHEN n.sso_enabled THEN o.client_id ELSE NULL END) as client_id, " + "(CASE WHEN n.sso_enabled THEN o.authorization_endpoint ELSE NULL END) as authorization_endpoint, d.domain, d.servers, " + "ARRAY(SELECT CONCAT(host(ip_range_start),'|', host(ip_range_end)) FROM ztc_network_assignment_pool WHERE network_id = n.id) AS assignment_pool, " + "ARRAY(SELECT CONCAT(host(address),'/',bits::text,'|',COALESCE(host(via), 'NULL'))FROM ztc_network_route WHERE network_id = n.id) AS routes " + "FROM ztc_network n " + "LEFT OUTER JOIN ztc_org o " + " ON o.owner_id = n.owner_id " + "LEFT OUTER JOIN ztc_network_dns d " + " ON d.network_id = n.id " + "WHERE deleted = false AND controller_id = '%s'", _myAddressStr.c_str()); + auto c = _pool->borrow(); + auto c2 = _pool->borrow(); + pqxx::work w{*c->c}; + + auto stream = pqxx::stream_from::query(w, qbuf); - if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, "Networks Initialization Failed: %s", PQerrorMessage(conn)); - PQclear(res); - exit(1); - } + std::tuple< + std::string // network ID + , std::optional // creationTime + , std::optional // capabilities + , std::optional // enableBroadcast + , std::optional // lastModified + , std::optional // mtu + , std::optional // multicastLimit + , std::optional // name + , bool // private + , std::optional // remoteTraceLevel + , std::optional // remoteTraceTarget + , std::optional // revision + , std::optional // rules + , std::optional // tags + , std::optional // v4AssignMode + , std::optional // v6AssignMode + , std::optional // ssoEnabled + , std::optional // clientId + , std::optional // authorizationEndpoint + , std::optional // domain + , std::optional // servers + , std::string // assignmentPoolString + , std::string // routeString + > row; + + uint64_t count = 0; + auto tmp = std::chrono::high_resolution_clock::now(); + uint64_t total = 0; + while (stream >> row) { + auto start = std::chrono::high_resolution_clock::now(); - int numRows = PQntuples(res); - for (int i = 0; i < numRows; ++i) { json empty; json config; - const char *nwidparam[1] = { - PQgetvalue(res, i, 0) - }; - std::string nwid = PQgetvalue(res, i, 0); + initNetwork(config); + + std::string nwid = std::get<0>(row); + std::optional creationTime = std::get<1>(row); + std::optional capabilities = std::get<2>(row); + std::optional enableBroadcast = std::get<3>(row); + std::optional lastModified = std::get<4>(row); + std::optional mtu = std::get<5>(row); + std::optional multicastLimit = std::get<6>(row); + std::optional name = std::get<7>(row); + bool isPrivate = std::get<8>(row); + std::optional remoteTraceLevel = std::get<9>(row); + std::optional remoteTraceTarget = std::get<10>(row); + std::optional revision = std::get<11>(row); + std::optional rules = std::get<12>(row); + std::optional tags = std::get<13>(row); + std::optional v4AssignMode = std::get<14>(row); + std::optional v6AssignMode = std::get<15>(row); + std::optional ssoEnabled = std::get<16>(row); + std::optional clientId = std::get<17>(row); + std::optional authorizationEndpoint = std::get<18>(row); + std::optional dnsDomain = std::get<19>(row); + std::optional dnsServers = std::get<20>(row); + std::string assignmentPoolString = std::get<21>(row); + std::string routesString = std::get<22>(row); - networkSet.insert(nwid); + config["id"] = nwid; + config["nwid"] = nwid; + config["creationTime"] = creationTime.value_or(0); + config["capabilities"] = json::parse(capabilities.value_or("[]")); + config["enableBroadcast"] = enableBroadcast.value_or(false); + config["lastModified"] = lastModified.value_or(0); + config["mtu"] = mtu.value_or(2800); + config["multicastLimit"] = multicastLimit.value_or(64); + config["name"] = name.value_or(""); + config["private"] = isPrivate; + config["remoteTraceLevel"] = remoteTraceLevel.value_or(0); + config["remoteTraceTarget"] = remoteTraceTarget.value_or(""); + config["revision"] = revision.value_or(0); + config["rules"] = json::parse(rules.value_or("[]")); + config["tags"] = json::parse(tags.value_or("[]")); + config["v4AssignMode"] = json::parse(v4AssignMode.value_or("{}")); + config["v6AssignMode"] = json::parse(v6AssignMode.value_or("{}")); + config["ssoEnabled"] = ssoEnabled.value_or(false); + config["objtype"] = "network"; + config["ipAssignmentPools"] = json::array(); + config["routes"] = json::array(); + config["clientId"] = clientId.value_or(""); + config["authorizationEndpoint"] = authorizationEndpoint.value_or(""); - config["id"] = nwid; - config["nwid"] = nwid; - try { - config["creationTime"] = std::stoull(PQgetvalue(res, i, 1)); - } catch (std::exception &e) { - config["creationTime"] = 0ULL; - //fprintf(stderr, "Error converting creation time: %s\n", PQgetvalue(res, i, 1)); - } - config["capabilities"] = json::parse(PQgetvalue(res, i, 2)); - config["enableBroadcast"] = (strcmp(PQgetvalue(res, i, 3),"t")==0); - try { - config["lastModified"] = std::stoull(PQgetvalue(res, i, 4)); - } catch (std::exception &e) { - config["lastModified"] = 0ULL; - //fprintf(stderr, "Error converting last modified: %s\n", PQgetvalue(res, i, 4)); - } - try { - config["mtu"] = std::stoi(PQgetvalue(res, i, 5)); - } catch (std::exception &e) { - config["mtu"] = 2800; - } - try { - config["multicastLimit"] = std::stoi(PQgetvalue(res, i, 6)); - } catch (std::exception &e) { - config["multicastLimit"] = 64; - } - config["name"] = PQgetvalue(res, i, 7); - config["private"] = (strcmp(PQgetvalue(res, i, 8),"t")==0); - try { - config["remoteTraceLevel"] = std::stoi(PQgetvalue(res, i, 9)); - } catch (std::exception &e) { - config["remoteTraceLevel"] = 0; - } - config["remoteTraceTarget"] = PQgetvalue(res, i, 10); - try { - config["revision"] = std::stoull(PQgetvalue(res, i, 11)); - } catch (std::exception &e) { - config["revision"] = 0ULL; - //fprintf(stderr, "Error converting revision: %s\n", PQgetvalue(res, i, 11)); - } - config["rules"] = json::parse(PQgetvalue(res, i, 12)); - config["tags"] = json::parse(PQgetvalue(res, i, 13)); - config["v4AssignMode"] = json::parse(PQgetvalue(res, i, 14)); - config["v6AssignMode"] = json::parse(PQgetvalue(res, i, 15)); - config["objtype"] = "network"; - config["ipAssignmentPools"] = json::array(); - config["routes"] = json::array(); - - PGresult *r2 = PQexecParams(conn, - "SELECT host(ip_range_start), host(ip_range_end) FROM ztc_network_assignment_pool WHERE network_id = $1", - 1, - NULL, - nwidparam, - NULL, - NULL, - 0); - - if (PQresultStatus(r2) != PGRES_TUPLES_OK) { - fprintf(stderr, "ERROR: Error retreiving IP pools for network: %s\n", PQresultErrorMessage(r2)); - PQclear(r2); - PQclear(res); - exit(1); - } - - int n = PQntuples(r2); - for (int j = 0; j < n; ++j) { - json ip; - ip["ipRangeStart"] = PQgetvalue(r2, j, 0); - ip["ipRangeEnd"] = PQgetvalue(r2, j, 1); - - config["ipAssignmentPools"].push_back(ip); - } - - PQclear(r2); - - r2 = PQexecParams(conn, - "SELECT host(address), bits, host(via) FROM ztc_network_route WHERE network_id = $1", - 1, - NULL, - nwidparam, - NULL, - NULL, - 0); - - if (PQresultStatus(r2) != PGRES_TUPLES_OK) { - fprintf(stderr, "ERROR: Error retreiving routes for network: %s\n", PQresultErrorMessage(r2)); - PQclear(r2); - PQclear(res); - exit(1); - } - - n = PQntuples(r2); - for (int j = 0; j < n; ++j) { - std::string addr = PQgetvalue(r2, j, 0); - std::string bits = PQgetvalue(r2, j, 1); - std::string via = PQgetvalue(r2, j, 2); - json route; - route["target"] = addr + "/" + bits; - - if (via == "NULL") { - route["via"] = nullptr; - } else { - route["via"] = via; - } - config["routes"].push_back(route); - } - - r2 = PQexecParams(conn, - "SELECT domain, servers FROM ztc_network_dns WHERE network_id = $1", - 1, - NULL, - nwidparam, - NULL, - NULL, - 0); - - if (PQresultStatus(r2) != PGRES_TUPLES_OK) { - fprintf(stderr, "ERROR: Error retrieving DNS settings for network: %s\n", PQresultErrorMessage(r2)); - PQclear(r2); - PQclear(res); - exit(1); - } - - n = PQntuples(r2); - if (n > 1) { - fprintf(stderr, "ERROR: invalid number of DNS configurations for network %s. Must be 0 or 1\n", nwid.c_str()); - } else if (n == 1) { + if (dnsDomain.has_value()) { + std::string serverList = dnsServers.value(); json obj; - std::string domain = PQgetvalue(r2, 0, 0); - std::string serverList = PQgetvalue(r2, 0, 1); auto servers = json::array(); if (serverList.rfind("{",0) != std::string::npos) { serverList = serverList.substr(1, serverList.size()-2); @@ -463,29 +559,56 @@ void PostgreSQL::initializeNetworks(PGconn *conn) servers.push_back(server); } } - obj["domain"] = domain; + obj["domain"] = dnsDomain.value(); obj["servers"] = servers; config["dns"] = obj; } - PQclear(r2); + config["ipAssignmentPools"] = json::array(); + if (assignmentPoolString != "{}") { + std::string tmp = assignmentPoolString.substr(1, assignmentPoolString.size()-2); + std::vector assignmentPools = split(tmp, ','); + for (auto it = assignmentPools.begin(); it != assignmentPools.end(); ++it) { + std::vector r = split(*it, '|'); + json ip; + ip["ipRangeStart"] = r[0]; + ip["ipRangeEnd"] = r[1]; + config["ipAssignmentPools"].push_back(ip); + } + } - _networkChanged(empty, config, false); + config["routes"] = json::array(); + if (routesString != "{}") { + std::string tmp = routesString.substr(1, routesString.size()-2); + std::vector routes = split(tmp, ','); + for (auto it = routes.begin(); it != routes.end(); ++it) { + std::vector r = split(*it, '|'); + json route; + route["target"] = r[0]; + route["via"] = ((route["via"] == "NULL")? nullptr : r[1]); + config["routes"].push_back(route); + } + } + + _networkChanged(empty, config, false); + + auto end = std::chrono::high_resolution_clock::now(); + auto dur = std::chrono::duration_cast(end - start);; + total += dur.count(); + ++count; + if (count > 0 && count % 10000 == 0) { + fprintf(stderr, "Averaging %llu us per network\n", (total/count)); + } } - PQclear(res); + if (count > 0) { + fprintf(stderr, "Took %llu us per network to load\n", (total/count)); + } + stream.complete(); - // if(!networkSet.empty()) { - // if (_rc && _rc->clusterMode) { - // auto tx = _cluster->transaction(_myAddressStr, true); - // tx.sadd(setKey, networkSet.begin(), networkSet.end()); - // tx.exec(); - // } else if (_rc && !_rc->clusterMode) { - // auto tx = _redis->transaction(true); - // tx.sadd(setKey, networkSet.begin(), networkSet.end()); - // tx.exec(); - // } - // } + w.commit(); + _pool->unborrow(c2); + _pool->unborrow(c); if (++this->_ready == 2) { if (_waitNoticePrinted) { @@ -502,206 +625,147 @@ void PostgreSQL::initializeNetworks(PGconn *conn) } } -void PostgreSQL::initializeMembers(PGconn *conn) +void PostgreSQL::initializeMembers() { + std::string memberId; + std::string networkId; try { - if (PQstatus(conn) != CONNECTION_OK) { - fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); - exit(1); - } - // std::string setKeyBase = "network-nodes-all:{" + _myAddressStr + "}:"; - - // if (_rc != NULL) { - // std::lock_guard l(_networks_l); - // std::unordered_set deletes; - // for ( auto it : _networks) { - // uint64_t nwid_i = it.first; - // char nwidTmp[64] = {0}; - // OSUtils::ztsnprintf(nwidTmp, sizeof(nwidTmp), "%.16llx", nwid_i); - // std::string nwid(nwidTmp); - // std::string key = setKeyBase + nwid; - // deletes.insert(key); - // } - - // if (!deletes.empty()) { - // if (_rc->clusterMode) { - // auto tx = _cluster->transaction(_myAddressStr, true); - // for (std::string k : deletes) { - // tx.del(k); - // } - // tx.exec(); - // } else { - // auto tx = _redis->transaction(true); - // for (std::string k : deletes) { - // tx.del(k); - // } - // tx.exec(); - // } - // } - // } - - const char *params[1] = { - _myAddressStr.c_str() - }; - std::unordered_map networkMembers; - fprintf(stderr, "Initializing Members...\n"); - PGresult *res = PQexecParams(conn, - "SELECT m.id, m.network_id, m.active_bridge, m.authorized, m.capabilities, EXTRACT(EPOCH FROM m.creation_time AT TIME ZONE 'UTC')*1000, m.identity, " - " EXTRACT(EPOCH FROM m.last_authorized_time AT TIME ZONE 'UTC')*1000, " - " EXTRACT(EPOCH FROM m.last_deauthorized_time AT TIME ZONE 'UTC')*1000, " + + char qbuf[2048]; + sprintf(qbuf, "SELECT m.id, m.network_id, m.active_bridge, m.authorized, m.capabilities, (EXTRACT(EPOCH FROM m.creation_time AT TIME ZONE 'UTC')*1000)::bigint, m.identity, " + " (EXTRACT(EPOCH FROM m.last_authorized_time AT TIME ZONE 'UTC')*1000)::bigint, " + " (EXTRACT(EPOCH FROM m.last_deauthorized_time AT TIME ZONE 'UTC')*1000)::bigint, " " m.remote_trace_level, m.remote_trace_target, m.tags, m.v_major, m.v_minor, m.v_rev, m.v_proto, " - " m.no_auto_assign_ips, m.revision " + " m.no_auto_assign_ips, m.revision, sso_exempt, " + " (SELECT (EXTRACT(EPOCH FROM e.authentication_expiry_time)*1000)::bigint " + " FROM ztc_sso_expiry e " + " INNER JOIN ztc_network n1 " + " ON n.id = e.network_id " + " WHERE e.network_id = m.network_id AND e.member_id = m.id AND n.sso_enabled = TRUE AND e.authentication_expiry_time IS NOT NULL " + " ORDER BY e.authentication_expiry_time DESC LIMIT 1) AS authentication_expiry_time, " + " ARRAY(SELECT DISTINCT address FROM ztc_member_ip_assignment WHERE member_id = m.id AND network_id = m.network_id) AS assigned_addresses " "FROM ztc_member m " "INNER JOIN ztc_network n " " ON n.id = m.network_id " - "WHERE n.controller_id = $1 AND m.deleted = false", - 1, - NULL, - params, - NULL, - NULL, - 0); + "WHERE n.controller_id = '%s' AND m.deleted = false", _myAddressStr.c_str()); + auto c = _pool->borrow(); + auto c2 = _pool->borrow(); + pqxx::work w{*c->c}; + + auto stream = pqxx::stream_from::query(w, qbuf); - if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, "Member Initialization Failed: %s", PQerrorMessage(conn)); - PQclear(res); - exit(1); - } + std::tuple< + std::string // memberId + , std::string // memberId + , std::optional // activeBridge + , std::optional // authorized + , std::optional // capabilities + , std::optional // creationTime + , std::optional // identity + , std::optional // lastAuthorizedTime + , std::optional // lastDeauthorizedTime + , std::optional // remoteTraceLevel + , std::optional // remoteTraceTarget + , std::optional // tags + , std::optional // vMajor + , std::optional // vMinor + , std::optional // vRev + , std::optional // vProto + , std::optional // noAutoAssignIps + , std::optional // revision + , std::optional // ssoExempt + , std::optional // authenticationExpiryTime + , std::string // assignedAddresses + > row; - int numRows = PQntuples(res); - for (int i = 0; i < numRows; ++i) { + uint64_t count = 0; + auto tmp = std::chrono::high_resolution_clock::now(); + uint64_t total = 0; + while (stream >> row) { + auto start = std::chrono::high_resolution_clock::now(); json empty; json config; + + initMember(config); - std::string memberId(PQgetvalue(res, i, 0)); - std::string networkId(PQgetvalue(res, i, 1)); + memberId = std::get<0>(row); + networkId = std::get<1>(row); + std::optional activeBridge = std::get<2>(row); + std::optional authorized = std::get<3>(row); + std::optional capabilities = std::get<4>(row); + std::optional creationTime = std::get<5>(row); + std::optional identity = std::get<6>(row); + std::optional lastAuthorizedTime = std::get<7>(row); + std::optional lastDeauthorizedTime = std::get<8>(row); + std::optional remoteTraceLevel = std::get<9>(row); + std::optional remoteTraceTarget = std::get<10>(row); + std::optional tags = std::get<11>(row); + std::optional vMajor = std::get<12>(row); + std::optional vMinor = std::get<13>(row); + std::optional vRev = std::get<14>(row); + std::optional vProto = std::get<15>(row); + std::optional noAutoAssignIps = std::get<16>(row); + std::optional revision = std::get<17>(row); + std::optional ssoExempt = std::get<18>(row); + std::optional authenticationExpiryTime = std::get<19>(row); + std::string assignedAddresses = std::get<20>(row); - // networkMembers.insert(std::pair(setKeyBase+networkId, memberId)); - - std::string ctime = PQgetvalue(res, i, 5); config["id"] = memberId; config["nwid"] = networkId; - config["activeBridge"] = (strcmp(PQgetvalue(res, i, 2), "t") == 0); - config["authorized"] = (strcmp(PQgetvalue(res, i, 3), "t") == 0); - try { - config["capabilities"] = json::parse(PQgetvalue(res, i, 4)); - } catch (std::exception &e) { - config["capabilities"] = json::array(); - } - try { - config["creationTime"] = std::stoull(PQgetvalue(res, i, 5)); - } catch (std::exception &e) { - config["creationTime"] = 0ULL; - //fprintf(stderr, "Error upding creation time (member): %s\n", PQgetvalue(res, i, 5)); - } - config["identity"] = PQgetvalue(res, i, 6); - try { - config["lastAuthorizedTime"] = std::stoull(PQgetvalue(res, i, 7)); - } catch(std::exception &e) { - config["lastAuthorizedTime"] = 0ULL; - //fprintf(stderr, "Error updating last auth time (member): %s\n", PQgetvalue(res, i, 7)); - } - try { - config["lastDeauthorizedTime"] = std::stoull(PQgetvalue(res, i, 8)); - } catch( std::exception &e) { - config["lastDeauthorizedTime"] = 0ULL; - //fprintf(stderr, "Error updating last deauth time (member): %s\n", PQgetvalue(res, i, 8)); - } - try { - config["remoteTraceLevel"] = std::stoi(PQgetvalue(res, i, 9)); - } catch (std::exception &e) { - config["remoteTraceLevel"] = 0; - } - config["remoteTraceTarget"] = PQgetvalue(res, i, 10); - try { - config["tags"] = json::parse(PQgetvalue(res, i, 11)); - } catch (std::exception &e) { - config["tags"] = json::array(); - } - try { - config["vMajor"] = std::stoi(PQgetvalue(res, i, 12)); - } catch(std::exception &e) { - config["vMajor"] = -1; - } - try { - config["vMinor"] = std::stoi(PQgetvalue(res, i, 13)); - } catch (std::exception &e) { - config["vMinor"] = -1; - } - try { - config["vRev"] = std::stoi(PQgetvalue(res, i, 14)); - } catch (std::exception &e) { - config["vRev"] = -1; - } - try { - config["vProto"] = std::stoi(PQgetvalue(res, i, 15)); - } catch (std::exception &e) { - config["vProto"] = -1; - } - config["noAutoAssignIps"] = (strcmp(PQgetvalue(res, i, 16), "t") == 0); - try { - config["revision"] = std::stoull(PQgetvalue(res, i, 17)); - } catch (std::exception &e) { - config["revision"] = 0ULL; - //fprintf(stderr, "Error updating revision (member): %s\n", PQgetvalue(res, i, 17)); - } + config["activeBridge"] = activeBridge.value_or(false); + config["authorized"] = authorized.value_or(false); + config["capabilities"] = json::parse(capabilities.value_or("[]")); + config["creationTime"] = creationTime.value_or(0); + config["identity"] = identity.value_or(""); + config["lastAuthorizedTime"] = lastAuthorizedTime.value_or(0); + config["lastDeauthorizedTime"] = lastDeauthorizedTime.value_or(0); + config["remoteTraceLevel"] = remoteTraceLevel.value_or(0); + config["remoteTraceTarget"] = remoteTraceTarget.value_or(""); + config["tags"] = json::parse(tags.value_or("[]")); + config["vMajor"] = vMajor.value_or(-1); + config["vMinor"] = vMinor.value_or(-1); + config["vRev"] = vRev.value_or(-1); + config["vProto"] = vProto.value_or(-1); + config["noAutoAssignIps"] = noAutoAssignIps.value_or(false); + config["revision"] = revision.value_or(0); + config["ssoExempt"] = ssoExempt.value_or(false); + config["authenticationExpiryTime"] = authenticationExpiryTime.value_or(0); config["objtype"] = "member"; config["ipAssignments"] = json::array(); - const char *p2[2] = { - memberId.c_str(), - networkId.c_str() - }; - PGresult *r2 = PQexecParams(conn, - "SELECT DISTINCT address FROM ztc_member_ip_assignment WHERE member_id = $1 AND network_id = $2", - 2, - NULL, - p2, - NULL, - NULL, - 0); - - if (PQresultStatus(r2) != PGRES_TUPLES_OK) { - fprintf(stderr, "Member Initialization Failed: %s", PQerrorMessage(conn)); - PQclear(r2); - PQclear(res); - exit(1); - } - - int n = PQntuples(r2); - for (int j = 0; j < n; ++j) { - std::string ipaddr = PQgetvalue(r2, j, 0); - std::size_t pos = ipaddr.find('/'); - if (pos != std::string::npos) { - ipaddr = ipaddr.substr(0, pos); + if (assignedAddresses != "{}") { + std::string tmp = assignedAddresses.substr(1, assignedAddresses.size()-2); + std::vector addrs = split(tmp, ','); + for (auto it = addrs.begin(); it != addrs.end(); ++it) { + config["ipAssignments"].push_back(*it); } - config["ipAssignments"].push_back(ipaddr); } _memberChanged(empty, config, false); + + memberId = ""; + networkId = ""; + + auto end = std::chrono::high_resolution_clock::now(); + auto dur = std::chrono::duration_cast(end - start);; + total += dur.count(); + ++count; + if (count > 0 && count % 10000 == 0) { + fprintf(stderr, "Averaging %llu us per member\n", (total/count)); + } + } + if (count > 0) { + fprintf(stderr, "Took %llu us per member to load\n", (total/count)); } - PQclear(res); + stream.complete(); + + w.commit(); + _pool->unborrow(c2); + _pool->unborrow(c); - // if (!networkMembers.empty()) { - // if (_rc != NULL) { - // if (_rc->clusterMode) { - // auto tx = _cluster->transaction(_myAddressStr, true); - // for (auto it : networkMembers) { - // tx.sadd(it.first, it.second); - // } - // tx.exec(); - // } else { - // auto tx = _redis->transaction(true); - // for (auto it : networkMembers) { - // tx.sadd(it.first, it.second); - // } - // tx.exec(); - // } - // } - // } if (++this->_ready == 2) { if (_waitNoticePrinted) { fprintf(stderr,"[%s] NOTICE: %.10llx controller PostgreSQL data download complete." ZT_EOL_S,_timestr(),(unsigned long long)_myAddress.toInt()); @@ -711,7 +775,7 @@ void PostgreSQL::initializeMembers(PGconn *conn) } catch (sw::redis::Error &e) { fprintf(stderr, "ERROR: Error initializing members (redis): %s\n", e.what()); } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error initializing members: %s\n", e.what()); + fprintf(stderr, "ERROR: Error initializing member: %s-%s %s\n", networkId.c_str(), memberId.c_str(), e.what()); exit(-1); } } @@ -735,92 +799,52 @@ void PostgreSQL::heartbeat() const char *publicIdentity = publicId; const char *hostname = hostnameTmp; - PGconn *conn = getPgConn(); - if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); - PQfinish(conn); - exit(1); - } while (_run == 1) { - if(PQstatus(conn) != CONNECTION_OK) { - fprintf(stderr, "%s heartbeat thread lost connection to Database\n", _myAddressStr.c_str()); - PQfinish(conn); - exit(6); - } + // fprintf(stderr, "%s: heartbeat\n", controllerId); + auto c = _pool->borrow(); int64_t ts = OSUtils::now(); - if (conn) { + + if(c->c) { + pqxx::work w{*c->c}; + std::string major = std::to_string(ZEROTIER_ONE_VERSION_MAJOR); std::string minor = std::to_string(ZEROTIER_ONE_VERSION_MINOR); std::string rev = std::to_string(ZEROTIER_ONE_VERSION_REVISION); std::string build = std::to_string(ZEROTIER_ONE_VERSION_BUILD); std::string now = std::to_string(ts); std::string host_port = std::to_string(_listenPort); - std::string use_redis = "false"; // (_rc != NULL) ? "true" : "false"; - const char *values[10] = { - controllerId, - hostname, - now.c_str(), - publicIdentity, - major.c_str(), - minor.c_str(), - rev.c_str(), - build.c_str(), - host_port.c_str(), - use_redis.c_str() - }; - - PGresult *res = PQexecParams(conn, - "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis) " - "VALUES ($1, $2, TO_TIMESTAMP($3::double precision/1000), $4, $5, $6, $7, $8, $9, $10) " + std::string use_redis = (_rc != NULL) ? "true" : "false"; + + try { + pqxx::result res = w.exec0("INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis) " + "VALUES ("+w.quote(controllerId)+", "+w.quote(hostname)+", TO_TIMESTAMP("+now+"::double precision/1000), "+ + w.quote(publicIdentity)+", "+major+", "+minor+", "+rev+", "+build+", "+host_port+", "+use_redis+") " "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " "v_rev = EXCLUDED.v_rev, v_build = EXCLUDED.v_rev, host_port = EXCLUDED.host_port, " - "use_redis = EXCLUDED.use_redis", - 10, // number of parameters - NULL, // oid field. ignore - values, // values for substitution - NULL, // lengths in bytes of each value - NULL, // binary? - 0); - - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "Heartbeat Update Failed: %s\n", PQresultErrorMessage(res)); - } - PQclear(res); + "use_redis = EXCLUDED.use_redis"); + } catch (std::exception &e) { + fprintf(stderr, "Heartbeat update failed: %s\n", e.what()); + w.abort(); + _pool->unborrow(c); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + continue; + } + w.commit(); } - // if (_rc != NULL) { - // if (_rc->clusterMode) { - // _cluster->zadd("controllers", controllerId, ts); - // } else { - // _redis->zadd("controllers", controllerId, ts); - // } - // } + _pool->unborrow(c); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } - - PQfinish(conn); - conn = NULL; fprintf(stderr, "Exited heartbeat thread\n"); } void PostgreSQL::membersDbWatcher() { - PGconn *conn = getPgConn(NO_OVERRIDE); - if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); - PQfinish(conn); - exit(1); - } - if (_rc) { - PQfinish(conn); - conn = NULL; _membersWatcher_Redis(); } else { - _membersWatcher_Postgres(conn); - PQfinish(conn); - conn = NULL; + _membersWatcher_Postgres(); } if (_run == 1) { @@ -830,46 +854,19 @@ void PostgreSQL::membersDbWatcher() fprintf(stderr, "Exited membersDbWatcher\n"); } -void PostgreSQL::_membersWatcher_Postgres(PGconn *conn) { - char buf[11] = {0}; - std::string cmd = "LISTEN member_" + std::string(_myAddress.toString(buf)); - fprintf(stderr, "Listening to member stream: %s\n", cmd.c_str()); - PGresult *res = PQexec(conn, cmd.c_str()); - if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "LISTEN command failed: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQfinish(conn); - exit(1); - } +void PostgreSQL::_membersWatcher_Postgres() { + auto c = _pool->borrow(); - PQclear(res); res = NULL; + std::string stream = "member_" + _myAddressStr; + + fprintf(stderr, "Listening to member stream: %s\n", stream.c_str()); + MemberNotificationReceiver m(this, *c->c, stream); while(_run == 1) { - if (PQstatus(conn) != CONNECTION_OK) { - fprintf(stderr, "ERROR: Member Watcher lost connection to Postgres."); - exit(-1); - } - PGnotify *notify = NULL; - PQconsumeInput(conn); - while ((notify = PQnotifies(conn)) != NULL) { - //fprintf(stderr, "ASYNC NOTIFY of '%s' id:%s received\n", notify->relname, notify->extra); - - try { - json tmp(json::parse(notify->extra)); - json &ov = tmp["old_val"]; - json &nv = tmp["new_val"]; - json oldConfig, newConfig; - if (ov.is_object()) oldConfig = ov; - if (nv.is_object()) newConfig = nv; - if (oldConfig.is_object() || newConfig.is_object()) { - _memberChanged(oldConfig,newConfig,(this->_ready>=2)); - } - } catch (...) {} // ignore bad records - - free(notify); - } - std::this_thread::sleep_for(std::chrono::milliseconds(10)); + c->c->await_notification(5, 0); } + + _pool->unborrow(c); } void PostgreSQL::_membersWatcher_Redis() { @@ -932,21 +929,10 @@ void PostgreSQL::_membersWatcher_Redis() { void PostgreSQL::networksDbWatcher() { - PGconn *conn = getPgConn(NO_OVERRIDE); - if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); - PQfinish(conn); - exit(1); - } - if (_rc) { - PQfinish(conn); - conn = NULL; _networksWatcher_Redis(); } else { - _networksWatcher_Postgres(conn); - PQfinish(conn); - conn = NULL; + _networksWatcher_Postgres(); } if (_run == 1) { @@ -956,42 +942,17 @@ void PostgreSQL::networksDbWatcher() fprintf(stderr, "Exited networksDbWatcher\n"); } -void PostgreSQL::_networksWatcher_Postgres(PGconn *conn) { - char buf[11] = {0}; - std::string cmd = "LISTEN network_" + std::string(_myAddress.toString(buf)); - PGresult *res = PQexec(conn, cmd.c_str()); - if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "LISTEN command failed: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQfinish(conn); - exit(1); - } +void PostgreSQL::_networksWatcher_Postgres() { + std::string stream = "network_" + _myAddressStr; - PQclear(res); res = NULL; + fprintf(stderr, "Listening to member stream: %s\n", stream.c_str()); + + auto c = _pool->borrow(); + + NetworkNotificationReceiver n(this, *c->c, stream); while(_run == 1) { - if (PQstatus(conn) != CONNECTION_OK) { - fprintf(stderr, "ERROR: Network Watcher lost connection to Postgres."); - exit(-1); - } - PGnotify *notify = NULL; - PQconsumeInput(conn); - while ((notify = PQnotifies(conn)) != NULL) { - //fprintf(stderr, "ASYNC NOTIFY of '%s' id:%s received\n", notify->relname, notify->extra); - try { - json tmp(json::parse(notify->extra)); - json &ov = tmp["old_val"]; - json &nv = tmp["new_val"]; - json oldConfig, newConfig; - if (ov.is_object()) oldConfig = ov; - if (nv.is_object()) newConfig = nv; - if (oldConfig.is_object()||newConfig.is_object()) { - _networkChanged(oldConfig,newConfig,(this->_ready >= 2)); - } - } catch (...) {} // ignore bad records - free(notify); - } - std::this_thread::sleep_for(std::chrono::milliseconds(10)); + c->c->await_notification(5,0); } } @@ -1056,78 +1017,33 @@ void PostgreSQL::_networksWatcher_Redis() { void PostgreSQL::commitThread() { - PGconn *conn = getPgConn(); - if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "ERROR: Connection to database failed: %s\n", PQerrorMessage(conn)); - PQfinish(conn); - exit(1); - } - + fprintf(stderr, "%s: commitThread start\n", _myAddressStr.c_str()); std::pair qitem; while(_commitQueue.get(qitem)&(_run == 1)) { + //fprintf(stderr, "commitThread tick\n"); if (!qitem.first.is_object()) { + fprintf(stderr, "not an object\n"); continue; } - if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "ERROR: Connection to database failed: %s\n", PQerrorMessage(conn)); - PQfinish(conn); - exit(1); - } + try { nlohmann::json *config = &(qitem.first); const std::string objtype = (*config)["objtype"]; if (objtype == "member") { + // fprintf(stderr, "%s: commitThread: member\n", _myAddressStr.c_str()); try { + auto c = _pool->borrow(); + pqxx::work w(*c->c); + std::string memberId = (*config)["id"]; std::string networkId = (*config)["nwid"]; - std::string identity = (*config)["identity"]; std::string target = "NULL"; - if (!(*config)["remoteTraceTarget"].is_null()) { target = (*config)["remoteTraceTarget"]; } - - std::string caps = OSUtils::jsonDump((*config)["capabilities"], -1); - std::string lastAuthTime = std::to_string((long long)(*config)["lastAuthorizedTime"]); - std::string lastDeauthTime = std::to_string((long long)(*config)["lastDeauthorizedTime"]); - std::string rtraceLevel = std::to_string((int)(*config)["remoteTraceLevel"]); - std::string rev = std::to_string((unsigned long long)(*config)["revision"]); - std::string tags = OSUtils::jsonDump((*config)["tags"], -1); - std::string vmajor = std::to_string((int)(*config)["vMajor"]); - std::string vminor = std::to_string((int)(*config)["vMinor"]); - std::string vrev = std::to_string((int)(*config)["vRev"]); - std::string vproto = std::to_string((int)(*config)["vProto"]); - const char *values[19] = { - memberId.c_str(), - networkId.c_str(), - ((*config)["activeBridge"] ? "true" : "false"), - ((*config)["authorized"] ? "true" : "false"), - caps.c_str(), - identity.c_str(), - lastAuthTime.c_str(), - lastDeauthTime.c_str(), - ((*config)["noAutoAssignIps"] ? "true" : "false"), - rtraceLevel.c_str(), - (target == "NULL") ? NULL : target.c_str(), - rev.c_str(), - tags.c_str(), - vmajor.c_str(), - vminor.c_str(), - vrev.c_str(), - vproto.c_str() - }; - - PGresult *res = PQexec(conn, "BEGIN"); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error beginning update transaction: %s\n", PQresultErrorMessage(res)); - PQclear(res); - delete config; - config = nullptr; - continue; - } - - res = PQexecParams(conn, + + pqxx::result res = w.exec_params0( "INSERT INTO ztc_member (id, network_id, active_bridge, authorized, capabilities, " "identity, last_authorized_time, last_deauthorized_time, no_auto_assign_ips, " "remote_trace_level, remote_trace_target, revision, tags, v_major, v_minor, v_rev, v_proto) " @@ -1140,49 +1056,27 @@ void PostgreSQL::commitThread() "remote_trace_level = EXCLUDED.remote_trace_level, remote_trace_target = EXCLUDED.remote_trace_target, " "revision = EXCLUDED.revision+1, tags = EXCLUDED.tags, v_major = EXCLUDED.v_major, " "v_minor = EXCLUDED.v_minor, v_rev = EXCLUDED.v_rev, v_proto = EXCLUDED.v_proto", - 17, - NULL, - values, - NULL, - NULL, - 0); + memberId, + networkId, + (bool)(*config)["activeBridge"], + (bool)(*config)["authorized"], + OSUtils::jsonDump((*config)["capabilities"], -1), + OSUtils::jsonString((*config)["identity"], ""), + (uint64_t)(*config)["lastAuthorizedTime"], + (uint64_t)(*config)["lastDeauthorizedTime"], + (bool)(*config)["noAutoAssignIps"], + (int)(*config)["remoteTraceLevel"], + target, + (uint64_t)(*config)["revision"], + OSUtils::jsonDump((*config)["tags"], -1), + (int)(*config)["vMajor"], + (int)(*config)["vMinor"], + (int)(*config)["vRev"], + (int)(*config)["vProto"]); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating member: %s\n", PQresultErrorMessage(res)); - fprintf(stderr, "%s", OSUtils::jsonDump(*config, 2).c_str()); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - delete config; - config = nullptr; - continue; - } - PQclear(res); - - const char *v2[2] = { - memberId.c_str(), - networkId.c_str() - }; - - res = PQexecParams(conn, - "DELETE FROM ztc_member_ip_assignment WHERE member_id = $1 AND network_id = $2", - 2, - NULL, - v2, - NULL, - NULL, - 0); - - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating IP address assignments: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK"));; - delete config; - config = nullptr; - continue; - } - - PQclear(res); + res = w.exec_params0("DELETE FROM ztc_member_ip_assignment WHERE member_id = $1 AND network_id = $2", + memberId, networkId); std::vector assignments; bool ipAssignError = false; @@ -1193,46 +1087,21 @@ void PostgreSQL::commitThread() continue; } - const char *v3[3] = { - memberId.c_str(), - networkId.c_str(), - addr.c_str() - }; - - res = PQexecParams(conn, + res = w.exec_params0( "INSERT INTO ztc_member_ip_assignment (member_id, network_id, address) VALUES ($1, $2, $3) ON CONFLICT (network_id, member_id, address) DO NOTHING", - 3, - NULL, - v3, - NULL, - NULL, - 0); + memberId, networkId, addr); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error setting IP addresses for member: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - ipAssignError = true; - break; - } - PQclear(res); assignments.push_back(addr); } if (ipAssignError) { + fprintf(stderr, "%s: ipAssignError\n", _myAddressStr.c_str()); delete config; config = nullptr; continue; } - res = PQexec(conn, "COMMIT"); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error committing member transaction: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - delete config; - config = nullptr; - continue; - } + w.commit(); + _pool->unborrow(c); const uint64_t nwidInt = OSUtils::jsonIntHex((*config)["nwid"], 0ULL); const uint64_t memberidInt = OSUtils::jsonIntHex((*config)["id"], 0ULL); @@ -1246,66 +1115,27 @@ void PostgreSQL::commitThread() _memberChanged(memOrig, memNew, qitem.second); } else { - fprintf(stderr, "Can't notify of change. Error parsing nwid or memberid: %llu-%llu\n", (unsigned long long)nwidInt, (unsigned long long)memberidInt); + fprintf(stderr, "%s: Can't notify of change. Error parsing nwid or memberid: %llu-%llu\n", _myAddressStr.c_str(), (unsigned long long)nwidInt, (unsigned long long)memberidInt); } } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error updating member: %s\n", e.what()); + fprintf(stderr, "%s ERROR: Error updating member: %s\n", _myAddressStr.c_str(), e.what()); } } else if (objtype == "network") { try { + // fprintf(stderr, "%s: commitThread: network\n", _myAddressStr.c_str()); + auto c = _pool->borrow(); + pqxx::work w(*c->c); + std::string id = (*config)["id"]; - std::string controllerId = _myAddressStr.c_str(); - std::string name = (*config)["name"]; - std::string remoteTraceTarget("NULL"); - if (!(*config)["remoteTraceTarget"].is_null()) { + std::string remoteTraceTarget = ""; + if(!(*config)["remoteTraceTarget"].is_null()) { remoteTraceTarget = (*config)["remoteTraceTarget"]; } - std::string rulesSource; + std::string rulesSource = ""; if ((*config)["rulesSource"].is_string()) { rulesSource = (*config)["rulesSource"]; } - std::string caps = OSUtils::jsonDump((*config)["capabilitles"], -1); - std::string now = std::to_string(OSUtils::now()); - std::string mtu = std::to_string((int)(*config)["mtu"]); - std::string mcastLimit = std::to_string((int)(*config)["multicastLimit"]); - std::string rtraceLevel = std::to_string((int)(*config)["remoteTraceLevel"]); - std::string rules = OSUtils::jsonDump((*config)["rules"], -1); - std::string tags = OSUtils::jsonDump((*config)["tags"], -1); - std::string v4mode = OSUtils::jsonDump((*config)["v4AssignMode"],-1); - std::string v6mode = OSUtils::jsonDump((*config)["v6AssignMode"], -1); - bool enableBroadcast = (*config)["enableBroadcast"]; - bool isPrivate = (*config)["private"]; - - const char *values[16] = { - id.c_str(), - controllerId.c_str(), - caps.c_str(), - enableBroadcast ? "true" : "false", - now.c_str(), - mtu.c_str(), - mcastLimit.c_str(), - name.c_str(), - isPrivate ? "true" : "false", - rtraceLevel.c_str(), - (remoteTraceTarget == "NULL" ? NULL : remoteTraceTarget.c_str()), - rules.c_str(), - rulesSource.c_str(), - tags.c_str(), - v4mode.c_str(), - v6mode.c_str(), - }; - - PGresult *res = PQexec(conn, "BEGIN"); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error beginnning transaction: %s\n", PQresultErrorMessage(res)); - PQclear(res); - delete config; - config = nullptr; - continue; - } - - PQclear(res); // This ugly query exists because when we want to mirror networks to/from // another data store (e.g. FileDB or LFDB) it is possible to get a network @@ -1313,15 +1143,15 @@ void PostgreSQL::commitThread() // the owner_id to the "first" global admin in the user DB if the record // did not previously exist. If the record already exists owner_id is left // unchanged, so owner_id should be left out of the update clause. - res = PQexecParams(conn, + pqxx::result res = w.exec_params0( "INSERT INTO ztc_network (id, creation_time, owner_id, controller_id, capabilities, enable_broadcast, " "last_modified, mtu, multicast_limit, name, private, " "remote_trace_level, remote_trace_target, rules, rules_source, " - "tags, v4_assign_mode, v6_assign_mode) VALUES (" + "tags, v4_assign_mode, v6_assign_mode, sso_enabled) VALUES (" "$1, TO_TIMESTAMP($5::double precision/1000), " "(SELECT user_id AS owner_id FROM ztc_global_permissions WHERE authorize = true AND del = true AND modify = true AND read = true LIMIT 1)," "$2, $3, $4, TO_TIMESTAMP($5::double precision/1000), " - "$6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16) " + "$6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, 17) " "ON CONFLICT (id) DO UPDATE set controller_id = EXCLUDED.controller_id, " "capabilities = EXCLUDED.capabilities, enable_broadcast = EXCLUDED.enable_broadcast, " "last_modified = EXCLUDED.last_modified, mtu = EXCLUDED.mtu, " @@ -1329,101 +1159,40 @@ void PostgreSQL::commitThread() "private = EXCLUDED.private, remote_trace_level = EXCLUDED.remote_trace_level, " "remote_trace_target = EXCLUDED.remote_trace_target, rules = EXCLUDED.rules, " "rules_source = EXCLUDED.rules_source, tags = EXCLUDED.tags, " - "v4_assign_mode = EXCLUDED.v4_assign_mode, v6_assign_mode = EXCLUDED.v6_assign_mode", - 16, - NULL, - values, - NULL, - NULL, - 0); + "v4_assign_mode = EXCLUDED.v4_assign_mode, v6_assign_mode = EXCLUDED.v6_assign_mode, " + "sso_enabled = EXCLUDED.sso_enabled", + id, + _myAddressStr, + OSUtils::jsonDump((*config)["capabilitles"], -1), + (bool)(*config)["enableBroadcast"], + OSUtils::now(), + (int)(*config)["mtu"], + (int)(*config)["multicastLimit"], + OSUtils::jsonString((*config)["name"],""), + (bool)(*config)["private"], + (int)(*config)["remoteTraceLevel"], + remoteTraceTarget, + OSUtils::jsonDump((*config)["rules"], -1), + rulesSource, + OSUtils::jsonDump((*config)["tags"], -1), + OSUtils::jsonDump((*config)["v4AssignMode"],-1), + OSUtils::jsonDump((*config)["v6AssignMode"], -1), + OSUtils::jsonBool((*config)["ssoEnabled"], false)); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating network record: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - delete config; - config = nullptr; - continue; - } - - PQclear(res); - - const char *params[1] = { - id.c_str() - }; - res = PQexecParams(conn, - "DELETE FROM ztc_network_assignment_pool WHERE network_id = $1", - 1, - NULL, - params, - NULL, - NULL, - 0); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating assignment pool: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - delete config; - config = nullptr; - continue; - } - - PQclear(res); + res = w.exec_params0("DELETE FROM ztc_network_assignment_pool WHERE network_id = $1", 0); auto pool = (*config)["ipAssignmentPools"]; bool err = false; for (auto i = pool.begin(); i != pool.end(); ++i) { std::string start = (*i)["ipRangeStart"]; std::string end = (*i)["ipRangeEnd"]; - const char *p[3] = { - id.c_str(), - start.c_str(), - end.c_str() - }; - res = PQexecParams(conn, + res = w.exec_params0( "INSERT INTO ztc_network_assignment_pool (network_id, ip_range_start, ip_range_end) " - "VALUES ($1, $2, $3)", - 3, - NULL, - p, - NULL, - NULL, - 0); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating assignment pool: %s\n", PQresultErrorMessage(res)); - PQclear(res); - err = true; - break; - } - PQclear(res); - } - if (err) { - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - delete config; - config = nullptr; - continue; - } - - res = PQexecParams(conn, - "DELETE FROM ztc_network_route WHERE network_id = $1", - 1, - NULL, - params, - NULL, - NULL, - 0); - - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating routes: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - delete config; - config = nullptr; - continue; + "VALUES ($1, $2, $3)", id, start, end); } + res = w.exec_params0("DELETE FROM ztc_network_route WHERE network_id = $1", id); auto routes = (*config)["routes"]; err = false; @@ -1445,36 +1214,18 @@ void PostgreSQL::commitThread() via = (*i)["via"]; } - const char *p[4] = { - id.c_str(), - targetAddr.c_str(), - targetBits.c_str(), - (via == "NULL" ? NULL : via.c_str()), - }; - - res = PQexecParams(conn, - "INSERT INTO ztc_network_route (network_id, address, bits, via) VALUES ($1, $2, $3, $4)", - 4, - NULL, - p, - NULL, - NULL, - 0); - - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating routes: %s\n", PQresultErrorMessage(res)); - PQclear(res); - err = true; - break; - } - PQclear(res); + res = w.exec_params0("INSERT INTO ztc_network_route (network_id, address, bits, via) VALUES ($1, $2, $3, $4)", + id, targetAddr, targetBits, (via == "NULL" ? NULL : via.c_str())); } if (err) { - PQclear(PQexec(conn, "ROLLBACK")); + fprintf(stderr, "%s: route add error\n", _myAddressStr.c_str()); + w.abort(); + _pool->unborrow(c); delete config; config = nullptr; continue; } + auto dns = (*config)["dns"]; std::string domain = dns["domain"]; std::stringstream servers; @@ -1487,38 +1238,13 @@ void PostgreSQL::commitThread() } servers << "}"; - const char *p[3] = { - id.c_str(), - domain.c_str(), - servers.str().c_str() - }; + std::string s = servers.str(); - res = PQexecParams(conn, "INSERT INTO ztc_network_dns (network_id, domain, servers) VALUES ($1, $2, $3) ON CONFLICT (network_id) DO UPDATE SET domain = EXCLUDED.domain, servers = EXCLUDED.servers", - 3, - NULL, - p, - NULL, - NULL, - 0); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error updating DNS: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - err = true; - break; - } - PQclear(res); + res = w.exec_params0("INSERT INTO ztc_network_dns (network_id, domain, servers) VALUES ($1, $2, $3) ON CONFLICT (network_id) DO UPDATE SET domain = EXCLUDED.domain, servers = EXCLUDED.servers", + id, domain, s); - res = PQexec(conn, "COMMIT"); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error committing network update: %s\n", PQresultErrorMessage(res)); - PQclear(res); - PQclear(PQexec(conn, "ROLLBACK")); - delete config; - config = nullptr; - continue; - } - PQclear(res); + w.commit(); + _pool->unborrow(c); const uint64_t nwidInt = OSUtils::jsonIntHex((*config)["nwid"], 0ULL); if (nwidInt) { @@ -1529,207 +1255,119 @@ void PostgreSQL::commitThread() _networkChanged(nwOrig, nwNew, qitem.second); } else { - fprintf(stderr, "Can't notify network changed: %llu\n", (unsigned long long)nwidInt); + fprintf(stderr, "%s: Can't notify network changed: %llu\n", _myAddressStr.c_str(), (unsigned long long)nwidInt); } } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error updating member: %s\n", e.what()); + fprintf(stderr, "%s ERROR: Error updating network: %s\n", _myAddressStr.c_str(), e.what()); } - // if (_rc != NULL) { - // try { - // std::string id = (*config)["id"]; - // std::string controllerId = _myAddressStr.c_str(); - // std::string key = "networks:{" + controllerId + "}"; - // if (_rc->clusterMode) { - // _cluster->sadd(key, id); - // } else { - // _redis->sadd(key, id); - // } - // } catch (sw::redis::Error &e) { - // fprintf(stderr, "ERROR: Error adding network to Redis: %s\n", e.what()); - // } - // } } else if (objtype == "_delete_network") { + // fprintf(stderr, "%s: commitThread: delete network\n", _myAddressStr.c_str()); try { + auto c = _pool->borrow(); + pqxx::work w(*c->c); + std::string networkId = (*config)["nwid"]; - const char *values[1] = { - networkId.c_str() - }; - PGresult * res = PQexecParams(conn, - "UPDATE ztc_network SET deleted = true WHERE id = $1", - 1, - NULL, - values, - NULL, - NULL, - 0); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error deleting network: %s\n", PQresultErrorMessage(res)); - } + pqxx::result res = w.exec_params0("UPDATE ztc_network SET deleted = true WHERE id = $1", + networkId); - PQclear(res); + w.commit(); + _pool->unborrow(c); } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error deleting network: %s\n", e.what()); + fprintf(stderr, "%s ERROR: Error deleting network: %s\n", _myAddressStr.c_str(), e.what()); } - // if (_rc != NULL) { - // try { - // std::string id = (*config)["id"]; - // std::string controllerId = _myAddressStr.c_str(); - // std::string key = "networks:{" + controllerId + "}"; - // if (_rc->clusterMode) { - // _cluster->srem(key, id); - // _cluster->del("network-nodes-online:{"+controllerId+"}:"+id); - // } else { - // _redis->srem(key, id); - // _redis->del("network-nodes-online:{"+controllerId+"}:"+id); - // } - // } catch (sw::redis::Error &e) { - // fprintf(stderr, "ERROR: Error adding network to Redis: %s\n", e.what()); - // } - // } + } else if (objtype == "_delete_member") { + // fprintf(stderr, "%s commitThread: delete member\n", _myAddressStr.c_str()); try { + auto c = _pool->borrow(); + pqxx::work w(*c->c); + std::string memberId = (*config)["id"]; std::string networkId = (*config)["nwid"]; - const char *values[2] = { - memberId.c_str(), - networkId.c_str() - }; - - PGresult *res = PQexecParams(conn, + pqxx::result res = w.exec_params0( "UPDATE ztc_member SET hidden = true, deleted = true WHERE id = $1 AND network_id = $2", - 2, - NULL, - values, - NULL, - NULL, - 0); + memberId, networkId); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "ERROR: Error deleting member: %s\n", PQresultErrorMessage(res)); - } - - PQclear(res); + w.commit(); + _pool->unborrow(c); } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error deleting member: %s\n", e.what()); + fprintf(stderr, "%s ERROR: Error deleting member: %s\n", _myAddressStr.c_str(), e.what()); } - // if (_rc != NULL) { - // try { - // std::string memberId = (*config)["id"]; - // std::string networkId = (*config)["nwid"]; - // std::string controllerId = _myAddressStr.c_str(); - // std::string key = "network-nodes-all:{" + controllerId + "}:" + networkId; - // if (_rc->clusterMode) { - // _cluster->srem(key, memberId); - // _cluster->del("member:{"+controllerId+"}:"+networkId+":"+memberId); - // } else { - // _redis->srem(key, memberId); - // _redis->del("member:{"+controllerId+"}:"+networkId+":"+memberId); - // } - // } catch (sw::redis::Error &e) { - // fprintf(stderr, "ERROR: Error deleting member from Redis: %s\n", e.what()); - // } - // } } else { - fprintf(stderr, "ERROR: unknown objtype"); + fprintf(stderr, "%s ERROR: unknown objtype\n", _myAddressStr.c_str()); } } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error getting objtype: %s\n", e.what()); + fprintf(stderr, "%s ERROR: Error getting objtype: %s\n", _myAddressStr.c_str(), e.what()); } - std::this_thread::sleep_for(std::chrono::milliseconds(100)); } - PQfinish(conn); - if (_run == 1) { - fprintf(stderr, "ERROR: %s commitThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); - exit(7); - } - fprintf(stderr, "commitThread finished\n"); + fprintf(stderr, "%s commitThread finished\n", _myAddressStr.c_str()); } void PostgreSQL::onlineNotificationThread() { waitForReady(); - - // if (_rc != NULL) { - // onlineNotification_Redis(); - // } else { - onlineNotification_Postgres(); - // } + onlineNotification_Postgres(); } void PostgreSQL::onlineNotification_Postgres() { - PGconn *conn = getPgConn(); - if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); - PQfinish(conn); - exit(1); - } _connected = 1; nlohmann::json jtmp1, jtmp2; while (_run == 1) { - if (PQstatus(conn) != CONNECTION_OK) { - fprintf(stderr, "ERROR: Online Notification thread lost connection to Postgres."); - PQfinish(conn); - exit(5); - } - - std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; - { - std::lock_guard l(_lastOnline_l); - lastOnline.swap(_lastOnline); - } - - PGresult *res = NULL; - - std::stringstream memberUpdate; - memberUpdate << "INSERT INTO ztc_member_status (network_id, member_id, address, last_updated) VALUES "; - bool firstRun = true; - bool memberAdded = false; - for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) { - uint64_t nwid_i = i->first.first; - char nwidTmp[64]; - char memTmp[64]; - char ipTmp[64]; - OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i); - OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", i->first.second); - - if(!get(nwid_i, jtmp1, i->first.second, jtmp2)) { - continue; // skip non existent networks/members + auto c = _pool->borrow(); + try { + fprintf(stderr, "%s onlineNotification_Postgres\n", _myAddressStr.c_str()); + std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; + { + std::lock_guard l(_lastOnline_l); + lastOnline.swap(_lastOnline); } + + pqxx::work w(*c->c); - std::string networkId(nwidTmp); - std::string memberId(memTmp); + // using pqxx::stream_to would be a really nice alternative here, but + // unfortunately it doesn't support upserts. + // fprintf(stderr, "online notification tick\n"); + std::stringstream memberUpdate; + memberUpdate << "INSERT INTO ztc_member_status (network_id, member_id, address, last_updated) VALUES "; + bool firstRun = true; + bool memberAdded = false; + int updateCount = 0; + for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) { + updateCount += 1; + uint64_t nwid_i = i->first.first; + char nwidTmp[64]; + char memTmp[64]; + char ipTmp[64]; + OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i); + OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", i->first.second); - const char *qvals[2] = { - networkId.c_str(), - memberId.c_str() - }; + if(!get(nwid_i, jtmp1, i->first.second, jtmp2)) { + continue; // skip non existent networks/members + } - res = PQexecParams(conn, - "SELECT id, network_id FROM ztc_member WHERE network_id = $1 AND id = $2", - 2, - NULL, - qvals, - NULL, - NULL, - 0); + std::string networkId(nwidTmp); + std::string memberId(memTmp); - if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, "Member count failed: %s", PQerrorMessage(conn)); - PQclear(res); - continue; - } + const char *qvals[2] = { + networkId.c_str(), + memberId.c_str() + }; - int nrows = PQntuples(res); - PQclear(res); + try { + pqxx::row r = w.exec_params1("SELECT id, network_id FROM ztc_member WHERE network_id = $1 AND id = $2", + networkId, memberId); + } catch (pqxx::unexpected_rows &e) { + // fprintf(stderr, "Member count failed: %s\n", e.what()); + continue; + } - if (nrows == 1) { int64_t ts = i->second.first; std::string ipAddr = i->second.second.toIpString(ipTmp); std::string timestamp = std::to_string(ts); @@ -1748,27 +1386,27 @@ void PostgreSQL::onlineNotification_Postgres() } memberUpdate << "TO_TIMESTAMP(" << timestamp << "::double precision/1000))"; memberAdded = true; - } else if (nrows > 1) { - fprintf(stderr, "nrows > 1?!?"); - continue; - } else { - continue; } - } - memberUpdate << " ON CONFLICT (network_id, member_id) DO UPDATE SET address = EXCLUDED.address, last_updated = EXCLUDED.last_updated;"; + memberUpdate << " ON CONFLICT (network_id, member_id) DO UPDATE SET address = EXCLUDED.address, last_updated = EXCLUDED.last_updated;"; - if (memberAdded) { - res = PQexec(conn, memberUpdate.str().c_str()); - if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, "Multiple insert failed: %s", PQerrorMessage(conn)); + if (memberAdded) { + //fprintf(stderr, "%s\n", memberUpdate.str().c_str()); + pqxx::result res = w.exec0(memberUpdate.str()); + w.commit(); } - PQclear(res); - } + fprintf(stderr, "%s: Updated online status of %d members\n", _myAddressStr.c_str(), updateCount); + } catch (std::exception &e) { + fprintf(stderr, "%s: error in onlinenotification thread: %s\n", _myAddressStr.c_str(), e.what()); + } + _pool->unborrow(c); + + ConnectionPoolStats stats = _pool->get_stats(); + fprintf(stderr, "%s pool stats: in use size: %llu, available size: %llu, total: %llu\n", + _myAddressStr.c_str(), stats.borrowed_size, stats.pool_size, (stats.borrowed_size + stats.pool_size)); std::this_thread::sleep_for(std::chrono::seconds(10)); } fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); - PQfinish(conn); if (_run == 1) { fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); exit(6); @@ -1864,20 +1502,5 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control tx.exec(); } -PGconn *PostgreSQL::getPgConn(OverrideMode m) -{ - if (m == ALLOW_PGBOUNCER_OVERRIDE) { - char *connStr = getenv("PGBOUNCER_CONNSTR"); - if (connStr != NULL) { - fprintf(stderr, "PGBouncer Override\n"); - std::string conn(connStr); - conn += " application_name=controller-"; - conn += _myAddressStr.c_str(); - return PQconnectdb(conn.c_str()); - } - } - - return PQconnectdb(_connString.c_str()); -} #endif //ZT_CONTROLLER_USE_LIBPQ diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp index c1d9dfd1a..637b29749 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -20,6 +20,9 @@ #define ZT_CENTRAL_CONTROLLER_COMMIT_THREADS 4 +#include "ConnectionPool.hpp" +#include + #include #include @@ -31,14 +34,69 @@ namespace ZeroTier { struct RedisConfig; + +class PostgresConnection : public Connection { +public: + virtual ~PostgresConnection() { + } + + std::shared_ptr c; + int a; +}; + + +class PostgresConnFactory : public ConnectionFactory { +public: + PostgresConnFactory(std::string &connString) + : m_connString(connString) + { + } + + virtual std::shared_ptr create() { + auto c = std::shared_ptr(new PostgresConnection()); + c->c = std::make_shared(m_connString); + return std::static_pointer_cast(c); + } +private: + std::string m_connString; +}; + +class PostgreSQL; + +class MemberNotificationReceiver : public pqxx::notification_receiver { +public: + MemberNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel); + virtual ~MemberNotificationReceiver() { + fprintf(stderr, "MemberNotificationReceiver destroyed\n"); + } + + virtual void operator() (const std::string &payload, int backendPid); +private: + PostgreSQL *_psql; +}; + +class NetworkNotificationReceiver : public pqxx::notification_receiver { +public: + NetworkNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel); + virtual ~NetworkNotificationReceiver() { + fprintf(stderr, "NetworkNotificationReceiver destroyed\n"); + }; + + virtual void operator() (const std::string &payload, int packend_pid); +private: + PostgreSQL *_psql; +}; + /** * A controller database driver that talks to PostgreSQL * * This is for use with ZeroTier Central. Others are free to build and use it - * but be aware taht we might change it at any time. + * but be aware that we might change it at any time. */ class PostgreSQL : public DB { + friend class MemberNotificationReceiver; + friend class NetworkNotificationReceiver; public: PostgreSQL(const Identity &myId, const char *path, int listenPort, RedisConfig *rc); virtual ~PostgreSQL(); @@ -49,21 +107,29 @@ public: virtual void eraseNetwork(const uint64_t networkId); virtual void eraseMember(const uint64_t networkId, const uint64_t memberId); virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress &physicalAddress); + virtual std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL); protected: struct _PairHasher { inline std::size_t operator()(const std::pair &p) const { return (std::size_t)(p.first ^ p.second); } }; + virtual void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners) { + DB::_memberChanged(old, memberConfig, notifyListeners); + } + + virtual void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners) { + DB::_networkChanged(old, networkConfig, notifyListeners); + } private: - void initializeNetworks(PGconn *conn); - void initializeMembers(PGconn *conn); + void initializeNetworks(); + void initializeMembers(); void heartbeat(); void membersDbWatcher(); - void _membersWatcher_Postgres(PGconn *conn); + void _membersWatcher_Postgres(); void networksDbWatcher(); - void _networksWatcher_Postgres(PGconn *conn); + void _networksWatcher_Postgres(); void _membersWatcher_Redis(); void _networksWatcher_Redis(); @@ -80,7 +146,7 @@ private: NO_OVERRIDE = 1 }; - PGconn * getPgConn( OverrideMode m = ALLOW_PGBOUNCER_OVERRIDE ); + std::shared_ptr > _pool; const Identity _myId; const Address _myAddress; @@ -103,6 +169,7 @@ private: mutable volatile bool _waitNoticePrinted; int _listenPort; + uint8_t _ssoPsk[48]; RedisConfig *_rc; std::shared_ptr _redis; diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index 83c4a4787..2bdea6474 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -420,157 +420,6 @@ enum ZT_ResultCode */ #define ZT_ResultCode_isFatal(x) ((((int)(x)) >= 100)&&(((int)(x)) < 1000)) - -/** - * Multipath bonding policy - */ -enum ZT_MultipathBondingPolicy -{ - /** - * Normal operation. No fault tolerance, no load balancing - */ - ZT_BONDING_POLICY_NONE = 0, - - /** - * Sends traffic out on only one path at a time. Configurable immediate - * fail-over. - */ - ZT_BONDING_POLICY_ACTIVE_BACKUP = 1, - - /** - * Sends traffic out on all paths - */ - ZT_BONDING_POLICY_BROADCAST = 2, - - /** - * Stripes packets across all paths - */ - ZT_BONDING_POLICY_BALANCE_RR = 3, - - /** - * Packets destined for specific peers will always be sent over the same - * path. - */ - ZT_BONDING_POLICY_BALANCE_XOR = 4, - - /** - * Balances flows among all paths according to path performance - */ - ZT_BONDING_POLICY_BALANCE_AWARE = 5 -}; - -/** - * Multipath active re-selection policy (linkSelectMethod) - */ -enum ZT_MultipathLinkSelectMethod -{ - /** - * Primary link regains status as active link whenever it comes back up - * (default when links are explicitly specified) - */ - ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS = 0, - - /** - * Primary link regains status as active link when it comes back up and - * (if) it is better than the currently-active link. - */ - ZT_MULTIPATH_RESELECTION_POLICY_BETTER = 1, - - /** - * Primary link regains status as active link only if the currently-active - * link fails. - */ - ZT_MULTIPATH_RESELECTION_POLICY_FAILURE = 2, - - /** - * The primary link can change if a superior path is detected. - * (default if user provides no fail-over guidance) - */ - ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE = 3 -}; - -/** - * Mode of multipath link interface - */ -enum ZT_MultipathLinkMode -{ - ZT_MULTIPATH_SLAVE_MODE_PRIMARY = 0, - ZT_MULTIPATH_SLAVE_MODE_SPARE = 1 -}; - -/** - * Strategy for path monitoring - */ -enum ZT_MultipathMonitorStrategy -{ - /** - * Use bonding policy's default strategy - */ - ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DEFAULT = 0, - - /** - * Does not actively send probes to judge aliveness, will rely - * on conventional traffic and summary statistics. - */ - ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE = 1, - - /** - * Sends probes at a constant rate to judge aliveness. - */ - ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_ACTIVE = 2, - - /** - * Sends probes at varying rates which correlate to native - * traffic loads to judge aliveness. - */ - ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC = 3 -}; - -/** - * Strategy for re-balancing protocol flows - */ -enum ZT_MultipathFlowRebalanceStrategy -{ - /** - * Flows will only be re-balanced among links during - * assignment or failover. This minimizes the possibility - * of sequence reordering and is thus the default setting. - */ - ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE = 0, - - /** - * Flows that are active may be re-assigned to a new more - * suitable link if it can be done without disrupting the flow. - * This setting can sometimes cause sequence re-ordering. - */ - ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_OPPORTUNISTIC = 0, - - /** - * Flows will be continuously re-assigned the most suitable link - * in order to maximize "balance". This can often cause sequence - * reordering and is thus only reccomended for protocols like UDP. - */ - ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE = 2 -}; - -/** - * Indices for the path quality weight vector - */ -enum ZT_MultipathQualityWeightIndex -{ - ZT_QOS_LAT_IDX, - ZT_QOS_LTM_IDX, - ZT_QOS_PDV_IDX, - ZT_QOS_PLR_IDX, - ZT_QOS_PER_IDX, - ZT_QOS_THR_IDX, - ZT_QOS_THM_IDX, - ZT_QOS_THV_IDX, - ZT_QOS_AGE_IDX, - ZT_QOS_SCP_IDX, - ZT_QOS_WEIGHT_SIZE -}; - /** * Status codes sent to status update callback when things happen */ @@ -820,7 +669,12 @@ enum ZT_VirtualNetworkStatus /** * ZeroTier core version too old */ - ZT_NETWORK_STATUS_CLIENT_TOO_OLD = 5 + ZT_NETWORK_STATUS_CLIENT_TOO_OLD = 5, + + /** + * External authentication is required (e.g. SSO) + */ + ZT_NETWORK_STATUS_AUTHENTICATION_REQUIRED = 6 }; /** @@ -1339,6 +1193,21 @@ typedef struct * Network specific DNS configuration */ ZT_VirtualNetworkDNS dns; + + /** + * sso enabled + */ + bool ssoEnabled; + + /** + * If the status us AUTHENTICATION_REQUIRED, this may contain a URL for authentication. + */ + char authenticationURL[2048]; + + /** + * Time that current authentication expires. only valid if ssoEnabled is true + */ + uint64_t authenticationExpiryTime; } ZT_VirtualNetworkConfig; /** diff --git a/node/Bond.cpp b/node/Bond.cpp index d6a16ad86..cf4b4eabd 100644 --- a/node/Bond.cpp +++ b/node/Bond.cpp @@ -1,102 +1,267 @@ /* - * Copyright (c)2013-2020 ZeroTier, Inc. + * Copyright (c)2013-2021 ZeroTier, Inc. * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file in the project's root directory. * - * Change Date: 2025-01-01 + * Change Date: 2026-01-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2.0 of the Apache License. */ /****/ -#include - -#include "../osdep/OSUtils.hpp" - -#include "Peer.hpp" #include "Bond.hpp" #include "Switch.hpp" -#include "Flow.hpp" -#include "Path.hpp" + +#include +#include namespace ZeroTier { -Bond::Bond(const RuntimeEnvironment *renv, int policy, const SharedPtr& peer) : - RR(renv), - _peer(peer), - _qosCutoffCount(0), - _ackCutoffCount(0), - _lastAckRateCheck(0), - _lastQoSRateCheck(0), - _lastQualityEstimation(0), - _lastCheckUserPreferences(0), - _lastBackgroundTaskCheck(0), - _lastBondStatusLog(0), - _lastPathNegotiationReceived(0), - _lastPathNegotiationCheck(0), - _lastSentPathNegotiationRequest(0), - _lastFlowStatReset(0), - _lastFlowExpirationCheck(0), - _lastFlowRebalance(0), - _lastFrame(0), - _lastActiveBackupPathChange(0) +static unsigned char s_freeRandomByteCounter = 0; + +int Bond::_minReqMonitorInterval = ZT_BOND_FAILOVER_DEFAULT_INTERVAL; +uint8_t Bond::_defaultPolicy = ZT_BOND_POLICY_NONE; + +Phy* Bond::_phy; + +Mutex Bond::_bonds_m; +Mutex Bond::_links_m; + +std::string Bond::_defaultPolicyStr; +std::map > Bond::_bonds; +std::map Bond::_policyTemplateAssignments; +std::map > Bond::_bondPolicyTemplates; +std::map > > Bond::_linkDefinitions; +std::map > > Bond::_interfaceToLinkMap; + +bool Bond::linkAllowed(std::string& policyAlias, SharedPtr link) { - setReasonableDefaults(policy, SharedPtr(), false); - _policyAlias = BondController::getPolicyStrByCode(policy); + bool foundInDefinitions = false; + if (_linkDefinitions.count(policyAlias)) { + auto it = _linkDefinitions[policyAlias].begin(); + while (it != _linkDefinitions[policyAlias].end()) { + if (link->ifname() == (*it)->ifname()) { + foundInDefinitions = true; + break; + } + ++it; + } + } + return _linkDefinitions[policyAlias].empty() || foundInDefinitions; } -Bond::Bond(const RuntimeEnvironment *renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer) : - RR(renv), - _policyAlias(policyAlias), - _peer(peer) +void Bond::addCustomLink(std::string& policyAlias, SharedPtr link) { - setReasonableDefaults(BondController::getPolicyCodeByStr(basePolicy), SharedPtr(), false); + Mutex::Lock _l(_links_m); + _linkDefinitions[policyAlias].push_back(link); + auto search = _interfaceToLinkMap[policyAlias].find(link->ifname()); + if (search == _interfaceToLinkMap[policyAlias].end()) { + link->setAsUserSpecified(true); + _interfaceToLinkMap[policyAlias].insert(std::pair >(link->ifname(), link)); + } } -Bond::Bond(const RuntimeEnvironment *renv, SharedPtr originalBond, const SharedPtr& peer) : - RR(renv), - _peer(peer), - _lastAckRateCheck(0), - _lastQoSRateCheck(0), - _lastQualityEstimation(0), - _lastCheckUserPreferences(0), - _lastBackgroundTaskCheck(0), - _lastBondStatusLog(0), - _lastPathNegotiationReceived(0), - _lastPathNegotiationCheck(0), - _lastFlowStatReset(0), - _lastFlowExpirationCheck(0), - _lastFlowRebalance(0), - _lastFrame(0) +bool Bond::addCustomPolicy(const SharedPtr& newBond) { - setReasonableDefaults(originalBond->_bondingPolicy, originalBond, true); + Mutex::Lock _l(_bonds_m); + if (! _bondPolicyTemplates.count(newBond->policyAlias())) { + _bondPolicyTemplates[newBond->policyAlias()] = newBond; + return true; + } + return false; } -void Bond::nominatePath(const SharedPtr& path, int64_t now) +bool Bond::assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias) { - char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + Mutex::Lock _l(_bonds_m); + if (! _policyTemplateAssignments.count(identity)) { + _policyTemplateAssignments[identity] = policyAlias; + return true; + } + return false; +} + +SharedPtr Bond::getBondByPeerId(int64_t identity) +{ + Mutex::Lock _l(_bonds_m); + return _bonds.count(identity) ? _bonds[identity] : SharedPtr(); +} + +SharedPtr Bond::createTransportTriggeredBond(const RuntimeEnvironment* renv, const SharedPtr& peer) +{ + Mutex::Lock _l(_bonds_m); + int64_t identity = peer->identity().address().toInt(); + Bond* bond = nullptr; + if (! _bonds.count(identity)) { + std::string policyAlias; + if (! _policyTemplateAssignments.count(identity)) { + if (_defaultPolicy) { + bond = new Bond(renv, _defaultPolicy, peer); + bond->log("new default bond"); + } + if (! _defaultPolicy && _defaultPolicyStr.length()) { + bond = new Bond(renv, _bondPolicyTemplates[_defaultPolicyStr].ptr(), peer); + bond->log("new default custom bond"); + } + } + else { + if (! _bondPolicyTemplates[_policyTemplateAssignments[identity]]) { + bond = new Bond(renv, _defaultPolicy, peer); + bond->log("peer-specific bond, was specified as %s but the bond definition was not found, using default %s", _policyTemplateAssignments[identity].c_str(), getPolicyStrByCode(_defaultPolicy).c_str()); + } + else { + bond = new Bond(renv, _bondPolicyTemplates[_policyTemplateAssignments[identity]].ptr(), peer); + bond->log("new default bond"); + } + } + } + if (bond) { + _bonds[identity] = bond; + /** + * Determine if user has specified anything that could affect the bonding policy's decisions + */ + if (_interfaceToLinkMap.count(bond->policyAlias())) { + std::map >::iterator it = _interfaceToLinkMap[bond->policyAlias()].begin(); + while (it != _interfaceToLinkMap[bond->policyAlias()].end()) { + if (it->second->isUserSpecified()) { + bond->_userHasSpecifiedLinks = true; + } + if (it->second->isUserSpecified() && it->second->primary()) { + bond->_userHasSpecifiedPrimaryLink = true; + } + if (it->second->isUserSpecified() && it->second->userHasSpecifiedFailoverInstructions()) { + bond->_userHasSpecifiedFailoverInstructions = true; + } + if (it->second->isUserSpecified() && (it->second->speed() > 0)) { + bond->_userHasSpecifiedLinkSpeeds = true; + } + ++it; + } + } + return bond; + } + return SharedPtr(); +} + +SharedPtr Bond::getLinkBySocket(const std::string& policyAlias, uint64_t localSocket) +{ + Mutex::Lock _l(_links_m); + char ifname[32] = { 0 }; // 256 because interfaces on Windows can potentially be that long + _phy->getIfName((PhySocket*)((uintptr_t)localSocket), ifname, sizeof(ifname) - 1); + // fprintf(stderr, "ifname %s\n",ifname); + std::string ifnameStr(ifname); + auto search = _interfaceToLinkMap[policyAlias].find(ifnameStr); + if (search == _interfaceToLinkMap[policyAlias].end()) { + // If the link wasn't already known, add a new entry + // fprintf(stderr, "adding new link?? %s\n", ifnameStr.c_str()); + SharedPtr s = new Link(ifnameStr, 0, 0, true, ZT_BOND_SLAVE_MODE_SPARE, "", 0.0); + _interfaceToLinkMap[policyAlias].insert(std::pair >(ifnameStr, s)); + return s; + } + else { + return search->second; + } +} + +SharedPtr Bond::getLinkByName(const std::string& policyAlias, const std::string& ifname) +{ + Mutex::Lock _l(_links_m); + auto search = _interfaceToLinkMap[policyAlias].find(ifname); + if (search != _interfaceToLinkMap[policyAlias].end()) { + return search->second; + } + return SharedPtr(); +} + +void Bond::processBackgroundTasks(void* tPtr, const int64_t now) +{ + unsigned long _currMinReqMonitorInterval = ZT_BOND_FAILOVER_DEFAULT_INTERVAL; + Mutex::Lock _l(_bonds_m); + std::map >::iterator bondItr = _bonds.begin(); + while (bondItr != _bonds.end()) { + // Update Bond Controller's background processing timer + _currMinReqMonitorInterval = std::min(_currMinReqMonitorInterval, (unsigned long)(bondItr->second->monitorInterval())); + // Process bond tasks + bondItr->second->processBackgroundBondTasks(tPtr, now); + ++bondItr; + } + _minReqMonitorInterval = std::min(_currMinReqMonitorInterval, (unsigned long)ZT_BOND_FAILOVER_DEFAULT_INTERVAL); +} + +Bond::Bond(const RuntimeEnvironment* renv) : RR(renv) +{ +} + +Bond::Bond(const RuntimeEnvironment* renv, int policy, const SharedPtr& peer) : RR(renv), _freeRandomByte((unsigned char)((uintptr_t)this >> 4) ^ ++s_freeRandomByteCounter), _peer(peer), _peerId(_peer->_id.address().toInt()) +{ + setBondParameters(policy, SharedPtr(), false); + _policyAlias = getPolicyStrByCode(policy); +} + +Bond::Bond(const RuntimeEnvironment* renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer) : RR(renv), _policyAlias(policyAlias), _peer(peer) +{ + setBondParameters(getPolicyCodeByStr(basePolicy), SharedPtr(), false); +} + +Bond::Bond(const RuntimeEnvironment* renv, SharedPtr originalBond, const SharedPtr& peer) + : RR(renv) + , _freeRandomByte((unsigned char)((uintptr_t)this >> 4) ^ ++s_freeRandomByteCounter) + , _peer(peer) + , _peerId(_peer->_id.address().toInt()) +{ + setBondParameters(originalBond->_policy, originalBond, true); +} + +void Bond::nominatePathToBond(const SharedPtr& path, int64_t now) +{ + char pathStr[64] = { 0 }; + path->address().toString(pathStr); Mutex::Lock _l(_paths_m); - if (!RR->bc->linkAllowed(_policyAlias, getLink(path))) { + /** + * Ensure the link is allowed and the path is not already present + */ + if (! RR->bc->linkAllowed(_policyAlias, getLink(path))) { return; } bool alreadyPresent = false; - for (int i=0; iifname().c_str(), pathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); - _paths[i]->startTrial(now); + if (! alreadyPresent) { + /** + * Find somewhere to stick it + */ + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (! _paths[i].p) { + _paths[i].set(now, path); + /** + * Set user preferences and update state variables of other paths on the same link + */ + SharedPtr sl = getLink(_paths[i].p); + if (sl) { + // Determine if there are any other paths on this link + bool bFoundCommonLink = false; + SharedPtr commonLink = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + for (unsigned int j = 0; j < ZT_MAX_PEER_NETWORK_PATHS; ++j) { + if (_paths[j].p && _paths[j].p.ptr() != _paths[i].p.ptr()) { + if (RR->bc->getLinkBySocket(_policyAlias, _paths[j].p->localSocket()) == commonLink) { + bFoundCommonLink = true; + _paths[j].onlyPathOnLink = false; + } + } + } + _paths[i].ipvPref = sl->ipvPref(); + _paths[i].mode = sl->mode(); + _paths[i].enabled = sl->enabled(); + _paths[i].onlyPathOnLink = ! bFoundCommonLink; + } + log("nominate link %s/%s (now in trial period)", getLink(path)->ifname().c_str(), pathStr); break; } } @@ -105,85 +270,93 @@ void Bond::nominatePath(const SharedPtr& path, int64_t now) estimatePathQuality(now); } +void Bond::addPathToBond(int nominatedIdx, int bondedIdx) +{ + // Map bonded set to nominated set + _bondIdxMap[bondedIdx] = nominatedIdx; + // Tell the bonding layer that we can now use this bond for traffic + _paths[nominatedIdx].bonded = true; +} + SharedPtr Bond::getAppropriatePath(int64_t now, int32_t flowId) { Mutex::Lock _l(_paths_m); /** * active-backup */ - if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { - if (_abPath) { - return _abPath; + if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { + if (_abPathIdx != ZT_MAX_PEER_NETWORK_PATHS && _paths[_abPathIdx].p) { + return _paths[_abPathIdx].p; } } /** * broadcast */ - if (_bondingPolicy == ZT_BONDING_POLICY_BROADCAST) { - return SharedPtr(); // Handled in Switch::_trySend() + if (_policy == ZT_BOND_POLICY_BROADCAST) { + return SharedPtr(); // Handled in Switch::_trySend() } - if (!_numBondedPaths) { - return SharedPtr(); // No paths assigned to bond yet, cannot balance traffic + if (! _numBondedPaths) { + return SharedPtr(); // No paths assigned to bond yet, cannot balance traffic } /** * balance-rr */ - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { - if (!_allowFlowHashing) { + if (_policy == ZT_BOND_POLICY_BALANCE_RR) { + if (! _allowFlowHashing) { if (_packetsPerLink == 0) { // Randomly select a path - return _paths[_bondedIdx[_freeRandomByte % _numBondedPaths]]; // TODO: Optimize + return _paths[_bondIdxMap[_freeRandomByte % _numBondedPaths]].p; } if (_rrPacketsSentOnCurrLink < _packetsPerLink) { // Continue to use this link ++_rrPacketsSentOnCurrLink; - return _paths[_bondedIdx[_rrIdx]]; + return _paths[_bondIdxMap[_rrIdx]].p; } // Reset striping counter _rrPacketsSentOnCurrLink = 0; - if (_numBondedPaths == 1) { + if (_numBondedPaths == 1 || _rrIdx >= (ZT_MAX_PEER_NETWORK_PATHS-1)) { _rrIdx = 0; } else { int _tempIdx = _rrIdx; - for (int searchCount = 0; searchCount < (_numBondedPaths-1); searchCount++) { - _tempIdx = (_tempIdx == (_numBondedPaths-1)) ? 0 : _tempIdx+1; - if (_bondedIdx[_tempIdx] != ZT_MAX_PEER_NETWORK_PATHS) { - if (_paths[_bondedIdx[_tempIdx]] && _paths[_bondedIdx[_tempIdx]]->eligible(now,_ackSendInterval)) { + for (int searchCount = 0; searchCount < (_numBondedPaths - 1); searchCount++) { + _tempIdx = (_tempIdx == (_numBondedPaths - 1)) ? 0 : _tempIdx + 1; + if (_bondIdxMap[_tempIdx] != ZT_MAX_PEER_NETWORK_PATHS) { + if (_paths[_bondIdxMap[_tempIdx]].p && _paths[_bondIdxMap[_tempIdx]].eligible) { _rrIdx = _tempIdx; break; } } } } - if (_paths[_bondedIdx[_rrIdx]]) { - return _paths[_bondedIdx[_rrIdx]]; + if (_paths[_bondIdxMap[_rrIdx]].p) { + return _paths[_bondIdxMap[_rrIdx]].p; } } } /** * balance-xor */ - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { - if (!_allowFlowHashing || flowId == -1) { + if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) { + if (! _allowFlowHashing || flowId == -1) { // No specific path required for unclassified traffic, send on anything - return _paths[_bondedIdx[_freeRandomByte % _numBondedPaths]]; // TODO: Optimize + int m_idx = _bondIdxMap[_freeRandomByte % _numBondedPaths]; + return _paths[m_idx].p; } else if (_allowFlowHashing) { - // TODO: Optimize Mutex::Lock _l(_flows_m); SharedPtr flow; if (_flows.count(flowId)) { flow = _flows[flowId]; - flow->updateActivity(now); + flow->lastActivity = now; } else { unsigned char entropy; Utils::getSecureRandom(&entropy, 1); - flow = createFlow(SharedPtr(), flowId, entropy, now); + flow = createFlow(ZT_MAX_PEER_NETWORK_PATHS, flowId, entropy, now); } if (flow) { - return flow->assignedPath(); + return _paths[flow->assignedPath].p; } } } @@ -192,191 +365,168 @@ SharedPtr Bond::getAppropriatePath(int64_t now, int32_t flowId) void Bond::recordIncomingInvalidPacket(const SharedPtr& path) { - //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - //sprintf(traceMsg, "%s (qos) Invalid packet on link %s/%s from peer %llx", - // OSUtils::humanReadableTimestamp().c_str(), getLink(path)->ifname().c_str(), pathStr, _peer->_id.address().toInt()); - //RR->t->bondStateMessage(NULL, traceMsg); + // char pathStr[64] = { 0 }; path->address().toString(pathStr); + // log("%s (qos) Invalid packet on link %s/%s from peer %llx", + // getLink(path)->ifname().c_str(), pathStr); Mutex::Lock _l(_paths_m); - for (int i=0; ipacketValiditySamples.push(false); + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p == path) { + _paths[i].packetValiditySamples.push(false); } } } -void Bond::recordOutgoingPacket(const SharedPtr &path, const uint64_t packetId, - uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) +void Bond::recordOutgoingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) { - //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - //sprintf(traceMsg, "%s (bond) Outgoing packet on link %s/%s to peer %llx", - // OSUtils::humanReadableTimestamp().c_str(), getLink(path)->ifname().c_str(), pathStr, _peer->_id.address().toInt()); - //RR->t->bondStateMessage(NULL, traceMsg); - _freeRandomByte += (unsigned char)(packetId >> 8); // Grab entropy to use in path selection logic - if (!_shouldCollectPathStatistics) { - return; + _freeRandomByte += (unsigned char)(packetId >> 8); // Grab entropy to use in path selection logic + bool isFrame = (verb == Packet::Packet::VERB_ECHO || verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); + if (isFrame) { + // char pathStr[64] = { 0 }; + // path->address().toString(pathStr); + // int pathIdx = getNominatedPathIdx(path); + // log("outgoing packet via [%d]", pathIdx); + // log("outgoing packet via %s/%s", getLink(path)->ifname().c_str(), pathStr); } - bool isFrame = (verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); - bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) - && (verb != Packet::VERB_ACK) - && (verb != Packet::VERB_QOS_MEASUREMENT)); + bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) && (verb != Packet::VERB_ACK) && (verb != Packet::VERB_QOS_MEASUREMENT)); if (isFrame || shouldRecord) { Mutex::Lock _l(_paths_m); + int pathIdx = getNominatedPathIdx(path); + if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + return; + } if (isFrame) { - ++(path->_packetsOut); - _lastFrame=now; + ++(_paths[pathIdx].packetsOut); + _lastFrame = now; } if (shouldRecord) { - path->_unackedBytes += payloadLength; + //_paths[pathIdx].unackedBytes += payloadLength; // Take note that we're expecting a VERB_ACK on this path as of a specific time - if (path->qosStatsOut.size() < ZT_QOS_MAX_OUTSTANDING_RECORDS) { - path->qosStatsOut[packetId] = now; + if (_paths[pathIdx].qosStatsOut.size() < ZT_QOS_MAX_OUTSTANDING_RECORDS) { + _paths[pathIdx].qosStatsOut[packetId] = now; } } } if (_allowFlowHashing && (flowId != ZT_QOS_NO_FLOW)) { Mutex::Lock _l(_flows_m); if (_flows.count(flowId)) { - _flows[flowId]->recordOutgoingBytes(payloadLength); + _flows[flowId]->bytesOut += payloadLength; } } } -void Bond::recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, - Packet::Verb verb, int32_t flowId, int64_t now) +void Bond::recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now) { - //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - //sprintf(traceMsg, "%s (bond) Incoming packet on link %s/%s from peer %llx [id=%llx, len=%d, verb=%d, flowId=%x]", - // OSUtils::humanReadableTimestamp().c_str(), getLink(path)->ifname().c_str(), pathStr, _peer->_id.address().toInt(), packetId, payloadLength, verb, flowId); - //RR->t->bondStateMessage(NULL, traceMsg); - bool isFrame = (verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); - bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) - && (verb != Packet::VERB_ACK) - && (verb != Packet::VERB_QOS_MEASUREMENT)); + bool isFrame = (verb == Packet::Packet::VERB_ECHO || verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); + if (isFrame) { + // char pathStr[64] = { 0 }; path->address().toString(pathStr); + // int pathIdx = getNominatedPathIdx(path); + // log("incoming packet via [%d] [id=%llx, len=%d, verb=%d, flowId=%x]", pathIdx, packetId, payloadLength, verb, flowId); + // log("incoming packet via %s/%s (ls=%llx) [id=%llx, len=%d, verb=%d, flowId=%x]", getLink(path)->ifname().c_str(), pathStr, path->localSocket(), packetId, payloadLength, verb, flowId); + } + bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) && (verb != Packet::VERB_ACK) && (verb != Packet::VERB_QOS_MEASUREMENT)); + Mutex::Lock _l(_paths_m); + int pathIdx = getNominatedPathIdx(path); + if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + return; + } + // Take note of the time that this previously-dead path received a packet + if (! _paths[pathIdx].alive) { + _paths[pathIdx].lastAliveToggle = now; + } if (isFrame || shouldRecord) { - Mutex::Lock _l(_paths_m); - if (isFrame) { - ++(path->_packetsIn); - _lastFrame=now; - } - if (shouldRecord) { - path->ackStatsIn[packetId] = payloadLength; - ++(path->_packetsReceivedSinceLastAck); - path->qosStatsIn[packetId] = now; - ++(path->_packetsReceivedSinceLastQoS); - path->packetValiditySamples.push(true); + if (_paths[pathIdx].allowed()) { + if (isFrame) { + ++(_paths[pathIdx].packetsIn); + _lastFrame = now; + } + if (shouldRecord) { + _paths[pathIdx].qosStatsIn[packetId] = now; + ++(_paths[pathIdx].packetsReceivedSinceLastQoS); + _paths[pathIdx].packetValiditySamples.push(true); + } } } + /** * Learn new flows and pro-actively create entries for them in the bond so * that the next time we send a packet out that is part of a flow we know * which path to use. */ - if ((flowId != ZT_QOS_NO_FLOW) - && (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR - || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR - || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE)) { + if ((flowId != ZT_QOS_NO_FLOW) && (_policy == ZT_BOND_POLICY_BALANCE_RR || _policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE)) { Mutex::Lock _l(_flows_m); SharedPtr flow; - if (!_flows.count(flowId)) { - flow = createFlow(path, flowId, 0, now); - } else { + if (! _flows.count(flowId)) { + flow = createFlow(pathIdx, flowId, 0, now); + } + else { flow = _flows[flowId]; } if (flow) { - flow->recordIncomingBytes(payloadLength); + flow->bytesIn += payloadLength; } } } -void Bond::receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t *rx_id, uint16_t *rx_ts) +void Bond::receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t* rx_id, uint16_t* rx_ts) { Mutex::Lock _l(_paths_m); - //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - //sprintf(traceMsg, "%s (qos) Received QoS packet sampling %d frames from peer %llx via %s/%s", - // OSUtils::humanReadableTimestamp().c_str(), count, _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); - //RR->t->bondStateMessage(NULL, traceMsg); + int pathIdx = getNominatedPathIdx(path); + if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + return; + } + // char pathStr[64] = { 0 }; path->address().toString(pathStr); + // log("received QoS packet (sampling %d frames) via %s/%s", count, getLink(path)->ifname().c_str(), pathStr); // Look up egress times and compute latency values for each record - std::map::iterator it; - for (int j=0; jqosStatsOut.find(rx_id[j]); - if (it != path->qosStatsOut.end()) { - path->latencySamples.push(((uint16_t)(now - it->second) - rx_ts[j]) / 2); - path->qosStatsOut.erase(it); + std::map::iterator it; + for (int j = 0; j < count; j++) { + it = _paths[pathIdx].qosStatsOut.find(rx_id[j]); + if (it != _paths[pathIdx].qosStatsOut.end()) { + _paths[pathIdx].latencySamples.push(((uint16_t)(now - it->second) - rx_ts[j]) / 2); + _paths[pathIdx].qosStatsOut.erase(it); } } - path->qosRecordSize.push(count); + _paths[pathIdx].qosRecordSize.push(count); } -void Bond::receivedAck(const SharedPtr& path, int64_t now, int32_t ackedBytes) -{ - Mutex::Lock _l(_paths_m); - //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - //sprintf(traceMsg, "%s (qos) Received ACK packet for %d bytes from peer %llx via %s/%s", - // OSUtils::humanReadableTimestamp().c_str(), ackedBytes, _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); - //RR->t->bondStateMessage(NULL, traceMsg); - path->_lastAckReceived = now; - path->_unackedBytes = (ackedBytes > path->_unackedBytes) ? 0 : path->_unackedBytes - ackedBytes; - int64_t timeSinceThroughputEstimate = (now - path->_lastThroughputEstimation); - if (timeSinceThroughputEstimate >= throughputMeasurementInterval) { - // TODO: See if this floating point math can be reduced - uint64_t throughput = (uint64_t)((float)(path->_bytesAckedSinceLastThroughputEstimation) / ((float)timeSinceThroughputEstimate / (float)1000)); - throughput /= 1000; - if (throughput > 0.0) { - path->throughputSamples.push(throughput); - path->_throughputMax = throughput > path->_throughputMax ? throughput : path->_throughputMax; - } - path->_lastThroughputEstimation = now; - path->_bytesAckedSinceLastThroughputEstimation = 0; - } else { - path->_bytesAckedSinceLastThroughputEstimation += ackedBytes; - } -} - -int32_t Bond::generateQoSPacket(const SharedPtr& path, int64_t now, char *qosBuffer) +int32_t Bond::generateQoSPacket(int pathIdx, int64_t now, char* qosBuffer) { int32_t len = 0; - std::map::iterator it = path->qosStatsIn.begin(); - int i=0; - int numRecords = std::min(path->_packetsReceivedSinceLastQoS,ZT_QOS_TABLE_SIZE); - while (iqosStatsIn.end()) { + std::map::iterator it = _paths[pathIdx].qosStatsIn.begin(); + int i = 0; + int numRecords = std::min(_paths[pathIdx].packetsReceivedSinceLastQoS, ZT_QOS_TABLE_SIZE); + while (i < numRecords && it != _paths[pathIdx].qosStatsIn.end()) { uint64_t id = it->first; memcpy(qosBuffer, &id, sizeof(uint64_t)); - qosBuffer+=sizeof(uint64_t); + qosBuffer += sizeof(uint64_t); uint16_t holdingTime = (uint16_t)(now - it->second); memcpy(qosBuffer, &holdingTime, sizeof(uint16_t)); - qosBuffer+=sizeof(uint16_t); - len+=sizeof(uint64_t)+sizeof(uint16_t); - path->qosStatsIn.erase(it++); + qosBuffer += sizeof(uint16_t); + len += sizeof(uint64_t) + sizeof(uint16_t); + _paths[pathIdx].qosStatsIn.erase(it++); ++i; } return len; } -bool Bond::assignFlowToBondedPath(SharedPtr &flow, int64_t now) +bool Bond::assignFlowToBondedPath(SharedPtr& flow, int64_t now) { - char traceMsg[256]; - char curPathStr[128]; + char curPathStr[64] = { 0 }; unsigned int idx = ZT_MAX_PEER_NETWORK_PATHS; - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) { - idx = abs((int)(flow->id() % (_numBondedPaths))); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_bondedIdx[idx]]->localSocket()); - _paths[_bondedIdx[idx]]->address().toString(curPathStr); - sprintf(traceMsg, "%s (balance-xor) Assigned outgoing flow %x to peer %llx to link %s/%s, %lu active flow(s)", - OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt(), link->ifname().c_str(), curPathStr, _flows.size()); - RR->t->bondStateMessage(NULL, traceMsg); - flow->assignPath(_paths[_bondedIdx[idx]],now); - ++(_paths[_bondedIdx[idx]]->_assignedFlowCount); + if (_policy == ZT_BOND_POLICY_BALANCE_XOR) { + idx = abs((int)(flow->id % (_numBondedPaths))); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_bondIdxMap[idx]].p->localSocket()); + _paths[_bondIdxMap[idx]].p->address().toString(curPathStr); + flow->assignPath(_bondIdxMap[idx], now); + ++(_paths[_bondIdxMap[idx]].assignedFlowCount); } - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { + if (_policy == ZT_BOND_POLICY_BALANCE_AWARE) { unsigned char entropy; Utils::getSecureRandom(&entropy, 1); if (_totalBondUnderload) { entropy %= _totalBondUnderload; } - if (!_numBondedPaths) { - sprintf(traceMsg, "%s (balance-aware) There are no bonded paths, cannot assign flow %x\n", - OSUtils::humanReadableTimestamp().c_str(), flow->id()); - RR->t->bondStateMessage(NULL, traceMsg); + if (! _numBondedPaths) { + log("unable to assign flow %x (bond has no links)\n", flow->id); return false; } /* Since there may be scenarios where a path is removed before we can re-estimate @@ -384,17 +534,17 @@ bool Bond::assignFlowToBondedPath(SharedPtr &flow, int64_t now) value that we use to randomly assign among the surviving paths, otherwise we risk not being able to find a path to assign this flow to. */ int totalIncompleteAllocation = 0; - for(unsigned int i=0;ibonded()) { - totalIncompleteAllocation += _paths[i]->_allocation; + for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p && _paths[i].bonded) { + totalIncompleteAllocation += _paths[i].allocation; } } entropy %= totalIncompleteAllocation; - for(unsigned int i=0;ibonded()) { - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); - _paths[i]->address().toString(curPathStr); - uint8_t probabilitySegment = (_totalBondUnderload > 0) ? _paths[i]->_affinity : _paths[i]->_allocation; + for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p && _paths[i].bonded) { + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + _paths[i].p->address().toString(curPathStr); + uint8_t probabilitySegment = (_totalBondUnderload > 0) ? _paths[i].affinity : _paths[i].allocation; if (entropy <= probabilitySegment) { idx = i; break; @@ -403,50 +553,35 @@ bool Bond::assignFlowToBondedPath(SharedPtr &flow, int64_t now) } } if (idx < ZT_MAX_PEER_NETWORK_PATHS) { - if (flow->_assignedPath) { - flow->_previouslyAssignedPath = flow->_assignedPath; - } - flow->assignPath(_paths[idx],now); - ++(_paths[idx]->_assignedFlowCount); + flow->assignPath(idx, now); + ++(_paths[idx].assignedFlowCount); } else { - fprintf(stderr, "could not assign flow?\n"); exit(0); // TODO: Remove for production + log("unable to assign out-flow %x (unknown reason)", flow->id); return false; } } - if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { - if (_abOverflowEnabled) { - flow->assignPath(_abPath, now); - } else { - sprintf(traceMsg, "%s (bond) Unable to assign outgoing flow %x to peer %llx, no active overflow link", - OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); - return false; + if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { + if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + log("unable to assign out-flow %x (no active backup link)", flow->id); } + flow->assignPath(_abPathIdx, now); } - flow->assignedPath()->address().toString(curPathStr); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, flow->assignedPath()->localSocket()); - sprintf(traceMsg, "%s (bond) Assigned outgoing flow %x to peer %llx to link %s/%s, %lu active flow(s)", - OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt(), link->ifname().c_str(), curPathStr, _flows.size()); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[flow->assignedPath].p->address().toString(curPathStr); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[flow->assignedPath].p->localSocket()); + log("assign out-flow %x to link %s/%s (%lu / %lu flows)", flow->id, link->ifname().c_str(), curPathStr, _paths[flow->assignedPath].assignedFlowCount, (unsigned long)_flows.size()); return true; } -SharedPtr Bond::createFlow(const SharedPtr &path, int32_t flowId, unsigned char entropy, int64_t now) +SharedPtr Bond::createFlow(int pathIdx, int32_t flowId, unsigned char entropy, int64_t now) { - char traceMsg[256]; - char curPathStr[128]; - // --- - if (!_numBondedPaths) { - sprintf(traceMsg, "%s (bond) There are no bonded paths to peer %llx, cannot assign flow %x\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), flowId); - RR->t->bondStateMessage(NULL, traceMsg); + char curPathStr[64] = { 0 }; + if (! _numBondedPaths) { + log("unable to assign flow %x (bond has no links)\n", flowId); return SharedPtr(); } if (_flows.size() >= ZT_FLOW_MAX_COUNT) { - sprintf(traceMsg, "%s (bond) Maximum number of flows on bond to peer %llx reached (%d), forcibly forgetting oldest flow\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), ZT_FLOW_MAX_COUNT); - RR->t->bondStateMessage(NULL, traceMsg); + log("forget oldest flow (max flows reached: %d)\n", ZT_FLOW_MAX_COUNT); forgetFlowsWhenNecessary(0, true, now); } SharedPtr flow = new Flow(flowId, now); @@ -456,20 +591,18 @@ SharedPtr Bond::createFlow(const SharedPtr &path, int32_t flowId, un * is received on a path but no flow exists, in this case we simply assign the path * that the remote peer chose for us. */ - if (path) { - flow->assignPath(path,now); - path->address().toString(curPathStr); - path->_assignedFlowCount++; - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, flow->assignedPath()->localSocket()); - sprintf(traceMsg, "%s (bond) Assigned incoming flow %x from peer %llx to link %s/%s, %lu active flow(s)", - OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt(), link->ifname().c_str(), curPathStr, _flows.size()); - RR->t->bondStateMessage(NULL, traceMsg); + if (pathIdx != ZT_MAX_PEER_NETWORK_PATHS) { + flow->assignPath(pathIdx, now); + _paths[pathIdx].p->address().toString(curPathStr); + _paths[pathIdx].assignedFlowCount++; + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[flow->assignedPath].p->localSocket()); + log("assign in-flow %x to link %s/%s (%lu / %lu)", flow->id, link->ifname().c_str(), curPathStr, _paths[pathIdx].assignedFlowCount, (unsigned long)_flows.size()); } /** * Add a flow when no path was provided. This means that it is an outgoing packet * and that it is up to the local peer to decide how to load-balance its transmission. */ - else if (!path) { + else { assignFlowToBondedPath(flow, now); } return flow; @@ -477,24 +610,22 @@ SharedPtr Bond::createFlow(const SharedPtr &path, int32_t flowId, un void Bond::forgetFlowsWhenNecessary(uint64_t age, bool oldest, int64_t now) { - char traceMsg[256]; - std::map >::iterator it = _flows.begin(); - std::map >::iterator oldestFlow = _flows.end(); + std::map >::iterator it = _flows.begin(); + std::map >::iterator oldestFlow = _flows.end(); SharedPtr expiredFlow; - if (age) { // Remove by specific age + if (age) { // Remove by specific age while (it != _flows.end()) { if (it->second->age(now) > age) { - sprintf(traceMsg, "%s (bond) Forgetting flow %x between this node and peer %llx, %lu active flow(s)", - OSUtils::humanReadableTimestamp().c_str(), it->first, _peer->_id.address().toInt(), (_flows.size()-1)); - RR->t->bondStateMessage(NULL, traceMsg); - it->second->assignedPath()->_assignedFlowCount--; + log("forget flow %x (age %llu) (%lu / %lu)", it->first, (unsigned long long)it->second->age(now), _paths[it->second->assignedPath].assignedFlowCount, (unsigned long)(_flows.size() - 1)); + _paths[it->second->assignedPath].assignedFlowCount--; it = _flows.erase(it); - } else { + } + else { ++it; } } } - else if (oldest) { // Remove single oldest by natural expiration + else if (oldest) { // Remove single oldest by natural expiration uint64_t maxAge = 0; while (it != _flows.end()) { if (it->second->age(now) > maxAge) { @@ -504,383 +635,302 @@ void Bond::forgetFlowsWhenNecessary(uint64_t age, bool oldest, int64_t now) ++it; } if (oldestFlow != _flows.end()) { - sprintf(traceMsg, "%s (bond) Forgetting oldest flow %x (of age %llu) between this node and peer %llx, %lu active flow(s)", - OSUtils::humanReadableTimestamp().c_str(), oldestFlow->first, oldestFlow->second->age(now), _peer->_id.address().toInt(), (_flows.size()-1)); - RR->t->bondStateMessage(NULL, traceMsg); - oldestFlow->second->assignedPath()->_assignedFlowCount--; + log("forget oldest flow %x (age %llu) (total flows: %lu)", oldestFlow->first, (unsigned long long)oldestFlow->second->age(now), (unsigned long)(_flows.size() - 1)); + _paths[oldestFlow->second->assignedPath].assignedFlowCount--; _flows.erase(oldestFlow); } } } -void Bond::processIncomingPathNegotiationRequest(uint64_t now, SharedPtr &path, int16_t remoteUtility) +void Bond::processIncomingPathNegotiationRequest(uint64_t now, SharedPtr& path, int16_t remoteUtility) { - char traceMsg[256]; - if (_abLinkSelectMethod != ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { + char pathStr[64] = { 0 }; + if (_abLinkSelectMethod != ZT_BOND_RESELECTION_POLICY_OPTIMIZE) { return; } Mutex::Lock _l(_paths_m); - char pathStr[128]; - path->address().toString(pathStr); - if (!_lastPathNegotiationCheck) { + int pathIdx = getNominatedPathIdx(path); + if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { return; } - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, path->localSocket()); + _paths[pathIdx].p->address().toString(pathStr); + if (! _lastPathNegotiationCheck) { + return; + } + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[pathIdx].p->localSocket()); if (remoteUtility > _localUtility) { - char pathStr[128]; path->address().toString(pathStr); - sprintf(traceMsg, "%s (bond) Peer %llx suggests using alternate link %s/%s. Remote utility (%d) is GREATER than local utility (%d), switching to said link\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr, remoteUtility, _localUtility); - RR->t->bondStateMessage(NULL, traceMsg); - negotiatedPath = path; + _paths[pathIdx].p->address().toString(pathStr); + log("peer suggests alternate link %s/%s, remote utility (%d) greater than local utility (%d), switching to suggested link\n", link->ifname().c_str(), pathStr, remoteUtility, _localUtility); + negotiatedPathIdx = pathIdx; } if (remoteUtility < _localUtility) { - sprintf(traceMsg, "%s (bond) Peer %llx suggests using alternate link %s/%s. Remote utility (%d) is LESS than local utility (%d), not switching\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr, remoteUtility, _localUtility); - RR->t->bondStateMessage(NULL, traceMsg); + log("peer suggests alternate link %s/%s, remote utility (%d) less than local utility (%d), not switching\n", link->ifname().c_str(), pathStr, remoteUtility, _localUtility); } if (remoteUtility == _localUtility) { - sprintf(traceMsg, "%s (bond) Peer %llx suggests using alternate link %s/%s. Remote utility (%d) is equal to local utility (%d)\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr, remoteUtility, _localUtility); - RR->t->bondStateMessage(NULL, traceMsg); + log("peer suggests alternate link %s/%s, remote utility (%d) equal to local utility (%d)\n", link->ifname().c_str(), pathStr, remoteUtility, _localUtility); if (_peer->_id.address().toInt() > RR->node->identity().address().toInt()) { - sprintf(traceMsg, "%s (bond) Agreeing with peer %llx to use alternate link %s/%s\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr); - RR->t->bondStateMessage(NULL, traceMsg); - negotiatedPath = path; - } else { - sprintf(traceMsg, "%s (bond) Ignoring petition from peer %llx to use alternate link %s/%s\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr); - RR->t->bondStateMessage(NULL, traceMsg); + log("agree with peer to use alternate link %s/%s\n", link->ifname().c_str(), pathStr); + negotiatedPathIdx = pathIdx; + } + else { + log("ignore petition from peer to use alternate link %s/%s\n", link->ifname().c_str(), pathStr); } } } -void Bond::pathNegotiationCheck(void *tPtr, const int64_t now) +void Bond::pathNegotiationCheck(void* tPtr, int64_t now) { - char pathStr[128]; + char pathStr[64] = { 0 }; int maxInPathIdx = ZT_MAX_PEER_NETWORK_PATHS; int maxOutPathIdx = ZT_MAX_PEER_NETWORK_PATHS; uint64_t maxInCount = 0; uint64_t maxOutCount = 0; - for(unsigned int i=0;i_packetsIn > maxInCount) { - maxInCount = _paths[i]->_packetsIn; + if (_paths[i].packetsIn > maxInCount) { + maxInCount = _paths[i].packetsIn; maxInPathIdx = i; } - if (_paths[i]->_packetsOut > maxOutCount) { - maxOutCount = _paths[i]->_packetsOut; + if (_paths[i].packetsOut > maxOutCount) { + maxOutCount = _paths[i].packetsOut; maxOutPathIdx = i; } - _paths[i]->resetPacketCounts(); + _paths[i].resetPacketCounts(); } - bool _peerLinksSynchronized = ((maxInPathIdx != ZT_MAX_PEER_NETWORK_PATHS) - && (maxOutPathIdx != ZT_MAX_PEER_NETWORK_PATHS) - && (maxInPathIdx != maxOutPathIdx)) ? false : true; + bool _peerLinksSynchronized = ((maxInPathIdx != ZT_MAX_PEER_NETWORK_PATHS) && (maxOutPathIdx != ZT_MAX_PEER_NETWORK_PATHS) && (maxInPathIdx != maxOutPathIdx)) ? false : true; /** * Determine utility and attempt to petition remote peer to switch to our chosen path */ - if (!_peerLinksSynchronized) { - _localUtility = _paths[maxOutPathIdx]->_failoverScore - _paths[maxInPathIdx]->_failoverScore; - if (_paths[maxOutPathIdx]->_negotiated) { - _localUtility -= ZT_MULTIPATH_FAILOVER_HANDICAP_NEGOTIATED; + if (! _peerLinksSynchronized) { + _localUtility = _paths[maxOutPathIdx].failoverScore - _paths[maxInPathIdx].failoverScore; + if (_paths[maxOutPathIdx].negotiated) { + _localUtility -= ZT_BOND_FAILOVER_HANDICAP_NEGOTIATED; } if ((now - _lastSentPathNegotiationRequest) > ZT_PATH_NEGOTIATION_CUTOFF_TIME) { - //fprintf(stderr, "BT: (sync) it's been long enough, sending more requests.\n"); + // fprintf(stderr, "BT: (sync) it's been long enough, sending more requests.\n"); _numSentPathNegotiationRequests = 0; } if (_numSentPathNegotiationRequests < ZT_PATH_NEGOTIATION_TRY_COUNT) { if (_localUtility >= 0) { - //fprintf(stderr, "BT: (sync) paths appear to be out of sync (utility=%d)\n", _localUtility); - sendPATH_NEGOTIATION_REQUEST(tPtr, _paths[maxOutPathIdx]); + // fprintf(stderr, "BT: (sync) paths appear to be out of sync (utility=%d)\n", _localUtility); + sendPATH_NEGOTIATION_REQUEST(tPtr, _paths[maxOutPathIdx].p); ++_numSentPathNegotiationRequests; _lastSentPathNegotiationRequest = now; - _paths[maxOutPathIdx]->address().toString(pathStr); - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[maxOutPathIdx]->localSocket()); - //fprintf(stderr, "sending request to use %s on %s, ls=%llx, utility=%d\n", pathStr, link->ifname().c_str(), _paths[maxOutPathIdx]->localSocket(), _localUtility); + _paths[maxOutPathIdx].p->address().toString(pathStr); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[maxOutPathIdx].p->localSocket()); + // fprintf(stderr, "sending request to use %s on %s, ls=%llx, utility=%d\n", pathStr, link->ifname().c_str(), _paths[maxOutPathIdx].p->localSocket(), _localUtility); } } /** * Give up negotiating and consider switching */ - else if ((now - _lastSentPathNegotiationRequest) > (2 * ZT_PATH_NEGOTIATION_CHECK_INTERVAL)) { + else if ((now - _lastSentPathNegotiationRequest) > (2 * ZT_BOND_OPTIMIZE_INTERVAL)) { if (_localUtility == 0) { // There's no loss to us, just switch without sending a another request - //fprintf(stderr, "BT: (sync) giving up, switching to remote peer's path.\n"); - negotiatedPath = _paths[maxInPathIdx]; + // fprintf(stderr, "BT: (sync) giving up, switching to remote peer's path.\n"); + negotiatedPathIdx = maxInPathIdx; } } } } -void Bond::sendPATH_NEGOTIATION_REQUEST(void *tPtr, const SharedPtr &path) +void Bond::sendPATH_NEGOTIATION_REQUEST(void* tPtr, int pathIdx) { - char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - sprintf(traceMsg, "%s (bond) Sending link negotiation request to peer %llx via link %s/%s, local utility is %d", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr, _localUtility); - RR->t->bondStateMessage(NULL, traceMsg); - if (_abLinkSelectMethod != ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { + char pathStr[64] = { 0 }; + _paths[pathIdx].p->address().toString(pathStr); + log("send link negotiation request to peer via link %s/%s, local utility is %d", getLink(_paths[pathIdx].p)->ifname().c_str(), pathStr, _localUtility); + if (_abLinkSelectMethod != ZT_BOND_RESELECTION_POLICY_OPTIMIZE) { return; } - Packet outp(_peer->_id.address(),RR->identity.address(),Packet::VERB_PATH_NEGOTIATION_REQUEST); + Packet outp(_peer->_id.address(), RR->identity.address(), Packet::VERB_PATH_NEGOTIATION_REQUEST); outp.append(_localUtility); - if (path->address()) { - outp.armor(_peer->key(),false,_peer->aesKeysIfSupported()); - RR->node->putPacket(tPtr,path->localSocket(),path->address(),outp.data(),outp.size()); + if (_paths[pathIdx].p->address()) { + outp.armor(_peer->key(), false, _peer->aesKeysIfSupported()); + RR->node->putPacket(tPtr, _paths[pathIdx].p->localSocket(), _paths[pathIdx].p->address(), outp.data(), outp.size()); } } -void Bond::sendACK(void *tPtr, const SharedPtr &path,const int64_t localSocket, - const InetAddress &atAddress,int64_t now) +void Bond::sendQOS_MEASUREMENT(void* tPtr, int pathIdx, int64_t localSocket, const InetAddress& atAddress, int64_t now) { - Packet outp(_peer->_id.address(),RR->identity.address(),Packet::VERB_ACK); - int32_t bytesToAck = 0; - std::map::iterator it = path->ackStatsIn.begin(); - while (it != path->ackStatsIn.end()) { - bytesToAck += it->second; - ++it; - } - //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - //sprintf(traceMsg, "%s (qos) Sending ACK packet for %d bytes to peer %llx via link %s/%s", - // OSUtils::humanReadableTimestamp().c_str(), bytesToAck, _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); - //RR->t->bondStateMessage(NULL, traceMsg); - outp.append(bytesToAck); - if (atAddress) { - outp.armor(_peer->key(),false,_peer->aesKeysIfSupported()); - RR->node->putPacket(tPtr,localSocket,atAddress,outp.data(),outp.size()); - } else { - RR->sw->send(tPtr,outp,false); - } - path->ackStatsIn.clear(); - path->_packetsReceivedSinceLastAck = 0; - path->_lastAckSent = now; -} - -void Bond::sendQOS_MEASUREMENT(void *tPtr,const SharedPtr &path,const int64_t localSocket, - const InetAddress &atAddress,int64_t now) -{ - //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); - //sprintf(traceMsg, "%s (qos) Sending QoS packet to peer %llx via link %s/%s", - // OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); - //RR->t->bondStateMessage(NULL, traceMsg); - const int64_t _now = RR->node->now(); - Packet outp(_peer->_id.address(),RR->identity.address(),Packet::VERB_QOS_MEASUREMENT); + char pathStr[64] = { 0 }; + _paths[pathIdx].p->address().toString(pathStr); + int64_t _now = RR->node->now(); + Packet outp(_peer->_id.address(), RR->identity.address(), Packet::VERB_QOS_MEASUREMENT); char qosData[ZT_QOS_MAX_PACKET_SIZE]; - int16_t len = generateQoSPacket(path, _now,qosData); - outp.append(qosData,len); - if (atAddress) { - outp.armor(_peer->key(),false,_peer->aesKeysIfSupported()); - RR->node->putPacket(tPtr,localSocket,atAddress,outp.data(),outp.size()); - } else { - RR->sw->send(tPtr,outp,false); + int16_t len = generateQoSPacket(pathIdx, _now, qosData); + _overheadBytes += len; + if (len) { + outp.append(qosData, len); + if (atAddress) { + outp.armor(_peer->key(), false, _peer->aesKeysIfSupported()); + RR->node->putPacket(tPtr, localSocket, atAddress, outp.data(), outp.size()); + } + else { + RR->sw->send(tPtr, outp, false); + } + _paths[pathIdx].packetsReceivedSinceLastQoS = 0; + _paths[pathIdx].lastQoSMeasurement = now; } - // Account for the fact that a VERB_QOS_MEASUREMENT was just sent. Reset timers. - path->_packetsReceivedSinceLastQoS = 0; - path->_lastQoSMeasurement = now; + // log("send QOS via link %s/%s (len=%d)", getLink(_paths[pathIdx].p)->ifname().c_str(), pathStr, len); } -void Bond::processBackgroundTasks(void *tPtr, const int64_t now) +void Bond::processBackgroundBondTasks(void* tPtr, int64_t now) { - Mutex::Lock _l(_paths_m); - if (!_peer->_canUseMultipath || (now - _lastBackgroundTaskCheck) < ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL) { + if (! _peer->_localMultipathSupported || (now - _lastBackgroundTaskCheck) < ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL) { return; } _lastBackgroundTaskCheck = now; + Mutex::Lock _l(_paths_m); - // Compute dynamic path monitor timer interval - if (_linkMonitorStrategy == ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC) { - int suggestedMonitorInterval = (now - _lastFrame) / 100; - _dynamicPathMonitorInterval = std::min(ZT_PATH_HEARTBEAT_PERIOD, ((suggestedMonitorInterval > _bondMonitorInterval) ? suggestedMonitorInterval : _bondMonitorInterval)); - } - // TODO: Clarify and generalize this logic - if (_linkMonitorStrategy == ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC) { - _shouldCollectPathStatistics = true; - } - - // Memoize oft-used properties in the packet ingress/egress logic path - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { - // Required for real-time balancing - _shouldCollectPathStatistics = true; - } - if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { - if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_BETTER) { - // Required for judging suitability of primary link after recovery - _shouldCollectPathStatistics = true; - } - if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { - // Required for judging suitability of new candidate primary - _shouldCollectPathStatistics = true; - } - } - if ((now - _lastCheckUserPreferences) > 1000) { - _lastCheckUserPreferences = now; - applyUserPrefs(); - } - - curateBond(now,false); + curateBond(now, false); if ((now - _lastQualityEstimation) > _qualityEstimationInterval) { _lastQualityEstimation = now; estimatePathQuality(now); } - dumpInfo(now); + dumpInfo(now, false); - // Send QOS/ACK packets as needed - if (_shouldCollectPathStatistics) { - for(unsigned int i=0;iallowed()) { - if (_paths[i]->needsToSendQoS(now,_qosSendInterval)) { - sendQOS_MEASUREMENT(tPtr, _paths[i], _paths[i]->localSocket(), _paths[i]->address(), now); - } - if (_paths[i]->needsToSendAck(now,_ackSendInterval)) { - sendACK(tPtr, _paths[i], _paths[i]->localSocket(), _paths[i]->address(), now); + // Send ambient monitoring traffic + for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p && _paths[i].allowed()) { + // ECHO (this is our bond's heartbeat) + if ((_monitorInterval > 0) && ((now - _paths[i].p->_lastOut) >= _monitorInterval)) { + if ((_peer->remoteVersionProtocol() >= 5) && (! ((_peer->remoteVersionMajor() == 1) && (_peer->remoteVersionMinor() == 1) && (_peer->remoteVersionRevision() == 0)))) { + Packet outp(_peer->address(), RR->identity.address(), Packet::VERB_ECHO); + outp.armor(_peer->key(), true, _peer->aesKeysIfSupported()); + RR->node->expectReplyTo(outp.packetId()); + RR->node->putPacket(tPtr, _paths[i].p->localSocket(), _paths[i].p->address(), outp.data(), outp.size()); + _overheadBytes += outp.size(); + char pathStr[64] = { 0 }; + _paths[i].p->address().toString(pathStr); + // log("send HELLO via link %s/%s (len=%d)", getLink(_paths[i].p)->ifname().c_str(), pathStr, outp.size()); } } + // QOS + if (_paths[i].needsToSendQoS(now, _qosSendInterval)) { + sendQOS_MEASUREMENT(tPtr, i, _paths[i].p->localSocket(), _paths[i].p->address(), now); + } } } // Perform periodic background tasks unique to each bonding policy - switch (_bondingPolicy) - { - case ZT_BONDING_POLICY_ACTIVE_BACKUP: + switch (_policy) { + case ZT_BOND_POLICY_ACTIVE_BACKUP: processActiveBackupTasks(tPtr, now); break; - case ZT_BONDING_POLICY_BROADCAST: + case ZT_BOND_POLICY_BROADCAST: break; - case ZT_BONDING_POLICY_BALANCE_RR: - case ZT_BONDING_POLICY_BALANCE_XOR: - case ZT_BONDING_POLICY_BALANCE_AWARE: + case ZT_BOND_POLICY_BALANCE_RR: + case ZT_BOND_POLICY_BALANCE_XOR: + case ZT_BOND_POLICY_BALANCE_AWARE: processBalanceTasks(now); break; default: break; } // Check whether or not a path negotiation needs to be performed - if (((now - _lastPathNegotiationCheck) > ZT_PATH_NEGOTIATION_CHECK_INTERVAL) && _allowPathNegotiation) { + if (((now - _lastPathNegotiationCheck) > ZT_BOND_OPTIMIZE_INTERVAL) && _allowPathNegotiation) { _lastPathNegotiationCheck = now; pathNegotiationCheck(tPtr, now); } } -void Bond::applyUserPrefs() +void Bond::curateBond(int64_t now, bool rebuildBond) { - for(unsigned int i=0;i sl = getLink(_paths[i]); - if (sl) { - if (sl->monitorInterval() == 0) { // If no interval was specified for this link, use more generic bond-wide interval - sl->setMonitorInterval(_bondMonitorInterval); - } - RR->bc->setMinReqPathMonitorInterval((sl->monitorInterval() < RR->bc->minReqPathMonitorInterval()) ? sl->monitorInterval() : RR->bc->minReqPathMonitorInterval()); - bool bFoundCommonLink = false; - SharedPtr commonLink =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); - for(unsigned int j=0;jbc->getLinkBySocket(_policyAlias, _paths[j]->localSocket()) == commonLink) { - bFoundCommonLink = true; - } - } - } - _paths[i]->_monitorInterval = sl->monitorInterval(); - _paths[i]->_upDelay = sl->upDelay() ? sl->upDelay() : _upDelay; - _paths[i]->_downDelay = sl->downDelay() ? sl->downDelay() : _downDelay; - _paths[i]->_ipvPref = sl->ipvPref(); - _paths[i]->_mode = sl->mode(); - _paths[i]->_enabled = sl->enabled(); - _paths[i]->_onlyPathOnLink = !bFoundCommonLink; - } - } - if (_peer) { - _peer->_shouldCollectPathStatistics = _shouldCollectPathStatistics; - _peer->_bondingPolicy = _bondingPolicy; - } -} - -void Bond::curateBond(const int64_t now, bool rebuildBond) -{ - char traceMsg[256]; - char pathStr[128]; + char pathStr[64] = { 0 }; uint8_t tmpNumAliveLinks = 0; uint8_t tmpNumTotalLinks = 0; /** - * Update path states + * Update path state variables. State variables are used so that critical + * blocks that perform fast packet processing won't need to make as many + * function calls or computations. */ - for(unsigned int i=0;ialive(now, true)) { + if (_paths[i].eligible) { tmpNumAliveLinks++; } - bool currEligibility = _paths[i]->eligible(now,_ackSendInterval); - if (currEligibility != _paths[i]->_lastEligibilityState) { - _paths[i]->address().toString(pathStr); - char traceMsg[256]; _paths[i]->address().toString(pathStr); - sprintf(traceMsg, "%s (bond) Eligibility of link %s/%s to peer %llx has changed from %d to %d", - OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), pathStr, _peer->_id.address().toInt(), _paths[i]->_lastEligibilityState, currEligibility); - RR->t->bondStateMessage(NULL, traceMsg); + + /** + * Determine alive-ness + */ + _paths[i].alive = (now - _paths[i].p->_lastIn) < _failoverInterval; + + /** + * Determine current eligibility + */ + bool currEligibility = false; + // Simple RX age (driven by packets of any type and gratuitous VERB_HELLOs) + bool acceptableAge = _paths[i].p->age(now) < (_failoverInterval + _downDelay); + // Whether we've waited long enough since the link last came online + bool satisfiedUpDelay = (now - _paths[i].lastAliveToggle) >= _upDelay; + // Whether this path is still in its trial period + bool inTrial = (now - _paths[i].whenNominated) < ZT_BOND_OPTIMIZE_INTERVAL; + // if (includeRefractoryPeriod && _paths[i].refractoryPeriod) { + // As long as the refractory period value has not fully drained this path is not eligible + // currEligibility = false; + //} + currEligibility = _paths[i].allowed() && ((acceptableAge && satisfiedUpDelay) || inTrial); + // log("[%d] allowed=%d, acceptableAge=%d, satisfiedUpDelay=%d, inTrial=%d ==== %d", i, _paths[i].allowed(), acceptableAge, satisfiedUpDelay, inTrial, currEligibility); + + /** + * Note eligibility state change (if any) and take appropriate action + */ + if (currEligibility != _paths[i].eligible) { + _paths[i].p->address().toString(pathStr); + if (currEligibility == 0) { + log("link %s/%s is no longer eligible", getLink(_paths[i].p)->ifname().c_str(), pathStr); + } + if (currEligibility == 1) { + log("link %s/%s is eligible", getLink(_paths[i].p)->ifname().c_str(), pathStr); + } + dumpPathStatus(now, i); if (currEligibility) { rebuildBond = true; } - if (!currEligibility) { - _paths[i]->adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, !currEligibility); - if (_paths[i]->bonded()) { - char pathStr[128]; _paths[i]->address().toString(pathStr); - sprintf(traceMsg, "%s (bond) Link %s/%s to peer %llx was bonded, reallocation of its flows will occur soon", - OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), pathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); - rebuildBond = true; - _paths[i]->_shouldReallocateFlows = _paths[i]->bonded(); - _paths[i]->setBonded(false); - } else { - sprintf(traceMsg, "%s (bond) Link %s/%s to peer %llx was not bonded, no allocation consequences", - OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), pathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + if (! currEligibility) { + _paths[i].adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, ! currEligibility); + if (_paths[i].bonded) { + _paths[i].bonded = false; + if (_allowFlowHashing) { + _paths[i].p->address().toString(pathStr); + log("link %s/%s was bonded, flow reallocation will occur soon", getLink(_paths[i].p)->ifname().c_str(), pathStr); + rebuildBond = true; + _paths[i].shouldReallocateFlows = _paths[i].bonded; + } } } } if (currEligibility) { - _paths[i]->adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, false); + _paths[i].adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, false); } - _paths[i]->_lastEligibilityState = currEligibility; + _paths[i].eligible = currEligibility; } + + /** + * Determine health status to report to user + */ _numAliveLinks = tmpNumAliveLinks; _numTotalLinks = tmpNumTotalLinks; - - /* Determine health status to report to user */ - bool tmpHealthStatus = true; - if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { + if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { if (_numAliveLinks < 2) { - // Considered healthy if there is at least one failover link + // Considered healthy if there is at least one backup link tmpHealthStatus = false; } } - if (_bondingPolicy == ZT_BONDING_POLICY_BROADCAST) { + if (_policy == ZT_BOND_POLICY_BROADCAST) { if (_numAliveLinks < 1) { - // Considerd healthy if we're able to send frames at all + // Considered healthy if we're able to send frames at all tmpHealthStatus = false; } } - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { + if ((_policy == ZT_BOND_POLICY_BALANCE_RR) || (_policy == ZT_BOND_POLICY_BALANCE_XOR) || (_policy == ZT_BOND_POLICY_BALANCE_AWARE)) { if (_numAliveLinks < _numTotalLinks) { - // Considerd healthy if all known paths are alive, this should be refined to account for user bond config settings - tmpHealthStatus = false; - } - } - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) { - if (_numAliveLinks < _numTotalLinks) { - // Considerd healthy if all known paths are alive, this should be refined to account for user bond config settings - tmpHealthStatus = false; - } - } - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { - if (_numAliveLinks < _numTotalLinks) { - // Considerd healthy if all known paths are alive, this should be refined to account for user bond config settings tmpHealthStatus = false; } } @@ -888,171 +938,195 @@ void Bond::curateBond(const int64_t now, bool rebuildBond) std::string healthStatusStr; if (tmpHealthStatus == true) { healthStatusStr = "HEALTHY"; - } else { + } + else { healthStatusStr = "DEGRADED"; } - sprintf(traceMsg, "%s (bond) Bond to peer %llx is in a %s state (%d/%d links)", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), healthStatusStr.c_str(), _numAliveLinks, _numTotalLinks); - RR->t->bondStateMessage(NULL, traceMsg); + log("bond is in a %s state (links: %d/%d)", healthStatusStr.c_str(), _numAliveLinks, _numTotalLinks); + dumpInfo(now, true); } _isHealthy = tmpHealthStatus; /** - * Curate the set of paths that are part of the bond proper. Selects a single path + * Curate the set of paths that are part of the bond proper. Select a set of paths * per logical link according to eligibility and user-specified constraints. */ - if ((_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) - || (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) - || (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE)) { - if (!_numBondedPaths) { + + if ((_policy == ZT_BOND_POLICY_BALANCE_RR) || (_policy == ZT_BOND_POLICY_BALANCE_XOR) || (_policy == ZT_BOND_POLICY_BALANCE_AWARE)) { + if (! _numBondedPaths) { rebuildBond = true; } - // TODO: Optimize if (rebuildBond) { + log("rebuilding bond"); + // TODO: Obey blacklisting int updatedBondedPathCount = 0; - std::map,int> linkMap; - for (int i=0;iallowed() && (_paths[i]->eligible(now,_ackSendInterval) || !_numBondedPaths)) { - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); - if (!linkMap.count(link)) { - linkMap[link] = i; - } - else { - bool overriden = false; - _paths[i]->address().toString(pathStr); - //fprintf(stderr, " link representative path already exists! (%s %s)\n", getLink(_paths[i])->ifname().c_str(), pathStr); - if (_paths[i]->preferred() && !_paths[linkMap[link]]->preferred()) { - // Override previous choice if preferred - if (_paths[linkMap[link]]->_assignedFlowCount) { - _paths[linkMap[link]]->_deprecated = true; - } - else { - _paths[linkMap[link]]->_deprecated = true; - _paths[linkMap[link]]->setBonded(false); - } - linkMap[link] = i; - overriden = true; - } - if ((_paths[i]->preferred() && _paths[linkMap[link]]->preferred()) - || (!_paths[i]->preferred() && !_paths[linkMap[link]]->preferred())) { - if (_paths[i]->preferenceRank() > _paths[linkMap[link]]->preferenceRank()) { - // Override if higher preference - if (_paths[linkMap[link]]->_assignedFlowCount) { - _paths[linkMap[link]]->_deprecated = true; - } - else { - _paths[linkMap[link]]->_deprecated = true; - _paths[linkMap[link]]->setBonded(false); - } - linkMap[link] = i; - } - } - } + // Build map associating paths with local physical links. Will be selected from in next step + std::map, std::vector > linkMap; + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p) { + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + linkMap[link].push_back(i); } } - std::map,int>::iterator it = linkMap.begin(); - for (int i=0; ipath map + std::map, std::vector >::iterator it = linkMap.begin(); + while (it != linkMap.end()) { + SharedPtr link = it->first; + int ipvPref = link->ipvPref(); + + // If user has no address type preference, then use every path we find on a link + if (ipvPref == 0) { + for (int j = 0; j < it->second.size(); j++) { + int idx = it->second.at(j); + if (! _paths[idx].p || ! _paths[idx].allowed()) { + continue; + } + addPathToBond(idx, updatedBondedPathCount); + ++updatedBondedPathCount; + _paths[idx].p->address().toString(pathStr); + log("add %s/%s (no user addr preference)", link->ifname().c_str(), pathStr); + } } - _bondedIdx[i] = ZT_MAX_PEER_NETWORK_PATHS; - if (it != linkMap.end()) { - _bondedIdx[i] = it->second; - _paths[_bondedIdx[i]]->setBonded(true); - ++it; - ++updatedBondedPathCount; - _paths[_bondedIdx[i]]->address().toString(pathStr); - //fprintf(stderr, "setting i=%d, _bondedIdx[%d]=%d to bonded (%s %s)\n", i, i, _bondedIdx[i], getLink(_paths[_bondedIdx[i]])->ifname().c_str(), pathStr); + // If the user prefers to only use one address type (IPv4 or IPv6) + if (ipvPref == 4 || ipvPref == 6) { + for (int j = 0; j < it->second.size(); j++) { + int idx = it->second.at(j); + if (! _paths[idx].p) { + continue; + } + if (! _paths[idx].allowed()) { + _paths[idx].p->address().toString(pathStr); + log("did not add %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); + continue; + } + if (! _paths[idx].eligible) { + continue; + } + addPathToBond(idx, updatedBondedPathCount); + ++updatedBondedPathCount; + _paths[idx].p->address().toString(pathStr); + log("add path %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); + } } + // If the users prefers one address type to another, try to find at least + // one path of that type before considering others. + if (ipvPref == 46 || ipvPref == 64) { + bool foundPreferredPath = false; + // Search for preferred paths + for (int j = 0; j < it->second.size(); j++) { + int idx = it->second.at(j); + if (! _paths[idx].p || ! _paths[idx].eligible) { + continue; + } + if (_paths[idx].preferred() && _paths[idx].allowed()) { + addPathToBond(idx, updatedBondedPathCount); + ++updatedBondedPathCount; + _paths[idx].p->address().toString(pathStr); + log("add %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); + foundPreferredPath = true; + } + } + // Unable to find a path that matches user preference, settle for another address type + if (! foundPreferredPath) { + log("did not find first-choice path type on link %s (user preference %d)", link->ifname().c_str(), ipvPref); + for (int j = 0; j < it->second.size(); j++) { + int idx = it->second.at(j); + if (! _paths[idx].p || ! _paths[idx].eligible) { + continue; + } + addPathToBond(idx, updatedBondedPathCount); + ++updatedBondedPathCount; + _paths[idx].p->address().toString(pathStr); + log("add %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); + foundPreferredPath = true; + } + } + } + ++it; // Next link } _numBondedPaths = updatedBondedPathCount; - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { - // Cause a RR reset since the currently used index might no longer be valid + if (_policy == ZT_BOND_POLICY_BALANCE_RR) { + // Cause a RR reset since the current index might no longer be valid _rrPacketsSentOnCurrLink = _packetsPerLink; } } } } -void Bond::estimatePathQuality(const int64_t now) +void Bond::estimatePathQuality(int64_t now) { - char pathStr[128]; uint32_t totUserSpecifiedLinkSpeed = 0; - if (_numBondedPaths) { // Compute relative user-specified speeds of links - for(unsigned int i=0;i<_numBondedPaths;++i) { - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); - if (_paths[i] && _paths[i]->allowed()) { + if (_numBondedPaths) { // Compute relative user-specified speeds of links + for (unsigned int i = 0; i < _numBondedPaths; ++i) { + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + if (_paths[i].p && _paths[i].allowed()) { totUserSpecifiedLinkSpeed += link->speed(); } } - for(unsigned int i=0;i<_numBondedPaths;++i) { - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); - if (_paths[i] && _paths[i]->allowed()) { - link->setRelativeSpeed(round( ((float)link->speed() / (float)totUserSpecifiedLinkSpeed) * 255)); + for (unsigned int i = 0; i < _numBondedPaths; ++i) { + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + if (_paths[i].p && _paths[i].allowed()) { + link->setRelativeSpeed((uint8_t)round(((float)link->speed() / (float)totUserSpecifiedLinkSpeed) * 255)); } } } - float lat[ZT_MAX_PEER_NETWORK_PATHS]; - float pdv[ZT_MAX_PEER_NETWORK_PATHS]; - float plr[ZT_MAX_PEER_NETWORK_PATHS]; - float per[ZT_MAX_PEER_NETWORK_PATHS]; + float lat[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; + float pdv[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; + float plr[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; + float per[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; float maxLAT = 0; float maxPDV = 0; float maxPLR = 0; float maxPER = 0; - float quality[ZT_MAX_PEER_NETWORK_PATHS]; - uint8_t alloc[ZT_MAX_PEER_NETWORK_PATHS]; + float quality[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; + uint8_t alloc[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; float totQuality = 0.0f; - memset(&lat, 0, sizeof(lat)); - memset(&pdv, 0, sizeof(pdv)); - memset(&plr, 0, sizeof(plr)); - memset(&per, 0, sizeof(per)); - memset(&quality, 0, sizeof(quality)); - memset(&alloc, 0, sizeof(alloc)); - // Compute initial summary statistics - for(unsigned int i=0;iallowed()) { + for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (! _paths[i].p || ! _paths[i].allowed()) { continue; } // Compute/Smooth average of real-world observations - _paths[i]->_latencyMean = _paths[i]->latencySamples.mean(); - _paths[i]->_latencyVariance = _paths[i]->latencySamples.stddev(); - _paths[i]->_packetErrorRatio = 1.0 - (_paths[i]->packetValiditySamples.count() ? _paths[i]->packetValiditySamples.mean() : 1.0); + _paths[i].latencyMean = _paths[i].latencySamples.mean(); + _paths[i].latencyVariance = _paths[i].latencySamples.stddev(); + _paths[i].packetErrorRatio = 1.0 - (_paths[i].packetValiditySamples.count() ? _paths[i].packetValiditySamples.mean() : 1.0); if (userHasSpecifiedLinkSpeeds()) { // Use user-reported metrics - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); if (link) { - _paths[i]->_throughputMean = link->speed(); - _paths[i]->_throughputVariance = 0; + _paths[i].throughputMean = link->speed(); + _paths[i].throughputVariance = 0; } } // Drain unacknowledged QoS records - std::map::iterator it = _paths[i]->qosStatsOut.begin(); + std::map::iterator it = _paths[i].qosStatsOut.begin(); uint64_t currentLostRecords = 0; - while (it != _paths[i]->qosStatsOut.end()) { - int qosRecordTimeout = 5000; //_paths[i]->monitorInterval() * ZT_MULTIPATH_QOS_ACK_INTERVAL_MULTIPLIER * 8; + while (it != _paths[i].qosStatsOut.end()) { + int qosRecordTimeout = 5000; //_paths[i].p->monitorInterval() * ZT_BOND_QOS_ACK_INTERVAL_MULTIPLIER * 8; if ((now - it->second) >= qosRecordTimeout) { // Packet was lost - it = _paths[i]->qosStatsOut.erase(it); + it = _paths[i].qosStatsOut.erase(it); ++currentLostRecords; - } else { ++it; } + } + else { + ++it; + } } - quality[i]=0; - totQuality=0; + quality[i] = 0; + totQuality = 0; // Normalize raw observations according to sane limits and/or user specified values - lat[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_latencyMean, 0, _maxAcceptableLatency, 0, 1)); - pdv[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_latencyVariance, 0, _maxAcceptablePacketDelayVariance, 0, 1)); - plr[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_packetLossRatio, 0, _maxAcceptablePacketLossRatio, 0, 1)); - per[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_packetErrorRatio, 0, _maxAcceptablePacketErrorRatio, 0, 1)); + lat[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].latencyMean, 0, _maxAcceptableLatency, 0, 1)); + pdv[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].latencyVariance, 0, _maxAcceptablePacketDelayVariance, 0, 1)); + plr[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].packetLossRatio, 0, _maxAcceptablePacketLossRatio, 0, 1)); + per[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].packetErrorRatio, 0, _maxAcceptablePacketErrorRatio, 0, 1)); // Record bond-wide maximums to determine relative values maxLAT = lat[i] > maxLAT ? lat[i] : maxLAT; maxPDV = pdv[i] > maxPDV ? pdv[i] : maxPDV; @@ -1060,81 +1134,74 @@ void Bond::estimatePathQuality(const int64_t now) maxPER = per[i] > maxPER ? per[i] : maxPER; } // Convert metrics to relative quantities and apply contribution weights - for(unsigned int i=0;ibonded()) { - quality[i] += ((maxLAT > 0.0f ? lat[i] / maxLAT : 0.0f) * _qualityWeights[ZT_QOS_LAT_IDX]); - quality[i] += ((maxPDV > 0.0f ? pdv[i] / maxPDV : 0.0f) * _qualityWeights[ZT_QOS_PDV_IDX]); - quality[i] += ((maxPLR > 0.0f ? plr[i] / maxPLR : 0.0f) * _qualityWeights[ZT_QOS_PLR_IDX]); - quality[i] += ((maxPER > 0.0f ? per[i] / maxPER : 0.0f) * _qualityWeights[ZT_QOS_PER_IDX]); + for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p && _paths[i].bonded) { + quality[i] += ((maxLAT > 0.0f ? lat[i] / maxLAT : 0.0f) * _qw[ZT_QOS_LAT_IDX]); + quality[i] += ((maxPDV > 0.0f ? pdv[i] / maxPDV : 0.0f) * _qw[ZT_QOS_PDV_IDX]); + quality[i] += ((maxPLR > 0.0f ? plr[i] / maxPLR : 0.0f) * _qw[ZT_QOS_PLR_IDX]); + quality[i] += ((maxPER > 0.0f ? per[i] / maxPER : 0.0f) * _qw[ZT_QOS_PER_IDX]); totQuality += quality[i]; } } // Normalize to 8-bit allocation values - for(unsigned int i=0;ibonded()) { - alloc[i] = std::ceil((quality[i] / totQuality) * (float)255); - _paths[i]->_allocation = alloc[i]; + for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p && _paths[i].bonded) { + alloc[i] = (uint8_t)(std::ceil((quality[i] / totQuality) * (float)255)); + _paths[i].allocation = alloc[i]; } } } -void Bond::processBalanceTasks(const int64_t now) +void Bond::processBalanceTasks(int64_t now) { - char curPathStr[128]; - // TODO: Generalize + char pathStr[64] = { 0 }; int totalAllocation = 0; - for (int i=0;ibonded() && _paths[i]->eligible(now,_ackSendInterval)) { - totalAllocation+=_paths[i]->_allocation; + if (_paths[i].p && _paths[i].bonded && _paths[i].eligible) { + totalAllocation += _paths[i].allocation; } } - unsigned char minimumAllocationValue = 0.33 * ((float)totalAllocation / (float)_numBondedPaths); + unsigned char minimumAllocationValue = (uint8_t)(0.33 * ((float)totalAllocation / (float)_numBondedPaths)); if (_allowFlowHashing) { /** * Clean up and reset flows if necessary */ - if ((now - _lastFlowExpirationCheck) > ZT_MULTIPATH_FLOW_CHECK_INTERVAL) { + if ((now - _lastFlowExpirationCheck) > ZT_PEER_PATH_EXPIRATION) { Mutex::Lock _l(_flows_m); - forgetFlowsWhenNecessary(ZT_MULTIPATH_FLOW_EXPIRATION_INTERVAL,false,now); - _lastFlowExpirationCheck = now; - } - if ((now - _lastFlowStatReset) > ZT_FLOW_STATS_RESET_INTERVAL) { - Mutex::Lock _l(_flows_m); - _lastFlowStatReset = now; - std::map >::iterator it = _flows.begin(); + forgetFlowsWhenNecessary(ZT_PEER_PATH_EXPIRATION, false, now); + std::map >::iterator it = _flows.begin(); while (it != _flows.end()) { it->second->resetByteCounts(); ++it; } + _lastFlowExpirationCheck = now; } /** * Re-allocate flows from dead paths */ - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { + if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) { Mutex::Lock _l(_flows_m); - for (int i=0;ieligible(now,_ackSendInterval) && _paths[i]->_shouldReallocateFlows) { - char traceMsg[256]; char pathStr[128]; _paths[i]->address().toString(pathStr); - sprintf(traceMsg, "%s (balance-*) Reallocating flows to peer %llx from dead link %s/%s to surviving links", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_paths[i])->ifname().c_str(), pathStr); - RR->t->bondStateMessage(NULL, traceMsg); - std::map >::iterator flow_it = _flows.begin(); + if (! _paths[i].eligible && _paths[i].shouldReallocateFlows) { + _paths[i].p->address().toString(pathStr); + log("reallocate flows from dead link %s/%s", getLink(_paths[i].p)->ifname().c_str(), pathStr); + std::map >::iterator flow_it = _flows.begin(); while (flow_it != _flows.end()) { - if (flow_it->second->assignedPath() == _paths[i]) { - if(assignFlowToBondedPath(flow_it->second, now)) { - _paths[i]->_assignedFlowCount--; + if (_paths[flow_it->second->assignedPath].p == _paths[i].p) { + if (assignFlowToBondedPath(flow_it->second, now)) { + _paths[i].assignedFlowCount--; } } ++flow_it; } - _paths[i]->_shouldReallocateFlows = false; + _paths[i].shouldReallocateFlows = false; } } } @@ -1142,173 +1209,91 @@ void Bond::processBalanceTasks(const int64_t now) * Re-allocate flows from under-performing * NOTE: This could be part of the above block but was kept separate for clarity. */ - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { + if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) { Mutex::Lock _l(_flows_m); - for (int i=0;ibonded() && _paths[i]->eligible(now,_ackSendInterval) && (_paths[i]->_allocation < minimumAllocationValue) && _paths[i]->_assignedFlowCount) { - _paths[i]->address().toString(curPathStr); - char traceMsg[256]; char pathStr[128]; _paths[i]->address().toString(pathStr); - sprintf(traceMsg, "%s (balance-*) Reallocating flows to peer %llx from under-performing link %s/%s\n", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_paths[i])->ifname().c_str(), pathStr); - RR->t->bondStateMessage(NULL, traceMsg); - std::map >::iterator flow_it = _flows.begin(); + if (_paths[i].p && _paths[i].bonded && _paths[i].eligible && (_paths[i].allocation < minimumAllocationValue) && _paths[i].assignedFlowCount) { + _paths[i].p->address().toString(pathStr); + log("reallocate flows from under-performing link %s/%s\n", getLink(_paths[i].p)->ifname().c_str(), pathStr); + std::map >::iterator flow_it = _flows.begin(); while (flow_it != _flows.end()) { - if (flow_it->second->assignedPath() == _paths[i]) { - if(assignFlowToBondedPath(flow_it->second, now)) { - _paths[i]->_assignedFlowCount--; + if (flow_it->second->assignedPath == _paths[i].p) { + if (assignFlowToBondedPath(flow_it->second, now)) { + _paths[i].assignedFlowCount--; } } ++flow_it; } - _paths[i]->_shouldReallocateFlows = false; + _paths[i].shouldReallocateFlows = false; } } } } - /** - * Tasks specific to (Balance Round Robin) - */ - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { - // Nothing - } - /** - * Tasks specific to (Balance XOR) - */ - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) { - // Nothing - } - /** - * Tasks specific to (Balance Aware) - */ - if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { - if (_allowFlowHashing) { - Mutex::Lock _l(_flows_m); - if (_flowRebalanceStrategy == ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE) { - // Do nothing here, this is taken care of in the more general case above. - } - if (_flowRebalanceStrategy == ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_OPPORTUNISTIC) { - // If the flow is temporarily inactive we should take this opportunity to re-assign the flow if needed. - } - if (_flowRebalanceStrategy == ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE) { - /** - * Return flows to the original path if it has once again become available - */ - if ((now - _lastFlowRebalance) > ZT_FLOW_REBALANCE_INTERVAL) { - std::map >::iterator flow_it = _flows.begin(); - while (flow_it != _flows.end()) { - if (flow_it->second->_previouslyAssignedPath && flow_it->second->_previouslyAssignedPath->eligible(now, _ackSendInterval) - && (flow_it->second->_previouslyAssignedPath->_allocation >= (minimumAllocationValue * 2))) { - //fprintf(stderr, "moving flow back onto its previous path assignment (based on eligibility)\n"); - (flow_it->second->_assignedPath->_assignedFlowCount)--; - flow_it->second->assignPath(flow_it->second->_previouslyAssignedPath,now); - (flow_it->second->_previouslyAssignedPath->_assignedFlowCount)++; - } - ++flow_it; - } - _lastFlowRebalance = now; - } - /** - * Return flows to the original path if it has once again become (performant) - */ - if ((now - _lastFlowRebalance) > ZT_FLOW_REBALANCE_INTERVAL) { - std::map >::iterator flow_it = _flows.begin(); - while (flow_it != _flows.end()) { - if (flow_it->second->_previouslyAssignedPath && flow_it->second->_previouslyAssignedPath->eligible(now, _ackSendInterval) - && (flow_it->second->_previouslyAssignedPath->_allocation >= (minimumAllocationValue * 2))) { - //fprintf(stderr, "moving flow back onto its previous path assignment (based on performance)\n"); - (flow_it->second->_assignedPath->_assignedFlowCount)--; - flow_it->second->assignPath(flow_it->second->_previouslyAssignedPath,now); - (flow_it->second->_previouslyAssignedPath->_assignedFlowCount)++; - } - ++flow_it; - } - _lastFlowRebalance = now; - } - } - } - else if (!_allowFlowHashing) { - // Nothing - } - } } -void Bond::dequeueNextActiveBackupPath(const uint64_t now) +void Bond::dequeueNextActiveBackupPath(uint64_t now) { if (_abFailoverQueue.empty()) { return; } - _abPath = _abFailoverQueue.front(); + _abPathIdx = _abFailoverQueue.front(); _abFailoverQueue.pop_front(); _lastActiveBackupPathChange = now; - for (int i=0; iresetPacketCounts(); + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p) { + _paths[i].resetPacketCounts(); } } } bool Bond::abForciblyRotateLink() { - char traceMsg[256]; - char prevPathStr[128]; - char curPathStr[128]; - if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { - SharedPtr prevPath = _abPath; - _abPath->address().toString(prevPathStr); + char prevPathStr[64]; + char curPathStr[64]; + if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { + int prevPathIdx = _abPathIdx; + _paths[_abPathIdx].p->address().toString(prevPathStr); dequeueNextActiveBackupPath(RR->node->now()); - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Forcibly rotating peer %llx link from %s/%s to %s/%s", - OSUtils::humanReadableTimestamp().c_str(), - _peer->_id.address().toInt(), - getLink(prevPath)->ifname().c_str(), - prevPathStr, - getLink(_abPath)->ifname().c_str(), - curPathStr); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[_abPathIdx].p->address().toString(curPathStr); + log("forcibly rotate link from %s/%s to %s/%s", getLink(_paths[prevPathIdx].p)->ifname().c_str(), prevPathStr, getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); return true; } return false; } -void Bond::processActiveBackupTasks(void *tPtr, const int64_t now) +void Bond::processActiveBackupTasks(void* tPtr, int64_t now) { - char traceMsg[256]; - char pathStr[128]; - char prevPathStr[128]; - char curPathStr[128]; - - SharedPtr prevActiveBackupPath = _abPath; - SharedPtr nonPreferredPath; + char pathStr[64] = { 0 }; + char prevPathStr[64]; + char curPathStr[64]; + int prevActiveBackupPathIdx = _abPathIdx; + int nonPreferredPathIdx; bool bFoundPrimaryLink = false; /** - * Generate periodic statuc report + * Generate periodic status report */ - if ((now - _lastBondStatusLog) > ZT_MULTIPATH_BOND_STATUS_INTERVAL) { + if ((now - _lastBondStatusLog) > ZT_BOND_STATUS_INTERVAL) { _lastBondStatusLog = now; - if (_abPath) { - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Active link to peer %llx is %s/%s, failover queue size is %zu", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_abPath)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); - RR->t->bondStateMessage(NULL, traceMsg); - } else { - sprintf(traceMsg, "%s (active-backup) No active link to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + log("no active link"); + } + else if (_paths[_abPathIdx].p) { + _paths[_abPathIdx].p->address().toString(curPathStr); + log("active link is %s/%s, failover queue size is %zu", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); } if (_abFailoverQueue.empty()) { - sprintf(traceMsg, "%s (active-backup) Failover queue is empty, bond to peer %llx is NOT currently fault-tolerant", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + log("failover queue is empty, no longer fault-tolerant"); } } + /** * Select initial "active" active-backup link */ - if (!_abPath) { + if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { /** * [Automatic mode] * The user has not explicitly specified links or their failover schedule, @@ -1317,20 +1302,17 @@ void Bond::processActiveBackupTasks(void *tPtr, const int64_t now) * policy will assign it as the new active backup path. If the path fails it will * simply find the next eligible path. */ - if (!userHasSpecifiedLinks()) { - sprintf(traceMsg, "%s (active-backup) No links to peer %llx specified. Searching...", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); RR->t->bondStateMessage(NULL, traceMsg); - for (int i=0; ieligible(now,_ackSendInterval)) { - _paths[i]->address().toString(curPathStr); - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + if (! userHasSpecifiedLinks()) { + log("no user-specified links"); + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p && _paths[i].eligible) { + _paths[i].p->address().toString(curPathStr); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); if (link) { - sprintf(traceMsg, "%s (active-backup) Found eligible link %s/%s to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + log("found eligible link %s/%s", getLink(_paths[i].p)->ifname().c_str(), curPathStr); + _abPathIdx = i; + break; } - _abPath = _paths[i]; - break; } } } @@ -1340,300 +1322,280 @@ void Bond::processActiveBackupTasks(void *tPtr, const int64_t now) */ else if (userHasSpecifiedLinks()) { if (userHasSpecifiedPrimaryLink()) { - //sprintf(traceMsg, "%s (active-backup) Checking local.conf for user-specified primary link\n", OSUtils::humanReadableTimestamp().c_str()); - for (int i=0; i link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); - if (_paths[i]->eligible(now,_ackSendInterval) && link->primary()) { - if (!_paths[i]->preferred()) { - _paths[i]->address().toString(curPathStr); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + if (_paths[i].eligible && link->primary()) { + if (! _paths[i].preferred()) { + _paths[i].p->address().toString(curPathStr); // Found path on primary link, take note in case we don't find a preferred path - nonPreferredPath = _paths[i]; + nonPreferredPathIdx = i; bFoundPrimaryLink = true; } - if (_paths[i]->preferred()) { - _abPath = _paths[i]; - _abPath->address().toString(curPathStr); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + if (_paths[i].preferred()) { + _abPathIdx = i; + _paths[_abPathIdx].p->address().toString(curPathStr); bFoundPrimaryLink = true; - break; // Found preferred path %s on primary link + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_abPathIdx].p->localSocket()); + if (link) { + log("found preferred primary link %s/%s", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); + } + break; // Found preferred path on primary link } } } - if (_abPath) { - _abPath->address().toString(curPathStr); - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _abPath->localSocket()); - if (link) { - sprintf(traceMsg, "%s (active-backup) Found preferred primary link %s/%s to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); - } + if (bFoundPrimaryLink && nonPreferredPathIdx) { + log("found non-preferred primary link"); + _abPathIdx = nonPreferredPathIdx; } - else { - if (bFoundPrimaryLink && nonPreferredPath) { - sprintf(traceMsg, "%s (active-backup) Found non-preferred primary link to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); - _abPath = nonPreferredPath; - } - } - if (!_abPath) { - sprintf(traceMsg, "%s (active-backup) Designated primary link to peer %llx is not yet ready", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); - // TODO: Should wait for some time (failover interval?) and then swtich to spare link + if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + log("user-designated primary link is not yet ready"); + // TODO: Should wait for some time (failover interval?) and then switch to spare link } } - else if (!userHasSpecifiedPrimaryLink()) { - int _abIdx = ZT_MAX_PEER_NETWORK_PATHS; - sprintf(traceMsg, "%s (active-backup) User did not specify a primary link to peer %llx, selecting first available link", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); - for (int i=0; ieligible(now,_ackSendInterval)) { - _abIdx = i; + else if (! userHasSpecifiedPrimaryLink()) { + log("user did not specify a primary link, select first available link"); + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p && _paths[i].eligible) { + _abPathIdx = i; break; } } - if (_abIdx == ZT_MAX_PEER_NETWORK_PATHS) { - // Unable to find a candidate next-best, no change - } - else { - _abPath = _paths[_abIdx]; - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _abPath->localSocket()); + if (_abPathIdx != ZT_MAX_PEER_NETWORK_PATHS) { + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_abPathIdx].p->localSocket()); if (link) { - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Selected non-primary link %s/%s to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[_abPathIdx].p->address().toString(curPathStr); + log("select non-primary link %s/%s", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); } } } } } + + // Short-circuit if we don't have an active link yet + if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + return; + } + + // Remove ineligible paths from the failover link queue + for (std::deque::iterator it(_abFailoverQueue.begin()); it != _abFailoverQueue.end();) { + if (_paths[(*it)].p && ! _paths[(*it)].eligible) { + _paths[(*it)].p->address().toString(curPathStr); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[(*it)].p->localSocket()); + it = _abFailoverQueue.erase(it); + if (link) { + log("link %s/%s is now ineligible, removing from failover queue (%zu links in queue)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); + } + } + else { + ++it; + } + } + /** + * Failover instructions were provided by user, build queue according those as well as IPv + * preference, disregarding performance. + */ + if (userHasSpecifiedFailoverInstructions()) { + /** + * Clear failover scores + */ + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p) { + _paths[i].failoverScore = 0; + } + } + // Follow user-specified failover instructions + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (! _paths[i].p || ! _paths[i].allowed() || ! _paths[i].eligible) { + continue; + } + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + _paths[i].p->address().toString(pathStr); + + int failoverScoreHandicap = _paths[i].failoverScore; + if (_paths[i].preferred()) { + failoverScoreHandicap += ZT_BOND_FAILOVER_HANDICAP_PREFERRED; + } + if (link->primary()) { + // If using "optimize" primary re-select mode, ignore user link designations + failoverScoreHandicap += ZT_BOND_FAILOVER_HANDICAP_PRIMARY; + } + if (! _paths[i].failoverScore) { + // If we didn't inherit a failover score from a "parent" that wants to use this path as a failover + int newHandicap = failoverScoreHandicap ? failoverScoreHandicap : _paths[i].allocation; + _paths[i].failoverScore = newHandicap; + } + SharedPtr failoverLink; + if (link->failoverToLink().length()) { + failoverLink = RR->bc->getLinkByName(_policyAlias, link->failoverToLink()); + } + if (failoverLink) { + for (int j = 0; j < ZT_MAX_PEER_NETWORK_PATHS; j++) { + if (_paths[j].p && getLink(_paths[j].p) == failoverLink.ptr()) { + _paths[j].p->address().toString(pathStr); + int inheritedHandicap = failoverScoreHandicap - 10; + int newHandicap = _paths[j].failoverScore > inheritedHandicap ? _paths[j].failoverScore : inheritedHandicap; + if (! _paths[j].preferred()) { + newHandicap--; + } + _paths[j].failoverScore = newHandicap; + } + } + } + if (_paths[i].p.ptr() != _paths[_abPathIdx].p.ptr()) { + bool bFoundPathInQueue = false; + for (std::deque::iterator it(_abFailoverQueue.begin()); it != _abFailoverQueue.end(); ++it) { + if (_paths[i].p.ptr() == _paths[(*it)].p.ptr()) { + bFoundPathInQueue = true; + } + } + if (! bFoundPathInQueue) { + _abFailoverQueue.push_front(i); + _paths[i].p->address().toString(curPathStr); + log("add link %s/%s to failover queue (%zu links in queue)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); + addPathToBond(0, i); + } + } + } + } /** - * Update and maintain the active-backup failover queue + * No failover instructions provided by user, build queue according to performance + * and IPv preference. */ - if (_abPath) { - // Don't worry about the failover queue until we have an active link - // Remove ineligible paths from the failover link queue - for (std::list >::iterator it(_abFailoverQueue.begin()); it!=_abFailoverQueue.end();) { - if ((*it) && !(*it)->eligible(now,_ackSendInterval)) { - (*it)->address().toString(curPathStr); - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, (*it)->localSocket()); - it = _abFailoverQueue.erase(it); - if (link) { - sprintf(traceMsg, "%s (active-backup) Link %s/%s to peer %llx is now ineligible, removing from failover queue, there are %zu links in the queue", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); - RR->t->bondStateMessage(NULL, traceMsg); - } - } else { - ++it; + else if (! userHasSpecifiedFailoverInstructions()) { + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (! _paths[i].p || ! _paths[i].allowed() || ! _paths[i].eligible) { + continue; } - } - /** - * Failover instructions were provided by user, build queue according those as well as IPv - * preference, disregarding performance. - */ - if (userHasSpecifiedFailoverInstructions()) { - /** - * Clear failover scores - */ - for (int i=0; i_failoverScore = 0; - } + int failoverScoreHandicap = 0; + if (_paths[i].preferred()) { + failoverScoreHandicap = ZT_BOND_FAILOVER_HANDICAP_PREFERRED; } - // Follow user-specified failover instructions - for (int i=0; iallowed() || !_paths[i]->eligible(now,_ackSendInterval)) { - continue; - } - SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); - _paths[i]->address().toString(pathStr); - - int failoverScoreHandicap = _paths[i]->_failoverScore; - if (_paths[i]->preferred()) { - failoverScoreHandicap += ZT_MULTIPATH_FAILOVER_HANDICAP_PREFERRED; - } - if (link->primary()) { - // If using "optimize" primary reselect mode, ignore user link designations - failoverScoreHandicap += ZT_MULTIPATH_FAILOVER_HANDICAP_PRIMARY; - } - if (!_paths[i]->_failoverScore) { - // If we didn't inherit a failover score from a "parent" that wants to use this path as a failover - int newHandicap = failoverScoreHandicap ? failoverScoreHandicap : _paths[i]->_allocation; - _paths[i]->_failoverScore = newHandicap; - } - SharedPtr failoverLink; - if (link->failoverToLink().length()) { - failoverLink = RR->bc->getLinkByName(_policyAlias, link->failoverToLink()); - } - if (failoverLink) { - for (int j=0; jaddress().toString(pathStr); - int inheritedHandicap = failoverScoreHandicap - 10; - int newHandicap = _paths[j]->_failoverScore > inheritedHandicap ? _paths[j]->_failoverScore : inheritedHandicap; - if (!_paths[j]->preferred()) { - newHandicap--; - } - _paths[j]->_failoverScore = newHandicap; - } + if (! _paths[i].eligible) { + failoverScoreHandicap = -10000; + } + if (getLink(_paths[i].p)->primary() && _abLinkSelectMethod != ZT_BOND_RESELECTION_POLICY_OPTIMIZE) { + // If using "optimize" primary re-select mode, ignore user link designations + failoverScoreHandicap = ZT_BOND_FAILOVER_HANDICAP_PRIMARY; + } + if (_paths[i].p.ptr() == _paths[negotiatedPathIdx].p.ptr()) { + _paths[i].negotiated = true; + failoverScoreHandicap = ZT_BOND_FAILOVER_HANDICAP_NEGOTIATED; + } + else { + _paths[i].negotiated = false; + } + _paths[i].failoverScore = _paths[i].allocation + failoverScoreHandicap; + if (_paths[i].p.ptr() != _paths[_abPathIdx].p.ptr()) { + bool bFoundPathInQueue = false; + for (std::deque::iterator it(_abFailoverQueue.begin()); it != _abFailoverQueue.end(); ++it) { + if (_paths[i].p.ptr() == _paths[(*it)].p.ptr()) { + bFoundPathInQueue = true; } } - if (_paths[i].ptr() != _abPath.ptr()) { - bool bFoundPathInQueue = false; - for (std::list >::iterator it(_abFailoverQueue.begin()); it!=_abFailoverQueue.end();++it) { - if (_paths[i].ptr() == (*it).ptr()) { - bFoundPathInQueue = true; - } - } - if (!bFoundPathInQueue) { - _abFailoverQueue.push_front(_paths[i]); - _paths[i]->address().toString(curPathStr); sprintf(traceMsg, "%s (active-backup) Added link %s/%s to peer %llx to failover queue, there are %zu links in the queue", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); - RR->t->bondStateMessage(NULL, traceMsg); - } + if (! bFoundPathInQueue) { + _abFailoverQueue.push_front(i); + _paths[i].p->address().toString(curPathStr); + log("add link %s/%s to failover queue (%zu links in queue)", getLink(_paths[i].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); + addPathToBond(0, i); } } } - /** - * No failover instructions provided by user, build queue according to performance - * and IPv preference. - */ - else if (!userHasSpecifiedFailoverInstructions()) { - for (int i=0; iallowed() - || !_paths[i]->eligible(now,_ackSendInterval)) { - continue; - } - int failoverScoreHandicap = 0; - if (_paths[i]->preferred()) { - failoverScoreHandicap = ZT_MULTIPATH_FAILOVER_HANDICAP_PREFERRED; - } - bool includeRefractoryPeriod = true; - if (!_paths[i]->eligible(now,includeRefractoryPeriod)) { - failoverScoreHandicap = -10000; - } - if (getLink(_paths[i])->primary() && _abLinkSelectMethod != ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { - // If using "optimize" primary reselect mode, ignore user link designations - failoverScoreHandicap = ZT_MULTIPATH_FAILOVER_HANDICAP_PRIMARY; - } - if (_paths[i].ptr() == negotiatedPath.ptr()) { - _paths[i]->_negotiated = true; - failoverScoreHandicap = ZT_MULTIPATH_FAILOVER_HANDICAP_NEGOTIATED; - } else { - _paths[i]->_negotiated = false; - } - _paths[i]->_failoverScore = _paths[i]->_allocation + failoverScoreHandicap; - if (_paths[i].ptr() != _abPath.ptr()) { - bool bFoundPathInQueue = false; - for (std::list >::iterator it(_abFailoverQueue.begin()); it!=_abFailoverQueue.end();++it) { - if (_paths[i].ptr() == (*it).ptr()) { - bFoundPathInQueue = true; - } - } - if (!bFoundPathInQueue) { - _abFailoverQueue.push_front(_paths[i]); - _paths[i]->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Added link %s/%s to peer %llx to failover queue, there are %zu links in the queue", - OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); - RR->t->bondStateMessage(NULL, traceMsg); - } - } - } - } - _abFailoverQueue.sort(PathQualityComparator()); } + // Sort queue based on performance + if (! _abFailoverQueue.empty()) { + for (int i = 0; i < _abFailoverQueue.size(); i++) { + int value_to_insert = _abFailoverQueue[i]; + int hole_position = i; + while (hole_position > 0 && (_abFailoverQueue[hole_position - 1] > value_to_insert)) { + _abFailoverQueue[hole_position] = _abFailoverQueue[hole_position - 1]; + hole_position = hole_position - 1; + } + _abFailoverQueue[hole_position] = value_to_insert; + } + } + /** * Short-circuit if we have no queued paths */ if (_abFailoverQueue.empty()) { return; } + /** - * Fulfill primary reselect obligations + * Fulfill primary re-select obligations */ - if (_abPath && !_abPath->eligible(now,_ackSendInterval)) { // Implicit ZT_MULTIPATH_RESELECTION_POLICY_FAILURE - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Link %s/%s to peer %llx has failed. Selecting new link from failover queue, there are %zu links in the queue", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); - RR->t->bondStateMessage(NULL, traceMsg); - if (!_abFailoverQueue.empty()) { + if (_paths[_abPathIdx].p && ! _paths[_abPathIdx].eligible) { // Implicit ZT_BOND_RESELECTION_POLICY_FAILURE + _paths[_abPathIdx].p->address().toString(curPathStr); + log("link %s/%s has failed, select link from failover queue (%zu links in queue)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); + if (! _abFailoverQueue.empty()) { dequeueNextActiveBackupPath(now); - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Active link to peer %llx has been switched to %s/%s", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_abPath)->ifname().c_str(), curPathStr); - RR->t->bondStateMessage(NULL, traceMsg); - } else { - sprintf(traceMsg, "%s (active-backup) Failover queue is empty. No links to peer %llx to choose from", - OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[_abPathIdx].p->address().toString(curPathStr); + log("active link switched to %s/%s", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); + } + else { + log("failover queue is empty, no links to choose from"); } } /** * Detect change to prevent flopping during later optimization step. */ - if (prevActiveBackupPath != _abPath) { + if (prevActiveBackupPathIdx != _abPathIdx) { _lastActiveBackupPathChange = now; } - if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS) { - if (_abPath && !getLink(_abPath)->primary() - && getLink(_abFailoverQueue.front())->primary()) { + if (_abLinkSelectMethod == ZT_BOND_RESELECTION_POLICY_ALWAYS) { + if (_paths[_abPathIdx].p && ! getLink(_paths[_abPathIdx].p)->primary() && getLink(_paths[_abFailoverQueue.front()].p)->primary()) { dequeueNextActiveBackupPath(now); - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Switching back to available primary link %s/%s to peer %llx [linkSelectionMethod = always]", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[_abPathIdx].p->address().toString(curPathStr); + log("switch back to available primary link %s/%s (select: always)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); } } - if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_BETTER) { - if (_abPath && !getLink(_abPath)->primary()) { + if (_abLinkSelectMethod == ZT_BOND_RESELECTION_POLICY_BETTER) { + if (_paths[_abPathIdx].p && ! getLink(_paths[_abPathIdx].p)->primary()) { // Active backup has switched to "better" primary link according to re-select policy. - if (getLink(_abFailoverQueue.front())->primary() - && (_abFailoverQueue.front()->_failoverScore > _abPath->_failoverScore)) { + if (getLink(_paths[_abFailoverQueue.front()].p)->primary() && (_paths[_abFailoverQueue.front()].failoverScore > _paths[_abPathIdx].failoverScore)) { dequeueNextActiveBackupPath(now); - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Switching back to user-defined primary link %s/%s to peer %llx [linkSelectionMethod = better]", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[_abPathIdx].p->address().toString(curPathStr); + log("switch back to user-defined primary link %s/%s (select: better)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); } } } - if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE && !_abFailoverQueue.empty()) { + if (_abLinkSelectMethod == ZT_BOND_RESELECTION_POLICY_OPTIMIZE && ! _abFailoverQueue.empty()) { /** * Implement link negotiation that was previously-decided */ - if (_abFailoverQueue.front()->_negotiated) { + if (_paths[_abFailoverQueue.front()].negotiated) { dequeueNextActiveBackupPath(now); - _abPath->address().toString(prevPathStr); + _paths[_abPathIdx].p->address().toString(prevPathStr); _lastPathNegotiationCheck = now; - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Switching negotiated link %s/%s to peer %llx [linkSelectionMethod = optimize]", - OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[_abPathIdx].p->address().toString(curPathStr); + log("switch negotiated link %s/%s (select: optimize)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); } else { // Try to find a better path and automatically switch to it -- not too often, though. - if ((now - _lastActiveBackupPathChange) > ZT_MULTIPATH_MIN_ACTIVE_BACKUP_AUTOFLOP_INTERVAL) { - if (!_abFailoverQueue.empty()) { - int newFScore = _abFailoverQueue.front()->_failoverScore; - int prevFScore = _abPath->_failoverScore; + if ((now - _lastActiveBackupPathChange) > ZT_BOND_OPTIMIZE_INTERVAL) { + if (! _abFailoverQueue.empty()) { + int newFScore = _paths[_abFailoverQueue.front()].failoverScore; + int prevFScore = _paths[_abPathIdx].failoverScore; // Establish a minimum switch threshold to prevent flapping - int failoverScoreDifference = _abFailoverQueue.front()->_failoverScore - _abPath->_failoverScore; - int thresholdQuantity = (ZT_MULTIPATH_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD * (float)_abPath->_allocation); + int failoverScoreDifference = _paths[_abFailoverQueue.front()].failoverScore - _paths[_abPathIdx].failoverScore; + int thresholdQuantity = (int)(ZT_BOND_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD * (float)_paths[_abPathIdx].allocation); if ((failoverScoreDifference > 0) && (failoverScoreDifference > thresholdQuantity)) { - SharedPtr oldPath = _abPath; - _abPath->address().toString(prevPathStr); + SharedPtr oldPath = _paths[_abPathIdx].p; + _paths[_abPathIdx].p->address().toString(prevPathStr); dequeueNextActiveBackupPath(now); - _abPath->address().toString(curPathStr); - sprintf(traceMsg, "%s (active-backup) Switching from %s/%s (fscore=%d) to better link %s/%s (fscore=%d) for peer %llx [linkSelectionMethod = optimize]", - OSUtils::humanReadableTimestamp().c_str(), getLink(oldPath)->ifname().c_str(), prevPathStr, prevFScore, getLink(_abPath)->ifname().c_str(), curPathStr, newFScore, _peer->_id.address().toInt()); - RR->t->bondStateMessage(NULL, traceMsg); + _paths[_abPathIdx].p->address().toString(curPathStr); + log("ab", + "switch from %s/%s (score: %d) to better link %s/%s (score: %d) for peer %llx (select: optimize)", + getLink(oldPath)->ifname().c_str(), + prevPathStr, + prevFScore, + getLink(_paths[_abPathIdx].p)->ifname().c_str(), + curPathStr, + newFScore, + _peerId); } } } @@ -1641,165 +1603,132 @@ void Bond::processActiveBackupTasks(void *tPtr, const int64_t now) } } -void Bond::setReasonableDefaults(int policy, SharedPtr templateBond, bool useTemplate) +void Bond::setBondParameters(int policy, SharedPtr templateBond, bool useTemplate) { - // If invalid bonding policy, try default - int _defaultBondingPolicy = BondController::defaultBondingPolicy(); - if (policy <= ZT_BONDING_POLICY_NONE || policy > ZT_BONDING_POLICY_BALANCE_AWARE) { - // If no default set, use NONE (effectively disabling this bond) - if (_defaultBondingPolicy < ZT_BONDING_POLICY_NONE || _defaultBondingPolicy > ZT_BONDING_POLICY_BALANCE_AWARE) { - _bondingPolicy= ZT_BONDING_POLICY_NONE; - } - _bondingPolicy= _defaultBondingPolicy; - } else { - _bondingPolicy= policy; - } + // Sanity check for policy - _freeRandomByte = 0; + _defaultPolicy = (_defaultPolicy <= ZT_BOND_POLICY_NONE || _defaultPolicy > ZT_BOND_POLICY_BALANCE_AWARE) ? ZT_BOND_POLICY_NONE : _defaultPolicy; + _policy = (policy <= ZT_BOND_POLICY_NONE || policy > ZT_BOND_POLICY_BALANCE_AWARE) ? ZT_BOND_POLICY_NONE : _defaultPolicy; + + // Flows + + _lastFlowExpirationCheck = 0; + _lastFlowRebalance = 0; + _allowFlowHashing = false; + + // Path negotiation + + _lastSentPathNegotiationRequest = 0; + _lastPathNegotiationCheck = 0; + _allowPathNegotiation = false; + _pathNegotiationCutoffCount = 0; + _lastPathNegotiationReceived = 0; + _localUtility = 0; + + // QOS Verb (and related checks) + + _qosCutoffCount = 0; + _lastQoSRateCheck = 0; + _lastQualityEstimation = 0; + + // User preferences which may override the default bonding algorithm's behavior _userHasSpecifiedPrimaryLink = false; _userHasSpecifiedFailoverInstructions = false; + _userHasSpecifiedLinkSpeeds = 0; + // Bond status + + _lastBondStatusLog = 0; + _lastSummaryDump = 0; _isHealthy = false; _numAliveLinks = 0; _numTotalLinks = 0; + _numBondedPaths = 0; + + // active-backup + + _lastActiveBackupPathChange = 0; + _abPathIdx = ZT_MAX_PEER_NETWORK_PATHS; + + // rr + + _rrPacketsSentOnCurrLink = 0; + _rrIdx = 0; + + // General parameters _downDelay = 0; _upDelay = 0; - _allowFlowHashing=false; - _bondMonitorInterval=0; - _shouldCollectPathStatistics=false; + _monitorInterval = 0; - // Path negotiation - _allowPathNegotiation=false; - _pathNegotiationCutoffCount=0; - _localUtility=0; - - _numBondedPaths=0; - _rrPacketsSentOnCurrLink=0; - _rrIdx=0; - - _totalBondUnderload = 0; + // (Sane?) limits _maxAcceptableLatency = 100; _maxAcceptablePacketDelayVariance = 50; - _maxAcceptablePacketLossRatio = 0.10; - _maxAcceptablePacketErrorRatio = 0.10; - _userHasSpecifiedLinkSpeeds=0; + _maxAcceptablePacketLossRatio = 0.10f; + _maxAcceptablePacketErrorRatio = 0.10f; - /* ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE is the most conservative strategy and is - least likely to cause unexpected behavior */ - _flowRebalanceStrategy = ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE; + // General timers + + _lastFrame = 0; + _lastBackgroundTaskCheck = 0; + + // balance-aware + + _totalBondUnderload = 0; + + _overheadBytes = 0; /** - * Paths are actively monitored to provide a real-time quality/preference-ordered rapid failover queue. + * Policy-specific defaults */ - switch (policy) { - case ZT_BONDING_POLICY_ACTIVE_BACKUP: - _failoverInterval = 500; - _abLinkSelectMethod = ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE; - _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; - _qualityWeights[ZT_QOS_LAT_IDX] = 0.2f; - _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_PDV_IDX] = 0.2f; - _qualityWeights[ZT_QOS_PLR_IDX] = 0.2f; - _qualityWeights[ZT_QOS_PER_IDX] = 0.2f; - _qualityWeights[ZT_QOS_THR_IDX] = 0.2f; - _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; - _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; + switch (_policy) { + case ZT_BOND_POLICY_ACTIVE_BACKUP: + _abLinkSelectMethod = ZT_BOND_RESELECTION_POLICY_OPTIMIZE; break; - /** - * All seemingly-alive paths are used. Paths are not actively monitored. - */ - case ZT_BONDING_POLICY_BROADCAST: + case ZT_BOND_POLICY_BROADCAST: _downDelay = 30000; _upDelay = 0; break; - /** - * Paths are monitored to determine when/if one needs to be added or removed from the rotation - */ - case ZT_BONDING_POLICY_BALANCE_RR: - _failoverInterval = 3000; - _allowFlowHashing = false; - _packetsPerLink = 1024; - _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; - _qualityWeights[ZT_QOS_LAT_IDX] = 0.4f; - _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_PDV_IDX] = 0.2f; - _qualityWeights[ZT_QOS_PLR_IDX] = 0.1f; - _qualityWeights[ZT_QOS_PER_IDX] = 0.1f; - _qualityWeights[ZT_QOS_THR_IDX] = 0.1f; - _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; - _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; + case ZT_BOND_POLICY_BALANCE_RR: + _packetsPerLink = 64; break; - /** - * Path monitoring is used to determine the capacity of each - * path and where to place the next flow. - */ - case ZT_BONDING_POLICY_BALANCE_XOR: - _failoverInterval = 3000; - _upDelay = _bondMonitorInterval * 2; + case ZT_BOND_POLICY_BALANCE_XOR: _allowFlowHashing = true; - _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; - _qualityWeights[ZT_QOS_LAT_IDX] = 0.4f; - _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_PDV_IDX] = 0.2f; - _qualityWeights[ZT_QOS_PLR_IDX] = 0.1f; - _qualityWeights[ZT_QOS_PER_IDX] = 0.1f; - _qualityWeights[ZT_QOS_THR_IDX] = 0.1f; - _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; - _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; break; - /** - * Path monitoring is used to determine the capacity of each - * path and where to place the next flow. Additionally, re-shuffling - * of flows may take place. - */ - case ZT_BONDING_POLICY_BALANCE_AWARE: - _failoverInterval = 3000; + case ZT_BOND_POLICY_BALANCE_AWARE: _allowFlowHashing = true; - _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; - _qualityWeights[ZT_QOS_LAT_IDX] = 0.4f; - _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_PDV_IDX] = 0.4f; - _qualityWeights[ZT_QOS_PLR_IDX] = 0.2f; - _qualityWeights[ZT_QOS_PER_IDX] = 0.0f; - _qualityWeights[ZT_QOS_THR_IDX] = 0.0f; - _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; - _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; - _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; break; default: break; } - /* If a user has specified custom parameters for this bonding policy, overlay - them onto the defaults that were previously set */ + _qw[ZT_QOS_LAT_IDX] = 0.3f; + _qw[ZT_QOS_LTM_IDX] = 0.1f; + _qw[ZT_QOS_PDV_IDX] = 0.3f; + _qw[ZT_QOS_PLR_IDX] = 0.1f; + _qw[ZT_QOS_PER_IDX] = 0.1f; + _qw[ZT_QOS_SCP_IDX] = 0.1f; + + _failoverInterval = ZT_BOND_FAILOVER_DEFAULT_INTERVAL; + + /* If a user has specified custom parameters for this bonding policy, overlay them onto the defaults */ if (useTemplate) { _policyAlias = templateBond->_policyAlias; - _failoverInterval = templateBond->_failoverInterval >= 250 ? templateBond->_failoverInterval : _failoverInterval; + _failoverInterval = templateBond->_failoverInterval >= ZT_BOND_FAILOVER_MIN_INTERVAL ? templateBond->_failoverInterval : ZT_BOND_FAILOVER_MIN_INTERVAL; _downDelay = templateBond->_downDelay; _upDelay = templateBond->_upDelay; - if (templateBond->_linkMonitorStrategy == ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE - && templateBond->_failoverInterval != 0) { - //fprintf(stderr, "warning: passive path monitoring was specified, this will prevent failovers from happening in a timely manner.\n"); - } _abLinkSelectMethod = templateBond->_abLinkSelectMethod; - memcpy(_qualityWeights, templateBond->_qualityWeights, ZT_QOS_WEIGHT_SIZE * sizeof(float)); + memcpy(_qw, templateBond->_qw, ZT_QOS_WEIGHT_SIZE * sizeof(float)); } - /* Set timer geometries */ - _bondMonitorInterval = _failoverInterval / 3; - BondController::setMinReqPathMonitorInterval(_bondMonitorInterval); - _ackSendInterval = _failoverInterval; + + // Timer geometry + + _monitorInterval = _failoverInterval / ZT_BOND_ECHOS_PER_FAILOVER_INTERVAL; _qualityEstimationInterval = _failoverInterval * 2; - _dynamicPathMonitorInterval = 0; - _ackCutoffCount = 0; - _qosSendInterval = _bondMonitorInterval * 4; + _qosSendInterval = _failoverInterval * 2; _qosCutoffCount = 0; - throughputMeasurementInterval = _ackSendInterval * 2; _defaultPathRefractoryPeriod = 8000; } @@ -1807,27 +1736,54 @@ void Bond::setUserQualityWeights(float weights[], int len) { if (len == ZT_QOS_WEIGHT_SIZE) { float weightTotal = 0.0; - for (unsigned int i=0; i 0.99 && weightTotal < 1.01) { - memcpy(_qualityWeights, weights, len * sizeof(float)); + memcpy(_qw, weights, len * sizeof(float)); } } } -bool Bond::relevant() { - return false; -} - SharedPtr Bond::getLink(const SharedPtr& path) { return RR->bc->getLinkBySocket(_policyAlias, path->localSocket()); } -void Bond::dumpInfo(const int64_t now) +void Bond::dumpPathStatus(int64_t now, int pathIdx) { - // Omitted + char pathStr[64] = { 0 }; + _paths[pathIdx].p->address().toString(pathStr); + log("path status: [%2d] alive:%d, eli:%d, bonded:%d, flows:%6d, lat:%10.3f, jitter:%10.3f, error:%6.4f, loss:%6.4f, age:%6d --- (%s/%s)", + pathIdx, + _paths[pathIdx].alive, + _paths[pathIdx].eligible, + _paths[pathIdx].bonded, + _paths[pathIdx].assignedFlowCount, + _paths[pathIdx].latencyMean, + _paths[pathIdx].latencyVariance, + _paths[pathIdx].packetErrorRatio, + _paths[pathIdx].packetLossRatio, + _paths[pathIdx].p->age(now), + getLink(_paths[pathIdx].p)->ifname().c_str(), + pathStr); } -} // namespace ZeroTier \ No newline at end of file +void Bond::dumpInfo(int64_t now, bool force) +{ + uint64_t timeSinceLastDump = now - _lastSummaryDump; + if (! force && timeSinceLastDump < ZT_BOND_STATUS_INTERVAL) { + return; + } + _lastSummaryDump = now; + float overhead = (_overheadBytes / (timeSinceLastDump / 1000.0f) / 1000.0f); + _overheadBytes = 0; + log("bond status: bp: %d, fi: %d, mi: %d, ud: %d, dd: %d, flows: %lu, ambient: %f KB/s", _policy, _failoverInterval, _monitorInterval, _upDelay, _downDelay, (unsigned long)_flows.size(), overhead); + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p) { + dumpPathStatus(now, i); + } + } +} + +} // namespace ZeroTier diff --git a/node/Bond.hpp b/node/Bond.hpp index 697aee676..90c80d974 100644 --- a/node/Bond.hpp +++ b/node/Bond.hpp @@ -1,10 +1,10 @@ /* - * Copyright (c)2013-2020 ZeroTier, Inc. + * Copyright (c)2013-2021 ZeroTier, Inc. * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file in the project's root directory. * - * Change Date: 2025-01-01 + * Change Date: 2026-01-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2.0 of the Apache License. @@ -14,46 +14,521 @@ #ifndef ZT_BOND_HPP #define ZT_BOND_HPP +#include "../osdep/Phy.hpp" +#include "Packet.hpp" +#include "Path.hpp" +#include "RuntimeEnvironment.hpp" +#include "Trace.hpp" + +#include +#include +#include #include -#include "Path.hpp" -#include "Peer.hpp" -#include "../osdep/Link.hpp" -#include "Flow.hpp" +/** + * Indices for the path quality weight vector + */ +enum ZT_BondQualityWeightIndex { ZT_QOS_LAT_IDX, ZT_QOS_LTM_IDX, ZT_QOS_PDV_IDX, ZT_QOS_PLR_IDX, ZT_QOS_PER_IDX, ZT_QOS_THR_IDX, ZT_QOS_THM_IDX, ZT_QOS_THV_IDX, ZT_QOS_AGE_IDX, ZT_QOS_SCP_IDX, ZT_QOS_WEIGHT_SIZE }; + +/** + * Multipath bonding policy + */ +enum ZT_BondBondingPolicy { + /** + * Normal operation. No fault tolerance, no load balancing + */ + ZT_BOND_POLICY_NONE = 0, + + /** + * Sends traffic out on only one path at a time. Configurable immediate + * fail-over. + */ + ZT_BOND_POLICY_ACTIVE_BACKUP = 1, + + /** + * Sends traffic out on all paths + */ + ZT_BOND_POLICY_BROADCAST = 2, + + /** + * Stripes packets across all paths + */ + ZT_BOND_POLICY_BALANCE_RR = 3, + + /** + * Packets destined for specific peers will always be sent over the same + * path. + */ + ZT_BOND_POLICY_BALANCE_XOR = 4, + + /** + * Balances flows among all paths according to path performance + */ + ZT_BOND_POLICY_BALANCE_AWARE = 5 +}; + +/** + * Multipath active re-selection policy (linkSelectMethod) + */ +enum ZT_BondLinkSelectMethod { + /** + * Primary link regains status as active link whenever it comes back up + * (default when links are explicitly specified) + */ + ZT_BOND_RESELECTION_POLICY_ALWAYS = 0, + + /** + * Primary link regains status as active link when it comes back up and + * (if) it is better than the currently-active link. + */ + ZT_BOND_RESELECTION_POLICY_BETTER = 1, + + /** + * Primary link regains status as active link only if the currently-active + * link fails. + */ + ZT_BOND_RESELECTION_POLICY_FAILURE = 2, + + /** + * The primary link can change if a superior path is detected. + * (default if user provides no fail-over guidance) + */ + ZT_BOND_RESELECTION_POLICY_OPTIMIZE = 3 +}; + +/** + * Mode of multipath link interface + */ +enum ZT_BondLinkMode { ZT_BOND_SLAVE_MODE_PRIMARY = 0, ZT_BOND_SLAVE_MODE_SPARE = 1 }; + +#include "../node/AtomicCounter.hpp" +#include "../node/SharedPtr.hpp" + +#include namespace ZeroTier { -class RuntimeEnvironment; -class Link; +class Link { + friend class SharedPtr; + + public: + /** + * + * @param ifnameStr + * @param ipvPref + * @param speed + * @param enabled + * @param mode + * @param failoverToLinkStr + * @param userSpecifiedAlloc + */ + Link(std::string ifnameStr, uint8_t ipvPref, uint32_t speed, bool enabled, uint8_t mode, std::string failoverToLinkStr, float userSpecifiedAlloc) + : _ifnameStr(ifnameStr) + , _ipvPref(ipvPref) + , _speed(speed) + , _relativeSpeed(0) + , _enabled(enabled) + , _mode(mode) + , _failoverToLinkStr(failoverToLinkStr) + , _userSpecifiedAlloc(userSpecifiedAlloc) + , _isUserSpecified(false) + { + } + + /** + * @return The string representation of this link's underlying interface's system name. + */ + inline std::string ifname() + { + return _ifnameStr; + } + + /** + * @return Whether this link is designated as a primary. + */ + inline bool primary() + { + return _mode == ZT_BOND_SLAVE_MODE_PRIMARY; + } + + /** + * @return Whether this link is designated as a spare. + */ + inline bool spare() + { + return _mode == ZT_BOND_SLAVE_MODE_SPARE; + } + + /** + * @return The name of the link interface that should be used in the event of a failure. + */ + inline std::string failoverToLink() + { + return _failoverToLinkStr; + } + + /** + * @return Whether this link interface was specified by the user or auto-detected. + */ + inline bool isUserSpecified() + { + return _isUserSpecified; + } + + /** + * Signify that this link was specified by the user and not the result of auto-detection. + * + * @param isUserSpecified + */ + inline void setAsUserSpecified(bool isUserSpecified) + { + _isUserSpecified = isUserSpecified; + } + + /** + * @return Whether or not the user has specified failover instructions. + */ + inline bool userHasSpecifiedFailoverInstructions() + { + return _failoverToLinkStr.length(); + } + + /** + * @return The speed of the link relative to others in the bond. + */ + inline uint8_t relativeSpeed() + { + return _relativeSpeed; + } + + /** + * Sets the speed of the link relative to others in the bond. + * + * @param relativeSpeed The speed relative to the rest of the link. + */ + inline void setRelativeSpeed(uint8_t relativeSpeed) + { + _relativeSpeed = relativeSpeed; + } + + /** + * @return The absolute speed of the link (as specified by the user.) + */ + inline uint32_t speed() + { + return _speed; + } + + /** + * @return The address preference for this link (as specified by the user.) + */ + inline uint8_t ipvPref() + { + return _ipvPref; + } + + /** + * @return The mode (e.g. primary/spare) for this link (as specified by the user.) + */ + inline uint8_t mode() + { + return _mode; + } + + /** + * @return Whether this link is enabled or disabled + */ + inline uint8_t enabled() + { + return _enabled; + } + + private: + /** + * String representation of underlying interface's system name + */ + std::string _ifnameStr; + + /** + * What preference (if any) a user has for IP protocol version used in + * path aggregations. Preference is expressed in the order of the digits: + * + * 0: no preference + * 4: IPv4 only + * 6: IPv6 only + * 46: IPv4 over IPv6 + * 64: IPv6 over IPv4 + */ + uint8_t _ipvPref; + + /** + * User-specified speed of this link + */ + uint32_t _speed; + + /** + * Speed relative to other specified links (computed by Bond) + */ + uint8_t _relativeSpeed; + + /** + * Whether this link is enabled, or (disabled (possibly bad config)) + */ + uint8_t _enabled; + + /** + * Whether this link is designated as a primary, a spare, or no preference. + */ + uint8_t _mode; + + /** + * The specific name of the link to be used in the event that this + * link fails. + */ + std::string _failoverToLinkStr; + + /** + * User-specified allocation + */ + float _userSpecifiedAlloc; + + /** + * Whether or not this link was created as a result of manual user specification. This is + * important to know because certain policy decisions are dependent on whether the user + * intents to use a specific set of interfaces. + */ + bool _isUserSpecified; + + AtomicCounter __refCount; +}; + +class Link; +class Peer; + +class Bond { + public: + /** + * @return Whether this link is permitted to become a member of a bond. + */ + static bool linkAllowed(std::string& policyAlias, SharedPtr link); + + /** + * @return The minimum interval required to poll the active bonds to fulfill all active monitoring timing requirements. + */ + static int minReqMonitorInterval() + { + return _minReqMonitorInterval; + } + + /** + * @return Whether the bonding layer is currently set up to be used. + */ + static bool inUse() + { + return ! _bondPolicyTemplates.empty() || _defaultPolicy; + } + + /** + * @param basePolicyName Bonding policy name (See ZeroTierOne.h) + * @return The bonding policy code for a given human-readable bonding policy name + */ + static int getPolicyCodeByStr(const std::string& basePolicyName) + { + if (basePolicyName == "active-backup") { + return 1; + } + if (basePolicyName == "broadcast") { + return 2; + } + if (basePolicyName == "balance-rr") { + return 3; + } + if (basePolicyName == "balance-xor") { + return 4; + } + if (basePolicyName == "balance-aware") { + return 5; + } + return 0; // "none" + } + + /** + * @param policy Bonding policy code (See ZeroTierOne.h) + * @return The human-readable name for the given bonding policy code + */ + static std::string getPolicyStrByCode(int policy) + { + if (policy == 1) { + return "active-backup"; + } + if (policy == 2) { + return "broadcast"; + } + if (policy == 3) { + return "balance-rr"; + } + if (policy == 4) { + return "balance-xor"; + } + if (policy == 5) { + return "balance-aware"; + } + return "none"; + } + + /** + * Sets the default bonding policy for new or undefined bonds. + * + * @param bp Bonding policy + */ + static void setBondingLayerDefaultPolicy(uint8_t bp) + { + _defaultPolicy = bp; + } + + /** + * Sets the default (custom) bonding policy for new or undefined bonds. + * + * @param alias Human-readable string alias for bonding policy + */ + static void setBondingLayerDefaultPolicyStr(std::string alias) + { + _defaultPolicyStr = alias; + } + + /** + * Add a user-defined link to a given bonding policy. + * + * @param policyAlias User-defined custom name for variant of bonding policy + * @param link Pointer to new link definition + */ + static void addCustomLink(std::string& policyAlias, SharedPtr link); + + /** + * Add a user-defined bonding policy that is based on one of the standard types. + * + * @param newBond Pointer to custom Bond object + * @return Whether a uniquely-named custom policy was successfully added + */ + static bool addCustomPolicy(const SharedPtr& newBond); + + /** + * Assigns a specific bonding policy + * + * @param identity + * @param policyAlias + * @return + */ + static bool assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias); + + /** + * Get pointer to bond by a given peer ID + * + * @param peer Remote peer ID + * @return A pointer to the Bond + */ + static SharedPtr getBondByPeerId(int64_t identity); + + /** + * Add a new bond to the bond controller. + * + * @param renv Runtime environment + * @param peer Remote peer that this bond services + * @return A pointer to the newly created Bond + */ + static SharedPtr createTransportTriggeredBond(const RuntimeEnvironment* renv, const SharedPtr& peer); + + /** + * Periodically perform maintenance tasks for the bonding layer. + * + * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call + * @param now Current time + */ + static void processBackgroundTasks(void* tPtr, int64_t now); + + /** + * Gets a reference to a physical link definition given a policy alias and a local socket. + * + * @param policyAlias Policy in use + * @param localSocket Local source socket + * @return Physical link definition + */ + static SharedPtr getLinkBySocket(const std::string& policyAlias, uint64_t localSocket); + + /** + * Gets a reference to a physical link definition given its human-readable system name. + * + * @param policyAlias Policy in use + * @param ifname Alphanumeric human-readable name + * @return Physical link definition + */ + static SharedPtr getLinkByName(const std::string& policyAlias, const std::string& ifname); + + private: + static Phy* _phy; + + static Mutex _bonds_m; + static Mutex _links_m; + + /** + * The minimum required monitoring interval among all bonds + */ + static int _minReqMonitorInterval; + + /** + * The default bonding policy used for new bonds unless otherwise specified. + */ + static uint8_t _defaultPolicy; + + /** + * The default bonding policy used for new bonds unless otherwise specified. + */ + static std::string _defaultPolicyStr; + + /** + * All currently active bonds. + */ + static std::map > _bonds; + + /** + * Map of peers to custom bonding policies + */ + static std::map _policyTemplateAssignments; + + /** + * User-defined bonding policies (can be assigned to a peer) + */ + static std::map > _bondPolicyTemplates; + + /** + * Set of links defined for a given bonding policy + */ + static std::map > > _linkDefinitions; + + /** + * Set of link objects mapped to their physical interfaces + */ + static std::map > > _interfaceToLinkMap; + + struct NominatedPath; + struct Flow; -class Bond -{ friend class SharedPtr; friend class Peer; - friend class BondController; - struct PathQualityComparator - { - bool operator ()(const SharedPtr & a, const SharedPtr & b) - { - if(a->_failoverScore == b->_failoverScore) { - return a < b; - } - return a->_failoverScore > b->_failoverScore; - } - }; - -public: - - // TODO: Remove - bool _header; - int64_t _lastLogTS; - int64_t _lastPrintTS; - void dumpInfo(const int64_t now); - bool relevant(); + public: + void dumpInfo(int64_t now, bool force); + void dumpPathStatus(int64_t now, int pathIdx); SharedPtr getLink(const SharedPtr& path); + /** + * Constructor + * + * + */ + Bond(const RuntimeEnvironment* renv); + /** * Constructor. Creates a bond based off of ZT defaults * @@ -61,7 +536,7 @@ public: * @param policy Bonding policy * @param peer */ - Bond(const RuntimeEnvironment *renv, int policy, const SharedPtr& peer); + Bond(const RuntimeEnvironment* renv, int policy, const SharedPtr& peer); /** * Constructor. For use when user intends to manually specify parameters @@ -70,7 +545,7 @@ public: * @param policyAlias * @param peer */ - Bond(const RuntimeEnvironment *renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer); + Bond(const RuntimeEnvironment* renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer); /** * Constructor. Creates a bond based off of a user-defined bond template @@ -79,12 +554,15 @@ public: * @param original * @param peer */ - Bond(const RuntimeEnvironment *renv, SharedPtr originalBond, const SharedPtr& peer); + Bond(const RuntimeEnvironment* renv, SharedPtr originalBond, const SharedPtr& peer); /** * @return The human-readable name of the bonding policy */ - std::string policyAlias() { return _policyAlias; } + std::string policyAlias() + { + return _policyAlias; + } /** * Inform the bond about the path that its peer (owning object) just learned about. @@ -94,12 +572,16 @@ public: * @param path Newly-learned Path which should now be handled by the Bond * @param now Current time */ - void nominatePath(const SharedPtr& path, int64_t now); + void nominatePathToBond(const SharedPtr& path, int64_t now); /** - * Propagate and memoize often-used bonding preferences for each path + * Add a nominated path to the bond. This merely maps the index from the nominated set + * to a smaller set and sets the path's bonded flag to true. + * + * @param nominatedIdx The index in the nominated set + * @param bondedIdx The index in the bonded set (subset of nominated) */ - void applyUserPrefs(); + void addPathToBond(int nominatedIdx, int bondedIdx); /** * Check path states and perform bond rebuilds if needed. @@ -107,7 +589,7 @@ public: * @param now Current time * @param rebuild Whether or not the bond should be reconstructed. */ - void curateBond(const int64_t now, bool rebuild); + void curateBond(int64_t now, bool rebuild); /** * Periodically perform statistical summaries of quality metrics for all paths. @@ -135,8 +617,7 @@ public: * @param flowId Flow ID * @param now Current time */ - void recordOutgoingPacket(const SharedPtr &path, uint64_t packetId, - uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now); + void recordOutgoingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now); /** * Process the contents of an inbound VERB_QOS_MEASUREMENT to gather path quality observations. @@ -146,16 +627,7 @@ public: * @param rx_id table of packet IDs * @param rx_ts table of holding times */ - void receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t *rx_id, uint16_t *rx_ts); - - /** - * Process the contents of an inbound VERB_ACK to gather path quality observations. - * - * @param path Path over which packet was received - * @param now Current time - * @param ackedBytes Number of bytes ACKed by this VERB_ACK - */ - void receivedAck(const SharedPtr& path, int64_t now, int32_t ackedBytes); + void receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t* rx_id, uint16_t* rx_ts); /** * Generate the contents of a VERB_QOS_MEASUREMENT packet. @@ -164,7 +636,7 @@ public: * @param qosBuffer destination buffer * @return Size of payload */ - int32_t generateQoSPacket(const SharedPtr& path, int64_t now, char *qosBuffer); + int32_t generateQoSPacket(int pathIdx, int64_t now, char* qosBuffer); /** * Record statistics for an inbound packet. @@ -176,8 +648,7 @@ public: * @param flowId Flow ID * @param now Current time */ - void recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, - Packet::Verb verb, int32_t flowId, int64_t now); + void recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now); /** * Determines the most appropriate path for packet and flow egress. This decision is made by @@ -192,13 +663,13 @@ public: /** * Creates a new flow record * - * @param path Path over which flow shall be handled + * @param np Path over which flow shall be handled * @param flowId Flow ID * @param entropy A byte of entropy to be used by the bonding algorithm * @param now Current time * @return Pointer to newly-created Flow */ - SharedPtr createFlow(const SharedPtr &path, int32_t flowId, unsigned char entropy, int64_t now); + SharedPtr createFlow(int pathIdx, int32_t flowId, unsigned char entropy, int64_t now); /** * Removes flow records that are past a certain age limit. @@ -215,7 +686,7 @@ public: * @param flow Flow to be assigned * @param now Current time */ - bool assignFlowToBondedPath(SharedPtr &flow, int64_t now); + bool assignFlowToBondedPath(SharedPtr& flow, int64_t now); /** * Determine whether a path change should occur given the remote peer's reported utility and our @@ -226,7 +697,7 @@ public: * @param path Path over which the negotiation request was received * @param remoteUtility How much utility the remote peer claims to gain by using the declared path */ - void processIncomingPathNegotiationRequest(uint64_t now, SharedPtr &path, int16_t remoteUtility); + void processIncomingPathNegotiationRequest(uint64_t now, SharedPtr& path, int16_t remoteUtility); /** * Determine state of path synchronization and whether a negotiation request @@ -235,7 +706,7 @@ public: * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param now Current time */ - void pathNegotiationCheck(void *tPtr, const int64_t now); + void pathNegotiationCheck(void* tPtr, int64_t now); /** * Sends a VERB_ACK to the remote peer. @@ -246,8 +717,7 @@ public: * @param atAddress * @param now Current time */ - void sendACK(void *tPtr, const SharedPtr &path,int64_t localSocket, - const InetAddress &atAddress,int64_t now); + void sendACK(void* tPtr, int pathIdx, int64_t localSocket, const InetAddress& atAddress, int64_t now); /** * Sends a VERB_QOS_MEASUREMENT to the remote peer. @@ -258,8 +728,7 @@ public: * @param atAddress * @param now Current time */ - void sendQOS_MEASUREMENT(void *tPtr,const SharedPtr &path,int64_t localSocket, - const InetAddress &atAddress,int64_t now); + void sendQOS_MEASUREMENT(void* tPtr, int pathIdx, int64_t localSocket, const InetAddress& atAddress, int64_t now); /** * Sends a VERB_PATH_NEGOTIATION_REQUEST to the remote peer. @@ -267,7 +736,7 @@ public: * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param path Path over which packet should be sent */ - void sendPATH_NEGOTIATION_REQUEST(void *tPtr, const SharedPtr &path); + void sendPATH_NEGOTIATION_REQUEST(void* tPtr, int pathIdx); /** * @@ -281,7 +750,7 @@ public: * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param now Current time */ - void processActiveBackupTasks(void *tPtr, int64_t now); + void processActiveBackupTasks(void* tPtr, int64_t now); /** * Switches the active link in an active-backup scenario to the next best during @@ -298,7 +767,7 @@ public: * @param policy Bonding policy * @param templateBond */ - void setReasonableDefaults(int policy, SharedPtr templateBond, bool useTemplate); + void setBondParameters(int policy, SharedPtr templateBond, bool useTemplate); /** * Check and assign user-specified quality weights to this bond. @@ -311,64 +780,82 @@ public: /** * @param latencyInMilliseconds Maximum acceptable latency. */ - void setMaxAcceptableLatency(int16_t latencyInMilliseconds) { + void setMaxAcceptableLatency(int16_t latencyInMilliseconds) + { _maxAcceptableLatency = latencyInMilliseconds; } /** * @param latencyInMilliseconds Maximum acceptable (mean) latency. */ - void setMaxAcceptableMeanLatency(int16_t latencyInMilliseconds) { + void setMaxAcceptableMeanLatency(int16_t latencyInMilliseconds) + { _maxAcceptableMeanLatency = latencyInMilliseconds; } /** * @param latencyVarianceInMilliseconds Maximum acceptable packet delay variance (jitter). */ - void setMaxAcceptablePacketDelayVariance(int16_t latencyVarianceInMilliseconds) { + void setMaxAcceptablePacketDelayVariance(int16_t latencyVarianceInMilliseconds) + { _maxAcceptablePacketDelayVariance = latencyVarianceInMilliseconds; } /** * @param lossRatio Maximum acceptable packet loss ratio (PLR). */ - void setMaxAcceptablePacketLossRatio(float lossRatio) { + void setMaxAcceptablePacketLossRatio(float lossRatio) + { _maxAcceptablePacketLossRatio = lossRatio; } /** * @param errorRatio Maximum acceptable packet error ratio (PER). */ - void setMaxAcceptablePacketErrorRatio(float errorRatio) { + void setMaxAcceptablePacketErrorRatio(float errorRatio) + { _maxAcceptablePacketErrorRatio = errorRatio; } /** * @param errorRatio Maximum acceptable packet error ratio (PER). */ - void setMinAcceptableAllocation(float minAlloc) { - _minAcceptableAllocation = minAlloc * 255; + void setMinAcceptableAllocation(float minAlloc) + { + _minAcceptableAllocation = (uint8_t)(minAlloc * 255); } /** * @return Whether the user has defined links for use on this bond */ - inline bool userHasSpecifiedLinks() { return _userHasSpecifiedLinks; } + inline bool userHasSpecifiedLinks() + { + return _userHasSpecifiedLinks; + } /** * @return Whether the user has defined a set of failover link(s) for this bond */ - inline bool userHasSpecifiedFailoverInstructions() { return _userHasSpecifiedFailoverInstructions; }; + inline bool userHasSpecifiedFailoverInstructions() + { + return _userHasSpecifiedFailoverInstructions; + }; /** * @return Whether the user has specified a primary link */ - inline bool userHasSpecifiedPrimaryLink() { return _userHasSpecifiedPrimaryLink; } + inline bool userHasSpecifiedPrimaryLink() + { + return _userHasSpecifiedPrimaryLink; + } /** * @return Whether the user has specified link speeds */ - inline bool userHasSpecifiedLinkSpeeds() { return _userHasSpecifiedLinkSpeeds; } + inline bool userHasSpecifiedLinkSpeeds() + { + return _userHasSpecifiedLinkSpeeds; + } /** * Periodically perform maintenance tasks for each active bond. @@ -376,26 +863,7 @@ public: * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param now Current time */ - void processBackgroundTasks(void *tPtr, int64_t now); - - /** - * Rate limit gate for VERB_ACK - * - * @param now Current time - * @return Whether the incoming packet should be rate-gated - */ - inline bool rateGateACK(const int64_t now) - { - _ackCutoffCount++; - int numToDrain = _lastAckRateCheck ? (now - _lastAckRateCheck) / ZT_ACK_DRAINAGE_DIVISOR : _ackCutoffCount; - _lastAckRateCheck = now; - if (_ackCutoffCount > numToDrain) { - _ackCutoffCount-=numToDrain; - } else { - _ackCutoffCount = 0; - } - return (_ackCutoffCount < ZT_ACK_CUTOFF_LIMIT); - } + void processBackgroundBondTasks(void* tPtr, int64_t now); /** * Rate limit gate for VERB_QOS_MEASUREMENT @@ -403,17 +871,21 @@ public: * @param now Current time * @return Whether the incoming packet should be rate-gated */ - inline bool rateGateQoS(const int64_t now) + inline bool rateGateQoS(int64_t now, SharedPtr& path) { - _qosCutoffCount++; - int numToDrain = (now - _lastQoSRateCheck) / ZT_QOS_DRAINAGE_DIVISOR; - _lastQoSRateCheck = now; - if (_qosCutoffCount > numToDrain) { - _qosCutoffCount-=numToDrain; - } else { + // TODO: Verify before production + char pathStr[64] = { 0 }; + path->address().toString(pathStr); + int diff = now - _lastQoSRateCheck; + if ((diff) <= (_qosSendInterval / ZT_MAX_PEER_NETWORK_PATHS)) { + ++_qosCutoffCount; + } + else { _qosCutoffCount = 0; } - return (_qosCutoffCount < ZT_QOS_CUTOFF_LIMIT); + _lastQoSRateCheck = now; + // fprintf(stderr, "rateGateQoS (count=%d, send_interval=%d, diff=%d, path=%s)\n", _qosCutoffCount, _qosSendInterval, diff, pathStr); + return (_qosCutoffCount < (ZT_MAX_PEER_NETWORK_PATHS * 2)); } /** @@ -422,142 +894,219 @@ public: * @param now Current time * @return Whether the incoming packet should be rate-gated */ - inline bool rateGatePathNegotiation(const int64_t now) + inline bool rateGatePathNegotiation(int64_t now, SharedPtr& path) { - if ((now - _lastPathNegotiationReceived) <= ZT_PATH_NEGOTIATION_CUTOFF_TIME) + // TODO: Verify before production + char pathStr[64] = { 0 }; + path->address().toString(pathStr); + int diff = now - _lastPathNegotiationReceived; + if ((diff) <= (ZT_PATH_NEGOTIATION_CUTOFF_TIME / ZT_MAX_PEER_NETWORK_PATHS)) { ++_pathNegotiationCutoffCount; - else _pathNegotiationCutoffCount = 0; + } + else { + _pathNegotiationCutoffCount = 0; + } _lastPathNegotiationReceived = now; - return (_pathNegotiationCutoffCount < ZT_PATH_NEGOTIATION_CUTOFF_LIMIT); + // fprintf(stderr, "rateGateNeg (count=%d, send_interval=%d, diff=%d, path=%s)\n", _pathNegotiationCutoffCount, (ZT_PATH_NEGOTIATION_CUTOFF_TIME / ZT_MAX_PEER_NETWORK_PATHS), diff, pathStr); + return (_pathNegotiationCutoffCount < (ZT_MAX_PEER_NETWORK_PATHS * 2)); } /** * @param interval Maximum amount of time user expects a failover to take on this bond. */ - inline void setFailoverInterval(uint32_t interval) { _failoverInterval = interval; } + inline void setFailoverInterval(uint32_t interval) + { + _failoverInterval = interval; + } /** * @param interval Maximum amount of time user expects a failover to take on this bond. */ - inline uint32_t getFailoverInterval() { return _failoverInterval; } + inline uint32_t getFailoverInterval() + { + return _failoverInterval; + } /** * @param strategy Strategy that the bond uses to re-assign protocol flows. */ - inline void setFlowRebalanceStrategy(uint32_t strategy) { _flowRebalanceStrategy = strategy; } + inline void setFlowRebalanceStrategy(uint32_t strategy) + { + _flowRebalanceStrategy = strategy; + } /** * @param strategy Strategy that the bond uses to prob for path aliveness and quality */ - inline void setLinkMonitorStrategy(uint8_t strategy) { _linkMonitorStrategy = strategy; } - - /** - * @param abOverflowEnabled Whether "overflow" mode is enabled for this active-backup bond - */ - inline void setOverflowMode(bool abOverflowEnabled) { _abOverflowEnabled = abOverflowEnabled; } + inline void setLinkMonitorStrategy(uint8_t strategy) + { + _linkMonitorStrategy = strategy; + } /** * @return the current up delay parameter */ - inline uint16_t getUpDelay() { return _upDelay; } + inline uint16_t getUpDelay() + { + return _upDelay; + } /** * @param upDelay Length of time before a newly-discovered path is admitted to the bond */ - inline void setUpDelay(int upDelay) { if (upDelay >= 0) { _upDelay = upDelay; } } + inline void setUpDelay(int upDelay) + { + if (upDelay >= 0) { + _upDelay = upDelay; + } + } /** * @return Length of time before a newly-failed path is removed from the bond */ - inline uint16_t getDownDelay() { return _downDelay; } + inline uint16_t getDownDelay() + { + return _downDelay; + } /** * @param downDelay Length of time before a newly-failed path is removed from the bond */ - inline void setDownDelay(int downDelay) { if (downDelay >= 0) { _downDelay = downDelay; } } + inline void setDownDelay(int downDelay) + { + if (downDelay >= 0) { + _downDelay = downDelay; + } + } /** - * @return the current monitoring interval for the bond (can be overridden with intervals specific to certain links.) + * @return The current monitoring interval for the bond */ - inline uint16_t getBondMonitorInterval() { return _bondMonitorInterval; } + inline int monitorInterval() + { + return _monitorInterval; + } /** * Set the current monitoring interval for the bond (can be overridden with intervals specific to certain links.) * * @param monitorInterval How often gratuitous VERB_HELLO(s) are sent to remote peer. */ - inline void setBondMonitorInterval(uint16_t interval) { _bondMonitorInterval = interval; } + inline void setBondMonitorInterval(uint16_t interval) + { + _monitorInterval = interval; + } /** * @param policy Bonding policy for this bond */ - inline void setPolicy(uint8_t policy) { _bondingPolicy = policy; } - + /* + inline void setPolicy(uint8_t policy) + { + _policy = policy; + } +*/ /** * @return the current bonding policy */ - inline uint8_t getPolicy() { return _bondingPolicy; } + inline uint8_t policy() + { + return _policy; + } /** * @return the health status of the bond */ - inline bool isHealthy() { return _isHealthy; } + inline bool isHealthy() + { + return _isHealthy; + } /** * @return the number of links comprising this bond which are considered alive */ - inline uint8_t getNumAliveLinks() { return _numAliveLinks; }; + inline uint8_t getNumAliveLinks() + { + return _numAliveLinks; + }; /** * @return the number of links comprising this bond */ - inline uint8_t getNumTotalLinks() { return _numTotalLinks; } + inline uint8_t getNumTotalLinks() + { + return _numTotalLinks; + } /** * * @param allowFlowHashing */ - inline void setFlowHashing(bool allowFlowHashing) { _allowFlowHashing = allowFlowHashing; } + inline void setFlowHashing(bool allowFlowHashing) + { + _allowFlowHashing = allowFlowHashing; + } /** * @return Whether flow-hashing is currently enabled for this bond. */ - bool flowHashingEnabled() { return _allowFlowHashing; } + bool flowHashingEnabled() + { + return _allowFlowHashing; + } /** * * @param packetsPerLink */ - inline void setPacketsPerLink(int packetsPerLink) { _packetsPerLink = packetsPerLink; } + inline void setPacketsPerLink(int packetsPerLink) + { + _packetsPerLink = packetsPerLink; + } /** * @return Number of packets to be sent on each interface in a balance-rr bond */ - inline int getPacketsPerLink() { return _packetsPerLink; } + inline int getPacketsPerLink() + { + return _packetsPerLink; + } /** * * @param linkSelectMethod */ - inline void setLinkSelectMethod(uint8_t method) { _abLinkSelectMethod = method; } + inline void setLinkSelectMethod(uint8_t method) + { + _abLinkSelectMethod = method; + } /** * * @return */ - inline uint8_t getLinkSelectMethod() { return _abLinkSelectMethod; } + inline uint8_t getLinkSelectMethod() + { + return _abLinkSelectMethod; + } /** * * @param allowPathNegotiation */ - inline void setAllowPathNegotiation(bool allowPathNegotiation) { _allowPathNegotiation = allowPathNegotiation; } + inline void setAllowPathNegotiation(bool allowPathNegotiation) + { + _allowPathNegotiation = allowPathNegotiation; + } /** * * @return */ - inline bool allowPathNegotiation() { return _allowPathNegotiation; } + inline bool allowPathNegotiation() + { + return _allowPathNegotiation; + } /** * Forcibly rotates the currently active link used in an active-backup bond to the next link in the failover queue @@ -566,56 +1115,303 @@ public: */ bool abForciblyRotateLink(); - SharedPtr getPeer() { return _peer; } + /** + * @param now Current time + * @return All known paths to this peer + */ + inline std::vector > paths(const int64_t now) const + { + std::vector > pp; + Mutex::Lock _l(_paths_m); + for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (! _paths[i].p) + break; + pp.push_back(_paths[i].p); + } + return pp; + } -private: + /** + * Emit message to tracing system but with added timestamp and subsystem info + * + * TODO: Will be replaced when better logging facilities exist in Trace.hpp + */ + void log(const char* fmt, ...) + { + time_t rawtime; + struct tm* timeinfo; + char timestamp[80]; + time(&rawtime); + timeinfo = localtime(&rawtime); + strftime(timestamp, 80, "%F %T", timeinfo); +#define MAX_BOND_MSG_LEN 1024 + char traceMsg[MAX_BOND_MSG_LEN]; + char userMsg[MAX_BOND_MSG_LEN]; + va_list args; + va_start(args, fmt); + if (vsnprintf(userMsg, sizeof(userMsg), fmt, args) < 0) { + fprintf(stderr, "Encountered format encoding error while writing to trace log\n"); + return; + } + snprintf(traceMsg, MAX_BOND_MSG_LEN, "%s (%llx/%s) %s", timestamp, _peerId, _policyAlias.c_str(), userMsg); + va_end(args); + RR->t->bondStateMessage(NULL, traceMsg); +#undef MAX_MSG_LEN + } - const RuntimeEnvironment *RR; + private: + struct NominatedPath { + NominatedPath() + : lastQoSMeasurement(0) + , lastThroughputEstimation(0) + , lastRefractoryUpdate(0) + , lastAliveToggle(0) + , alive(false) + , eligible(true) + , whenNominated(0) + , refractoryPeriod(0) + , ipvPref(0) + , mode(0) + , onlyPathOnLink(false) + , bonded(false) + , negotiated(false) + , shouldReallocateFlows(false) + , assignedFlowCount(0) + , latencyMean(0) + , latencyVariance(0) + , packetLossRatio(0) + , packetErrorRatio(0) + , throughputMean(0) + , throughputMax(0) + , throughputVariance(0) + , allocation(0) + , byteLoad(0) + , relativeByteLoad(0) + , affinity(0) + , failoverScore(0) + , packetsReceivedSinceLastQoS(0) + , packetsIn(0) + , packetsOut(0) + { + } + + /** + * Set or update a refractory period for the path. + * + * @param punishment How much a path should be punished + * @param pathFailure Whether this call is the result of a recent path failure + */ + inline void adjustRefractoryPeriod(int64_t now, uint32_t punishment, bool pathFailure) + { + if (pathFailure) { + unsigned int suggestedRefractoryPeriod = refractoryPeriod ? punishment + (refractoryPeriod * 2) : punishment; + refractoryPeriod = std::min(suggestedRefractoryPeriod, (unsigned int)ZT_BOND_MAX_REFRACTORY_PERIOD); + lastRefractoryUpdate = 0; + } + else { + uint32_t drainRefractory = 0; + if (lastRefractoryUpdate) { + drainRefractory = (now - lastRefractoryUpdate); + } + else { + drainRefractory = (now - lastAliveToggle); + } + lastRefractoryUpdate = now; + if (refractoryPeriod > drainRefractory) { + refractoryPeriod -= drainRefractory; + } + else { + refractoryPeriod = 0; + lastRefractoryUpdate = 0; + } + } + } + + /** + * @return True if a path is permitted to be used in a bond (according to user pref.) + */ + inline bool allowed() + { + return (! ipvPref || ((p->_addr.isV4() && (ipvPref == 4 || ipvPref == 46 || ipvPref == 64)) || ((p->_addr.isV6() && (ipvPref == 6 || ipvPref == 46 || ipvPref == 64))))); + } + + /** + * @return True if a path is preferred over another on the same physical link (according to user pref.) + */ + inline bool preferred() + { + return onlyPathOnLink || (p->_addr.isV4() && (ipvPref == 4 || ipvPref == 46)) || (p->_addr.isV6() && (ipvPref == 6 || ipvPref == 64)); + } + + /** + * @param now Current time + * @return Whether a QoS (VERB_QOS_MEASUREMENT) packet needs to be emitted at this time + */ + inline bool needsToSendQoS(int64_t now, int qosSendInterval) + { + // fprintf(stderr, "QOS table (%d / %d)\n", packetsReceivedSinceLastQoS, ZT_QOS_TABLE_SIZE); + return ((packetsReceivedSinceLastQoS >= ZT_QOS_TABLE_SIZE) || ((now - lastQoSMeasurement) > qosSendInterval)) && packetsReceivedSinceLastQoS; + } + + /** + * Reset packet counters + */ + inline void resetPacketCounts() + { + packetsIn = 0; + packetsOut = 0; + } + + std::map qosStatsOut; // id:egress_time + std::map qosStatsIn; // id:now + + RingBuffer qosRecordSize; + RingBuffer qosRecordLossSamples; + RingBuffer throughputSamples; + RingBuffer packetValiditySamples; + RingBuffer throughputVarianceSamples; + RingBuffer latencySamples; + + uint64_t lastQoSMeasurement; // Last time that a VERB_QOS_MEASUREMENT was sent out on this path. + uint64_t lastThroughputEstimation; // Last time that the path's throughput was estimated. + uint64_t lastRefractoryUpdate; // The last time that the refractory period was updated. + uint64_t lastAliveToggle; // The last time that the path was marked as "alive". + bool alive; + bool eligible; // State of eligibility at last check. Used for determining state changes. + uint64_t whenNominated; // Timestamp indicating when this path's trial period began. + uint32_t refractoryPeriod; // Amount of time that this path will be prevented from becoming a member of a bond. + uint8_t ipvPref; // IP version preference inherited from the physical link. + uint8_t mode; // Mode inherited from the physical link. + bool onlyPathOnLink; // IP version preference inherited from the physical link. + bool enabled; // Enabled state inherited from the physical link. + bool bonded; // Whether this path is currently part of a bond. + bool negotiated; // Whether this path was intentionally negotiated by either peer. + bool shouldReallocateFlows; // Whether flows should be moved from this path. Current traffic flows will be re-allocated immediately. + uint16_t assignedFlowCount; // The number of flows currently assigned to this path. + float latencyMean; // The mean latency (computed from a sliding window.) + float latencyVariance; // Packet delay variance (computed from a sliding window.) + float packetLossRatio; // The ratio of lost packets to received packets. + float packetErrorRatio; // The ratio of packets that failed their MAC/CRC checks to those that did not. + uint64_t throughputMean; // The estimated mean throughput of this path. + uint64_t throughputMax; // The maximum observed throughput of this path. + float throughputVariance; // The variance in the estimated throughput of this path. + uint8_t allocation; // The relative quality of this path to all others in the bond, [0-255]. + uint64_t byteLoad; // How much load this path is under. + uint8_t relativeByteLoad; // How much load this path is under (relative to other paths in the bond.) + uint8_t affinity; // Relative value expressing how "deserving" this path is of new traffic. + uint32_t failoverScore; // Score that indicates to what degree this path is preferred over others that are available to the bonding policy. (specifically for active-backup) + int32_t packetsReceivedSinceLastQoS; // Number of packets received since the last VERB_QOS_MEASUREMENT was sent to the remote peer. + + /** + * Counters used for tracking path load. + */ + int packetsIn; + int packetsOut; + + AtomicCounter __refCount; + + SharedPtr p; + void set(uint64_t now, const SharedPtr& path) + { + p = path; + whenNominated = now; + p->_bondingMetricPtr = (void*)this; + } + }; + + /** + * Paths nominated to the bond (may or may not actually be bonded) + */ + NominatedPath _paths[ZT_MAX_PEER_NETWORK_PATHS]; + + inline int getNominatedPathIdx(const SharedPtr& path) + { + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (_paths[i].p == path) { + return i; + } + } + return ZT_MAX_PEER_NETWORK_PATHS; + } + + /** + * A protocol flow that is identified by the origin and destination port. + */ + struct Flow { + /** + * @param flowId Given flow ID + * @param now Current time + */ + Flow(int32_t flowId, int64_t now) : id(flowId), bytesIn(0), bytesOut(0), lastActivity(now), lastPathReassignment(0), assignedPath(ZT_MAX_PEER_NETWORK_PATHS) + { + } + + /** + * Reset flow statistics + */ + inline void resetByteCounts() + { + bytesIn = 0; + bytesOut = 0; + } + + /** + * How long since a packet was sent or received in this flow + * + * @param now Current time + * @return The age of the flow in terms of last recorded activity + */ + int64_t age(int64_t now) + { + return now - lastActivity; + } + + /** + * @param path Assigned path over which this flow should be handled + */ + inline void assignPath(int pathIdx, int64_t now) + { + assignedPath = pathIdx; + lastPathReassignment = now; + } + + AtomicCounter __refCount; + + int32_t id; // Flow ID used for hashing and path selection + uint64_t bytesIn; // Used for tracking flow size + uint64_t bytesOut; // Used for tracking flow size + int64_t lastActivity; // The last time that this flow handled traffic + int64_t lastPathReassignment; // Time of last path assignment. Used for anti-flapping + int assignedPath; // Index of path to which this flow is assigned + }; + + const RuntimeEnvironment* RR; AtomicCounter __refCount; - /** - * Custom name given by the user to this bond type. - */ - std::string _policyAlias; - - /** - * Paths that this bond has been made aware of but that are not necessarily - * part of the bond proper. - */ - SharedPtr _paths[ZT_MAX_PEER_NETWORK_PATHS]; + std::string _policyAlias; // Custom name given by the user to this bond type. /** * Set of indices corresponding to paths currently included in the bond proper. This * may only be updated during a call to curateBond(). The reason for this is so that * we can simplify the high frequency packet egress logic. */ - int _bondedIdx[ZT_MAX_PEER_NETWORK_PATHS]; + int _bondIdxMap[ZT_MAX_PEER_NETWORK_PATHS]; + int _numBondedPaths; // Number of paths currently included in the _bondIdxMap set. + std::map > _flows; // Flows hashed according to port and protocol + float _qw[ZT_QOS_WEIGHT_SIZE]; // How much each factor contributes to the "quality" score of a path. - /** - * Number of paths currently included in the _bondedIdx set. - */ - int _numBondedPaths; - - /** - * Flows hashed according to port and protocol - */ - std::map > _flows; - - float _qualityWeights[ZT_QOS_WEIGHT_SIZE]; // How much each factor contributes to the "quality" score of a path. - - uint8_t _bondingPolicy; + uint8_t _policy; uint32_t _upDelay; uint32_t _downDelay; // active-backup - SharedPtr _abPath; // current active path - std::list > _abFailoverQueue; - uint8_t _abLinkSelectMethod; // link re-selection policy for the primary link in active-backup - bool _abOverflowEnabled; + int _abPathIdx; // current active path + std::deque _abFailoverQueue; + uint8_t _abLinkSelectMethod; // link re-selection policy for the primary link in active-backup // balance-rr - uint8_t _rrIdx; // index to path currently in use during Round Robin operation - uint16_t _rrPacketsSentOnCurrLink; // number of packets sent on this link since the most recent path switch. + uint8_t _rrIdx; // index to path currently in use during Round Robin operation + uint16_t _rrPacketsSentOnCurrLink; // number of packets sent on this link since the most recent path switch. /** * How many packets will be sent on a path before moving to the next path * in the round-robin sequence. A value of zero will cause a random path @@ -629,13 +1425,11 @@ private: // dynamic link monitoring uint8_t _linkMonitorStrategy; - uint32_t _dynamicPathMonitorInterval; // path negotiation int16_t _localUtility; - SharedPtr negotiatedPath; + int negotiatedPathIdx; uint8_t _numSentPathNegotiationRequests; - unsigned int _pathNegotiationCutoffCount; bool _allowPathNegotiation; /** @@ -669,82 +1463,52 @@ private: * drains linearly. For each eligibility change the remaining punishment is doubled. */ uint32_t _defaultPathRefractoryPeriod; + unsigned char _freeRandomByte; // Free byte of entropy that is updated on every packet egress event. + SharedPtr _peer; // Remote peer that this bond services + unsigned long long _peerId; // ID of the peer that this bond services /** - * Whether the current bonding policy requires computation of path statistics - */ - bool _shouldCollectPathStatistics; - - /** - * Free byte of entropy that is updated on every packet egress event. - */ - unsigned char _freeRandomByte; - - /** - * Remote peer that this bond services - */ - SharedPtr _peer; - - /** - * Rate-limit cutoffs + * Rate-limiting */ uint16_t _qosCutoffCount; - uint16_t _ackCutoffCount; + uint64_t _lastQoSRateCheck; + uint16_t _pathNegotiationCutoffCount; + uint64_t _lastPathNegotiationReceived; /** * Recent event timestamps */ - uint64_t _lastAckRateCheck; - uint64_t _lastQoSRateCheck; + uint64_t _lastSummaryDump; + uint64_t _lastQualityEstimation; - uint64_t _lastCheckUserPreferences; uint64_t _lastBackgroundTaskCheck; uint64_t _lastBondStatusLog; - uint64_t _lastPathNegotiationReceived; uint64_t _lastPathNegotiationCheck; uint64_t _lastSentPathNegotiationRequest; - uint64_t _lastFlowStatReset; uint64_t _lastFlowExpirationCheck; uint64_t _lastFlowRebalance; uint64_t _lastFrame; uint64_t _lastActiveBackupPathChange; Mutex _paths_m; + Mutex _flows_m; - /** - * Whether the user has specified links for this bond. - */ - bool _userHasSpecifiedLinks; - - /** - * Whether the user has specified a primary link for this bond. - */ - bool _userHasSpecifiedPrimaryLink; - - /** - * Whether the user has specified failover instructions for this bond. - */ - bool _userHasSpecifiedFailoverInstructions; - - /** - * Whether the user has specified links speeds for this bond. - */ - bool _userHasSpecifiedLinkSpeeds; - + bool _userHasSpecifiedLinks; // Whether the user has specified links for this bond. + bool _userHasSpecifiedPrimaryLink; // Whether the user has specified a primary link for this bond. + bool _userHasSpecifiedFailoverInstructions; // Whether the user has specified failover instructions for this bond. + bool _userHasSpecifiedLinkSpeeds; // Whether the user has specified links speeds for this bond. /** * How frequently (in ms) a VERB_ECHO is sent to a peer to verify that a * path is still active. A value of zero (0) will disable active path * monitoring; as result, all monitoring will be a function of traffic. */ - uint16_t _bondMonitorInterval; + int _monitorInterval; + bool _allowFlowHashing; // Whether or not flow hashing is allowed. - /** - * Whether or not flow hashing is allowed. - */ - bool _allowFlowHashing; + uint64_t _overheadBytes; }; -} // namespace ZeroTier +} // namespace ZeroTier -#endif \ No newline at end of file +#endif diff --git a/node/BondController.cpp b/node/BondController.cpp deleted file mode 100644 index 5692390c1..000000000 --- a/node/BondController.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (c)2013-2020 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#include "../osdep/OSUtils.hpp" - -#include "Constants.hpp" -#include "BondController.hpp" -#include "Peer.hpp" - -namespace ZeroTier { - -int BondController::_minReqPathMonitorInterval; -uint8_t BondController::_defaultBondingPolicy; - -BondController::BondController(const RuntimeEnvironment *renv) : - RR(renv) -{ - bondStartTime = RR->node->now(); - _defaultBondingPolicy = ZT_BONDING_POLICY_NONE; -} - -bool BondController::linkAllowed(std::string &policyAlias, SharedPtr link) -{ - bool foundInDefinitions = false; - if (_linkDefinitions.count(policyAlias)) { - auto it = _linkDefinitions[policyAlias].begin(); - while (it != _linkDefinitions[policyAlias].end()) { - if (link->ifname() == (*it)->ifname()) { - foundInDefinitions = true; - break; - } - ++it; - } - } - return _linkDefinitions[policyAlias].empty() || foundInDefinitions; -} - -void BondController::addCustomLink(std::string& policyAlias, SharedPtr link) -{ - Mutex::Lock _l(_links_m); - _linkDefinitions[policyAlias].push_back(link); - auto search = _interfaceToLinkMap[policyAlias].find(link->ifname()); - if (search == _interfaceToLinkMap[policyAlias].end()) { - link->setAsUserSpecified(true); - _interfaceToLinkMap[policyAlias].insert(std::pair>(link->ifname(), link)); - } -} - -bool BondController::addCustomPolicy(const SharedPtr& newBond) -{ - Mutex::Lock _l(_bonds_m); - if (!_bondPolicyTemplates.count(newBond->policyAlias())) { - _bondPolicyTemplates[newBond->policyAlias()] = newBond; - return true; - } - return false; -} - -bool BondController::assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias) -{ - Mutex::Lock _l(_bonds_m); - if (!_policyTemplateAssignments.count(identity)) { - _policyTemplateAssignments[identity] = policyAlias; - return true; - } - return false; -} - -SharedPtr BondController::getBondByPeerId(int64_t identity) -{ - Mutex::Lock _l(_bonds_m); - return _bonds.count(identity) ? _bonds[identity] : SharedPtr(); -} - -SharedPtr BondController::createTransportTriggeredBond(const RuntimeEnvironment *renv, const SharedPtr& peer) -{ - Mutex::Lock _l(_bonds_m); - int64_t identity = peer->identity().address().toInt(); - Bond *bond = nullptr; - char traceMsg[128]; - if (!_bonds.count(identity)) { - std::string policyAlias; - if (!_policyTemplateAssignments.count(identity)) { - if (_defaultBondingPolicy) { - sprintf(traceMsg, "%s (bond) Creating new default %s bond to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), getPolicyStrByCode(_defaultBondingPolicy).c_str(), identity); RR->t->bondStateMessage(NULL, traceMsg); - bond = new Bond(renv, _defaultBondingPolicy, peer); - } - if (!_defaultBondingPolicy && _defaultBondingPolicyStr.length()) { - sprintf(traceMsg, "%s (bond) Creating new default custom %s bond to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), _defaultBondingPolicyStr.c_str(), identity); - RR->t->bondStateMessage(NULL, traceMsg); - bond = new Bond(renv, _bondPolicyTemplates[_defaultBondingPolicyStr].ptr(), peer); - } - } - else { - if (!_bondPolicyTemplates[_policyTemplateAssignments[identity]]) { - sprintf(traceMsg, "%s (bond) Creating new bond. Assignment for peer %llx was specified as %s but the bond definition was not found. Using default %s", - OSUtils::humanReadableTimestamp().c_str(), identity, _policyTemplateAssignments[identity].c_str(), getPolicyStrByCode(_defaultBondingPolicy).c_str()); - RR->t->bondStateMessage(NULL, traceMsg); - bond = new Bond(renv, _defaultBondingPolicy, peer); - } - else { - sprintf(traceMsg, "%s (bond) Creating new default bond %s to peer %llx", - OSUtils::humanReadableTimestamp().c_str(), _defaultBondingPolicyStr.c_str(), identity); - RR->t->bondStateMessage(NULL, traceMsg); - bond = new Bond(renv, _bondPolicyTemplates[_policyTemplateAssignments[identity]].ptr(), peer); - } - } - } - if (bond) { - _bonds[identity] = bond; - /** - * Determine if user has specified anything that could affect the bonding policy's decisions - */ - if (_interfaceToLinkMap.count(bond->policyAlias())) { - std::map >::iterator it = _interfaceToLinkMap[bond->policyAlias()].begin(); - while (it != _interfaceToLinkMap[bond->policyAlias()].end()) { - if (it->second->isUserSpecified()) { - bond->_userHasSpecifiedLinks = true; - } - if (it->second->isUserSpecified() && it->second->primary()) { - bond->_userHasSpecifiedPrimaryLink = true; - } - if (it->second->isUserSpecified() && it->second->userHasSpecifiedFailoverInstructions()) { - bond->_userHasSpecifiedFailoverInstructions = true; - } - if (it->second->isUserSpecified() && (it->second->speed() > 0)) { - bond->_userHasSpecifiedLinkSpeeds = true; - } - ++it; - } - } - return bond; - } - return SharedPtr(); -} - -SharedPtr BondController::getLinkBySocket(const std::string& policyAlias, uint64_t localSocket) -{ - Mutex::Lock _l(_links_m); - char ifname[16]; - _phy->getIfName((PhySocket *) ((uintptr_t)localSocket), ifname, 16); - std::string ifnameStr(ifname); - auto search = _interfaceToLinkMap[policyAlias].find(ifnameStr); - if (search == _interfaceToLinkMap[policyAlias].end()) { - SharedPtr s = new Link(ifnameStr, 0, 0, 0, 0, 0, true, ZT_MULTIPATH_SLAVE_MODE_SPARE, "", 0.0); - _interfaceToLinkMap[policyAlias].insert(std::pair >(ifnameStr, s)); - return s; - } - else { - return search->second; - } -} - -SharedPtr BondController::getLinkByName(const std::string& policyAlias, const std::string& ifname) -{ - Mutex::Lock _l(_links_m); - auto search = _interfaceToLinkMap[policyAlias].find(ifname); - if (search != _interfaceToLinkMap[policyAlias].end()) { - return search->second; - } - return SharedPtr(); -} - -bool BondController::allowedToBind(const std::string& ifname) -{ - return true; - /* - if (!_defaultBondingPolicy) { - return true; // no restrictions - } - Mutex::Lock _l(_links_m); - if (_interfaceToLinkMap.empty()) { - return true; // no restrictions - } - std::map > >::iterator policyItr = _interfaceToLinkMap.begin(); - while (policyItr != _interfaceToLinkMap.end()) { - std::map >::iterator linkItr = policyItr->second.begin(); - while (linkItr != policyItr->second.end()) { - if (linkItr->first == ifname) { - return true; - } - ++linkItr; - } - ++policyItr; - } - return false; - */ -} - -void BondController::processBackgroundTasks(void *tPtr, const int64_t now) -{ - Mutex::Lock _l(_bonds_m); - std::map >::iterator bondItr = _bonds.begin(); - while (bondItr != _bonds.end()) { - bondItr->second->processBackgroundTasks(tPtr, now); - ++bondItr; - } -} - -} // namespace ZeroTier \ No newline at end of file diff --git a/node/BondController.hpp b/node/BondController.hpp deleted file mode 100644 index 7d8e8e69b..000000000 --- a/node/BondController.hpp +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (c)2013-2020 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_BONDCONTROLLER_HPP -#define ZT_BONDCONTROLLER_HPP - -#include -#include - -#include "SharedPtr.hpp" -#include "../osdep/Phy.hpp" -#include "../osdep/Link.hpp" - -namespace ZeroTier { - -class RuntimeEnvironment; -class Bond; -class Peer; - -class BondController -{ - friend class Bond; - -public: - - BondController(const RuntimeEnvironment *renv); - - /** - * @return Whether this link is permitted to become a member of a bond. - */ - bool linkAllowed(std::string &policyAlias, SharedPtr link); - - /** - * @return The minimum interval required to poll the active bonds to fulfill all active monitoring timing requirements. - */ - int minReqPathMonitorInterval() { return _minReqPathMonitorInterval; } - - /** - * @param minReqPathMonitorInterval The minimum interval required to poll the active bonds to fulfill all active monitoring timing requirements. - */ - static void setMinReqPathMonitorInterval(int minReqPathMonitorInterval) { _minReqPathMonitorInterval = minReqPathMonitorInterval; } - - /** - * @return Whether the bonding layer is currently set up to be used. - */ - bool inUse() { return !_bondPolicyTemplates.empty() || _defaultBondingPolicy; } - - /** - * @param basePolicyName Bonding policy name (See ZeroTierOne.h) - * @return The bonding policy code for a given human-readable bonding policy name - */ - static int getPolicyCodeByStr(const std::string& basePolicyName) - { - if (basePolicyName == "active-backup") { return 1; } - if (basePolicyName == "broadcast") { return 2; } - if (basePolicyName == "balance-rr") { return 3; } - if (basePolicyName == "balance-xor") { return 4; } - if (basePolicyName == "balance-aware") { return 5; } - return 0; // "none" - } - - /** - * @param policy Bonding policy code (See ZeroTierOne.h) - * @return The human-readable name for the given bonding policy code - */ - static std::string getPolicyStrByCode(int policy) - { - if (policy == 1) { return "active-backup"; } - if (policy == 2) { return "broadcast"; } - if (policy == 3) { return "balance-rr"; } - if (policy == 4) { return "balance-xor"; } - if (policy == 5) { return "balance-aware"; } - return "none"; - } - - /** - * Sets the default bonding policy for new or undefined bonds. - * - * @param bp Bonding policy - */ - void setBondingLayerDefaultPolicy(uint8_t bp) { _defaultBondingPolicy = bp; } - - /** - * Sets the default (custom) bonding policy for new or undefined bonds. - * - * @param alias Human-readable string alias for bonding policy - */ - void setBondingLayerDefaultPolicyStr(std::string alias) { _defaultBondingPolicyStr = alias; } - - /** - * @return The default bonding policy - */ - static int defaultBondingPolicy() { return _defaultBondingPolicy; } - - /** - * Add a user-defined link to a given bonding policy. - * - * @param policyAlias User-defined custom name for variant of bonding policy - * @param link Pointer to new link definition - */ - void addCustomLink(std::string& policyAlias, SharedPtr link); - - /** - * Add a user-defined bonding policy that is based on one of the standard types. - * - * @param newBond Pointer to custom Bond object - * @return Whether a uniquely-named custom policy was successfully added - */ - bool addCustomPolicy(const SharedPtr& newBond); - - /** - * Assigns a specific bonding policy - * - * @param identity - * @param policyAlias - * @return - */ - bool assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias); - - /** - * Get pointer to bond by a given peer ID - * - * @param peer Remote peer ID - * @return A pointer to the Bond - */ - SharedPtr getBondByPeerId(int64_t identity); - - /** - * Add a new bond to the bond controller. - * - * @param renv Runtime environment - * @param peer Remote peer that this bond services - * @return A pointer to the newly created Bond - */ - SharedPtr createTransportTriggeredBond(const RuntimeEnvironment *renv, const SharedPtr& peer); - - /** - * Periodically perform maintenance tasks for the bonding layer. - * - * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call - * @param now Current time - */ - void processBackgroundTasks(void *tPtr, int64_t now); - - /** - * Gets a reference to a physical link definition given a policy alias and a local socket. - * - * @param policyAlias Policy in use - * @param localSocket Local source socket - * @return Physical link definition - */ - SharedPtr getLinkBySocket(const std::string& policyAlias, uint64_t localSocket); - - /** - * Gets a reference to a physical link definition given its human-readable system name. - * - * @param policyAlias Policy in use - * @param ifname Alphanumeric human-readable name - * @return Physical link definition - */ - SharedPtr getLinkByName(const std::string& policyAlias, const std::string& ifname); - - /** - * @param ifname Name of interface that we want to know if we can bind to - */ - bool allowedToBind(const std::string& ifname); - - uint64_t getBondStartTime() { return bondStartTime; } - -private: - - Phy *_phy; - const RuntimeEnvironment *RR; - - Mutex _bonds_m; - Mutex _links_m; - - /** - * The last time that the bond controller updated the set of bonds. - */ - uint64_t _lastBackgroundBondControlTaskCheck; - - /** - * The minimum monitoring interval among all paths in this bond. - */ - static int _minReqPathMonitorInterval; - - /** - * The default bonding policy used for new bonds unless otherwise specified. - */ - static uint8_t _defaultBondingPolicy; - - /** - * The default bonding policy used for new bonds unless otherwise specified. - */ - std::string _defaultBondingPolicyStr; - - /** - * All currently active bonds. - */ - std::map > _bonds; - - /** - * Map of peers to custom bonding policies - */ - std::map _policyTemplateAssignments; - - /** - * User-defined bonding policies (can be assigned to a peer) - */ - std::map > _bondPolicyTemplates; - - /** - * Set of links defined for a given bonding policy - */ - std::map > > _linkDefinitions; - - /** - * Set of link objects mapped to their physical interfaces - */ - std::map > > _interfaceToLinkMap; - - // TODO: Remove - uint64_t bondStartTime; -}; - -} // namespace ZeroTier - -#endif \ No newline at end of file diff --git a/node/CertificateOfMembership.cpp b/node/CertificateOfMembership.cpp index 10cb0863a..dbda9939f 100644 --- a/node/CertificateOfMembership.cpp +++ b/node/CertificateOfMembership.cpp @@ -20,165 +20,67 @@ namespace ZeroTier { -void CertificateOfMembership::setQualifier(uint64_t id,uint64_t value,uint64_t maxDelta) +CertificateOfMembership::CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Identity &issuedTo) { - _signedBy.zero(); + _qualifiers[0].id = COM_RESERVED_ID_TIMESTAMP; + _qualifiers[0].value = timestamp; + _qualifiers[0].maxDelta = timestampMaxDelta; + _qualifiers[1].id = COM_RESERVED_ID_NETWORK_ID; + _qualifiers[1].value = nwid; + _qualifiers[1].maxDelta = 0; + _qualifiers[2].id = COM_RESERVED_ID_ISSUED_TO; + _qualifiers[2].value = issuedTo.address().toInt(); + _qualifiers[2].maxDelta = 0xffffffffffffffffULL; - for(unsigned int i=0;i<_qualifierCount;++i) { - if (_qualifiers[i].id == id) { - _qualifiers[i].value = value; - _qualifiers[i].maxDelta = maxDelta; - return; - } + // Include hash of full identity public key in COM for hardening purposes. Pack it in + // using the original COM format. Format may be revised in the future to make this cleaner. + uint64_t idHash[6]; + issuedTo.publicKeyHash(idHash); + for(unsigned long i=0;i<4;++i) { + _qualifiers[i + 3].id = (uint64_t)(i + 3); + _qualifiers[i + 3].value = Utils::ntoh(idHash[i]); + _qualifiers[i + 3].maxDelta = 0xffffffffffffffffULL; } - if (_qualifierCount < ZT_NETWORK_COM_MAX_QUALIFIERS) { - _qualifiers[_qualifierCount].id = id; - _qualifiers[_qualifierCount].value = value; - _qualifiers[_qualifierCount].maxDelta = maxDelta; - ++_qualifierCount; - std::sort(&(_qualifiers[0]),&(_qualifiers[_qualifierCount])); - } -} - -#ifdef ZT_SUPPORT_OLD_STYLE_NETCONF - -std::string CertificateOfMembership::toString() const -{ - char tmp[ZT_NETWORK_COM_MAX_QUALIFIERS * 32]; - std::string s; - - s.append("1:"); // COM_UINT64_ED25519 - - uint64_t *const buf = new uint64_t[_qualifierCount * 3]; - try { - unsigned int ptr = 0; - for(unsigned int i=0;i<_qualifierCount;++i) { - buf[ptr++] = Utils::hton(_qualifiers[i].id); - buf[ptr++] = Utils::hton(_qualifiers[i].value); - buf[ptr++] = Utils::hton(_qualifiers[i].maxDelta); - } - s.append(Utils::hex(buf,ptr * sizeof(uint64_t),tmp)); - delete [] buf; - } catch ( ... ) { - delete [] buf; - throw; - } - - s.push_back(':'); - - s.append(_signedBy.toString(tmp)); - - if (_signedBy) { - s.push_back(':'); - s.append(Utils::hex(_signature.data,ZT_C25519_SIGNATURE_LEN,tmp)); - } - - return s; -} - -void CertificateOfMembership::fromString(const char *s) -{ - _qualifierCount = 0; - _signedBy.zero(); + _qualifierCount = 7; memset(_signature.data,0,ZT_C25519_SIGNATURE_LEN); - - if (!*s) - return; - - unsigned int colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - - if (!((colonAt == 1)&&(s[0] == '1'))) // COM_UINT64_ED25519? - return; - - s += colonAt + 1; - colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - - if (colonAt) { - const unsigned int buflen = colonAt / 2; - char *const buf = new char[buflen]; - unsigned int bufactual = Utils::unhex(s,colonAt,buf,buflen); - char *bufptr = buf; - try { - while (bufactual >= 24) { - if (_qualifierCount < ZT_NETWORK_COM_MAX_QUALIFIERS) { - _qualifiers[_qualifierCount].id = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; - _qualifiers[_qualifierCount].value = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; - _qualifiers[_qualifierCount].maxDelta = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; - ++_qualifierCount; - } else { - bufptr += 24; - } - bufactual -= 24; - } - } catch ( ... ) {} - delete [] buf; - } - - if (s[colonAt]) { - s += colonAt + 1; - colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - - if (colonAt) { - char addrbuf[ZT_ADDRESS_LENGTH]; - if (Utils::unhex(s,colonAt,addrbuf,sizeof(addrbuf)) == ZT_ADDRESS_LENGTH) - _signedBy.setTo(addrbuf,ZT_ADDRESS_LENGTH); - - if ((_signedBy)&&(s[colonAt])) { - s += colonAt + 1; - colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - if (colonAt) { - if (Utils::unhex(s,colonAt,_signature.data,ZT_C25519_SIGNATURE_LEN) != ZT_C25519_SIGNATURE_LEN) - _signedBy.zero(); - } else { - _signedBy.zero(); - } - } else { - _signedBy.zero(); - } - } - } - - std::sort(&(_qualifiers[0]),&(_qualifiers[_qualifierCount])); } -#endif // ZT_SUPPORT_OLD_STYLE_NETCONF - -bool CertificateOfMembership::agreesWith(const CertificateOfMembership &other) const +bool CertificateOfMembership::agreesWith(const CertificateOfMembership &other, const Identity &otherIdentity) const { - unsigned int myidx = 0; - unsigned int otheridx = 0; - if ((_qualifierCount == 0)||(other._qualifierCount == 0)) return false; - while (myidx < _qualifierCount) { - // Fail if we're at the end of other, since this means the field is - // missing. - if (otheridx >= other._qualifierCount) - return false; + std::map< uint64_t, uint64_t > otherFields; + for(unsigned int i=0;i= other._qualifierCount) + bool fullIdentityVerification = false; + for(unsigned int i=0;i<_qualifierCount;++i) { + const uint64_t qid = _qualifiers[i].id; + if ((qid >= 3)&&(qid <= 6)) + fullIdentityVerification = true; + std::map< uint64_t, uint64_t >::iterator otherQ(otherFields.find(qid)); + if (otherQ == otherFields.end()) + return false; + const uint64_t a = _qualifiers[i].value; + const uint64_t b = otherQ->second; + if (((a >= b) ? (a - b) : (b - a)) > _qualifiers[i].maxDelta) + return false; + } + + // If this COM has a full hash of its identity, assume the other must have this as well. + // Otherwise we are on a controller that does not incorporate these. + if (fullIdentityVerification) { + uint64_t idHash[6]; + otherIdentity.publicKeyHash(idHash); + for(unsigned long i=0;i<4;++i) { + std::map< uint64_t, uint64_t >::iterator otherQ(otherFields.find((uint64_t)(i + 3))); + if (otherQ == otherFields.end()) + return false; + if (otherQ->second != Utils::ntoh(idHash[i])) return false; } - - // Compare to determine if the absolute value of the difference - // between these two parameters is within our maxDelta. - const uint64_t a = _qualifiers[myidx].value; - const uint64_t b = other._qualifiers[myidx].value; - if (((a >= b) ? (a - b) : (b - a)) > _qualifiers[myidx].maxDelta) - return false; - - ++myidx; } return true; diff --git a/node/CertificateOfMembership.hpp b/node/CertificateOfMembership.hpp index f8500628d..1948dd7b7 100644 --- a/node/CertificateOfMembership.hpp +++ b/node/CertificateOfMembership.hpp @@ -94,6 +94,8 @@ public: * ZeroTier address to whom certificate was issued */ COM_RESERVED_ID_ISSUED_TO = 2 + + // IDs 3-6 reserved for full hash of identity to which this COM was issued. }; /** @@ -110,20 +112,7 @@ public: * @param nwid Network ID * @param issuedTo Certificate recipient */ - CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Address &issuedTo) - { - _qualifiers[0].id = COM_RESERVED_ID_TIMESTAMP; - _qualifiers[0].value = timestamp; - _qualifiers[0].maxDelta = timestampMaxDelta; - _qualifiers[1].id = COM_RESERVED_ID_NETWORK_ID; - _qualifiers[1].value = nwid; - _qualifiers[1].maxDelta = 0; - _qualifiers[2].id = COM_RESERVED_ID_ISSUED_TO; - _qualifiers[2].value = issuedTo.toInt(); - _qualifiers[2].maxDelta = 0xffffffffffffffffULL; - _qualifierCount = 3; - memset(_signature.data,0,ZT_C25519_SIGNATURE_LEN); - } + CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Identity &issuedTo); /** * Create from binary-serialized COM in buffer @@ -183,36 +172,6 @@ public: return 0ULL; } - /** - * Add or update a qualifier in this certificate - * - * Any signature is invalidated and signedBy is set to null. - * - * @param id Qualifier ID - * @param value Qualifier value - * @param maxDelta Qualifier maximum allowed difference (absolute value of difference) - */ - void setQualifier(uint64_t id,uint64_t value,uint64_t maxDelta); - inline void setQualifier(ReservedId id,uint64_t value,uint64_t maxDelta) { setQualifier((uint64_t)id,value,maxDelta); } - -#ifdef ZT_SUPPORT_OLD_STYLE_NETCONF - /** - * @return String-serialized representation of this certificate - */ - std::string toString() const; - - /** - * Set this certificate equal to the hex-serialized string - * - * Invalid strings will result in invalid or undefined certificate - * contents. These will subsequently fail validation and comparison. - * Empty strings will result in an empty certificate. - * - * @param s String to deserialize - */ - void fromString(const char *s); -#endif // ZT_SUPPORT_OLD_STYLE_NETCONF - /** * Compare two certificates for parameter agreement * @@ -224,9 +183,10 @@ public: * tuples present in this cert but not in other result in 'false'. * * @param other Cert to compare with + * @param otherIdentity Identity of other node * @return True if certs agree and 'other' may be communicated with */ - bool agreesWith(const CertificateOfMembership &other) const; + bool agreesWith(const CertificateOfMembership &other, const Identity &otherIdentity) const; /** * Sign this certificate diff --git a/node/Constants.hpp b/node/Constants.hpp index 400976c13..21d0754ec 100644 --- a/node/Constants.hpp +++ b/node/Constants.hpp @@ -361,7 +361,7 @@ /** * Maximum number of outgoing packets we monitor for QoS information */ -#define ZT_QOS_MAX_OUTSTANDING_RECORDS (1024*16) +#define ZT_QOS_MAX_OUTSTANDING_RECORDS (1024 * 16) /** * Interval used for rate-limiting the computation of path quality estimates. @@ -403,117 +403,11 @@ /** * All unspecified traffic is put in this bucket. Anything in a bucket with a - * smaller value is deprioritized. Anything in a bucket with a higher value is + * smaller value is de-prioritized. Anything in a bucket with a higher value is prioritized over other traffic. */ #define ZT_AQM_DEFAULT_BUCKET 0 -/** - * How often we emit a one-liner bond summary for each peer - */ -#define ZT_MULTIPATH_BOND_STATUS_INTERVAL 60000 - -/** - * How long before we consider a path to be dead in the general sense. This is - * used while searching for default or alternative paths to try in the absence - * of direct guidance from the user or a selection policy. - */ -#define ZT_MULTIPATH_DEFAULT_FAILOVER_INTERVAL 10000 - -/** - * How often flows are evaluated - */ -#define ZT_MULTIPATH_FLOW_CHECK_INTERVAL 10000 - -/** - * How long before we consider a flow to be dead and remove it from the - * policy's list. - */ -#define ZT_MULTIPATH_FLOW_EXPIRATION_INTERVAL (60000 * 5) - -/** - * How often a flow's statistical counters are reset - */ -#define ZT_FLOW_STATS_RESET_INTERVAL ZT_MULTIPATH_FLOW_EXPIRATION_INTERVAL - -/** - * Maximum number of flows allowed before we start forcibly forgetting old ones - */ -#define ZT_FLOW_MAX_COUNT (1024*64) - -/** - * How often flows are rebalanced across link (if at all) - */ -#define ZT_FLOW_MIN_REBALANCE_INTERVAL 5000 - -/** - * How often flows are rebalanced across link (if at all) - */ -#define ZT_FLOW_REBALANCE_INTERVAL 5000 - -/** - * A defensive timer to prevent path quality metrics from being - * processed too often. - */ -#define ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY - -/** - * How often a bonding policy's background tasks are processed, - * some need more frequent attention than others. - */ -#define ZT_MULTIPATH_ACTIVE_BACKUP_CHECK_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY - -/** - * Minimum amount of time (since a previous transition) before the active-backup bonding - * policy is allowed to transition to a different link. Only valid for active-backup. - */ -#define ZT_MULTIPATH_MIN_ACTIVE_BACKUP_AUTOFLOP_INTERVAL 10000 - -/** - * How often a peer checks that incoming (and outgoing) traffic on a bonded link is - * appropriately paired. - */ -#define ZT_PATH_NEGOTIATION_CHECK_INTERVAL 15000 - -/** - * Time horizon for path negotiation paths cutoff - */ -#define ZT_PATH_NEGOTIATION_CUTOFF_TIME 60000 - -/** - * Maximum number of path negotiations within cutoff time - * - * This limits response to PATH_NEGOTIATION to CUTOFF_LIMIT responses - * per CUTOFF_TIME milliseconds per peer to prevent this from being - * useful for DOS amplification attacks. - */ -#define ZT_PATH_NEGOTIATION_CUTOFF_LIMIT 8 - -/** - * How many times a peer will attempt to petition another peer to synchronize its - * traffic to the same path before giving up and surrendering to the other peer's preference. - */ -#define ZT_PATH_NEGOTIATION_TRY_COUNT 3 - -/** - * How much greater the quality of a path should be before an - * optimization procedure triggers a switch. - */ -#define ZT_MULTIPATH_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD 0.10 - -/** - * Artificially inflates the failover score for paths which meet - * certain non-performance-related policy ranking criteria. - */ -#define ZT_MULTIPATH_FAILOVER_HANDICAP_PREFERRED 500 -#define ZT_MULTIPATH_FAILOVER_HANDICAP_PRIMARY 1000 -#define ZT_MULTIPATH_FAILOVER_HANDICAP_NEGOTIATED 5000 - -/** - * An indicator that no flow is to be associated with the given packet - */ -#define ZT_QOS_NO_FLOW -1 - /** * Timeout for overall peer activity (measured from last receive) */ @@ -604,8 +498,8 @@ #define ZT_ACK_CUTOFF_LIMIT 128 #define ZT_ACK_DRAINAGE_DIVISOR (1000 / ZT_ACK_CUTOFF_LIMIT) -#define ZT_MULTIPATH_DEFAULT_REFRCTORY_PERIOD 8000 -#define ZT_MULTIPATH_MAX_REFRACTORY_PERIOD 600000 +#define ZT_BOND_DEFAULT_REFRCTORY_PERIOD 8000 +#define ZT_BOND_MAX_REFRACTORY_PERIOD 600000 /** * Maximum number of direct path pushes within cutoff time @@ -641,6 +535,92 @@ */ #define ZT_PEER_GENERAL_RATE_LIMIT 1000 + +/** + * Minimum allowed amount of time between flow/path optimizations (anti-flapping) + */ +#define ZT_BOND_OPTIMIZE_INTERVAL 15000 + +/** + * Maximum number of flows allowed before we start forcibly forgetting old ones + */ +#define ZT_FLOW_MAX_COUNT (1024 * 64) + +/** + * How often we emit a bond summary for each bond + */ +#define ZT_BOND_STATUS_INTERVAL 30000 + +/** + * How long before we consider a path to be dead in the general sense. This is + * used while searching for default or alternative paths to try in the absence + * of direct guidance from the user or a selection policy. + */ +#define ZT_BOND_FAILOVER_DEFAULT_INTERVAL 5000 + +/** + * Anything below this value gets into thrashing territory since we divide + * this value by ZT_BOND_ECHOS_PER_FAILOVER_INTERVAL to send ECHOs often. + */ +#define ZT_BOND_FAILOVER_MIN_INTERVAL 250 + +/** + * How many times per failover interval that an ECHO is sent. This should be + * at least 2. Anything more then 4 starts to increase overhead significantly. + */ +#define ZT_BOND_ECHOS_PER_FAILOVER_INTERVAL 4 + +/** + * A defensive timer to prevent path quality metrics from being + * processed too often. + */ +#define ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY + +/** + * How often a bonding policy's background tasks are processed, + * some need more frequent attention than others. + */ +#define ZT_BOND_ACTIVE_BACKUP_CHECK_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY + +/** + * Time horizon for path negotiation paths cutoff + */ +#define ZT_PATH_NEGOTIATION_CUTOFF_TIME 60000 + +/** + * Maximum number of path negotiations within cutoff time + * + * This limits response to PATH_NEGOTIATION to CUTOFF_LIMIT responses + * per CUTOFF_TIME milliseconds per peer to prevent this from being + * useful for DOS amplification attacks. + */ +#define ZT_PATH_NEGOTIATION_CUTOFF_LIMIT 8 + +/** + * How many times a peer will attempt to petition another peer to synchronize its + * traffic to the same path before giving up and surrendering to the other peer's preference. + */ +#define ZT_PATH_NEGOTIATION_TRY_COUNT 3 + +/** + * How much greater the quality of a path should be before an + * optimization procedure triggers a switch. + */ +#define ZT_BOND_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD 0.10 + +/** + * Artificially inflates the failover score for paths which meet + * certain non-performance-related policy ranking criteria. + */ +#define ZT_BOND_FAILOVER_HANDICAP_PREFERRED 500 +#define ZT_BOND_FAILOVER_HANDICAP_PRIMARY 1000 +#define ZT_BOND_FAILOVER_HANDICAP_NEGOTIATED 5000 + +/** + * An indicator that no flow is to be associated with the given packet + */ +#define ZT_QOS_NO_FLOW -1 + /** * Don't do expensive identity validation more often than this * @@ -666,11 +646,6 @@ */ #define ZT_TRUST_EXPIRATION 600000 -/** - * Enable support for older network configurations from older (pre-1.1.6) controllers - */ -#define ZT_SUPPORT_OLD_STYLE_NETCONF 1 - /** * Desired buffer size for UDP sockets (used in service and osdep but defined here) */ diff --git a/node/Flow.hpp b/node/Flow.hpp deleted file mode 100644 index 77a4b207f..000000000 --- a/node/Flow.hpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c)2013-2020 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_FLOW_HPP -#define ZT_FLOW_HPP - -#include "Path.hpp" -#include "SharedPtr.hpp" - -namespace ZeroTier { - -/** - * A protocol flow that is identified by the origin and destination port. - */ -struct Flow -{ - /** - * @param flowId Given flow ID - * @param now Current time - */ - Flow(int32_t flowId, int64_t now) : - _flowId(flowId), - _bytesInPerUnitTime(0), - _bytesOutPerUnitTime(0), - _lastActivity(now), - _lastPathReassignment(0), - _assignedPath(SharedPtr()) - {} - - /** - * Reset flow statistics - */ - void resetByteCounts() - { - _bytesInPerUnitTime = 0; - _bytesOutPerUnitTime = 0; - } - - /** - * @return The Flow's ID - */ - int32_t id() { return _flowId; } - - /** - * @return Number of incoming bytes processed on this flow per unit time - */ - int64_t bytesInPerUnitTime() { return _bytesInPerUnitTime; } - - /** - * Record number of incoming bytes on this flow - * - * @param bytes Number of incoming bytes - */ - void recordIncomingBytes(uint64_t bytes) { _bytesInPerUnitTime += bytes; } - - /** - * @return Number of outgoing bytes processed on this flow per unit time - */ - int64_t bytesOutPerUnitTime() { return _bytesOutPerUnitTime; } - - /** - * Record number of outgoing bytes on this flow - * - * @param bytes - */ - void recordOutgoingBytes(uint64_t bytes) { _bytesOutPerUnitTime += bytes; } - - /** - * @return The total number of bytes processed on this flow - */ - uint64_t totalBytes() { return _bytesInPerUnitTime + _bytesOutPerUnitTime; } - - /** - * How long since a packet was sent or received in this flow - * - * @param now Current time - * @return The age of the flow in terms of last recorded activity - */ - int64_t age(int64_t now) { return now - _lastActivity; } - - /** - * Record that traffic was processed on this flow at the given time. - * - * @param now Current time - */ - void updateActivity(int64_t now) { _lastActivity = now; } - - /** - * @return Path assigned to this flow - */ - SharedPtr assignedPath() { return _assignedPath; } - - /** - * @param path Assigned path over which this flow should be handled - */ - void assignPath(const SharedPtr &path, int64_t now) { - _assignedPath = path; - _lastPathReassignment = now; - } - - AtomicCounter __refCount; - - int32_t _flowId; - uint64_t _bytesInPerUnitTime; - uint64_t _bytesOutPerUnitTime; - int64_t _lastActivity; - int64_t _lastPathReassignment; - SharedPtr _assignedPath; - SharedPtr _previouslyAssignedPath; -}; - -} // namespace ZeroTier - -#endif \ No newline at end of file diff --git a/node/Identity.hpp b/node/Identity.hpp index e6f658dc3..cc8de5126 100644 --- a/node/Identity.hpp +++ b/node/Identity.hpp @@ -109,6 +109,18 @@ public: */ inline bool hasPrivate() const { return (_privateKey != (C25519::Private *)0); } + /** + * Compute a SHA384 hash of this identity's address and public key(s). + * + * @param sha384buf Buffer with 48 bytes of space to receive hash + */ + inline void publicKeyHash(void *sha384buf) const + { + uint8_t address[ZT_ADDRESS_LENGTH]; + _address.copyTo(address, ZT_ADDRESS_LENGTH); + SHA384(sha384buf, address, ZT_ADDRESS_LENGTH, _publicKey.data, ZT_C25519_PUBLIC_KEY_LEN); + } + /** * Compute the SHA512 hash of our private key (if we have one) * diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index d1f0f51dc..5a2a94642 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -88,7 +88,6 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,void *tPtr,int32_t f peer->received(tPtr,_path,hops(),packetId(),payloadLength(),v,0,Packet::VERB_NOP,false,0,ZT_QOS_NO_FLOW); break; case Packet::VERB_HELLO: r = _doHELLO(RR,tPtr,true); break; - case Packet::VERB_ACK: r = _doACK(RR,tPtr,peer); break; case Packet::VERB_QOS_MEASUREMENT: r = _doQOS_MEASUREMENT(RR,tPtr,peer); break; case Packet::VERB_ERROR: r = _doERROR(RR,tPtr,peer); break; case Packet::VERB_OK: r = _doOK(RR,tPtr,peer); break; @@ -191,6 +190,29 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar } } break; + case Packet::ERROR_NETWORK_AUTHENTICATION_REQUIRED: { + const SharedPtr network(RR->node->network(at(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD))); + if ((network)&&(network->controller() == peer->address())) { + bool noUrl = true; + int s = (int)size() - (ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 8); + if (s > 2) { + const uint16_t errorDataSize = at(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 8); + s -= 2; + if (s >= (int)errorDataSize) { + Dictionary<3072> authInfo(((const char *)this->data()) + (ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 10), errorDataSize); + char authenticationURL[2048]; + if (authInfo.get("aU", authenticationURL, sizeof(authenticationURL)) > 0) { + authenticationURL[sizeof(authenticationURL) - 1] = 0; // ensure always zero terminated + network->setAuthenticationRequired(authenticationURL); + noUrl = false; + } + } + } + if (noUrl) + network->setAuthenticationRequired(""); + } + } break; + default: break; } @@ -199,35 +221,12 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar return true; } -bool IncomingPacket::_doACK(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer) -{ - SharedPtr bond = peer->bond(); - if (!bond || !bond->rateGateACK(RR->node->now())) { - return true; - } - /* Dissect incoming ACK packet. From this we can estimate current throughput of the path, establish known - * maximums and detect packet loss. */ - int32_t ackedBytes; - if (payloadLength() != sizeof(ackedBytes)) { - return true; // ignore - } - memcpy(&ackedBytes, payload(), sizeof(ackedBytes)); - if (bond) { - bond->receivedAck(_path, RR->node->now(), Utils::ntoh(ackedBytes)); - } - return true; -} - bool IncomingPacket::_doQOS_MEASUREMENT(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer) { SharedPtr bond = peer->bond(); - /* TODO: Fix rate gate issue - if (!bond || !bond->rateGateQoS(RR->node->now())) { + if (!bond || !bond->rateGateQoS(RR->node->now(), _path)) { return true; } - */ - /* Dissect incoming QoS packet. From this we can compute latency values and their variance. - * The latency variance is used as a measure of "jitter". */ if (payloadLength() > ZT_QOS_MAX_PACKET_SIZE || payloadLength() < ZT_QOS_MIN_PACKET_SIZE) { return true; // ignore } @@ -1306,7 +1305,7 @@ bool IncomingPacket::_doPATH_NEGOTIATION_REQUEST(const RuntimeEnvironment *RR,vo { uint64_t now = RR->node->now(); SharedPtr bond = peer->bond(); - if (!bond || !bond->rateGatePathNegotiation(now)) { + if (!bond || !bond->rateGatePathNegotiation(now, _path)) { return true; } if (payloadLength() != sizeof(int16_t)) { diff --git a/node/IncomingPacket.hpp b/node/IncomingPacket.hpp index 134b5b3d0..95785795a 100644 --- a/node/IncomingPacket.hpp +++ b/node/IncomingPacket.hpp @@ -112,7 +112,6 @@ private: // been authenticated, decrypted, decompressed, and classified. bool _doERROR(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doHELLO(const RuntimeEnvironment *RR,void *tPtr,const bool alreadyAuthenticated); - bool _doACK(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doQOS_MEASUREMENT(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doOK(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doWHOIS(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); diff --git a/node/Membership.hpp b/node/Membership.hpp index 476987714..63a7c10f5 100644 --- a/node/Membership.hpp +++ b/node/Membership.hpp @@ -91,13 +91,14 @@ public: * Check whether the peer represented by this Membership should be allowed on this network at all * * @param nconf Our network config + * @param otherNodeIdentity Identity of remote node * @return True if this peer is allowed on this network at all */ - inline bool isAllowedOnNetwork(const NetworkConfig &nconf) const + inline bool isAllowedOnNetwork(const NetworkConfig &thisNodeNetworkConfig, const Identity &otherNodeIdentity) const { - if (nconf.isPublic()) return true; + if (thisNodeNetworkConfig.isPublic()) return true; if (_com.timestamp() <= _comRevocationThreshold) return false; - return nconf.com.agreesWith(_com); + return thisNodeNetworkConfig.com.agreesWith(_com, otherNodeIdentity); } inline bool recentlyAssociated(const int64_t now) const diff --git a/node/Network.cpp b/node/Network.cpp index 914c96bc6..f3138f3ac 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -1022,6 +1022,7 @@ int Network::setConfiguration(void *tPtr,const NetworkConfig &nconf,bool saveToD } _portError = RR->node->configureVirtualNetworkPort(tPtr,_id,&_uPtr,(oldPortInitialized) ? ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE : ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP,&ctmp); + _authenticationURL = nconf.authenticationURL; if (saveToDisk) { Dictionary *const d = new Dictionary(); @@ -1226,7 +1227,7 @@ bool Network::gate(void *tPtr,const SharedPtr &peer) try { if (_config) { Membership *m = _memberships.get(peer->address()); - if ( (_config.isPublic()) || ((m)&&(m->isAllowedOnNetwork(_config))) ) { + if ( (_config.isPublic()) || ((m)&&(m->isAllowedOnNetwork(_config, peer->identity()))) ) { if (!m) m = &(_membership(peer->address())); if (m->multicastLikeGate(now)) { @@ -1379,6 +1380,8 @@ ZT_VirtualNetworkStatus Network::_status() const return ZT_NETWORK_STATUS_NOT_FOUND; case NETCONF_FAILURE_NONE: return ((_config) ? ZT_NETWORK_STATUS_OK : ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION); + case NETCONF_FAILURE_AUTHENTICATION_REQUIRED: + return ZT_NETWORK_STATUS_AUTHENTICATION_REQUIRED; default: return ZT_NETWORK_STATUS_PORT_ERROR; } @@ -1429,6 +1432,10 @@ void Network::_externalConfig(ZT_VirtualNetworkConfig *ec) const } memcpy(&ec->dns, &_config.dns, sizeof(ZT_VirtualNetworkDNS)); + + Utils::scopy(ec->authenticationURL, sizeof(ec->authenticationURL), _authenticationURL.c_str()); + ec->authenticationExpiryTime = _config.authenticationExpiryTime; + ec->ssoEnabled = _config.ssoEnabled; } void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMulticastGroup) @@ -1480,8 +1487,11 @@ void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMu Membership *m = (Membership *)0; Hashtable::Iterator i(_memberships); while (i.next(a,m)) { - if ( ( m->multicastLikeGate(now) || (newMulticastGroup) ) && (m->isAllowedOnNetwork(_config)) && (!std::binary_search(alwaysAnnounceTo.begin(),alwaysAnnounceTo.end(),*a)) ) - _announceMulticastGroupsTo(tPtr,*a,groups); + const Identity remoteIdentity(RR->topology->getIdentity(tPtr, *a)); + if (remoteIdentity) { + if ( ( m->multicastLikeGate(now) || (newMulticastGroup) ) && (m->isAllowedOnNetwork(_config, remoteIdentity)) && (!std::binary_search(alwaysAnnounceTo.begin(),alwaysAnnounceTo.end(),*a)) ) + _announceMulticastGroupsTo(tPtr,*a,groups); + } } } } diff --git a/node/Network.hpp b/node/Network.hpp index b20d8b66b..33de16911 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -220,6 +220,17 @@ public: _netconfFailure = NETCONF_FAILURE_NOT_FOUND; } + /** + * Set netconf failure to 'authentication required' possibly with an authorization URL + */ + inline void setAuthenticationRequired(const char *url) + { + Mutex::Lock _l(_lock); + _netconfFailure = NETCONF_FAILURE_AUTHENTICATION_REQUIRED; + _authenticationURL = (url) ? url : ""; + _config.ssoEnabled = true; + } + /** * Causes this network to request an updated configuration from its master node now * @@ -435,9 +446,11 @@ private: NETCONF_FAILURE_NONE, NETCONF_FAILURE_ACCESS_DENIED, NETCONF_FAILURE_NOT_FOUND, - NETCONF_FAILURE_INIT_FAILED + NETCONF_FAILURE_INIT_FAILED, + NETCONF_FAILURE_AUTHENTICATION_REQUIRED } _netconfFailure; int _portError; // return value from port config callback + std::string _authenticationURL; Hashtable _memberships; diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index 5259a3e32..6d148cc45 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -182,6 +182,14 @@ bool NetworkConfig::toDictionary(Dictionary &d,b if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_DNS,*tmp)) return false; } + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, this->ssoEnabled)) return false; + if (this->ssoEnabled) { + if (this->authenticationURL[0]) { + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL)) return false; + } + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, this->authenticationExpiryTime)) return false; + } + delete tmp; } catch ( ... ) { delete tmp; @@ -365,6 +373,20 @@ bool NetworkConfig::fromDictionary(const DictionaryssoEnabled = d.getB(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, false); + if (this->ssoEnabled) { + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL, (unsigned int)sizeof(this->authenticationURL)) > 0) { + this->authenticationURL[sizeof(this->authenticationURL) - 1] = 0; // ensure null terminated + } else { + this->authenticationURL[0] = 0; + } + this->authenticationExpiryTime = d.getI(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, 0); + } else { + this->authenticationURL[0] = 0; + this->authenticationExpiryTime = 0; + } } //printf("~~~\n%s\n~~~\n",d.data()); diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index 06e0127fe..301852adf 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -94,7 +94,7 @@ namespace ZeroTier { // Dictionary capacity needed for max size network config -#define ZT_NETWORKCONFIG_DICT_CAPACITY (1024 + (sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES) + (sizeof(Capability) * ZT_MAX_NETWORK_CAPABILITIES) + (sizeof(Tag) * ZT_MAX_NETWORK_TAGS) + (sizeof(CertificateOfOwnership) * ZT_MAX_CERTIFICATES_OF_OWNERSHIP)) +#define ZT_NETWORKCONFIG_DICT_CAPACITY (4096 + (sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES) + (sizeof(Capability) * ZT_MAX_NETWORK_CAPABILITIES) + (sizeof(Tag) * ZT_MAX_NETWORK_TAGS) + (sizeof(CertificateOfOwnership) * ZT_MAX_CERTIFICATES_OF_OWNERSHIP)) // Dictionary capacity needed for max size network meta-data #define ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY 1024 @@ -178,6 +178,12 @@ namespace ZeroTier { #define ZT_NETWORKCONFIG_DICT_KEY_CERTIFICATES_OF_OWNERSHIP "COO" // dns (binary blobs) #define ZT_NETWORKCONFIG_DICT_KEY_DNS "DNS" +// sso enabld +#define ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED "ssoe" +// authentication URL +#define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL "aurl" +// authentication expiry +#define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME "aexpt" // Legacy fields -- these are obsoleted but are included when older clients query @@ -233,7 +239,10 @@ public: tags(), certificatesOfOwnership(), type(ZT_NETWORK_TYPE_PRIVATE), - dnsCount(0) + dnsCount(0), + ssoEnabled(false), + authenticationURL(), + authenticationExpiryTime(0) { name[0] = 0; memset(specialists, 0, sizeof(uint64_t)*ZT_MAX_NETWORK_SPECIALISTS); @@ -604,6 +613,21 @@ public: * ZT pushed DNS configuration */ ZT_VirtualNetworkDNS dns; + + /** + * SSO enabled flag. + */ + bool ssoEnabled; + + /** + * Authentication URL if authentication is required + */ + char authenticationURL[2048]; + + /** + * Time current authentication expires or 0 if external authentication is disabled + */ + uint64_t authenticationExpiryTime; }; } // namespace ZeroTier diff --git a/node/NetworkController.hpp b/node/NetworkController.hpp index 29a2d8f17..3bf570c97 100644 --- a/node/NetworkController.hpp +++ b/node/NetworkController.hpp @@ -38,7 +38,8 @@ public: NC_ERROR_NONE = 0, NC_ERROR_OBJECT_NOT_FOUND = 1, NC_ERROR_ACCESS_DENIED = 2, - NC_ERROR_INTERNAL_SERVER_ERROR = 3 + NC_ERROR_INTERNAL_SERVER_ERROR = 3, + NC_ERROR_AUTHENTICATION_REQUIRED = 4 }; /** @@ -69,12 +70,17 @@ public: /** * Send a network configuration request error * + * If errorData/errorDataSize are provided they must point to a valid serialized + * Dictionary containing error data. They can be null/zero if not specified. + * * @param nwid Network ID * @param requestPacketId Request packet ID or 0 if none * @param destination Destination peer Address * @param errorCode Error code + * @param errorData Data associated with error or NULL if none + * @param errorDataSize Size of errorData in bytes */ - virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode) = 0; + virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode, const void *errorData, unsigned int errorDataSize) = 0; }; NetworkController() {} diff --git a/node/Node.cpp b/node/Node.cpp index 05f5a247b..5b0fa8cc5 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -103,7 +103,7 @@ Node::Node(void *uptr,void *tptr,const struct ZT_Node_Callbacks *callbacks,int64 const unsigned long mcs = sizeof(Multicaster) + (((sizeof(Multicaster) & 0xf) != 0) ? (16 - (sizeof(Multicaster) & 0xf)) : 0); const unsigned long topologys = sizeof(Topology) + (((sizeof(Topology) & 0xf) != 0) ? (16 - (sizeof(Topology) & 0xf)) : 0); const unsigned long sas = sizeof(SelfAwareness) + (((sizeof(SelfAwareness) & 0xf) != 0) ? (16 - (sizeof(SelfAwareness) & 0xf)) : 0); - const unsigned long bc = sizeof(BondController) + (((sizeof(BondController) & 0xf) != 0) ? (16 - (sizeof(BondController) & 0xf)) : 0); + const unsigned long bc = sizeof(Bond) + (((sizeof(Bond) & 0xf) != 0) ? (16 - (sizeof(Bond) & 0xf)) : 0); m = reinterpret_cast(::malloc(16 + ts + sws + mcs + topologys + sas + bc)); if (!m) @@ -121,14 +121,14 @@ Node::Node(void *uptr,void *tptr,const struct ZT_Node_Callbacks *callbacks,int64 m += topologys; RR->sa = new (m) SelfAwareness(RR); m += sas; - RR->bc = new (m) BondController(RR); + RR->bc = new (m) Bond(RR); } catch ( ... ) { if (RR->sa) RR->sa->~SelfAwareness(); if (RR->topology) RR->topology->~Topology(); if (RR->mc) RR->mc->~Multicaster(); if (RR->sw) RR->sw->~Switch(); if (RR->t) RR->t->~Trace(); - if (RR->bc) RR->bc->~BondController(); + if (RR->bc) RR->bc->~Bond(); ::free(m); throw; } @@ -147,7 +147,7 @@ Node::~Node() if (RR->mc) RR->mc->~Multicaster(); if (RR->sw) RR->sw->~Switch(); if (RR->t) RR->t->~Trace(); - if (RR->bc) RR->bc->~BondController(); + if (RR->bc) RR->bc->~Bond(); ::free(RR->rtmem); } @@ -252,18 +252,14 @@ ZT_ResultCode Node::processBackgroundTasks(void *tptr,int64_t now,volatile int64 _now = now; Mutex::Lock bl(_backgroundTasksLock); - - unsigned long bondCheckInterval = ZT_CORE_TIMER_TASK_GRANULARITY; + // Process background bond tasks + unsigned long bondCheckInterval = ZT_PING_CHECK_INVERVAL; if (RR->bc->inUse()) { - // Gratuitously ping active peers so that QoS metrics have enough data to work with (if active path monitoring is enabled) - bondCheckInterval = std::min(std::max(RR->bc->minReqPathMonitorInterval(), ZT_CORE_TIMER_TASK_GRANULARITY), ZT_PING_CHECK_INVERVAL); - if ((now - _lastGratuitousPingCheck) >= bondCheckInterval) { - Hashtable< Address,std::vector > alwaysContact; - _PingPeersThatNeedPing pfunc(RR,tptr,alwaysContact,now); - RR->topology->eachPeer<_PingPeersThatNeedPing &>(pfunc); + bondCheckInterval = std::max(RR->bc->minReqMonitorInterval(), ZT_CORE_TIMER_TASK_GRANULARITY); + if ((now - _lastGratuitousPingCheck) >= ZT_CORE_TIMER_TASK_GRANULARITY) { _lastGratuitousPingCheck = now; + RR->bc->processBackgroundTasks(tptr, now); } - RR->bc->processBackgroundTasks(tptr, now); } unsigned long timeUntilNextPingCheck = ZT_PING_CHECK_INVERVAL; @@ -512,7 +508,7 @@ ZT_PeerList *Node::peers() const } if (pi->second->bond()) { p->isBonded = pi->second->bond(); - p->bondingPolicy = pi->second->bond()->getPolicy(); + p->bondingPolicy = pi->second->bond()->policy(); p->isHealthy = pi->second->bond()->isHealthy(); p->numAliveLinks = pi->second->bond()->getNumAliveLinks(); p->numTotalLinks = pi->second->bond()->getNumTotalLinks(); @@ -731,7 +727,7 @@ void Node::ncSendRevocation(const Address &destination,const Revocation &rev) } } -void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode) +void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode, const void *errorData, unsigned int errorDataSize) { if (destination == RR->identity.address()) { SharedPtr n(network(nwid)); @@ -744,6 +740,9 @@ void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &des case NetworkController::NC_ERROR_ACCESS_DENIED: n->setAccessDenied(); break; + case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: { + } + break; default: break; } @@ -760,8 +759,18 @@ void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &des case NetworkController::NC_ERROR_ACCESS_DENIED: outp.append((unsigned char)Packet::ERROR_NETWORK_ACCESS_DENIED_); break; + case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: + outp.append((unsigned char)Packet::ERROR_NETWORK_AUTHENTICATION_REQUIRED); + break; } + outp.append(nwid); + + if ((errorData)&&(errorDataSize > 0)&&(errorDataSize <= 0xffff)) { + outp.append((uint16_t)errorDataSize); + outp.append(errorData, errorDataSize); + } + RR->sw->send((void *)0,outp,true); } // else we can't send an ERROR() in response to nothing, so discard } diff --git a/node/Node.hpp b/node/Node.hpp index 2bbd3b47f..52506ed9e 100644 --- a/node/Node.hpp +++ b/node/Node.hpp @@ -34,7 +34,7 @@ #include "Salsa20.hpp" #include "NetworkController.hpp" #include "Hashtable.hpp" -#include "BondController.hpp" +#include "Bond.hpp" // Bit mask for "expecting reply" hash #define ZT_EXPECTING_REPLIES_BUCKET_MASK1 255 @@ -187,7 +187,7 @@ public: inline const Identity &identity() const { return _RR.identity; } - inline BondController *bondController() const { return _RR.bc; } + inline Bond *bondController() const { return _RR.bc; } /** * Register that we are expecting a reply to a packet ID @@ -245,7 +245,7 @@ public: virtual void ncSendConfig(uint64_t nwid,uint64_t requestPacketId,const Address &destination,const NetworkConfig &nc,bool sendLegacyFormatConfig); virtual void ncSendRevocation(const Address &destination,const Revocation &rev); - virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode); + virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode, const void *errorData, unsigned int errorDataSize); inline const Address &remoteTraceTarget() const { return _remoteTraceTarget; } inline Trace::Level remoteTraceLevel() const { return _remoteTraceLevel; } diff --git a/node/Packet.hpp b/node/Packet.hpp index 78846ecdd..7219a3310 100644 --- a/node/Packet.hpp +++ b/node/Packet.hpp @@ -792,6 +792,12 @@ public: * * ERROR response payload: * <[8] 64-bit network ID> + * <[2] 16-bit length of error-related data (optional)> + * <[...] error-related data (optional)> + * + * Error related data is a Dictionary containing things like a URL + * for authentication or a human-readable error message, and is + * optional and may be absent or empty. */ VERB_NETWORK_CONFIG_REQUEST = 0x0b, @@ -1076,7 +1082,10 @@ public: ERROR_NETWORK_ACCESS_DENIED_ = 0x07, /* extra _ at end to avoid Windows name conflict */ /* Multicasts to this group are not wanted */ - ERROR_UNWANTED_MULTICAST = 0x08 + ERROR_UNWANTED_MULTICAST = 0x08, + + /* Network requires external or 2FA authentication (e.g. SSO). */ + ERROR_NETWORK_AUTHENTICATION_REQUIRED = 0x09 }; template diff --git a/node/Path.hpp b/node/Path.hpp index 0839158af..753bf0ab2 100644 --- a/node/Path.hpp +++ b/node/Path.hpp @@ -29,8 +29,6 @@ #include "Packet.hpp" #include "RingBuffer.hpp" -#include "../osdep/Link.hpp" - /** * Maximum return value of preferenceRank() */ @@ -88,46 +86,7 @@ public: _localSocket(-1), _latency(0xffff), _addr(), - _ipScope(InetAddress::IP_SCOPE_NONE), - _lastAckReceived(0), - _lastAckSent(0), - _lastQoSMeasurement(0), - _lastThroughputEstimation(0), - _lastRefractoryUpdate(0), - _lastAliveToggle(0), - _lastEligibilityState(false), - _lastTrialBegin(0), - _refractoryPeriod(0), - _monitorInterval(0), - _upDelay(0), - _downDelay(0), - _ipvPref(0), - _mode(0), - _onlyPathOnLink(false), - _enabled(false), - _bonded(false), - _negotiated(false), - _deprecated(false), - _shouldReallocateFlows(false), - _assignedFlowCount(0), - _latencyMean(0), - _latencyVariance(0), - _packetLossRatio(0), - _packetErrorRatio(0), - _throughputMean(0), - _throughputMax(0), - _throughputVariance(0), - _allocation(0), - _byteLoad(0), - _relativeByteLoad(0), - _affinity(0), - _failoverScore(0), - _unackedBytes(0), - _packetsReceivedSinceLastAck(0), - _packetsReceivedSinceLastQoS(0), - _bytesAckedSinceLastThroughputEstimation(0), - _packetsIn(0), - _packetsOut(0) + _ipScope(InetAddress::IP_SCOPE_NONE) {} Path(const int64_t localSocket,const InetAddress &addr) : @@ -137,46 +96,7 @@ public: _localSocket(localSocket), _latency(0xffff), _addr(addr), - _ipScope(addr.ipScope()), - _lastAckReceived(0), - _lastAckSent(0), - _lastQoSMeasurement(0), - _lastThroughputEstimation(0), - _lastRefractoryUpdate(0), - _lastAliveToggle(0), - _lastEligibilityState(false), - _lastTrialBegin(0), - _refractoryPeriod(0), - _monitorInterval(0), - _upDelay(0), - _downDelay(0), - _ipvPref(0), - _mode(0), - _onlyPathOnLink(false), - _enabled(false), - _bonded(false), - _negotiated(false), - _deprecated(false), - _shouldReallocateFlows(false), - _assignedFlowCount(0), - _latencyMean(0), - _latencyVariance(0), - _packetLossRatio(0), - _packetErrorRatio(0), - _throughputMean(0), - _throughputMax(0), - _throughputVariance(0), - _allocation(0), - _byteLoad(0), - _relativeByteLoad(0), - _affinity(0), - _failoverScore(0), - _unackedBytes(0), - _packetsReceivedSinceLastAck(0), - _packetsReceivedSinceLastQoS(0), - _bytesAckedSinceLastThroughputEstimation(0), - _packetsIn(0), - _packetsOut(0) + _ipScope(addr.ipScope()) {} /** @@ -186,9 +106,6 @@ public: */ inline void received(const uint64_t t) { - if (!alive(t,_bonded)) { - _lastAliveToggle = _lastIn; - } _lastIn = t; } @@ -317,21 +234,11 @@ public: return (((age < (ZT_PATH_HEARTBEAT_PERIOD + 5000)) ? l : (l + 0xffff + age)) * (long)((ZT_INETADDRESS_MAX_SCOPE - _ipScope) + 1)); } - /** - * @param bonded Whether this path is part of a bond. - */ - inline void setBonded(bool bonded) { _bonded = bonded; } - - /** - * @return True if this path is currently part of a bond. - */ - inline bool bonded() { return _bonded; } - /** * @return True if this path is alive (receiving heartbeats) */ - inline bool alive(const int64_t now, bool bondingEnabled = false) const { - return (bondingEnabled && _monitorInterval) ? ((now - _lastIn) < (_monitorInterval * 3)) : ((now - _lastIn) < (ZT_PATH_HEARTBEAT_PERIOD + 5000)); + inline bool alive(const int64_t now) const { + return (now - _lastIn) < (ZT_PATH_HEARTBEAT_PERIOD + 5000); } /** @@ -339,11 +246,6 @@ public: */ inline bool needsHeartbeat(const int64_t now) const { return ((now - _lastOut) >= ZT_PATH_HEARTBEAT_PERIOD); } - /** - * @return True if this path needs a heartbeat in accordance to the user-specified path monitor frequency - */ - inline bool needsGratuitousHeartbeat(const int64_t now) { return allowed() && (_monitorInterval > 0) && ((now - _lastOut) >= _monitorInterval); } - /** * @return Last time we sent something */ @@ -364,134 +266,7 @@ public: */ inline int64_t lastTrustEstablishedPacketReceived() const { return _lastTrustEstablishedPacketReceived; } - /** - * @return Time since last VERB_ACK was received - */ - inline int64_t ackAge(int64_t now) { return _lastAckReceived ? now - _lastAckReceived : 0; } - - /** - * Set or update a refractory period for the path. - * - * @param punishment How much a path should be punished - * @param pathFailure Whether this call is the result of a recent path failure - */ - inline void adjustRefractoryPeriod(int64_t now, uint32_t punishment, bool pathFailure) { - if (pathFailure) { - unsigned int suggestedRefractoryPeriod = _refractoryPeriod ? punishment + (_refractoryPeriod * 2) : punishment; - _refractoryPeriod = std::min(suggestedRefractoryPeriod, (unsigned int)ZT_MULTIPATH_MAX_REFRACTORY_PERIOD); - _lastRefractoryUpdate = 0; - } else { - uint32_t drainRefractory = 0; - if (_lastRefractoryUpdate) { - drainRefractory = (now - _lastRefractoryUpdate); - } else { - drainRefractory = (now - _lastAliveToggle); - } - _lastRefractoryUpdate = now; - if (_refractoryPeriod > drainRefractory) { - _refractoryPeriod -= drainRefractory; - } else { - _refractoryPeriod = 0; - _lastRefractoryUpdate = 0; - } - } - } - - /** - * Determine the current state of eligibility of the path. - * - * @param includeRefractoryPeriod Whether current punishment should be taken into consideration - * @return True if this path can be used in a bond at the current time - */ - inline bool eligible(uint64_t now, int ackSendInterval, bool includeRefractoryPeriod = false) { - if (includeRefractoryPeriod && _refractoryPeriod) { - return false; - } - bool acceptableAge = age(now) < ((_monitorInterval * 4) + _downDelay); // Simple RX age (driven by packets of any type and gratuitous VERB_HELLOs) - bool acceptableAckAge = ackAge(now) < (ackSendInterval); // Whether the remote peer is actually responding to our outgoing traffic or simply sending stuff to us - bool notTooEarly = (now - _lastAliveToggle) >= _upDelay; // Whether we've waited long enough since the link last came online - bool inTrial = (now - _lastTrialBegin) < _upDelay; // Whether this path is still in its trial period - bool currEligibility = allowed() && (((acceptableAge || acceptableAckAge) && notTooEarly) || inTrial); - return currEligibility; - } - - /** - * Record when this path first entered the bond. Each path is given a trial period where it is admitted - * to the bond without requiring observations to prove its performance or reliability. - */ - inline void startTrial(uint64_t now) { _lastTrialBegin = now; } - - /** - * @return True if a path is permitted to be used in a bond (according to user pref.) - */ - inline bool allowed() { - return _enabled - && (!_ipvPref - || ((_addr.isV4() && (_ipvPref == 4 || _ipvPref == 46 || _ipvPref == 64)) - || ((_addr.isV6() && (_ipvPref == 6 || _ipvPref == 46 || _ipvPref == 64))))); - } - - /** - * @return True if a path is preferred over another on the same physical link (according to user pref.) - */ - inline bool preferred() { - return _onlyPathOnLink - || (_addr.isV4() && (_ipvPref == 4 || _ipvPref == 46)) - || (_addr.isV6() && (_ipvPref == 6 || _ipvPref == 64)); - } - - /** - * @param now Current time - * @return Whether an ACK (VERB_ACK) packet needs to be emitted at this time - */ - inline bool needsToSendAck(int64_t now, int ackSendInterval) { - return ((now - _lastAckSent) >= ackSendInterval || - (_packetsReceivedSinceLastAck == ZT_QOS_TABLE_SIZE)) && _packetsReceivedSinceLastAck; - } - - /** - * @param now Current time - * @return Whether a QoS (VERB_QOS_MEASUREMENT) packet needs to be emitted at this time - */ - inline bool needsToSendQoS(int64_t now, int qosSendInterval) { - return ((_packetsReceivedSinceLastQoS >= ZT_QOS_TABLE_SIZE) || - ((now - _lastQoSMeasurement) > qosSendInterval)) && _packetsReceivedSinceLastQoS; - } - - /** - * Reset packet counters - */ - inline void resetPacketCounts() - { - _packetsIn = 0; - _packetsOut = 0; - } - - - /** - * The mean latency (computed from a sliding window.) - */ - float latencyMean() { return _latencyMean; } - - /** - * Packet delay variance (computed from a sliding window.) - */ - float latencyVariance() { return _latencyVariance; } - - /** - * The ratio of lost packets to received packets. - */ - float packetLossRatio() { return _packetLossRatio; } - - /** - * The ratio of packets that failed their MAC/CRC checks to those that did not. - */ - float packetErrorRatio() { return _packetErrorRatio; } - - /** - * - */ - uint8_t allocation() { return _allocation; } + void *_bondingMetricPtr; private: @@ -503,212 +278,6 @@ private: InetAddress _addr; InetAddress::IpScope _ipScope; // memoize this since it's a computed value checked often AtomicCounter __refCount; - - std::map qosStatsOut; // id:egress_time - std::map qosStatsIn; // id:now - std::map ackStatsIn; // id:len - - RingBuffer qosRecordSize; - RingBuffer qosRecordLossSamples; - RingBuffer throughputSamples; - RingBuffer packetValiditySamples; - RingBuffer _throughputVarianceSamples; - RingBuffer latencySamples; - - /** - * Last time that a VERB_ACK was received on this path. - */ - uint64_t _lastAckReceived; - - /** - * Last time that a VERB_ACK was sent out on this path. - */ - uint64_t _lastAckSent; - - /** - * Last time that a VERB_QOS_MEASUREMENT was sent out on this path. - */ - uint64_t _lastQoSMeasurement; - - /** - * Last time that the path's throughput was estimated. - */ - uint64_t _lastThroughputEstimation; - - /** - * The last time that the refractory period was updated. - */ - uint64_t _lastRefractoryUpdate; - - /** - * The last time that the path was marked as "alive". - */ - uint64_t _lastAliveToggle; - - /** - * State of eligibility at last check. Used for determining state changes. - */ - bool _lastEligibilityState; - - /** - * Timestamp indicating when this path's trial period began. - */ - uint64_t _lastTrialBegin; - - /** - * Amount of time that this path will be prevented from becoming a member of a bond. - */ - uint32_t _refractoryPeriod; - - /** - * Monitor interval specific to this path or that was inherited from the bond controller. - */ - int32_t _monitorInterval; - - /** - * Up delay interval specific to this path or that was inherited from the bond controller. - */ - uint32_t _upDelay; - - /** - * Down delay interval specific to this path or that was inherited from the bond controller. - */ - uint32_t _downDelay; - - /** - * IP version preference inherited from the physical link. - */ - uint8_t _ipvPref; - - /** - * Mode inherited from the physical link. - */ - uint8_t _mode; - - /** - * IP version preference inherited from the physical link. - */ - bool _onlyPathOnLink; - - /** - * Enabled state inherited from the physical link. - */ - bool _enabled; - - /** - * Whether this path is currently part of a bond. - */ - bool _bonded; - - /** - * Whether this path was intentionally negotiated by either peer. - */ - bool _negotiated; - - /** - * Whether this path has been deprecated due to performance issues. Current traffic flows - * will be re-allocated to other paths in the most non-disruptive manner (if possible), - * and new traffic will not be allocated to this path. - */ - bool _deprecated; - - /** - * Whether flows should be moved from this path. Current traffic flows will be re-allocated - * immediately. - */ - bool _shouldReallocateFlows; - - /** - * The number of flows currently assigned to this path. - */ - uint16_t _assignedFlowCount; - - /** - * The mean latency (computed from a sliding window.) - */ - float _latencyMean; - - /** - * Packet delay variance (computed from a sliding window.) - */ - float _latencyVariance; - - /** - * The ratio of lost packets to received packets. - */ - float _packetLossRatio; - - /** - * The ratio of packets that failed their MAC/CRC checks to those that did not. - */ - float _packetErrorRatio; - - /** - * The estimated mean throughput of this path. - */ - uint64_t _throughputMean; - - /** - * The maximum observed throughput of this path. - */ - uint64_t _throughputMax; - - /** - * The variance in the estimated throughput of this path. - */ - float _throughputVariance; - - /** - * The relative quality of this path to all others in the bond, [0-255]. - */ - uint8_t _allocation; - - /** - * How much load this path is under. - */ - uint64_t _byteLoad; - - /** - * How much load this path is under (relative to other paths in the bond.) - */ - uint8_t _relativeByteLoad; - - /** - * Relative value expressing how "deserving" this path is of new traffic. - */ - uint8_t _affinity; - - /** - * Score that indicates to what degree this path is preferred over others that - * are available to the bonding policy. (specifically for active-backup) - */ - uint32_t _failoverScore; - - /** - * Number of bytes thus far sent that have not been acknowledged by the remote peer. - */ - int64_t _unackedBytes; - - /** - * Number of packets received since the last VERB_ACK was sent to the remote peer. - */ - int32_t _packetsReceivedSinceLastAck; - - /** - * Number of packets received since the last VERB_QOS_MEASUREMENT was sent to the remote peer. - */ - int32_t _packetsReceivedSinceLastQoS; - - /** - * Bytes acknowledged via incoming VERB_ACK since the last estimation of throughput. - */ - uint64_t _bytesAckedSinceLastThroughputEstimation; - - /** - * Counters used for tracking path load. - */ - int _packetsIn; - int _packetsOut; }; } // namespace ZeroTier diff --git a/node/Peer.cpp b/node/Peer.cpp index fb405ad92..941bd6c48 100644 --- a/node/Peer.cpp +++ b/node/Peer.cpp @@ -50,12 +50,7 @@ Peer::Peer(const RuntimeEnvironment *renv,const Identity &myIdentity,const Ident _directPathPushCutoffCount(0), _credentialsCutoffCount(0), _echoRequestCutoffCount(0), - _uniqueAlivePathCount(0), _localMultipathSupported(false), - _remoteMultipathSupported(false), - _canUseMultipath(false), - _shouldCollectPathStatistics(0), - _bondingPolicy(0), _lastComputedAggregateMeanLatency(0) { if (!myIdentity.agree(peerIdentity,_key)) @@ -151,6 +146,10 @@ void Peer::received( _paths[replacePath].lr = now; _paths[replacePath].p = path; _paths[replacePath].priority = 1; + Mutex::Lock _l(_bond_m); + if(_bond) { + _bond->nominatePathToBond(_paths[replacePath].p, now); + } } } else { Mutex::Lock ltl(_lastTriedPath_m); @@ -229,7 +228,8 @@ void Peer::received( SharedPtr Peer::getAppropriatePath(int64_t now, bool includeExpired, int32_t flowId) { - if (!_bondToPeer) { + Mutex::Lock _l(_bond_m); + if (!_bond) { Mutex::Lock _l(_paths_m); unsigned int bestPath = ZT_MAX_PEER_NETWORK_PATHS; /** @@ -253,7 +253,7 @@ SharedPtr Peer::getAppropriatePath(int64_t now, bool includeExpired, int32 } return SharedPtr(); } - return _bondToPeer->getAppropriatePath(now, flowId); + return _bond->getAppropriatePath(now, flowId); } void Peer::introduce(void *const tPtr,const int64_t now,const SharedPtr &other) const @@ -444,39 +444,32 @@ void Peer::tryMemorizedPath(void *tPtr,int64_t now) void Peer::performMultipathStateCheck(void *tPtr, int64_t now) { + Mutex::Lock _l(_bond_m); + if (_bond) { + // Once enabled the Bond object persists, no need to update state + return; + } /** * Check for conditions required for multipath bonding and create a bond * if allowed. */ - _localMultipathSupported = ((RR->bc->inUse()) && (ZT_PROTO_VERSION > 9)); - if (_localMultipathSupported) { - int currAlivePathCount = 0; - int duplicatePathsFound = 0; - for (unsigned int i=0;iaddress().ipsEqual2(_paths[j].p->address()) && i != j) { - duplicatePathsFound+=1; - break; - } - } - } + int numAlivePaths = 0; + for(unsigned int i=0;ialive(now)) { + numAlivePaths++; } - _uniqueAlivePathCount = (currAlivePathCount - (duplicatePathsFound / 2)); - _remoteMultipathSupported = _vProto > 9; - _canUseMultipath = _localMultipathSupported && _remoteMultipathSupported && (_uniqueAlivePathCount > 1); } - if (_canUseMultipath && !_bondToPeer) { + _localMultipathSupported = ((numAlivePaths >= 1) && (RR->bc->inUse()) && (ZT_PROTO_VERSION > 9)); + if (_localMultipathSupported && !_bond) { if (RR->bc) { - _bondToPeer = RR->bc->createTransportTriggeredBond(RR, this); + _bond = RR->bc->createTransportTriggeredBond(RR, this); /** * Allow new bond to retroactively learn all paths known to this peer */ - if (_bondToPeer) { + if (_bond) { for (unsigned int i=0;inominatePath(_paths[i].p, now); + _bond->nominatePathToBond(_paths[i].p, now); } } } @@ -510,8 +503,7 @@ unsigned int Peer::doPingAndKeepalive(void *tPtr,int64_t now) if (_paths[i].p) { // Clean expired and reduced priority paths if ( ((now - _paths[i].lr) < ZT_PEER_PATH_EXPIRATION) && (_paths[i].priority == maxPriority) ) { - if ((sendFullHello)||(_paths[i].p->needsHeartbeat(now)) - || (_canUseMultipath && _paths[i].p->needsGratuitousHeartbeat(now))) { + if ((sendFullHello)||(_paths[i].p->needsHeartbeat(now))) { attemptToContactAt(tPtr,_paths[i].p->localSocket(),_paths[i].p->address(),now,sendFullHello); _paths[i].p->sent(now); sent |= (_paths[i].p->address().ss_family == AF_INET) ? 0x1 : 0x2; @@ -591,27 +583,24 @@ void Peer::resetWithinScope(void *tPtr,InetAddress::IpScope scope,int inetAddres void Peer::recordOutgoingPacket(const SharedPtr &path, const uint64_t packetId, uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) { - if (!_shouldCollectPathStatistics || !_bondToPeer) { - return; + if (_localMultipathSupported && _bond) { + _bond->recordOutgoingPacket(path, packetId, payloadLength, verb, flowId, now); } - _bondToPeer->recordOutgoingPacket(path, packetId, payloadLength, verb, flowId, now); } void Peer::recordIncomingInvalidPacket(const SharedPtr& path) { - if (!_shouldCollectPathStatistics || !_bondToPeer) { - return; + if (_localMultipathSupported && _bond) { + _bond->recordIncomingInvalidPacket(path); } - _bondToPeer->recordIncomingInvalidPacket(path); } void Peer::recordIncomingPacket(const SharedPtr &path, const uint64_t packetId, uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) { - if (!_shouldCollectPathStatistics || !_bondToPeer) { - return; + if (_localMultipathSupported && _bond) { + _bond->recordIncomingPacket(path, packetId, payloadLength, verb, flowId, now); } - _bondToPeer->recordIncomingPacket(path, packetId, payloadLength, verb, flowId, now); } } // namespace ZeroTier diff --git a/node/Peer.hpp b/node/Peer.hpp index a064bf697..cceae3ed4 100644 --- a/node/Peer.hpp +++ b/node/Peer.hpp @@ -33,7 +33,6 @@ #include "Hashtable.hpp" #include "Mutex.hpp" #include "Bond.hpp" -#include "BondController.hpp" #include "AES.hpp" #define ZT_PEER_MAX_SERIALIZED_STATE_SIZE (sizeof(Peer) + 32 + (sizeof(Path) * 2)) @@ -305,12 +304,13 @@ public: */ inline unsigned int latency(const int64_t now) { - if (_canUseMultipath) { + if (_localMultipathSupported) { return (int)_lastComputedAggregateMeanLatency; } else { SharedPtr bp(getAppropriatePath(now,false)); - if (bp) + if (bp) { return bp->latency(); + } return 0xffff; } } @@ -419,35 +419,15 @@ public: } /** - * Rate limit gate for inbound ECHO requests. This rate limiter works - * by draining a certain number of requests per unit time. Each peer may - * theoretically receive up to ZT_ECHO_CUTOFF_LIMIT requests per second. + * Rate limit gate for inbound ECHO requests */ inline bool rateGateEchoRequest(const int64_t now) { - /* - // TODO: Rethink this - if (_canUseMultipath) { - _echoRequestCutoffCount++; - int numToDrain = (now - _lastEchoCheck) / ZT_ECHO_DRAINAGE_DIVISOR; - _lastEchoCheck = now; - fprintf(stderr, "ZT_ECHO_CUTOFF_LIMIT=%d, (now - _lastEchoCheck)=%d, numToDrain=%d, ZT_ECHO_DRAINAGE_DIVISOR=%d\n", ZT_ECHO_CUTOFF_LIMIT, (now - _lastEchoCheck), numToDrain, ZT_ECHO_DRAINAGE_DIVISOR); - if (_echoRequestCutoffCount > numToDrain) { - _echoRequestCutoffCount-=numToDrain; - } - else { - _echoRequestCutoffCount = 0; - } - return (_echoRequestCutoffCount < ZT_ECHO_CUTOFF_LIMIT); - } else { - if ((now - _lastEchoRequestReceived) >= (ZT_PEER_GENERAL_RATE_LIMIT)) { - _lastEchoRequestReceived = now; - return true; - } - return false; + if ((now - _lastEchoRequestReceived) >= ZT_PEER_GENERAL_RATE_LIMIT) { + _lastEchoRequestReceived = now; + return true; } - */ - return true; + return false; } /** @@ -523,16 +503,20 @@ public: } /** - * - * @return + * @return The bonding policy used to reach this peer */ - SharedPtr bond() { return _bondToPeer; } + SharedPtr bond() { return _bond; } /** - * - * @return + * @return The bonding policy used to reach this peer */ - inline int8_t bondingPolicy() { return _bondingPolicy; } + inline int8_t bondingPolicy() { + Mutex::Lock _l(_paths_m); + if (_bond) { + return _bond->policy(); + } + return ZT_BOND_POLICY_NONE; + } //inline const AES *aesKeysIfSupported() const //{ return (const AES *)0; } @@ -582,6 +566,7 @@ private: _PeerPath _paths[ZT_MAX_PEER_NETWORK_PATHS]; Mutex _paths_m; + Mutex _bond_m; Identity _id; @@ -591,18 +576,13 @@ private: AtomicCounter __refCount; - bool _remotePeerMultipathEnabled; - int _uniqueAlivePathCount; bool _localMultipathSupported; - bool _remoteMultipathSupported; - bool _canUseMultipath; volatile bool _shouldCollectPathStatistics; - volatile int8_t _bondingPolicy; int32_t _lastComputedAggregateMeanLatency; - SharedPtr _bondToPeer; + SharedPtr _bond; }; } // namespace ZeroTier diff --git a/node/RuntimeEnvironment.hpp b/node/RuntimeEnvironment.hpp index 4603afa0f..019645513 100644 --- a/node/RuntimeEnvironment.hpp +++ b/node/RuntimeEnvironment.hpp @@ -30,7 +30,7 @@ class Multicaster; class NetworkController; class SelfAwareness; class Trace; -class BondController; +class Bond; /** * Holds global state for an instance of ZeroTier::Node @@ -76,7 +76,7 @@ public: Multicaster *mc; Topology *topology; SelfAwareness *sa; - BondController *bc; + Bond *bc; // This node's identity and string representations thereof Identity identity; diff --git a/node/Switch.cpp b/node/Switch.cpp index b2040455b..2721cf92f 100644 --- a/node/Switch.cpp +++ b/node/Switch.cpp @@ -1003,14 +1003,12 @@ bool Switch::_trySend(void *tPtr,Packet &packet,bool encrypt,int32_t flowId) const SharedPtr peer(RR->topology->getPeer(tPtr,destination)); if (peer) { - if ((peer->bondingPolicy() == ZT_BONDING_POLICY_BROADCAST) + if ((peer->bondingPolicy() == ZT_BOND_POLICY_BROADCAST) && (packet.verb() == Packet::VERB_FRAME || packet.verb() == Packet::VERB_EXT_FRAME)) { const SharedPtr relay(RR->topology->getUpstreamPeer()); Mutex::Lock _l(peer->_paths_m); for(int i=0;i_paths[i].p && peer->_paths[i].p->alive(now)) { - char pathStr[128]; - peer->_paths[i].p->address().toString(pathStr); _sendViaSpecificPath(tPtr,peer,peer->_paths[i].p,now,packet,encrypt,flowId); } } @@ -1047,7 +1045,6 @@ void Switch::_sendViaSpecificPath(void *tPtr,SharedPtr peer,SharedPtrkey(),encrypt,peer->aesKeysIfSupported()); RR->node->expectReplyTo(packet.packetId()); } diff --git a/node/Trace.cpp b/node/Trace.cpp index 05022e95b..8443a1217 100644 --- a/node/Trace.cpp +++ b/node/Trace.cpp @@ -69,7 +69,7 @@ void Trace::peerConfirmingUnknownPath(void *const tPtr,const uint64_t networkId, char tmp[128]; if (!path) return; // sanity check - ZT_LOCAL_TRACE(tPtr,RR,"trying unknown path %s to %.10llx (packet %.16llx verb %d local socket %lld network %.16llx)",path->address().toString(tmp),peer.address().toInt(),packetId,(double)verb,path->localSocket(),networkId); + ZT_LOCAL_TRACE(tPtr,RR,"trying unknown path %s to %.10llx (packet %.16llx verb %d local socket %lld network %.16llx)",path->address().toString(tmp),peer.address().toInt(),packetId,verb,path->localSocket(),networkId); std::pair byn; if (networkId) { Mutex::Lock l(_byNet_m); _byNet.get(networkId,byn); } diff --git a/node/Utils.cpp b/node/Utils.cpp index 345326984..a0bf07077 100644 --- a/node/Utils.cpp +++ b/node/Utils.cpp @@ -28,10 +28,12 @@ #include #include #include +#ifdef ZT_ARCH_ARM_HAS_NEON #ifdef __LINUX__ #include #endif #endif +#endif #ifdef __WINDOWS__ #include diff --git a/objects.mk b/objects.mk index cc6f96ee2..61df844bc 100644 --- a/objects.mk +++ b/objects.mk @@ -28,8 +28,7 @@ CORE_OBJS=\ node/Topology.o \ node/Trace.o \ node/Utils.o \ - node/Bond.o \ - node/BondController.o + node/Bond.o ONE_OBJS=\ controller/EmbeddedNetworkController.o \ diff --git a/one.cpp b/one.cpp index 062781745..26bcb8cdf 100644 --- a/one.cpp +++ b/one.cpp @@ -84,7 +84,7 @@ #include "osdep/Http.hpp" #include "osdep/Thread.hpp" -#include "node/BondController.hpp" +#include "node/Bond.hpp" #include "service/OneService.hpp" @@ -393,7 +393,9 @@ static int cli(int argc,char **argv) char tmp[256]; std::string addr = path["address"]; const int64_t now = OSUtils::now(); - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%s;%lld;%lld",addr.c_str(),now - (int64_t)path["lastSend"],now - (int64_t)path["lastReceive"]); + int64_t lastSendDiff = (uint64_t)path["lastSend"] ? now - (uint64_t)path["lastSend"] : -1; + int64_t lastReceiveDiff = (uint64_t)path["lastReceive"] ? now - (uint64_t)path["lastReceive"] : -1; + OSUtils::ztsnprintf(tmp,sizeof(tmp),"%s;%lld;%lld",addr.c_str(),lastSendDiff,lastReceiveDiff); bestPath = tmp; break; } @@ -460,7 +462,9 @@ static int cli(int argc,char **argv) char tmp[256]; std::string addr = path["address"]; const int64_t now = OSUtils::now(); - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%-8lld %-8lld %s",now - (int64_t)path["lastSend"],now - (int64_t)path["lastReceive"],addr.c_str()); + int64_t lastSendDiff = (uint64_t)path["lastSend"] ? now - (uint64_t)path["lastSend"] : -1; + int64_t lastReceiveDiff = (uint64_t)path["lastReceive"] ? now - (uint64_t)path["lastReceive"] : -1; + OSUtils::ztsnprintf(tmp,sizeof(tmp),"%-8lld %-8lld %s",lastSendDiff,lastReceiveDiff,addr.c_str()); bestPath = std::string("DIRECT ") + tmp; break; } @@ -492,14 +496,13 @@ static int cli(int argc,char **argv) return 1; } } else if (command == "bond") { - /* zerotier-cli bond */ + /* zerotier-cli bond */ if (arg1.empty()) { - printf("(bond) command is missing required arugments" ZT_EOL_S); + printf("(bond) command is missing required arguments" ZT_EOL_S); return 2; } /* zerotier-cli bond list */ if (arg1 == "list") { - fprintf(stderr, "zerotier-cli bond list\n"); const unsigned int scode = Http::GET(1024 * 1024 * 16,60000,(const struct sockaddr *)&addr,"/bonds",requestHeaders,responseHeaders,responseBody); if (scode == 0) { printf("Error connecting to the ZeroTier service: %s\n\nPlease check that the service is running and that TCP port 9993 can be contacted via 127.0.0.1." ZT_EOL_S, responseBody.c_str()); @@ -525,11 +528,11 @@ static int cli(int argc,char **argv) for(unsigned long k=0;k= ZT_BONDING_POLICY_NONE && bondingPolicy <= ZT_BONDING_POLICY_BALANCE_AWARE) { - policyStr = BondController::getPolicyStrByCode(bondingPolicy); + if (bondingPolicy >= ZT_BOND_POLICY_NONE && bondingPolicy <= ZT_BOND_POLICY_BALANCE_AWARE) { + policyStr = Bond::getPolicyStrByCode(bondingPolicy); } printf("%10s %32s %8s %d/%d" ZT_EOL_S, OSUtils::jsonString(p ["address"],"-").c_str(), @@ -560,11 +563,7 @@ static int cli(int argc,char **argv) return 1; } } - else if (arg1.length() == 10) { /* zerotier-cli bond enable */ - if (arg2 == "enable") { - fprintf(stderr, "zerotier-cli bond enable\n"); - return 0; - } + else if (arg1.length() == 10) { if (arg2 == "rotate") { /* zerotier-cli bond rotate */ fprintf(stderr, "zerotier-cli bond rotate\n"); requestHeaders["Content-Type"] = "application/json"; @@ -618,7 +617,6 @@ static int cli(int argc,char **argv) if (json) { printf("%s" ZT_EOL_S,OSUtils::jsonDump(j).c_str()); } else { - bool bFoundBond = false; std::string healthStr; if (OSUtils::jsonInt(j["isHealthy"],0)) { healthStr = "Healthy"; @@ -629,15 +627,15 @@ static int cli(int argc,char **argv) int numTotalLinks = OSUtils::jsonInt(j["numTotalLinks"],0); printf("Peer : %s\n", arg1.c_str()); printf("Bond : %s\n", OSUtils::jsonString(j["bondingPolicy"],"-").c_str()); - //if (bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { - printf("Link Select Method : %d\n", OSUtils::jsonInt(j["linkSelectMethod"],0)); + //if (bondingPolicy == ZT_BOND_POLICY_ACTIVE_BACKUP) { + printf("Link Select Method : %d\n", (int)OSUtils::jsonInt(j["linkSelectMethod"],0)); //} printf("Status : %s\n", healthStr.c_str()); printf("Links : %d/%d\n", numAliveLinks, numTotalLinks); - printf("Failover Interval : %d (ms)\n", OSUtils::jsonInt(j["failoverInterval"],0)); - printf("Up Delay : %d (ms)\n", OSUtils::jsonInt(j["upDelay"],0)); - printf("Down Delay : %d (ms)\n", OSUtils::jsonInt(j["downDelay"],0)); - printf("Packets Per Link : %d (ms)\n", OSUtils::jsonInt(j["packetsPerLink"],0)); + printf("Failover Interval : %d (ms)\n", (int)OSUtils::jsonInt(j["failoverInterval"],0)); + printf("Up Delay : %d (ms)\n", (int)OSUtils::jsonInt(j["upDelay"],0)); + printf("Down Delay : %d (ms)\n", (int)OSUtils::jsonInt(j["downDelay"],0)); + printf("Packets Per Link : %d (ms)\n", (int)OSUtils::jsonInt(j["packetsPerLink"],0)); nlohmann::json &p = j["links"]; if (p.is_array()) { printf("\n Interface Name\t\t\t\t\t Path\t Alive\n"); @@ -649,7 +647,7 @@ static int cli(int argc,char **argv) i, OSUtils::jsonString(p[i]["ifname"],"-").c_str(), OSUtils::jsonString(p[i]["path"],"-").c_str(), - OSUtils::jsonInt(p[i]["alive"],0)); + (int)OSUtils::jsonInt(p[i]["alive"],0)); } printf("\n Latency Jitter Loss Error Speed Alloc\n"); for(int i=0; i<80; i++) { printf("-"); } @@ -662,8 +660,8 @@ static int cli(int argc,char **argv) OSUtils::jsonDouble(p[i]["latencyVariance"], 0), OSUtils::jsonDouble(p[i]["packetLossRatio"], 0), OSUtils::jsonDouble(p[i]["packetErrorRatio"], 0), - OSUtils::jsonInt(p[i]["givenLinkSpeed"], 0), - OSUtils::jsonInt(p[i]["allocation"], 0)); + (int)OSUtils::jsonInt(p[i]["givenLinkSpeed"], 0), + (int)OSUtils::jsonInt(p[i]["allocation"], 0)); } } } @@ -676,7 +674,7 @@ static int cli(int argc,char **argv) } } /* zerotier-cli bond command was malformed in some way */ - printf("(bond) command is missing required arugments" ZT_EOL_S); + printf("(bond) command is missing required arguments" ZT_EOL_S); return 2; const unsigned int scode = Http::GET(1024 * 1024 * 16,60000,(const struct sockaddr *)&addr,"/bonds",requestHeaders,responseHeaders,responseBody); if (scode == 0) { @@ -711,14 +709,13 @@ static int cli(int argc,char **argv) if (j.is_array()) { for(unsigned long k=0;k= ZT_BONDING_POLICY_NONE && bondingPolicy <= ZT_BONDING_POLICY_BALANCE_AWARE) { - policyStr = BondController::getPolicyStrByCode(bondingPolicy); + if (bondingPolicy >= ZT_BOND_POLICY_NONE && bondingPolicy <= ZT_BOND_POLICY_BALANCE_AWARE) { + policyStr = Bond::getPolicyStrByCode(bondingPolicy); } printf("%10s %32s %8s %d/%d" ZT_EOL_S, @@ -789,14 +786,23 @@ static int cli(int argc,char **argv) } } if (aa.length() == 0) aa = "-"; + const std::string status = OSUtils::jsonString(n["status"],"-"); printf("200 listnetworks %s %s %s %s %s %s %s" ZT_EOL_S, OSUtils::jsonString(n["nwid"],"-").c_str(), OSUtils::jsonString(n["name"],"-").c_str(), OSUtils::jsonString(n["mac"],"-").c_str(), - OSUtils::jsonString(n["status"],"-").c_str(), + status.c_str(), OSUtils::jsonString(n["type"],"-").c_str(), OSUtils::jsonString(n["portDeviceName"],"-").c_str(), aa.c_str()); + if (OSUtils::jsonBool(n["ssoEnabled"], false)) { + uint64_t authenticationExpiryTime = n["authenticationExpiryTime"]; + if (status == "AUTHENTICATION_REQUIRED") { + printf(" AUTH EXPIRED, URL: %s" ZT_EOL_S, OSUtils::jsonString(n["authenticationURL"], "(null)").c_str()); + } else if (status == "OK") { + printf(" AUTH OK, expires in: %lld seconds" ZT_EOL_S, ((int64_t)authenticationExpiryTime - OSUtils::now()) / 1000LL); + } + } } } } @@ -1310,7 +1316,6 @@ static int cli(int argc,char **argv) struct ifconf ifc; char buf[1024]; char stringBuffer[128]; - int success = 0; int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); diff --git a/selftest.cpp b/selftest.cpp index 357e9a026..42e9bc232 100644 --- a/selftest.cpp +++ b/selftest.cpp @@ -561,8 +561,8 @@ static int testCertificate() std::cout << idA.address().toString(buf) << ", " << idB.address().toString(buf) << std::endl; std::cout << "[certificate] Generating certificates A and B..."; - CertificateOfMembership cA(10000,100,1,idA.address()); - CertificateOfMembership cB(10099,100,1,idB.address()); + CertificateOfMembership cA(10000,100,1,idA); + CertificateOfMembership cB(10099,100,1,idB); std::cout << std::endl; std::cout << "[certificate] Signing certificates A and B with authority..."; @@ -574,13 +574,13 @@ static int testCertificate() //std::cout << "[certificate] B: " << cB.toString() << std::endl; std::cout << "[certificate] A agrees with B and B with A... "; - if (cA.agreesWith(cB)) + if (cA.agreesWith(cB, idB)) std::cout << "yes, "; else { std::cout << "FAIL" << std::endl; return -1; } - if (cB.agreesWith(cA)) + if (cB.agreesWith(cA, idA)) std::cout << "yes." << std::endl; else { std::cout << "FAIL" << std::endl; @@ -588,18 +588,18 @@ static int testCertificate() } std::cout << "[certificate] Generating two certificates that should not agree..."; - cA = CertificateOfMembership(10000,100,1,idA.address()); - cB = CertificateOfMembership(10101,100,1,idB.address()); + cA = CertificateOfMembership(10000,100,1,idA); + cB = CertificateOfMembership(10101,100,1,idB); std::cout << std::endl; std::cout << "[certificate] A agrees with B and B with A... "; - if (!cA.agreesWith(cB)) + if (!cA.agreesWith(cB, idB)) std::cout << "no, "; else { std::cout << "FAIL" << std::endl; return -1; } - if (!cB.agreesWith(cA)) + if (!cB.agreesWith(cA, idA)) std::cout << "no." << std::endl; else { std::cout << "FAIL" << std::endl; diff --git a/service/OneService.cpp b/service/OneService.cpp index 6f75dbdff..dbbac3560 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -49,7 +49,6 @@ #include "../osdep/Binder.hpp" #include "../osdep/ManagedRoute.hpp" #include "../osdep/BlockingQueue.hpp" -#include "../osdep/Link.hpp" #include "OneService.hpp" #include "SoftwareUpdater.hpp" @@ -184,6 +183,7 @@ static void _networkToJson(nlohmann::json &nj,const ZT_VirtualNetworkConfig *nc, case ZT_NETWORK_STATUS_NOT_FOUND: nstatus = "NOT_FOUND"; break; case ZT_NETWORK_STATUS_PORT_ERROR: nstatus = "PORT_ERROR"; break; case ZT_NETWORK_STATUS_CLIENT_TOO_OLD: nstatus = "CLIENT_TOO_OLD"; break; + case ZT_NETWORK_STATUS_AUTHENTICATION_REQUIRED: nstatus = "AUTHENTICATION_REQUIRED"; break; } switch(nc->type) { case ZT_NETWORK_TYPE_PRIVATE: ntype = "PRIVATE"; break; @@ -251,6 +251,9 @@ static void _networkToJson(nlohmann::json &nj,const ZT_VirtualNetworkConfig *nc, } nj["dns"] = m; + nj["authenticationURL"] = nc->authenticationURL; + nj["authenticationExpiryTime"] = nc->authenticationExpiryTime; + nj["ssoEnabled"] = nc->ssoEnabled; } static void _peerToJson(nlohmann::json &pj,const ZT_Peer *peer) @@ -300,12 +303,11 @@ static void _peerToJson(nlohmann::json &pj,const ZT_Peer *peer) static void _bondToJson(nlohmann::json &pj, SharedPtr &bond) { - char tmp[256]; uint64_t now = OSUtils::now(); - int bondingPolicy = bond->getPolicy(); - pj["bondingPolicy"] = BondController::getPolicyStrByCode(bondingPolicy); - if (bondingPolicy == ZT_BONDING_POLICY_NONE) { + int bondingPolicy = bond->policy(); + pj["bondingPolicy"] = Bond::getPolicyStrByCode(bondingPolicy); + if (bondingPolicy == ZT_BOND_POLICY_NONE) { return; } @@ -315,15 +317,15 @@ static void _bondToJson(nlohmann::json &pj, SharedPtr &bond) pj["failoverInterval"] = bond->getFailoverInterval(); pj["downDelay"] = bond->getDownDelay(); pj["upDelay"] = bond->getUpDelay(); - if (bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { + if (bondingPolicy == ZT_BOND_POLICY_BALANCE_RR) { pj["packetsPerLink"] = bond->getPacketsPerLink(); } - if (bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { + if (bondingPolicy == ZT_BOND_POLICY_ACTIVE_BACKUP) { pj["linkSelectMethod"] = bond->getLinkSelectMethod(); } nlohmann::json pa = nlohmann::json::array(); - std::vector< SharedPtr > paths = bond->getPeer()->paths(now); + std::vector< SharedPtr > paths = bond->paths(now); for(unsigned int i=0;i &bond) nlohmann::json j; j["ifname"] = bond->getLink(paths[i])->ifname(); j["path"] = pathStr; + /* j["alive"] = paths[i]->alive(now,true); j["bonded"] = paths[i]->bonded(); j["latencyMean"] = paths[i]->latencyMean(); @@ -340,6 +343,7 @@ static void _bondToJson(nlohmann::json &pj, SharedPtr &bond) j["packetErrorRatio"] = paths[i]->packetErrorRatio(); j["givenLinkSpeed"] = 1000; j["allocation"] = paths[i]->allocation(); + */ pa.push_back(j); } pj["links"] = pa; @@ -535,6 +539,12 @@ public: memset(&config, 0, sizeof(ZT_VirtualNetworkConfig)); } + ~NetworkState() + { + this->managedRoutes.clear(); + this->tap.reset(); + } + std::shared_ptr tap; ZT_VirtualNetworkConfig config; // memcpy() of raw config from core std::vector managedIps; @@ -573,6 +583,7 @@ public: Mutex _run_m; RedisConfig *_rc; + std::string _ssoRedirectURL; // end member variables ---------------------------------------------------- @@ -610,6 +621,7 @@ public: #endif ,_run(true) ,_rc(NULL) + ,_ssoRedirectURL() { _ports[0] = 0; _ports[1] = 0; @@ -723,25 +735,22 @@ public: OSUtils::ztsnprintf(portstr,sizeof(portstr),"%u",_ports[0]); OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S "zerotier-one.port").c_str(),std::string(portstr)); - // Attempt to bind to a secondary port chosen from our ZeroTier address. + // Attempt to bind to a secondary port. // This exists because there are buggy NATs out there that fail if more // than one device behind the same NAT tries to use the same internal // private address port number. Buggy NATs are a running theme. + // + // This used to pick the secondary port based on the node ID until we + // discovered another problem: buggy routers and malicious traffic + // "detection". A lot of routers have such things built in these days + // and mis-detect ZeroTier traffic as malicious and block it resulting + // in a node that appears to be in a coma. Secondary ports are now + // randomized on startup. if (_allowSecondaryPort) { if (_secondaryPort) { _ports[1] = _secondaryPort; } else { - _ports[1] = 20000 + ((unsigned int)_node->address() % 45500); - for(int i=0;;++i) { - if (i > 1000) { - _ports[1] = 0; - break; - } else if (++_ports[1] >= 65536) { - _ports[1] = 20000; - } - if (_trialBind(_ports[1])) - break; - } + _ports[1] = _getRandomPort(); } } #ifdef ZT_USE_MINIUPNPC @@ -753,7 +762,7 @@ public: if (_tertiaryPort) { _ports[2] = _tertiaryPort; } else { - _ports[2] = _ports[1]; + _ports[2] = 20000 + (_ports[0] % 40000); for(int i=0;;++i) { if (i > 1000) { _ports[2] = 0; @@ -779,6 +788,9 @@ public: // Network controller is now enabled by default for desktop and server _controller = new EmbeddedNetworkController(_node,_homePath.c_str(),_controllerDbPath.c_str(),_ports[0], _rc); + if (!_ssoRedirectURL.empty()) { + _controller->setSSORedirectURL(_ssoRedirectURL); + } _node->setNetconfMaster((void *)_controller); // Join existing networks in networks.d @@ -811,6 +823,7 @@ public: int64_t lastCleanedPeersDb = 0; int64_t lastLocalInterfaceAddressCheck = (clockShouldBe - ZT_LOCAL_INTERFACE_CHECK_INTERVAL) + 15000; // do this in 15s to give portmapper time to configure and other things time to settle int64_t lastLocalConfFileCheck = OSUtils::now(); + int64_t lastOnline = lastLocalConfFileCheck; for(;;) { _run_m.lock(); if (!_run) { @@ -852,6 +865,16 @@ public: } } + // If secondary port is not configured to a constant value and we've been offline for a while, + // bind a new secondary port. This is a workaround for a "coma" issue caused by buggy NATs that stop + // working on one port after a while. + if (_node->online()) { + lastOnline = now; + } else if ((_secondaryPort == 0)&&((now - lastOnline) > ZT_PATH_HEARTBEAT_PERIOD)) { + _secondaryPort = _getRandomPort(); + lastBindRefresh = 0; + } + // Refresh bindings in case device's interfaces have changed, and also sync routes to update any shadow routes (e.g. shadow default) if (((now - lastBindRefresh) >= (_node->bondController()->inUse() ? ZT_BINDER_REFRESH_PERIOD / 4 : ZT_BINDER_REFRESH_PERIOD))||(restarted)) { lastBindRefresh = now; @@ -1012,8 +1035,11 @@ public: } } + // Make a copy so lookups don't modify in place; + json lc(_localConfig); + // Get any trusted paths in local.conf (we'll parse the rest of physical[] elsewhere) - json &physical = _localConfig["physical"]; + json &physical = lc["physical"]; if (physical.is_object()) { for(json::iterator phy(physical.begin());phy!=physical.end();++phy) { InetAddress net(OSUtils::jsonString(phy.key(),"").c_str()); @@ -1030,20 +1056,22 @@ public: } } - json &settings = _localConfig["settings"]; + json &settings = lc["settings"]; if (settings.is_object()) { // Allow controller DB path to be put somewhere else const std::string cdbp(OSUtils::jsonString(settings["controllerDbPath"],"")); if (cdbp.length() > 0) _controllerDbPath = cdbp; + _ssoRedirectURL = OSUtils::jsonString(settings["ssoRedirectURL"], ""); + #ifdef ZT_CONTROLLER_USE_LIBPQ // TODO: Redis config json &redis = settings["redis"]; if (redis.is_object() && _rc == NULL) { _rc = new RedisConfig; _rc->hostname = OSUtils::jsonString(redis["hostname"],""); - _rc->port = redis["port"]; + _rc->port = OSUtils::jsonInt(redis["port"],0); _rc->password = OSUtils::jsonString(redis["password"],""); _rc->clusterMode = OSUtils::jsonBool(redis["clusterMode"], false); } @@ -1259,7 +1287,7 @@ public: _bondToJson(res,bond); scode = 200; } else { - fprintf(stderr, "unable to find bond to peer %llx\n", id); + fprintf(stderr, "unable to find bond to peer %llx\n", (unsigned long long)id); scode = 400; } } @@ -1271,8 +1299,11 @@ public: } else { scode = 400; /* bond controller is not enabled */ } - } - if (ps[0] == "status") { + } else if (ps[0] == "config") { + Mutex::Lock lc(_localConfig_m); + res = _localConfig; + scode = 200; + } else if (ps[0] == "status") { ZT_NodeStatus status; _node->status(&status); @@ -1466,7 +1497,7 @@ public: if (bond) { scode = bond->abForciblyRotateLink() ? 200 : 400; } else { - fprintf(stderr, "unable to find bond to peer %llx\n", id); + fprintf(stderr, "unable to find bond to peer %llx\n", (unsigned long long)id); scode = 400; } } @@ -1478,8 +1509,35 @@ public: } else { scode = 400; /* bond controller is not enabled */ } - } - if (ps[0] == "moon") { + } else if (ps[0] == "config") { + // Right now we only support writing the things the UI supports changing. + if (ps.size() == 2) { + if (ps[1] == "settings") { + try { + json j(OSUtils::jsonParse(body)); + if (j.is_object()) { + Mutex::Lock lcl(_localConfig_m); + json lc(_localConfig); + for(json::const_iterator s(j.begin());s!=j.end();++s) { + lc["settings"][s.key()] = s.value(); + } + std::string lcStr = OSUtils::jsonDump(lc, 4); + if (OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S "local.conf").c_str(), lcStr)) { + _localConfig = lc; + } + } else { + scode = 400; + } + } catch ( ... ) { + scode = 400; + } + } else { + scode = 404; + } + } else { + scode = 404; + } + } else if (ps[0] == "moon") { if (ps.size() == 2) { uint64_t seed = 0; @@ -1711,11 +1769,11 @@ public: if (basePolicyStr.empty()) { fprintf(stderr, "error: no base policy was specified for custom policy (%s)\n", customPolicyStr.c_str()); } - if (_node->bondController()->getPolicyCodeByStr(basePolicyStr) == ZT_BONDING_POLICY_NONE) { + if (_node->bondController()->getPolicyCodeByStr(basePolicyStr) == ZT_BOND_POLICY_NONE) { fprintf(stderr, "error: custom policy (%s) is invalid, unknown base policy (%s).\n", customPolicyStr.c_str(), basePolicyStr.c_str()); continue; - } if (_node->bondController()->getPolicyCodeByStr(customPolicyStr) != ZT_BONDING_POLICY_NONE) { + } if (_node->bondController()->getPolicyCodeByStr(customPolicyStr) != ZT_BOND_POLICY_NONE) { fprintf(stderr, "error: custom policy (%s) will be ignored, cannot use standard policy names for custom policies.\n", customPolicyStr.c_str()); continue; @@ -1744,20 +1802,12 @@ public: newTemplateBond->setUserQualityWeights(weights,ZT_QOS_WEIGHT_SIZE); } // Bond-specific properties - newTemplateBond->setOverflowMode(OSUtils::jsonInt(customPolicy["overflow"],false)); newTemplateBond->setUpDelay(OSUtils::jsonInt(customPolicy["upDelay"],-1)); newTemplateBond->setDownDelay(OSUtils::jsonInt(customPolicy["downDelay"],-1)); newTemplateBond->setFlowRebalanceStrategy(OSUtils::jsonInt(customPolicy["flowRebalanceStrategy"],(uint64_t)0)); newTemplateBond->setFailoverInterval(OSUtils::jsonInt(customPolicy["failoverInterval"],(uint64_t)0)); newTemplateBond->setPacketsPerLink(OSUtils::jsonInt(customPolicy["packetsPerLink"],-1)); - std::string linkMonitorStrategyStr(OSUtils::jsonString(customPolicy["linkMonitorStrategy"],"")); - uint8_t linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DEFAULT; - if (linkMonitorStrategyStr == "passive") { linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE; } - if (linkMonitorStrategyStr == "active") { linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_ACTIVE; } - if (linkMonitorStrategyStr == "dynamic") { linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; } - newTemplateBond->setLinkMonitorStrategy(linkMonitorStrategy); - // Policy-Specific link set json &links = customPolicy["links"]; for (json::iterator linkItr = links.begin(); linkItr != links.end();++linkItr) { @@ -1773,40 +1823,40 @@ public: speed, alloc, linkNameStr.c_str()); enabled = false; } - uint32_t upDelay = OSUtils::jsonInt(link["upDelay"],-1); - uint32_t downDelay = OSUtils::jsonInt(link["downDelay"],-1); + //uint32_t upDelay = OSUtils::jsonInt(link["upDelay"],-1); + //uint32_t downDelay = OSUtils::jsonInt(link["downDelay"],-1); uint8_t ipvPref = OSUtils::jsonInt(link["ipvPref"],0); - uint32_t linkMonitorInterval = OSUtils::jsonInt(link["monitorInterval"],(uint64_t)0); + //uint32_t linkMonitorInterval = OSUtils::jsonInt(link["monitorInterval"],(uint64_t)0); std::string failoverToStr(OSUtils::jsonString(link["failoverTo"],"")); // Mode std::string linkModeStr(OSUtils::jsonString(link["mode"],"spare")); - uint8_t linkMode = ZT_MULTIPATH_SLAVE_MODE_SPARE; - if (linkModeStr == "primary") { linkMode = ZT_MULTIPATH_SLAVE_MODE_PRIMARY; } - if (linkModeStr == "spare") { linkMode = ZT_MULTIPATH_SLAVE_MODE_SPARE; } + uint8_t linkMode = ZT_BOND_SLAVE_MODE_SPARE; + if (linkModeStr == "primary") { linkMode = ZT_BOND_SLAVE_MODE_PRIMARY; } + if (linkModeStr == "spare") { linkMode = ZT_BOND_SLAVE_MODE_SPARE; } // ipvPref if ((ipvPref != 0) && (ipvPref != 4) && (ipvPref != 6) && (ipvPref != 46) && (ipvPref != 64)) { fprintf(stderr, "error: invalid ipvPref value (%d), link disabled.\n", ipvPref); enabled = false; } - if (linkMode == ZT_MULTIPATH_SLAVE_MODE_SPARE && failoverToStr.length()) { + if (linkMode == ZT_BOND_SLAVE_MODE_SPARE && failoverToStr.length()) { fprintf(stderr, "error: cannot specify failover links for spares, link disabled.\n"); failoverToStr = ""; enabled = false; } - _node->bondController()->addCustomLink(customPolicyStr, new Link(linkNameStr,ipvPref,speed,linkMonitorInterval,upDelay,downDelay,enabled,linkMode,failoverToStr,alloc)); + _node->bondController()->addCustomLink(customPolicyStr, new Link(linkNameStr,ipvPref,speed,enabled,linkMode,failoverToStr,alloc)); } std::string linkSelectMethodStr(OSUtils::jsonString(customPolicy["activeReselect"],"optimize")); if (linkSelectMethodStr == "always") { - newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS); + newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_ALWAYS); } if (linkSelectMethodStr == "better") { - newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_BETTER); + newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_BETTER); } if (linkSelectMethodStr == "failure") { - newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_FAILURE); + newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_FAILURE); } if (linkSelectMethodStr == "optimize") { - newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE); + newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_OPTIMIZE); } if (newTemplateBond->getLinkSelectMethod() < 0 || newTemplateBond->getLinkSelectMethod() > 3) { fprintf(stderr, "warning: invalid value (%s) for linkSelectMethod, assuming mode: always\n", linkSelectMethodStr.c_str()); @@ -1839,7 +1889,7 @@ public: _secondaryPort = (unsigned int)OSUtils::jsonInt(settings["secondaryPort"],0); _tertiaryPort = (unsigned int)OSUtils::jsonInt(settings["tertiaryPort"],0); if (_secondaryPort != 0 || _tertiaryPort != 0) { - fprintf(stderr,"WARNING: using manually-specified ports. This can cause NAT issues." ZT_EOL_S); + fprintf(stderr,"WARNING: using manually-specified secondary and/or tertiary ports. This can cause NAT issues." ZT_EOL_S); } _portMappingEnabled = OSUtils::jsonBool(settings["portMappingEnabled"],true); @@ -2028,7 +2078,7 @@ public: unsigned int mostMatchingPrefixBits = 0; for(std::set::const_iterator i(myIps.begin());i!=myIps.end();++i) { const unsigned int matchingPrefixBits = i->matchingPrefixBits(*target); - if (matchingPrefixBits >= mostMatchingPrefixBits) { + if (matchingPrefixBits >= mostMatchingPrefixBits && ((target->isV4() && i->isV4()) || (target->isV6() && i->isV6()))) { mostMatchingPrefixBits = matchingPrefixBits; src = &(*i); } @@ -2391,7 +2441,7 @@ public: Dictionary<4096> nc; nc.load(nlcbuf.c_str()); Buffer<1024> allowManaged; - if (nc.get("allowManaged", allowManaged) && !allowManaged.size() == 0) { + if (nc.get("allowManaged", allowManaged) && allowManaged.size() > 0) { std::string addresses (allowManaged.begin(), allowManaged.size()); if (allowManaged.size() <= 5) { // untidy parsing for backward compatibility if (allowManaged[0] == '1' || allowManaged[0] == 't' || allowManaged[0] == 'T') { @@ -2625,7 +2675,6 @@ public: case ZT_STATE_OBJECT_NETWORK_CONFIG: OSUtils::ztsnprintf(dirname,sizeof(dirname),"%s" ZT_PATH_SEPARATOR_S "networks.d",_homePath.c_str()); OSUtils::ztsnprintf(p,sizeof(p),"%s" ZT_PATH_SEPARATOR_S "%.16llx.conf",dirname,(unsigned long long)id[0]); - secure = true; break; case ZT_STATE_OBJECT_PEER: OSUtils::ztsnprintf(dirname,sizeof(dirname),"%s" ZT_PATH_SEPARATOR_S "peers.d",_homePath.c_str()); @@ -3044,9 +3093,6 @@ public: if (!strncmp(p->c_str(),ifname,p->length())) return false; } - if (!_node->bondController()->allowedToBind(std::string(ifname))) { - return false; - } } { // Check global blacklists @@ -3084,6 +3130,23 @@ public: return true; } + unsigned int _getRandomPort() + { + unsigned int randp = 0; + Utils::getSecureRandom(&randp,sizeof(randp)); + randp = 20000 + (randp % 45500); + for(int i=0;;++i) { + if (i > 1000) { + return 0; + } else if (++randp >= 65536) { + randp = 20000; + } + if (_trialBind(randp)) + break; + } + return randp; + } + bool _trialBind(unsigned int port) { struct sockaddr_in in4; From 9f9a870399673f8b85ef84b5d7e0416027240000 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 21 Sep 2021 11:31:25 -0400 Subject: [PATCH 008/144] Version bump, backport one more fix. --- RELEASE-NOTES.md | 4 ++ ext/installfiles/mac/ZeroTier One.pkgproj | 9 +++- osdep/ManagedRoute.cpp | 50 ++++++++++++++++++----- version.h | 2 +- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 5b3ccb85c..4e7f371a4 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,6 +1,10 @@ ZeroTier Release Notes ====== +# 2021-09-21 -- Version 1.6.6 + + * Point release to back-port additional endpoint-side mitigations against vulnerability announced by Pulse Security. + # 2021-04-13 -- Version 1.6.5 * Fix a bug in potential network path filtering that could in some circumstances lead to "software laser" effects. diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index fcc1676c0..bcc461afb 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -689,7 +689,7 @@ USE_HFS+_COMPRESSION VERSION - 1.6.5 + 1.6.6 TYPE 0 @@ -865,6 +865,13 @@ PROJECT_SETTINGS + ADVANCED_OPTIONS + + installer-script.options:hostArchitectures + + x86_64,arm64 + + BUILD_FORMAT 0 BUILD_PATH diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp index 85f2c67c9..4c1214a66 100644 --- a/osdep/ManagedRoute.cpp +++ b/osdep/ManagedRoute.cpp @@ -250,14 +250,26 @@ static void _routeCmd(const char *op,const InetAddress &target,const InetAddress char iptmp[64]; if (via) { if ((ifscope)&&(ifscope[0])) { +#ifdef ZT_TRACE + fprintf(stderr, "DEBUG: route %s -ifscope %s %s %s" ZT_EOL_S, ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp)); +#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,"-ifscope",ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp),(const char *)0); } else { +#ifdef ZT_TRACE + fprintf(stderr, "DEBUG: route %s %s %s %s" ZT_EOL_S, op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp)); +#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp),(const char *)0); } } else if ((localInterface)&&(localInterface[0])) { if ((ifscope)&&(ifscope[0])) { +#ifdef ZT_TRACE + fprintf(stderr, "DEBUG: route %s -ifscope %s %s %s -interface %s" ZT_EOL_S, op, ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),localInterface); +#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,"-ifscope",ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),"-interface",localInterface,(const char *)0); } else { +#ifdef ZT_TRACE + fprintf(stderr, "DEBUG: route %s %s %s -interface %s" ZT_EOL_S, op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),localInterface); +#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),"-interface",localInterface,(const char *)0); } } @@ -393,9 +405,7 @@ ManagedRoute::ManagedRoute(const InetAddress &target,const InetAddress &via,cons } ManagedRoute::~ManagedRoute() -{ - this->remove(); -} +{} /* Linux NOTE: for default route override, some Linux distributions will * require a change to the rp_filter parameter. A value of '1' will prevent @@ -427,6 +437,24 @@ bool ManagedRoute::sync() #ifdef __BSD__ // ------------------------------------------------------------ + if (_device[0]) { + bool haveDevice = false; + struct ifaddrs *ifa = (struct ifaddrs *)0; + if (!getifaddrs(&ifa)) { + struct ifaddrs *p = ifa; + while (p) { + if ((p->ifa_name)&&(!strcmp(_device, p->ifa_name))) { + haveDevice = true; + break; + } + p = p->ifa_next; + } + freeifaddrs(ifa); + } + if (!haveDevice) + return false; + } + // Find lowest metric system route that this route should override (if any) InetAddress newSystemVia; char newSystemDevice[128]; @@ -471,23 +499,25 @@ bool ManagedRoute::sync() if (_systemVia) { _routeCmd("add",leftt,_systemVia,_systemDevice,(const char *)0); - _routeCmd("change",leftt,_systemVia,_systemDevice,(const char *)0); + //_routeCmd("change",leftt,_systemVia,_systemDevice,(const char *)0); if (rightt) { _routeCmd("add",rightt,_systemVia,_systemDevice,(const char *)0); - _routeCmd("change",rightt,_systemVia,_systemDevice,(const char *)0); + //_routeCmd("change",rightt,_systemVia,_systemDevice,(const char *)0); } } } if (!_applied.count(leftt)) { - _applied[leftt] = false; // not ifscoped + _applied[leftt] = !_via; + _routeCmd("delete",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); _routeCmd("add",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); - _routeCmd("change",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + //_routeCmd("change",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); } if ((rightt)&&(!_applied.count(rightt))) { - _applied[rightt] = false; // not ifscoped + _applied[rightt] = !_via; + _routeCmd("delete",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); _routeCmd("add",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); - _routeCmd("change",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + //_routeCmd("change",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); } #endif // __BSD__ ------------------------------------------------------------ @@ -566,4 +596,4 @@ void ManagedRoute::remove() _applied.clear(); } -} // namespace ZeroTier \ No newline at end of file +} // namespace ZeroTier diff --git a/version.h b/version.h index d6c2612e0..81286f557 100644 --- a/version.h +++ b/version.h @@ -27,7 +27,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 5 +#define ZEROTIER_ONE_VERSION_REVISION 6 /** * Build version From 452b1e806b2f8932bf2597b66e039570b38da496 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 21 Sep 2021 11:51:10 -0400 Subject: [PATCH 009/144] Revert "Version bump, backport one more fix." This reverts commit 9f9a870399673f8b85ef84b5d7e0416027240000. --- RELEASE-NOTES.md | 4 -- ext/installfiles/mac/ZeroTier One.pkgproj | 9 +--- osdep/ManagedRoute.cpp | 50 +++++------------------ version.h | 2 +- 4 files changed, 12 insertions(+), 53 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 4e7f371a4..5b3ccb85c 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,10 +1,6 @@ ZeroTier Release Notes ====== -# 2021-09-21 -- Version 1.6.6 - - * Point release to back-port additional endpoint-side mitigations against vulnerability announced by Pulse Security. - # 2021-04-13 -- Version 1.6.5 * Fix a bug in potential network path filtering that could in some circumstances lead to "software laser" effects. diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index bcc461afb..fcc1676c0 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -689,7 +689,7 @@ USE_HFS+_COMPRESSION VERSION - 1.6.6 + 1.6.5 TYPE 0 @@ -865,13 +865,6 @@ PROJECT_SETTINGS - ADVANCED_OPTIONS - - installer-script.options:hostArchitectures - - x86_64,arm64 - - BUILD_FORMAT 0 BUILD_PATH diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp index 4c1214a66..85f2c67c9 100644 --- a/osdep/ManagedRoute.cpp +++ b/osdep/ManagedRoute.cpp @@ -250,26 +250,14 @@ static void _routeCmd(const char *op,const InetAddress &target,const InetAddress char iptmp[64]; if (via) { if ((ifscope)&&(ifscope[0])) { -#ifdef ZT_TRACE - fprintf(stderr, "DEBUG: route %s -ifscope %s %s %s" ZT_EOL_S, ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp)); -#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,"-ifscope",ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp),(const char *)0); } else { -#ifdef ZT_TRACE - fprintf(stderr, "DEBUG: route %s %s %s %s" ZT_EOL_S, op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp)); -#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),via.toIpString(iptmp),(const char *)0); } } else if ((localInterface)&&(localInterface[0])) { if ((ifscope)&&(ifscope[0])) { -#ifdef ZT_TRACE - fprintf(stderr, "DEBUG: route %s -ifscope %s %s %s -interface %s" ZT_EOL_S, op, ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),localInterface); -#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,"-ifscope",ifscope,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),"-interface",localInterface,(const char *)0); } else { -#ifdef ZT_TRACE - fprintf(stderr, "DEBUG: route %s %s %s -interface %s" ZT_EOL_S, op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),localInterface); -#endif ::execl(ZT_BSD_ROUTE_CMD,ZT_BSD_ROUTE_CMD,op,((target.ss_family == AF_INET6) ? "-inet6" : "-inet"),target.toString(ttmp),"-interface",localInterface,(const char *)0); } } @@ -405,7 +393,9 @@ ManagedRoute::ManagedRoute(const InetAddress &target,const InetAddress &via,cons } ManagedRoute::~ManagedRoute() -{} +{ + this->remove(); +} /* Linux NOTE: for default route override, some Linux distributions will * require a change to the rp_filter parameter. A value of '1' will prevent @@ -437,24 +427,6 @@ bool ManagedRoute::sync() #ifdef __BSD__ // ------------------------------------------------------------ - if (_device[0]) { - bool haveDevice = false; - struct ifaddrs *ifa = (struct ifaddrs *)0; - if (!getifaddrs(&ifa)) { - struct ifaddrs *p = ifa; - while (p) { - if ((p->ifa_name)&&(!strcmp(_device, p->ifa_name))) { - haveDevice = true; - break; - } - p = p->ifa_next; - } - freeifaddrs(ifa); - } - if (!haveDevice) - return false; - } - // Find lowest metric system route that this route should override (if any) InetAddress newSystemVia; char newSystemDevice[128]; @@ -499,25 +471,23 @@ bool ManagedRoute::sync() if (_systemVia) { _routeCmd("add",leftt,_systemVia,_systemDevice,(const char *)0); - //_routeCmd("change",leftt,_systemVia,_systemDevice,(const char *)0); + _routeCmd("change",leftt,_systemVia,_systemDevice,(const char *)0); if (rightt) { _routeCmd("add",rightt,_systemVia,_systemDevice,(const char *)0); - //_routeCmd("change",rightt,_systemVia,_systemDevice,(const char *)0); + _routeCmd("change",rightt,_systemVia,_systemDevice,(const char *)0); } } } if (!_applied.count(leftt)) { - _applied[leftt] = !_via; - _routeCmd("delete",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + _applied[leftt] = false; // not ifscoped _routeCmd("add",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); - //_routeCmd("change",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + _routeCmd("change",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); } if ((rightt)&&(!_applied.count(rightt))) { - _applied[rightt] = !_via; - _routeCmd("delete",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + _applied[rightt] = false; // not ifscoped _routeCmd("add",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); - //_routeCmd("change",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + _routeCmd("change",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); } #endif // __BSD__ ------------------------------------------------------------ @@ -596,4 +566,4 @@ void ManagedRoute::remove() _applied.clear(); } -} // namespace ZeroTier +} // namespace ZeroTier \ No newline at end of file diff --git a/version.h b/version.h index 81286f557..d6c2612e0 100644 --- a/version.h +++ b/version.h @@ -27,7 +27,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 6 +#define ZEROTIER_ONE_VERSION_REVISION 5 /** * Build version From 75a45eeb27affb8a6ec5bfad15f5487f2327ea15 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 21 Sep 2021 11:51:26 -0400 Subject: [PATCH 010/144] Revert "Backport guts of 1.8 to 1.6 tree so we can point release without waiting for UI quirks to be fixed." This reverts commit 48ce7632fa39faedd7ac46c267e0d333ab5f7ffd. --- controller/ConnectionPool.hpp | 161 -- controller/DB.cpp | 18 +- controller/DB.hpp | 12 +- controller/DBMirrorSet.cpp | 65 +- controller/DBMirrorSet.hpp | 8 - controller/EmbeddedNetworkController.cpp | 134 +- controller/EmbeddedNetworkController.hpp | 3 - controller/FileDB.cpp | 3 +- controller/PostgreSQL.cpp | 1703 +++++++++------- controller/PostgreSQL.hpp | 79 +- include/ZeroTierOne.h | 173 +- node/Bond.cpp | 2236 +++++++++++----------- node/Bond.hpp | 1208 +++--------- node/BondController.cpp | 212 ++ node/BondController.hpp | 239 +++ node/CertificateOfMembership.cpp | 192 +- node/CertificateOfMembership.hpp | 50 +- node/Constants.hpp | 205 +- node/Flow.hpp | 124 ++ node/Identity.hpp | 12 - node/IncomingPacket.cpp | 51 +- node/IncomingPacket.hpp | 1 + node/Membership.hpp | 7 +- node/Network.cpp | 16 +- node/Network.hpp | 15 +- node/NetworkConfig.cpp | 22 - node/NetworkConfig.hpp | 28 +- node/NetworkController.hpp | 10 +- node/Node.cpp | 39 +- node/Node.hpp | 6 +- node/Packet.hpp | 11 +- node/Path.hpp | 441 ++++- node/Peer.cpp | 67 +- node/Peer.hpp | 60 +- node/RuntimeEnvironment.hpp | 4 +- node/Switch.cpp | 5 +- node/Trace.cpp | 2 +- node/Utils.cpp | 2 - objects.mk | 3 +- one.cpp | 83 +- selftest.cpp | 16 +- service/OneService.cpp | 181 +- 42 files changed, 4153 insertions(+), 3754 deletions(-) delete mode 100644 controller/ConnectionPool.hpp create mode 100644 node/BondController.cpp create mode 100644 node/BondController.hpp create mode 100644 node/Flow.hpp diff --git a/controller/ConnectionPool.hpp b/controller/ConnectionPool.hpp deleted file mode 100644 index 8ffc1645c..000000000 --- a/controller/ConnectionPool.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c)2021 ZeroTier, Inc. - * - * Use of this software is governed by the Business Source License included - * in the LICENSE.TXT file in the project's root directory. - * - * Change Date: 2025-01-01 - * - * On the date above, in accordance with the Business Source License, use - * of this software will be governed by version 2.0 of the Apache License. - */ -/****/ - -#ifndef ZT_CONNECTION_POOL_H_ -#define ZT_CONNECTION_POOL_H_ - - -#ifndef _DEBUG - #define _DEBUG(x) -#endif - -#include -#include -#include -#include -#include -#include - -namespace ZeroTier { - -struct ConnectionUnavailable : std::exception { - char const* what() const throw() { - return "Unable to allocate connection"; - }; -}; - - -class Connection { -public: - virtual ~Connection() {}; -}; - -class ConnectionFactory { -public: - virtual ~ConnectionFactory() {}; - virtual std::shared_ptr create()=0; -}; - -struct ConnectionPoolStats { - size_t pool_size; - size_t borrowed_size; -}; - -template -class ConnectionPool { -public: - ConnectionPool(size_t max_pool_size, size_t min_pool_size, std::shared_ptr factory) - : m_maxPoolSize(max_pool_size) - , m_minPoolSize(min_pool_size) - , m_factory(factory) - { - while(m_pool.size() < m_minPoolSize){ - m_pool.push_back(m_factory->create()); - } - }; - - ConnectionPoolStats get_stats() { - std::unique_lock lock(m_poolMutex); - - ConnectionPoolStats stats; - stats.pool_size = m_pool.size(); - stats.borrowed_size = m_borrowed.size(); - - return stats; - }; - - ~ConnectionPool() { - }; - - /** - * Borrow - * - * Borrow a connection for temporary use - * - * When done, either (a) call unborrow() to return it, or (b) (if it's bad) just let it go out of scope. This will cause it to automatically be replaced. - * @retval a shared_ptr to the connection object - */ - std::shared_ptr borrow() { - std::unique_lock l(m_poolMutex); - - while((m_pool.size() + m_borrowed.size()) < m_minPoolSize) { - std::shared_ptr conn = m_factory->create(); - m_pool.push_back(conn); - } - - if(m_pool.size()==0){ - - if ((m_pool.size() + m_borrowed.size()) <= m_maxPoolSize) { - try { - std::shared_ptr conn = m_factory->create(); - m_borrowed.insert(conn); - return std::static_pointer_cast(conn); - } catch (std::exception &e) { - throw ConnectionUnavailable(); - } - } else { - for(auto it = m_borrowed.begin(); it != m_borrowed.end(); ++it){ - if((*it).unique()) { - // This connection has been abandoned! Destroy it and create a new connection - try { - // If we are able to create a new connection, return it - _DEBUG("Creating new connection to replace discarded connection"); - std::shared_ptr conn = m_factory->create(); - m_borrowed.erase(it); - m_borrowed.insert(conn); - return std::static_pointer_cast(conn); - } catch(std::exception& e) { - // Error creating a replacement connection - throw ConnectionUnavailable(); - } - } - } - // Nothing available - throw ConnectionUnavailable(); - } - } - - // Take one off the front - std::shared_ptr conn = m_pool.front(); - m_pool.pop_front(); - // Add it to the borrowed list - m_borrowed.insert(conn); - return std::static_pointer_cast(conn); - }; - - /** - * Unborrow a connection - * - * Only call this if you are returning a working connection. If the connection was bad, just let it go out of scope (so the connection manager can replace it). - * @param the connection - */ - void unborrow(std::shared_ptr conn) { - // Lock - std::unique_lock lock(m_poolMutex); - m_borrowed.erase(conn); - if ((m_pool.size() + m_borrowed.size()) < m_maxPoolSize) { - m_pool.push_back(conn); - } - }; -protected: - size_t m_maxPoolSize; - size_t m_minPoolSize; - std::shared_ptr m_factory; - std::deque > m_pool; - std::set > m_borrowed; - std::mutex m_poolMutex; -}; - -} - -#endif \ No newline at end of file diff --git a/controller/DB.cpp b/controller/DB.cpp index 27578bf77..8a86ae376 100644 --- a/controller/DB.cpp +++ b/controller/DB.cpp @@ -49,9 +49,6 @@ void DB::initNetwork(nlohmann::json &network) }}; } if (!network.count("dns")) network["dns"] = nlohmann::json::array(); - if (!network.count("ssoEnabled")) network["ssoEnabled"] = false; - if (!network.count("clientId")) network["clientId"] = ""; - if (!network.count("authorizationEndpoint")) network["authorizationEndpoint"] = ""; network["objtype"] = "network"; } @@ -59,7 +56,6 @@ void DB::initNetwork(nlohmann::json &network) void DB::initMember(nlohmann::json &member) { if (!member.count("authorized")) member["authorized"] = false; - if (!member.count("ssoExempt")) member["ssoExempt"] = false; if (!member.count("ipAssignments")) member["ipAssignments"] = nlohmann::json::array(); if (!member.count("activeBridge")) member["activeBridge"] = false; if (!member.count("tags")) member["tags"] = nlohmann::json::array(); @@ -71,7 +67,6 @@ void DB::initMember(nlohmann::json &member) if (!member.count("lastAuthorizedTime")) member["lastAuthorizedTime"] = 0ULL; if (!member.count("lastAuthorizedCredentialType")) member["lastAuthorizedCredentialType"] = nlohmann::json(); if (!member.count("lastAuthorizedCredential")) member["lastAuthorizedCredential"] = nlohmann::json(); - if (!member.count("authenticationExpiryTime")) member["authenticationExpiryTime"] = 0LL; if (!member.count("vMajor")) member["vMajor"] = -1; if (!member.count("vMinor")) member["vMinor"] = -1; if (!member.count("vRev")) member["vRev"] = -1; @@ -97,8 +92,6 @@ void DB::cleanMember(nlohmann::json &member) member.erase("recentLog"); member.erase("lastModified"); member.erase("lastRequestMetaData"); - member.erase("authenticationURL"); // computed - member.erase("authenticationClientID"); // computed } DB::DB() {} @@ -181,9 +174,8 @@ bool DB::get(const uint64_t networkId,nlohmann::json &network,std::vector l2(nw->lock); network = nw->config; - for(auto m=nw->members.begin();m!=nw->members.end();++m) { + for(auto m=nw->members.begin();m!=nw->members.end();++m) members.push_back(m->second); - } } return true; } @@ -196,14 +188,6 @@ void DB::networks(std::set &networks) networks.insert(n->first); } -void DB::networkMemberSSOHasExpired(uint64_t nwid, int64_t now) { - std::lock_guard l(_networks_l); - auto nw = _networks.find(nwid); - if (nw != _networks.end()) { - nw->second->mostRecentDeauthTime = now; - } -} - void DB::_memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners) { uint64_t memberId = 0; diff --git a/controller/DB.hpp b/controller/DB.hpp index 0a5d784c2..6a6906eff 100644 --- a/controller/DB.hpp +++ b/controller/DB.hpp @@ -31,12 +31,9 @@ #include #include #include -#include #include "../ext/json/json.hpp" -#define ZT_MEMBER_AUTH_TIMEOUT_NOTIFY_BEFORE 25000 - namespace ZeroTier { @@ -104,12 +101,11 @@ public: } virtual bool save(nlohmann::json &record,bool notifyListeners) = 0; + virtual void eraseNetwork(const uint64_t networkId) = 0; virtual void eraseMember(const uint64_t networkId,const uint64_t memberId) = 0; - virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) = 0; - virtual std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) { return ""; } - virtual void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts); + virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) = 0; inline void addListener(DB::ChangeListener *const listener) { @@ -152,8 +148,8 @@ protected: std::mutex lock; }; - virtual void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners); - virtual void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners); + void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners); + void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners); void _fillSummaryInfo(const std::shared_ptr<_Network> &nw,NetworkSummaryInfo &info); std::vector _changeListeners; diff --git a/controller/DBMirrorSet.cpp b/controller/DBMirrorSet.cpp index de7ebefe1..f19741bb3 100644 --- a/controller/DBMirrorSet.cpp +++ b/controller/DBMirrorSet.cpp @@ -36,7 +36,7 @@ DBMirrorSet::DBMirrorSet(DB::ChangeListener *listener) : } for(auto db=dbs.begin();db!=dbs.end();++db) { - (*db)->each([&dbs,&db](uint64_t networkId,const nlohmann::json &network,uint64_t memberId,const nlohmann::json &member) { + (*db)->each([this,&dbs,&db](uint64_t networkId,const nlohmann::json &network,uint64_t memberId,const nlohmann::json &member) { try { if (network.is_object()) { if (memberId == 0) { @@ -125,26 +125,6 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,std::vect return false; } -std::string DBMirrorSet::getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) -{ - std::lock_guard l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - std::string url = (*d)->getSSOAuthURL(member, redirectURL); - if (!url.empty()) { - return url; - } - } - return ""; -} - -void DBMirrorSet::networkMemberSSOHasExpired(uint64_t nwid, int64_t ts) -{ - std::lock_guard l(_dbs_l); - for(auto d=_dbs.begin();d!=_dbs.end();++d) { - (*d)->networkMemberSSOHasExpired(nwid, ts); - } -} - void DBMirrorSet::networks(std::set &networks) { std::lock_guard l(_dbs_l); @@ -248,47 +228,4 @@ void DBMirrorSet::onNetworkMemberDeauthorize(const void *db,uint64_t networkId,u _listener->onNetworkMemberDeauthorize(this,networkId,memberId); } -void DBMirrorSet::membersExpiring(std::set< std::pair > &soon, std::set< std::pair > &expired) -{ - std::unique_lock l(_membersExpiringSoon_l); - int64_t now = OSUtils::now(); - for(auto next=_membersExpiringSoon.begin();next!=_membersExpiringSoon.end();) { - if (next->first > now) { - const uint64_t nwid = next->second.first; - const uint64_t memberId = next->second.second; - nlohmann::json network, member; - if (this->get(nwid, network, memberId, member)) { - try { - const bool authorized = member["authorized"]; - const bool ssoExempt = member["ssoExempt"]; - const int64_t authenticationExpiryTime = member["authenticationExpiryTime"]; - if ((authenticationExpiryTime == next->first)&&(authorized)&&(!ssoExempt)) { - if ((authenticationExpiryTime - now) > ZT_MEMBER_AUTH_TIMEOUT_NOTIFY_BEFORE) { - // Stop when we get to entries too far in the future. - break; - } else { - const bool ssoEnabled = network["ssoEnabled"]; - if (ssoEnabled) - soon.insert(std::pair(nwid, memberId)); - } - } else { - // Obsolete entry, no longer authorized, or SSO exempt. - } - } catch ( ... ) { - // Invalid member object, erase. - } - } else { - // Not found. - } - } - _membersExpiringSoon.erase(next++); - } -} - -void DBMirrorSet::memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId) -{ - std::unique_lock l(_membersExpiringSoon_l); - _membersExpiringSoon.insert(std::pair< int64_t, std::pair< uint64_t, uint64_t > >(expTime, std::pair< uint64_t, uint64_t >(nwid, memberId))); -} - } // namespace ZeroTier diff --git a/controller/DBMirrorSet.hpp b/controller/DBMirrorSet.hpp index 4ce962740..967cd9360 100644 --- a/controller/DBMirrorSet.hpp +++ b/controller/DBMirrorSet.hpp @@ -51,9 +51,6 @@ public: virtual void onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member); virtual void onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId); - std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL); - void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts); - inline void addDB(const std::shared_ptr &db) { db->addListener(this); @@ -61,17 +58,12 @@ public: _dbs.push_back(db); } - void membersExpiring(std::set< std::pair > &soon, std::set< std::pair > &expired); - void memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId); - private: DB::ChangeListener *const _listener; std::atomic_bool _running; std::thread _syncCheckerThread; std::vector< std::shared_ptr< DB > > _dbs; mutable std::mutex _dbs_l; - std::set< std::pair< int64_t, std::pair > > _membersExpiringSoon; - mutable std::mutex _membersExpiringSoon_l; }; } // namespace ZeroTier diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index ea70cb3ae..1b2da4c56 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -28,9 +28,6 @@ #include #include #include -#include -#include -#include #include "../include/ZeroTierOne.h" #include "../version.h" @@ -63,29 +60,6 @@ namespace ZeroTier { namespace { -std::string url_encode(const std::string &value) { - std::ostringstream escaped; - escaped.fill('0'); - escaped << std::hex; - - for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { - std::string::value_type c = (*i); - - // Keep alphanumeric and other accepted characters intact - if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { - escaped << c; - continue; - } - - // Any other characters are percent-encoded - escaped << std::uppercase; - escaped << '%' << std::setw(2) << int((unsigned char) c); - escaped << std::nouppercase; - } - - return escaped.str(); -} - static json _renderRule(ZT_VirtualNetworkRule &rule) { char tmp[128]; @@ -502,10 +476,6 @@ EmbeddedNetworkController::~EmbeddedNetworkController() t->join(); } -void EmbeddedNetworkController::setSSORedirectURL(const std::string &url) { - _ssoRedirectURL = url_encode(url); -} - void EmbeddedNetworkController::init(const Identity &signingId,Sender *sender) { char tmp[64]; @@ -718,10 +688,8 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST( DB::initMember(member); try { - if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"], false); - if (b.count("noAutoAssignIps")) member["noAutoAssignIps"] = OSUtils::jsonBool(b["noAutoAssignIps"], false); - if (b.count("authenticationExpiryTime")) member["authenticationExpiryTime"] = (uint64_t)OSUtils::jsonInt(b["authenticationExpiryTime"], 0ULL); - if (b.count("authenticationURL")) member["authenticationURL"] = OSUtils::jsonString(b["authenticationURL"], ""); + if (b.count("activeBridge")) member["activeBridge"] = OSUtils::jsonBool(b["activeBridge"],false); + if (b.count("noAutoAssignIps")) member["noAutoAssignIps"] = OSUtils::jsonBool(b["noAutoAssignIps"],false); if (b.count("remoteTraceTarget")) { const std::string rtt(OSUtils::jsonString(b["remoteTraceTarget"],"")); @@ -1280,7 +1248,7 @@ void EmbeddedNetworkController::_request( Utils::hex(nwid,nwids); _db.get(nwid,network,identity.address().toInt(),member,ns); if ((!network.is_object())||(network.empty())) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_OBJECT_NOT_FOUND, nullptr, 0); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_OBJECT_NOT_FOUND); return; } const bool newMember = ((!member.is_object())||(member.empty())); @@ -1294,11 +1262,11 @@ void EmbeddedNetworkController::_request( // known member. try { if (Identity(haveIdStr.c_str()) != identity) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED); return; } } catch ( ... ) { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED); return; } } else { @@ -1355,38 +1323,6 @@ void EmbeddedNetworkController::_request( member["lastAuthorizedCredential"] = autoAuthCredential; } - // Should we check SSO Stuff? - // If network is configured with SSO, and the member is not marked exempt: yes - // Otherwise no, we use standard auth logic. - bool networkSSOEnabled = OSUtils::jsonBool(network["ssoEnabled"], false); - bool memberSSOExempt = OSUtils::jsonBool(member["ssoExempt"], false); - std::string authenticationURL; - if (networkSSOEnabled && !memberSSOExempt) { - authenticationURL = _db.getSSOAuthURL(member, _ssoRedirectURL); - std::string memberId = member["id"]; - //fprintf(stderr, "ssoEnabled && !ssoExempt %s-%s\n", nwids, memberId.c_str()); - uint64_t authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0); - //fprintf(stderr, "authExpiryTime: %lld\n", authenticationExpiryTime); - if (authenticationExpiryTime < now) { - if (!authenticationURL.empty()) { - _db.networkMemberSSOHasExpired(nwid, now); - onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt()); - - Dictionary<3072> authInfo; - authInfo.add("aU", authenticationURL.c_str()); - //fprintf(stderr, "sending auth URL: %s\n", authenticationURL.c_str()); - - DB::cleanMember(member); - _db.save(member,true); - - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes()); - return; - } - } else if (authorized) { - _db.memberWillExpire(authenticationExpiryTime, nwid, identity.address().toInt()); - } - } - if (authorized) { // Update version info and meta-data if authorized and if this is a genuine request if (requestPacketId) { @@ -1411,18 +1347,17 @@ void EmbeddedNetworkController::_request( ms.lastRequestMetaData = metaData; ms.identity = identity; } - } + } } else { - // If they are not authorized, STOP! DB::cleanMember(member); _db.save(member,true); - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED, nullptr, 0); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_ACCESS_DENIED); return; } // ------------------------------------------------------------------------- - // If we made it this far, they are authorized (and authenticated). + // If we made it this far, they are authorized. // ------------------------------------------------------------------------- int64_t credentialtmd = ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MAX_MAX_DELTA; @@ -1451,11 +1386,7 @@ void EmbeddedNetworkController::_request( nc->mtu = std::max(std::min((unsigned int)OSUtils::jsonInt(network["mtu"],ZT_DEFAULT_MTU),(unsigned int)ZT_MAX_MTU),(unsigned int)ZT_MIN_MTU); nc->multicastLimit = (unsigned int)OSUtils::jsonInt(network["multicastLimit"],32ULL); - nc->ssoEnabled = OSUtils::jsonBool(network["ssoEnabled"], false); - nc->authenticationExpiryTime = OSUtils::jsonInt(member["authenticationExpiryTime"], 0LL); - if (!authenticationURL.empty()) - Utils::scopy(nc->authenticationURL, sizeof(nc->authenticationURL), authenticationURL.c_str()); - + std::string rtt(OSUtils::jsonString(member["remoteTraceTarget"],"")); if (rtt.length() == 10) { nc->remoteTraceTarget = Address(Utils::hexStrToU64(rtt.c_str())); @@ -1484,8 +1415,6 @@ void EmbeddedNetworkController::_request( json &memberTags = member["tags"]; json &dns = network["dns"]; - //fprintf(stderr, "IP Assignment Pools for Network %s: %s\n", nwids, OSUtils::jsonDump(ipAssignmentPools, 2).c_str()); - if (metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_RULES_ENGINE_REV,0) <= 0) { // Old versions with no rules engine support get an allow everything rule. // Since rules are enforced bidirectionally, newer versions *will* still @@ -1801,11 +1730,11 @@ void EmbeddedNetworkController::_request( nc->certificateOfOwnershipCount = 1; } - CertificateOfMembership com(now,credentialtmd,nwid,identity); + CertificateOfMembership com(now,credentialtmd,nwid,identity.address()); if (com.sign(_signingId)) { nc->com = com; } else { - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_INTERNAL_SERVER_ERROR, nullptr, 0); + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_INTERNAL_SERVER_ERROR); return; } @@ -1824,44 +1753,17 @@ void EmbeddedNetworkController::_startThreads() _threads.emplace_back([this]() { for(;;) { _RQEntry *qe = (_RQEntry *)0; - auto timedWaitResult = _queue.get(qe, 1000); - if (timedWaitResult == BlockingQueue<_RQEntry *>::STOP) { + if (!_queue.get(qe)) break; - } else if (timedWaitResult == BlockingQueue<_RQEntry *>::OK) { + try { if (qe) { - try { - _request(qe->nwid,qe->fromAddr,qe->requestPacketId,qe->identity,qe->metaData); - } catch (std::exception &e) { - fprintf(stderr,"ERROR: exception in controller request handling thread: %s" ZT_EOL_S,e.what()); - } catch ( ... ) { - fprintf(stderr,"ERROR: exception in controller request handling thread: unknown exception" ZT_EOL_S); - } + _request(qe->nwid,qe->fromAddr,qe->requestPacketId,qe->identity,qe->metaData); delete qe; } - } - - std::set< std::pair > soon; - std::set< std::pair > expired; - _db.membersExpiring(soon, expired); - - for(auto s=soon.begin();s!=soon.end();++s) { - Identity identity; - Dictionary lastMetaData; - { - std::unique_lock ll(_memberStatus_l); - auto ms = _memberStatus.find(_MemberStatusKey(s->first, s->second)); - if (ms != _memberStatus.end()) { - lastMetaData = ms->second.lastRequestMetaData; - identity = ms->second.identity; - } - } - if (identity) { - request(s->first,InetAddress(),0,identity,lastMetaData); - } - } - - for(auto e=expired.begin();e!=expired.end();++e) { - onNetworkMemberDeauthorize(nullptr, e->first, e->second); + } catch (std::exception &e) { + fprintf(stderr,"ERROR: exception in controller request handling thread: %s" ZT_EOL_S,e.what()); + } catch ( ... ) { + fprintf(stderr,"ERROR: exception in controller request handling thread: unknown exception" ZT_EOL_S); } } }); diff --git a/controller/EmbeddedNetworkController.hpp b/controller/EmbeddedNetworkController.hpp index fc18cbded..e499dd647 100644 --- a/controller/EmbeddedNetworkController.hpp +++ b/controller/EmbeddedNetworkController.hpp @@ -57,8 +57,6 @@ public: virtual void init(const Identity &signingId,Sender *sender); - void setSSORedirectURL(const std::string &url); - virtual void request( uint64_t nwid, const InetAddress &fromAddr, @@ -153,7 +151,6 @@ private: std::mutex _memberStatus_l; RedisConfig *_rc; - std::string _ssoRedirectURL; }; } // namespace ZeroTier diff --git a/controller/FileDB.cpp b/controller/FileDB.cpp index d454e93e1..bf573f3bf 100644 --- a/controller/FileDB.cpp +++ b/controller/FileDB.cpp @@ -140,7 +140,8 @@ void FileDB::eraseNetwork(const uint64_t networkId) void FileDB::eraseMember(const uint64_t networkId,const uint64_t memberId) { nlohmann::json network,member,nullJson; - get(networkId,network,memberId,member); + get(networkId,network); + get(memberId,member); char p[4096]; OSUtils::ztsnprintf(p,sizeof(p),"%s" ZT_PATH_SEPARATOR_S "%.16llx" ZT_PATH_SEPARATOR_S "member" ZT_PATH_SEPARATOR_S "%.10llx.json",_networksPath.c_str(),networkId,memberId); OSUtils::rm(p); diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 5f71a3699..a031c1ff0 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -16,7 +16,6 @@ #ifdef ZT_CONTROLLER_USE_LIBPQ #include "../node/Constants.hpp" -#include "../node/SHA512.hpp" #include "EmbeddedNetworkController.hpp" #include "../version.h" #include "Redis.hpp" @@ -24,20 +23,16 @@ #include #include #include -#include -// #define ZT_TRACE 1 - using json = nlohmann::json; namespace { -static const int DB_MINIMUM_VERSION = 20; +static const int DB_MINIMUM_VERSION = 5; static const char *_timestr() { - time_t t = time(0); char *ts = ctime(&t); char *p = ts; @@ -70,73 +65,16 @@ std::string join(const std::vector &elements, const char * const se } */ -std::vector split(std::string str, char delim){ - std::istringstream iss(str); - std::vector tokens; - std::string item; - while(std::getline(iss, item, delim)) { - tokens.push_back(item); - } - return tokens; -} - - } // anonymous namespace using namespace ZeroTier; - -MemberNotificationReceiver::MemberNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel) - : pqxx::notification_receiver(c, channel) - , _psql(p) -{ - fprintf(stderr, "initialize MemberNotificaitonReceiver\n"); -} - - -void MemberNotificationReceiver::operator() (const std::string &payload, int packend_pid) { - fprintf(stderr, "Member Notification received: %s\n", payload.c_str()); - json tmp(json::parse(payload)); - json &ov = tmp["old_val"]; - json &nv = tmp["new_val"]; - json oldConfig, newConfig; - if (ov.is_object()) oldConfig = ov; - if (nv.is_object()) newConfig = nv; - if (oldConfig.is_object() || newConfig.is_object()) { - _psql->_memberChanged(oldConfig,newConfig,(_psql->_ready>=2)); - fprintf(stderr, "payload sent\n"); - } -} - - -NetworkNotificationReceiver::NetworkNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel) - : pqxx::notification_receiver(c, channel) - , _psql(p) -{ - fprintf(stderr, "initialize NetworkNotificationReceiver\n"); -} - -void NetworkNotificationReceiver::operator() (const std::string &payload, int packend_pid) { - fprintf(stderr, "Network Notificaiton received: %s\n", payload.c_str()); - json tmp(json::parse(payload)); - json &ov = tmp["old_val"]; - json &nv = tmp["new_val"]; - json oldConfig, newConfig; - if (ov.is_object()) oldConfig = ov; - if (nv.is_object()) newConfig = nv; - if (oldConfig.is_object() || newConfig.is_object()) { - _psql->_networkChanged(oldConfig,newConfig,(_psql->_ready>=2)); - fprintf(stderr, "payload sent\n"); - } -} - using Attrs = std::vector>; using Item = std::pair; using ItemStream = std::vector; PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, RedisConfig *rc) : DB() - , _pool() , _myId(myId) , _myAddress(myId.address()) , _ready(0) @@ -150,35 +88,34 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R { char myAddress[64]; _myAddressStr = myId.address().toString(myAddress); - _connString = std::string(path); - auto f = std::make_shared(_connString); - _pool = std::make_shared >( - 15, 5, std::static_pointer_cast(f)); - - memset(_ssoPsk, 0, sizeof(_ssoPsk)); - char *const ssoPskHex = getenv("ZT_SSO_PSK"); -#ifdef ZT_TRACE - fprintf(stderr, "ZT_SSO_PSK: %s\n", ssoPskHex); -#endif - if (ssoPskHex) { - // SECURITY: note that ssoPskHex will always be null-terminated if libc acatually - // returns something non-NULL. If the hex encodes something shorter than 48 bytes, - // it will be padded at the end with zeroes. If longer, it'll be truncated. - Utils::unhex(ssoPskHex, _ssoPsk, sizeof(_ssoPsk)); + _connString = std::string(path) + " application_name=controller_" + _myAddressStr; + + // Database Schema Version Check + PGconn *conn = getPgConn(); + if (PQstatus(conn) != CONNECTION_OK) { + fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); + exit(1); } - auto c = _pool->borrow(); - pqxx::work txn{*c->c}; + PGresult *res = PQexec(conn, "SELECT version FROM ztc_database"); + if (PQresultStatus(res) != PGRES_TUPLES_OK) { + fprintf(stderr, "Error determining database version"); + exit(1); + } - pqxx::row r{txn.exec1("SELECT version FROM ztc_database")}; - int dbVersion = r[0].as(); - txn.commit(); + if (PQntuples(res) != 1) { + fprintf(stderr, "Invalid number of db version tuples returned."); + exit(1); + } + + int dbVersion = std::stoi(PQgetvalue(res, 0, 0)); if (dbVersion < DB_MINIMUM_VERSION) { fprintf(stderr, "Central database schema version too low. This controller version requires a minimum schema version of %d. Please upgrade your Central instance", DB_MINIMUM_VERSION); exit(1); } - _pool->unborrow(c); + PQclear(res); + res = NULL; if (_rc != NULL) { sw::redis::ConnectionOptions opts; @@ -202,8 +139,11 @@ PostgreSQL::PostgreSQL(const Identity &myId, const char *path, int listenPort, R fprintf(stderr, "[%s] NOTICE: %.10llx controller PostgreSQL waiting for initial data download..." ZT_EOL_S, ::_timestr(), (unsigned long long)_myAddress.toInt()); _waitNoticePrinted = true; - initializeNetworks(); - initializeMembers(); + initializeNetworks(conn); + initializeMembers(conn); + + PQfinish(conn); + conn = NULL; _heartbeatThread = std::thread(&PostgreSQL::heartbeat, this); _membersDbWatcher = std::thread(&PostgreSQL::membersDbWatcher, this); @@ -248,13 +188,10 @@ bool PostgreSQL::save(nlohmann::json &record,bool notifyListeners) { bool modified = false; try { - if (!record.is_object()) { - fprintf(stderr, "record is not an object?!?\n"); + if (!record.is_object()) return false; - } const std::string objtype = record["objtype"]; if (objtype == "network") { - //fprintf(stderr, "network save\n"); const uint64_t nwid = OSUtils::jsonIntHex(record["id"],0ULL); if (nwid) { nlohmann::json old; @@ -266,25 +203,17 @@ bool PostgreSQL::save(nlohmann::json &record,bool notifyListeners) } } } else if (objtype == "member") { - std::string networkId = record["nwid"]; - std::string memberId = record["id"]; const uint64_t nwid = OSUtils::jsonIntHex(record["nwid"],0ULL); const uint64_t id = OSUtils::jsonIntHex(record["id"],0ULL); - //fprintf(stderr, "member save %s-%s\n", networkId.c_str(), memberId.c_str()); if ((id)&&(nwid)) { nlohmann::json network,old; get(nwid,network,id,old); if ((!old.is_object())||(!_compareRecords(old,record))) { - //fprintf(stderr, "commit queue post\n"); record["revision"] = OSUtils::jsonInt(record["revision"],0ULL) + 1ULL; _commitQueue.post(std::pair(record,notifyListeners)); modified = true; - } else { - //fprintf(stderr, "no change\n"); } } - } else { - fprintf(stderr, "uhh waaat\n"); } } catch (std::exception &e) { fprintf(stderr, "Error on PostgreSQL::save: %s\n", e.what()); @@ -296,7 +225,6 @@ bool PostgreSQL::save(nlohmann::json &record,bool notifyListeners) void PostgreSQL::eraseNetwork(const uint64_t networkId) { - fprintf(stderr, "PostgreSQL::eraseNetwork\n"); char tmp2[24]; waitForReady(); Utils::hex(networkId, tmp2); @@ -311,7 +239,6 @@ void PostgreSQL::eraseNetwork(const uint64_t networkId) void PostgreSQL::eraseMember(const uint64_t networkId, const uint64_t memberId) { - fprintf(stderr, "PostgreSQL::eraseMember\n"); char tmp2[24]; waitForReady(); std::pair tmp, nw; @@ -336,219 +263,196 @@ void PostgreSQL::nodeIsOnline(const uint64_t networkId, const uint64_t memberId, } } -std::string PostgreSQL::getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) +void PostgreSQL::initializeNetworks(PGconn *conn) { - // NONCE is just a random character string. no semantic meaning - // state = HMAC SHA384 of Nonce based on shared sso key - // - // need nonce timeout in database? make sure it's used within X time - // X is 5 minutes for now. Make configurable later? - // - // how do we tell when a nonce is used? if auth_expiration_time is set - std::string networkId = member["nwid"]; - std::string memberId = member["id"]; - char authenticationURL[4096] = {0}; - - //fprintf(stderr, "PostgreSQL::updateMemberOnLoad: %s-%s\n", networkId.c_str(), memberId.c_str()); - bool have_auth = false; try { - auto c = _pool->borrow(); - pqxx::work w(*c->c); - - char nonceBytes[16] = {0}; - std::string nonce = ""; - - // check if the member exists first. - pqxx::row count = w.exec_params1("SELECT count(id) FROM ztc_member WHERE id = $1 AND network_id = $2 AND deleted = false", memberId, networkId); - if (count[0].as() == 1) { - // find an unused nonce, if one exists. - pqxx::result r = w.exec_params("SELECT nonce FROM ztc_sso_expiry " - "WHERE network_id = $1 AND member_id = $2 " - "AND authentication_expiry_time IS NULL AND ((NOW() AT TIME ZONE 'UTC') <= nonce_expiration)", - networkId, memberId); - - if (r.size() == 1) { - // we have an existing nonce. Use it - nonce = r.at(0)[0].as(); - Utils::unhex(nonce.c_str(), nonceBytes, sizeof(nonceBytes)); - } else if (r.empty()) { - // create a nonce - Utils::getSecureRandom(nonceBytes, 16); - char nonceBuf[64] = {0}; - Utils::hex(nonceBytes, sizeof(nonceBytes), nonceBuf); - nonce = std::string(nonceBuf); - - pqxx::result ir = w.exec_params0("INSERT INTO ztc_sso_expiry " - "(nonce, nonce_expiration, network_id, member_id) VALUES " - "($1, TO_TIMESTAMP($2::double precision/1000), $3, $4)", - nonce, OSUtils::now() + 300000, networkId, memberId); - - w.commit(); - } else { - // > 1 ?!? Thats an error! - fprintf(stderr, "> 1 unused nonce!\n"); - exit(6); - } - - r = w.exec_params("SELECT org.client_id, org.authorization_endpoint " - "FROM ztc_network AS nw, ztc_org AS org " - "WHERE nw.id = $1 AND nw.sso_enabled = true AND org.owner_id = nw.owner_id", networkId); - - std::string client_id = ""; - std::string authorization_endpoint = ""; - - if (r.size() == 1) { - client_id = r.at(0)[0].as(); - authorization_endpoint = r.at(0)[1].as(); - } else if (r.size() > 1) { - fprintf(stderr, "ERROR: More than one auth endpoint for an organization?!?!? NetworkID: %s\n", networkId.c_str()); - } else { - fprintf(stderr, "No client or auth endpoint?!?\n"); - } - - // no catch all else because we don't actually care if no records exist here. just continue as normal. - if ((!client_id.empty())&&(!authorization_endpoint.empty())) { - have_auth = true; - - uint8_t state[48]; - HMACSHA384(_ssoPsk, nonceBytes, sizeof(nonceBytes), state); - char state_hex[256]; - Utils::hex(state, 48, state_hex); - - OSUtils::ztsnprintf(authenticationURL, sizeof(authenticationURL), - "%s?response_type=id_token&response_mode=form_post&scope=openid+email+profile&redirect_uri=%s&nonce=%s&state=%s&client_id=%s", - authorization_endpoint.c_str(), - redirectURL.c_str(), - nonce.c_str(), - state_hex, - client_id.c_str()); - } else { - fprintf(stderr, "client_id: %s\nauthorization_endpoint: %s\n", client_id.c_str(), authorization_endpoint.c_str()); - } + if (PQstatus(conn) != CONNECTION_OK) { + fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); + exit(1); } - - _pool->unborrow(c); - } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error updating member on load: %s\n", e.what()); - } - - return std::string(authenticationURL); -} - -void PostgreSQL::initializeNetworks() -{ - try { - std::string setKey = "networks:{" + _myAddressStr + "}"; + std::string setKey = "networks:{" + _myAddressStr + "}"; + + // if (_rc != NULL) { + // try { + // if (_rc->clusterMode) { + // _cluster->del(setKey); + // } else { + // _redis->del(setKey); + // } + // } catch (sw::redis::Error &e) { + // // del can throw an error if the key doesn't exist + // // swallow it and move along + // } + // } + + std::unordered_set networkSet; + + const char *params[1] = { + _myAddressStr.c_str() + }; + fprintf(stderr, "Initializing Networks...\n"); - char qbuf[2048] = {0}; - sprintf(qbuf, "SELECT n.id, (EXTRACT(EPOCH FROM n.creation_time AT TIME ZONE 'UTC')*1000)::bigint as creation_time, n.capabilities, " - "n.enable_broadcast, (EXTRACT(EPOCH FROM n.last_modified AT TIME ZONE 'UTC')*1000)::bigint AS last_modified, n.mtu, n.multicast_limit, n.name, n.private, n.remote_trace_level, " - "n.remote_trace_target, n.revision, n.rules, n.tags, n.v4_assign_mode, n.v6_assign_mode, n.sso_enabled, (CASE WHEN n.sso_enabled THEN o.client_id ELSE NULL END) as client_id, " - "(CASE WHEN n.sso_enabled THEN o.authorization_endpoint ELSE NULL END) as authorization_endpoint, d.domain, d.servers, " - "ARRAY(SELECT CONCAT(host(ip_range_start),'|', host(ip_range_end)) FROM ztc_network_assignment_pool WHERE network_id = n.id) AS assignment_pool, " - "ARRAY(SELECT CONCAT(host(address),'/',bits::text,'|',COALESCE(host(via), 'NULL'))FROM ztc_network_route WHERE network_id = n.id) AS routes " - "FROM ztc_network n " - "LEFT OUTER JOIN ztc_org o " - " ON o.owner_id = n.owner_id " - "LEFT OUTER JOIN ztc_network_dns d " - " ON d.network_id = n.id " - "WHERE deleted = false AND controller_id = '%s'", _myAddressStr.c_str()); - auto c = _pool->borrow(); - auto c2 = _pool->borrow(); - pqxx::work w{*c->c}; - - auto stream = pqxx::stream_from::query(w, qbuf); + PGresult *res = PQexecParams(conn, "SELECT id, EXTRACT(EPOCH FROM creation_time AT TIME ZONE 'UTC')*1000, capabilities, " + "enable_broadcast, EXTRACT(EPOCH FROM last_modified AT TIME ZONE 'UTC')*1000, mtu, multicast_limit, name, private, remote_trace_level, " + "remote_trace_target, revision, rules, tags, v4_assign_mode, v6_assign_mode FROM ztc_network " + "WHERE deleted = false AND controller_id = $1", + 1, + NULL, + params, + NULL, + NULL, + 0); - std::tuple< - std::string // network ID - , std::optional // creationTime - , std::optional // capabilities - , std::optional // enableBroadcast - , std::optional // lastModified - , std::optional // mtu - , std::optional // multicastLimit - , std::optional // name - , bool // private - , std::optional // remoteTraceLevel - , std::optional // remoteTraceTarget - , std::optional // revision - , std::optional // rules - , std::optional // tags - , std::optional // v4AssignMode - , std::optional // v6AssignMode - , std::optional // ssoEnabled - , std::optional // clientId - , std::optional // authorizationEndpoint - , std::optional // domain - , std::optional // servers - , std::string // assignmentPoolString - , std::string // routeString - > row; - - uint64_t count = 0; - auto tmp = std::chrono::high_resolution_clock::now(); - uint64_t total = 0; - while (stream >> row) { - auto start = std::chrono::high_resolution_clock::now(); + if (PQresultStatus(res) != PGRES_TUPLES_OK) { + fprintf(stderr, "Networks Initialization Failed: %s", PQerrorMessage(conn)); + PQclear(res); + exit(1); + } + int numRows = PQntuples(res); + for (int i = 0; i < numRows; ++i) { json empty; json config; - initNetwork(config); - - std::string nwid = std::get<0>(row); - std::optional creationTime = std::get<1>(row); - std::optional capabilities = std::get<2>(row); - std::optional enableBroadcast = std::get<3>(row); - std::optional lastModified = std::get<4>(row); - std::optional mtu = std::get<5>(row); - std::optional multicastLimit = std::get<6>(row); - std::optional name = std::get<7>(row); - bool isPrivate = std::get<8>(row); - std::optional remoteTraceLevel = std::get<9>(row); - std::optional remoteTraceTarget = std::get<10>(row); - std::optional revision = std::get<11>(row); - std::optional rules = std::get<12>(row); - std::optional tags = std::get<13>(row); - std::optional v4AssignMode = std::get<14>(row); - std::optional v6AssignMode = std::get<15>(row); - std::optional ssoEnabled = std::get<16>(row); - std::optional clientId = std::get<17>(row); - std::optional authorizationEndpoint = std::get<18>(row); - std::optional dnsDomain = std::get<19>(row); - std::optional dnsServers = std::get<20>(row); - std::string assignmentPoolString = std::get<21>(row); - std::string routesString = std::get<22>(row); + const char *nwidparam[1] = { + PQgetvalue(res, i, 0) + }; + std::string nwid = PQgetvalue(res, i, 0); - config["id"] = nwid; - config["nwid"] = nwid; - config["creationTime"] = creationTime.value_or(0); - config["capabilities"] = json::parse(capabilities.value_or("[]")); - config["enableBroadcast"] = enableBroadcast.value_or(false); - config["lastModified"] = lastModified.value_or(0); - config["mtu"] = mtu.value_or(2800); - config["multicastLimit"] = multicastLimit.value_or(64); - config["name"] = name.value_or(""); - config["private"] = isPrivate; - config["remoteTraceLevel"] = remoteTraceLevel.value_or(0); - config["remoteTraceTarget"] = remoteTraceTarget.value_or(""); - config["revision"] = revision.value_or(0); - config["rules"] = json::parse(rules.value_or("[]")); - config["tags"] = json::parse(tags.value_or("[]")); - config["v4AssignMode"] = json::parse(v4AssignMode.value_or("{}")); - config["v6AssignMode"] = json::parse(v6AssignMode.value_or("{}")); - config["ssoEnabled"] = ssoEnabled.value_or(false); - config["objtype"] = "network"; - config["ipAssignmentPools"] = json::array(); - config["routes"] = json::array(); - config["clientId"] = clientId.value_or(""); - config["authorizationEndpoint"] = authorizationEndpoint.value_or(""); + networkSet.insert(nwid); - if (dnsDomain.has_value()) { - std::string serverList = dnsServers.value(); + config["id"] = nwid; + config["nwid"] = nwid; + try { + config["creationTime"] = std::stoull(PQgetvalue(res, i, 1)); + } catch (std::exception &e) { + config["creationTime"] = 0ULL; + //fprintf(stderr, "Error converting creation time: %s\n", PQgetvalue(res, i, 1)); + } + config["capabilities"] = json::parse(PQgetvalue(res, i, 2)); + config["enableBroadcast"] = (strcmp(PQgetvalue(res, i, 3),"t")==0); + try { + config["lastModified"] = std::stoull(PQgetvalue(res, i, 4)); + } catch (std::exception &e) { + config["lastModified"] = 0ULL; + //fprintf(stderr, "Error converting last modified: %s\n", PQgetvalue(res, i, 4)); + } + try { + config["mtu"] = std::stoi(PQgetvalue(res, i, 5)); + } catch (std::exception &e) { + config["mtu"] = 2800; + } + try { + config["multicastLimit"] = std::stoi(PQgetvalue(res, i, 6)); + } catch (std::exception &e) { + config["multicastLimit"] = 64; + } + config["name"] = PQgetvalue(res, i, 7); + config["private"] = (strcmp(PQgetvalue(res, i, 8),"t")==0); + try { + config["remoteTraceLevel"] = std::stoi(PQgetvalue(res, i, 9)); + } catch (std::exception &e) { + config["remoteTraceLevel"] = 0; + } + config["remoteTraceTarget"] = PQgetvalue(res, i, 10); + try { + config["revision"] = std::stoull(PQgetvalue(res, i, 11)); + } catch (std::exception &e) { + config["revision"] = 0ULL; + //fprintf(stderr, "Error converting revision: %s\n", PQgetvalue(res, i, 11)); + } + config["rules"] = json::parse(PQgetvalue(res, i, 12)); + config["tags"] = json::parse(PQgetvalue(res, i, 13)); + config["v4AssignMode"] = json::parse(PQgetvalue(res, i, 14)); + config["v6AssignMode"] = json::parse(PQgetvalue(res, i, 15)); + config["objtype"] = "network"; + config["ipAssignmentPools"] = json::array(); + config["routes"] = json::array(); + + PGresult *r2 = PQexecParams(conn, + "SELECT host(ip_range_start), host(ip_range_end) FROM ztc_network_assignment_pool WHERE network_id = $1", + 1, + NULL, + nwidparam, + NULL, + NULL, + 0); + + if (PQresultStatus(r2) != PGRES_TUPLES_OK) { + fprintf(stderr, "ERROR: Error retreiving IP pools for network: %s\n", PQresultErrorMessage(r2)); + PQclear(r2); + PQclear(res); + exit(1); + } + + int n = PQntuples(r2); + for (int j = 0; j < n; ++j) { + json ip; + ip["ipRangeStart"] = PQgetvalue(r2, j, 0); + ip["ipRangeEnd"] = PQgetvalue(r2, j, 1); + + config["ipAssignmentPools"].push_back(ip); + } + + PQclear(r2); + + r2 = PQexecParams(conn, + "SELECT host(address), bits, host(via) FROM ztc_network_route WHERE network_id = $1", + 1, + NULL, + nwidparam, + NULL, + NULL, + 0); + + if (PQresultStatus(r2) != PGRES_TUPLES_OK) { + fprintf(stderr, "ERROR: Error retreiving routes for network: %s\n", PQresultErrorMessage(r2)); + PQclear(r2); + PQclear(res); + exit(1); + } + + n = PQntuples(r2); + for (int j = 0; j < n; ++j) { + std::string addr = PQgetvalue(r2, j, 0); + std::string bits = PQgetvalue(r2, j, 1); + std::string via = PQgetvalue(r2, j, 2); + json route; + route["target"] = addr + "/" + bits; + + if (via == "NULL") { + route["via"] = nullptr; + } else { + route["via"] = via; + } + config["routes"].push_back(route); + } + + r2 = PQexecParams(conn, + "SELECT domain, servers FROM ztc_network_dns WHERE network_id = $1", + 1, + NULL, + nwidparam, + NULL, + NULL, + 0); + + if (PQresultStatus(r2) != PGRES_TUPLES_OK) { + fprintf(stderr, "ERROR: Error retrieving DNS settings for network: %s\n", PQresultErrorMessage(r2)); + PQclear(r2); + PQclear(res); + exit(1); + } + + n = PQntuples(r2); + if (n > 1) { + fprintf(stderr, "ERROR: invalid number of DNS configurations for network %s. Must be 0 or 1\n", nwid.c_str()); + } else if (n == 1) { json obj; + std::string domain = PQgetvalue(r2, 0, 0); + std::string serverList = PQgetvalue(r2, 0, 1); auto servers = json::array(); if (serverList.rfind("{",0) != std::string::npos) { serverList = serverList.substr(1, serverList.size()-2); @@ -559,56 +463,29 @@ void PostgreSQL::initializeNetworks() servers.push_back(server); } } - obj["domain"] = dnsDomain.value(); + obj["domain"] = domain; obj["servers"] = servers; config["dns"] = obj; } - config["ipAssignmentPools"] = json::array(); - if (assignmentPoolString != "{}") { - std::string tmp = assignmentPoolString.substr(1, assignmentPoolString.size()-2); - std::vector assignmentPools = split(tmp, ','); - for (auto it = assignmentPools.begin(); it != assignmentPools.end(); ++it) { - std::vector r = split(*it, '|'); - json ip; - ip["ipRangeStart"] = r[0]; - ip["ipRangeEnd"] = r[1]; - config["ipAssignmentPools"].push_back(ip); - } - } + PQclear(r2); - config["routes"] = json::array(); - if (routesString != "{}") { - std::string tmp = routesString.substr(1, routesString.size()-2); - std::vector routes = split(tmp, ','); - for (auto it = routes.begin(); it != routes.end(); ++it) { - std::vector r = split(*it, '|'); - json route; - route["target"] = r[0]; - route["via"] = ((route["via"] == "NULL")? nullptr : r[1]); - config["routes"].push_back(route); - } - } - - _networkChanged(empty, config, false); - - auto end = std::chrono::high_resolution_clock::now(); - auto dur = std::chrono::duration_cast(end - start);; - total += dur.count(); - ++count; - if (count > 0 && count % 10000 == 0) { - fprintf(stderr, "Averaging %llu us per network\n", (total/count)); - } + _networkChanged(empty, config, false); } - if (count > 0) { - fprintf(stderr, "Took %llu us per network to load\n", (total/count)); - } - stream.complete(); + PQclear(res); - w.commit(); - _pool->unborrow(c2); - _pool->unborrow(c); + // if(!networkSet.empty()) { + // if (_rc && _rc->clusterMode) { + // auto tx = _cluster->transaction(_myAddressStr, true); + // tx.sadd(setKey, networkSet.begin(), networkSet.end()); + // tx.exec(); + // } else if (_rc && !_rc->clusterMode) { + // auto tx = _redis->transaction(true); + // tx.sadd(setKey, networkSet.begin(), networkSet.end()); + // tx.exec(); + // } + // } if (++this->_ready == 2) { if (_waitNoticePrinted) { @@ -625,147 +502,206 @@ void PostgreSQL::initializeNetworks() } } -void PostgreSQL::initializeMembers() +void PostgreSQL::initializeMembers(PGconn *conn) { - std::string memberId; - std::string networkId; try { - std::unordered_map networkMembers; - fprintf(stderr, "Initializing Members...\n"); + if (PQstatus(conn) != CONNECTION_OK) { + fprintf(stderr, "Bad Database Connection: %s", PQerrorMessage(conn)); + exit(1); + } + // std::string setKeyBase = "network-nodes-all:{" + _myAddressStr + "}:"; + + // if (_rc != NULL) { + // std::lock_guard l(_networks_l); + // std::unordered_set deletes; + // for ( auto it : _networks) { + // uint64_t nwid_i = it.first; + // char nwidTmp[64] = {0}; + // OSUtils::ztsnprintf(nwidTmp, sizeof(nwidTmp), "%.16llx", nwid_i); + // std::string nwid(nwidTmp); + // std::string key = setKeyBase + nwid; + // deletes.insert(key); + // } - char qbuf[2048]; - sprintf(qbuf, "SELECT m.id, m.network_id, m.active_bridge, m.authorized, m.capabilities, (EXTRACT(EPOCH FROM m.creation_time AT TIME ZONE 'UTC')*1000)::bigint, m.identity, " - " (EXTRACT(EPOCH FROM m.last_authorized_time AT TIME ZONE 'UTC')*1000)::bigint, " - " (EXTRACT(EPOCH FROM m.last_deauthorized_time AT TIME ZONE 'UTC')*1000)::bigint, " + // if (!deletes.empty()) { + // if (_rc->clusterMode) { + // auto tx = _cluster->transaction(_myAddressStr, true); + // for (std::string k : deletes) { + // tx.del(k); + // } + // tx.exec(); + // } else { + // auto tx = _redis->transaction(true); + // for (std::string k : deletes) { + // tx.del(k); + // } + // tx.exec(); + // } + // } + // } + + const char *params[1] = { + _myAddressStr.c_str() + }; + + std::unordered_map networkMembers; + + fprintf(stderr, "Initializing Members...\n"); + PGresult *res = PQexecParams(conn, + "SELECT m.id, m.network_id, m.active_bridge, m.authorized, m.capabilities, EXTRACT(EPOCH FROM m.creation_time AT TIME ZONE 'UTC')*1000, m.identity, " + " EXTRACT(EPOCH FROM m.last_authorized_time AT TIME ZONE 'UTC')*1000, " + " EXTRACT(EPOCH FROM m.last_deauthorized_time AT TIME ZONE 'UTC')*1000, " " m.remote_trace_level, m.remote_trace_target, m.tags, m.v_major, m.v_minor, m.v_rev, m.v_proto, " - " m.no_auto_assign_ips, m.revision, sso_exempt, " - " (SELECT (EXTRACT(EPOCH FROM e.authentication_expiry_time)*1000)::bigint " - " FROM ztc_sso_expiry e " - " INNER JOIN ztc_network n1 " - " ON n.id = e.network_id " - " WHERE e.network_id = m.network_id AND e.member_id = m.id AND n.sso_enabled = TRUE AND e.authentication_expiry_time IS NOT NULL " - " ORDER BY e.authentication_expiry_time DESC LIMIT 1) AS authentication_expiry_time, " - " ARRAY(SELECT DISTINCT address FROM ztc_member_ip_assignment WHERE member_id = m.id AND network_id = m.network_id) AS assigned_addresses " + " m.no_auto_assign_ips, m.revision " "FROM ztc_member m " "INNER JOIN ztc_network n " " ON n.id = m.network_id " - "WHERE n.controller_id = '%s' AND m.deleted = false", _myAddressStr.c_str()); - auto c = _pool->borrow(); - auto c2 = _pool->borrow(); - pqxx::work w{*c->c}; - - auto stream = pqxx::stream_from::query(w, qbuf); + "WHERE n.controller_id = $1 AND m.deleted = false", + 1, + NULL, + params, + NULL, + NULL, + 0); - std::tuple< - std::string // memberId - , std::string // memberId - , std::optional // activeBridge - , std::optional // authorized - , std::optional // capabilities - , std::optional // creationTime - , std::optional // identity - , std::optional // lastAuthorizedTime - , std::optional // lastDeauthorizedTime - , std::optional // remoteTraceLevel - , std::optional // remoteTraceTarget - , std::optional // tags - , std::optional // vMajor - , std::optional // vMinor - , std::optional // vRev - , std::optional // vProto - , std::optional // noAutoAssignIps - , std::optional // revision - , std::optional // ssoExempt - , std::optional // authenticationExpiryTime - , std::string // assignedAddresses - > row; + if (PQresultStatus(res) != PGRES_TUPLES_OK) { + fprintf(stderr, "Member Initialization Failed: %s", PQerrorMessage(conn)); + PQclear(res); + exit(1); + } - uint64_t count = 0; - auto tmp = std::chrono::high_resolution_clock::now(); - uint64_t total = 0; - while (stream >> row) { - auto start = std::chrono::high_resolution_clock::now(); + int numRows = PQntuples(res); + for (int i = 0; i < numRows; ++i) { json empty; json config; - - initMember(config); - memberId = std::get<0>(row); - networkId = std::get<1>(row); - std::optional activeBridge = std::get<2>(row); - std::optional authorized = std::get<3>(row); - std::optional capabilities = std::get<4>(row); - std::optional creationTime = std::get<5>(row); - std::optional identity = std::get<6>(row); - std::optional lastAuthorizedTime = std::get<7>(row); - std::optional lastDeauthorizedTime = std::get<8>(row); - std::optional remoteTraceLevel = std::get<9>(row); - std::optional remoteTraceTarget = std::get<10>(row); - std::optional tags = std::get<11>(row); - std::optional vMajor = std::get<12>(row); - std::optional vMinor = std::get<13>(row); - std::optional vRev = std::get<14>(row); - std::optional vProto = std::get<15>(row); - std::optional noAutoAssignIps = std::get<16>(row); - std::optional revision = std::get<17>(row); - std::optional ssoExempt = std::get<18>(row); - std::optional authenticationExpiryTime = std::get<19>(row); - std::string assignedAddresses = std::get<20>(row); + std::string memberId(PQgetvalue(res, i, 0)); + std::string networkId(PQgetvalue(res, i, 1)); + // networkMembers.insert(std::pair(setKeyBase+networkId, memberId)); + + std::string ctime = PQgetvalue(res, i, 5); config["id"] = memberId; config["nwid"] = networkId; - config["activeBridge"] = activeBridge.value_or(false); - config["authorized"] = authorized.value_or(false); - config["capabilities"] = json::parse(capabilities.value_or("[]")); - config["creationTime"] = creationTime.value_or(0); - config["identity"] = identity.value_or(""); - config["lastAuthorizedTime"] = lastAuthorizedTime.value_or(0); - config["lastDeauthorizedTime"] = lastDeauthorizedTime.value_or(0); - config["remoteTraceLevel"] = remoteTraceLevel.value_or(0); - config["remoteTraceTarget"] = remoteTraceTarget.value_or(""); - config["tags"] = json::parse(tags.value_or("[]")); - config["vMajor"] = vMajor.value_or(-1); - config["vMinor"] = vMinor.value_or(-1); - config["vRev"] = vRev.value_or(-1); - config["vProto"] = vProto.value_or(-1); - config["noAutoAssignIps"] = noAutoAssignIps.value_or(false); - config["revision"] = revision.value_or(0); - config["ssoExempt"] = ssoExempt.value_or(false); - config["authenticationExpiryTime"] = authenticationExpiryTime.value_or(0); + config["activeBridge"] = (strcmp(PQgetvalue(res, i, 2), "t") == 0); + config["authorized"] = (strcmp(PQgetvalue(res, i, 3), "t") == 0); + try { + config["capabilities"] = json::parse(PQgetvalue(res, i, 4)); + } catch (std::exception &e) { + config["capabilities"] = json::array(); + } + try { + config["creationTime"] = std::stoull(PQgetvalue(res, i, 5)); + } catch (std::exception &e) { + config["creationTime"] = 0ULL; + //fprintf(stderr, "Error upding creation time (member): %s\n", PQgetvalue(res, i, 5)); + } + config["identity"] = PQgetvalue(res, i, 6); + try { + config["lastAuthorizedTime"] = std::stoull(PQgetvalue(res, i, 7)); + } catch(std::exception &e) { + config["lastAuthorizedTime"] = 0ULL; + //fprintf(stderr, "Error updating last auth time (member): %s\n", PQgetvalue(res, i, 7)); + } + try { + config["lastDeauthorizedTime"] = std::stoull(PQgetvalue(res, i, 8)); + } catch( std::exception &e) { + config["lastDeauthorizedTime"] = 0ULL; + //fprintf(stderr, "Error updating last deauth time (member): %s\n", PQgetvalue(res, i, 8)); + } + try { + config["remoteTraceLevel"] = std::stoi(PQgetvalue(res, i, 9)); + } catch (std::exception &e) { + config["remoteTraceLevel"] = 0; + } + config["remoteTraceTarget"] = PQgetvalue(res, i, 10); + try { + config["tags"] = json::parse(PQgetvalue(res, i, 11)); + } catch (std::exception &e) { + config["tags"] = json::array(); + } + try { + config["vMajor"] = std::stoi(PQgetvalue(res, i, 12)); + } catch(std::exception &e) { + config["vMajor"] = -1; + } + try { + config["vMinor"] = std::stoi(PQgetvalue(res, i, 13)); + } catch (std::exception &e) { + config["vMinor"] = -1; + } + try { + config["vRev"] = std::stoi(PQgetvalue(res, i, 14)); + } catch (std::exception &e) { + config["vRev"] = -1; + } + try { + config["vProto"] = std::stoi(PQgetvalue(res, i, 15)); + } catch (std::exception &e) { + config["vProto"] = -1; + } + config["noAutoAssignIps"] = (strcmp(PQgetvalue(res, i, 16), "t") == 0); + try { + config["revision"] = std::stoull(PQgetvalue(res, i, 17)); + } catch (std::exception &e) { + config["revision"] = 0ULL; + //fprintf(stderr, "Error updating revision (member): %s\n", PQgetvalue(res, i, 17)); + } config["objtype"] = "member"; config["ipAssignments"] = json::array(); + const char *p2[2] = { + memberId.c_str(), + networkId.c_str() + }; - if (assignedAddresses != "{}") { - std::string tmp = assignedAddresses.substr(1, assignedAddresses.size()-2); - std::vector addrs = split(tmp, ','); - for (auto it = addrs.begin(); it != addrs.end(); ++it) { - config["ipAssignments"].push_back(*it); + PGresult *r2 = PQexecParams(conn, + "SELECT DISTINCT address FROM ztc_member_ip_assignment WHERE member_id = $1 AND network_id = $2", + 2, + NULL, + p2, + NULL, + NULL, + 0); + + if (PQresultStatus(r2) != PGRES_TUPLES_OK) { + fprintf(stderr, "Member Initialization Failed: %s", PQerrorMessage(conn)); + PQclear(r2); + PQclear(res); + exit(1); + } + + int n = PQntuples(r2); + for (int j = 0; j < n; ++j) { + std::string ipaddr = PQgetvalue(r2, j, 0); + std::size_t pos = ipaddr.find('/'); + if (pos != std::string::npos) { + ipaddr = ipaddr.substr(0, pos); } + config["ipAssignments"].push_back(ipaddr); } _memberChanged(empty, config, false); - - memberId = ""; - networkId = ""; - - auto end = std::chrono::high_resolution_clock::now(); - auto dur = std::chrono::duration_cast(end - start);; - total += dur.count(); - ++count; - if (count > 0 && count % 10000 == 0) { - fprintf(stderr, "Averaging %llu us per member\n", (total/count)); - } - } - if (count > 0) { - fprintf(stderr, "Took %llu us per member to load\n", (total/count)); } - stream.complete(); - - w.commit(); - _pool->unborrow(c2); - _pool->unborrow(c); + PQclear(res); + // if (!networkMembers.empty()) { + // if (_rc != NULL) { + // if (_rc->clusterMode) { + // auto tx = _cluster->transaction(_myAddressStr, true); + // for (auto it : networkMembers) { + // tx.sadd(it.first, it.second); + // } + // tx.exec(); + // } else { + // auto tx = _redis->transaction(true); + // for (auto it : networkMembers) { + // tx.sadd(it.first, it.second); + // } + // tx.exec(); + // } + // } + // } if (++this->_ready == 2) { if (_waitNoticePrinted) { fprintf(stderr,"[%s] NOTICE: %.10llx controller PostgreSQL data download complete." ZT_EOL_S,_timestr(),(unsigned long long)_myAddress.toInt()); @@ -775,7 +711,7 @@ void PostgreSQL::initializeMembers() } catch (sw::redis::Error &e) { fprintf(stderr, "ERROR: Error initializing members (redis): %s\n", e.what()); } catch (std::exception &e) { - fprintf(stderr, "ERROR: Error initializing member: %s-%s %s\n", networkId.c_str(), memberId.c_str(), e.what()); + fprintf(stderr, "ERROR: Error initializing members: %s\n", e.what()); exit(-1); } } @@ -799,52 +735,92 @@ void PostgreSQL::heartbeat() const char *publicIdentity = publicId; const char *hostname = hostnameTmp; + PGconn *conn = getPgConn(); + if (PQstatus(conn) == CONNECTION_BAD) { + fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); + PQfinish(conn); + exit(1); + } while (_run == 1) { - // fprintf(stderr, "%s: heartbeat\n", controllerId); - auto c = _pool->borrow(); + if(PQstatus(conn) != CONNECTION_OK) { + fprintf(stderr, "%s heartbeat thread lost connection to Database\n", _myAddressStr.c_str()); + PQfinish(conn); + exit(6); + } int64_t ts = OSUtils::now(); - - if(c->c) { - pqxx::work w{*c->c}; - + if (conn) { std::string major = std::to_string(ZEROTIER_ONE_VERSION_MAJOR); std::string minor = std::to_string(ZEROTIER_ONE_VERSION_MINOR); std::string rev = std::to_string(ZEROTIER_ONE_VERSION_REVISION); std::string build = std::to_string(ZEROTIER_ONE_VERSION_BUILD); std::string now = std::to_string(ts); std::string host_port = std::to_string(_listenPort); - std::string use_redis = (_rc != NULL) ? "true" : "false"; - - try { - pqxx::result res = w.exec0("INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis) " - "VALUES ("+w.quote(controllerId)+", "+w.quote(hostname)+", TO_TIMESTAMP("+now+"::double precision/1000), "+ - w.quote(publicIdentity)+", "+major+", "+minor+", "+rev+", "+build+", "+host_port+", "+use_redis+") " + std::string use_redis = "false"; // (_rc != NULL) ? "true" : "false"; + const char *values[10] = { + controllerId, + hostname, + now.c_str(), + publicIdentity, + major.c_str(), + minor.c_str(), + rev.c_str(), + build.c_str(), + host_port.c_str(), + use_redis.c_str() + }; + + PGresult *res = PQexecParams(conn, + "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis) " + "VALUES ($1, $2, TO_TIMESTAMP($3::double precision/1000), $4, $5, $6, $7, $8, $9, $10) " "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " "v_rev = EXCLUDED.v_rev, v_build = EXCLUDED.v_rev, host_port = EXCLUDED.host_port, " - "use_redis = EXCLUDED.use_redis"); - } catch (std::exception &e) { - fprintf(stderr, "Heartbeat update failed: %s\n", e.what()); - w.abort(); - _pool->unborrow(c); - std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - continue; - } - w.commit(); + "use_redis = EXCLUDED.use_redis", + 10, // number of parameters + NULL, // oid field. ignore + values, // values for substitution + NULL, // lengths in bytes of each value + NULL, // binary? + 0); + + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "Heartbeat Update Failed: %s\n", PQresultErrorMessage(res)); + } + PQclear(res); } - _pool->unborrow(c); + // if (_rc != NULL) { + // if (_rc->clusterMode) { + // _cluster->zadd("controllers", controllerId, ts); + // } else { + // _redis->zadd("controllers", controllerId, ts); + // } + // } std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } + + PQfinish(conn); + conn = NULL; fprintf(stderr, "Exited heartbeat thread\n"); } void PostgreSQL::membersDbWatcher() { + PGconn *conn = getPgConn(NO_OVERRIDE); + if (PQstatus(conn) == CONNECTION_BAD) { + fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); + PQfinish(conn); + exit(1); + } + if (_rc) { + PQfinish(conn); + conn = NULL; _membersWatcher_Redis(); } else { - _membersWatcher_Postgres(); + _membersWatcher_Postgres(conn); + PQfinish(conn); + conn = NULL; } if (_run == 1) { @@ -854,19 +830,46 @@ void PostgreSQL::membersDbWatcher() fprintf(stderr, "Exited membersDbWatcher\n"); } -void PostgreSQL::_membersWatcher_Postgres() { - auto c = _pool->borrow(); - - std::string stream = "member_" + _myAddressStr; - - fprintf(stderr, "Listening to member stream: %s\n", stream.c_str()); - MemberNotificationReceiver m(this, *c->c, stream); - - while(_run == 1) { - c->c->await_notification(5, 0); +void PostgreSQL::_membersWatcher_Postgres(PGconn *conn) { + char buf[11] = {0}; + std::string cmd = "LISTEN member_" + std::string(_myAddress.toString(buf)); + fprintf(stderr, "Listening to member stream: %s\n", cmd.c_str()); + PGresult *res = PQexec(conn, cmd.c_str()); + if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "LISTEN command failed: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQfinish(conn); + exit(1); } - _pool->unborrow(c); + PQclear(res); res = NULL; + + while(_run == 1) { + if (PQstatus(conn) != CONNECTION_OK) { + fprintf(stderr, "ERROR: Member Watcher lost connection to Postgres."); + exit(-1); + } + PGnotify *notify = NULL; + PQconsumeInput(conn); + while ((notify = PQnotifies(conn)) != NULL) { + //fprintf(stderr, "ASYNC NOTIFY of '%s' id:%s received\n", notify->relname, notify->extra); + + try { + json tmp(json::parse(notify->extra)); + json &ov = tmp["old_val"]; + json &nv = tmp["new_val"]; + json oldConfig, newConfig; + if (ov.is_object()) oldConfig = ov; + if (nv.is_object()) newConfig = nv; + if (oldConfig.is_object() || newConfig.is_object()) { + _memberChanged(oldConfig,newConfig,(this->_ready>=2)); + } + } catch (...) {} // ignore bad records + + free(notify); + } + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } } void PostgreSQL::_membersWatcher_Redis() { @@ -929,10 +932,21 @@ void PostgreSQL::_membersWatcher_Redis() { void PostgreSQL::networksDbWatcher() { + PGconn *conn = getPgConn(NO_OVERRIDE); + if (PQstatus(conn) == CONNECTION_BAD) { + fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); + PQfinish(conn); + exit(1); + } + if (_rc) { + PQfinish(conn); + conn = NULL; _networksWatcher_Redis(); } else { - _networksWatcher_Postgres(); + _networksWatcher_Postgres(conn); + PQfinish(conn); + conn = NULL; } if (_run == 1) { @@ -942,17 +956,42 @@ void PostgreSQL::networksDbWatcher() fprintf(stderr, "Exited networksDbWatcher\n"); } -void PostgreSQL::_networksWatcher_Postgres() { - std::string stream = "network_" + _myAddressStr; +void PostgreSQL::_networksWatcher_Postgres(PGconn *conn) { + char buf[11] = {0}; + std::string cmd = "LISTEN network_" + std::string(_myAddress.toString(buf)); + PGresult *res = PQexec(conn, cmd.c_str()); + if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "LISTEN command failed: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQfinish(conn); + exit(1); + } - fprintf(stderr, "Listening to member stream: %s\n", stream.c_str()); - - auto c = _pool->borrow(); - - NetworkNotificationReceiver n(this, *c->c, stream); + PQclear(res); res = NULL; while(_run == 1) { - c->c->await_notification(5,0); + if (PQstatus(conn) != CONNECTION_OK) { + fprintf(stderr, "ERROR: Network Watcher lost connection to Postgres."); + exit(-1); + } + PGnotify *notify = NULL; + PQconsumeInput(conn); + while ((notify = PQnotifies(conn)) != NULL) { + //fprintf(stderr, "ASYNC NOTIFY of '%s' id:%s received\n", notify->relname, notify->extra); + try { + json tmp(json::parse(notify->extra)); + json &ov = tmp["old_val"]; + json &nv = tmp["new_val"]; + json oldConfig, newConfig; + if (ov.is_object()) oldConfig = ov; + if (nv.is_object()) newConfig = nv; + if (oldConfig.is_object()||newConfig.is_object()) { + _networkChanged(oldConfig,newConfig,(this->_ready >= 2)); + } + } catch (...) {} // ignore bad records + free(notify); + } + std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } @@ -1017,33 +1056,78 @@ void PostgreSQL::_networksWatcher_Redis() { void PostgreSQL::commitThread() { - fprintf(stderr, "%s: commitThread start\n", _myAddressStr.c_str()); + PGconn *conn = getPgConn(); + if (PQstatus(conn) == CONNECTION_BAD) { + fprintf(stderr, "ERROR: Connection to database failed: %s\n", PQerrorMessage(conn)); + PQfinish(conn); + exit(1); + } + std::pair qitem; while(_commitQueue.get(qitem)&(_run == 1)) { - //fprintf(stderr, "commitThread tick\n"); if (!qitem.first.is_object()) { - fprintf(stderr, "not an object\n"); continue; } - + if (PQstatus(conn) == CONNECTION_BAD) { + fprintf(stderr, "ERROR: Connection to database failed: %s\n", PQerrorMessage(conn)); + PQfinish(conn); + exit(1); + } try { nlohmann::json *config = &(qitem.first); const std::string objtype = (*config)["objtype"]; if (objtype == "member") { - // fprintf(stderr, "%s: commitThread: member\n", _myAddressStr.c_str()); try { - auto c = _pool->borrow(); - pqxx::work w(*c->c); - std::string memberId = (*config)["id"]; std::string networkId = (*config)["nwid"]; + std::string identity = (*config)["identity"]; std::string target = "NULL"; + if (!(*config)["remoteTraceTarget"].is_null()) { target = (*config)["remoteTraceTarget"]; } - - pqxx::result res = w.exec_params0( + std::string caps = OSUtils::jsonDump((*config)["capabilities"], -1); + std::string lastAuthTime = std::to_string((long long)(*config)["lastAuthorizedTime"]); + std::string lastDeauthTime = std::to_string((long long)(*config)["lastDeauthorizedTime"]); + std::string rtraceLevel = std::to_string((int)(*config)["remoteTraceLevel"]); + std::string rev = std::to_string((unsigned long long)(*config)["revision"]); + std::string tags = OSUtils::jsonDump((*config)["tags"], -1); + std::string vmajor = std::to_string((int)(*config)["vMajor"]); + std::string vminor = std::to_string((int)(*config)["vMinor"]); + std::string vrev = std::to_string((int)(*config)["vRev"]); + std::string vproto = std::to_string((int)(*config)["vProto"]); + const char *values[19] = { + memberId.c_str(), + networkId.c_str(), + ((*config)["activeBridge"] ? "true" : "false"), + ((*config)["authorized"] ? "true" : "false"), + caps.c_str(), + identity.c_str(), + lastAuthTime.c_str(), + lastDeauthTime.c_str(), + ((*config)["noAutoAssignIps"] ? "true" : "false"), + rtraceLevel.c_str(), + (target == "NULL") ? NULL : target.c_str(), + rev.c_str(), + tags.c_str(), + vmajor.c_str(), + vminor.c_str(), + vrev.c_str(), + vproto.c_str() + }; + + PGresult *res = PQexec(conn, "BEGIN"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error beginning update transaction: %s\n", PQresultErrorMessage(res)); + PQclear(res); + delete config; + config = nullptr; + continue; + } + + + res = PQexecParams(conn, "INSERT INTO ztc_member (id, network_id, active_bridge, authorized, capabilities, " "identity, last_authorized_time, last_deauthorized_time, no_auto_assign_ips, " "remote_trace_level, remote_trace_target, revision, tags, v_major, v_minor, v_rev, v_proto) " @@ -1056,27 +1140,49 @@ void PostgreSQL::commitThread() "remote_trace_level = EXCLUDED.remote_trace_level, remote_trace_target = EXCLUDED.remote_trace_target, " "revision = EXCLUDED.revision+1, tags = EXCLUDED.tags, v_major = EXCLUDED.v_major, " "v_minor = EXCLUDED.v_minor, v_rev = EXCLUDED.v_rev, v_proto = EXCLUDED.v_proto", - memberId, - networkId, - (bool)(*config)["activeBridge"], - (bool)(*config)["authorized"], - OSUtils::jsonDump((*config)["capabilities"], -1), - OSUtils::jsonString((*config)["identity"], ""), - (uint64_t)(*config)["lastAuthorizedTime"], - (uint64_t)(*config)["lastDeauthorizedTime"], - (bool)(*config)["noAutoAssignIps"], - (int)(*config)["remoteTraceLevel"], - target, - (uint64_t)(*config)["revision"], - OSUtils::jsonDump((*config)["tags"], -1), - (int)(*config)["vMajor"], - (int)(*config)["vMinor"], - (int)(*config)["vRev"], - (int)(*config)["vProto"]); + 17, + NULL, + values, + NULL, + NULL, + 0); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating member: %s\n", PQresultErrorMessage(res)); + fprintf(stderr, "%s", OSUtils::jsonDump(*config, 2).c_str()); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + delete config; + config = nullptr; + continue; + } - res = w.exec_params0("DELETE FROM ztc_member_ip_assignment WHERE member_id = $1 AND network_id = $2", - memberId, networkId); + PQclear(res); + + const char *v2[2] = { + memberId.c_str(), + networkId.c_str() + }; + + res = PQexecParams(conn, + "DELETE FROM ztc_member_ip_assignment WHERE member_id = $1 AND network_id = $2", + 2, + NULL, + v2, + NULL, + NULL, + 0); + + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating IP address assignments: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK"));; + delete config; + config = nullptr; + continue; + } + + PQclear(res); std::vector assignments; bool ipAssignError = false; @@ -1087,21 +1193,46 @@ void PostgreSQL::commitThread() continue; } - res = w.exec_params0( - "INSERT INTO ztc_member_ip_assignment (member_id, network_id, address) VALUES ($1, $2, $3) ON CONFLICT (network_id, member_id, address) DO NOTHING", - memberId, networkId, addr); + const char *v3[3] = { + memberId.c_str(), + networkId.c_str(), + addr.c_str() + }; + res = PQexecParams(conn, + "INSERT INTO ztc_member_ip_assignment (member_id, network_id, address) VALUES ($1, $2, $3) ON CONFLICT (network_id, member_id, address) DO NOTHING", + 3, + NULL, + v3, + NULL, + NULL, + 0); + + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error setting IP addresses for member: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + ipAssignError = true; + break; + } + PQclear(res); assignments.push_back(addr); } if (ipAssignError) { - fprintf(stderr, "%s: ipAssignError\n", _myAddressStr.c_str()); delete config; config = nullptr; continue; } - w.commit(); - _pool->unborrow(c); + res = PQexec(conn, "COMMIT"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error committing member transaction: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + delete config; + config = nullptr; + continue; + } const uint64_t nwidInt = OSUtils::jsonIntHex((*config)["nwid"], 0ULL); const uint64_t memberidInt = OSUtils::jsonIntHex((*config)["id"], 0ULL); @@ -1115,27 +1246,66 @@ void PostgreSQL::commitThread() _memberChanged(memOrig, memNew, qitem.second); } else { - fprintf(stderr, "%s: Can't notify of change. Error parsing nwid or memberid: %llu-%llu\n", _myAddressStr.c_str(), (unsigned long long)nwidInt, (unsigned long long)memberidInt); + fprintf(stderr, "Can't notify of change. Error parsing nwid or memberid: %llu-%llu\n", (unsigned long long)nwidInt, (unsigned long long)memberidInt); } } catch (std::exception &e) { - fprintf(stderr, "%s ERROR: Error updating member: %s\n", _myAddressStr.c_str(), e.what()); + fprintf(stderr, "ERROR: Error updating member: %s\n", e.what()); } } else if (objtype == "network") { try { - // fprintf(stderr, "%s: commitThread: network\n", _myAddressStr.c_str()); - auto c = _pool->borrow(); - pqxx::work w(*c->c); - std::string id = (*config)["id"]; - std::string remoteTraceTarget = ""; - if(!(*config)["remoteTraceTarget"].is_null()) { + std::string controllerId = _myAddressStr.c_str(); + std::string name = (*config)["name"]; + std::string remoteTraceTarget("NULL"); + if (!(*config)["remoteTraceTarget"].is_null()) { remoteTraceTarget = (*config)["remoteTraceTarget"]; } - std::string rulesSource = ""; + std::string rulesSource; if ((*config)["rulesSource"].is_string()) { rulesSource = (*config)["rulesSource"]; } + std::string caps = OSUtils::jsonDump((*config)["capabilitles"], -1); + std::string now = std::to_string(OSUtils::now()); + std::string mtu = std::to_string((int)(*config)["mtu"]); + std::string mcastLimit = std::to_string((int)(*config)["multicastLimit"]); + std::string rtraceLevel = std::to_string((int)(*config)["remoteTraceLevel"]); + std::string rules = OSUtils::jsonDump((*config)["rules"], -1); + std::string tags = OSUtils::jsonDump((*config)["tags"], -1); + std::string v4mode = OSUtils::jsonDump((*config)["v4AssignMode"],-1); + std::string v6mode = OSUtils::jsonDump((*config)["v6AssignMode"], -1); + bool enableBroadcast = (*config)["enableBroadcast"]; + bool isPrivate = (*config)["private"]; + + const char *values[16] = { + id.c_str(), + controllerId.c_str(), + caps.c_str(), + enableBroadcast ? "true" : "false", + now.c_str(), + mtu.c_str(), + mcastLimit.c_str(), + name.c_str(), + isPrivate ? "true" : "false", + rtraceLevel.c_str(), + (remoteTraceTarget == "NULL" ? NULL : remoteTraceTarget.c_str()), + rules.c_str(), + rulesSource.c_str(), + tags.c_str(), + v4mode.c_str(), + v6mode.c_str(), + }; + + PGresult *res = PQexec(conn, "BEGIN"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error beginnning transaction: %s\n", PQresultErrorMessage(res)); + PQclear(res); + delete config; + config = nullptr; + continue; + } + + PQclear(res); // This ugly query exists because when we want to mirror networks to/from // another data store (e.g. FileDB or LFDB) it is possible to get a network @@ -1143,15 +1313,15 @@ void PostgreSQL::commitThread() // the owner_id to the "first" global admin in the user DB if the record // did not previously exist. If the record already exists owner_id is left // unchanged, so owner_id should be left out of the update clause. - pqxx::result res = w.exec_params0( + res = PQexecParams(conn, "INSERT INTO ztc_network (id, creation_time, owner_id, controller_id, capabilities, enable_broadcast, " "last_modified, mtu, multicast_limit, name, private, " "remote_trace_level, remote_trace_target, rules, rules_source, " - "tags, v4_assign_mode, v6_assign_mode, sso_enabled) VALUES (" + "tags, v4_assign_mode, v6_assign_mode) VALUES (" "$1, TO_TIMESTAMP($5::double precision/1000), " "(SELECT user_id AS owner_id FROM ztc_global_permissions WHERE authorize = true AND del = true AND modify = true AND read = true LIMIT 1)," "$2, $3, $4, TO_TIMESTAMP($5::double precision/1000), " - "$6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, 17) " + "$6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16) " "ON CONFLICT (id) DO UPDATE set controller_id = EXCLUDED.controller_id, " "capabilities = EXCLUDED.capabilities, enable_broadcast = EXCLUDED.enable_broadcast, " "last_modified = EXCLUDED.last_modified, mtu = EXCLUDED.mtu, " @@ -1159,40 +1329,101 @@ void PostgreSQL::commitThread() "private = EXCLUDED.private, remote_trace_level = EXCLUDED.remote_trace_level, " "remote_trace_target = EXCLUDED.remote_trace_target, rules = EXCLUDED.rules, " "rules_source = EXCLUDED.rules_source, tags = EXCLUDED.tags, " - "v4_assign_mode = EXCLUDED.v4_assign_mode, v6_assign_mode = EXCLUDED.v6_assign_mode, " - "sso_enabled = EXCLUDED.sso_enabled", - id, - _myAddressStr, - OSUtils::jsonDump((*config)["capabilitles"], -1), - (bool)(*config)["enableBroadcast"], - OSUtils::now(), - (int)(*config)["mtu"], - (int)(*config)["multicastLimit"], - OSUtils::jsonString((*config)["name"],""), - (bool)(*config)["private"], - (int)(*config)["remoteTraceLevel"], - remoteTraceTarget, - OSUtils::jsonDump((*config)["rules"], -1), - rulesSource, - OSUtils::jsonDump((*config)["tags"], -1), - OSUtils::jsonDump((*config)["v4AssignMode"],-1), - OSUtils::jsonDump((*config)["v6AssignMode"], -1), - OSUtils::jsonBool((*config)["ssoEnabled"], false)); + "v4_assign_mode = EXCLUDED.v4_assign_mode, v6_assign_mode = EXCLUDED.v6_assign_mode", + 16, + NULL, + values, + NULL, + NULL, + 0); - res = w.exec_params0("DELETE FROM ztc_network_assignment_pool WHERE network_id = $1", 0); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating network record: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + delete config; + config = nullptr; + continue; + } + + PQclear(res); + + const char *params[1] = { + id.c_str() + }; + res = PQexecParams(conn, + "DELETE FROM ztc_network_assignment_pool WHERE network_id = $1", + 1, + NULL, + params, + NULL, + NULL, + 0); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating assignment pool: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + delete config; + config = nullptr; + continue; + } + + PQclear(res); auto pool = (*config)["ipAssignmentPools"]; bool err = false; for (auto i = pool.begin(); i != pool.end(); ++i) { std::string start = (*i)["ipRangeStart"]; std::string end = (*i)["ipRangeEnd"]; + const char *p[3] = { + id.c_str(), + start.c_str(), + end.c_str() + }; - res = w.exec_params0( + res = PQexecParams(conn, "INSERT INTO ztc_network_assignment_pool (network_id, ip_range_start, ip_range_end) " - "VALUES ($1, $2, $3)", id, start, end); + "VALUES ($1, $2, $3)", + 3, + NULL, + p, + NULL, + NULL, + 0); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating assignment pool: %s\n", PQresultErrorMessage(res)); + PQclear(res); + err = true; + break; + } + PQclear(res); + } + if (err) { + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + delete config; + config = nullptr; + continue; + } + + res = PQexecParams(conn, + "DELETE FROM ztc_network_route WHERE network_id = $1", + 1, + NULL, + params, + NULL, + NULL, + 0); + + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating routes: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + delete config; + config = nullptr; + continue; } - res = w.exec_params0("DELETE FROM ztc_network_route WHERE network_id = $1", id); auto routes = (*config)["routes"]; err = false; @@ -1214,18 +1445,36 @@ void PostgreSQL::commitThread() via = (*i)["via"]; } - res = w.exec_params0("INSERT INTO ztc_network_route (network_id, address, bits, via) VALUES ($1, $2, $3, $4)", - id, targetAddr, targetBits, (via == "NULL" ? NULL : via.c_str())); + const char *p[4] = { + id.c_str(), + targetAddr.c_str(), + targetBits.c_str(), + (via == "NULL" ? NULL : via.c_str()), + }; + + res = PQexecParams(conn, + "INSERT INTO ztc_network_route (network_id, address, bits, via) VALUES ($1, $2, $3, $4)", + 4, + NULL, + p, + NULL, + NULL, + 0); + + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating routes: %s\n", PQresultErrorMessage(res)); + PQclear(res); + err = true; + break; + } + PQclear(res); } if (err) { - fprintf(stderr, "%s: route add error\n", _myAddressStr.c_str()); - w.abort(); - _pool->unborrow(c); + PQclear(PQexec(conn, "ROLLBACK")); delete config; config = nullptr; continue; } - auto dns = (*config)["dns"]; std::string domain = dns["domain"]; std::stringstream servers; @@ -1238,13 +1487,38 @@ void PostgreSQL::commitThread() } servers << "}"; - std::string s = servers.str(); + const char *p[3] = { + id.c_str(), + domain.c_str(), + servers.str().c_str() + }; - res = w.exec_params0("INSERT INTO ztc_network_dns (network_id, domain, servers) VALUES ($1, $2, $3) ON CONFLICT (network_id) DO UPDATE SET domain = EXCLUDED.domain, servers = EXCLUDED.servers", - id, domain, s); + res = PQexecParams(conn, "INSERT INTO ztc_network_dns (network_id, domain, servers) VALUES ($1, $2, $3) ON CONFLICT (network_id) DO UPDATE SET domain = EXCLUDED.domain, servers = EXCLUDED.servers", + 3, + NULL, + p, + NULL, + NULL, + 0); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error updating DNS: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + err = true; + break; + } + PQclear(res); - w.commit(); - _pool->unborrow(c); + res = PQexec(conn, "COMMIT"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error committing network update: %s\n", PQresultErrorMessage(res)); + PQclear(res); + PQclear(PQexec(conn, "ROLLBACK")); + delete config; + config = nullptr; + continue; + } + PQclear(res); const uint64_t nwidInt = OSUtils::jsonIntHex((*config)["nwid"], 0ULL); if (nwidInt) { @@ -1255,119 +1529,207 @@ void PostgreSQL::commitThread() _networkChanged(nwOrig, nwNew, qitem.second); } else { - fprintf(stderr, "%s: Can't notify network changed: %llu\n", _myAddressStr.c_str(), (unsigned long long)nwidInt); + fprintf(stderr, "Can't notify network changed: %llu\n", (unsigned long long)nwidInt); } } catch (std::exception &e) { - fprintf(stderr, "%s ERROR: Error updating network: %s\n", _myAddressStr.c_str(), e.what()); + fprintf(stderr, "ERROR: Error updating member: %s\n", e.what()); } + // if (_rc != NULL) { + // try { + // std::string id = (*config)["id"]; + // std::string controllerId = _myAddressStr.c_str(); + // std::string key = "networks:{" + controllerId + "}"; + // if (_rc->clusterMode) { + // _cluster->sadd(key, id); + // } else { + // _redis->sadd(key, id); + // } + // } catch (sw::redis::Error &e) { + // fprintf(stderr, "ERROR: Error adding network to Redis: %s\n", e.what()); + // } + // } } else if (objtype == "_delete_network") { - // fprintf(stderr, "%s: commitThread: delete network\n", _myAddressStr.c_str()); try { - auto c = _pool->borrow(); - pqxx::work w(*c->c); - std::string networkId = (*config)["nwid"]; + const char *values[1] = { + networkId.c_str() + }; + PGresult * res = PQexecParams(conn, + "UPDATE ztc_network SET deleted = true WHERE id = $1", + 1, + NULL, + values, + NULL, + NULL, + 0); - pqxx::result res = w.exec_params0("UPDATE ztc_network SET deleted = true WHERE id = $1", - networkId); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error deleting network: %s\n", PQresultErrorMessage(res)); + } - w.commit(); - _pool->unborrow(c); + PQclear(res); } catch (std::exception &e) { - fprintf(stderr, "%s ERROR: Error deleting network: %s\n", _myAddressStr.c_str(), e.what()); + fprintf(stderr, "ERROR: Error deleting network: %s\n", e.what()); } - + // if (_rc != NULL) { + // try { + // std::string id = (*config)["id"]; + // std::string controllerId = _myAddressStr.c_str(); + // std::string key = "networks:{" + controllerId + "}"; + // if (_rc->clusterMode) { + // _cluster->srem(key, id); + // _cluster->del("network-nodes-online:{"+controllerId+"}:"+id); + // } else { + // _redis->srem(key, id); + // _redis->del("network-nodes-online:{"+controllerId+"}:"+id); + // } + // } catch (sw::redis::Error &e) { + // fprintf(stderr, "ERROR: Error adding network to Redis: %s\n", e.what()); + // } + // } } else if (objtype == "_delete_member") { - // fprintf(stderr, "%s commitThread: delete member\n", _myAddressStr.c_str()); try { - auto c = _pool->borrow(); - pqxx::work w(*c->c); - std::string memberId = (*config)["id"]; std::string networkId = (*config)["nwid"]; - pqxx::result res = w.exec_params0( - "UPDATE ztc_member SET hidden = true, deleted = true WHERE id = $1 AND network_id = $2", - memberId, networkId); + const char *values[2] = { + memberId.c_str(), + networkId.c_str() + }; - w.commit(); - _pool->unborrow(c); + PGresult *res = PQexecParams(conn, + "UPDATE ztc_member SET hidden = true, deleted = true WHERE id = $1 AND network_id = $2", + 2, + NULL, + values, + NULL, + NULL, + 0); + + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "ERROR: Error deleting member: %s\n", PQresultErrorMessage(res)); + } + + PQclear(res); } catch (std::exception &e) { - fprintf(stderr, "%s ERROR: Error deleting member: %s\n", _myAddressStr.c_str(), e.what()); + fprintf(stderr, "ERROR: Error deleting member: %s\n", e.what()); } + // if (_rc != NULL) { + // try { + // std::string memberId = (*config)["id"]; + // std::string networkId = (*config)["nwid"]; + // std::string controllerId = _myAddressStr.c_str(); + // std::string key = "network-nodes-all:{" + controllerId + "}:" + networkId; + // if (_rc->clusterMode) { + // _cluster->srem(key, memberId); + // _cluster->del("member:{"+controllerId+"}:"+networkId+":"+memberId); + // } else { + // _redis->srem(key, memberId); + // _redis->del("member:{"+controllerId+"}:"+networkId+":"+memberId); + // } + // } catch (sw::redis::Error &e) { + // fprintf(stderr, "ERROR: Error deleting member from Redis: %s\n", e.what()); + // } + // } } else { - fprintf(stderr, "%s ERROR: unknown objtype\n", _myAddressStr.c_str()); + fprintf(stderr, "ERROR: unknown objtype"); } } catch (std::exception &e) { - fprintf(stderr, "%s ERROR: Error getting objtype: %s\n", _myAddressStr.c_str(), e.what()); + fprintf(stderr, "ERROR: Error getting objtype: %s\n", e.what()); } + std::this_thread::sleep_for(std::chrono::milliseconds(100)); } - fprintf(stderr, "%s commitThread finished\n", _myAddressStr.c_str()); + PQfinish(conn); + if (_run == 1) { + fprintf(stderr, "ERROR: %s commitThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); + exit(7); + } + fprintf(stderr, "commitThread finished\n"); } void PostgreSQL::onlineNotificationThread() { waitForReady(); - onlineNotification_Postgres(); + + // if (_rc != NULL) { + // onlineNotification_Redis(); + // } else { + onlineNotification_Postgres(); + // } } void PostgreSQL::onlineNotification_Postgres() { + PGconn *conn = getPgConn(); + if (PQstatus(conn) == CONNECTION_BAD) { + fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); + PQfinish(conn); + exit(1); + } _connected = 1; nlohmann::json jtmp1, jtmp2; while (_run == 1) { - auto c = _pool->borrow(); - try { - fprintf(stderr, "%s onlineNotification_Postgres\n", _myAddressStr.c_str()); - std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; - { - std::lock_guard l(_lastOnline_l); - lastOnline.swap(_lastOnline); + if (PQstatus(conn) != CONNECTION_OK) { + fprintf(stderr, "ERROR: Online Notification thread lost connection to Postgres."); + PQfinish(conn); + exit(5); + } + + std::unordered_map< std::pair,std::pair,_PairHasher > lastOnline; + { + std::lock_guard l(_lastOnline_l); + lastOnline.swap(_lastOnline); + } + + PGresult *res = NULL; + + std::stringstream memberUpdate; + memberUpdate << "INSERT INTO ztc_member_status (network_id, member_id, address, last_updated) VALUES "; + bool firstRun = true; + bool memberAdded = false; + for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) { + uint64_t nwid_i = i->first.first; + char nwidTmp[64]; + char memTmp[64]; + char ipTmp[64]; + OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i); + OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", i->first.second); + + if(!get(nwid_i, jtmp1, i->first.second, jtmp2)) { + continue; // skip non existent networks/members } - - pqxx::work w(*c->c); - // using pqxx::stream_to would be a really nice alternative here, but - // unfortunately it doesn't support upserts. - // fprintf(stderr, "online notification tick\n"); - std::stringstream memberUpdate; - memberUpdate << "INSERT INTO ztc_member_status (network_id, member_id, address, last_updated) VALUES "; - bool firstRun = true; - bool memberAdded = false; - int updateCount = 0; - for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) { - updateCount += 1; - uint64_t nwid_i = i->first.first; - char nwidTmp[64]; - char memTmp[64]; - char ipTmp[64]; - OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i); - OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", i->first.second); + std::string networkId(nwidTmp); + std::string memberId(memTmp); - if(!get(nwid_i, jtmp1, i->first.second, jtmp2)) { - continue; // skip non existent networks/members - } + const char *qvals[2] = { + networkId.c_str(), + memberId.c_str() + }; - std::string networkId(nwidTmp); - std::string memberId(memTmp); + res = PQexecParams(conn, + "SELECT id, network_id FROM ztc_member WHERE network_id = $1 AND id = $2", + 2, + NULL, + qvals, + NULL, + NULL, + 0); - const char *qvals[2] = { - networkId.c_str(), - memberId.c_str() - }; + if (PQresultStatus(res) != PGRES_TUPLES_OK) { + fprintf(stderr, "Member count failed: %s", PQerrorMessage(conn)); + PQclear(res); + continue; + } - try { - pqxx::row r = w.exec_params1("SELECT id, network_id FROM ztc_member WHERE network_id = $1 AND id = $2", - networkId, memberId); - } catch (pqxx::unexpected_rows &e) { - // fprintf(stderr, "Member count failed: %s\n", e.what()); - continue; - } + int nrows = PQntuples(res); + PQclear(res); + if (nrows == 1) { int64_t ts = i->second.first; std::string ipAddr = i->second.second.toIpString(ipTmp); std::string timestamp = std::to_string(ts); @@ -1386,27 +1748,27 @@ void PostgreSQL::onlineNotification_Postgres() } memberUpdate << "TO_TIMESTAMP(" << timestamp << "::double precision/1000))"; memberAdded = true; + } else if (nrows > 1) { + fprintf(stderr, "nrows > 1?!?"); + continue; + } else { + continue; } - memberUpdate << " ON CONFLICT (network_id, member_id) DO UPDATE SET address = EXCLUDED.address, last_updated = EXCLUDED.last_updated;"; + } + memberUpdate << " ON CONFLICT (network_id, member_id) DO UPDATE SET address = EXCLUDED.address, last_updated = EXCLUDED.last_updated;"; - if (memberAdded) { - //fprintf(stderr, "%s\n", memberUpdate.str().c_str()); - pqxx::result res = w.exec0(memberUpdate.str()); - w.commit(); + if (memberAdded) { + res = PQexec(conn, memberUpdate.str().c_str()); + if (PQresultStatus(res) != PGRES_COMMAND_OK) { + fprintf(stderr, "Multiple insert failed: %s", PQerrorMessage(conn)); } - fprintf(stderr, "%s: Updated online status of %d members\n", _myAddressStr.c_str(), updateCount); - } catch (std::exception &e) { - fprintf(stderr, "%s: error in onlinenotification thread: %s\n", _myAddressStr.c_str(), e.what()); - } - _pool->unborrow(c); - - ConnectionPoolStats stats = _pool->get_stats(); - fprintf(stderr, "%s pool stats: in use size: %llu, available size: %llu, total: %llu\n", - _myAddressStr.c_str(), stats.borrowed_size, stats.pool_size, (stats.borrowed_size + stats.pool_size)); + PQclear(res); + } std::this_thread::sleep_for(std::chrono::seconds(10)); } fprintf(stderr, "%s: Fell out of run loop in onlineNotificationThread\n", _myAddressStr.c_str()); + PQfinish(conn); if (_run == 1) { fprintf(stderr, "ERROR: %s onlineNotificationThread should still be running! Exiting Controller.\n", _myAddressStr.c_str()); exit(6); @@ -1502,5 +1864,20 @@ void PostgreSQL::_doRedisUpdate(sw::redis::Transaction &tx, std::string &control tx.exec(); } +PGconn *PostgreSQL::getPgConn(OverrideMode m) +{ + if (m == ALLOW_PGBOUNCER_OVERRIDE) { + char *connStr = getenv("PGBOUNCER_CONNSTR"); + if (connStr != NULL) { + fprintf(stderr, "PGBouncer Override\n"); + std::string conn(connStr); + conn += " application_name=controller-"; + conn += _myAddressStr.c_str(); + return PQconnectdb(conn.c_str()); + } + } + + return PQconnectdb(_connString.c_str()); +} #endif //ZT_CONTROLLER_USE_LIBPQ diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp index 637b29749..c1d9dfd1a 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -20,9 +20,6 @@ #define ZT_CENTRAL_CONTROLLER_COMMIT_THREADS 4 -#include "ConnectionPool.hpp" -#include - #include #include @@ -34,69 +31,14 @@ namespace ZeroTier { struct RedisConfig; - -class PostgresConnection : public Connection { -public: - virtual ~PostgresConnection() { - } - - std::shared_ptr c; - int a; -}; - - -class PostgresConnFactory : public ConnectionFactory { -public: - PostgresConnFactory(std::string &connString) - : m_connString(connString) - { - } - - virtual std::shared_ptr create() { - auto c = std::shared_ptr(new PostgresConnection()); - c->c = std::make_shared(m_connString); - return std::static_pointer_cast(c); - } -private: - std::string m_connString; -}; - -class PostgreSQL; - -class MemberNotificationReceiver : public pqxx::notification_receiver { -public: - MemberNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel); - virtual ~MemberNotificationReceiver() { - fprintf(stderr, "MemberNotificationReceiver destroyed\n"); - } - - virtual void operator() (const std::string &payload, int backendPid); -private: - PostgreSQL *_psql; -}; - -class NetworkNotificationReceiver : public pqxx::notification_receiver { -public: - NetworkNotificationReceiver(PostgreSQL *p, pqxx::connection &c, const std::string &channel); - virtual ~NetworkNotificationReceiver() { - fprintf(stderr, "NetworkNotificationReceiver destroyed\n"); - }; - - virtual void operator() (const std::string &payload, int packend_pid); -private: - PostgreSQL *_psql; -}; - /** * A controller database driver that talks to PostgreSQL * * This is for use with ZeroTier Central. Others are free to build and use it - * but be aware that we might change it at any time. + * but be aware taht we might change it at any time. */ class PostgreSQL : public DB { - friend class MemberNotificationReceiver; - friend class NetworkNotificationReceiver; public: PostgreSQL(const Identity &myId, const char *path, int listenPort, RedisConfig *rc); virtual ~PostgreSQL(); @@ -107,29 +49,21 @@ public: virtual void eraseNetwork(const uint64_t networkId); virtual void eraseMember(const uint64_t networkId, const uint64_t memberId); virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress &physicalAddress); - virtual std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL); protected: struct _PairHasher { inline std::size_t operator()(const std::pair &p) const { return (std::size_t)(p.first ^ p.second); } }; - virtual void _memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners) { - DB::_memberChanged(old, memberConfig, notifyListeners); - } - - virtual void _networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners) { - DB::_networkChanged(old, networkConfig, notifyListeners); - } private: - void initializeNetworks(); - void initializeMembers(); + void initializeNetworks(PGconn *conn); + void initializeMembers(PGconn *conn); void heartbeat(); void membersDbWatcher(); - void _membersWatcher_Postgres(); + void _membersWatcher_Postgres(PGconn *conn); void networksDbWatcher(); - void _networksWatcher_Postgres(); + void _networksWatcher_Postgres(PGconn *conn); void _membersWatcher_Redis(); void _networksWatcher_Redis(); @@ -146,7 +80,7 @@ private: NO_OVERRIDE = 1 }; - std::shared_ptr > _pool; + PGconn * getPgConn( OverrideMode m = ALLOW_PGBOUNCER_OVERRIDE ); const Identity _myId; const Address _myAddress; @@ -169,7 +103,6 @@ private: mutable volatile bool _waitNoticePrinted; int _listenPort; - uint8_t _ssoPsk[48]; RedisConfig *_rc; std::shared_ptr _redis; diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index 2bdea6474..83c4a4787 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -420,6 +420,157 @@ enum ZT_ResultCode */ #define ZT_ResultCode_isFatal(x) ((((int)(x)) >= 100)&&(((int)(x)) < 1000)) + +/** + * Multipath bonding policy + */ +enum ZT_MultipathBondingPolicy +{ + /** + * Normal operation. No fault tolerance, no load balancing + */ + ZT_BONDING_POLICY_NONE = 0, + + /** + * Sends traffic out on only one path at a time. Configurable immediate + * fail-over. + */ + ZT_BONDING_POLICY_ACTIVE_BACKUP = 1, + + /** + * Sends traffic out on all paths + */ + ZT_BONDING_POLICY_BROADCAST = 2, + + /** + * Stripes packets across all paths + */ + ZT_BONDING_POLICY_BALANCE_RR = 3, + + /** + * Packets destined for specific peers will always be sent over the same + * path. + */ + ZT_BONDING_POLICY_BALANCE_XOR = 4, + + /** + * Balances flows among all paths according to path performance + */ + ZT_BONDING_POLICY_BALANCE_AWARE = 5 +}; + +/** + * Multipath active re-selection policy (linkSelectMethod) + */ +enum ZT_MultipathLinkSelectMethod +{ + /** + * Primary link regains status as active link whenever it comes back up + * (default when links are explicitly specified) + */ + ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS = 0, + + /** + * Primary link regains status as active link when it comes back up and + * (if) it is better than the currently-active link. + */ + ZT_MULTIPATH_RESELECTION_POLICY_BETTER = 1, + + /** + * Primary link regains status as active link only if the currently-active + * link fails. + */ + ZT_MULTIPATH_RESELECTION_POLICY_FAILURE = 2, + + /** + * The primary link can change if a superior path is detected. + * (default if user provides no fail-over guidance) + */ + ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE = 3 +}; + +/** + * Mode of multipath link interface + */ +enum ZT_MultipathLinkMode +{ + ZT_MULTIPATH_SLAVE_MODE_PRIMARY = 0, + ZT_MULTIPATH_SLAVE_MODE_SPARE = 1 +}; + +/** + * Strategy for path monitoring + */ +enum ZT_MultipathMonitorStrategy +{ + /** + * Use bonding policy's default strategy + */ + ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DEFAULT = 0, + + /** + * Does not actively send probes to judge aliveness, will rely + * on conventional traffic and summary statistics. + */ + ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE = 1, + + /** + * Sends probes at a constant rate to judge aliveness. + */ + ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_ACTIVE = 2, + + /** + * Sends probes at varying rates which correlate to native + * traffic loads to judge aliveness. + */ + ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC = 3 +}; + +/** + * Strategy for re-balancing protocol flows + */ +enum ZT_MultipathFlowRebalanceStrategy +{ + /** + * Flows will only be re-balanced among links during + * assignment or failover. This minimizes the possibility + * of sequence reordering and is thus the default setting. + */ + ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE = 0, + + /** + * Flows that are active may be re-assigned to a new more + * suitable link if it can be done without disrupting the flow. + * This setting can sometimes cause sequence re-ordering. + */ + ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_OPPORTUNISTIC = 0, + + /** + * Flows will be continuously re-assigned the most suitable link + * in order to maximize "balance". This can often cause sequence + * reordering and is thus only reccomended for protocols like UDP. + */ + ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE = 2 +}; + +/** + * Indices for the path quality weight vector + */ +enum ZT_MultipathQualityWeightIndex +{ + ZT_QOS_LAT_IDX, + ZT_QOS_LTM_IDX, + ZT_QOS_PDV_IDX, + ZT_QOS_PLR_IDX, + ZT_QOS_PER_IDX, + ZT_QOS_THR_IDX, + ZT_QOS_THM_IDX, + ZT_QOS_THV_IDX, + ZT_QOS_AGE_IDX, + ZT_QOS_SCP_IDX, + ZT_QOS_WEIGHT_SIZE +}; + /** * Status codes sent to status update callback when things happen */ @@ -669,12 +820,7 @@ enum ZT_VirtualNetworkStatus /** * ZeroTier core version too old */ - ZT_NETWORK_STATUS_CLIENT_TOO_OLD = 5, - - /** - * External authentication is required (e.g. SSO) - */ - ZT_NETWORK_STATUS_AUTHENTICATION_REQUIRED = 6 + ZT_NETWORK_STATUS_CLIENT_TOO_OLD = 5 }; /** @@ -1193,21 +1339,6 @@ typedef struct * Network specific DNS configuration */ ZT_VirtualNetworkDNS dns; - - /** - * sso enabled - */ - bool ssoEnabled; - - /** - * If the status us AUTHENTICATION_REQUIRED, this may contain a URL for authentication. - */ - char authenticationURL[2048]; - - /** - * Time that current authentication expires. only valid if ssoEnabled is true - */ - uint64_t authenticationExpiryTime; } ZT_VirtualNetworkConfig; /** diff --git a/node/Bond.cpp b/node/Bond.cpp index cf4b4eabd..d6a16ad86 100644 --- a/node/Bond.cpp +++ b/node/Bond.cpp @@ -1,267 +1,102 @@ /* - * Copyright (c)2013-2021 ZeroTier, Inc. + * Copyright (c)2013-2020 ZeroTier, Inc. * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file in the project's root directory. * - * Change Date: 2026-01-01 + * Change Date: 2025-01-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2.0 of the Apache License. */ /****/ +#include + +#include "../osdep/OSUtils.hpp" + +#include "Peer.hpp" #include "Bond.hpp" #include "Switch.hpp" - -#include -#include +#include "Flow.hpp" +#include "Path.hpp" namespace ZeroTier { -static unsigned char s_freeRandomByteCounter = 0; - -int Bond::_minReqMonitorInterval = ZT_BOND_FAILOVER_DEFAULT_INTERVAL; -uint8_t Bond::_defaultPolicy = ZT_BOND_POLICY_NONE; - -Phy* Bond::_phy; - -Mutex Bond::_bonds_m; -Mutex Bond::_links_m; - -std::string Bond::_defaultPolicyStr; -std::map > Bond::_bonds; -std::map Bond::_policyTemplateAssignments; -std::map > Bond::_bondPolicyTemplates; -std::map > > Bond::_linkDefinitions; -std::map > > Bond::_interfaceToLinkMap; - -bool Bond::linkAllowed(std::string& policyAlias, SharedPtr link) +Bond::Bond(const RuntimeEnvironment *renv, int policy, const SharedPtr& peer) : + RR(renv), + _peer(peer), + _qosCutoffCount(0), + _ackCutoffCount(0), + _lastAckRateCheck(0), + _lastQoSRateCheck(0), + _lastQualityEstimation(0), + _lastCheckUserPreferences(0), + _lastBackgroundTaskCheck(0), + _lastBondStatusLog(0), + _lastPathNegotiationReceived(0), + _lastPathNegotiationCheck(0), + _lastSentPathNegotiationRequest(0), + _lastFlowStatReset(0), + _lastFlowExpirationCheck(0), + _lastFlowRebalance(0), + _lastFrame(0), + _lastActiveBackupPathChange(0) { - bool foundInDefinitions = false; - if (_linkDefinitions.count(policyAlias)) { - auto it = _linkDefinitions[policyAlias].begin(); - while (it != _linkDefinitions[policyAlias].end()) { - if (link->ifname() == (*it)->ifname()) { - foundInDefinitions = true; - break; - } - ++it; - } - } - return _linkDefinitions[policyAlias].empty() || foundInDefinitions; + setReasonableDefaults(policy, SharedPtr(), false); + _policyAlias = BondController::getPolicyStrByCode(policy); } -void Bond::addCustomLink(std::string& policyAlias, SharedPtr link) +Bond::Bond(const RuntimeEnvironment *renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer) : + RR(renv), + _policyAlias(policyAlias), + _peer(peer) { - Mutex::Lock _l(_links_m); - _linkDefinitions[policyAlias].push_back(link); - auto search = _interfaceToLinkMap[policyAlias].find(link->ifname()); - if (search == _interfaceToLinkMap[policyAlias].end()) { - link->setAsUserSpecified(true); - _interfaceToLinkMap[policyAlias].insert(std::pair >(link->ifname(), link)); - } + setReasonableDefaults(BondController::getPolicyCodeByStr(basePolicy), SharedPtr(), false); } -bool Bond::addCustomPolicy(const SharedPtr& newBond) +Bond::Bond(const RuntimeEnvironment *renv, SharedPtr originalBond, const SharedPtr& peer) : + RR(renv), + _peer(peer), + _lastAckRateCheck(0), + _lastQoSRateCheck(0), + _lastQualityEstimation(0), + _lastCheckUserPreferences(0), + _lastBackgroundTaskCheck(0), + _lastBondStatusLog(0), + _lastPathNegotiationReceived(0), + _lastPathNegotiationCheck(0), + _lastFlowStatReset(0), + _lastFlowExpirationCheck(0), + _lastFlowRebalance(0), + _lastFrame(0) { - Mutex::Lock _l(_bonds_m); - if (! _bondPolicyTemplates.count(newBond->policyAlias())) { - _bondPolicyTemplates[newBond->policyAlias()] = newBond; - return true; - } - return false; + setReasonableDefaults(originalBond->_bondingPolicy, originalBond, true); } -bool Bond::assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias) +void Bond::nominatePath(const SharedPtr& path, int64_t now) { - Mutex::Lock _l(_bonds_m); - if (! _policyTemplateAssignments.count(identity)) { - _policyTemplateAssignments[identity] = policyAlias; - return true; - } - return false; -} - -SharedPtr Bond::getBondByPeerId(int64_t identity) -{ - Mutex::Lock _l(_bonds_m); - return _bonds.count(identity) ? _bonds[identity] : SharedPtr(); -} - -SharedPtr Bond::createTransportTriggeredBond(const RuntimeEnvironment* renv, const SharedPtr& peer) -{ - Mutex::Lock _l(_bonds_m); - int64_t identity = peer->identity().address().toInt(); - Bond* bond = nullptr; - if (! _bonds.count(identity)) { - std::string policyAlias; - if (! _policyTemplateAssignments.count(identity)) { - if (_defaultPolicy) { - bond = new Bond(renv, _defaultPolicy, peer); - bond->log("new default bond"); - } - if (! _defaultPolicy && _defaultPolicyStr.length()) { - bond = new Bond(renv, _bondPolicyTemplates[_defaultPolicyStr].ptr(), peer); - bond->log("new default custom bond"); - } - } - else { - if (! _bondPolicyTemplates[_policyTemplateAssignments[identity]]) { - bond = new Bond(renv, _defaultPolicy, peer); - bond->log("peer-specific bond, was specified as %s but the bond definition was not found, using default %s", _policyTemplateAssignments[identity].c_str(), getPolicyStrByCode(_defaultPolicy).c_str()); - } - else { - bond = new Bond(renv, _bondPolicyTemplates[_policyTemplateAssignments[identity]].ptr(), peer); - bond->log("new default bond"); - } - } - } - if (bond) { - _bonds[identity] = bond; - /** - * Determine if user has specified anything that could affect the bonding policy's decisions - */ - if (_interfaceToLinkMap.count(bond->policyAlias())) { - std::map >::iterator it = _interfaceToLinkMap[bond->policyAlias()].begin(); - while (it != _interfaceToLinkMap[bond->policyAlias()].end()) { - if (it->second->isUserSpecified()) { - bond->_userHasSpecifiedLinks = true; - } - if (it->second->isUserSpecified() && it->second->primary()) { - bond->_userHasSpecifiedPrimaryLink = true; - } - if (it->second->isUserSpecified() && it->second->userHasSpecifiedFailoverInstructions()) { - bond->_userHasSpecifiedFailoverInstructions = true; - } - if (it->second->isUserSpecified() && (it->second->speed() > 0)) { - bond->_userHasSpecifiedLinkSpeeds = true; - } - ++it; - } - } - return bond; - } - return SharedPtr(); -} - -SharedPtr Bond::getLinkBySocket(const std::string& policyAlias, uint64_t localSocket) -{ - Mutex::Lock _l(_links_m); - char ifname[32] = { 0 }; // 256 because interfaces on Windows can potentially be that long - _phy->getIfName((PhySocket*)((uintptr_t)localSocket), ifname, sizeof(ifname) - 1); - // fprintf(stderr, "ifname %s\n",ifname); - std::string ifnameStr(ifname); - auto search = _interfaceToLinkMap[policyAlias].find(ifnameStr); - if (search == _interfaceToLinkMap[policyAlias].end()) { - // If the link wasn't already known, add a new entry - // fprintf(stderr, "adding new link?? %s\n", ifnameStr.c_str()); - SharedPtr s = new Link(ifnameStr, 0, 0, true, ZT_BOND_SLAVE_MODE_SPARE, "", 0.0); - _interfaceToLinkMap[policyAlias].insert(std::pair >(ifnameStr, s)); - return s; - } - else { - return search->second; - } -} - -SharedPtr Bond::getLinkByName(const std::string& policyAlias, const std::string& ifname) -{ - Mutex::Lock _l(_links_m); - auto search = _interfaceToLinkMap[policyAlias].find(ifname); - if (search != _interfaceToLinkMap[policyAlias].end()) { - return search->second; - } - return SharedPtr(); -} - -void Bond::processBackgroundTasks(void* tPtr, const int64_t now) -{ - unsigned long _currMinReqMonitorInterval = ZT_BOND_FAILOVER_DEFAULT_INTERVAL; - Mutex::Lock _l(_bonds_m); - std::map >::iterator bondItr = _bonds.begin(); - while (bondItr != _bonds.end()) { - // Update Bond Controller's background processing timer - _currMinReqMonitorInterval = std::min(_currMinReqMonitorInterval, (unsigned long)(bondItr->second->monitorInterval())); - // Process bond tasks - bondItr->second->processBackgroundBondTasks(tPtr, now); - ++bondItr; - } - _minReqMonitorInterval = std::min(_currMinReqMonitorInterval, (unsigned long)ZT_BOND_FAILOVER_DEFAULT_INTERVAL); -} - -Bond::Bond(const RuntimeEnvironment* renv) : RR(renv) -{ -} - -Bond::Bond(const RuntimeEnvironment* renv, int policy, const SharedPtr& peer) : RR(renv), _freeRandomByte((unsigned char)((uintptr_t)this >> 4) ^ ++s_freeRandomByteCounter), _peer(peer), _peerId(_peer->_id.address().toInt()) -{ - setBondParameters(policy, SharedPtr(), false); - _policyAlias = getPolicyStrByCode(policy); -} - -Bond::Bond(const RuntimeEnvironment* renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer) : RR(renv), _policyAlias(policyAlias), _peer(peer) -{ - setBondParameters(getPolicyCodeByStr(basePolicy), SharedPtr(), false); -} - -Bond::Bond(const RuntimeEnvironment* renv, SharedPtr originalBond, const SharedPtr& peer) - : RR(renv) - , _freeRandomByte((unsigned char)((uintptr_t)this >> 4) ^ ++s_freeRandomByteCounter) - , _peer(peer) - , _peerId(_peer->_id.address().toInt()) -{ - setBondParameters(originalBond->_policy, originalBond, true); -} - -void Bond::nominatePathToBond(const SharedPtr& path, int64_t now) -{ - char pathStr[64] = { 0 }; - path->address().toString(pathStr); + char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); Mutex::Lock _l(_paths_m); - /** - * Ensure the link is allowed and the path is not already present - */ - if (! RR->bc->linkAllowed(_policyAlias, getLink(path))) { + if (!RR->bc->linkAllowed(_policyAlias, getLink(path))) { return; } bool alreadyPresent = false; - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - // Sanity check - if (path.ptr() == _paths[i].p.ptr()) { + for (int i=0; i sl = getLink(_paths[i].p); - if (sl) { - // Determine if there are any other paths on this link - bool bFoundCommonLink = false; - SharedPtr commonLink = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); - for (unsigned int j = 0; j < ZT_MAX_PEER_NETWORK_PATHS; ++j) { - if (_paths[j].p && _paths[j].p.ptr() != _paths[i].p.ptr()) { - if (RR->bc->getLinkBySocket(_policyAlias, _paths[j].p->localSocket()) == commonLink) { - bFoundCommonLink = true; - _paths[j].onlyPathOnLink = false; - } - } - } - _paths[i].ipvPref = sl->ipvPref(); - _paths[i].mode = sl->mode(); - _paths[i].enabled = sl->enabled(); - _paths[i].onlyPathOnLink = ! bFoundCommonLink; - } - log("nominate link %s/%s (now in trial period)", getLink(path)->ifname().c_str(), pathStr); + if (!alreadyPresent) { + for (int i=0; iifname().c_str(), pathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); + _paths[i]->startTrial(now); break; } } @@ -270,93 +105,85 @@ void Bond::nominatePathToBond(const SharedPtr& path, int64_t now) estimatePathQuality(now); } -void Bond::addPathToBond(int nominatedIdx, int bondedIdx) -{ - // Map bonded set to nominated set - _bondIdxMap[bondedIdx] = nominatedIdx; - // Tell the bonding layer that we can now use this bond for traffic - _paths[nominatedIdx].bonded = true; -} - SharedPtr Bond::getAppropriatePath(int64_t now, int32_t flowId) { Mutex::Lock _l(_paths_m); /** * active-backup */ - if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { - if (_abPathIdx != ZT_MAX_PEER_NETWORK_PATHS && _paths[_abPathIdx].p) { - return _paths[_abPathIdx].p; + if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { + if (_abPath) { + return _abPath; } } /** * broadcast */ - if (_policy == ZT_BOND_POLICY_BROADCAST) { - return SharedPtr(); // Handled in Switch::_trySend() + if (_bondingPolicy == ZT_BONDING_POLICY_BROADCAST) { + return SharedPtr(); // Handled in Switch::_trySend() } - if (! _numBondedPaths) { - return SharedPtr(); // No paths assigned to bond yet, cannot balance traffic + if (!_numBondedPaths) { + return SharedPtr(); // No paths assigned to bond yet, cannot balance traffic } /** * balance-rr */ - if (_policy == ZT_BOND_POLICY_BALANCE_RR) { - if (! _allowFlowHashing) { + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { + if (!_allowFlowHashing) { if (_packetsPerLink == 0) { // Randomly select a path - return _paths[_bondIdxMap[_freeRandomByte % _numBondedPaths]].p; + return _paths[_bondedIdx[_freeRandomByte % _numBondedPaths]]; // TODO: Optimize } if (_rrPacketsSentOnCurrLink < _packetsPerLink) { // Continue to use this link ++_rrPacketsSentOnCurrLink; - return _paths[_bondIdxMap[_rrIdx]].p; + return _paths[_bondedIdx[_rrIdx]]; } // Reset striping counter _rrPacketsSentOnCurrLink = 0; - if (_numBondedPaths == 1 || _rrIdx >= (ZT_MAX_PEER_NETWORK_PATHS-1)) { + if (_numBondedPaths == 1) { _rrIdx = 0; } else { int _tempIdx = _rrIdx; - for (int searchCount = 0; searchCount < (_numBondedPaths - 1); searchCount++) { - _tempIdx = (_tempIdx == (_numBondedPaths - 1)) ? 0 : _tempIdx + 1; - if (_bondIdxMap[_tempIdx] != ZT_MAX_PEER_NETWORK_PATHS) { - if (_paths[_bondIdxMap[_tempIdx]].p && _paths[_bondIdxMap[_tempIdx]].eligible) { + for (int searchCount = 0; searchCount < (_numBondedPaths-1); searchCount++) { + _tempIdx = (_tempIdx == (_numBondedPaths-1)) ? 0 : _tempIdx+1; + if (_bondedIdx[_tempIdx] != ZT_MAX_PEER_NETWORK_PATHS) { + if (_paths[_bondedIdx[_tempIdx]] && _paths[_bondedIdx[_tempIdx]]->eligible(now,_ackSendInterval)) { _rrIdx = _tempIdx; break; } } } } - if (_paths[_bondIdxMap[_rrIdx]].p) { - return _paths[_bondIdxMap[_rrIdx]].p; + if (_paths[_bondedIdx[_rrIdx]]) { + return _paths[_bondedIdx[_rrIdx]]; } } } /** * balance-xor */ - if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) { - if (! _allowFlowHashing || flowId == -1) { + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { + if (!_allowFlowHashing || flowId == -1) { // No specific path required for unclassified traffic, send on anything - int m_idx = _bondIdxMap[_freeRandomByte % _numBondedPaths]; - return _paths[m_idx].p; + return _paths[_bondedIdx[_freeRandomByte % _numBondedPaths]]; // TODO: Optimize } else if (_allowFlowHashing) { + // TODO: Optimize Mutex::Lock _l(_flows_m); SharedPtr flow; if (_flows.count(flowId)) { flow = _flows[flowId]; - flow->lastActivity = now; + flow->updateActivity(now); } else { unsigned char entropy; Utils::getSecureRandom(&entropy, 1); - flow = createFlow(ZT_MAX_PEER_NETWORK_PATHS, flowId, entropy, now); + flow = createFlow(SharedPtr(), flowId, entropy, now); } if (flow) { - return _paths[flow->assignedPath].p; + return flow->assignedPath(); } } } @@ -365,168 +192,191 @@ SharedPtr Bond::getAppropriatePath(int64_t now, int32_t flowId) void Bond::recordIncomingInvalidPacket(const SharedPtr& path) { - // char pathStr[64] = { 0 }; path->address().toString(pathStr); - // log("%s (qos) Invalid packet on link %s/%s from peer %llx", - // getLink(path)->ifname().c_str(), pathStr); + //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + //sprintf(traceMsg, "%s (qos) Invalid packet on link %s/%s from peer %llx", + // OSUtils::humanReadableTimestamp().c_str(), getLink(path)->ifname().c_str(), pathStr, _peer->_id.address().toInt()); + //RR->t->bondStateMessage(NULL, traceMsg); Mutex::Lock _l(_paths_m); - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p == path) { - _paths[i].packetValiditySamples.push(false); + for (int i=0; ipacketValiditySamples.push(false); } } } -void Bond::recordOutgoingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) +void Bond::recordOutgoingPacket(const SharedPtr &path, const uint64_t packetId, + uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) { - _freeRandomByte += (unsigned char)(packetId >> 8); // Grab entropy to use in path selection logic - bool isFrame = (verb == Packet::Packet::VERB_ECHO || verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); - if (isFrame) { - // char pathStr[64] = { 0 }; - // path->address().toString(pathStr); - // int pathIdx = getNominatedPathIdx(path); - // log("outgoing packet via [%d]", pathIdx); - // log("outgoing packet via %s/%s", getLink(path)->ifname().c_str(), pathStr); + //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + //sprintf(traceMsg, "%s (bond) Outgoing packet on link %s/%s to peer %llx", + // OSUtils::humanReadableTimestamp().c_str(), getLink(path)->ifname().c_str(), pathStr, _peer->_id.address().toInt()); + //RR->t->bondStateMessage(NULL, traceMsg); + _freeRandomByte += (unsigned char)(packetId >> 8); // Grab entropy to use in path selection logic + if (!_shouldCollectPathStatistics) { + return; } - bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) && (verb != Packet::VERB_ACK) && (verb != Packet::VERB_QOS_MEASUREMENT)); + bool isFrame = (verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); + bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) + && (verb != Packet::VERB_ACK) + && (verb != Packet::VERB_QOS_MEASUREMENT)); if (isFrame || shouldRecord) { Mutex::Lock _l(_paths_m); - int pathIdx = getNominatedPathIdx(path); - if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { - return; - } if (isFrame) { - ++(_paths[pathIdx].packetsOut); - _lastFrame = now; + ++(path->_packetsOut); + _lastFrame=now; } if (shouldRecord) { - //_paths[pathIdx].unackedBytes += payloadLength; + path->_unackedBytes += payloadLength; // Take note that we're expecting a VERB_ACK on this path as of a specific time - if (_paths[pathIdx].qosStatsOut.size() < ZT_QOS_MAX_OUTSTANDING_RECORDS) { - _paths[pathIdx].qosStatsOut[packetId] = now; + if (path->qosStatsOut.size() < ZT_QOS_MAX_OUTSTANDING_RECORDS) { + path->qosStatsOut[packetId] = now; } } } if (_allowFlowHashing && (flowId != ZT_QOS_NO_FLOW)) { Mutex::Lock _l(_flows_m); if (_flows.count(flowId)) { - _flows[flowId]->bytesOut += payloadLength; + _flows[flowId]->recordOutgoingBytes(payloadLength); } } } -void Bond::recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now) +void Bond::recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, + Packet::Verb verb, int32_t flowId, int64_t now) { - bool isFrame = (verb == Packet::Packet::VERB_ECHO || verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); - if (isFrame) { - // char pathStr[64] = { 0 }; path->address().toString(pathStr); - // int pathIdx = getNominatedPathIdx(path); - // log("incoming packet via [%d] [id=%llx, len=%d, verb=%d, flowId=%x]", pathIdx, packetId, payloadLength, verb, flowId); - // log("incoming packet via %s/%s (ls=%llx) [id=%llx, len=%d, verb=%d, flowId=%x]", getLink(path)->ifname().c_str(), pathStr, path->localSocket(), packetId, payloadLength, verb, flowId); - } - bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) && (verb != Packet::VERB_ACK) && (verb != Packet::VERB_QOS_MEASUREMENT)); - Mutex::Lock _l(_paths_m); - int pathIdx = getNominatedPathIdx(path); - if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { - return; - } - // Take note of the time that this previously-dead path received a packet - if (! _paths[pathIdx].alive) { - _paths[pathIdx].lastAliveToggle = now; - } + //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + //sprintf(traceMsg, "%s (bond) Incoming packet on link %s/%s from peer %llx [id=%llx, len=%d, verb=%d, flowId=%x]", + // OSUtils::humanReadableTimestamp().c_str(), getLink(path)->ifname().c_str(), pathStr, _peer->_id.address().toInt(), packetId, payloadLength, verb, flowId); + //RR->t->bondStateMessage(NULL, traceMsg); + bool isFrame = (verb == Packet::VERB_FRAME || verb == Packet::VERB_EXT_FRAME); + bool shouldRecord = (packetId & (ZT_QOS_ACK_DIVISOR - 1) + && (verb != Packet::VERB_ACK) + && (verb != Packet::VERB_QOS_MEASUREMENT)); if (isFrame || shouldRecord) { - if (_paths[pathIdx].allowed()) { - if (isFrame) { - ++(_paths[pathIdx].packetsIn); - _lastFrame = now; - } - if (shouldRecord) { - _paths[pathIdx].qosStatsIn[packetId] = now; - ++(_paths[pathIdx].packetsReceivedSinceLastQoS); - _paths[pathIdx].packetValiditySamples.push(true); - } + Mutex::Lock _l(_paths_m); + if (isFrame) { + ++(path->_packetsIn); + _lastFrame=now; + } + if (shouldRecord) { + path->ackStatsIn[packetId] = payloadLength; + ++(path->_packetsReceivedSinceLastAck); + path->qosStatsIn[packetId] = now; + ++(path->_packetsReceivedSinceLastQoS); + path->packetValiditySamples.push(true); } } - /** * Learn new flows and pro-actively create entries for them in the bond so * that the next time we send a packet out that is part of a flow we know * which path to use. */ - if ((flowId != ZT_QOS_NO_FLOW) && (_policy == ZT_BOND_POLICY_BALANCE_RR || _policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE)) { + if ((flowId != ZT_QOS_NO_FLOW) + && (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR + || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR + || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE)) { Mutex::Lock _l(_flows_m); SharedPtr flow; - if (! _flows.count(flowId)) { - flow = createFlow(pathIdx, flowId, 0, now); - } - else { + if (!_flows.count(flowId)) { + flow = createFlow(path, flowId, 0, now); + } else { flow = _flows[flowId]; } if (flow) { - flow->bytesIn += payloadLength; + flow->recordIncomingBytes(payloadLength); } } } -void Bond::receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t* rx_id, uint16_t* rx_ts) +void Bond::receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t *rx_id, uint16_t *rx_ts) { Mutex::Lock _l(_paths_m); - int pathIdx = getNominatedPathIdx(path); - if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { - return; - } - // char pathStr[64] = { 0 }; path->address().toString(pathStr); - // log("received QoS packet (sampling %d frames) via %s/%s", count, getLink(path)->ifname().c_str(), pathStr); + //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + //sprintf(traceMsg, "%s (qos) Received QoS packet sampling %d frames from peer %llx via %s/%s", + // OSUtils::humanReadableTimestamp().c_str(), count, _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); + //RR->t->bondStateMessage(NULL, traceMsg); // Look up egress times and compute latency values for each record - std::map::iterator it; - for (int j = 0; j < count; j++) { - it = _paths[pathIdx].qosStatsOut.find(rx_id[j]); - if (it != _paths[pathIdx].qosStatsOut.end()) { - _paths[pathIdx].latencySamples.push(((uint16_t)(now - it->second) - rx_ts[j]) / 2); - _paths[pathIdx].qosStatsOut.erase(it); + std::map::iterator it; + for (int j=0; jqosStatsOut.find(rx_id[j]); + if (it != path->qosStatsOut.end()) { + path->latencySamples.push(((uint16_t)(now - it->second) - rx_ts[j]) / 2); + path->qosStatsOut.erase(it); } } - _paths[pathIdx].qosRecordSize.push(count); + path->qosRecordSize.push(count); } -int32_t Bond::generateQoSPacket(int pathIdx, int64_t now, char* qosBuffer) +void Bond::receivedAck(const SharedPtr& path, int64_t now, int32_t ackedBytes) +{ + Mutex::Lock _l(_paths_m); + //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + //sprintf(traceMsg, "%s (qos) Received ACK packet for %d bytes from peer %llx via %s/%s", + // OSUtils::humanReadableTimestamp().c_str(), ackedBytes, _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); + //RR->t->bondStateMessage(NULL, traceMsg); + path->_lastAckReceived = now; + path->_unackedBytes = (ackedBytes > path->_unackedBytes) ? 0 : path->_unackedBytes - ackedBytes; + int64_t timeSinceThroughputEstimate = (now - path->_lastThroughputEstimation); + if (timeSinceThroughputEstimate >= throughputMeasurementInterval) { + // TODO: See if this floating point math can be reduced + uint64_t throughput = (uint64_t)((float)(path->_bytesAckedSinceLastThroughputEstimation) / ((float)timeSinceThroughputEstimate / (float)1000)); + throughput /= 1000; + if (throughput > 0.0) { + path->throughputSamples.push(throughput); + path->_throughputMax = throughput > path->_throughputMax ? throughput : path->_throughputMax; + } + path->_lastThroughputEstimation = now; + path->_bytesAckedSinceLastThroughputEstimation = 0; + } else { + path->_bytesAckedSinceLastThroughputEstimation += ackedBytes; + } +} + +int32_t Bond::generateQoSPacket(const SharedPtr& path, int64_t now, char *qosBuffer) { int32_t len = 0; - std::map::iterator it = _paths[pathIdx].qosStatsIn.begin(); - int i = 0; - int numRecords = std::min(_paths[pathIdx].packetsReceivedSinceLastQoS, ZT_QOS_TABLE_SIZE); - while (i < numRecords && it != _paths[pathIdx].qosStatsIn.end()) { + std::map::iterator it = path->qosStatsIn.begin(); + int i=0; + int numRecords = std::min(path->_packetsReceivedSinceLastQoS,ZT_QOS_TABLE_SIZE); + while (iqosStatsIn.end()) { uint64_t id = it->first; memcpy(qosBuffer, &id, sizeof(uint64_t)); - qosBuffer += sizeof(uint64_t); + qosBuffer+=sizeof(uint64_t); uint16_t holdingTime = (uint16_t)(now - it->second); memcpy(qosBuffer, &holdingTime, sizeof(uint16_t)); - qosBuffer += sizeof(uint16_t); - len += sizeof(uint64_t) + sizeof(uint16_t); - _paths[pathIdx].qosStatsIn.erase(it++); + qosBuffer+=sizeof(uint16_t); + len+=sizeof(uint64_t)+sizeof(uint16_t); + path->qosStatsIn.erase(it++); ++i; } return len; } -bool Bond::assignFlowToBondedPath(SharedPtr& flow, int64_t now) +bool Bond::assignFlowToBondedPath(SharedPtr &flow, int64_t now) { - char curPathStr[64] = { 0 }; + char traceMsg[256]; + char curPathStr[128]; unsigned int idx = ZT_MAX_PEER_NETWORK_PATHS; - if (_policy == ZT_BOND_POLICY_BALANCE_XOR) { - idx = abs((int)(flow->id % (_numBondedPaths))); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_bondIdxMap[idx]].p->localSocket()); - _paths[_bondIdxMap[idx]].p->address().toString(curPathStr); - flow->assignPath(_bondIdxMap[idx], now); - ++(_paths[_bondIdxMap[idx]].assignedFlowCount); + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) { + idx = abs((int)(flow->id() % (_numBondedPaths))); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_bondedIdx[idx]]->localSocket()); + _paths[_bondedIdx[idx]]->address().toString(curPathStr); + sprintf(traceMsg, "%s (balance-xor) Assigned outgoing flow %x to peer %llx to link %s/%s, %lu active flow(s)", + OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt(), link->ifname().c_str(), curPathStr, _flows.size()); + RR->t->bondStateMessage(NULL, traceMsg); + flow->assignPath(_paths[_bondedIdx[idx]],now); + ++(_paths[_bondedIdx[idx]]->_assignedFlowCount); } - if (_policy == ZT_BOND_POLICY_BALANCE_AWARE) { + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { unsigned char entropy; Utils::getSecureRandom(&entropy, 1); if (_totalBondUnderload) { entropy %= _totalBondUnderload; } - if (! _numBondedPaths) { - log("unable to assign flow %x (bond has no links)\n", flow->id); + if (!_numBondedPaths) { + sprintf(traceMsg, "%s (balance-aware) There are no bonded paths, cannot assign flow %x\n", + OSUtils::humanReadableTimestamp().c_str(), flow->id()); + RR->t->bondStateMessage(NULL, traceMsg); return false; } /* Since there may be scenarios where a path is removed before we can re-estimate @@ -534,17 +384,17 @@ bool Bond::assignFlowToBondedPath(SharedPtr& flow, int64_t now) value that we use to randomly assign among the surviving paths, otherwise we risk not being able to find a path to assign this flow to. */ int totalIncompleteAllocation = 0; - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p && _paths[i].bonded) { - totalIncompleteAllocation += _paths[i].allocation; + for(unsigned int i=0;ibonded()) { + totalIncompleteAllocation += _paths[i]->_allocation; } } entropy %= totalIncompleteAllocation; - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p && _paths[i].bonded) { - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); - _paths[i].p->address().toString(curPathStr); - uint8_t probabilitySegment = (_totalBondUnderload > 0) ? _paths[i].affinity : _paths[i].allocation; + for(unsigned int i=0;ibonded()) { + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + _paths[i]->address().toString(curPathStr); + uint8_t probabilitySegment = (_totalBondUnderload > 0) ? _paths[i]->_affinity : _paths[i]->_allocation; if (entropy <= probabilitySegment) { idx = i; break; @@ -553,35 +403,50 @@ bool Bond::assignFlowToBondedPath(SharedPtr& flow, int64_t now) } } if (idx < ZT_MAX_PEER_NETWORK_PATHS) { - flow->assignPath(idx, now); - ++(_paths[idx].assignedFlowCount); + if (flow->_assignedPath) { + flow->_previouslyAssignedPath = flow->_assignedPath; + } + flow->assignPath(_paths[idx],now); + ++(_paths[idx]->_assignedFlowCount); } else { - log("unable to assign out-flow %x (unknown reason)", flow->id); + fprintf(stderr, "could not assign flow?\n"); exit(0); // TODO: Remove for production return false; } } - if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { - if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { - log("unable to assign out-flow %x (no active backup link)", flow->id); + if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { + if (_abOverflowEnabled) { + flow->assignPath(_abPath, now); + } else { + sprintf(traceMsg, "%s (bond) Unable to assign outgoing flow %x to peer %llx, no active overflow link", + OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); + return false; } - flow->assignPath(_abPathIdx, now); } - _paths[flow->assignedPath].p->address().toString(curPathStr); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[flow->assignedPath].p->localSocket()); - log("assign out-flow %x to link %s/%s (%lu / %lu flows)", flow->id, link->ifname().c_str(), curPathStr, _paths[flow->assignedPath].assignedFlowCount, (unsigned long)_flows.size()); + flow->assignedPath()->address().toString(curPathStr); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, flow->assignedPath()->localSocket()); + sprintf(traceMsg, "%s (bond) Assigned outgoing flow %x to peer %llx to link %s/%s, %lu active flow(s)", + OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt(), link->ifname().c_str(), curPathStr, _flows.size()); + RR->t->bondStateMessage(NULL, traceMsg); return true; } -SharedPtr Bond::createFlow(int pathIdx, int32_t flowId, unsigned char entropy, int64_t now) +SharedPtr Bond::createFlow(const SharedPtr &path, int32_t flowId, unsigned char entropy, int64_t now) { - char curPathStr[64] = { 0 }; - if (! _numBondedPaths) { - log("unable to assign flow %x (bond has no links)\n", flowId); + char traceMsg[256]; + char curPathStr[128]; + // --- + if (!_numBondedPaths) { + sprintf(traceMsg, "%s (bond) There are no bonded paths to peer %llx, cannot assign flow %x\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), flowId); + RR->t->bondStateMessage(NULL, traceMsg); return SharedPtr(); } if (_flows.size() >= ZT_FLOW_MAX_COUNT) { - log("forget oldest flow (max flows reached: %d)\n", ZT_FLOW_MAX_COUNT); + sprintf(traceMsg, "%s (bond) Maximum number of flows on bond to peer %llx reached (%d), forcibly forgetting oldest flow\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), ZT_FLOW_MAX_COUNT); + RR->t->bondStateMessage(NULL, traceMsg); forgetFlowsWhenNecessary(0, true, now); } SharedPtr flow = new Flow(flowId, now); @@ -591,18 +456,20 @@ SharedPtr Bond::createFlow(int pathIdx, int32_t flowId, unsigned cha * is received on a path but no flow exists, in this case we simply assign the path * that the remote peer chose for us. */ - if (pathIdx != ZT_MAX_PEER_NETWORK_PATHS) { - flow->assignPath(pathIdx, now); - _paths[pathIdx].p->address().toString(curPathStr); - _paths[pathIdx].assignedFlowCount++; - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[flow->assignedPath].p->localSocket()); - log("assign in-flow %x to link %s/%s (%lu / %lu)", flow->id, link->ifname().c_str(), curPathStr, _paths[pathIdx].assignedFlowCount, (unsigned long)_flows.size()); + if (path) { + flow->assignPath(path,now); + path->address().toString(curPathStr); + path->_assignedFlowCount++; + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, flow->assignedPath()->localSocket()); + sprintf(traceMsg, "%s (bond) Assigned incoming flow %x from peer %llx to link %s/%s, %lu active flow(s)", + OSUtils::humanReadableTimestamp().c_str(), flow->id(), _peer->_id.address().toInt(), link->ifname().c_str(), curPathStr, _flows.size()); + RR->t->bondStateMessage(NULL, traceMsg); } /** * Add a flow when no path was provided. This means that it is an outgoing packet * and that it is up to the local peer to decide how to load-balance its transmission. */ - else { + else if (!path) { assignFlowToBondedPath(flow, now); } return flow; @@ -610,22 +477,24 @@ SharedPtr Bond::createFlow(int pathIdx, int32_t flowId, unsigned cha void Bond::forgetFlowsWhenNecessary(uint64_t age, bool oldest, int64_t now) { - std::map >::iterator it = _flows.begin(); - std::map >::iterator oldestFlow = _flows.end(); + char traceMsg[256]; + std::map >::iterator it = _flows.begin(); + std::map >::iterator oldestFlow = _flows.end(); SharedPtr expiredFlow; - if (age) { // Remove by specific age + if (age) { // Remove by specific age while (it != _flows.end()) { if (it->second->age(now) > age) { - log("forget flow %x (age %llu) (%lu / %lu)", it->first, (unsigned long long)it->second->age(now), _paths[it->second->assignedPath].assignedFlowCount, (unsigned long)(_flows.size() - 1)); - _paths[it->second->assignedPath].assignedFlowCount--; + sprintf(traceMsg, "%s (bond) Forgetting flow %x between this node and peer %llx, %lu active flow(s)", + OSUtils::humanReadableTimestamp().c_str(), it->first, _peer->_id.address().toInt(), (_flows.size()-1)); + RR->t->bondStateMessage(NULL, traceMsg); + it->second->assignedPath()->_assignedFlowCount--; it = _flows.erase(it); - } - else { + } else { ++it; } } } - else if (oldest) { // Remove single oldest by natural expiration + else if (oldest) { // Remove single oldest by natural expiration uint64_t maxAge = 0; while (it != _flows.end()) { if (it->second->age(now) > maxAge) { @@ -635,302 +504,383 @@ void Bond::forgetFlowsWhenNecessary(uint64_t age, bool oldest, int64_t now) ++it; } if (oldestFlow != _flows.end()) { - log("forget oldest flow %x (age %llu) (total flows: %lu)", oldestFlow->first, (unsigned long long)oldestFlow->second->age(now), (unsigned long)(_flows.size() - 1)); - _paths[oldestFlow->second->assignedPath].assignedFlowCount--; + sprintf(traceMsg, "%s (bond) Forgetting oldest flow %x (of age %llu) between this node and peer %llx, %lu active flow(s)", + OSUtils::humanReadableTimestamp().c_str(), oldestFlow->first, oldestFlow->second->age(now), _peer->_id.address().toInt(), (_flows.size()-1)); + RR->t->bondStateMessage(NULL, traceMsg); + oldestFlow->second->assignedPath()->_assignedFlowCount--; _flows.erase(oldestFlow); } } } -void Bond::processIncomingPathNegotiationRequest(uint64_t now, SharedPtr& path, int16_t remoteUtility) +void Bond::processIncomingPathNegotiationRequest(uint64_t now, SharedPtr &path, int16_t remoteUtility) { - char pathStr[64] = { 0 }; - if (_abLinkSelectMethod != ZT_BOND_RESELECTION_POLICY_OPTIMIZE) { + char traceMsg[256]; + if (_abLinkSelectMethod != ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { return; } Mutex::Lock _l(_paths_m); - int pathIdx = getNominatedPathIdx(path); - if (pathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + char pathStr[128]; + path->address().toString(pathStr); + if (!_lastPathNegotiationCheck) { return; } - _paths[pathIdx].p->address().toString(pathStr); - if (! _lastPathNegotiationCheck) { - return; - } - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[pathIdx].p->localSocket()); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, path->localSocket()); if (remoteUtility > _localUtility) { - _paths[pathIdx].p->address().toString(pathStr); - log("peer suggests alternate link %s/%s, remote utility (%d) greater than local utility (%d), switching to suggested link\n", link->ifname().c_str(), pathStr, remoteUtility, _localUtility); - negotiatedPathIdx = pathIdx; + char pathStr[128]; path->address().toString(pathStr); + sprintf(traceMsg, "%s (bond) Peer %llx suggests using alternate link %s/%s. Remote utility (%d) is GREATER than local utility (%d), switching to said link\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr, remoteUtility, _localUtility); + RR->t->bondStateMessage(NULL, traceMsg); + negotiatedPath = path; } if (remoteUtility < _localUtility) { - log("peer suggests alternate link %s/%s, remote utility (%d) less than local utility (%d), not switching\n", link->ifname().c_str(), pathStr, remoteUtility, _localUtility); + sprintf(traceMsg, "%s (bond) Peer %llx suggests using alternate link %s/%s. Remote utility (%d) is LESS than local utility (%d), not switching\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr, remoteUtility, _localUtility); + RR->t->bondStateMessage(NULL, traceMsg); } if (remoteUtility == _localUtility) { - log("peer suggests alternate link %s/%s, remote utility (%d) equal to local utility (%d)\n", link->ifname().c_str(), pathStr, remoteUtility, _localUtility); + sprintf(traceMsg, "%s (bond) Peer %llx suggests using alternate link %s/%s. Remote utility (%d) is equal to local utility (%d)\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr, remoteUtility, _localUtility); + RR->t->bondStateMessage(NULL, traceMsg); if (_peer->_id.address().toInt() > RR->node->identity().address().toInt()) { - log("agree with peer to use alternate link %s/%s\n", link->ifname().c_str(), pathStr); - negotiatedPathIdx = pathIdx; - } - else { - log("ignore petition from peer to use alternate link %s/%s\n", link->ifname().c_str(), pathStr); + sprintf(traceMsg, "%s (bond) Agreeing with peer %llx to use alternate link %s/%s\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr); + RR->t->bondStateMessage(NULL, traceMsg); + negotiatedPath = path; + } else { + sprintf(traceMsg, "%s (bond) Ignoring petition from peer %llx to use alternate link %s/%s\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), link->ifname().c_str(), pathStr); + RR->t->bondStateMessage(NULL, traceMsg); } } } -void Bond::pathNegotiationCheck(void* tPtr, int64_t now) +void Bond::pathNegotiationCheck(void *tPtr, const int64_t now) { - char pathStr[64] = { 0 }; + char pathStr[128]; int maxInPathIdx = ZT_MAX_PEER_NETWORK_PATHS; int maxOutPathIdx = ZT_MAX_PEER_NETWORK_PATHS; uint64_t maxInCount = 0; uint64_t maxOutCount = 0; - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) { + for(unsigned int i=0;i maxInCount) { - maxInCount = _paths[i].packetsIn; + if (_paths[i]->_packetsIn > maxInCount) { + maxInCount = _paths[i]->_packetsIn; maxInPathIdx = i; } - if (_paths[i].packetsOut > maxOutCount) { - maxOutCount = _paths[i].packetsOut; + if (_paths[i]->_packetsOut > maxOutCount) { + maxOutCount = _paths[i]->_packetsOut; maxOutPathIdx = i; } - _paths[i].resetPacketCounts(); + _paths[i]->resetPacketCounts(); } - bool _peerLinksSynchronized = ((maxInPathIdx != ZT_MAX_PEER_NETWORK_PATHS) && (maxOutPathIdx != ZT_MAX_PEER_NETWORK_PATHS) && (maxInPathIdx != maxOutPathIdx)) ? false : true; + bool _peerLinksSynchronized = ((maxInPathIdx != ZT_MAX_PEER_NETWORK_PATHS) + && (maxOutPathIdx != ZT_MAX_PEER_NETWORK_PATHS) + && (maxInPathIdx != maxOutPathIdx)) ? false : true; /** * Determine utility and attempt to petition remote peer to switch to our chosen path */ - if (! _peerLinksSynchronized) { - _localUtility = _paths[maxOutPathIdx].failoverScore - _paths[maxInPathIdx].failoverScore; - if (_paths[maxOutPathIdx].negotiated) { - _localUtility -= ZT_BOND_FAILOVER_HANDICAP_NEGOTIATED; + if (!_peerLinksSynchronized) { + _localUtility = _paths[maxOutPathIdx]->_failoverScore - _paths[maxInPathIdx]->_failoverScore; + if (_paths[maxOutPathIdx]->_negotiated) { + _localUtility -= ZT_MULTIPATH_FAILOVER_HANDICAP_NEGOTIATED; } if ((now - _lastSentPathNegotiationRequest) > ZT_PATH_NEGOTIATION_CUTOFF_TIME) { - // fprintf(stderr, "BT: (sync) it's been long enough, sending more requests.\n"); + //fprintf(stderr, "BT: (sync) it's been long enough, sending more requests.\n"); _numSentPathNegotiationRequests = 0; } if (_numSentPathNegotiationRequests < ZT_PATH_NEGOTIATION_TRY_COUNT) { if (_localUtility >= 0) { - // fprintf(stderr, "BT: (sync) paths appear to be out of sync (utility=%d)\n", _localUtility); - sendPATH_NEGOTIATION_REQUEST(tPtr, _paths[maxOutPathIdx].p); + //fprintf(stderr, "BT: (sync) paths appear to be out of sync (utility=%d)\n", _localUtility); + sendPATH_NEGOTIATION_REQUEST(tPtr, _paths[maxOutPathIdx]); ++_numSentPathNegotiationRequests; _lastSentPathNegotiationRequest = now; - _paths[maxOutPathIdx].p->address().toString(pathStr); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[maxOutPathIdx].p->localSocket()); - // fprintf(stderr, "sending request to use %s on %s, ls=%llx, utility=%d\n", pathStr, link->ifname().c_str(), _paths[maxOutPathIdx].p->localSocket(), _localUtility); + _paths[maxOutPathIdx]->address().toString(pathStr); + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[maxOutPathIdx]->localSocket()); + //fprintf(stderr, "sending request to use %s on %s, ls=%llx, utility=%d\n", pathStr, link->ifname().c_str(), _paths[maxOutPathIdx]->localSocket(), _localUtility); } } /** * Give up negotiating and consider switching */ - else if ((now - _lastSentPathNegotiationRequest) > (2 * ZT_BOND_OPTIMIZE_INTERVAL)) { + else if ((now - _lastSentPathNegotiationRequest) > (2 * ZT_PATH_NEGOTIATION_CHECK_INTERVAL)) { if (_localUtility == 0) { // There's no loss to us, just switch without sending a another request - // fprintf(stderr, "BT: (sync) giving up, switching to remote peer's path.\n"); - negotiatedPathIdx = maxInPathIdx; + //fprintf(stderr, "BT: (sync) giving up, switching to remote peer's path.\n"); + negotiatedPath = _paths[maxInPathIdx]; } } } } -void Bond::sendPATH_NEGOTIATION_REQUEST(void* tPtr, int pathIdx) +void Bond::sendPATH_NEGOTIATION_REQUEST(void *tPtr, const SharedPtr &path) { - char pathStr[64] = { 0 }; - _paths[pathIdx].p->address().toString(pathStr); - log("send link negotiation request to peer via link %s/%s, local utility is %d", getLink(_paths[pathIdx].p)->ifname().c_str(), pathStr, _localUtility); - if (_abLinkSelectMethod != ZT_BOND_RESELECTION_POLICY_OPTIMIZE) { + char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + sprintf(traceMsg, "%s (bond) Sending link negotiation request to peer %llx via link %s/%s, local utility is %d", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr, _localUtility); + RR->t->bondStateMessage(NULL, traceMsg); + if (_abLinkSelectMethod != ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { return; } - Packet outp(_peer->_id.address(), RR->identity.address(), Packet::VERB_PATH_NEGOTIATION_REQUEST); + Packet outp(_peer->_id.address(),RR->identity.address(),Packet::VERB_PATH_NEGOTIATION_REQUEST); outp.append(_localUtility); - if (_paths[pathIdx].p->address()) { - outp.armor(_peer->key(), false, _peer->aesKeysIfSupported()); - RR->node->putPacket(tPtr, _paths[pathIdx].p->localSocket(), _paths[pathIdx].p->address(), outp.data(), outp.size()); + if (path->address()) { + outp.armor(_peer->key(),false,_peer->aesKeysIfSupported()); + RR->node->putPacket(tPtr,path->localSocket(),path->address(),outp.data(),outp.size()); } } -void Bond::sendQOS_MEASUREMENT(void* tPtr, int pathIdx, int64_t localSocket, const InetAddress& atAddress, int64_t now) +void Bond::sendACK(void *tPtr, const SharedPtr &path,const int64_t localSocket, + const InetAddress &atAddress,int64_t now) { - char pathStr[64] = { 0 }; - _paths[pathIdx].p->address().toString(pathStr); - int64_t _now = RR->node->now(); - Packet outp(_peer->_id.address(), RR->identity.address(), Packet::VERB_QOS_MEASUREMENT); + Packet outp(_peer->_id.address(),RR->identity.address(),Packet::VERB_ACK); + int32_t bytesToAck = 0; + std::map::iterator it = path->ackStatsIn.begin(); + while (it != path->ackStatsIn.end()) { + bytesToAck += it->second; + ++it; + } + //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + //sprintf(traceMsg, "%s (qos) Sending ACK packet for %d bytes to peer %llx via link %s/%s", + // OSUtils::humanReadableTimestamp().c_str(), bytesToAck, _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); + //RR->t->bondStateMessage(NULL, traceMsg); + outp.append(bytesToAck); + if (atAddress) { + outp.armor(_peer->key(),false,_peer->aesKeysIfSupported()); + RR->node->putPacket(tPtr,localSocket,atAddress,outp.data(),outp.size()); + } else { + RR->sw->send(tPtr,outp,false); + } + path->ackStatsIn.clear(); + path->_packetsReceivedSinceLastAck = 0; + path->_lastAckSent = now; +} + +void Bond::sendQOS_MEASUREMENT(void *tPtr,const SharedPtr &path,const int64_t localSocket, + const InetAddress &atAddress,int64_t now) +{ + //char traceMsg[256]; char pathStr[128]; path->address().toString(pathStr); + //sprintf(traceMsg, "%s (qos) Sending QoS packet to peer %llx via link %s/%s", + // OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(path)->ifname().c_str(), pathStr); + //RR->t->bondStateMessage(NULL, traceMsg); + const int64_t _now = RR->node->now(); + Packet outp(_peer->_id.address(),RR->identity.address(),Packet::VERB_QOS_MEASUREMENT); char qosData[ZT_QOS_MAX_PACKET_SIZE]; - int16_t len = generateQoSPacket(pathIdx, _now, qosData); - _overheadBytes += len; - if (len) { - outp.append(qosData, len); - if (atAddress) { - outp.armor(_peer->key(), false, _peer->aesKeysIfSupported()); - RR->node->putPacket(tPtr, localSocket, atAddress, outp.data(), outp.size()); - } - else { - RR->sw->send(tPtr, outp, false); - } - _paths[pathIdx].packetsReceivedSinceLastQoS = 0; - _paths[pathIdx].lastQoSMeasurement = now; + int16_t len = generateQoSPacket(path, _now,qosData); + outp.append(qosData,len); + if (atAddress) { + outp.armor(_peer->key(),false,_peer->aesKeysIfSupported()); + RR->node->putPacket(tPtr,localSocket,atAddress,outp.data(),outp.size()); + } else { + RR->sw->send(tPtr,outp,false); } - // log("send QOS via link %s/%s (len=%d)", getLink(_paths[pathIdx].p)->ifname().c_str(), pathStr, len); + // Account for the fact that a VERB_QOS_MEASUREMENT was just sent. Reset timers. + path->_packetsReceivedSinceLastQoS = 0; + path->_lastQoSMeasurement = now; } -void Bond::processBackgroundBondTasks(void* tPtr, int64_t now) +void Bond::processBackgroundTasks(void *tPtr, const int64_t now) { - if (! _peer->_localMultipathSupported || (now - _lastBackgroundTaskCheck) < ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL) { + Mutex::Lock _l(_paths_m); + if (!_peer->_canUseMultipath || (now - _lastBackgroundTaskCheck) < ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL) { return; } _lastBackgroundTaskCheck = now; - Mutex::Lock _l(_paths_m); - curateBond(now, false); + // Compute dynamic path monitor timer interval + if (_linkMonitorStrategy == ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC) { + int suggestedMonitorInterval = (now - _lastFrame) / 100; + _dynamicPathMonitorInterval = std::min(ZT_PATH_HEARTBEAT_PERIOD, ((suggestedMonitorInterval > _bondMonitorInterval) ? suggestedMonitorInterval : _bondMonitorInterval)); + } + // TODO: Clarify and generalize this logic + if (_linkMonitorStrategy == ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC) { + _shouldCollectPathStatistics = true; + } + + // Memoize oft-used properties in the packet ingress/egress logic path + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { + // Required for real-time balancing + _shouldCollectPathStatistics = true; + } + if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { + if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_BETTER) { + // Required for judging suitability of primary link after recovery + _shouldCollectPathStatistics = true; + } + if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { + // Required for judging suitability of new candidate primary + _shouldCollectPathStatistics = true; + } + } + if ((now - _lastCheckUserPreferences) > 1000) { + _lastCheckUserPreferences = now; + applyUserPrefs(); + } + + curateBond(now,false); if ((now - _lastQualityEstimation) > _qualityEstimationInterval) { _lastQualityEstimation = now; estimatePathQuality(now); } - dumpInfo(now, false); + dumpInfo(now); - // Send ambient monitoring traffic - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p && _paths[i].allowed()) { - // ECHO (this is our bond's heartbeat) - if ((_monitorInterval > 0) && ((now - _paths[i].p->_lastOut) >= _monitorInterval)) { - if ((_peer->remoteVersionProtocol() >= 5) && (! ((_peer->remoteVersionMajor() == 1) && (_peer->remoteVersionMinor() == 1) && (_peer->remoteVersionRevision() == 0)))) { - Packet outp(_peer->address(), RR->identity.address(), Packet::VERB_ECHO); - outp.armor(_peer->key(), true, _peer->aesKeysIfSupported()); - RR->node->expectReplyTo(outp.packetId()); - RR->node->putPacket(tPtr, _paths[i].p->localSocket(), _paths[i].p->address(), outp.data(), outp.size()); - _overheadBytes += outp.size(); - char pathStr[64] = { 0 }; - _paths[i].p->address().toString(pathStr); - // log("send HELLO via link %s/%s (len=%d)", getLink(_paths[i].p)->ifname().c_str(), pathStr, outp.size()); + // Send QOS/ACK packets as needed + if (_shouldCollectPathStatistics) { + for(unsigned int i=0;iallowed()) { + if (_paths[i]->needsToSendQoS(now,_qosSendInterval)) { + sendQOS_MEASUREMENT(tPtr, _paths[i], _paths[i]->localSocket(), _paths[i]->address(), now); + } + if (_paths[i]->needsToSendAck(now,_ackSendInterval)) { + sendACK(tPtr, _paths[i], _paths[i]->localSocket(), _paths[i]->address(), now); } - } - // QOS - if (_paths[i].needsToSendQoS(now, _qosSendInterval)) { - sendQOS_MEASUREMENT(tPtr, i, _paths[i].p->localSocket(), _paths[i].p->address(), now); } } } // Perform periodic background tasks unique to each bonding policy - switch (_policy) { - case ZT_BOND_POLICY_ACTIVE_BACKUP: + switch (_bondingPolicy) + { + case ZT_BONDING_POLICY_ACTIVE_BACKUP: processActiveBackupTasks(tPtr, now); break; - case ZT_BOND_POLICY_BROADCAST: + case ZT_BONDING_POLICY_BROADCAST: break; - case ZT_BOND_POLICY_BALANCE_RR: - case ZT_BOND_POLICY_BALANCE_XOR: - case ZT_BOND_POLICY_BALANCE_AWARE: + case ZT_BONDING_POLICY_BALANCE_RR: + case ZT_BONDING_POLICY_BALANCE_XOR: + case ZT_BONDING_POLICY_BALANCE_AWARE: processBalanceTasks(now); break; default: break; } // Check whether or not a path negotiation needs to be performed - if (((now - _lastPathNegotiationCheck) > ZT_BOND_OPTIMIZE_INTERVAL) && _allowPathNegotiation) { + if (((now - _lastPathNegotiationCheck) > ZT_PATH_NEGOTIATION_CHECK_INTERVAL) && _allowPathNegotiation) { _lastPathNegotiationCheck = now; pathNegotiationCheck(tPtr, now); } } -void Bond::curateBond(int64_t now, bool rebuildBond) +void Bond::applyUserPrefs() { - char pathStr[64] = { 0 }; + for(unsigned int i=0;i sl = getLink(_paths[i]); + if (sl) { + if (sl->monitorInterval() == 0) { // If no interval was specified for this link, use more generic bond-wide interval + sl->setMonitorInterval(_bondMonitorInterval); + } + RR->bc->setMinReqPathMonitorInterval((sl->monitorInterval() < RR->bc->minReqPathMonitorInterval()) ? sl->monitorInterval() : RR->bc->minReqPathMonitorInterval()); + bool bFoundCommonLink = false; + SharedPtr commonLink =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + for(unsigned int j=0;jbc->getLinkBySocket(_policyAlias, _paths[j]->localSocket()) == commonLink) { + bFoundCommonLink = true; + } + } + } + _paths[i]->_monitorInterval = sl->monitorInterval(); + _paths[i]->_upDelay = sl->upDelay() ? sl->upDelay() : _upDelay; + _paths[i]->_downDelay = sl->downDelay() ? sl->downDelay() : _downDelay; + _paths[i]->_ipvPref = sl->ipvPref(); + _paths[i]->_mode = sl->mode(); + _paths[i]->_enabled = sl->enabled(); + _paths[i]->_onlyPathOnLink = !bFoundCommonLink; + } + } + if (_peer) { + _peer->_shouldCollectPathStatistics = _shouldCollectPathStatistics; + _peer->_bondingPolicy = _bondingPolicy; + } +} + +void Bond::curateBond(const int64_t now, bool rebuildBond) +{ + char traceMsg[256]; + char pathStr[128]; uint8_t tmpNumAliveLinks = 0; uint8_t tmpNumTotalLinks = 0; /** - * Update path state variables. State variables are used so that critical - * blocks that perform fast packet processing won't need to make as many - * function calls or computations. + * Update path states */ - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) { + for(unsigned int i=0;ialive(now, true)) { tmpNumAliveLinks++; } - - /** - * Determine alive-ness - */ - _paths[i].alive = (now - _paths[i].p->_lastIn) < _failoverInterval; - - /** - * Determine current eligibility - */ - bool currEligibility = false; - // Simple RX age (driven by packets of any type and gratuitous VERB_HELLOs) - bool acceptableAge = _paths[i].p->age(now) < (_failoverInterval + _downDelay); - // Whether we've waited long enough since the link last came online - bool satisfiedUpDelay = (now - _paths[i].lastAliveToggle) >= _upDelay; - // Whether this path is still in its trial period - bool inTrial = (now - _paths[i].whenNominated) < ZT_BOND_OPTIMIZE_INTERVAL; - // if (includeRefractoryPeriod && _paths[i].refractoryPeriod) { - // As long as the refractory period value has not fully drained this path is not eligible - // currEligibility = false; - //} - currEligibility = _paths[i].allowed() && ((acceptableAge && satisfiedUpDelay) || inTrial); - // log("[%d] allowed=%d, acceptableAge=%d, satisfiedUpDelay=%d, inTrial=%d ==== %d", i, _paths[i].allowed(), acceptableAge, satisfiedUpDelay, inTrial, currEligibility); - - /** - * Note eligibility state change (if any) and take appropriate action - */ - if (currEligibility != _paths[i].eligible) { - _paths[i].p->address().toString(pathStr); - if (currEligibility == 0) { - log("link %s/%s is no longer eligible", getLink(_paths[i].p)->ifname().c_str(), pathStr); - } - if (currEligibility == 1) { - log("link %s/%s is eligible", getLink(_paths[i].p)->ifname().c_str(), pathStr); - } - dumpPathStatus(now, i); + bool currEligibility = _paths[i]->eligible(now,_ackSendInterval); + if (currEligibility != _paths[i]->_lastEligibilityState) { + _paths[i]->address().toString(pathStr); + char traceMsg[256]; _paths[i]->address().toString(pathStr); + sprintf(traceMsg, "%s (bond) Eligibility of link %s/%s to peer %llx has changed from %d to %d", + OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), pathStr, _peer->_id.address().toInt(), _paths[i]->_lastEligibilityState, currEligibility); + RR->t->bondStateMessage(NULL, traceMsg); if (currEligibility) { rebuildBond = true; } - if (! currEligibility) { - _paths[i].adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, ! currEligibility); - if (_paths[i].bonded) { - _paths[i].bonded = false; - if (_allowFlowHashing) { - _paths[i].p->address().toString(pathStr); - log("link %s/%s was bonded, flow reallocation will occur soon", getLink(_paths[i].p)->ifname().c_str(), pathStr); - rebuildBond = true; - _paths[i].shouldReallocateFlows = _paths[i].bonded; - } + if (!currEligibility) { + _paths[i]->adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, !currEligibility); + if (_paths[i]->bonded()) { + char pathStr[128]; _paths[i]->address().toString(pathStr); + sprintf(traceMsg, "%s (bond) Link %s/%s to peer %llx was bonded, reallocation of its flows will occur soon", + OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), pathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); + rebuildBond = true; + _paths[i]->_shouldReallocateFlows = _paths[i]->bonded(); + _paths[i]->setBonded(false); + } else { + sprintf(traceMsg, "%s (bond) Link %s/%s to peer %llx was not bonded, no allocation consequences", + OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), pathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } } } if (currEligibility) { - _paths[i].adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, false); + _paths[i]->adjustRefractoryPeriod(now, _defaultPathRefractoryPeriod, false); } - _paths[i].eligible = currEligibility; + _paths[i]->_lastEligibilityState = currEligibility; } - - /** - * Determine health status to report to user - */ _numAliveLinks = tmpNumAliveLinks; _numTotalLinks = tmpNumTotalLinks; + + /* Determine health status to report to user */ + bool tmpHealthStatus = true; - if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { + if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { if (_numAliveLinks < 2) { - // Considered healthy if there is at least one backup link + // Considered healthy if there is at least one failover link tmpHealthStatus = false; } } - if (_policy == ZT_BOND_POLICY_BROADCAST) { + if (_bondingPolicy == ZT_BONDING_POLICY_BROADCAST) { if (_numAliveLinks < 1) { - // Considered healthy if we're able to send frames at all + // Considerd healthy if we're able to send frames at all tmpHealthStatus = false; } } - if ((_policy == ZT_BOND_POLICY_BALANCE_RR) || (_policy == ZT_BOND_POLICY_BALANCE_XOR) || (_policy == ZT_BOND_POLICY_BALANCE_AWARE)) { + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { if (_numAliveLinks < _numTotalLinks) { + // Considerd healthy if all known paths are alive, this should be refined to account for user bond config settings + tmpHealthStatus = false; + } + } + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) { + if (_numAliveLinks < _numTotalLinks) { + // Considerd healthy if all known paths are alive, this should be refined to account for user bond config settings + tmpHealthStatus = false; + } + } + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { + if (_numAliveLinks < _numTotalLinks) { + // Considerd healthy if all known paths are alive, this should be refined to account for user bond config settings tmpHealthStatus = false; } } @@ -938,195 +888,171 @@ void Bond::curateBond(int64_t now, bool rebuildBond) std::string healthStatusStr; if (tmpHealthStatus == true) { healthStatusStr = "HEALTHY"; - } - else { + } else { healthStatusStr = "DEGRADED"; } - log("bond is in a %s state (links: %d/%d)", healthStatusStr.c_str(), _numAliveLinks, _numTotalLinks); - dumpInfo(now, true); + sprintf(traceMsg, "%s (bond) Bond to peer %llx is in a %s state (%d/%d links)", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), healthStatusStr.c_str(), _numAliveLinks, _numTotalLinks); + RR->t->bondStateMessage(NULL, traceMsg); } _isHealthy = tmpHealthStatus; /** - * Curate the set of paths that are part of the bond proper. Select a set of paths + * Curate the set of paths that are part of the bond proper. Selects a single path * per logical link according to eligibility and user-specified constraints. */ - - if ((_policy == ZT_BOND_POLICY_BALANCE_RR) || (_policy == ZT_BOND_POLICY_BALANCE_XOR) || (_policy == ZT_BOND_POLICY_BALANCE_AWARE)) { - if (! _numBondedPaths) { + if ((_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) + || (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) + || (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE)) { + if (!_numBondedPaths) { rebuildBond = true; } + // TODO: Optimize if (rebuildBond) { - log("rebuilding bond"); - // TODO: Obey blacklisting int updatedBondedPathCount = 0; - // Build map associating paths with local physical links. Will be selected from in next step - std::map, std::vector > linkMap; - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p) { - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); - linkMap[link].push_back(i); + std::map,int> linkMap; + for (int i=0;iallowed() && (_paths[i]->eligible(now,_ackSendInterval) || !_numBondedPaths)) { + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + if (!linkMap.count(link)) { + linkMap[link] = i; + } + else { + bool overriden = false; + _paths[i]->address().toString(pathStr); + //fprintf(stderr, " link representative path already exists! (%s %s)\n", getLink(_paths[i])->ifname().c_str(), pathStr); + if (_paths[i]->preferred() && !_paths[linkMap[link]]->preferred()) { + // Override previous choice if preferred + if (_paths[linkMap[link]]->_assignedFlowCount) { + _paths[linkMap[link]]->_deprecated = true; + } + else { + _paths[linkMap[link]]->_deprecated = true; + _paths[linkMap[link]]->setBonded(false); + } + linkMap[link] = i; + overriden = true; + } + if ((_paths[i]->preferred() && _paths[linkMap[link]]->preferred()) + || (!_paths[i]->preferred() && !_paths[linkMap[link]]->preferred())) { + if (_paths[i]->preferenceRank() > _paths[linkMap[link]]->preferenceRank()) { + // Override if higher preference + if (_paths[linkMap[link]]->_assignedFlowCount) { + _paths[linkMap[link]]->_deprecated = true; + } + else { + _paths[linkMap[link]]->_deprecated = true; + _paths[linkMap[link]]->setBonded(false); + } + linkMap[link] = i; + } + } + } } } - // Re-form bond from link<->path map - std::map, std::vector >::iterator it = linkMap.begin(); - while (it != linkMap.end()) { - SharedPtr link = it->first; - int ipvPref = link->ipvPref(); - - // If user has no address type preference, then use every path we find on a link - if (ipvPref == 0) { - for (int j = 0; j < it->second.size(); j++) { - int idx = it->second.at(j); - if (! _paths[idx].p || ! _paths[idx].allowed()) { - continue; - } - addPathToBond(idx, updatedBondedPathCount); - ++updatedBondedPathCount; - _paths[idx].p->address().toString(pathStr); - log("add %s/%s (no user addr preference)", link->ifname().c_str(), pathStr); - } + std::map,int>::iterator it = linkMap.begin(); + for (int i=0; isecond.size(); j++) { - int idx = it->second.at(j); - if (! _paths[idx].p) { - continue; - } - if (! _paths[idx].allowed()) { - _paths[idx].p->address().toString(pathStr); - log("did not add %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); - continue; - } - if (! _paths[idx].eligible) { - continue; - } - addPathToBond(idx, updatedBondedPathCount); - ++updatedBondedPathCount; - _paths[idx].p->address().toString(pathStr); - log("add path %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); - } + _bondedIdx[i] = ZT_MAX_PEER_NETWORK_PATHS; + if (it != linkMap.end()) { + _bondedIdx[i] = it->second; + _paths[_bondedIdx[i]]->setBonded(true); + ++it; + ++updatedBondedPathCount; + _paths[_bondedIdx[i]]->address().toString(pathStr); + //fprintf(stderr, "setting i=%d, _bondedIdx[%d]=%d to bonded (%s %s)\n", i, i, _bondedIdx[i], getLink(_paths[_bondedIdx[i]])->ifname().c_str(), pathStr); } - // If the users prefers one address type to another, try to find at least - // one path of that type before considering others. - if (ipvPref == 46 || ipvPref == 64) { - bool foundPreferredPath = false; - // Search for preferred paths - for (int j = 0; j < it->second.size(); j++) { - int idx = it->second.at(j); - if (! _paths[idx].p || ! _paths[idx].eligible) { - continue; - } - if (_paths[idx].preferred() && _paths[idx].allowed()) { - addPathToBond(idx, updatedBondedPathCount); - ++updatedBondedPathCount; - _paths[idx].p->address().toString(pathStr); - log("add %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); - foundPreferredPath = true; - } - } - // Unable to find a path that matches user preference, settle for another address type - if (! foundPreferredPath) { - log("did not find first-choice path type on link %s (user preference %d)", link->ifname().c_str(), ipvPref); - for (int j = 0; j < it->second.size(); j++) { - int idx = it->second.at(j); - if (! _paths[idx].p || ! _paths[idx].eligible) { - continue; - } - addPathToBond(idx, updatedBondedPathCount); - ++updatedBondedPathCount; - _paths[idx].p->address().toString(pathStr); - log("add %s/%s (user addr preference %d)", link->ifname().c_str(), pathStr, ipvPref); - foundPreferredPath = true; - } - } - } - ++it; // Next link } _numBondedPaths = updatedBondedPathCount; - if (_policy == ZT_BOND_POLICY_BALANCE_RR) { - // Cause a RR reset since the current index might no longer be valid + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { + // Cause a RR reset since the currently used index might no longer be valid _rrPacketsSentOnCurrLink = _packetsPerLink; } } } } -void Bond::estimatePathQuality(int64_t now) +void Bond::estimatePathQuality(const int64_t now) { + char pathStr[128]; uint32_t totUserSpecifiedLinkSpeed = 0; - if (_numBondedPaths) { // Compute relative user-specified speeds of links - for (unsigned int i = 0; i < _numBondedPaths; ++i) { - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); - if (_paths[i].p && _paths[i].allowed()) { + if (_numBondedPaths) { // Compute relative user-specified speeds of links + for(unsigned int i=0;i<_numBondedPaths;++i) { + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + if (_paths[i] && _paths[i]->allowed()) { totUserSpecifiedLinkSpeed += link->speed(); } } - for (unsigned int i = 0; i < _numBondedPaths; ++i) { - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); - if (_paths[i].p && _paths[i].allowed()) { - link->setRelativeSpeed((uint8_t)round(((float)link->speed() / (float)totUserSpecifiedLinkSpeed) * 255)); + for(unsigned int i=0;i<_numBondedPaths;++i) { + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + if (_paths[i] && _paths[i]->allowed()) { + link->setRelativeSpeed(round( ((float)link->speed() / (float)totUserSpecifiedLinkSpeed) * 255)); } } } - float lat[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; - float pdv[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; - float plr[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; - float per[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; + float lat[ZT_MAX_PEER_NETWORK_PATHS]; + float pdv[ZT_MAX_PEER_NETWORK_PATHS]; + float plr[ZT_MAX_PEER_NETWORK_PATHS]; + float per[ZT_MAX_PEER_NETWORK_PATHS]; float maxLAT = 0; float maxPDV = 0; float maxPLR = 0; float maxPER = 0; - float quality[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; - uint8_t alloc[ZT_MAX_PEER_NETWORK_PATHS] = { 0 }; + float quality[ZT_MAX_PEER_NETWORK_PATHS]; + uint8_t alloc[ZT_MAX_PEER_NETWORK_PATHS]; float totQuality = 0.0f; + memset(&lat, 0, sizeof(lat)); + memset(&pdv, 0, sizeof(pdv)); + memset(&plr, 0, sizeof(plr)); + memset(&per, 0, sizeof(per)); + memset(&quality, 0, sizeof(quality)); + memset(&alloc, 0, sizeof(alloc)); + // Compute initial summary statistics - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p || ! _paths[i].allowed()) { + for(unsigned int i=0;iallowed()) { continue; } // Compute/Smooth average of real-world observations - _paths[i].latencyMean = _paths[i].latencySamples.mean(); - _paths[i].latencyVariance = _paths[i].latencySamples.stddev(); - _paths[i].packetErrorRatio = 1.0 - (_paths[i].packetValiditySamples.count() ? _paths[i].packetValiditySamples.mean() : 1.0); + _paths[i]->_latencyMean = _paths[i]->latencySamples.mean(); + _paths[i]->_latencyVariance = _paths[i]->latencySamples.stddev(); + _paths[i]->_packetErrorRatio = 1.0 - (_paths[i]->packetValiditySamples.count() ? _paths[i]->packetValiditySamples.mean() : 1.0); if (userHasSpecifiedLinkSpeeds()) { // Use user-reported metrics - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); if (link) { - _paths[i].throughputMean = link->speed(); - _paths[i].throughputVariance = 0; + _paths[i]->_throughputMean = link->speed(); + _paths[i]->_throughputVariance = 0; } } // Drain unacknowledged QoS records - std::map::iterator it = _paths[i].qosStatsOut.begin(); + std::map::iterator it = _paths[i]->qosStatsOut.begin(); uint64_t currentLostRecords = 0; - while (it != _paths[i].qosStatsOut.end()) { - int qosRecordTimeout = 5000; //_paths[i].p->monitorInterval() * ZT_BOND_QOS_ACK_INTERVAL_MULTIPLIER * 8; + while (it != _paths[i]->qosStatsOut.end()) { + int qosRecordTimeout = 5000; //_paths[i]->monitorInterval() * ZT_MULTIPATH_QOS_ACK_INTERVAL_MULTIPLIER * 8; if ((now - it->second) >= qosRecordTimeout) { // Packet was lost - it = _paths[i].qosStatsOut.erase(it); + it = _paths[i]->qosStatsOut.erase(it); ++currentLostRecords; - } - else { - ++it; - } + } else { ++it; } } - quality[i] = 0; - totQuality = 0; + quality[i]=0; + totQuality=0; // Normalize raw observations according to sane limits and/or user specified values - lat[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].latencyMean, 0, _maxAcceptableLatency, 0, 1)); - pdv[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].latencyVariance, 0, _maxAcceptablePacketDelayVariance, 0, 1)); - plr[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].packetLossRatio, 0, _maxAcceptablePacketLossRatio, 0, 1)); - per[i] = 1.0 / expf(4 * Utils::normalize(_paths[i].packetErrorRatio, 0, _maxAcceptablePacketErrorRatio, 0, 1)); + lat[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_latencyMean, 0, _maxAcceptableLatency, 0, 1)); + pdv[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_latencyVariance, 0, _maxAcceptablePacketDelayVariance, 0, 1)); + plr[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_packetLossRatio, 0, _maxAcceptablePacketLossRatio, 0, 1)); + per[i] = 1.0 / expf(4*Utils::normalize(_paths[i]->_packetErrorRatio, 0, _maxAcceptablePacketErrorRatio, 0, 1)); // Record bond-wide maximums to determine relative values maxLAT = lat[i] > maxLAT ? lat[i] : maxLAT; maxPDV = pdv[i] > maxPDV ? pdv[i] : maxPDV; @@ -1134,74 +1060,81 @@ void Bond::estimatePathQuality(int64_t now) maxPER = per[i] > maxPER ? per[i] : maxPER; } // Convert metrics to relative quantities and apply contribution weights - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p && _paths[i].bonded) { - quality[i] += ((maxLAT > 0.0f ? lat[i] / maxLAT : 0.0f) * _qw[ZT_QOS_LAT_IDX]); - quality[i] += ((maxPDV > 0.0f ? pdv[i] / maxPDV : 0.0f) * _qw[ZT_QOS_PDV_IDX]); - quality[i] += ((maxPLR > 0.0f ? plr[i] / maxPLR : 0.0f) * _qw[ZT_QOS_PLR_IDX]); - quality[i] += ((maxPER > 0.0f ? per[i] / maxPER : 0.0f) * _qw[ZT_QOS_PER_IDX]); + for(unsigned int i=0;ibonded()) { + quality[i] += ((maxLAT > 0.0f ? lat[i] / maxLAT : 0.0f) * _qualityWeights[ZT_QOS_LAT_IDX]); + quality[i] += ((maxPDV > 0.0f ? pdv[i] / maxPDV : 0.0f) * _qualityWeights[ZT_QOS_PDV_IDX]); + quality[i] += ((maxPLR > 0.0f ? plr[i] / maxPLR : 0.0f) * _qualityWeights[ZT_QOS_PLR_IDX]); + quality[i] += ((maxPER > 0.0f ? per[i] / maxPER : 0.0f) * _qualityWeights[ZT_QOS_PER_IDX]); totQuality += quality[i]; } } // Normalize to 8-bit allocation values - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p && _paths[i].bonded) { - alloc[i] = (uint8_t)(std::ceil((quality[i] / totQuality) * (float)255)); - _paths[i].allocation = alloc[i]; + for(unsigned int i=0;ibonded()) { + alloc[i] = std::ceil((quality[i] / totQuality) * (float)255); + _paths[i]->_allocation = alloc[i]; } } } -void Bond::processBalanceTasks(int64_t now) +void Bond::processBalanceTasks(const int64_t now) { - char pathStr[64] = { 0 }; + char curPathStr[128]; + // TODO: Generalize int totalAllocation = 0; - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) { + for (int i=0;ibonded() && _paths[i]->eligible(now,_ackSendInterval)) { + totalAllocation+=_paths[i]->_allocation; } } - unsigned char minimumAllocationValue = (uint8_t)(0.33 * ((float)totalAllocation / (float)_numBondedPaths)); + unsigned char minimumAllocationValue = 0.33 * ((float)totalAllocation / (float)_numBondedPaths); if (_allowFlowHashing) { /** * Clean up and reset flows if necessary */ - if ((now - _lastFlowExpirationCheck) > ZT_PEER_PATH_EXPIRATION) { + if ((now - _lastFlowExpirationCheck) > ZT_MULTIPATH_FLOW_CHECK_INTERVAL) { Mutex::Lock _l(_flows_m); - forgetFlowsWhenNecessary(ZT_PEER_PATH_EXPIRATION, false, now); - std::map >::iterator it = _flows.begin(); + forgetFlowsWhenNecessary(ZT_MULTIPATH_FLOW_EXPIRATION_INTERVAL,false,now); + _lastFlowExpirationCheck = now; + } + if ((now - _lastFlowStatReset) > ZT_FLOW_STATS_RESET_INTERVAL) { + Mutex::Lock _l(_flows_m); + _lastFlowStatReset = now; + std::map >::iterator it = _flows.begin(); while (it != _flows.end()) { it->second->resetByteCounts(); ++it; } - _lastFlowExpirationCheck = now; } /** * Re-allocate flows from dead paths */ - if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) { + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { Mutex::Lock _l(_flows_m); - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) { + for (int i=0;iaddress().toString(pathStr); - log("reallocate flows from dead link %s/%s", getLink(_paths[i].p)->ifname().c_str(), pathStr); - std::map >::iterator flow_it = _flows.begin(); + if (!_paths[i]->eligible(now,_ackSendInterval) && _paths[i]->_shouldReallocateFlows) { + char traceMsg[256]; char pathStr[128]; _paths[i]->address().toString(pathStr); + sprintf(traceMsg, "%s (balance-*) Reallocating flows to peer %llx from dead link %s/%s to surviving links", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_paths[i])->ifname().c_str(), pathStr); + RR->t->bondStateMessage(NULL, traceMsg); + std::map >::iterator flow_it = _flows.begin(); while (flow_it != _flows.end()) { - if (_paths[flow_it->second->assignedPath].p == _paths[i].p) { - if (assignFlowToBondedPath(flow_it->second, now)) { - _paths[i].assignedFlowCount--; + if (flow_it->second->assignedPath() == _paths[i]) { + if(assignFlowToBondedPath(flow_it->second, now)) { + _paths[i]->_assignedFlowCount--; } } ++flow_it; } - _paths[i].shouldReallocateFlows = false; + _paths[i]->_shouldReallocateFlows = false; } } } @@ -1209,91 +1142,173 @@ void Bond::processBalanceTasks(int64_t now) * Re-allocate flows from under-performing * NOTE: This could be part of the above block but was kept separate for clarity. */ - if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) { + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR || _bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { Mutex::Lock _l(_flows_m); - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) { + for (int i=0;iaddress().toString(pathStr); - log("reallocate flows from under-performing link %s/%s\n", getLink(_paths[i].p)->ifname().c_str(), pathStr); - std::map >::iterator flow_it = _flows.begin(); + if (_paths[i] && _paths[i]->bonded() && _paths[i]->eligible(now,_ackSendInterval) && (_paths[i]->_allocation < minimumAllocationValue) && _paths[i]->_assignedFlowCount) { + _paths[i]->address().toString(curPathStr); + char traceMsg[256]; char pathStr[128]; _paths[i]->address().toString(pathStr); + sprintf(traceMsg, "%s (balance-*) Reallocating flows to peer %llx from under-performing link %s/%s\n", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_paths[i])->ifname().c_str(), pathStr); + RR->t->bondStateMessage(NULL, traceMsg); + std::map >::iterator flow_it = _flows.begin(); while (flow_it != _flows.end()) { - if (flow_it->second->assignedPath == _paths[i].p) { - if (assignFlowToBondedPath(flow_it->second, now)) { - _paths[i].assignedFlowCount--; + if (flow_it->second->assignedPath() == _paths[i]) { + if(assignFlowToBondedPath(flow_it->second, now)) { + _paths[i]->_assignedFlowCount--; } } ++flow_it; } - _paths[i].shouldReallocateFlows = false; + _paths[i]->_shouldReallocateFlows = false; } } } } + /** + * Tasks specific to (Balance Round Robin) + */ + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { + // Nothing + } + /** + * Tasks specific to (Balance XOR) + */ + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_XOR) { + // Nothing + } + /** + * Tasks specific to (Balance Aware) + */ + if (_bondingPolicy == ZT_BONDING_POLICY_BALANCE_AWARE) { + if (_allowFlowHashing) { + Mutex::Lock _l(_flows_m); + if (_flowRebalanceStrategy == ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE) { + // Do nothing here, this is taken care of in the more general case above. + } + if (_flowRebalanceStrategy == ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_OPPORTUNISTIC) { + // If the flow is temporarily inactive we should take this opportunity to re-assign the flow if needed. + } + if (_flowRebalanceStrategy == ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE) { + /** + * Return flows to the original path if it has once again become available + */ + if ((now - _lastFlowRebalance) > ZT_FLOW_REBALANCE_INTERVAL) { + std::map >::iterator flow_it = _flows.begin(); + while (flow_it != _flows.end()) { + if (flow_it->second->_previouslyAssignedPath && flow_it->second->_previouslyAssignedPath->eligible(now, _ackSendInterval) + && (flow_it->second->_previouslyAssignedPath->_allocation >= (minimumAllocationValue * 2))) { + //fprintf(stderr, "moving flow back onto its previous path assignment (based on eligibility)\n"); + (flow_it->second->_assignedPath->_assignedFlowCount)--; + flow_it->second->assignPath(flow_it->second->_previouslyAssignedPath,now); + (flow_it->second->_previouslyAssignedPath->_assignedFlowCount)++; + } + ++flow_it; + } + _lastFlowRebalance = now; + } + /** + * Return flows to the original path if it has once again become (performant) + */ + if ((now - _lastFlowRebalance) > ZT_FLOW_REBALANCE_INTERVAL) { + std::map >::iterator flow_it = _flows.begin(); + while (flow_it != _flows.end()) { + if (flow_it->second->_previouslyAssignedPath && flow_it->second->_previouslyAssignedPath->eligible(now, _ackSendInterval) + && (flow_it->second->_previouslyAssignedPath->_allocation >= (minimumAllocationValue * 2))) { + //fprintf(stderr, "moving flow back onto its previous path assignment (based on performance)\n"); + (flow_it->second->_assignedPath->_assignedFlowCount)--; + flow_it->second->assignPath(flow_it->second->_previouslyAssignedPath,now); + (flow_it->second->_previouslyAssignedPath->_assignedFlowCount)++; + } + ++flow_it; + } + _lastFlowRebalance = now; + } + } + } + else if (!_allowFlowHashing) { + // Nothing + } + } } -void Bond::dequeueNextActiveBackupPath(uint64_t now) +void Bond::dequeueNextActiveBackupPath(const uint64_t now) { if (_abFailoverQueue.empty()) { return; } - _abPathIdx = _abFailoverQueue.front(); + _abPath = _abFailoverQueue.front(); _abFailoverQueue.pop_front(); _lastActiveBackupPathChange = now; - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p) { - _paths[i].resetPacketCounts(); + for (int i=0; iresetPacketCounts(); } } } bool Bond::abForciblyRotateLink() { - char prevPathStr[64]; - char curPathStr[64]; - if (_policy == ZT_BOND_POLICY_ACTIVE_BACKUP) { - int prevPathIdx = _abPathIdx; - _paths[_abPathIdx].p->address().toString(prevPathStr); + char traceMsg[256]; + char prevPathStr[128]; + char curPathStr[128]; + if (_bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { + SharedPtr prevPath = _abPath; + _abPath->address().toString(prevPathStr); dequeueNextActiveBackupPath(RR->node->now()); - _paths[_abPathIdx].p->address().toString(curPathStr); - log("forcibly rotate link from %s/%s to %s/%s", getLink(_paths[prevPathIdx].p)->ifname().c_str(), prevPathStr, getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Forcibly rotating peer %llx link from %s/%s to %s/%s", + OSUtils::humanReadableTimestamp().c_str(), + _peer->_id.address().toInt(), + getLink(prevPath)->ifname().c_str(), + prevPathStr, + getLink(_abPath)->ifname().c_str(), + curPathStr); + RR->t->bondStateMessage(NULL, traceMsg); return true; } return false; } -void Bond::processActiveBackupTasks(void* tPtr, int64_t now) +void Bond::processActiveBackupTasks(void *tPtr, const int64_t now) { - char pathStr[64] = { 0 }; - char prevPathStr[64]; - char curPathStr[64]; - int prevActiveBackupPathIdx = _abPathIdx; - int nonPreferredPathIdx; + char traceMsg[256]; + char pathStr[128]; + char prevPathStr[128]; + char curPathStr[128]; + + SharedPtr prevActiveBackupPath = _abPath; + SharedPtr nonPreferredPath; bool bFoundPrimaryLink = false; /** - * Generate periodic status report + * Generate periodic statuc report */ - if ((now - _lastBondStatusLog) > ZT_BOND_STATUS_INTERVAL) { + if ((now - _lastBondStatusLog) > ZT_MULTIPATH_BOND_STATUS_INTERVAL) { _lastBondStatusLog = now; - if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { - log("no active link"); - } - else if (_paths[_abPathIdx].p) { - _paths[_abPathIdx].p->address().toString(curPathStr); - log("active link is %s/%s, failover queue size is %zu", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); + if (_abPath) { + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Active link to peer %llx is %s/%s, failover queue size is %zu", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_abPath)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); + RR->t->bondStateMessage(NULL, traceMsg); + } else { + sprintf(traceMsg, "%s (active-backup) No active link to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } if (_abFailoverQueue.empty()) { - log("failover queue is empty, no longer fault-tolerant"); + sprintf(traceMsg, "%s (active-backup) Failover queue is empty, bond to peer %llx is NOT currently fault-tolerant", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } } - /** * Select initial "active" active-backup link */ - if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { + if (!_abPath) { /** * [Automatic mode] * The user has not explicitly specified links or their failover schedule, @@ -1302,17 +1317,20 @@ void Bond::processActiveBackupTasks(void* tPtr, int64_t now) * policy will assign it as the new active backup path. If the path fails it will * simply find the next eligible path. */ - if (! userHasSpecifiedLinks()) { - log("no user-specified links"); - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p && _paths[i].eligible) { - _paths[i].p->address().toString(curPathStr); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); + if (!userHasSpecifiedLinks()) { + sprintf(traceMsg, "%s (active-backup) No links to peer %llx specified. Searching...", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); RR->t->bondStateMessage(NULL, traceMsg); + for (int i=0; ieligible(now,_ackSendInterval)) { + _paths[i]->address().toString(curPathStr); + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); if (link) { - log("found eligible link %s/%s", getLink(_paths[i].p)->ifname().c_str(), curPathStr); - _abPathIdx = i; - break; + sprintf(traceMsg, "%s (active-backup) Found eligible link %s/%s to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } + _abPath = _paths[i]; + break; } } } @@ -1322,280 +1340,300 @@ void Bond::processActiveBackupTasks(void* tPtr, int64_t now) */ else if (userHasSpecifiedLinks()) { if (userHasSpecifiedPrimaryLink()) { - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) { + //sprintf(traceMsg, "%s (active-backup) Checking local.conf for user-specified primary link\n", OSUtils::humanReadableTimestamp().c_str()); + for (int i=0; i link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); - if (_paths[i].eligible && link->primary()) { - if (! _paths[i].preferred()) { - _paths[i].p->address().toString(curPathStr); + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + if (_paths[i]->eligible(now,_ackSendInterval) && link->primary()) { + if (!_paths[i]->preferred()) { + _paths[i]->address().toString(curPathStr); // Found path on primary link, take note in case we don't find a preferred path - nonPreferredPathIdx = i; + nonPreferredPath = _paths[i]; bFoundPrimaryLink = true; } - if (_paths[i].preferred()) { - _abPathIdx = i; - _paths[_abPathIdx].p->address().toString(curPathStr); + if (_paths[i]->preferred()) { + _abPath = _paths[i]; + _abPath->address().toString(curPathStr); + SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); bFoundPrimaryLink = true; - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_abPathIdx].p->localSocket()); - if (link) { - log("found preferred primary link %s/%s", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); - } - break; // Found preferred path on primary link + break; // Found preferred path %s on primary link } } } - if (bFoundPrimaryLink && nonPreferredPathIdx) { - log("found non-preferred primary link"); - _abPathIdx = nonPreferredPathIdx; + if (_abPath) { + _abPath->address().toString(curPathStr); + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _abPath->localSocket()); + if (link) { + sprintf(traceMsg, "%s (active-backup) Found preferred primary link %s/%s to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); + } } - if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { - log("user-designated primary link is not yet ready"); - // TODO: Should wait for some time (failover interval?) and then switch to spare link + else { + if (bFoundPrimaryLink && nonPreferredPath) { + sprintf(traceMsg, "%s (active-backup) Found non-preferred primary link to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); + _abPath = nonPreferredPath; + } + } + if (!_abPath) { + sprintf(traceMsg, "%s (active-backup) Designated primary link to peer %llx is not yet ready", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); + // TODO: Should wait for some time (failover interval?) and then swtich to spare link } } - else if (! userHasSpecifiedPrimaryLink()) { - log("user did not specify a primary link, select first available link"); - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p && _paths[i].eligible) { - _abPathIdx = i; + else if (!userHasSpecifiedPrimaryLink()) { + int _abIdx = ZT_MAX_PEER_NETWORK_PATHS; + sprintf(traceMsg, "%s (active-backup) User did not specify a primary link to peer %llx, selecting first available link", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); + for (int i=0; ieligible(now,_ackSendInterval)) { + _abIdx = i; break; } } - if (_abPathIdx != ZT_MAX_PEER_NETWORK_PATHS) { - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[_abPathIdx].p->localSocket()); + if (_abIdx == ZT_MAX_PEER_NETWORK_PATHS) { + // Unable to find a candidate next-best, no change + } + else { + _abPath = _paths[_abIdx]; + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _abPath->localSocket()); if (link) { - _paths[_abPathIdx].p->address().toString(curPathStr); - log("select non-primary link %s/%s", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Selected non-primary link %s/%s to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } } } } } - - // Short-circuit if we don't have an active link yet - if (_abPathIdx == ZT_MAX_PEER_NETWORK_PATHS) { - return; - } - - // Remove ineligible paths from the failover link queue - for (std::deque::iterator it(_abFailoverQueue.begin()); it != _abFailoverQueue.end();) { - if (_paths[(*it)].p && ! _paths[(*it)].eligible) { - _paths[(*it)].p->address().toString(curPathStr); - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[(*it)].p->localSocket()); - it = _abFailoverQueue.erase(it); - if (link) { - log("link %s/%s is now ineligible, removing from failover queue (%zu links in queue)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); + /** + * Update and maintain the active-backup failover queue + */ + if (_abPath) { + // Don't worry about the failover queue until we have an active link + // Remove ineligible paths from the failover link queue + for (std::list >::iterator it(_abFailoverQueue.begin()); it!=_abFailoverQueue.end();) { + if ((*it) && !(*it)->eligible(now,_ackSendInterval)) { + (*it)->address().toString(curPathStr); + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, (*it)->localSocket()); + it = _abFailoverQueue.erase(it); + if (link) { + sprintf(traceMsg, "%s (active-backup) Link %s/%s to peer %llx is now ineligible, removing from failover queue, there are %zu links in the queue", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); + RR->t->bondStateMessage(NULL, traceMsg); + } + } else { + ++it; } } - else { - ++it; - } - } - /** - * Failover instructions were provided by user, build queue according those as well as IPv - * preference, disregarding performance. - */ - if (userHasSpecifiedFailoverInstructions()) { /** - * Clear failover scores + * Failover instructions were provided by user, build queue according those as well as IPv + * preference, disregarding performance. */ - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p) { - _paths[i].failoverScore = 0; + if (userHasSpecifiedFailoverInstructions()) { + /** + * Clear failover scores + */ + for (int i=0; i_failoverScore = 0; + } } - } - // Follow user-specified failover instructions - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p || ! _paths[i].allowed() || ! _paths[i].eligible) { - continue; - } - SharedPtr link = RR->bc->getLinkBySocket(_policyAlias, _paths[i].p->localSocket()); - _paths[i].p->address().toString(pathStr); + // Follow user-specified failover instructions + for (int i=0; iallowed() || !_paths[i]->eligible(now,_ackSendInterval)) { + continue; + } + SharedPtr link =RR->bc->getLinkBySocket(_policyAlias, _paths[i]->localSocket()); + _paths[i]->address().toString(pathStr); - int failoverScoreHandicap = _paths[i].failoverScore; - if (_paths[i].preferred()) { - failoverScoreHandicap += ZT_BOND_FAILOVER_HANDICAP_PREFERRED; - } - if (link->primary()) { - // If using "optimize" primary re-select mode, ignore user link designations - failoverScoreHandicap += ZT_BOND_FAILOVER_HANDICAP_PRIMARY; - } - if (! _paths[i].failoverScore) { - // If we didn't inherit a failover score from a "parent" that wants to use this path as a failover - int newHandicap = failoverScoreHandicap ? failoverScoreHandicap : _paths[i].allocation; - _paths[i].failoverScore = newHandicap; - } - SharedPtr failoverLink; - if (link->failoverToLink().length()) { - failoverLink = RR->bc->getLinkByName(_policyAlias, link->failoverToLink()); - } - if (failoverLink) { - for (int j = 0; j < ZT_MAX_PEER_NETWORK_PATHS; j++) { - if (_paths[j].p && getLink(_paths[j].p) == failoverLink.ptr()) { - _paths[j].p->address().toString(pathStr); - int inheritedHandicap = failoverScoreHandicap - 10; - int newHandicap = _paths[j].failoverScore > inheritedHandicap ? _paths[j].failoverScore : inheritedHandicap; - if (! _paths[j].preferred()) { - newHandicap--; + int failoverScoreHandicap = _paths[i]->_failoverScore; + if (_paths[i]->preferred()) { + failoverScoreHandicap += ZT_MULTIPATH_FAILOVER_HANDICAP_PREFERRED; + } + if (link->primary()) { + // If using "optimize" primary reselect mode, ignore user link designations + failoverScoreHandicap += ZT_MULTIPATH_FAILOVER_HANDICAP_PRIMARY; + } + if (!_paths[i]->_failoverScore) { + // If we didn't inherit a failover score from a "parent" that wants to use this path as a failover + int newHandicap = failoverScoreHandicap ? failoverScoreHandicap : _paths[i]->_allocation; + _paths[i]->_failoverScore = newHandicap; + } + SharedPtr failoverLink; + if (link->failoverToLink().length()) { + failoverLink = RR->bc->getLinkByName(_policyAlias, link->failoverToLink()); + } + if (failoverLink) { + for (int j=0; jaddress().toString(pathStr); + int inheritedHandicap = failoverScoreHandicap - 10; + int newHandicap = _paths[j]->_failoverScore > inheritedHandicap ? _paths[j]->_failoverScore : inheritedHandicap; + if (!_paths[j]->preferred()) { + newHandicap--; + } + _paths[j]->_failoverScore = newHandicap; } - _paths[j].failoverScore = newHandicap; + } + } + if (_paths[i].ptr() != _abPath.ptr()) { + bool bFoundPathInQueue = false; + for (std::list >::iterator it(_abFailoverQueue.begin()); it!=_abFailoverQueue.end();++it) { + if (_paths[i].ptr() == (*it).ptr()) { + bFoundPathInQueue = true; + } + } + if (!bFoundPathInQueue) { + _abFailoverQueue.push_front(_paths[i]); + _paths[i]->address().toString(curPathStr); sprintf(traceMsg, "%s (active-backup) Added link %s/%s to peer %llx to failover queue, there are %zu links in the queue", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); + RR->t->bondStateMessage(NULL, traceMsg); } } } - if (_paths[i].p.ptr() != _paths[_abPathIdx].p.ptr()) { - bool bFoundPathInQueue = false; - for (std::deque::iterator it(_abFailoverQueue.begin()); it != _abFailoverQueue.end(); ++it) { - if (_paths[i].p.ptr() == _paths[(*it)].p.ptr()) { - bFoundPathInQueue = true; + } + /** + * No failover instructions provided by user, build queue according to performance + * and IPv preference. + */ + else if (!userHasSpecifiedFailoverInstructions()) { + for (int i=0; iallowed() + || !_paths[i]->eligible(now,_ackSendInterval)) { + continue; + } + int failoverScoreHandicap = 0; + if (_paths[i]->preferred()) { + failoverScoreHandicap = ZT_MULTIPATH_FAILOVER_HANDICAP_PREFERRED; + } + bool includeRefractoryPeriod = true; + if (!_paths[i]->eligible(now,includeRefractoryPeriod)) { + failoverScoreHandicap = -10000; + } + if (getLink(_paths[i])->primary() && _abLinkSelectMethod != ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE) { + // If using "optimize" primary reselect mode, ignore user link designations + failoverScoreHandicap = ZT_MULTIPATH_FAILOVER_HANDICAP_PRIMARY; + } + if (_paths[i].ptr() == negotiatedPath.ptr()) { + _paths[i]->_negotiated = true; + failoverScoreHandicap = ZT_MULTIPATH_FAILOVER_HANDICAP_NEGOTIATED; + } else { + _paths[i]->_negotiated = false; + } + _paths[i]->_failoverScore = _paths[i]->_allocation + failoverScoreHandicap; + if (_paths[i].ptr() != _abPath.ptr()) { + bool bFoundPathInQueue = false; + for (std::list >::iterator it(_abFailoverQueue.begin()); it!=_abFailoverQueue.end();++it) { + if (_paths[i].ptr() == (*it).ptr()) { + bFoundPathInQueue = true; + } + } + if (!bFoundPathInQueue) { + _abFailoverQueue.push_front(_paths[i]); + _paths[i]->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Added link %s/%s to peer %llx to failover queue, there are %zu links in the queue", + OSUtils::humanReadableTimestamp().c_str(), getLink(_paths[i])->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); + RR->t->bondStateMessage(NULL, traceMsg); } } - if (! bFoundPathInQueue) { - _abFailoverQueue.push_front(i); - _paths[i].p->address().toString(curPathStr); - log("add link %s/%s to failover queue (%zu links in queue)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); - addPathToBond(0, i); - } } } + _abFailoverQueue.sort(PathQualityComparator()); } - /** - * No failover instructions provided by user, build queue according to performance - * and IPv preference. - */ - else if (! userHasSpecifiedFailoverInstructions()) { - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p || ! _paths[i].allowed() || ! _paths[i].eligible) { - continue; - } - int failoverScoreHandicap = 0; - if (_paths[i].preferred()) { - failoverScoreHandicap = ZT_BOND_FAILOVER_HANDICAP_PREFERRED; - } - if (! _paths[i].eligible) { - failoverScoreHandicap = -10000; - } - if (getLink(_paths[i].p)->primary() && _abLinkSelectMethod != ZT_BOND_RESELECTION_POLICY_OPTIMIZE) { - // If using "optimize" primary re-select mode, ignore user link designations - failoverScoreHandicap = ZT_BOND_FAILOVER_HANDICAP_PRIMARY; - } - if (_paths[i].p.ptr() == _paths[negotiatedPathIdx].p.ptr()) { - _paths[i].negotiated = true; - failoverScoreHandicap = ZT_BOND_FAILOVER_HANDICAP_NEGOTIATED; - } - else { - _paths[i].negotiated = false; - } - _paths[i].failoverScore = _paths[i].allocation + failoverScoreHandicap; - if (_paths[i].p.ptr() != _paths[_abPathIdx].p.ptr()) { - bool bFoundPathInQueue = false; - for (std::deque::iterator it(_abFailoverQueue.begin()); it != _abFailoverQueue.end(); ++it) { - if (_paths[i].p.ptr() == _paths[(*it)].p.ptr()) { - bFoundPathInQueue = true; - } - } - if (! bFoundPathInQueue) { - _abFailoverQueue.push_front(i); - _paths[i].p->address().toString(curPathStr); - log("add link %s/%s to failover queue (%zu links in queue)", getLink(_paths[i].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); - addPathToBond(0, i); - } - } - } - } - // Sort queue based on performance - if (! _abFailoverQueue.empty()) { - for (int i = 0; i < _abFailoverQueue.size(); i++) { - int value_to_insert = _abFailoverQueue[i]; - int hole_position = i; - while (hole_position > 0 && (_abFailoverQueue[hole_position - 1] > value_to_insert)) { - _abFailoverQueue[hole_position] = _abFailoverQueue[hole_position - 1]; - hole_position = hole_position - 1; - } - _abFailoverQueue[hole_position] = value_to_insert; - } - } - /** * Short-circuit if we have no queued paths */ if (_abFailoverQueue.empty()) { return; } - /** - * Fulfill primary re-select obligations + * Fulfill primary reselect obligations */ - if (_paths[_abPathIdx].p && ! _paths[_abPathIdx].eligible) { // Implicit ZT_BOND_RESELECTION_POLICY_FAILURE - _paths[_abPathIdx].p->address().toString(curPathStr); - log("link %s/%s has failed, select link from failover queue (%zu links in queue)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr, _abFailoverQueue.size()); - if (! _abFailoverQueue.empty()) { + if (_abPath && !_abPath->eligible(now,_ackSendInterval)) { // Implicit ZT_MULTIPATH_RESELECTION_POLICY_FAILURE + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Link %s/%s to peer %llx has failed. Selecting new link from failover queue, there are %zu links in the queue", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt(), _abFailoverQueue.size()); + RR->t->bondStateMessage(NULL, traceMsg); + if (!_abFailoverQueue.empty()) { dequeueNextActiveBackupPath(now); - _paths[_abPathIdx].p->address().toString(curPathStr); - log("active link switched to %s/%s", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); - } - else { - log("failover queue is empty, no links to choose from"); + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Active link to peer %llx has been switched to %s/%s", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt(), getLink(_abPath)->ifname().c_str(), curPathStr); + RR->t->bondStateMessage(NULL, traceMsg); + } else { + sprintf(traceMsg, "%s (active-backup) Failover queue is empty. No links to peer %llx to choose from", + OSUtils::humanReadableTimestamp().c_str(), _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } } /** * Detect change to prevent flopping during later optimization step. */ - if (prevActiveBackupPathIdx != _abPathIdx) { + if (prevActiveBackupPath != _abPath) { _lastActiveBackupPathChange = now; } - if (_abLinkSelectMethod == ZT_BOND_RESELECTION_POLICY_ALWAYS) { - if (_paths[_abPathIdx].p && ! getLink(_paths[_abPathIdx].p)->primary() && getLink(_paths[_abFailoverQueue.front()].p)->primary()) { + if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS) { + if (_abPath && !getLink(_abPath)->primary() + && getLink(_abFailoverQueue.front())->primary()) { dequeueNextActiveBackupPath(now); - _paths[_abPathIdx].p->address().toString(curPathStr); - log("switch back to available primary link %s/%s (select: always)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Switching back to available primary link %s/%s to peer %llx [linkSelectionMethod = always]", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } } - if (_abLinkSelectMethod == ZT_BOND_RESELECTION_POLICY_BETTER) { - if (_paths[_abPathIdx].p && ! getLink(_paths[_abPathIdx].p)->primary()) { + if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_BETTER) { + if (_abPath && !getLink(_abPath)->primary()) { // Active backup has switched to "better" primary link according to re-select policy. - if (getLink(_paths[_abFailoverQueue.front()].p)->primary() && (_paths[_abFailoverQueue.front()].failoverScore > _paths[_abPathIdx].failoverScore)) { + if (getLink(_abFailoverQueue.front())->primary() + && (_abFailoverQueue.front()->_failoverScore > _abPath->_failoverScore)) { dequeueNextActiveBackupPath(now); - _paths[_abPathIdx].p->address().toString(curPathStr); - log("switch back to user-defined primary link %s/%s (select: better)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Switching back to user-defined primary link %s/%s to peer %llx [linkSelectionMethod = better]", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } } } - if (_abLinkSelectMethod == ZT_BOND_RESELECTION_POLICY_OPTIMIZE && ! _abFailoverQueue.empty()) { + if (_abLinkSelectMethod == ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE && !_abFailoverQueue.empty()) { /** * Implement link negotiation that was previously-decided */ - if (_paths[_abFailoverQueue.front()].negotiated) { + if (_abFailoverQueue.front()->_negotiated) { dequeueNextActiveBackupPath(now); - _paths[_abPathIdx].p->address().toString(prevPathStr); + _abPath->address().toString(prevPathStr); _lastPathNegotiationCheck = now; - _paths[_abPathIdx].p->address().toString(curPathStr); - log("switch negotiated link %s/%s (select: optimize)", getLink(_paths[_abPathIdx].p)->ifname().c_str(), curPathStr); + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Switching negotiated link %s/%s to peer %llx [linkSelectionMethod = optimize]", + OSUtils::humanReadableTimestamp().c_str(), getLink(_abPath)->ifname().c_str(), curPathStr, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } else { // Try to find a better path and automatically switch to it -- not too often, though. - if ((now - _lastActiveBackupPathChange) > ZT_BOND_OPTIMIZE_INTERVAL) { - if (! _abFailoverQueue.empty()) { - int newFScore = _paths[_abFailoverQueue.front()].failoverScore; - int prevFScore = _paths[_abPathIdx].failoverScore; + if ((now - _lastActiveBackupPathChange) > ZT_MULTIPATH_MIN_ACTIVE_BACKUP_AUTOFLOP_INTERVAL) { + if (!_abFailoverQueue.empty()) { + int newFScore = _abFailoverQueue.front()->_failoverScore; + int prevFScore = _abPath->_failoverScore; // Establish a minimum switch threshold to prevent flapping - int failoverScoreDifference = _paths[_abFailoverQueue.front()].failoverScore - _paths[_abPathIdx].failoverScore; - int thresholdQuantity = (int)(ZT_BOND_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD * (float)_paths[_abPathIdx].allocation); + int failoverScoreDifference = _abFailoverQueue.front()->_failoverScore - _abPath->_failoverScore; + int thresholdQuantity = (ZT_MULTIPATH_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD * (float)_abPath->_allocation); if ((failoverScoreDifference > 0) && (failoverScoreDifference > thresholdQuantity)) { - SharedPtr oldPath = _paths[_abPathIdx].p; - _paths[_abPathIdx].p->address().toString(prevPathStr); + SharedPtr oldPath = _abPath; + _abPath->address().toString(prevPathStr); dequeueNextActiveBackupPath(now); - _paths[_abPathIdx].p->address().toString(curPathStr); - log("ab", - "switch from %s/%s (score: %d) to better link %s/%s (score: %d) for peer %llx (select: optimize)", - getLink(oldPath)->ifname().c_str(), - prevPathStr, - prevFScore, - getLink(_paths[_abPathIdx].p)->ifname().c_str(), - curPathStr, - newFScore, - _peerId); + _abPath->address().toString(curPathStr); + sprintf(traceMsg, "%s (active-backup) Switching from %s/%s (fscore=%d) to better link %s/%s (fscore=%d) for peer %llx [linkSelectionMethod = optimize]", + OSUtils::humanReadableTimestamp().c_str(), getLink(oldPath)->ifname().c_str(), prevPathStr, prevFScore, getLink(_abPath)->ifname().c_str(), curPathStr, newFScore, _peer->_id.address().toInt()); + RR->t->bondStateMessage(NULL, traceMsg); } } } @@ -1603,132 +1641,165 @@ void Bond::processActiveBackupTasks(void* tPtr, int64_t now) } } -void Bond::setBondParameters(int policy, SharedPtr templateBond, bool useTemplate) +void Bond::setReasonableDefaults(int policy, SharedPtr templateBond, bool useTemplate) { - // Sanity check for policy + // If invalid bonding policy, try default + int _defaultBondingPolicy = BondController::defaultBondingPolicy(); + if (policy <= ZT_BONDING_POLICY_NONE || policy > ZT_BONDING_POLICY_BALANCE_AWARE) { + // If no default set, use NONE (effectively disabling this bond) + if (_defaultBondingPolicy < ZT_BONDING_POLICY_NONE || _defaultBondingPolicy > ZT_BONDING_POLICY_BALANCE_AWARE) { + _bondingPolicy= ZT_BONDING_POLICY_NONE; + } + _bondingPolicy= _defaultBondingPolicy; + } else { + _bondingPolicy= policy; + } - _defaultPolicy = (_defaultPolicy <= ZT_BOND_POLICY_NONE || _defaultPolicy > ZT_BOND_POLICY_BALANCE_AWARE) ? ZT_BOND_POLICY_NONE : _defaultPolicy; - _policy = (policy <= ZT_BOND_POLICY_NONE || policy > ZT_BOND_POLICY_BALANCE_AWARE) ? ZT_BOND_POLICY_NONE : _defaultPolicy; - - // Flows - - _lastFlowExpirationCheck = 0; - _lastFlowRebalance = 0; - _allowFlowHashing = false; - - // Path negotiation - - _lastSentPathNegotiationRequest = 0; - _lastPathNegotiationCheck = 0; - _allowPathNegotiation = false; - _pathNegotiationCutoffCount = 0; - _lastPathNegotiationReceived = 0; - _localUtility = 0; - - // QOS Verb (and related checks) - - _qosCutoffCount = 0; - _lastQoSRateCheck = 0; - _lastQualityEstimation = 0; - - // User preferences which may override the default bonding algorithm's behavior + _freeRandomByte = 0; _userHasSpecifiedPrimaryLink = false; _userHasSpecifiedFailoverInstructions = false; - _userHasSpecifiedLinkSpeeds = 0; - // Bond status - - _lastBondStatusLog = 0; - _lastSummaryDump = 0; _isHealthy = false; _numAliveLinks = 0; _numTotalLinks = 0; - _numBondedPaths = 0; - - // active-backup - - _lastActiveBackupPathChange = 0; - _abPathIdx = ZT_MAX_PEER_NETWORK_PATHS; - - // rr - - _rrPacketsSentOnCurrLink = 0; - _rrIdx = 0; - - // General parameters _downDelay = 0; _upDelay = 0; - _monitorInterval = 0; + _allowFlowHashing=false; + _bondMonitorInterval=0; + _shouldCollectPathStatistics=false; - // (Sane?) limits + // Path negotiation + _allowPathNegotiation=false; + _pathNegotiationCutoffCount=0; + _localUtility=0; - _maxAcceptableLatency = 100; - _maxAcceptablePacketDelayVariance = 50; - _maxAcceptablePacketLossRatio = 0.10f; - _maxAcceptablePacketErrorRatio = 0.10f; - - // General timers - - _lastFrame = 0; - _lastBackgroundTaskCheck = 0; - - // balance-aware + _numBondedPaths=0; + _rrPacketsSentOnCurrLink=0; + _rrIdx=0; _totalBondUnderload = 0; - _overheadBytes = 0; + _maxAcceptableLatency = 100; + _maxAcceptablePacketDelayVariance = 50; + _maxAcceptablePacketLossRatio = 0.10; + _maxAcceptablePacketErrorRatio = 0.10; + _userHasSpecifiedLinkSpeeds=0; + + /* ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_PASSIVE is the most conservative strategy and is + least likely to cause unexpected behavior */ + _flowRebalanceStrategy = ZT_MULTIPATH_FLOW_REBALANCE_STRATEGY_AGGRESSIVE; /** - * Policy-specific defaults + * Paths are actively monitored to provide a real-time quality/preference-ordered rapid failover queue. */ - switch (_policy) { - case ZT_BOND_POLICY_ACTIVE_BACKUP: - _abLinkSelectMethod = ZT_BOND_RESELECTION_POLICY_OPTIMIZE; + switch (policy) { + case ZT_BONDING_POLICY_ACTIVE_BACKUP: + _failoverInterval = 500; + _abLinkSelectMethod = ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE; + _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; + _qualityWeights[ZT_QOS_LAT_IDX] = 0.2f; + _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_PDV_IDX] = 0.2f; + _qualityWeights[ZT_QOS_PLR_IDX] = 0.2f; + _qualityWeights[ZT_QOS_PER_IDX] = 0.2f; + _qualityWeights[ZT_QOS_THR_IDX] = 0.2f; + _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; + _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; break; - case ZT_BOND_POLICY_BROADCAST: + /** + * All seemingly-alive paths are used. Paths are not actively monitored. + */ + case ZT_BONDING_POLICY_BROADCAST: _downDelay = 30000; _upDelay = 0; break; - case ZT_BOND_POLICY_BALANCE_RR: - _packetsPerLink = 64; + /** + * Paths are monitored to determine when/if one needs to be added or removed from the rotation + */ + case ZT_BONDING_POLICY_BALANCE_RR: + _failoverInterval = 3000; + _allowFlowHashing = false; + _packetsPerLink = 1024; + _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; + _qualityWeights[ZT_QOS_LAT_IDX] = 0.4f; + _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_PDV_IDX] = 0.2f; + _qualityWeights[ZT_QOS_PLR_IDX] = 0.1f; + _qualityWeights[ZT_QOS_PER_IDX] = 0.1f; + _qualityWeights[ZT_QOS_THR_IDX] = 0.1f; + _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; + _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; break; - case ZT_BOND_POLICY_BALANCE_XOR: + /** + * Path monitoring is used to determine the capacity of each + * path and where to place the next flow. + */ + case ZT_BONDING_POLICY_BALANCE_XOR: + _failoverInterval = 3000; + _upDelay = _bondMonitorInterval * 2; _allowFlowHashing = true; + _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; + _qualityWeights[ZT_QOS_LAT_IDX] = 0.4f; + _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_PDV_IDX] = 0.2f; + _qualityWeights[ZT_QOS_PLR_IDX] = 0.1f; + _qualityWeights[ZT_QOS_PER_IDX] = 0.1f; + _qualityWeights[ZT_QOS_THR_IDX] = 0.1f; + _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; + _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; break; - case ZT_BOND_POLICY_BALANCE_AWARE: + /** + * Path monitoring is used to determine the capacity of each + * path and where to place the next flow. Additionally, re-shuffling + * of flows may take place. + */ + case ZT_BONDING_POLICY_BALANCE_AWARE: + _failoverInterval = 3000; _allowFlowHashing = true; + _linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; + _qualityWeights[ZT_QOS_LAT_IDX] = 0.4f; + _qualityWeights[ZT_QOS_LTM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_PDV_IDX] = 0.4f; + _qualityWeights[ZT_QOS_PLR_IDX] = 0.2f; + _qualityWeights[ZT_QOS_PER_IDX] = 0.0f; + _qualityWeights[ZT_QOS_THR_IDX] = 0.0f; + _qualityWeights[ZT_QOS_THM_IDX] = 0.0f; + _qualityWeights[ZT_QOS_THV_IDX] = 0.0f; + _qualityWeights[ZT_QOS_SCP_IDX] = 0.0f; break; default: break; } - _qw[ZT_QOS_LAT_IDX] = 0.3f; - _qw[ZT_QOS_LTM_IDX] = 0.1f; - _qw[ZT_QOS_PDV_IDX] = 0.3f; - _qw[ZT_QOS_PLR_IDX] = 0.1f; - _qw[ZT_QOS_PER_IDX] = 0.1f; - _qw[ZT_QOS_SCP_IDX] = 0.1f; - - _failoverInterval = ZT_BOND_FAILOVER_DEFAULT_INTERVAL; - - /* If a user has specified custom parameters for this bonding policy, overlay them onto the defaults */ + /* If a user has specified custom parameters for this bonding policy, overlay + them onto the defaults that were previously set */ if (useTemplate) { _policyAlias = templateBond->_policyAlias; - _failoverInterval = templateBond->_failoverInterval >= ZT_BOND_FAILOVER_MIN_INTERVAL ? templateBond->_failoverInterval : ZT_BOND_FAILOVER_MIN_INTERVAL; + _failoverInterval = templateBond->_failoverInterval >= 250 ? templateBond->_failoverInterval : _failoverInterval; _downDelay = templateBond->_downDelay; _upDelay = templateBond->_upDelay; + if (templateBond->_linkMonitorStrategy == ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE + && templateBond->_failoverInterval != 0) { + //fprintf(stderr, "warning: passive path monitoring was specified, this will prevent failovers from happening in a timely manner.\n"); + } _abLinkSelectMethod = templateBond->_abLinkSelectMethod; - memcpy(_qw, templateBond->_qw, ZT_QOS_WEIGHT_SIZE * sizeof(float)); + memcpy(_qualityWeights, templateBond->_qualityWeights, ZT_QOS_WEIGHT_SIZE * sizeof(float)); } - - // Timer geometry - - _monitorInterval = _failoverInterval / ZT_BOND_ECHOS_PER_FAILOVER_INTERVAL; + /* Set timer geometries */ + _bondMonitorInterval = _failoverInterval / 3; + BondController::setMinReqPathMonitorInterval(_bondMonitorInterval); + _ackSendInterval = _failoverInterval; _qualityEstimationInterval = _failoverInterval * 2; - _qosSendInterval = _failoverInterval * 2; + _dynamicPathMonitorInterval = 0; + _ackCutoffCount = 0; + _qosSendInterval = _bondMonitorInterval * 4; _qosCutoffCount = 0; + throughputMeasurementInterval = _ackSendInterval * 2; _defaultPathRefractoryPeriod = 8000; } @@ -1736,54 +1807,27 @@ void Bond::setUserQualityWeights(float weights[], int len) { if (len == ZT_QOS_WEIGHT_SIZE) { float weightTotal = 0.0; - for (unsigned int i = 0; i < ZT_QOS_WEIGHT_SIZE; ++i) { + for (unsigned int i=0; i 0.99 && weightTotal < 1.01) { - memcpy(_qw, weights, len * sizeof(float)); + memcpy(_qualityWeights, weights, len * sizeof(float)); } } } +bool Bond::relevant() { + return false; +} + SharedPtr Bond::getLink(const SharedPtr& path) { return RR->bc->getLinkBySocket(_policyAlias, path->localSocket()); } -void Bond::dumpPathStatus(int64_t now, int pathIdx) +void Bond::dumpInfo(const int64_t now) { - char pathStr[64] = { 0 }; - _paths[pathIdx].p->address().toString(pathStr); - log("path status: [%2d] alive:%d, eli:%d, bonded:%d, flows:%6d, lat:%10.3f, jitter:%10.3f, error:%6.4f, loss:%6.4f, age:%6d --- (%s/%s)", - pathIdx, - _paths[pathIdx].alive, - _paths[pathIdx].eligible, - _paths[pathIdx].bonded, - _paths[pathIdx].assignedFlowCount, - _paths[pathIdx].latencyMean, - _paths[pathIdx].latencyVariance, - _paths[pathIdx].packetErrorRatio, - _paths[pathIdx].packetLossRatio, - _paths[pathIdx].p->age(now), - getLink(_paths[pathIdx].p)->ifname().c_str(), - pathStr); + // Omitted } -void Bond::dumpInfo(int64_t now, bool force) -{ - uint64_t timeSinceLastDump = now - _lastSummaryDump; - if (! force && timeSinceLastDump < ZT_BOND_STATUS_INTERVAL) { - return; - } - _lastSummaryDump = now; - float overhead = (_overheadBytes / (timeSinceLastDump / 1000.0f) / 1000.0f); - _overheadBytes = 0; - log("bond status: bp: %d, fi: %d, mi: %d, ud: %d, dd: %d, flows: %lu, ambient: %f KB/s", _policy, _failoverInterval, _monitorInterval, _upDelay, _downDelay, (unsigned long)_flows.size(), overhead); - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p) { - dumpPathStatus(now, i); - } - } -} - -} // namespace ZeroTier +} // namespace ZeroTier \ No newline at end of file diff --git a/node/Bond.hpp b/node/Bond.hpp index 90c80d974..697aee676 100644 --- a/node/Bond.hpp +++ b/node/Bond.hpp @@ -1,10 +1,10 @@ /* - * Copyright (c)2013-2021 ZeroTier, Inc. + * Copyright (c)2013-2020 ZeroTier, Inc. * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file in the project's root directory. * - * Change Date: 2026-01-01 + * Change Date: 2025-01-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2.0 of the Apache License. @@ -14,521 +14,46 @@ #ifndef ZT_BOND_HPP #define ZT_BOND_HPP -#include "../osdep/Phy.hpp" -#include "Packet.hpp" -#include "Path.hpp" -#include "RuntimeEnvironment.hpp" -#include "Trace.hpp" - -#include -#include -#include #include -/** - * Indices for the path quality weight vector - */ -enum ZT_BondQualityWeightIndex { ZT_QOS_LAT_IDX, ZT_QOS_LTM_IDX, ZT_QOS_PDV_IDX, ZT_QOS_PLR_IDX, ZT_QOS_PER_IDX, ZT_QOS_THR_IDX, ZT_QOS_THM_IDX, ZT_QOS_THV_IDX, ZT_QOS_AGE_IDX, ZT_QOS_SCP_IDX, ZT_QOS_WEIGHT_SIZE }; - -/** - * Multipath bonding policy - */ -enum ZT_BondBondingPolicy { - /** - * Normal operation. No fault tolerance, no load balancing - */ - ZT_BOND_POLICY_NONE = 0, - - /** - * Sends traffic out on only one path at a time. Configurable immediate - * fail-over. - */ - ZT_BOND_POLICY_ACTIVE_BACKUP = 1, - - /** - * Sends traffic out on all paths - */ - ZT_BOND_POLICY_BROADCAST = 2, - - /** - * Stripes packets across all paths - */ - ZT_BOND_POLICY_BALANCE_RR = 3, - - /** - * Packets destined for specific peers will always be sent over the same - * path. - */ - ZT_BOND_POLICY_BALANCE_XOR = 4, - - /** - * Balances flows among all paths according to path performance - */ - ZT_BOND_POLICY_BALANCE_AWARE = 5 -}; - -/** - * Multipath active re-selection policy (linkSelectMethod) - */ -enum ZT_BondLinkSelectMethod { - /** - * Primary link regains status as active link whenever it comes back up - * (default when links are explicitly specified) - */ - ZT_BOND_RESELECTION_POLICY_ALWAYS = 0, - - /** - * Primary link regains status as active link when it comes back up and - * (if) it is better than the currently-active link. - */ - ZT_BOND_RESELECTION_POLICY_BETTER = 1, - - /** - * Primary link regains status as active link only if the currently-active - * link fails. - */ - ZT_BOND_RESELECTION_POLICY_FAILURE = 2, - - /** - * The primary link can change if a superior path is detected. - * (default if user provides no fail-over guidance) - */ - ZT_BOND_RESELECTION_POLICY_OPTIMIZE = 3 -}; - -/** - * Mode of multipath link interface - */ -enum ZT_BondLinkMode { ZT_BOND_SLAVE_MODE_PRIMARY = 0, ZT_BOND_SLAVE_MODE_SPARE = 1 }; - -#include "../node/AtomicCounter.hpp" -#include "../node/SharedPtr.hpp" - -#include +#include "Path.hpp" +#include "Peer.hpp" +#include "../osdep/Link.hpp" +#include "Flow.hpp" namespace ZeroTier { -class Link { - friend class SharedPtr; - - public: - /** - * - * @param ifnameStr - * @param ipvPref - * @param speed - * @param enabled - * @param mode - * @param failoverToLinkStr - * @param userSpecifiedAlloc - */ - Link(std::string ifnameStr, uint8_t ipvPref, uint32_t speed, bool enabled, uint8_t mode, std::string failoverToLinkStr, float userSpecifiedAlloc) - : _ifnameStr(ifnameStr) - , _ipvPref(ipvPref) - , _speed(speed) - , _relativeSpeed(0) - , _enabled(enabled) - , _mode(mode) - , _failoverToLinkStr(failoverToLinkStr) - , _userSpecifiedAlloc(userSpecifiedAlloc) - , _isUserSpecified(false) - { - } - - /** - * @return The string representation of this link's underlying interface's system name. - */ - inline std::string ifname() - { - return _ifnameStr; - } - - /** - * @return Whether this link is designated as a primary. - */ - inline bool primary() - { - return _mode == ZT_BOND_SLAVE_MODE_PRIMARY; - } - - /** - * @return Whether this link is designated as a spare. - */ - inline bool spare() - { - return _mode == ZT_BOND_SLAVE_MODE_SPARE; - } - - /** - * @return The name of the link interface that should be used in the event of a failure. - */ - inline std::string failoverToLink() - { - return _failoverToLinkStr; - } - - /** - * @return Whether this link interface was specified by the user or auto-detected. - */ - inline bool isUserSpecified() - { - return _isUserSpecified; - } - - /** - * Signify that this link was specified by the user and not the result of auto-detection. - * - * @param isUserSpecified - */ - inline void setAsUserSpecified(bool isUserSpecified) - { - _isUserSpecified = isUserSpecified; - } - - /** - * @return Whether or not the user has specified failover instructions. - */ - inline bool userHasSpecifiedFailoverInstructions() - { - return _failoverToLinkStr.length(); - } - - /** - * @return The speed of the link relative to others in the bond. - */ - inline uint8_t relativeSpeed() - { - return _relativeSpeed; - } - - /** - * Sets the speed of the link relative to others in the bond. - * - * @param relativeSpeed The speed relative to the rest of the link. - */ - inline void setRelativeSpeed(uint8_t relativeSpeed) - { - _relativeSpeed = relativeSpeed; - } - - /** - * @return The absolute speed of the link (as specified by the user.) - */ - inline uint32_t speed() - { - return _speed; - } - - /** - * @return The address preference for this link (as specified by the user.) - */ - inline uint8_t ipvPref() - { - return _ipvPref; - } - - /** - * @return The mode (e.g. primary/spare) for this link (as specified by the user.) - */ - inline uint8_t mode() - { - return _mode; - } - - /** - * @return Whether this link is enabled or disabled - */ - inline uint8_t enabled() - { - return _enabled; - } - - private: - /** - * String representation of underlying interface's system name - */ - std::string _ifnameStr; - - /** - * What preference (if any) a user has for IP protocol version used in - * path aggregations. Preference is expressed in the order of the digits: - * - * 0: no preference - * 4: IPv4 only - * 6: IPv6 only - * 46: IPv4 over IPv6 - * 64: IPv6 over IPv4 - */ - uint8_t _ipvPref; - - /** - * User-specified speed of this link - */ - uint32_t _speed; - - /** - * Speed relative to other specified links (computed by Bond) - */ - uint8_t _relativeSpeed; - - /** - * Whether this link is enabled, or (disabled (possibly bad config)) - */ - uint8_t _enabled; - - /** - * Whether this link is designated as a primary, a spare, or no preference. - */ - uint8_t _mode; - - /** - * The specific name of the link to be used in the event that this - * link fails. - */ - std::string _failoverToLinkStr; - - /** - * User-specified allocation - */ - float _userSpecifiedAlloc; - - /** - * Whether or not this link was created as a result of manual user specification. This is - * important to know because certain policy decisions are dependent on whether the user - * intents to use a specific set of interfaces. - */ - bool _isUserSpecified; - - AtomicCounter __refCount; -}; - +class RuntimeEnvironment; class Link; -class Peer; - -class Bond { - public: - /** - * @return Whether this link is permitted to become a member of a bond. - */ - static bool linkAllowed(std::string& policyAlias, SharedPtr link); - - /** - * @return The minimum interval required to poll the active bonds to fulfill all active monitoring timing requirements. - */ - static int minReqMonitorInterval() - { - return _minReqMonitorInterval; - } - - /** - * @return Whether the bonding layer is currently set up to be used. - */ - static bool inUse() - { - return ! _bondPolicyTemplates.empty() || _defaultPolicy; - } - - /** - * @param basePolicyName Bonding policy name (See ZeroTierOne.h) - * @return The bonding policy code for a given human-readable bonding policy name - */ - static int getPolicyCodeByStr(const std::string& basePolicyName) - { - if (basePolicyName == "active-backup") { - return 1; - } - if (basePolicyName == "broadcast") { - return 2; - } - if (basePolicyName == "balance-rr") { - return 3; - } - if (basePolicyName == "balance-xor") { - return 4; - } - if (basePolicyName == "balance-aware") { - return 5; - } - return 0; // "none" - } - - /** - * @param policy Bonding policy code (See ZeroTierOne.h) - * @return The human-readable name for the given bonding policy code - */ - static std::string getPolicyStrByCode(int policy) - { - if (policy == 1) { - return "active-backup"; - } - if (policy == 2) { - return "broadcast"; - } - if (policy == 3) { - return "balance-rr"; - } - if (policy == 4) { - return "balance-xor"; - } - if (policy == 5) { - return "balance-aware"; - } - return "none"; - } - - /** - * Sets the default bonding policy for new or undefined bonds. - * - * @param bp Bonding policy - */ - static void setBondingLayerDefaultPolicy(uint8_t bp) - { - _defaultPolicy = bp; - } - - /** - * Sets the default (custom) bonding policy for new or undefined bonds. - * - * @param alias Human-readable string alias for bonding policy - */ - static void setBondingLayerDefaultPolicyStr(std::string alias) - { - _defaultPolicyStr = alias; - } - - /** - * Add a user-defined link to a given bonding policy. - * - * @param policyAlias User-defined custom name for variant of bonding policy - * @param link Pointer to new link definition - */ - static void addCustomLink(std::string& policyAlias, SharedPtr link); - - /** - * Add a user-defined bonding policy that is based on one of the standard types. - * - * @param newBond Pointer to custom Bond object - * @return Whether a uniquely-named custom policy was successfully added - */ - static bool addCustomPolicy(const SharedPtr& newBond); - - /** - * Assigns a specific bonding policy - * - * @param identity - * @param policyAlias - * @return - */ - static bool assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias); - - /** - * Get pointer to bond by a given peer ID - * - * @param peer Remote peer ID - * @return A pointer to the Bond - */ - static SharedPtr getBondByPeerId(int64_t identity); - - /** - * Add a new bond to the bond controller. - * - * @param renv Runtime environment - * @param peer Remote peer that this bond services - * @return A pointer to the newly created Bond - */ - static SharedPtr createTransportTriggeredBond(const RuntimeEnvironment* renv, const SharedPtr& peer); - - /** - * Periodically perform maintenance tasks for the bonding layer. - * - * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call - * @param now Current time - */ - static void processBackgroundTasks(void* tPtr, int64_t now); - - /** - * Gets a reference to a physical link definition given a policy alias and a local socket. - * - * @param policyAlias Policy in use - * @param localSocket Local source socket - * @return Physical link definition - */ - static SharedPtr getLinkBySocket(const std::string& policyAlias, uint64_t localSocket); - - /** - * Gets a reference to a physical link definition given its human-readable system name. - * - * @param policyAlias Policy in use - * @param ifname Alphanumeric human-readable name - * @return Physical link definition - */ - static SharedPtr getLinkByName(const std::string& policyAlias, const std::string& ifname); - - private: - static Phy* _phy; - - static Mutex _bonds_m; - static Mutex _links_m; - - /** - * The minimum required monitoring interval among all bonds - */ - static int _minReqMonitorInterval; - - /** - * The default bonding policy used for new bonds unless otherwise specified. - */ - static uint8_t _defaultPolicy; - - /** - * The default bonding policy used for new bonds unless otherwise specified. - */ - static std::string _defaultPolicyStr; - - /** - * All currently active bonds. - */ - static std::map > _bonds; - - /** - * Map of peers to custom bonding policies - */ - static std::map _policyTemplateAssignments; - - /** - * User-defined bonding policies (can be assigned to a peer) - */ - static std::map > _bondPolicyTemplates; - - /** - * Set of links defined for a given bonding policy - */ - static std::map > > _linkDefinitions; - - /** - * Set of link objects mapped to their physical interfaces - */ - static std::map > > _interfaceToLinkMap; - - struct NominatedPath; - struct Flow; +class Bond +{ friend class SharedPtr; friend class Peer; + friend class BondController; - public: - void dumpInfo(int64_t now, bool force); - void dumpPathStatus(int64_t now, int pathIdx); + struct PathQualityComparator + { + bool operator ()(const SharedPtr & a, const SharedPtr & b) + { + if(a->_failoverScore == b->_failoverScore) { + return a < b; + } + return a->_failoverScore > b->_failoverScore; + } + }; + +public: + + // TODO: Remove + bool _header; + int64_t _lastLogTS; + int64_t _lastPrintTS; + void dumpInfo(const int64_t now); + bool relevant(); SharedPtr getLink(const SharedPtr& path); - /** - * Constructor - * - * - */ - Bond(const RuntimeEnvironment* renv); - /** * Constructor. Creates a bond based off of ZT defaults * @@ -536,7 +61,7 @@ class Bond { * @param policy Bonding policy * @param peer */ - Bond(const RuntimeEnvironment* renv, int policy, const SharedPtr& peer); + Bond(const RuntimeEnvironment *renv, int policy, const SharedPtr& peer); /** * Constructor. For use when user intends to manually specify parameters @@ -545,7 +70,7 @@ class Bond { * @param policyAlias * @param peer */ - Bond(const RuntimeEnvironment* renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer); + Bond(const RuntimeEnvironment *renv, std::string& basePolicy, std::string& policyAlias, const SharedPtr& peer); /** * Constructor. Creates a bond based off of a user-defined bond template @@ -554,15 +79,12 @@ class Bond { * @param original * @param peer */ - Bond(const RuntimeEnvironment* renv, SharedPtr originalBond, const SharedPtr& peer); + Bond(const RuntimeEnvironment *renv, SharedPtr originalBond, const SharedPtr& peer); /** * @return The human-readable name of the bonding policy */ - std::string policyAlias() - { - return _policyAlias; - } + std::string policyAlias() { return _policyAlias; } /** * Inform the bond about the path that its peer (owning object) just learned about. @@ -572,16 +94,12 @@ class Bond { * @param path Newly-learned Path which should now be handled by the Bond * @param now Current time */ - void nominatePathToBond(const SharedPtr& path, int64_t now); + void nominatePath(const SharedPtr& path, int64_t now); /** - * Add a nominated path to the bond. This merely maps the index from the nominated set - * to a smaller set and sets the path's bonded flag to true. - * - * @param nominatedIdx The index in the nominated set - * @param bondedIdx The index in the bonded set (subset of nominated) + * Propagate and memoize often-used bonding preferences for each path */ - void addPathToBond(int nominatedIdx, int bondedIdx); + void applyUserPrefs(); /** * Check path states and perform bond rebuilds if needed. @@ -589,7 +107,7 @@ class Bond { * @param now Current time * @param rebuild Whether or not the bond should be reconstructed. */ - void curateBond(int64_t now, bool rebuild); + void curateBond(const int64_t now, bool rebuild); /** * Periodically perform statistical summaries of quality metrics for all paths. @@ -617,7 +135,8 @@ class Bond { * @param flowId Flow ID * @param now Current time */ - void recordOutgoingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now); + void recordOutgoingPacket(const SharedPtr &path, uint64_t packetId, + uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now); /** * Process the contents of an inbound VERB_QOS_MEASUREMENT to gather path quality observations. @@ -627,7 +146,16 @@ class Bond { * @param rx_id table of packet IDs * @param rx_ts table of holding times */ - void receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t* rx_id, uint16_t* rx_ts); + void receivedQoS(const SharedPtr& path, int64_t now, int count, uint64_t *rx_id, uint16_t *rx_ts); + + /** + * Process the contents of an inbound VERB_ACK to gather path quality observations. + * + * @param path Path over which packet was received + * @param now Current time + * @param ackedBytes Number of bytes ACKed by this VERB_ACK + */ + void receivedAck(const SharedPtr& path, int64_t now, int32_t ackedBytes); /** * Generate the contents of a VERB_QOS_MEASUREMENT packet. @@ -636,7 +164,7 @@ class Bond { * @param qosBuffer destination buffer * @return Size of payload */ - int32_t generateQoSPacket(int pathIdx, int64_t now, char* qosBuffer); + int32_t generateQoSPacket(const SharedPtr& path, int64_t now, char *qosBuffer); /** * Record statistics for an inbound packet. @@ -648,7 +176,8 @@ class Bond { * @param flowId Flow ID * @param now Current time */ - void recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, Packet::Verb verb, int32_t flowId, int64_t now); + void recordIncomingPacket(const SharedPtr& path, uint64_t packetId, uint16_t payloadLength, + Packet::Verb verb, int32_t flowId, int64_t now); /** * Determines the most appropriate path for packet and flow egress. This decision is made by @@ -663,13 +192,13 @@ class Bond { /** * Creates a new flow record * - * @param np Path over which flow shall be handled + * @param path Path over which flow shall be handled * @param flowId Flow ID * @param entropy A byte of entropy to be used by the bonding algorithm * @param now Current time * @return Pointer to newly-created Flow */ - SharedPtr createFlow(int pathIdx, int32_t flowId, unsigned char entropy, int64_t now); + SharedPtr createFlow(const SharedPtr &path, int32_t flowId, unsigned char entropy, int64_t now); /** * Removes flow records that are past a certain age limit. @@ -686,7 +215,7 @@ class Bond { * @param flow Flow to be assigned * @param now Current time */ - bool assignFlowToBondedPath(SharedPtr& flow, int64_t now); + bool assignFlowToBondedPath(SharedPtr &flow, int64_t now); /** * Determine whether a path change should occur given the remote peer's reported utility and our @@ -697,7 +226,7 @@ class Bond { * @param path Path over which the negotiation request was received * @param remoteUtility How much utility the remote peer claims to gain by using the declared path */ - void processIncomingPathNegotiationRequest(uint64_t now, SharedPtr& path, int16_t remoteUtility); + void processIncomingPathNegotiationRequest(uint64_t now, SharedPtr &path, int16_t remoteUtility); /** * Determine state of path synchronization and whether a negotiation request @@ -706,7 +235,7 @@ class Bond { * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param now Current time */ - void pathNegotiationCheck(void* tPtr, int64_t now); + void pathNegotiationCheck(void *tPtr, const int64_t now); /** * Sends a VERB_ACK to the remote peer. @@ -717,7 +246,8 @@ class Bond { * @param atAddress * @param now Current time */ - void sendACK(void* tPtr, int pathIdx, int64_t localSocket, const InetAddress& atAddress, int64_t now); + void sendACK(void *tPtr, const SharedPtr &path,int64_t localSocket, + const InetAddress &atAddress,int64_t now); /** * Sends a VERB_QOS_MEASUREMENT to the remote peer. @@ -728,7 +258,8 @@ class Bond { * @param atAddress * @param now Current time */ - void sendQOS_MEASUREMENT(void* tPtr, int pathIdx, int64_t localSocket, const InetAddress& atAddress, int64_t now); + void sendQOS_MEASUREMENT(void *tPtr,const SharedPtr &path,int64_t localSocket, + const InetAddress &atAddress,int64_t now); /** * Sends a VERB_PATH_NEGOTIATION_REQUEST to the remote peer. @@ -736,7 +267,7 @@ class Bond { * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param path Path over which packet should be sent */ - void sendPATH_NEGOTIATION_REQUEST(void* tPtr, int pathIdx); + void sendPATH_NEGOTIATION_REQUEST(void *tPtr, const SharedPtr &path); /** * @@ -750,7 +281,7 @@ class Bond { * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param now Current time */ - void processActiveBackupTasks(void* tPtr, int64_t now); + void processActiveBackupTasks(void *tPtr, int64_t now); /** * Switches the active link in an active-backup scenario to the next best during @@ -767,7 +298,7 @@ class Bond { * @param policy Bonding policy * @param templateBond */ - void setBondParameters(int policy, SharedPtr templateBond, bool useTemplate); + void setReasonableDefaults(int policy, SharedPtr templateBond, bool useTemplate); /** * Check and assign user-specified quality weights to this bond. @@ -780,82 +311,64 @@ class Bond { /** * @param latencyInMilliseconds Maximum acceptable latency. */ - void setMaxAcceptableLatency(int16_t latencyInMilliseconds) - { + void setMaxAcceptableLatency(int16_t latencyInMilliseconds) { _maxAcceptableLatency = latencyInMilliseconds; } /** * @param latencyInMilliseconds Maximum acceptable (mean) latency. */ - void setMaxAcceptableMeanLatency(int16_t latencyInMilliseconds) - { + void setMaxAcceptableMeanLatency(int16_t latencyInMilliseconds) { _maxAcceptableMeanLatency = latencyInMilliseconds; } /** * @param latencyVarianceInMilliseconds Maximum acceptable packet delay variance (jitter). */ - void setMaxAcceptablePacketDelayVariance(int16_t latencyVarianceInMilliseconds) - { + void setMaxAcceptablePacketDelayVariance(int16_t latencyVarianceInMilliseconds) { _maxAcceptablePacketDelayVariance = latencyVarianceInMilliseconds; } /** * @param lossRatio Maximum acceptable packet loss ratio (PLR). */ - void setMaxAcceptablePacketLossRatio(float lossRatio) - { + void setMaxAcceptablePacketLossRatio(float lossRatio) { _maxAcceptablePacketLossRatio = lossRatio; } /** * @param errorRatio Maximum acceptable packet error ratio (PER). */ - void setMaxAcceptablePacketErrorRatio(float errorRatio) - { + void setMaxAcceptablePacketErrorRatio(float errorRatio) { _maxAcceptablePacketErrorRatio = errorRatio; } /** * @param errorRatio Maximum acceptable packet error ratio (PER). */ - void setMinAcceptableAllocation(float minAlloc) - { - _minAcceptableAllocation = (uint8_t)(minAlloc * 255); + void setMinAcceptableAllocation(float minAlloc) { + _minAcceptableAllocation = minAlloc * 255; } /** * @return Whether the user has defined links for use on this bond */ - inline bool userHasSpecifiedLinks() - { - return _userHasSpecifiedLinks; - } + inline bool userHasSpecifiedLinks() { return _userHasSpecifiedLinks; } /** * @return Whether the user has defined a set of failover link(s) for this bond */ - inline bool userHasSpecifiedFailoverInstructions() - { - return _userHasSpecifiedFailoverInstructions; - }; + inline bool userHasSpecifiedFailoverInstructions() { return _userHasSpecifiedFailoverInstructions; }; /** * @return Whether the user has specified a primary link */ - inline bool userHasSpecifiedPrimaryLink() - { - return _userHasSpecifiedPrimaryLink; - } + inline bool userHasSpecifiedPrimaryLink() { return _userHasSpecifiedPrimaryLink; } /** * @return Whether the user has specified link speeds */ - inline bool userHasSpecifiedLinkSpeeds() - { - return _userHasSpecifiedLinkSpeeds; - } + inline bool userHasSpecifiedLinkSpeeds() { return _userHasSpecifiedLinkSpeeds; } /** * Periodically perform maintenance tasks for each active bond. @@ -863,7 +376,26 @@ class Bond { * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call * @param now Current time */ - void processBackgroundBondTasks(void* tPtr, int64_t now); + void processBackgroundTasks(void *tPtr, int64_t now); + + /** + * Rate limit gate for VERB_ACK + * + * @param now Current time + * @return Whether the incoming packet should be rate-gated + */ + inline bool rateGateACK(const int64_t now) + { + _ackCutoffCount++; + int numToDrain = _lastAckRateCheck ? (now - _lastAckRateCheck) / ZT_ACK_DRAINAGE_DIVISOR : _ackCutoffCount; + _lastAckRateCheck = now; + if (_ackCutoffCount > numToDrain) { + _ackCutoffCount-=numToDrain; + } else { + _ackCutoffCount = 0; + } + return (_ackCutoffCount < ZT_ACK_CUTOFF_LIMIT); + } /** * Rate limit gate for VERB_QOS_MEASUREMENT @@ -871,21 +403,17 @@ class Bond { * @param now Current time * @return Whether the incoming packet should be rate-gated */ - inline bool rateGateQoS(int64_t now, SharedPtr& path) + inline bool rateGateQoS(const int64_t now) { - // TODO: Verify before production - char pathStr[64] = { 0 }; - path->address().toString(pathStr); - int diff = now - _lastQoSRateCheck; - if ((diff) <= (_qosSendInterval / ZT_MAX_PEER_NETWORK_PATHS)) { - ++_qosCutoffCount; - } - else { + _qosCutoffCount++; + int numToDrain = (now - _lastQoSRateCheck) / ZT_QOS_DRAINAGE_DIVISOR; + _lastQoSRateCheck = now; + if (_qosCutoffCount > numToDrain) { + _qosCutoffCount-=numToDrain; + } else { _qosCutoffCount = 0; } - _lastQoSRateCheck = now; - // fprintf(stderr, "rateGateQoS (count=%d, send_interval=%d, diff=%d, path=%s)\n", _qosCutoffCount, _qosSendInterval, diff, pathStr); - return (_qosCutoffCount < (ZT_MAX_PEER_NETWORK_PATHS * 2)); + return (_qosCutoffCount < ZT_QOS_CUTOFF_LIMIT); } /** @@ -894,219 +422,142 @@ class Bond { * @param now Current time * @return Whether the incoming packet should be rate-gated */ - inline bool rateGatePathNegotiation(int64_t now, SharedPtr& path) + inline bool rateGatePathNegotiation(const int64_t now) { - // TODO: Verify before production - char pathStr[64] = { 0 }; - path->address().toString(pathStr); - int diff = now - _lastPathNegotiationReceived; - if ((diff) <= (ZT_PATH_NEGOTIATION_CUTOFF_TIME / ZT_MAX_PEER_NETWORK_PATHS)) { + if ((now - _lastPathNegotiationReceived) <= ZT_PATH_NEGOTIATION_CUTOFF_TIME) ++_pathNegotiationCutoffCount; - } - else { - _pathNegotiationCutoffCount = 0; - } + else _pathNegotiationCutoffCount = 0; _lastPathNegotiationReceived = now; - // fprintf(stderr, "rateGateNeg (count=%d, send_interval=%d, diff=%d, path=%s)\n", _pathNegotiationCutoffCount, (ZT_PATH_NEGOTIATION_CUTOFF_TIME / ZT_MAX_PEER_NETWORK_PATHS), diff, pathStr); - return (_pathNegotiationCutoffCount < (ZT_MAX_PEER_NETWORK_PATHS * 2)); + return (_pathNegotiationCutoffCount < ZT_PATH_NEGOTIATION_CUTOFF_LIMIT); } /** * @param interval Maximum amount of time user expects a failover to take on this bond. */ - inline void setFailoverInterval(uint32_t interval) - { - _failoverInterval = interval; - } + inline void setFailoverInterval(uint32_t interval) { _failoverInterval = interval; } /** * @param interval Maximum amount of time user expects a failover to take on this bond. */ - inline uint32_t getFailoverInterval() - { - return _failoverInterval; - } + inline uint32_t getFailoverInterval() { return _failoverInterval; } /** * @param strategy Strategy that the bond uses to re-assign protocol flows. */ - inline void setFlowRebalanceStrategy(uint32_t strategy) - { - _flowRebalanceStrategy = strategy; - } + inline void setFlowRebalanceStrategy(uint32_t strategy) { _flowRebalanceStrategy = strategy; } /** * @param strategy Strategy that the bond uses to prob for path aliveness and quality */ - inline void setLinkMonitorStrategy(uint8_t strategy) - { - _linkMonitorStrategy = strategy; - } + inline void setLinkMonitorStrategy(uint8_t strategy) { _linkMonitorStrategy = strategy; } + + /** + * @param abOverflowEnabled Whether "overflow" mode is enabled for this active-backup bond + */ + inline void setOverflowMode(bool abOverflowEnabled) { _abOverflowEnabled = abOverflowEnabled; } /** * @return the current up delay parameter */ - inline uint16_t getUpDelay() - { - return _upDelay; - } + inline uint16_t getUpDelay() { return _upDelay; } /** * @param upDelay Length of time before a newly-discovered path is admitted to the bond */ - inline void setUpDelay(int upDelay) - { - if (upDelay >= 0) { - _upDelay = upDelay; - } - } + inline void setUpDelay(int upDelay) { if (upDelay >= 0) { _upDelay = upDelay; } } /** * @return Length of time before a newly-failed path is removed from the bond */ - inline uint16_t getDownDelay() - { - return _downDelay; - } + inline uint16_t getDownDelay() { return _downDelay; } /** * @param downDelay Length of time before a newly-failed path is removed from the bond */ - inline void setDownDelay(int downDelay) - { - if (downDelay >= 0) { - _downDelay = downDelay; - } - } + inline void setDownDelay(int downDelay) { if (downDelay >= 0) { _downDelay = downDelay; } } /** - * @return The current monitoring interval for the bond + * @return the current monitoring interval for the bond (can be overridden with intervals specific to certain links.) */ - inline int monitorInterval() - { - return _monitorInterval; - } + inline uint16_t getBondMonitorInterval() { return _bondMonitorInterval; } /** * Set the current monitoring interval for the bond (can be overridden with intervals specific to certain links.) * * @param monitorInterval How often gratuitous VERB_HELLO(s) are sent to remote peer. */ - inline void setBondMonitorInterval(uint16_t interval) - { - _monitorInterval = interval; - } + inline void setBondMonitorInterval(uint16_t interval) { _bondMonitorInterval = interval; } /** * @param policy Bonding policy for this bond */ - /* - inline void setPolicy(uint8_t policy) - { - _policy = policy; - } -*/ + inline void setPolicy(uint8_t policy) { _bondingPolicy = policy; } + /** * @return the current bonding policy */ - inline uint8_t policy() - { - return _policy; - } + inline uint8_t getPolicy() { return _bondingPolicy; } /** * @return the health status of the bond */ - inline bool isHealthy() - { - return _isHealthy; - } + inline bool isHealthy() { return _isHealthy; } /** * @return the number of links comprising this bond which are considered alive */ - inline uint8_t getNumAliveLinks() - { - return _numAliveLinks; - }; + inline uint8_t getNumAliveLinks() { return _numAliveLinks; }; /** * @return the number of links comprising this bond */ - inline uint8_t getNumTotalLinks() - { - return _numTotalLinks; - } + inline uint8_t getNumTotalLinks() { return _numTotalLinks; } /** * * @param allowFlowHashing */ - inline void setFlowHashing(bool allowFlowHashing) - { - _allowFlowHashing = allowFlowHashing; - } + inline void setFlowHashing(bool allowFlowHashing) { _allowFlowHashing = allowFlowHashing; } /** * @return Whether flow-hashing is currently enabled for this bond. */ - bool flowHashingEnabled() - { - return _allowFlowHashing; - } + bool flowHashingEnabled() { return _allowFlowHashing; } /** * * @param packetsPerLink */ - inline void setPacketsPerLink(int packetsPerLink) - { - _packetsPerLink = packetsPerLink; - } + inline void setPacketsPerLink(int packetsPerLink) { _packetsPerLink = packetsPerLink; } /** * @return Number of packets to be sent on each interface in a balance-rr bond */ - inline int getPacketsPerLink() - { - return _packetsPerLink; - } + inline int getPacketsPerLink() { return _packetsPerLink; } /** * * @param linkSelectMethod */ - inline void setLinkSelectMethod(uint8_t method) - { - _abLinkSelectMethod = method; - } + inline void setLinkSelectMethod(uint8_t method) { _abLinkSelectMethod = method; } /** * * @return */ - inline uint8_t getLinkSelectMethod() - { - return _abLinkSelectMethod; - } + inline uint8_t getLinkSelectMethod() { return _abLinkSelectMethod; } /** * * @param allowPathNegotiation */ - inline void setAllowPathNegotiation(bool allowPathNegotiation) - { - _allowPathNegotiation = allowPathNegotiation; - } + inline void setAllowPathNegotiation(bool allowPathNegotiation) { _allowPathNegotiation = allowPathNegotiation; } /** * * @return */ - inline bool allowPathNegotiation() - { - return _allowPathNegotiation; - } + inline bool allowPathNegotiation() { return _allowPathNegotiation; } /** * Forcibly rotates the currently active link used in an active-backup bond to the next link in the failover queue @@ -1115,303 +566,56 @@ class Bond { */ bool abForciblyRotateLink(); - /** - * @param now Current time - * @return All known paths to this peer - */ - inline std::vector > paths(const int64_t now) const - { - std::vector > pp; - Mutex::Lock _l(_paths_m); - for (unsigned int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) - break; - pp.push_back(_paths[i].p); - } - return pp; - } + SharedPtr getPeer() { return _peer; } - /** - * Emit message to tracing system but with added timestamp and subsystem info - * - * TODO: Will be replaced when better logging facilities exist in Trace.hpp - */ - void log(const char* fmt, ...) - { - time_t rawtime; - struct tm* timeinfo; - char timestamp[80]; - time(&rawtime); - timeinfo = localtime(&rawtime); - strftime(timestamp, 80, "%F %T", timeinfo); -#define MAX_BOND_MSG_LEN 1024 - char traceMsg[MAX_BOND_MSG_LEN]; - char userMsg[MAX_BOND_MSG_LEN]; - va_list args; - va_start(args, fmt); - if (vsnprintf(userMsg, sizeof(userMsg), fmt, args) < 0) { - fprintf(stderr, "Encountered format encoding error while writing to trace log\n"); - return; - } - snprintf(traceMsg, MAX_BOND_MSG_LEN, "%s (%llx/%s) %s", timestamp, _peerId, _policyAlias.c_str(), userMsg); - va_end(args); - RR->t->bondStateMessage(NULL, traceMsg); -#undef MAX_MSG_LEN - } +private: - private: - struct NominatedPath { - NominatedPath() - : lastQoSMeasurement(0) - , lastThroughputEstimation(0) - , lastRefractoryUpdate(0) - , lastAliveToggle(0) - , alive(false) - , eligible(true) - , whenNominated(0) - , refractoryPeriod(0) - , ipvPref(0) - , mode(0) - , onlyPathOnLink(false) - , bonded(false) - , negotiated(false) - , shouldReallocateFlows(false) - , assignedFlowCount(0) - , latencyMean(0) - , latencyVariance(0) - , packetLossRatio(0) - , packetErrorRatio(0) - , throughputMean(0) - , throughputMax(0) - , throughputVariance(0) - , allocation(0) - , byteLoad(0) - , relativeByteLoad(0) - , affinity(0) - , failoverScore(0) - , packetsReceivedSinceLastQoS(0) - , packetsIn(0) - , packetsOut(0) - { - } - - /** - * Set or update a refractory period for the path. - * - * @param punishment How much a path should be punished - * @param pathFailure Whether this call is the result of a recent path failure - */ - inline void adjustRefractoryPeriod(int64_t now, uint32_t punishment, bool pathFailure) - { - if (pathFailure) { - unsigned int suggestedRefractoryPeriod = refractoryPeriod ? punishment + (refractoryPeriod * 2) : punishment; - refractoryPeriod = std::min(suggestedRefractoryPeriod, (unsigned int)ZT_BOND_MAX_REFRACTORY_PERIOD); - lastRefractoryUpdate = 0; - } - else { - uint32_t drainRefractory = 0; - if (lastRefractoryUpdate) { - drainRefractory = (now - lastRefractoryUpdate); - } - else { - drainRefractory = (now - lastAliveToggle); - } - lastRefractoryUpdate = now; - if (refractoryPeriod > drainRefractory) { - refractoryPeriod -= drainRefractory; - } - else { - refractoryPeriod = 0; - lastRefractoryUpdate = 0; - } - } - } - - /** - * @return True if a path is permitted to be used in a bond (according to user pref.) - */ - inline bool allowed() - { - return (! ipvPref || ((p->_addr.isV4() && (ipvPref == 4 || ipvPref == 46 || ipvPref == 64)) || ((p->_addr.isV6() && (ipvPref == 6 || ipvPref == 46 || ipvPref == 64))))); - } - - /** - * @return True if a path is preferred over another on the same physical link (according to user pref.) - */ - inline bool preferred() - { - return onlyPathOnLink || (p->_addr.isV4() && (ipvPref == 4 || ipvPref == 46)) || (p->_addr.isV6() && (ipvPref == 6 || ipvPref == 64)); - } - - /** - * @param now Current time - * @return Whether a QoS (VERB_QOS_MEASUREMENT) packet needs to be emitted at this time - */ - inline bool needsToSendQoS(int64_t now, int qosSendInterval) - { - // fprintf(stderr, "QOS table (%d / %d)\n", packetsReceivedSinceLastQoS, ZT_QOS_TABLE_SIZE); - return ((packetsReceivedSinceLastQoS >= ZT_QOS_TABLE_SIZE) || ((now - lastQoSMeasurement) > qosSendInterval)) && packetsReceivedSinceLastQoS; - } - - /** - * Reset packet counters - */ - inline void resetPacketCounts() - { - packetsIn = 0; - packetsOut = 0; - } - - std::map qosStatsOut; // id:egress_time - std::map qosStatsIn; // id:now - - RingBuffer qosRecordSize; - RingBuffer qosRecordLossSamples; - RingBuffer throughputSamples; - RingBuffer packetValiditySamples; - RingBuffer throughputVarianceSamples; - RingBuffer latencySamples; - - uint64_t lastQoSMeasurement; // Last time that a VERB_QOS_MEASUREMENT was sent out on this path. - uint64_t lastThroughputEstimation; // Last time that the path's throughput was estimated. - uint64_t lastRefractoryUpdate; // The last time that the refractory period was updated. - uint64_t lastAliveToggle; // The last time that the path was marked as "alive". - bool alive; - bool eligible; // State of eligibility at last check. Used for determining state changes. - uint64_t whenNominated; // Timestamp indicating when this path's trial period began. - uint32_t refractoryPeriod; // Amount of time that this path will be prevented from becoming a member of a bond. - uint8_t ipvPref; // IP version preference inherited from the physical link. - uint8_t mode; // Mode inherited from the physical link. - bool onlyPathOnLink; // IP version preference inherited from the physical link. - bool enabled; // Enabled state inherited from the physical link. - bool bonded; // Whether this path is currently part of a bond. - bool negotiated; // Whether this path was intentionally negotiated by either peer. - bool shouldReallocateFlows; // Whether flows should be moved from this path. Current traffic flows will be re-allocated immediately. - uint16_t assignedFlowCount; // The number of flows currently assigned to this path. - float latencyMean; // The mean latency (computed from a sliding window.) - float latencyVariance; // Packet delay variance (computed from a sliding window.) - float packetLossRatio; // The ratio of lost packets to received packets. - float packetErrorRatio; // The ratio of packets that failed their MAC/CRC checks to those that did not. - uint64_t throughputMean; // The estimated mean throughput of this path. - uint64_t throughputMax; // The maximum observed throughput of this path. - float throughputVariance; // The variance in the estimated throughput of this path. - uint8_t allocation; // The relative quality of this path to all others in the bond, [0-255]. - uint64_t byteLoad; // How much load this path is under. - uint8_t relativeByteLoad; // How much load this path is under (relative to other paths in the bond.) - uint8_t affinity; // Relative value expressing how "deserving" this path is of new traffic. - uint32_t failoverScore; // Score that indicates to what degree this path is preferred over others that are available to the bonding policy. (specifically for active-backup) - int32_t packetsReceivedSinceLastQoS; // Number of packets received since the last VERB_QOS_MEASUREMENT was sent to the remote peer. - - /** - * Counters used for tracking path load. - */ - int packetsIn; - int packetsOut; - - AtomicCounter __refCount; - - SharedPtr p; - void set(uint64_t now, const SharedPtr& path) - { - p = path; - whenNominated = now; - p->_bondingMetricPtr = (void*)this; - } - }; - - /** - * Paths nominated to the bond (may or may not actually be bonded) - */ - NominatedPath _paths[ZT_MAX_PEER_NETWORK_PATHS]; - - inline int getNominatedPathIdx(const SharedPtr& path) - { - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (_paths[i].p == path) { - return i; - } - } - return ZT_MAX_PEER_NETWORK_PATHS; - } - - /** - * A protocol flow that is identified by the origin and destination port. - */ - struct Flow { - /** - * @param flowId Given flow ID - * @param now Current time - */ - Flow(int32_t flowId, int64_t now) : id(flowId), bytesIn(0), bytesOut(0), lastActivity(now), lastPathReassignment(0), assignedPath(ZT_MAX_PEER_NETWORK_PATHS) - { - } - - /** - * Reset flow statistics - */ - inline void resetByteCounts() - { - bytesIn = 0; - bytesOut = 0; - } - - /** - * How long since a packet was sent or received in this flow - * - * @param now Current time - * @return The age of the flow in terms of last recorded activity - */ - int64_t age(int64_t now) - { - return now - lastActivity; - } - - /** - * @param path Assigned path over which this flow should be handled - */ - inline void assignPath(int pathIdx, int64_t now) - { - assignedPath = pathIdx; - lastPathReassignment = now; - } - - AtomicCounter __refCount; - - int32_t id; // Flow ID used for hashing and path selection - uint64_t bytesIn; // Used for tracking flow size - uint64_t bytesOut; // Used for tracking flow size - int64_t lastActivity; // The last time that this flow handled traffic - int64_t lastPathReassignment; // Time of last path assignment. Used for anti-flapping - int assignedPath; // Index of path to which this flow is assigned - }; - - const RuntimeEnvironment* RR; + const RuntimeEnvironment *RR; AtomicCounter __refCount; - std::string _policyAlias; // Custom name given by the user to this bond type. + /** + * Custom name given by the user to this bond type. + */ + std::string _policyAlias; + + /** + * Paths that this bond has been made aware of but that are not necessarily + * part of the bond proper. + */ + SharedPtr _paths[ZT_MAX_PEER_NETWORK_PATHS]; /** * Set of indices corresponding to paths currently included in the bond proper. This * may only be updated during a call to curateBond(). The reason for this is so that * we can simplify the high frequency packet egress logic. */ - int _bondIdxMap[ZT_MAX_PEER_NETWORK_PATHS]; - int _numBondedPaths; // Number of paths currently included in the _bondIdxMap set. - std::map > _flows; // Flows hashed according to port and protocol - float _qw[ZT_QOS_WEIGHT_SIZE]; // How much each factor contributes to the "quality" score of a path. + int _bondedIdx[ZT_MAX_PEER_NETWORK_PATHS]; - uint8_t _policy; + /** + * Number of paths currently included in the _bondedIdx set. + */ + int _numBondedPaths; + + /** + * Flows hashed according to port and protocol + */ + std::map > _flows; + + float _qualityWeights[ZT_QOS_WEIGHT_SIZE]; // How much each factor contributes to the "quality" score of a path. + + uint8_t _bondingPolicy; uint32_t _upDelay; uint32_t _downDelay; // active-backup - int _abPathIdx; // current active path - std::deque _abFailoverQueue; - uint8_t _abLinkSelectMethod; // link re-selection policy for the primary link in active-backup + SharedPtr _abPath; // current active path + std::list > _abFailoverQueue; + uint8_t _abLinkSelectMethod; // link re-selection policy for the primary link in active-backup + bool _abOverflowEnabled; // balance-rr - uint8_t _rrIdx; // index to path currently in use during Round Robin operation - uint16_t _rrPacketsSentOnCurrLink; // number of packets sent on this link since the most recent path switch. + uint8_t _rrIdx; // index to path currently in use during Round Robin operation + uint16_t _rrPacketsSentOnCurrLink; // number of packets sent on this link since the most recent path switch. /** * How many packets will be sent on a path before moving to the next path * in the round-robin sequence. A value of zero will cause a random path @@ -1425,11 +629,13 @@ class Bond { // dynamic link monitoring uint8_t _linkMonitorStrategy; + uint32_t _dynamicPathMonitorInterval; // path negotiation int16_t _localUtility; - int negotiatedPathIdx; + SharedPtr negotiatedPath; uint8_t _numSentPathNegotiationRequests; + unsigned int _pathNegotiationCutoffCount; bool _allowPathNegotiation; /** @@ -1463,52 +669,82 @@ class Bond { * drains linearly. For each eligibility change the remaining punishment is doubled. */ uint32_t _defaultPathRefractoryPeriod; - unsigned char _freeRandomByte; // Free byte of entropy that is updated on every packet egress event. - SharedPtr _peer; // Remote peer that this bond services - unsigned long long _peerId; // ID of the peer that this bond services /** - * Rate-limiting + * Whether the current bonding policy requires computation of path statistics + */ + bool _shouldCollectPathStatistics; + + /** + * Free byte of entropy that is updated on every packet egress event. + */ + unsigned char _freeRandomByte; + + /** + * Remote peer that this bond services + */ + SharedPtr _peer; + + /** + * Rate-limit cutoffs */ uint16_t _qosCutoffCount; - uint64_t _lastQoSRateCheck; - uint16_t _pathNegotiationCutoffCount; - uint64_t _lastPathNegotiationReceived; + uint16_t _ackCutoffCount; /** * Recent event timestamps */ - uint64_t _lastSummaryDump; - + uint64_t _lastAckRateCheck; + uint64_t _lastQoSRateCheck; uint64_t _lastQualityEstimation; + uint64_t _lastCheckUserPreferences; uint64_t _lastBackgroundTaskCheck; uint64_t _lastBondStatusLog; + uint64_t _lastPathNegotiationReceived; uint64_t _lastPathNegotiationCheck; uint64_t _lastSentPathNegotiationRequest; + uint64_t _lastFlowStatReset; uint64_t _lastFlowExpirationCheck; uint64_t _lastFlowRebalance; uint64_t _lastFrame; uint64_t _lastActiveBackupPathChange; Mutex _paths_m; - Mutex _flows_m; - bool _userHasSpecifiedLinks; // Whether the user has specified links for this bond. - bool _userHasSpecifiedPrimaryLink; // Whether the user has specified a primary link for this bond. - bool _userHasSpecifiedFailoverInstructions; // Whether the user has specified failover instructions for this bond. - bool _userHasSpecifiedLinkSpeeds; // Whether the user has specified links speeds for this bond. + /** + * Whether the user has specified links for this bond. + */ + bool _userHasSpecifiedLinks; + + /** + * Whether the user has specified a primary link for this bond. + */ + bool _userHasSpecifiedPrimaryLink; + + /** + * Whether the user has specified failover instructions for this bond. + */ + bool _userHasSpecifiedFailoverInstructions; + + /** + * Whether the user has specified links speeds for this bond. + */ + bool _userHasSpecifiedLinkSpeeds; + /** * How frequently (in ms) a VERB_ECHO is sent to a peer to verify that a * path is still active. A value of zero (0) will disable active path * monitoring; as result, all monitoring will be a function of traffic. */ - int _monitorInterval; - bool _allowFlowHashing; // Whether or not flow hashing is allowed. + uint16_t _bondMonitorInterval; - uint64_t _overheadBytes; + /** + * Whether or not flow hashing is allowed. + */ + bool _allowFlowHashing; }; -} // namespace ZeroTier +} // namespace ZeroTier -#endif +#endif \ No newline at end of file diff --git a/node/BondController.cpp b/node/BondController.cpp new file mode 100644 index 000000000..5692390c1 --- /dev/null +++ b/node/BondController.cpp @@ -0,0 +1,212 @@ +/* + * Copyright (c)2013-2020 ZeroTier, Inc. + * + * Use of this software is governed by the Business Source License included + * in the LICENSE.TXT file in the project's root directory. + * + * Change Date: 2025-01-01 + * + * On the date above, in accordance with the Business Source License, use + * of this software will be governed by version 2.0 of the Apache License. + */ +/****/ + +#include "../osdep/OSUtils.hpp" + +#include "Constants.hpp" +#include "BondController.hpp" +#include "Peer.hpp" + +namespace ZeroTier { + +int BondController::_minReqPathMonitorInterval; +uint8_t BondController::_defaultBondingPolicy; + +BondController::BondController(const RuntimeEnvironment *renv) : + RR(renv) +{ + bondStartTime = RR->node->now(); + _defaultBondingPolicy = ZT_BONDING_POLICY_NONE; +} + +bool BondController::linkAllowed(std::string &policyAlias, SharedPtr link) +{ + bool foundInDefinitions = false; + if (_linkDefinitions.count(policyAlias)) { + auto it = _linkDefinitions[policyAlias].begin(); + while (it != _linkDefinitions[policyAlias].end()) { + if (link->ifname() == (*it)->ifname()) { + foundInDefinitions = true; + break; + } + ++it; + } + } + return _linkDefinitions[policyAlias].empty() || foundInDefinitions; +} + +void BondController::addCustomLink(std::string& policyAlias, SharedPtr link) +{ + Mutex::Lock _l(_links_m); + _linkDefinitions[policyAlias].push_back(link); + auto search = _interfaceToLinkMap[policyAlias].find(link->ifname()); + if (search == _interfaceToLinkMap[policyAlias].end()) { + link->setAsUserSpecified(true); + _interfaceToLinkMap[policyAlias].insert(std::pair>(link->ifname(), link)); + } +} + +bool BondController::addCustomPolicy(const SharedPtr& newBond) +{ + Mutex::Lock _l(_bonds_m); + if (!_bondPolicyTemplates.count(newBond->policyAlias())) { + _bondPolicyTemplates[newBond->policyAlias()] = newBond; + return true; + } + return false; +} + +bool BondController::assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias) +{ + Mutex::Lock _l(_bonds_m); + if (!_policyTemplateAssignments.count(identity)) { + _policyTemplateAssignments[identity] = policyAlias; + return true; + } + return false; +} + +SharedPtr BondController::getBondByPeerId(int64_t identity) +{ + Mutex::Lock _l(_bonds_m); + return _bonds.count(identity) ? _bonds[identity] : SharedPtr(); +} + +SharedPtr BondController::createTransportTriggeredBond(const RuntimeEnvironment *renv, const SharedPtr& peer) +{ + Mutex::Lock _l(_bonds_m); + int64_t identity = peer->identity().address().toInt(); + Bond *bond = nullptr; + char traceMsg[128]; + if (!_bonds.count(identity)) { + std::string policyAlias; + if (!_policyTemplateAssignments.count(identity)) { + if (_defaultBondingPolicy) { + sprintf(traceMsg, "%s (bond) Creating new default %s bond to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), getPolicyStrByCode(_defaultBondingPolicy).c_str(), identity); RR->t->bondStateMessage(NULL, traceMsg); + bond = new Bond(renv, _defaultBondingPolicy, peer); + } + if (!_defaultBondingPolicy && _defaultBondingPolicyStr.length()) { + sprintf(traceMsg, "%s (bond) Creating new default custom %s bond to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), _defaultBondingPolicyStr.c_str(), identity); + RR->t->bondStateMessage(NULL, traceMsg); + bond = new Bond(renv, _bondPolicyTemplates[_defaultBondingPolicyStr].ptr(), peer); + } + } + else { + if (!_bondPolicyTemplates[_policyTemplateAssignments[identity]]) { + sprintf(traceMsg, "%s (bond) Creating new bond. Assignment for peer %llx was specified as %s but the bond definition was not found. Using default %s", + OSUtils::humanReadableTimestamp().c_str(), identity, _policyTemplateAssignments[identity].c_str(), getPolicyStrByCode(_defaultBondingPolicy).c_str()); + RR->t->bondStateMessage(NULL, traceMsg); + bond = new Bond(renv, _defaultBondingPolicy, peer); + } + else { + sprintf(traceMsg, "%s (bond) Creating new default bond %s to peer %llx", + OSUtils::humanReadableTimestamp().c_str(), _defaultBondingPolicyStr.c_str(), identity); + RR->t->bondStateMessage(NULL, traceMsg); + bond = new Bond(renv, _bondPolicyTemplates[_policyTemplateAssignments[identity]].ptr(), peer); + } + } + } + if (bond) { + _bonds[identity] = bond; + /** + * Determine if user has specified anything that could affect the bonding policy's decisions + */ + if (_interfaceToLinkMap.count(bond->policyAlias())) { + std::map >::iterator it = _interfaceToLinkMap[bond->policyAlias()].begin(); + while (it != _interfaceToLinkMap[bond->policyAlias()].end()) { + if (it->second->isUserSpecified()) { + bond->_userHasSpecifiedLinks = true; + } + if (it->second->isUserSpecified() && it->second->primary()) { + bond->_userHasSpecifiedPrimaryLink = true; + } + if (it->second->isUserSpecified() && it->second->userHasSpecifiedFailoverInstructions()) { + bond->_userHasSpecifiedFailoverInstructions = true; + } + if (it->second->isUserSpecified() && (it->second->speed() > 0)) { + bond->_userHasSpecifiedLinkSpeeds = true; + } + ++it; + } + } + return bond; + } + return SharedPtr(); +} + +SharedPtr BondController::getLinkBySocket(const std::string& policyAlias, uint64_t localSocket) +{ + Mutex::Lock _l(_links_m); + char ifname[16]; + _phy->getIfName((PhySocket *) ((uintptr_t)localSocket), ifname, 16); + std::string ifnameStr(ifname); + auto search = _interfaceToLinkMap[policyAlias].find(ifnameStr); + if (search == _interfaceToLinkMap[policyAlias].end()) { + SharedPtr s = new Link(ifnameStr, 0, 0, 0, 0, 0, true, ZT_MULTIPATH_SLAVE_MODE_SPARE, "", 0.0); + _interfaceToLinkMap[policyAlias].insert(std::pair >(ifnameStr, s)); + return s; + } + else { + return search->second; + } +} + +SharedPtr BondController::getLinkByName(const std::string& policyAlias, const std::string& ifname) +{ + Mutex::Lock _l(_links_m); + auto search = _interfaceToLinkMap[policyAlias].find(ifname); + if (search != _interfaceToLinkMap[policyAlias].end()) { + return search->second; + } + return SharedPtr(); +} + +bool BondController::allowedToBind(const std::string& ifname) +{ + return true; + /* + if (!_defaultBondingPolicy) { + return true; // no restrictions + } + Mutex::Lock _l(_links_m); + if (_interfaceToLinkMap.empty()) { + return true; // no restrictions + } + std::map > >::iterator policyItr = _interfaceToLinkMap.begin(); + while (policyItr != _interfaceToLinkMap.end()) { + std::map >::iterator linkItr = policyItr->second.begin(); + while (linkItr != policyItr->second.end()) { + if (linkItr->first == ifname) { + return true; + } + ++linkItr; + } + ++policyItr; + } + return false; + */ +} + +void BondController::processBackgroundTasks(void *tPtr, const int64_t now) +{ + Mutex::Lock _l(_bonds_m); + std::map >::iterator bondItr = _bonds.begin(); + while (bondItr != _bonds.end()) { + bondItr->second->processBackgroundTasks(tPtr, now); + ++bondItr; + } +} + +} // namespace ZeroTier \ No newline at end of file diff --git a/node/BondController.hpp b/node/BondController.hpp new file mode 100644 index 000000000..7d8e8e69b --- /dev/null +++ b/node/BondController.hpp @@ -0,0 +1,239 @@ +/* + * Copyright (c)2013-2020 ZeroTier, Inc. + * + * Use of this software is governed by the Business Source License included + * in the LICENSE.TXT file in the project's root directory. + * + * Change Date: 2025-01-01 + * + * On the date above, in accordance with the Business Source License, use + * of this software will be governed by version 2.0 of the Apache License. + */ +/****/ + +#ifndef ZT_BONDCONTROLLER_HPP +#define ZT_BONDCONTROLLER_HPP + +#include +#include + +#include "SharedPtr.hpp" +#include "../osdep/Phy.hpp" +#include "../osdep/Link.hpp" + +namespace ZeroTier { + +class RuntimeEnvironment; +class Bond; +class Peer; + +class BondController +{ + friend class Bond; + +public: + + BondController(const RuntimeEnvironment *renv); + + /** + * @return Whether this link is permitted to become a member of a bond. + */ + bool linkAllowed(std::string &policyAlias, SharedPtr link); + + /** + * @return The minimum interval required to poll the active bonds to fulfill all active monitoring timing requirements. + */ + int minReqPathMonitorInterval() { return _minReqPathMonitorInterval; } + + /** + * @param minReqPathMonitorInterval The minimum interval required to poll the active bonds to fulfill all active monitoring timing requirements. + */ + static void setMinReqPathMonitorInterval(int minReqPathMonitorInterval) { _minReqPathMonitorInterval = minReqPathMonitorInterval; } + + /** + * @return Whether the bonding layer is currently set up to be used. + */ + bool inUse() { return !_bondPolicyTemplates.empty() || _defaultBondingPolicy; } + + /** + * @param basePolicyName Bonding policy name (See ZeroTierOne.h) + * @return The bonding policy code for a given human-readable bonding policy name + */ + static int getPolicyCodeByStr(const std::string& basePolicyName) + { + if (basePolicyName == "active-backup") { return 1; } + if (basePolicyName == "broadcast") { return 2; } + if (basePolicyName == "balance-rr") { return 3; } + if (basePolicyName == "balance-xor") { return 4; } + if (basePolicyName == "balance-aware") { return 5; } + return 0; // "none" + } + + /** + * @param policy Bonding policy code (See ZeroTierOne.h) + * @return The human-readable name for the given bonding policy code + */ + static std::string getPolicyStrByCode(int policy) + { + if (policy == 1) { return "active-backup"; } + if (policy == 2) { return "broadcast"; } + if (policy == 3) { return "balance-rr"; } + if (policy == 4) { return "balance-xor"; } + if (policy == 5) { return "balance-aware"; } + return "none"; + } + + /** + * Sets the default bonding policy for new or undefined bonds. + * + * @param bp Bonding policy + */ + void setBondingLayerDefaultPolicy(uint8_t bp) { _defaultBondingPolicy = bp; } + + /** + * Sets the default (custom) bonding policy for new or undefined bonds. + * + * @param alias Human-readable string alias for bonding policy + */ + void setBondingLayerDefaultPolicyStr(std::string alias) { _defaultBondingPolicyStr = alias; } + + /** + * @return The default bonding policy + */ + static int defaultBondingPolicy() { return _defaultBondingPolicy; } + + /** + * Add a user-defined link to a given bonding policy. + * + * @param policyAlias User-defined custom name for variant of bonding policy + * @param link Pointer to new link definition + */ + void addCustomLink(std::string& policyAlias, SharedPtr link); + + /** + * Add a user-defined bonding policy that is based on one of the standard types. + * + * @param newBond Pointer to custom Bond object + * @return Whether a uniquely-named custom policy was successfully added + */ + bool addCustomPolicy(const SharedPtr& newBond); + + /** + * Assigns a specific bonding policy + * + * @param identity + * @param policyAlias + * @return + */ + bool assignBondingPolicyToPeer(int64_t identity, const std::string& policyAlias); + + /** + * Get pointer to bond by a given peer ID + * + * @param peer Remote peer ID + * @return A pointer to the Bond + */ + SharedPtr getBondByPeerId(int64_t identity); + + /** + * Add a new bond to the bond controller. + * + * @param renv Runtime environment + * @param peer Remote peer that this bond services + * @return A pointer to the newly created Bond + */ + SharedPtr createTransportTriggeredBond(const RuntimeEnvironment *renv, const SharedPtr& peer); + + /** + * Periodically perform maintenance tasks for the bonding layer. + * + * @param tPtr Thread pointer to be handed through to any callbacks called as a result of this call + * @param now Current time + */ + void processBackgroundTasks(void *tPtr, int64_t now); + + /** + * Gets a reference to a physical link definition given a policy alias and a local socket. + * + * @param policyAlias Policy in use + * @param localSocket Local source socket + * @return Physical link definition + */ + SharedPtr getLinkBySocket(const std::string& policyAlias, uint64_t localSocket); + + /** + * Gets a reference to a physical link definition given its human-readable system name. + * + * @param policyAlias Policy in use + * @param ifname Alphanumeric human-readable name + * @return Physical link definition + */ + SharedPtr getLinkByName(const std::string& policyAlias, const std::string& ifname); + + /** + * @param ifname Name of interface that we want to know if we can bind to + */ + bool allowedToBind(const std::string& ifname); + + uint64_t getBondStartTime() { return bondStartTime; } + +private: + + Phy *_phy; + const RuntimeEnvironment *RR; + + Mutex _bonds_m; + Mutex _links_m; + + /** + * The last time that the bond controller updated the set of bonds. + */ + uint64_t _lastBackgroundBondControlTaskCheck; + + /** + * The minimum monitoring interval among all paths in this bond. + */ + static int _minReqPathMonitorInterval; + + /** + * The default bonding policy used for new bonds unless otherwise specified. + */ + static uint8_t _defaultBondingPolicy; + + /** + * The default bonding policy used for new bonds unless otherwise specified. + */ + std::string _defaultBondingPolicyStr; + + /** + * All currently active bonds. + */ + std::map > _bonds; + + /** + * Map of peers to custom bonding policies + */ + std::map _policyTemplateAssignments; + + /** + * User-defined bonding policies (can be assigned to a peer) + */ + std::map > _bondPolicyTemplates; + + /** + * Set of links defined for a given bonding policy + */ + std::map > > _linkDefinitions; + + /** + * Set of link objects mapped to their physical interfaces + */ + std::map > > _interfaceToLinkMap; + + // TODO: Remove + uint64_t bondStartTime; +}; + +} // namespace ZeroTier + +#endif \ No newline at end of file diff --git a/node/CertificateOfMembership.cpp b/node/CertificateOfMembership.cpp index dbda9939f..10cb0863a 100644 --- a/node/CertificateOfMembership.cpp +++ b/node/CertificateOfMembership.cpp @@ -20,67 +20,165 @@ namespace ZeroTier { -CertificateOfMembership::CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Identity &issuedTo) +void CertificateOfMembership::setQualifier(uint64_t id,uint64_t value,uint64_t maxDelta) { - _qualifiers[0].id = COM_RESERVED_ID_TIMESTAMP; - _qualifiers[0].value = timestamp; - _qualifiers[0].maxDelta = timestampMaxDelta; - _qualifiers[1].id = COM_RESERVED_ID_NETWORK_ID; - _qualifiers[1].value = nwid; - _qualifiers[1].maxDelta = 0; - _qualifiers[2].id = COM_RESERVED_ID_ISSUED_TO; - _qualifiers[2].value = issuedTo.address().toInt(); - _qualifiers[2].maxDelta = 0xffffffffffffffffULL; + _signedBy.zero(); - // Include hash of full identity public key in COM for hardening purposes. Pack it in - // using the original COM format. Format may be revised in the future to make this cleaner. - uint64_t idHash[6]; - issuedTo.publicKeyHash(idHash); - for(unsigned long i=0;i<4;++i) { - _qualifiers[i + 3].id = (uint64_t)(i + 3); - _qualifiers[i + 3].value = Utils::ntoh(idHash[i]); - _qualifiers[i + 3].maxDelta = 0xffffffffffffffffULL; + for(unsigned int i=0;i<_qualifierCount;++i) { + if (_qualifiers[i].id == id) { + _qualifiers[i].value = value; + _qualifiers[i].maxDelta = maxDelta; + return; + } } - _qualifierCount = 7; - memset(_signature.data,0,ZT_C25519_SIGNATURE_LEN); + if (_qualifierCount < ZT_NETWORK_COM_MAX_QUALIFIERS) { + _qualifiers[_qualifierCount].id = id; + _qualifiers[_qualifierCount].value = value; + _qualifiers[_qualifierCount].maxDelta = maxDelta; + ++_qualifierCount; + std::sort(&(_qualifiers[0]),&(_qualifiers[_qualifierCount])); + } } -bool CertificateOfMembership::agreesWith(const CertificateOfMembership &other, const Identity &otherIdentity) const +#ifdef ZT_SUPPORT_OLD_STYLE_NETCONF + +std::string CertificateOfMembership::toString() const { + char tmp[ZT_NETWORK_COM_MAX_QUALIFIERS * 32]; + std::string s; + + s.append("1:"); // COM_UINT64_ED25519 + + uint64_t *const buf = new uint64_t[_qualifierCount * 3]; + try { + unsigned int ptr = 0; + for(unsigned int i=0;i<_qualifierCount;++i) { + buf[ptr++] = Utils::hton(_qualifiers[i].id); + buf[ptr++] = Utils::hton(_qualifiers[i].value); + buf[ptr++] = Utils::hton(_qualifiers[i].maxDelta); + } + s.append(Utils::hex(buf,ptr * sizeof(uint64_t),tmp)); + delete [] buf; + } catch ( ... ) { + delete [] buf; + throw; + } + + s.push_back(':'); + + s.append(_signedBy.toString(tmp)); + + if (_signedBy) { + s.push_back(':'); + s.append(Utils::hex(_signature.data,ZT_C25519_SIGNATURE_LEN,tmp)); + } + + return s; +} + +void CertificateOfMembership::fromString(const char *s) +{ + _qualifierCount = 0; + _signedBy.zero(); + memset(_signature.data,0,ZT_C25519_SIGNATURE_LEN); + + if (!*s) + return; + + unsigned int colonAt = 0; + while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; + + if (!((colonAt == 1)&&(s[0] == '1'))) // COM_UINT64_ED25519? + return; + + s += colonAt + 1; + colonAt = 0; + while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; + + if (colonAt) { + const unsigned int buflen = colonAt / 2; + char *const buf = new char[buflen]; + unsigned int bufactual = Utils::unhex(s,colonAt,buf,buflen); + char *bufptr = buf; + try { + while (bufactual >= 24) { + if (_qualifierCount < ZT_NETWORK_COM_MAX_QUALIFIERS) { + _qualifiers[_qualifierCount].id = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; + _qualifiers[_qualifierCount].value = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; + _qualifiers[_qualifierCount].maxDelta = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; + ++_qualifierCount; + } else { + bufptr += 24; + } + bufactual -= 24; + } + } catch ( ... ) {} + delete [] buf; + } + + if (s[colonAt]) { + s += colonAt + 1; + colonAt = 0; + while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; + + if (colonAt) { + char addrbuf[ZT_ADDRESS_LENGTH]; + if (Utils::unhex(s,colonAt,addrbuf,sizeof(addrbuf)) == ZT_ADDRESS_LENGTH) + _signedBy.setTo(addrbuf,ZT_ADDRESS_LENGTH); + + if ((_signedBy)&&(s[colonAt])) { + s += colonAt + 1; + colonAt = 0; + while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; + if (colonAt) { + if (Utils::unhex(s,colonAt,_signature.data,ZT_C25519_SIGNATURE_LEN) != ZT_C25519_SIGNATURE_LEN) + _signedBy.zero(); + } else { + _signedBy.zero(); + } + } else { + _signedBy.zero(); + } + } + } + + std::sort(&(_qualifiers[0]),&(_qualifiers[_qualifierCount])); +} + +#endif // ZT_SUPPORT_OLD_STYLE_NETCONF + +bool CertificateOfMembership::agreesWith(const CertificateOfMembership &other) const +{ + unsigned int myidx = 0; + unsigned int otheridx = 0; + if ((_qualifierCount == 0)||(other._qualifierCount == 0)) return false; - std::map< uint64_t, uint64_t > otherFields; - for(unsigned int i=0;i= 3)&&(qid <= 6)) - fullIdentityVerification = true; - std::map< uint64_t, uint64_t >::iterator otherQ(otherFields.find(qid)); - if (otherQ == otherFields.end()) + while (myidx < _qualifierCount) { + // Fail if we're at the end of other, since this means the field is + // missing. + if (otheridx >= other._qualifierCount) return false; - const uint64_t a = _qualifiers[i].value; - const uint64_t b = otherQ->second; - if (((a >= b) ? (a - b) : (b - a)) > _qualifiers[i].maxDelta) - return false; - } - // If this COM has a full hash of its identity, assume the other must have this as well. - // Otherwise we are on a controller that does not incorporate these. - if (fullIdentityVerification) { - uint64_t idHash[6]; - otherIdentity.publicKeyHash(idHash); - for(unsigned long i=0;i<4;++i) { - std::map< uint64_t, uint64_t >::iterator otherQ(otherFields.find((uint64_t)(i + 3))); - if (otherQ == otherFields.end()) - return false; - if (otherQ->second != Utils::ntoh(idHash[i])) + // Seek to corresponding tuple in other, ignoring tuples that + // we may not have. If we run off the end of other, the tuple is + // missing. This works because tuples are sorted by ID. + while (other._qualifiers[otheridx].id != _qualifiers[myidx].id) { + ++otheridx; + if (otheridx >= other._qualifierCount) return false; } + + // Compare to determine if the absolute value of the difference + // between these two parameters is within our maxDelta. + const uint64_t a = _qualifiers[myidx].value; + const uint64_t b = other._qualifiers[myidx].value; + if (((a >= b) ? (a - b) : (b - a)) > _qualifiers[myidx].maxDelta) + return false; + + ++myidx; } return true; diff --git a/node/CertificateOfMembership.hpp b/node/CertificateOfMembership.hpp index 1948dd7b7..f8500628d 100644 --- a/node/CertificateOfMembership.hpp +++ b/node/CertificateOfMembership.hpp @@ -94,8 +94,6 @@ public: * ZeroTier address to whom certificate was issued */ COM_RESERVED_ID_ISSUED_TO = 2 - - // IDs 3-6 reserved for full hash of identity to which this COM was issued. }; /** @@ -112,7 +110,20 @@ public: * @param nwid Network ID * @param issuedTo Certificate recipient */ - CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Identity &issuedTo); + CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Address &issuedTo) + { + _qualifiers[0].id = COM_RESERVED_ID_TIMESTAMP; + _qualifiers[0].value = timestamp; + _qualifiers[0].maxDelta = timestampMaxDelta; + _qualifiers[1].id = COM_RESERVED_ID_NETWORK_ID; + _qualifiers[1].value = nwid; + _qualifiers[1].maxDelta = 0; + _qualifiers[2].id = COM_RESERVED_ID_ISSUED_TO; + _qualifiers[2].value = issuedTo.toInt(); + _qualifiers[2].maxDelta = 0xffffffffffffffffULL; + _qualifierCount = 3; + memset(_signature.data,0,ZT_C25519_SIGNATURE_LEN); + } /** * Create from binary-serialized COM in buffer @@ -172,6 +183,36 @@ public: return 0ULL; } + /** + * Add or update a qualifier in this certificate + * + * Any signature is invalidated and signedBy is set to null. + * + * @param id Qualifier ID + * @param value Qualifier value + * @param maxDelta Qualifier maximum allowed difference (absolute value of difference) + */ + void setQualifier(uint64_t id,uint64_t value,uint64_t maxDelta); + inline void setQualifier(ReservedId id,uint64_t value,uint64_t maxDelta) { setQualifier((uint64_t)id,value,maxDelta); } + +#ifdef ZT_SUPPORT_OLD_STYLE_NETCONF + /** + * @return String-serialized representation of this certificate + */ + std::string toString() const; + + /** + * Set this certificate equal to the hex-serialized string + * + * Invalid strings will result in invalid or undefined certificate + * contents. These will subsequently fail validation and comparison. + * Empty strings will result in an empty certificate. + * + * @param s String to deserialize + */ + void fromString(const char *s); +#endif // ZT_SUPPORT_OLD_STYLE_NETCONF + /** * Compare two certificates for parameter agreement * @@ -183,10 +224,9 @@ public: * tuples present in this cert but not in other result in 'false'. * * @param other Cert to compare with - * @param otherIdentity Identity of other node * @return True if certs agree and 'other' may be communicated with */ - bool agreesWith(const CertificateOfMembership &other, const Identity &otherIdentity) const; + bool agreesWith(const CertificateOfMembership &other) const; /** * Sign this certificate diff --git a/node/Constants.hpp b/node/Constants.hpp index 21d0754ec..400976c13 100644 --- a/node/Constants.hpp +++ b/node/Constants.hpp @@ -361,7 +361,7 @@ /** * Maximum number of outgoing packets we monitor for QoS information */ -#define ZT_QOS_MAX_OUTSTANDING_RECORDS (1024 * 16) +#define ZT_QOS_MAX_OUTSTANDING_RECORDS (1024*16) /** * Interval used for rate-limiting the computation of path quality estimates. @@ -403,11 +403,117 @@ /** * All unspecified traffic is put in this bucket. Anything in a bucket with a - * smaller value is de-prioritized. Anything in a bucket with a higher value is + * smaller value is deprioritized. Anything in a bucket with a higher value is prioritized over other traffic. */ #define ZT_AQM_DEFAULT_BUCKET 0 +/** + * How often we emit a one-liner bond summary for each peer + */ +#define ZT_MULTIPATH_BOND_STATUS_INTERVAL 60000 + +/** + * How long before we consider a path to be dead in the general sense. This is + * used while searching for default or alternative paths to try in the absence + * of direct guidance from the user or a selection policy. + */ +#define ZT_MULTIPATH_DEFAULT_FAILOVER_INTERVAL 10000 + +/** + * How often flows are evaluated + */ +#define ZT_MULTIPATH_FLOW_CHECK_INTERVAL 10000 + +/** + * How long before we consider a flow to be dead and remove it from the + * policy's list. + */ +#define ZT_MULTIPATH_FLOW_EXPIRATION_INTERVAL (60000 * 5) + +/** + * How often a flow's statistical counters are reset + */ +#define ZT_FLOW_STATS_RESET_INTERVAL ZT_MULTIPATH_FLOW_EXPIRATION_INTERVAL + +/** + * Maximum number of flows allowed before we start forcibly forgetting old ones + */ +#define ZT_FLOW_MAX_COUNT (1024*64) + +/** + * How often flows are rebalanced across link (if at all) + */ +#define ZT_FLOW_MIN_REBALANCE_INTERVAL 5000 + +/** + * How often flows are rebalanced across link (if at all) + */ +#define ZT_FLOW_REBALANCE_INTERVAL 5000 + +/** + * A defensive timer to prevent path quality metrics from being + * processed too often. + */ +#define ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY + +/** + * How often a bonding policy's background tasks are processed, + * some need more frequent attention than others. + */ +#define ZT_MULTIPATH_ACTIVE_BACKUP_CHECK_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY + +/** + * Minimum amount of time (since a previous transition) before the active-backup bonding + * policy is allowed to transition to a different link. Only valid for active-backup. + */ +#define ZT_MULTIPATH_MIN_ACTIVE_BACKUP_AUTOFLOP_INTERVAL 10000 + +/** + * How often a peer checks that incoming (and outgoing) traffic on a bonded link is + * appropriately paired. + */ +#define ZT_PATH_NEGOTIATION_CHECK_INTERVAL 15000 + +/** + * Time horizon for path negotiation paths cutoff + */ +#define ZT_PATH_NEGOTIATION_CUTOFF_TIME 60000 + +/** + * Maximum number of path negotiations within cutoff time + * + * This limits response to PATH_NEGOTIATION to CUTOFF_LIMIT responses + * per CUTOFF_TIME milliseconds per peer to prevent this from being + * useful for DOS amplification attacks. + */ +#define ZT_PATH_NEGOTIATION_CUTOFF_LIMIT 8 + +/** + * How many times a peer will attempt to petition another peer to synchronize its + * traffic to the same path before giving up and surrendering to the other peer's preference. + */ +#define ZT_PATH_NEGOTIATION_TRY_COUNT 3 + +/** + * How much greater the quality of a path should be before an + * optimization procedure triggers a switch. + */ +#define ZT_MULTIPATH_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD 0.10 + +/** + * Artificially inflates the failover score for paths which meet + * certain non-performance-related policy ranking criteria. + */ +#define ZT_MULTIPATH_FAILOVER_HANDICAP_PREFERRED 500 +#define ZT_MULTIPATH_FAILOVER_HANDICAP_PRIMARY 1000 +#define ZT_MULTIPATH_FAILOVER_HANDICAP_NEGOTIATED 5000 + +/** + * An indicator that no flow is to be associated with the given packet + */ +#define ZT_QOS_NO_FLOW -1 + /** * Timeout for overall peer activity (measured from last receive) */ @@ -498,8 +604,8 @@ #define ZT_ACK_CUTOFF_LIMIT 128 #define ZT_ACK_DRAINAGE_DIVISOR (1000 / ZT_ACK_CUTOFF_LIMIT) -#define ZT_BOND_DEFAULT_REFRCTORY_PERIOD 8000 -#define ZT_BOND_MAX_REFRACTORY_PERIOD 600000 +#define ZT_MULTIPATH_DEFAULT_REFRCTORY_PERIOD 8000 +#define ZT_MULTIPATH_MAX_REFRACTORY_PERIOD 600000 /** * Maximum number of direct path pushes within cutoff time @@ -535,92 +641,6 @@ */ #define ZT_PEER_GENERAL_RATE_LIMIT 1000 - -/** - * Minimum allowed amount of time between flow/path optimizations (anti-flapping) - */ -#define ZT_BOND_OPTIMIZE_INTERVAL 15000 - -/** - * Maximum number of flows allowed before we start forcibly forgetting old ones - */ -#define ZT_FLOW_MAX_COUNT (1024 * 64) - -/** - * How often we emit a bond summary for each bond - */ -#define ZT_BOND_STATUS_INTERVAL 30000 - -/** - * How long before we consider a path to be dead in the general sense. This is - * used while searching for default or alternative paths to try in the absence - * of direct guidance from the user or a selection policy. - */ -#define ZT_BOND_FAILOVER_DEFAULT_INTERVAL 5000 - -/** - * Anything below this value gets into thrashing territory since we divide - * this value by ZT_BOND_ECHOS_PER_FAILOVER_INTERVAL to send ECHOs often. - */ -#define ZT_BOND_FAILOVER_MIN_INTERVAL 250 - -/** - * How many times per failover interval that an ECHO is sent. This should be - * at least 2. Anything more then 4 starts to increase overhead significantly. - */ -#define ZT_BOND_ECHOS_PER_FAILOVER_INTERVAL 4 - -/** - * A defensive timer to prevent path quality metrics from being - * processed too often. - */ -#define ZT_BOND_BACKGROUND_TASK_MIN_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY - -/** - * How often a bonding policy's background tasks are processed, - * some need more frequent attention than others. - */ -#define ZT_BOND_ACTIVE_BACKUP_CHECK_INTERVAL ZT_CORE_TIMER_TASK_GRANULARITY - -/** - * Time horizon for path negotiation paths cutoff - */ -#define ZT_PATH_NEGOTIATION_CUTOFF_TIME 60000 - -/** - * Maximum number of path negotiations within cutoff time - * - * This limits response to PATH_NEGOTIATION to CUTOFF_LIMIT responses - * per CUTOFF_TIME milliseconds per peer to prevent this from being - * useful for DOS amplification attacks. - */ -#define ZT_PATH_NEGOTIATION_CUTOFF_LIMIT 8 - -/** - * How many times a peer will attempt to petition another peer to synchronize its - * traffic to the same path before giving up and surrendering to the other peer's preference. - */ -#define ZT_PATH_NEGOTIATION_TRY_COUNT 3 - -/** - * How much greater the quality of a path should be before an - * optimization procedure triggers a switch. - */ -#define ZT_BOND_ACTIVE_BACKUP_OPTIMIZE_MIN_THRESHOLD 0.10 - -/** - * Artificially inflates the failover score for paths which meet - * certain non-performance-related policy ranking criteria. - */ -#define ZT_BOND_FAILOVER_HANDICAP_PREFERRED 500 -#define ZT_BOND_FAILOVER_HANDICAP_PRIMARY 1000 -#define ZT_BOND_FAILOVER_HANDICAP_NEGOTIATED 5000 - -/** - * An indicator that no flow is to be associated with the given packet - */ -#define ZT_QOS_NO_FLOW -1 - /** * Don't do expensive identity validation more often than this * @@ -646,6 +666,11 @@ */ #define ZT_TRUST_EXPIRATION 600000 +/** + * Enable support for older network configurations from older (pre-1.1.6) controllers + */ +#define ZT_SUPPORT_OLD_STYLE_NETCONF 1 + /** * Desired buffer size for UDP sockets (used in service and osdep but defined here) */ diff --git a/node/Flow.hpp b/node/Flow.hpp new file mode 100644 index 000000000..77a4b207f --- /dev/null +++ b/node/Flow.hpp @@ -0,0 +1,124 @@ +/* + * Copyright (c)2013-2020 ZeroTier, Inc. + * + * Use of this software is governed by the Business Source License included + * in the LICENSE.TXT file in the project's root directory. + * + * Change Date: 2025-01-01 + * + * On the date above, in accordance with the Business Source License, use + * of this software will be governed by version 2.0 of the Apache License. + */ +/****/ + +#ifndef ZT_FLOW_HPP +#define ZT_FLOW_HPP + +#include "Path.hpp" +#include "SharedPtr.hpp" + +namespace ZeroTier { + +/** + * A protocol flow that is identified by the origin and destination port. + */ +struct Flow +{ + /** + * @param flowId Given flow ID + * @param now Current time + */ + Flow(int32_t flowId, int64_t now) : + _flowId(flowId), + _bytesInPerUnitTime(0), + _bytesOutPerUnitTime(0), + _lastActivity(now), + _lastPathReassignment(0), + _assignedPath(SharedPtr()) + {} + + /** + * Reset flow statistics + */ + void resetByteCounts() + { + _bytesInPerUnitTime = 0; + _bytesOutPerUnitTime = 0; + } + + /** + * @return The Flow's ID + */ + int32_t id() { return _flowId; } + + /** + * @return Number of incoming bytes processed on this flow per unit time + */ + int64_t bytesInPerUnitTime() { return _bytesInPerUnitTime; } + + /** + * Record number of incoming bytes on this flow + * + * @param bytes Number of incoming bytes + */ + void recordIncomingBytes(uint64_t bytes) { _bytesInPerUnitTime += bytes; } + + /** + * @return Number of outgoing bytes processed on this flow per unit time + */ + int64_t bytesOutPerUnitTime() { return _bytesOutPerUnitTime; } + + /** + * Record number of outgoing bytes on this flow + * + * @param bytes + */ + void recordOutgoingBytes(uint64_t bytes) { _bytesOutPerUnitTime += bytes; } + + /** + * @return The total number of bytes processed on this flow + */ + uint64_t totalBytes() { return _bytesInPerUnitTime + _bytesOutPerUnitTime; } + + /** + * How long since a packet was sent or received in this flow + * + * @param now Current time + * @return The age of the flow in terms of last recorded activity + */ + int64_t age(int64_t now) { return now - _lastActivity; } + + /** + * Record that traffic was processed on this flow at the given time. + * + * @param now Current time + */ + void updateActivity(int64_t now) { _lastActivity = now; } + + /** + * @return Path assigned to this flow + */ + SharedPtr assignedPath() { return _assignedPath; } + + /** + * @param path Assigned path over which this flow should be handled + */ + void assignPath(const SharedPtr &path, int64_t now) { + _assignedPath = path; + _lastPathReassignment = now; + } + + AtomicCounter __refCount; + + int32_t _flowId; + uint64_t _bytesInPerUnitTime; + uint64_t _bytesOutPerUnitTime; + int64_t _lastActivity; + int64_t _lastPathReassignment; + SharedPtr _assignedPath; + SharedPtr _previouslyAssignedPath; +}; + +} // namespace ZeroTier + +#endif \ No newline at end of file diff --git a/node/Identity.hpp b/node/Identity.hpp index cc8de5126..e6f658dc3 100644 --- a/node/Identity.hpp +++ b/node/Identity.hpp @@ -109,18 +109,6 @@ public: */ inline bool hasPrivate() const { return (_privateKey != (C25519::Private *)0); } - /** - * Compute a SHA384 hash of this identity's address and public key(s). - * - * @param sha384buf Buffer with 48 bytes of space to receive hash - */ - inline void publicKeyHash(void *sha384buf) const - { - uint8_t address[ZT_ADDRESS_LENGTH]; - _address.copyTo(address, ZT_ADDRESS_LENGTH); - SHA384(sha384buf, address, ZT_ADDRESS_LENGTH, _publicKey.data, ZT_C25519_PUBLIC_KEY_LEN); - } - /** * Compute the SHA512 hash of our private key (if we have one) * diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index 5a2a94642..d1f0f51dc 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -88,6 +88,7 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,void *tPtr,int32_t f peer->received(tPtr,_path,hops(),packetId(),payloadLength(),v,0,Packet::VERB_NOP,false,0,ZT_QOS_NO_FLOW); break; case Packet::VERB_HELLO: r = _doHELLO(RR,tPtr,true); break; + case Packet::VERB_ACK: r = _doACK(RR,tPtr,peer); break; case Packet::VERB_QOS_MEASUREMENT: r = _doQOS_MEASUREMENT(RR,tPtr,peer); break; case Packet::VERB_ERROR: r = _doERROR(RR,tPtr,peer); break; case Packet::VERB_OK: r = _doOK(RR,tPtr,peer); break; @@ -190,29 +191,6 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar } } break; - case Packet::ERROR_NETWORK_AUTHENTICATION_REQUIRED: { - const SharedPtr network(RR->node->network(at(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD))); - if ((network)&&(network->controller() == peer->address())) { - bool noUrl = true; - int s = (int)size() - (ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 8); - if (s > 2) { - const uint16_t errorDataSize = at(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 8); - s -= 2; - if (s >= (int)errorDataSize) { - Dictionary<3072> authInfo(((const char *)this->data()) + (ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 10), errorDataSize); - char authenticationURL[2048]; - if (authInfo.get("aU", authenticationURL, sizeof(authenticationURL)) > 0) { - authenticationURL[sizeof(authenticationURL) - 1] = 0; // ensure always zero terminated - network->setAuthenticationRequired(authenticationURL); - noUrl = false; - } - } - } - if (noUrl) - network->setAuthenticationRequired(""); - } - } break; - default: break; } @@ -221,12 +199,35 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar return true; } +bool IncomingPacket::_doACK(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer) +{ + SharedPtr bond = peer->bond(); + if (!bond || !bond->rateGateACK(RR->node->now())) { + return true; + } + /* Dissect incoming ACK packet. From this we can estimate current throughput of the path, establish known + * maximums and detect packet loss. */ + int32_t ackedBytes; + if (payloadLength() != sizeof(ackedBytes)) { + return true; // ignore + } + memcpy(&ackedBytes, payload(), sizeof(ackedBytes)); + if (bond) { + bond->receivedAck(_path, RR->node->now(), Utils::ntoh(ackedBytes)); + } + return true; +} + bool IncomingPacket::_doQOS_MEASUREMENT(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer) { SharedPtr bond = peer->bond(); - if (!bond || !bond->rateGateQoS(RR->node->now(), _path)) { + /* TODO: Fix rate gate issue + if (!bond || !bond->rateGateQoS(RR->node->now())) { return true; } + */ + /* Dissect incoming QoS packet. From this we can compute latency values and their variance. + * The latency variance is used as a measure of "jitter". */ if (payloadLength() > ZT_QOS_MAX_PACKET_SIZE || payloadLength() < ZT_QOS_MIN_PACKET_SIZE) { return true; // ignore } @@ -1305,7 +1306,7 @@ bool IncomingPacket::_doPATH_NEGOTIATION_REQUEST(const RuntimeEnvironment *RR,vo { uint64_t now = RR->node->now(); SharedPtr bond = peer->bond(); - if (!bond || !bond->rateGatePathNegotiation(now, _path)) { + if (!bond || !bond->rateGatePathNegotiation(now)) { return true; } if (payloadLength() != sizeof(int16_t)) { diff --git a/node/IncomingPacket.hpp b/node/IncomingPacket.hpp index 95785795a..134b5b3d0 100644 --- a/node/IncomingPacket.hpp +++ b/node/IncomingPacket.hpp @@ -112,6 +112,7 @@ private: // been authenticated, decrypted, decompressed, and classified. bool _doERROR(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doHELLO(const RuntimeEnvironment *RR,void *tPtr,const bool alreadyAuthenticated); + bool _doACK(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doQOS_MEASUREMENT(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doOK(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); bool _doWHOIS(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr &peer); diff --git a/node/Membership.hpp b/node/Membership.hpp index 63a7c10f5..476987714 100644 --- a/node/Membership.hpp +++ b/node/Membership.hpp @@ -91,14 +91,13 @@ public: * Check whether the peer represented by this Membership should be allowed on this network at all * * @param nconf Our network config - * @param otherNodeIdentity Identity of remote node * @return True if this peer is allowed on this network at all */ - inline bool isAllowedOnNetwork(const NetworkConfig &thisNodeNetworkConfig, const Identity &otherNodeIdentity) const + inline bool isAllowedOnNetwork(const NetworkConfig &nconf) const { - if (thisNodeNetworkConfig.isPublic()) return true; + if (nconf.isPublic()) return true; if (_com.timestamp() <= _comRevocationThreshold) return false; - return thisNodeNetworkConfig.com.agreesWith(_com, otherNodeIdentity); + return nconf.com.agreesWith(_com); } inline bool recentlyAssociated(const int64_t now) const diff --git a/node/Network.cpp b/node/Network.cpp index f3138f3ac..914c96bc6 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -1022,7 +1022,6 @@ int Network::setConfiguration(void *tPtr,const NetworkConfig &nconf,bool saveToD } _portError = RR->node->configureVirtualNetworkPort(tPtr,_id,&_uPtr,(oldPortInitialized) ? ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE : ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP,&ctmp); - _authenticationURL = nconf.authenticationURL; if (saveToDisk) { Dictionary *const d = new Dictionary(); @@ -1227,7 +1226,7 @@ bool Network::gate(void *tPtr,const SharedPtr &peer) try { if (_config) { Membership *m = _memberships.get(peer->address()); - if ( (_config.isPublic()) || ((m)&&(m->isAllowedOnNetwork(_config, peer->identity()))) ) { + if ( (_config.isPublic()) || ((m)&&(m->isAllowedOnNetwork(_config))) ) { if (!m) m = &(_membership(peer->address())); if (m->multicastLikeGate(now)) { @@ -1380,8 +1379,6 @@ ZT_VirtualNetworkStatus Network::_status() const return ZT_NETWORK_STATUS_NOT_FOUND; case NETCONF_FAILURE_NONE: return ((_config) ? ZT_NETWORK_STATUS_OK : ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION); - case NETCONF_FAILURE_AUTHENTICATION_REQUIRED: - return ZT_NETWORK_STATUS_AUTHENTICATION_REQUIRED; default: return ZT_NETWORK_STATUS_PORT_ERROR; } @@ -1432,10 +1429,6 @@ void Network::_externalConfig(ZT_VirtualNetworkConfig *ec) const } memcpy(&ec->dns, &_config.dns, sizeof(ZT_VirtualNetworkDNS)); - - Utils::scopy(ec->authenticationURL, sizeof(ec->authenticationURL), _authenticationURL.c_str()); - ec->authenticationExpiryTime = _config.authenticationExpiryTime; - ec->ssoEnabled = _config.ssoEnabled; } void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMulticastGroup) @@ -1487,11 +1480,8 @@ void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMu Membership *m = (Membership *)0; Hashtable::Iterator i(_memberships); while (i.next(a,m)) { - const Identity remoteIdentity(RR->topology->getIdentity(tPtr, *a)); - if (remoteIdentity) { - if ( ( m->multicastLikeGate(now) || (newMulticastGroup) ) && (m->isAllowedOnNetwork(_config, remoteIdentity)) && (!std::binary_search(alwaysAnnounceTo.begin(),alwaysAnnounceTo.end(),*a)) ) - _announceMulticastGroupsTo(tPtr,*a,groups); - } + if ( ( m->multicastLikeGate(now) || (newMulticastGroup) ) && (m->isAllowedOnNetwork(_config)) && (!std::binary_search(alwaysAnnounceTo.begin(),alwaysAnnounceTo.end(),*a)) ) + _announceMulticastGroupsTo(tPtr,*a,groups); } } } diff --git a/node/Network.hpp b/node/Network.hpp index 33de16911..b20d8b66b 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -220,17 +220,6 @@ public: _netconfFailure = NETCONF_FAILURE_NOT_FOUND; } - /** - * Set netconf failure to 'authentication required' possibly with an authorization URL - */ - inline void setAuthenticationRequired(const char *url) - { - Mutex::Lock _l(_lock); - _netconfFailure = NETCONF_FAILURE_AUTHENTICATION_REQUIRED; - _authenticationURL = (url) ? url : ""; - _config.ssoEnabled = true; - } - /** * Causes this network to request an updated configuration from its master node now * @@ -446,11 +435,9 @@ private: NETCONF_FAILURE_NONE, NETCONF_FAILURE_ACCESS_DENIED, NETCONF_FAILURE_NOT_FOUND, - NETCONF_FAILURE_INIT_FAILED, - NETCONF_FAILURE_AUTHENTICATION_REQUIRED + NETCONF_FAILURE_INIT_FAILED } _netconfFailure; int _portError; // return value from port config callback - std::string _authenticationURL; Hashtable _memberships; diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index 6d148cc45..5259a3e32 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -182,14 +182,6 @@ bool NetworkConfig::toDictionary(Dictionary &d,b if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_DNS,*tmp)) return false; } - if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, this->ssoEnabled)) return false; - if (this->ssoEnabled) { - if (this->authenticationURL[0]) { - if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL)) return false; - } - if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, this->authenticationExpiryTime)) return false; - } - delete tmp; } catch ( ... ) { delete tmp; @@ -373,20 +365,6 @@ bool NetworkConfig::fromDictionary(const DictionaryssoEnabled = d.getB(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, false); - if (this->ssoEnabled) { - if (d.get(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL, (unsigned int)sizeof(this->authenticationURL)) > 0) { - this->authenticationURL[sizeof(this->authenticationURL) - 1] = 0; // ensure null terminated - } else { - this->authenticationURL[0] = 0; - } - this->authenticationExpiryTime = d.getI(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, 0); - } else { - this->authenticationURL[0] = 0; - this->authenticationExpiryTime = 0; - } } //printf("~~~\n%s\n~~~\n",d.data()); diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index 301852adf..06e0127fe 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -94,7 +94,7 @@ namespace ZeroTier { // Dictionary capacity needed for max size network config -#define ZT_NETWORKCONFIG_DICT_CAPACITY (4096 + (sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES) + (sizeof(Capability) * ZT_MAX_NETWORK_CAPABILITIES) + (sizeof(Tag) * ZT_MAX_NETWORK_TAGS) + (sizeof(CertificateOfOwnership) * ZT_MAX_CERTIFICATES_OF_OWNERSHIP)) +#define ZT_NETWORKCONFIG_DICT_CAPACITY (1024 + (sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES) + (sizeof(Capability) * ZT_MAX_NETWORK_CAPABILITIES) + (sizeof(Tag) * ZT_MAX_NETWORK_TAGS) + (sizeof(CertificateOfOwnership) * ZT_MAX_CERTIFICATES_OF_OWNERSHIP)) // Dictionary capacity needed for max size network meta-data #define ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY 1024 @@ -178,12 +178,6 @@ namespace ZeroTier { #define ZT_NETWORKCONFIG_DICT_KEY_CERTIFICATES_OF_OWNERSHIP "COO" // dns (binary blobs) #define ZT_NETWORKCONFIG_DICT_KEY_DNS "DNS" -// sso enabld -#define ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED "ssoe" -// authentication URL -#define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL "aurl" -// authentication expiry -#define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME "aexpt" // Legacy fields -- these are obsoleted but are included when older clients query @@ -239,10 +233,7 @@ public: tags(), certificatesOfOwnership(), type(ZT_NETWORK_TYPE_PRIVATE), - dnsCount(0), - ssoEnabled(false), - authenticationURL(), - authenticationExpiryTime(0) + dnsCount(0) { name[0] = 0; memset(specialists, 0, sizeof(uint64_t)*ZT_MAX_NETWORK_SPECIALISTS); @@ -613,21 +604,6 @@ public: * ZT pushed DNS configuration */ ZT_VirtualNetworkDNS dns; - - /** - * SSO enabled flag. - */ - bool ssoEnabled; - - /** - * Authentication URL if authentication is required - */ - char authenticationURL[2048]; - - /** - * Time current authentication expires or 0 if external authentication is disabled - */ - uint64_t authenticationExpiryTime; }; } // namespace ZeroTier diff --git a/node/NetworkController.hpp b/node/NetworkController.hpp index 3bf570c97..29a2d8f17 100644 --- a/node/NetworkController.hpp +++ b/node/NetworkController.hpp @@ -38,8 +38,7 @@ public: NC_ERROR_NONE = 0, NC_ERROR_OBJECT_NOT_FOUND = 1, NC_ERROR_ACCESS_DENIED = 2, - NC_ERROR_INTERNAL_SERVER_ERROR = 3, - NC_ERROR_AUTHENTICATION_REQUIRED = 4 + NC_ERROR_INTERNAL_SERVER_ERROR = 3 }; /** @@ -70,17 +69,12 @@ public: /** * Send a network configuration request error * - * If errorData/errorDataSize are provided they must point to a valid serialized - * Dictionary containing error data. They can be null/zero if not specified. - * * @param nwid Network ID * @param requestPacketId Request packet ID or 0 if none * @param destination Destination peer Address * @param errorCode Error code - * @param errorData Data associated with error or NULL if none - * @param errorDataSize Size of errorData in bytes */ - virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode, const void *errorData, unsigned int errorDataSize) = 0; + virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode) = 0; }; NetworkController() {} diff --git a/node/Node.cpp b/node/Node.cpp index 5b0fa8cc5..05f5a247b 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -103,7 +103,7 @@ Node::Node(void *uptr,void *tptr,const struct ZT_Node_Callbacks *callbacks,int64 const unsigned long mcs = sizeof(Multicaster) + (((sizeof(Multicaster) & 0xf) != 0) ? (16 - (sizeof(Multicaster) & 0xf)) : 0); const unsigned long topologys = sizeof(Topology) + (((sizeof(Topology) & 0xf) != 0) ? (16 - (sizeof(Topology) & 0xf)) : 0); const unsigned long sas = sizeof(SelfAwareness) + (((sizeof(SelfAwareness) & 0xf) != 0) ? (16 - (sizeof(SelfAwareness) & 0xf)) : 0); - const unsigned long bc = sizeof(Bond) + (((sizeof(Bond) & 0xf) != 0) ? (16 - (sizeof(Bond) & 0xf)) : 0); + const unsigned long bc = sizeof(BondController) + (((sizeof(BondController) & 0xf) != 0) ? (16 - (sizeof(BondController) & 0xf)) : 0); m = reinterpret_cast(::malloc(16 + ts + sws + mcs + topologys + sas + bc)); if (!m) @@ -121,14 +121,14 @@ Node::Node(void *uptr,void *tptr,const struct ZT_Node_Callbacks *callbacks,int64 m += topologys; RR->sa = new (m) SelfAwareness(RR); m += sas; - RR->bc = new (m) Bond(RR); + RR->bc = new (m) BondController(RR); } catch ( ... ) { if (RR->sa) RR->sa->~SelfAwareness(); if (RR->topology) RR->topology->~Topology(); if (RR->mc) RR->mc->~Multicaster(); if (RR->sw) RR->sw->~Switch(); if (RR->t) RR->t->~Trace(); - if (RR->bc) RR->bc->~Bond(); + if (RR->bc) RR->bc->~BondController(); ::free(m); throw; } @@ -147,7 +147,7 @@ Node::~Node() if (RR->mc) RR->mc->~Multicaster(); if (RR->sw) RR->sw->~Switch(); if (RR->t) RR->t->~Trace(); - if (RR->bc) RR->bc->~Bond(); + if (RR->bc) RR->bc->~BondController(); ::free(RR->rtmem); } @@ -252,14 +252,18 @@ ZT_ResultCode Node::processBackgroundTasks(void *tptr,int64_t now,volatile int64 _now = now; Mutex::Lock bl(_backgroundTasksLock); - // Process background bond tasks - unsigned long bondCheckInterval = ZT_PING_CHECK_INVERVAL; + + unsigned long bondCheckInterval = ZT_CORE_TIMER_TASK_GRANULARITY; if (RR->bc->inUse()) { - bondCheckInterval = std::max(RR->bc->minReqMonitorInterval(), ZT_CORE_TIMER_TASK_GRANULARITY); - if ((now - _lastGratuitousPingCheck) >= ZT_CORE_TIMER_TASK_GRANULARITY) { + // Gratuitously ping active peers so that QoS metrics have enough data to work with (if active path monitoring is enabled) + bondCheckInterval = std::min(std::max(RR->bc->minReqPathMonitorInterval(), ZT_CORE_TIMER_TASK_GRANULARITY), ZT_PING_CHECK_INVERVAL); + if ((now - _lastGratuitousPingCheck) >= bondCheckInterval) { + Hashtable< Address,std::vector > alwaysContact; + _PingPeersThatNeedPing pfunc(RR,tptr,alwaysContact,now); + RR->topology->eachPeer<_PingPeersThatNeedPing &>(pfunc); _lastGratuitousPingCheck = now; - RR->bc->processBackgroundTasks(tptr, now); } + RR->bc->processBackgroundTasks(tptr, now); } unsigned long timeUntilNextPingCheck = ZT_PING_CHECK_INVERVAL; @@ -508,7 +512,7 @@ ZT_PeerList *Node::peers() const } if (pi->second->bond()) { p->isBonded = pi->second->bond(); - p->bondingPolicy = pi->second->bond()->policy(); + p->bondingPolicy = pi->second->bond()->getPolicy(); p->isHealthy = pi->second->bond()->isHealthy(); p->numAliveLinks = pi->second->bond()->getNumAliveLinks(); p->numTotalLinks = pi->second->bond()->getNumTotalLinks(); @@ -727,7 +731,7 @@ void Node::ncSendRevocation(const Address &destination,const Revocation &rev) } } -void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode, const void *errorData, unsigned int errorDataSize) +void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode) { if (destination == RR->identity.address()) { SharedPtr n(network(nwid)); @@ -740,9 +744,6 @@ void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &des case NetworkController::NC_ERROR_ACCESS_DENIED: n->setAccessDenied(); break; - case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: { - } - break; default: break; } @@ -759,18 +760,8 @@ void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &des case NetworkController::NC_ERROR_ACCESS_DENIED: outp.append((unsigned char)Packet::ERROR_NETWORK_ACCESS_DENIED_); break; - case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: - outp.append((unsigned char)Packet::ERROR_NETWORK_AUTHENTICATION_REQUIRED); - break; } - outp.append(nwid); - - if ((errorData)&&(errorDataSize > 0)&&(errorDataSize <= 0xffff)) { - outp.append((uint16_t)errorDataSize); - outp.append(errorData, errorDataSize); - } - RR->sw->send((void *)0,outp,true); } // else we can't send an ERROR() in response to nothing, so discard } diff --git a/node/Node.hpp b/node/Node.hpp index 52506ed9e..2bbd3b47f 100644 --- a/node/Node.hpp +++ b/node/Node.hpp @@ -34,7 +34,7 @@ #include "Salsa20.hpp" #include "NetworkController.hpp" #include "Hashtable.hpp" -#include "Bond.hpp" +#include "BondController.hpp" // Bit mask for "expecting reply" hash #define ZT_EXPECTING_REPLIES_BUCKET_MASK1 255 @@ -187,7 +187,7 @@ public: inline const Identity &identity() const { return _RR.identity; } - inline Bond *bondController() const { return _RR.bc; } + inline BondController *bondController() const { return _RR.bc; } /** * Register that we are expecting a reply to a packet ID @@ -245,7 +245,7 @@ public: virtual void ncSendConfig(uint64_t nwid,uint64_t requestPacketId,const Address &destination,const NetworkConfig &nc,bool sendLegacyFormatConfig); virtual void ncSendRevocation(const Address &destination,const Revocation &rev); - virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode, const void *errorData, unsigned int errorDataSize); + virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode); inline const Address &remoteTraceTarget() const { return _remoteTraceTarget; } inline Trace::Level remoteTraceLevel() const { return _remoteTraceLevel; } diff --git a/node/Packet.hpp b/node/Packet.hpp index 7219a3310..78846ecdd 100644 --- a/node/Packet.hpp +++ b/node/Packet.hpp @@ -792,12 +792,6 @@ public: * * ERROR response payload: * <[8] 64-bit network ID> - * <[2] 16-bit length of error-related data (optional)> - * <[...] error-related data (optional)> - * - * Error related data is a Dictionary containing things like a URL - * for authentication or a human-readable error message, and is - * optional and may be absent or empty. */ VERB_NETWORK_CONFIG_REQUEST = 0x0b, @@ -1082,10 +1076,7 @@ public: ERROR_NETWORK_ACCESS_DENIED_ = 0x07, /* extra _ at end to avoid Windows name conflict */ /* Multicasts to this group are not wanted */ - ERROR_UNWANTED_MULTICAST = 0x08, - - /* Network requires external or 2FA authentication (e.g. SSO). */ - ERROR_NETWORK_AUTHENTICATION_REQUIRED = 0x09 + ERROR_UNWANTED_MULTICAST = 0x08 }; template diff --git a/node/Path.hpp b/node/Path.hpp index 753bf0ab2..0839158af 100644 --- a/node/Path.hpp +++ b/node/Path.hpp @@ -29,6 +29,8 @@ #include "Packet.hpp" #include "RingBuffer.hpp" +#include "../osdep/Link.hpp" + /** * Maximum return value of preferenceRank() */ @@ -86,7 +88,46 @@ public: _localSocket(-1), _latency(0xffff), _addr(), - _ipScope(InetAddress::IP_SCOPE_NONE) + _ipScope(InetAddress::IP_SCOPE_NONE), + _lastAckReceived(0), + _lastAckSent(0), + _lastQoSMeasurement(0), + _lastThroughputEstimation(0), + _lastRefractoryUpdate(0), + _lastAliveToggle(0), + _lastEligibilityState(false), + _lastTrialBegin(0), + _refractoryPeriod(0), + _monitorInterval(0), + _upDelay(0), + _downDelay(0), + _ipvPref(0), + _mode(0), + _onlyPathOnLink(false), + _enabled(false), + _bonded(false), + _negotiated(false), + _deprecated(false), + _shouldReallocateFlows(false), + _assignedFlowCount(0), + _latencyMean(0), + _latencyVariance(0), + _packetLossRatio(0), + _packetErrorRatio(0), + _throughputMean(0), + _throughputMax(0), + _throughputVariance(0), + _allocation(0), + _byteLoad(0), + _relativeByteLoad(0), + _affinity(0), + _failoverScore(0), + _unackedBytes(0), + _packetsReceivedSinceLastAck(0), + _packetsReceivedSinceLastQoS(0), + _bytesAckedSinceLastThroughputEstimation(0), + _packetsIn(0), + _packetsOut(0) {} Path(const int64_t localSocket,const InetAddress &addr) : @@ -96,7 +137,46 @@ public: _localSocket(localSocket), _latency(0xffff), _addr(addr), - _ipScope(addr.ipScope()) + _ipScope(addr.ipScope()), + _lastAckReceived(0), + _lastAckSent(0), + _lastQoSMeasurement(0), + _lastThroughputEstimation(0), + _lastRefractoryUpdate(0), + _lastAliveToggle(0), + _lastEligibilityState(false), + _lastTrialBegin(0), + _refractoryPeriod(0), + _monitorInterval(0), + _upDelay(0), + _downDelay(0), + _ipvPref(0), + _mode(0), + _onlyPathOnLink(false), + _enabled(false), + _bonded(false), + _negotiated(false), + _deprecated(false), + _shouldReallocateFlows(false), + _assignedFlowCount(0), + _latencyMean(0), + _latencyVariance(0), + _packetLossRatio(0), + _packetErrorRatio(0), + _throughputMean(0), + _throughputMax(0), + _throughputVariance(0), + _allocation(0), + _byteLoad(0), + _relativeByteLoad(0), + _affinity(0), + _failoverScore(0), + _unackedBytes(0), + _packetsReceivedSinceLastAck(0), + _packetsReceivedSinceLastQoS(0), + _bytesAckedSinceLastThroughputEstimation(0), + _packetsIn(0), + _packetsOut(0) {} /** @@ -106,6 +186,9 @@ public: */ inline void received(const uint64_t t) { + if (!alive(t,_bonded)) { + _lastAliveToggle = _lastIn; + } _lastIn = t; } @@ -234,11 +317,21 @@ public: return (((age < (ZT_PATH_HEARTBEAT_PERIOD + 5000)) ? l : (l + 0xffff + age)) * (long)((ZT_INETADDRESS_MAX_SCOPE - _ipScope) + 1)); } + /** + * @param bonded Whether this path is part of a bond. + */ + inline void setBonded(bool bonded) { _bonded = bonded; } + + /** + * @return True if this path is currently part of a bond. + */ + inline bool bonded() { return _bonded; } + /** * @return True if this path is alive (receiving heartbeats) */ - inline bool alive(const int64_t now) const { - return (now - _lastIn) < (ZT_PATH_HEARTBEAT_PERIOD + 5000); + inline bool alive(const int64_t now, bool bondingEnabled = false) const { + return (bondingEnabled && _monitorInterval) ? ((now - _lastIn) < (_monitorInterval * 3)) : ((now - _lastIn) < (ZT_PATH_HEARTBEAT_PERIOD + 5000)); } /** @@ -246,6 +339,11 @@ public: */ inline bool needsHeartbeat(const int64_t now) const { return ((now - _lastOut) >= ZT_PATH_HEARTBEAT_PERIOD); } + /** + * @return True if this path needs a heartbeat in accordance to the user-specified path monitor frequency + */ + inline bool needsGratuitousHeartbeat(const int64_t now) { return allowed() && (_monitorInterval > 0) && ((now - _lastOut) >= _monitorInterval); } + /** * @return Last time we sent something */ @@ -266,7 +364,134 @@ public: */ inline int64_t lastTrustEstablishedPacketReceived() const { return _lastTrustEstablishedPacketReceived; } - void *_bondingMetricPtr; + /** + * @return Time since last VERB_ACK was received + */ + inline int64_t ackAge(int64_t now) { return _lastAckReceived ? now - _lastAckReceived : 0; } + + /** + * Set or update a refractory period for the path. + * + * @param punishment How much a path should be punished + * @param pathFailure Whether this call is the result of a recent path failure + */ + inline void adjustRefractoryPeriod(int64_t now, uint32_t punishment, bool pathFailure) { + if (pathFailure) { + unsigned int suggestedRefractoryPeriod = _refractoryPeriod ? punishment + (_refractoryPeriod * 2) : punishment; + _refractoryPeriod = std::min(suggestedRefractoryPeriod, (unsigned int)ZT_MULTIPATH_MAX_REFRACTORY_PERIOD); + _lastRefractoryUpdate = 0; + } else { + uint32_t drainRefractory = 0; + if (_lastRefractoryUpdate) { + drainRefractory = (now - _lastRefractoryUpdate); + } else { + drainRefractory = (now - _lastAliveToggle); + } + _lastRefractoryUpdate = now; + if (_refractoryPeriod > drainRefractory) { + _refractoryPeriod -= drainRefractory; + } else { + _refractoryPeriod = 0; + _lastRefractoryUpdate = 0; + } + } + } + + /** + * Determine the current state of eligibility of the path. + * + * @param includeRefractoryPeriod Whether current punishment should be taken into consideration + * @return True if this path can be used in a bond at the current time + */ + inline bool eligible(uint64_t now, int ackSendInterval, bool includeRefractoryPeriod = false) { + if (includeRefractoryPeriod && _refractoryPeriod) { + return false; + } + bool acceptableAge = age(now) < ((_monitorInterval * 4) + _downDelay); // Simple RX age (driven by packets of any type and gratuitous VERB_HELLOs) + bool acceptableAckAge = ackAge(now) < (ackSendInterval); // Whether the remote peer is actually responding to our outgoing traffic or simply sending stuff to us + bool notTooEarly = (now - _lastAliveToggle) >= _upDelay; // Whether we've waited long enough since the link last came online + bool inTrial = (now - _lastTrialBegin) < _upDelay; // Whether this path is still in its trial period + bool currEligibility = allowed() && (((acceptableAge || acceptableAckAge) && notTooEarly) || inTrial); + return currEligibility; + } + + /** + * Record when this path first entered the bond. Each path is given a trial period where it is admitted + * to the bond without requiring observations to prove its performance or reliability. + */ + inline void startTrial(uint64_t now) { _lastTrialBegin = now; } + + /** + * @return True if a path is permitted to be used in a bond (according to user pref.) + */ + inline bool allowed() { + return _enabled + && (!_ipvPref + || ((_addr.isV4() && (_ipvPref == 4 || _ipvPref == 46 || _ipvPref == 64)) + || ((_addr.isV6() && (_ipvPref == 6 || _ipvPref == 46 || _ipvPref == 64))))); + } + + /** + * @return True if a path is preferred over another on the same physical link (according to user pref.) + */ + inline bool preferred() { + return _onlyPathOnLink + || (_addr.isV4() && (_ipvPref == 4 || _ipvPref == 46)) + || (_addr.isV6() && (_ipvPref == 6 || _ipvPref == 64)); + } + + /** + * @param now Current time + * @return Whether an ACK (VERB_ACK) packet needs to be emitted at this time + */ + inline bool needsToSendAck(int64_t now, int ackSendInterval) { + return ((now - _lastAckSent) >= ackSendInterval || + (_packetsReceivedSinceLastAck == ZT_QOS_TABLE_SIZE)) && _packetsReceivedSinceLastAck; + } + + /** + * @param now Current time + * @return Whether a QoS (VERB_QOS_MEASUREMENT) packet needs to be emitted at this time + */ + inline bool needsToSendQoS(int64_t now, int qosSendInterval) { + return ((_packetsReceivedSinceLastQoS >= ZT_QOS_TABLE_SIZE) || + ((now - _lastQoSMeasurement) > qosSendInterval)) && _packetsReceivedSinceLastQoS; + } + + /** + * Reset packet counters + */ + inline void resetPacketCounts() + { + _packetsIn = 0; + _packetsOut = 0; + } + + + /** + * The mean latency (computed from a sliding window.) + */ + float latencyMean() { return _latencyMean; } + + /** + * Packet delay variance (computed from a sliding window.) + */ + float latencyVariance() { return _latencyVariance; } + + /** + * The ratio of lost packets to received packets. + */ + float packetLossRatio() { return _packetLossRatio; } + + /** + * The ratio of packets that failed their MAC/CRC checks to those that did not. + */ + float packetErrorRatio() { return _packetErrorRatio; } + + /** + * + */ + uint8_t allocation() { return _allocation; } private: @@ -278,6 +503,212 @@ private: InetAddress _addr; InetAddress::IpScope _ipScope; // memoize this since it's a computed value checked often AtomicCounter __refCount; + + std::map qosStatsOut; // id:egress_time + std::map qosStatsIn; // id:now + std::map ackStatsIn; // id:len + + RingBuffer qosRecordSize; + RingBuffer qosRecordLossSamples; + RingBuffer throughputSamples; + RingBuffer packetValiditySamples; + RingBuffer _throughputVarianceSamples; + RingBuffer latencySamples; + + /** + * Last time that a VERB_ACK was received on this path. + */ + uint64_t _lastAckReceived; + + /** + * Last time that a VERB_ACK was sent out on this path. + */ + uint64_t _lastAckSent; + + /** + * Last time that a VERB_QOS_MEASUREMENT was sent out on this path. + */ + uint64_t _lastQoSMeasurement; + + /** + * Last time that the path's throughput was estimated. + */ + uint64_t _lastThroughputEstimation; + + /** + * The last time that the refractory period was updated. + */ + uint64_t _lastRefractoryUpdate; + + /** + * The last time that the path was marked as "alive". + */ + uint64_t _lastAliveToggle; + + /** + * State of eligibility at last check. Used for determining state changes. + */ + bool _lastEligibilityState; + + /** + * Timestamp indicating when this path's trial period began. + */ + uint64_t _lastTrialBegin; + + /** + * Amount of time that this path will be prevented from becoming a member of a bond. + */ + uint32_t _refractoryPeriod; + + /** + * Monitor interval specific to this path or that was inherited from the bond controller. + */ + int32_t _monitorInterval; + + /** + * Up delay interval specific to this path or that was inherited from the bond controller. + */ + uint32_t _upDelay; + + /** + * Down delay interval specific to this path or that was inherited from the bond controller. + */ + uint32_t _downDelay; + + /** + * IP version preference inherited from the physical link. + */ + uint8_t _ipvPref; + + /** + * Mode inherited from the physical link. + */ + uint8_t _mode; + + /** + * IP version preference inherited from the physical link. + */ + bool _onlyPathOnLink; + + /** + * Enabled state inherited from the physical link. + */ + bool _enabled; + + /** + * Whether this path is currently part of a bond. + */ + bool _bonded; + + /** + * Whether this path was intentionally negotiated by either peer. + */ + bool _negotiated; + + /** + * Whether this path has been deprecated due to performance issues. Current traffic flows + * will be re-allocated to other paths in the most non-disruptive manner (if possible), + * and new traffic will not be allocated to this path. + */ + bool _deprecated; + + /** + * Whether flows should be moved from this path. Current traffic flows will be re-allocated + * immediately. + */ + bool _shouldReallocateFlows; + + /** + * The number of flows currently assigned to this path. + */ + uint16_t _assignedFlowCount; + + /** + * The mean latency (computed from a sliding window.) + */ + float _latencyMean; + + /** + * Packet delay variance (computed from a sliding window.) + */ + float _latencyVariance; + + /** + * The ratio of lost packets to received packets. + */ + float _packetLossRatio; + + /** + * The ratio of packets that failed their MAC/CRC checks to those that did not. + */ + float _packetErrorRatio; + + /** + * The estimated mean throughput of this path. + */ + uint64_t _throughputMean; + + /** + * The maximum observed throughput of this path. + */ + uint64_t _throughputMax; + + /** + * The variance in the estimated throughput of this path. + */ + float _throughputVariance; + + /** + * The relative quality of this path to all others in the bond, [0-255]. + */ + uint8_t _allocation; + + /** + * How much load this path is under. + */ + uint64_t _byteLoad; + + /** + * How much load this path is under (relative to other paths in the bond.) + */ + uint8_t _relativeByteLoad; + + /** + * Relative value expressing how "deserving" this path is of new traffic. + */ + uint8_t _affinity; + + /** + * Score that indicates to what degree this path is preferred over others that + * are available to the bonding policy. (specifically for active-backup) + */ + uint32_t _failoverScore; + + /** + * Number of bytes thus far sent that have not been acknowledged by the remote peer. + */ + int64_t _unackedBytes; + + /** + * Number of packets received since the last VERB_ACK was sent to the remote peer. + */ + int32_t _packetsReceivedSinceLastAck; + + /** + * Number of packets received since the last VERB_QOS_MEASUREMENT was sent to the remote peer. + */ + int32_t _packetsReceivedSinceLastQoS; + + /** + * Bytes acknowledged via incoming VERB_ACK since the last estimation of throughput. + */ + uint64_t _bytesAckedSinceLastThroughputEstimation; + + /** + * Counters used for tracking path load. + */ + int _packetsIn; + int _packetsOut; }; } // namespace ZeroTier diff --git a/node/Peer.cpp b/node/Peer.cpp index 941bd6c48..fb405ad92 100644 --- a/node/Peer.cpp +++ b/node/Peer.cpp @@ -50,7 +50,12 @@ Peer::Peer(const RuntimeEnvironment *renv,const Identity &myIdentity,const Ident _directPathPushCutoffCount(0), _credentialsCutoffCount(0), _echoRequestCutoffCount(0), + _uniqueAlivePathCount(0), _localMultipathSupported(false), + _remoteMultipathSupported(false), + _canUseMultipath(false), + _shouldCollectPathStatistics(0), + _bondingPolicy(0), _lastComputedAggregateMeanLatency(0) { if (!myIdentity.agree(peerIdentity,_key)) @@ -146,10 +151,6 @@ void Peer::received( _paths[replacePath].lr = now; _paths[replacePath].p = path; _paths[replacePath].priority = 1; - Mutex::Lock _l(_bond_m); - if(_bond) { - _bond->nominatePathToBond(_paths[replacePath].p, now); - } } } else { Mutex::Lock ltl(_lastTriedPath_m); @@ -228,8 +229,7 @@ void Peer::received( SharedPtr Peer::getAppropriatePath(int64_t now, bool includeExpired, int32_t flowId) { - Mutex::Lock _l(_bond_m); - if (!_bond) { + if (!_bondToPeer) { Mutex::Lock _l(_paths_m); unsigned int bestPath = ZT_MAX_PEER_NETWORK_PATHS; /** @@ -253,7 +253,7 @@ SharedPtr Peer::getAppropriatePath(int64_t now, bool includeExpired, int32 } return SharedPtr(); } - return _bond->getAppropriatePath(now, flowId); + return _bondToPeer->getAppropriatePath(now, flowId); } void Peer::introduce(void *const tPtr,const int64_t now,const SharedPtr &other) const @@ -444,32 +444,39 @@ void Peer::tryMemorizedPath(void *tPtr,int64_t now) void Peer::performMultipathStateCheck(void *tPtr, int64_t now) { - Mutex::Lock _l(_bond_m); - if (_bond) { - // Once enabled the Bond object persists, no need to update state - return; - } /** * Check for conditions required for multipath bonding and create a bond * if allowed. */ - int numAlivePaths = 0; - for(unsigned int i=0;ialive(now)) { - numAlivePaths++; + _localMultipathSupported = ((RR->bc->inUse()) && (ZT_PROTO_VERSION > 9)); + if (_localMultipathSupported) { + int currAlivePathCount = 0; + int duplicatePathsFound = 0; + for (unsigned int i=0;iaddress().ipsEqual2(_paths[j].p->address()) && i != j) { + duplicatePathsFound+=1; + break; + } + } + } } + _uniqueAlivePathCount = (currAlivePathCount - (duplicatePathsFound / 2)); + _remoteMultipathSupported = _vProto > 9; + _canUseMultipath = _localMultipathSupported && _remoteMultipathSupported && (_uniqueAlivePathCount > 1); } - _localMultipathSupported = ((numAlivePaths >= 1) && (RR->bc->inUse()) && (ZT_PROTO_VERSION > 9)); - if (_localMultipathSupported && !_bond) { + if (_canUseMultipath && !_bondToPeer) { if (RR->bc) { - _bond = RR->bc->createTransportTriggeredBond(RR, this); + _bondToPeer = RR->bc->createTransportTriggeredBond(RR, this); /** * Allow new bond to retroactively learn all paths known to this peer */ - if (_bond) { + if (_bondToPeer) { for (unsigned int i=0;inominatePathToBond(_paths[i].p, now); + _bondToPeer->nominatePath(_paths[i].p, now); } } } @@ -503,7 +510,8 @@ unsigned int Peer::doPingAndKeepalive(void *tPtr,int64_t now) if (_paths[i].p) { // Clean expired and reduced priority paths if ( ((now - _paths[i].lr) < ZT_PEER_PATH_EXPIRATION) && (_paths[i].priority == maxPriority) ) { - if ((sendFullHello)||(_paths[i].p->needsHeartbeat(now))) { + if ((sendFullHello)||(_paths[i].p->needsHeartbeat(now)) + || (_canUseMultipath && _paths[i].p->needsGratuitousHeartbeat(now))) { attemptToContactAt(tPtr,_paths[i].p->localSocket(),_paths[i].p->address(),now,sendFullHello); _paths[i].p->sent(now); sent |= (_paths[i].p->address().ss_family == AF_INET) ? 0x1 : 0x2; @@ -583,24 +591,27 @@ void Peer::resetWithinScope(void *tPtr,InetAddress::IpScope scope,int inetAddres void Peer::recordOutgoingPacket(const SharedPtr &path, const uint64_t packetId, uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) { - if (_localMultipathSupported && _bond) { - _bond->recordOutgoingPacket(path, packetId, payloadLength, verb, flowId, now); + if (!_shouldCollectPathStatistics || !_bondToPeer) { + return; } + _bondToPeer->recordOutgoingPacket(path, packetId, payloadLength, verb, flowId, now); } void Peer::recordIncomingInvalidPacket(const SharedPtr& path) { - if (_localMultipathSupported && _bond) { - _bond->recordIncomingInvalidPacket(path); + if (!_shouldCollectPathStatistics || !_bondToPeer) { + return; } + _bondToPeer->recordIncomingInvalidPacket(path); } void Peer::recordIncomingPacket(const SharedPtr &path, const uint64_t packetId, uint16_t payloadLength, const Packet::Verb verb, const int32_t flowId, int64_t now) { - if (_localMultipathSupported && _bond) { - _bond->recordIncomingPacket(path, packetId, payloadLength, verb, flowId, now); + if (!_shouldCollectPathStatistics || !_bondToPeer) { + return; } + _bondToPeer->recordIncomingPacket(path, packetId, payloadLength, verb, flowId, now); } } // namespace ZeroTier diff --git a/node/Peer.hpp b/node/Peer.hpp index cceae3ed4..a064bf697 100644 --- a/node/Peer.hpp +++ b/node/Peer.hpp @@ -33,6 +33,7 @@ #include "Hashtable.hpp" #include "Mutex.hpp" #include "Bond.hpp" +#include "BondController.hpp" #include "AES.hpp" #define ZT_PEER_MAX_SERIALIZED_STATE_SIZE (sizeof(Peer) + 32 + (sizeof(Path) * 2)) @@ -304,13 +305,12 @@ public: */ inline unsigned int latency(const int64_t now) { - if (_localMultipathSupported) { + if (_canUseMultipath) { return (int)_lastComputedAggregateMeanLatency; } else { SharedPtr bp(getAppropriatePath(now,false)); - if (bp) { + if (bp) return bp->latency(); - } return 0xffff; } } @@ -419,15 +419,35 @@ public: } /** - * Rate limit gate for inbound ECHO requests + * Rate limit gate for inbound ECHO requests. This rate limiter works + * by draining a certain number of requests per unit time. Each peer may + * theoretically receive up to ZT_ECHO_CUTOFF_LIMIT requests per second. */ inline bool rateGateEchoRequest(const int64_t now) { - if ((now - _lastEchoRequestReceived) >= ZT_PEER_GENERAL_RATE_LIMIT) { - _lastEchoRequestReceived = now; - return true; + /* + // TODO: Rethink this + if (_canUseMultipath) { + _echoRequestCutoffCount++; + int numToDrain = (now - _lastEchoCheck) / ZT_ECHO_DRAINAGE_DIVISOR; + _lastEchoCheck = now; + fprintf(stderr, "ZT_ECHO_CUTOFF_LIMIT=%d, (now - _lastEchoCheck)=%d, numToDrain=%d, ZT_ECHO_DRAINAGE_DIVISOR=%d\n", ZT_ECHO_CUTOFF_LIMIT, (now - _lastEchoCheck), numToDrain, ZT_ECHO_DRAINAGE_DIVISOR); + if (_echoRequestCutoffCount > numToDrain) { + _echoRequestCutoffCount-=numToDrain; + } + else { + _echoRequestCutoffCount = 0; + } + return (_echoRequestCutoffCount < ZT_ECHO_CUTOFF_LIMIT); + } else { + if ((now - _lastEchoRequestReceived) >= (ZT_PEER_GENERAL_RATE_LIMIT)) { + _lastEchoRequestReceived = now; + return true; + } + return false; } - return false; + */ + return true; } /** @@ -503,20 +523,16 @@ public: } /** - * @return The bonding policy used to reach this peer + * + * @return */ - SharedPtr bond() { return _bond; } + SharedPtr bond() { return _bondToPeer; } /** - * @return The bonding policy used to reach this peer + * + * @return */ - inline int8_t bondingPolicy() { - Mutex::Lock _l(_paths_m); - if (_bond) { - return _bond->policy(); - } - return ZT_BOND_POLICY_NONE; - } + inline int8_t bondingPolicy() { return _bondingPolicy; } //inline const AES *aesKeysIfSupported() const //{ return (const AES *)0; } @@ -566,7 +582,6 @@ private: _PeerPath _paths[ZT_MAX_PEER_NETWORK_PATHS]; Mutex _paths_m; - Mutex _bond_m; Identity _id; @@ -576,13 +591,18 @@ private: AtomicCounter __refCount; + bool _remotePeerMultipathEnabled; + int _uniqueAlivePathCount; bool _localMultipathSupported; + bool _remoteMultipathSupported; + bool _canUseMultipath; volatile bool _shouldCollectPathStatistics; + volatile int8_t _bondingPolicy; int32_t _lastComputedAggregateMeanLatency; - SharedPtr _bond; + SharedPtr _bondToPeer; }; } // namespace ZeroTier diff --git a/node/RuntimeEnvironment.hpp b/node/RuntimeEnvironment.hpp index 019645513..4603afa0f 100644 --- a/node/RuntimeEnvironment.hpp +++ b/node/RuntimeEnvironment.hpp @@ -30,7 +30,7 @@ class Multicaster; class NetworkController; class SelfAwareness; class Trace; -class Bond; +class BondController; /** * Holds global state for an instance of ZeroTier::Node @@ -76,7 +76,7 @@ public: Multicaster *mc; Topology *topology; SelfAwareness *sa; - Bond *bc; + BondController *bc; // This node's identity and string representations thereof Identity identity; diff --git a/node/Switch.cpp b/node/Switch.cpp index 2721cf92f..b2040455b 100644 --- a/node/Switch.cpp +++ b/node/Switch.cpp @@ -1003,12 +1003,14 @@ bool Switch::_trySend(void *tPtr,Packet &packet,bool encrypt,int32_t flowId) const SharedPtr peer(RR->topology->getPeer(tPtr,destination)); if (peer) { - if ((peer->bondingPolicy() == ZT_BOND_POLICY_BROADCAST) + if ((peer->bondingPolicy() == ZT_BONDING_POLICY_BROADCAST) && (packet.verb() == Packet::VERB_FRAME || packet.verb() == Packet::VERB_EXT_FRAME)) { const SharedPtr relay(RR->topology->getUpstreamPeer()); Mutex::Lock _l(peer->_paths_m); for(int i=0;i_paths[i].p && peer->_paths[i].p->alive(now)) { + char pathStr[128]; + peer->_paths[i].p->address().toString(pathStr); _sendViaSpecificPath(tPtr,peer,peer->_paths[i].p,now,packet,encrypt,flowId); } } @@ -1045,6 +1047,7 @@ void Switch::_sendViaSpecificPath(void *tPtr,SharedPtr peer,SharedPtrkey(),encrypt,peer->aesKeysIfSupported()); RR->node->expectReplyTo(packet.packetId()); } diff --git a/node/Trace.cpp b/node/Trace.cpp index 8443a1217..05022e95b 100644 --- a/node/Trace.cpp +++ b/node/Trace.cpp @@ -69,7 +69,7 @@ void Trace::peerConfirmingUnknownPath(void *const tPtr,const uint64_t networkId, char tmp[128]; if (!path) return; // sanity check - ZT_LOCAL_TRACE(tPtr,RR,"trying unknown path %s to %.10llx (packet %.16llx verb %d local socket %lld network %.16llx)",path->address().toString(tmp),peer.address().toInt(),packetId,verb,path->localSocket(),networkId); + ZT_LOCAL_TRACE(tPtr,RR,"trying unknown path %s to %.10llx (packet %.16llx verb %d local socket %lld network %.16llx)",path->address().toString(tmp),peer.address().toInt(),packetId,(double)verb,path->localSocket(),networkId); std::pair byn; if (networkId) { Mutex::Lock l(_byNet_m); _byNet.get(networkId,byn); } diff --git a/node/Utils.cpp b/node/Utils.cpp index a0bf07077..345326984 100644 --- a/node/Utils.cpp +++ b/node/Utils.cpp @@ -28,12 +28,10 @@ #include #include #include -#ifdef ZT_ARCH_ARM_HAS_NEON #ifdef __LINUX__ #include #endif #endif -#endif #ifdef __WINDOWS__ #include diff --git a/objects.mk b/objects.mk index 61df844bc..cc6f96ee2 100644 --- a/objects.mk +++ b/objects.mk @@ -28,7 +28,8 @@ CORE_OBJS=\ node/Topology.o \ node/Trace.o \ node/Utils.o \ - node/Bond.o + node/Bond.o \ + node/BondController.o ONE_OBJS=\ controller/EmbeddedNetworkController.o \ diff --git a/one.cpp b/one.cpp index 26bcb8cdf..062781745 100644 --- a/one.cpp +++ b/one.cpp @@ -84,7 +84,7 @@ #include "osdep/Http.hpp" #include "osdep/Thread.hpp" -#include "node/Bond.hpp" +#include "node/BondController.hpp" #include "service/OneService.hpp" @@ -393,9 +393,7 @@ static int cli(int argc,char **argv) char tmp[256]; std::string addr = path["address"]; const int64_t now = OSUtils::now(); - int64_t lastSendDiff = (uint64_t)path["lastSend"] ? now - (uint64_t)path["lastSend"] : -1; - int64_t lastReceiveDiff = (uint64_t)path["lastReceive"] ? now - (uint64_t)path["lastReceive"] : -1; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%s;%lld;%lld",addr.c_str(),lastSendDiff,lastReceiveDiff); + OSUtils::ztsnprintf(tmp,sizeof(tmp),"%s;%lld;%lld",addr.c_str(),now - (int64_t)path["lastSend"],now - (int64_t)path["lastReceive"]); bestPath = tmp; break; } @@ -462,9 +460,7 @@ static int cli(int argc,char **argv) char tmp[256]; std::string addr = path["address"]; const int64_t now = OSUtils::now(); - int64_t lastSendDiff = (uint64_t)path["lastSend"] ? now - (uint64_t)path["lastSend"] : -1; - int64_t lastReceiveDiff = (uint64_t)path["lastReceive"] ? now - (uint64_t)path["lastReceive"] : -1; - OSUtils::ztsnprintf(tmp,sizeof(tmp),"%-8lld %-8lld %s",lastSendDiff,lastReceiveDiff,addr.c_str()); + OSUtils::ztsnprintf(tmp,sizeof(tmp),"%-8lld %-8lld %s",now - (int64_t)path["lastSend"],now - (int64_t)path["lastReceive"],addr.c_str()); bestPath = std::string("DIRECT ") + tmp; break; } @@ -496,13 +492,14 @@ static int cli(int argc,char **argv) return 1; } } else if (command == "bond") { - /* zerotier-cli bond */ + /* zerotier-cli bond */ if (arg1.empty()) { - printf("(bond) command is missing required arguments" ZT_EOL_S); + printf("(bond) command is missing required arugments" ZT_EOL_S); return 2; } /* zerotier-cli bond list */ if (arg1 == "list") { + fprintf(stderr, "zerotier-cli bond list\n"); const unsigned int scode = Http::GET(1024 * 1024 * 16,60000,(const struct sockaddr *)&addr,"/bonds",requestHeaders,responseHeaders,responseBody); if (scode == 0) { printf("Error connecting to the ZeroTier service: %s\n\nPlease check that the service is running and that TCP port 9993 can be contacted via 127.0.0.1." ZT_EOL_S, responseBody.c_str()); @@ -528,11 +525,11 @@ static int cli(int argc,char **argv) for(unsigned long k=0;k= ZT_BOND_POLICY_NONE && bondingPolicy <= ZT_BOND_POLICY_BALANCE_AWARE) { - policyStr = Bond::getPolicyStrByCode(bondingPolicy); + if (bondingPolicy >= ZT_BONDING_POLICY_NONE && bondingPolicy <= ZT_BONDING_POLICY_BALANCE_AWARE) { + policyStr = BondController::getPolicyStrByCode(bondingPolicy); } printf("%10s %32s %8s %d/%d" ZT_EOL_S, OSUtils::jsonString(p ["address"],"-").c_str(), @@ -563,7 +560,11 @@ static int cli(int argc,char **argv) return 1; } } - else if (arg1.length() == 10) { + else if (arg1.length() == 10) { /* zerotier-cli bond enable */ + if (arg2 == "enable") { + fprintf(stderr, "zerotier-cli bond enable\n"); + return 0; + } if (arg2 == "rotate") { /* zerotier-cli bond rotate */ fprintf(stderr, "zerotier-cli bond rotate\n"); requestHeaders["Content-Type"] = "application/json"; @@ -617,6 +618,7 @@ static int cli(int argc,char **argv) if (json) { printf("%s" ZT_EOL_S,OSUtils::jsonDump(j).c_str()); } else { + bool bFoundBond = false; std::string healthStr; if (OSUtils::jsonInt(j["isHealthy"],0)) { healthStr = "Healthy"; @@ -627,15 +629,15 @@ static int cli(int argc,char **argv) int numTotalLinks = OSUtils::jsonInt(j["numTotalLinks"],0); printf("Peer : %s\n", arg1.c_str()); printf("Bond : %s\n", OSUtils::jsonString(j["bondingPolicy"],"-").c_str()); - //if (bondingPolicy == ZT_BOND_POLICY_ACTIVE_BACKUP) { - printf("Link Select Method : %d\n", (int)OSUtils::jsonInt(j["linkSelectMethod"],0)); + //if (bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { + printf("Link Select Method : %d\n", OSUtils::jsonInt(j["linkSelectMethod"],0)); //} printf("Status : %s\n", healthStr.c_str()); printf("Links : %d/%d\n", numAliveLinks, numTotalLinks); - printf("Failover Interval : %d (ms)\n", (int)OSUtils::jsonInt(j["failoverInterval"],0)); - printf("Up Delay : %d (ms)\n", (int)OSUtils::jsonInt(j["upDelay"],0)); - printf("Down Delay : %d (ms)\n", (int)OSUtils::jsonInt(j["downDelay"],0)); - printf("Packets Per Link : %d (ms)\n", (int)OSUtils::jsonInt(j["packetsPerLink"],0)); + printf("Failover Interval : %d (ms)\n", OSUtils::jsonInt(j["failoverInterval"],0)); + printf("Up Delay : %d (ms)\n", OSUtils::jsonInt(j["upDelay"],0)); + printf("Down Delay : %d (ms)\n", OSUtils::jsonInt(j["downDelay"],0)); + printf("Packets Per Link : %d (ms)\n", OSUtils::jsonInt(j["packetsPerLink"],0)); nlohmann::json &p = j["links"]; if (p.is_array()) { printf("\n Interface Name\t\t\t\t\t Path\t Alive\n"); @@ -647,7 +649,7 @@ static int cli(int argc,char **argv) i, OSUtils::jsonString(p[i]["ifname"],"-").c_str(), OSUtils::jsonString(p[i]["path"],"-").c_str(), - (int)OSUtils::jsonInt(p[i]["alive"],0)); + OSUtils::jsonInt(p[i]["alive"],0)); } printf("\n Latency Jitter Loss Error Speed Alloc\n"); for(int i=0; i<80; i++) { printf("-"); } @@ -660,8 +662,8 @@ static int cli(int argc,char **argv) OSUtils::jsonDouble(p[i]["latencyVariance"], 0), OSUtils::jsonDouble(p[i]["packetLossRatio"], 0), OSUtils::jsonDouble(p[i]["packetErrorRatio"], 0), - (int)OSUtils::jsonInt(p[i]["givenLinkSpeed"], 0), - (int)OSUtils::jsonInt(p[i]["allocation"], 0)); + OSUtils::jsonInt(p[i]["givenLinkSpeed"], 0), + OSUtils::jsonInt(p[i]["allocation"], 0)); } } } @@ -674,7 +676,7 @@ static int cli(int argc,char **argv) } } /* zerotier-cli bond command was malformed in some way */ - printf("(bond) command is missing required arguments" ZT_EOL_S); + printf("(bond) command is missing required arugments" ZT_EOL_S); return 2; const unsigned int scode = Http::GET(1024 * 1024 * 16,60000,(const struct sockaddr *)&addr,"/bonds",requestHeaders,responseHeaders,responseBody); if (scode == 0) { @@ -709,13 +711,14 @@ static int cli(int argc,char **argv) if (j.is_array()) { for(unsigned long k=0;k= ZT_BOND_POLICY_NONE && bondingPolicy <= ZT_BOND_POLICY_BALANCE_AWARE) { - policyStr = Bond::getPolicyStrByCode(bondingPolicy); + if (bondingPolicy >= ZT_BONDING_POLICY_NONE && bondingPolicy <= ZT_BONDING_POLICY_BALANCE_AWARE) { + policyStr = BondController::getPolicyStrByCode(bondingPolicy); } printf("%10s %32s %8s %d/%d" ZT_EOL_S, @@ -786,23 +789,14 @@ static int cli(int argc,char **argv) } } if (aa.length() == 0) aa = "-"; - const std::string status = OSUtils::jsonString(n["status"],"-"); printf("200 listnetworks %s %s %s %s %s %s %s" ZT_EOL_S, OSUtils::jsonString(n["nwid"],"-").c_str(), OSUtils::jsonString(n["name"],"-").c_str(), OSUtils::jsonString(n["mac"],"-").c_str(), - status.c_str(), + OSUtils::jsonString(n["status"],"-").c_str(), OSUtils::jsonString(n["type"],"-").c_str(), OSUtils::jsonString(n["portDeviceName"],"-").c_str(), aa.c_str()); - if (OSUtils::jsonBool(n["ssoEnabled"], false)) { - uint64_t authenticationExpiryTime = n["authenticationExpiryTime"]; - if (status == "AUTHENTICATION_REQUIRED") { - printf(" AUTH EXPIRED, URL: %s" ZT_EOL_S, OSUtils::jsonString(n["authenticationURL"], "(null)").c_str()); - } else if (status == "OK") { - printf(" AUTH OK, expires in: %lld seconds" ZT_EOL_S, ((int64_t)authenticationExpiryTime - OSUtils::now()) / 1000LL); - } - } } } } @@ -1316,6 +1310,7 @@ static int cli(int argc,char **argv) struct ifconf ifc; char buf[1024]; char stringBuffer[128]; + int success = 0; int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); diff --git a/selftest.cpp b/selftest.cpp index 42e9bc232..357e9a026 100644 --- a/selftest.cpp +++ b/selftest.cpp @@ -561,8 +561,8 @@ static int testCertificate() std::cout << idA.address().toString(buf) << ", " << idB.address().toString(buf) << std::endl; std::cout << "[certificate] Generating certificates A and B..."; - CertificateOfMembership cA(10000,100,1,idA); - CertificateOfMembership cB(10099,100,1,idB); + CertificateOfMembership cA(10000,100,1,idA.address()); + CertificateOfMembership cB(10099,100,1,idB.address()); std::cout << std::endl; std::cout << "[certificate] Signing certificates A and B with authority..."; @@ -574,13 +574,13 @@ static int testCertificate() //std::cout << "[certificate] B: " << cB.toString() << std::endl; std::cout << "[certificate] A agrees with B and B with A... "; - if (cA.agreesWith(cB, idB)) + if (cA.agreesWith(cB)) std::cout << "yes, "; else { std::cout << "FAIL" << std::endl; return -1; } - if (cB.agreesWith(cA, idA)) + if (cB.agreesWith(cA)) std::cout << "yes." << std::endl; else { std::cout << "FAIL" << std::endl; @@ -588,18 +588,18 @@ static int testCertificate() } std::cout << "[certificate] Generating two certificates that should not agree..."; - cA = CertificateOfMembership(10000,100,1,idA); - cB = CertificateOfMembership(10101,100,1,idB); + cA = CertificateOfMembership(10000,100,1,idA.address()); + cB = CertificateOfMembership(10101,100,1,idB.address()); std::cout << std::endl; std::cout << "[certificate] A agrees with B and B with A... "; - if (!cA.agreesWith(cB, idB)) + if (!cA.agreesWith(cB)) std::cout << "no, "; else { std::cout << "FAIL" << std::endl; return -1; } - if (!cB.agreesWith(cA, idA)) + if (!cB.agreesWith(cA)) std::cout << "no." << std::endl; else { std::cout << "FAIL" << std::endl; diff --git a/service/OneService.cpp b/service/OneService.cpp index dbbac3560..6f75dbdff 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -49,6 +49,7 @@ #include "../osdep/Binder.hpp" #include "../osdep/ManagedRoute.hpp" #include "../osdep/BlockingQueue.hpp" +#include "../osdep/Link.hpp" #include "OneService.hpp" #include "SoftwareUpdater.hpp" @@ -183,7 +184,6 @@ static void _networkToJson(nlohmann::json &nj,const ZT_VirtualNetworkConfig *nc, case ZT_NETWORK_STATUS_NOT_FOUND: nstatus = "NOT_FOUND"; break; case ZT_NETWORK_STATUS_PORT_ERROR: nstatus = "PORT_ERROR"; break; case ZT_NETWORK_STATUS_CLIENT_TOO_OLD: nstatus = "CLIENT_TOO_OLD"; break; - case ZT_NETWORK_STATUS_AUTHENTICATION_REQUIRED: nstatus = "AUTHENTICATION_REQUIRED"; break; } switch(nc->type) { case ZT_NETWORK_TYPE_PRIVATE: ntype = "PRIVATE"; break; @@ -251,9 +251,6 @@ static void _networkToJson(nlohmann::json &nj,const ZT_VirtualNetworkConfig *nc, } nj["dns"] = m; - nj["authenticationURL"] = nc->authenticationURL; - nj["authenticationExpiryTime"] = nc->authenticationExpiryTime; - nj["ssoEnabled"] = nc->ssoEnabled; } static void _peerToJson(nlohmann::json &pj,const ZT_Peer *peer) @@ -303,11 +300,12 @@ static void _peerToJson(nlohmann::json &pj,const ZT_Peer *peer) static void _bondToJson(nlohmann::json &pj, SharedPtr &bond) { + char tmp[256]; uint64_t now = OSUtils::now(); - int bondingPolicy = bond->policy(); - pj["bondingPolicy"] = Bond::getPolicyStrByCode(bondingPolicy); - if (bondingPolicy == ZT_BOND_POLICY_NONE) { + int bondingPolicy = bond->getPolicy(); + pj["bondingPolicy"] = BondController::getPolicyStrByCode(bondingPolicy); + if (bondingPolicy == ZT_BONDING_POLICY_NONE) { return; } @@ -317,15 +315,15 @@ static void _bondToJson(nlohmann::json &pj, SharedPtr &bond) pj["failoverInterval"] = bond->getFailoverInterval(); pj["downDelay"] = bond->getDownDelay(); pj["upDelay"] = bond->getUpDelay(); - if (bondingPolicy == ZT_BOND_POLICY_BALANCE_RR) { + if (bondingPolicy == ZT_BONDING_POLICY_BALANCE_RR) { pj["packetsPerLink"] = bond->getPacketsPerLink(); } - if (bondingPolicy == ZT_BOND_POLICY_ACTIVE_BACKUP) { + if (bondingPolicy == ZT_BONDING_POLICY_ACTIVE_BACKUP) { pj["linkSelectMethod"] = bond->getLinkSelectMethod(); } nlohmann::json pa = nlohmann::json::array(); - std::vector< SharedPtr > paths = bond->paths(now); + std::vector< SharedPtr > paths = bond->getPeer()->paths(now); for(unsigned int i=0;i &bond) nlohmann::json j; j["ifname"] = bond->getLink(paths[i])->ifname(); j["path"] = pathStr; - /* j["alive"] = paths[i]->alive(now,true); j["bonded"] = paths[i]->bonded(); j["latencyMean"] = paths[i]->latencyMean(); @@ -343,7 +340,6 @@ static void _bondToJson(nlohmann::json &pj, SharedPtr &bond) j["packetErrorRatio"] = paths[i]->packetErrorRatio(); j["givenLinkSpeed"] = 1000; j["allocation"] = paths[i]->allocation(); - */ pa.push_back(j); } pj["links"] = pa; @@ -539,12 +535,6 @@ public: memset(&config, 0, sizeof(ZT_VirtualNetworkConfig)); } - ~NetworkState() - { - this->managedRoutes.clear(); - this->tap.reset(); - } - std::shared_ptr tap; ZT_VirtualNetworkConfig config; // memcpy() of raw config from core std::vector managedIps; @@ -583,7 +573,6 @@ public: Mutex _run_m; RedisConfig *_rc; - std::string _ssoRedirectURL; // end member variables ---------------------------------------------------- @@ -621,7 +610,6 @@ public: #endif ,_run(true) ,_rc(NULL) - ,_ssoRedirectURL() { _ports[0] = 0; _ports[1] = 0; @@ -735,22 +723,25 @@ public: OSUtils::ztsnprintf(portstr,sizeof(portstr),"%u",_ports[0]); OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S "zerotier-one.port").c_str(),std::string(portstr)); - // Attempt to bind to a secondary port. + // Attempt to bind to a secondary port chosen from our ZeroTier address. // This exists because there are buggy NATs out there that fail if more // than one device behind the same NAT tries to use the same internal // private address port number. Buggy NATs are a running theme. - // - // This used to pick the secondary port based on the node ID until we - // discovered another problem: buggy routers and malicious traffic - // "detection". A lot of routers have such things built in these days - // and mis-detect ZeroTier traffic as malicious and block it resulting - // in a node that appears to be in a coma. Secondary ports are now - // randomized on startup. if (_allowSecondaryPort) { if (_secondaryPort) { _ports[1] = _secondaryPort; } else { - _ports[1] = _getRandomPort(); + _ports[1] = 20000 + ((unsigned int)_node->address() % 45500); + for(int i=0;;++i) { + if (i > 1000) { + _ports[1] = 0; + break; + } else if (++_ports[1] >= 65536) { + _ports[1] = 20000; + } + if (_trialBind(_ports[1])) + break; + } } } #ifdef ZT_USE_MINIUPNPC @@ -762,7 +753,7 @@ public: if (_tertiaryPort) { _ports[2] = _tertiaryPort; } else { - _ports[2] = 20000 + (_ports[0] % 40000); + _ports[2] = _ports[1]; for(int i=0;;++i) { if (i > 1000) { _ports[2] = 0; @@ -788,9 +779,6 @@ public: // Network controller is now enabled by default for desktop and server _controller = new EmbeddedNetworkController(_node,_homePath.c_str(),_controllerDbPath.c_str(),_ports[0], _rc); - if (!_ssoRedirectURL.empty()) { - _controller->setSSORedirectURL(_ssoRedirectURL); - } _node->setNetconfMaster((void *)_controller); // Join existing networks in networks.d @@ -823,7 +811,6 @@ public: int64_t lastCleanedPeersDb = 0; int64_t lastLocalInterfaceAddressCheck = (clockShouldBe - ZT_LOCAL_INTERFACE_CHECK_INTERVAL) + 15000; // do this in 15s to give portmapper time to configure and other things time to settle int64_t lastLocalConfFileCheck = OSUtils::now(); - int64_t lastOnline = lastLocalConfFileCheck; for(;;) { _run_m.lock(); if (!_run) { @@ -865,16 +852,6 @@ public: } } - // If secondary port is not configured to a constant value and we've been offline for a while, - // bind a new secondary port. This is a workaround for a "coma" issue caused by buggy NATs that stop - // working on one port after a while. - if (_node->online()) { - lastOnline = now; - } else if ((_secondaryPort == 0)&&((now - lastOnline) > ZT_PATH_HEARTBEAT_PERIOD)) { - _secondaryPort = _getRandomPort(); - lastBindRefresh = 0; - } - // Refresh bindings in case device's interfaces have changed, and also sync routes to update any shadow routes (e.g. shadow default) if (((now - lastBindRefresh) >= (_node->bondController()->inUse() ? ZT_BINDER_REFRESH_PERIOD / 4 : ZT_BINDER_REFRESH_PERIOD))||(restarted)) { lastBindRefresh = now; @@ -1035,11 +1012,8 @@ public: } } - // Make a copy so lookups don't modify in place; - json lc(_localConfig); - // Get any trusted paths in local.conf (we'll parse the rest of physical[] elsewhere) - json &physical = lc["physical"]; + json &physical = _localConfig["physical"]; if (physical.is_object()) { for(json::iterator phy(physical.begin());phy!=physical.end();++phy) { InetAddress net(OSUtils::jsonString(phy.key(),"").c_str()); @@ -1056,22 +1030,20 @@ public: } } - json &settings = lc["settings"]; + json &settings = _localConfig["settings"]; if (settings.is_object()) { // Allow controller DB path to be put somewhere else const std::string cdbp(OSUtils::jsonString(settings["controllerDbPath"],"")); if (cdbp.length() > 0) _controllerDbPath = cdbp; - _ssoRedirectURL = OSUtils::jsonString(settings["ssoRedirectURL"], ""); - #ifdef ZT_CONTROLLER_USE_LIBPQ // TODO: Redis config json &redis = settings["redis"]; if (redis.is_object() && _rc == NULL) { _rc = new RedisConfig; _rc->hostname = OSUtils::jsonString(redis["hostname"],""); - _rc->port = OSUtils::jsonInt(redis["port"],0); + _rc->port = redis["port"]; _rc->password = OSUtils::jsonString(redis["password"],""); _rc->clusterMode = OSUtils::jsonBool(redis["clusterMode"], false); } @@ -1287,7 +1259,7 @@ public: _bondToJson(res,bond); scode = 200; } else { - fprintf(stderr, "unable to find bond to peer %llx\n", (unsigned long long)id); + fprintf(stderr, "unable to find bond to peer %llx\n", id); scode = 400; } } @@ -1299,11 +1271,8 @@ public: } else { scode = 400; /* bond controller is not enabled */ } - } else if (ps[0] == "config") { - Mutex::Lock lc(_localConfig_m); - res = _localConfig; - scode = 200; - } else if (ps[0] == "status") { + } + if (ps[0] == "status") { ZT_NodeStatus status; _node->status(&status); @@ -1497,7 +1466,7 @@ public: if (bond) { scode = bond->abForciblyRotateLink() ? 200 : 400; } else { - fprintf(stderr, "unable to find bond to peer %llx\n", (unsigned long long)id); + fprintf(stderr, "unable to find bond to peer %llx\n", id); scode = 400; } } @@ -1509,35 +1478,8 @@ public: } else { scode = 400; /* bond controller is not enabled */ } - } else if (ps[0] == "config") { - // Right now we only support writing the things the UI supports changing. - if (ps.size() == 2) { - if (ps[1] == "settings") { - try { - json j(OSUtils::jsonParse(body)); - if (j.is_object()) { - Mutex::Lock lcl(_localConfig_m); - json lc(_localConfig); - for(json::const_iterator s(j.begin());s!=j.end();++s) { - lc["settings"][s.key()] = s.value(); - } - std::string lcStr = OSUtils::jsonDump(lc, 4); - if (OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S "local.conf").c_str(), lcStr)) { - _localConfig = lc; - } - } else { - scode = 400; - } - } catch ( ... ) { - scode = 400; - } - } else { - scode = 404; - } - } else { - scode = 404; - } - } else if (ps[0] == "moon") { + } + if (ps[0] == "moon") { if (ps.size() == 2) { uint64_t seed = 0; @@ -1769,11 +1711,11 @@ public: if (basePolicyStr.empty()) { fprintf(stderr, "error: no base policy was specified for custom policy (%s)\n", customPolicyStr.c_str()); } - if (_node->bondController()->getPolicyCodeByStr(basePolicyStr) == ZT_BOND_POLICY_NONE) { + if (_node->bondController()->getPolicyCodeByStr(basePolicyStr) == ZT_BONDING_POLICY_NONE) { fprintf(stderr, "error: custom policy (%s) is invalid, unknown base policy (%s).\n", customPolicyStr.c_str(), basePolicyStr.c_str()); continue; - } if (_node->bondController()->getPolicyCodeByStr(customPolicyStr) != ZT_BOND_POLICY_NONE) { + } if (_node->bondController()->getPolicyCodeByStr(customPolicyStr) != ZT_BONDING_POLICY_NONE) { fprintf(stderr, "error: custom policy (%s) will be ignored, cannot use standard policy names for custom policies.\n", customPolicyStr.c_str()); continue; @@ -1802,12 +1744,20 @@ public: newTemplateBond->setUserQualityWeights(weights,ZT_QOS_WEIGHT_SIZE); } // Bond-specific properties + newTemplateBond->setOverflowMode(OSUtils::jsonInt(customPolicy["overflow"],false)); newTemplateBond->setUpDelay(OSUtils::jsonInt(customPolicy["upDelay"],-1)); newTemplateBond->setDownDelay(OSUtils::jsonInt(customPolicy["downDelay"],-1)); newTemplateBond->setFlowRebalanceStrategy(OSUtils::jsonInt(customPolicy["flowRebalanceStrategy"],(uint64_t)0)); newTemplateBond->setFailoverInterval(OSUtils::jsonInt(customPolicy["failoverInterval"],(uint64_t)0)); newTemplateBond->setPacketsPerLink(OSUtils::jsonInt(customPolicy["packetsPerLink"],-1)); + std::string linkMonitorStrategyStr(OSUtils::jsonString(customPolicy["linkMonitorStrategy"],"")); + uint8_t linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DEFAULT; + if (linkMonitorStrategyStr == "passive") { linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_PASSIVE; } + if (linkMonitorStrategyStr == "active") { linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_ACTIVE; } + if (linkMonitorStrategyStr == "dynamic") { linkMonitorStrategy = ZT_MULTIPATH_SLAVE_MONITOR_STRATEGY_DYNAMIC; } + newTemplateBond->setLinkMonitorStrategy(linkMonitorStrategy); + // Policy-Specific link set json &links = customPolicy["links"]; for (json::iterator linkItr = links.begin(); linkItr != links.end();++linkItr) { @@ -1823,40 +1773,40 @@ public: speed, alloc, linkNameStr.c_str()); enabled = false; } - //uint32_t upDelay = OSUtils::jsonInt(link["upDelay"],-1); - //uint32_t downDelay = OSUtils::jsonInt(link["downDelay"],-1); + uint32_t upDelay = OSUtils::jsonInt(link["upDelay"],-1); + uint32_t downDelay = OSUtils::jsonInt(link["downDelay"],-1); uint8_t ipvPref = OSUtils::jsonInt(link["ipvPref"],0); - //uint32_t linkMonitorInterval = OSUtils::jsonInt(link["monitorInterval"],(uint64_t)0); + uint32_t linkMonitorInterval = OSUtils::jsonInt(link["monitorInterval"],(uint64_t)0); std::string failoverToStr(OSUtils::jsonString(link["failoverTo"],"")); // Mode std::string linkModeStr(OSUtils::jsonString(link["mode"],"spare")); - uint8_t linkMode = ZT_BOND_SLAVE_MODE_SPARE; - if (linkModeStr == "primary") { linkMode = ZT_BOND_SLAVE_MODE_PRIMARY; } - if (linkModeStr == "spare") { linkMode = ZT_BOND_SLAVE_MODE_SPARE; } + uint8_t linkMode = ZT_MULTIPATH_SLAVE_MODE_SPARE; + if (linkModeStr == "primary") { linkMode = ZT_MULTIPATH_SLAVE_MODE_PRIMARY; } + if (linkModeStr == "spare") { linkMode = ZT_MULTIPATH_SLAVE_MODE_SPARE; } // ipvPref if ((ipvPref != 0) && (ipvPref != 4) && (ipvPref != 6) && (ipvPref != 46) && (ipvPref != 64)) { fprintf(stderr, "error: invalid ipvPref value (%d), link disabled.\n", ipvPref); enabled = false; } - if (linkMode == ZT_BOND_SLAVE_MODE_SPARE && failoverToStr.length()) { + if (linkMode == ZT_MULTIPATH_SLAVE_MODE_SPARE && failoverToStr.length()) { fprintf(stderr, "error: cannot specify failover links for spares, link disabled.\n"); failoverToStr = ""; enabled = false; } - _node->bondController()->addCustomLink(customPolicyStr, new Link(linkNameStr,ipvPref,speed,enabled,linkMode,failoverToStr,alloc)); + _node->bondController()->addCustomLink(customPolicyStr, new Link(linkNameStr,ipvPref,speed,linkMonitorInterval,upDelay,downDelay,enabled,linkMode,failoverToStr,alloc)); } std::string linkSelectMethodStr(OSUtils::jsonString(customPolicy["activeReselect"],"optimize")); if (linkSelectMethodStr == "always") { - newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_ALWAYS); + newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_ALWAYS); } if (linkSelectMethodStr == "better") { - newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_BETTER); + newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_BETTER); } if (linkSelectMethodStr == "failure") { - newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_FAILURE); + newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_FAILURE); } if (linkSelectMethodStr == "optimize") { - newTemplateBond->setLinkSelectMethod(ZT_BOND_RESELECTION_POLICY_OPTIMIZE); + newTemplateBond->setLinkSelectMethod(ZT_MULTIPATH_RESELECTION_POLICY_OPTIMIZE); } if (newTemplateBond->getLinkSelectMethod() < 0 || newTemplateBond->getLinkSelectMethod() > 3) { fprintf(stderr, "warning: invalid value (%s) for linkSelectMethod, assuming mode: always\n", linkSelectMethodStr.c_str()); @@ -1889,7 +1839,7 @@ public: _secondaryPort = (unsigned int)OSUtils::jsonInt(settings["secondaryPort"],0); _tertiaryPort = (unsigned int)OSUtils::jsonInt(settings["tertiaryPort"],0); if (_secondaryPort != 0 || _tertiaryPort != 0) { - fprintf(stderr,"WARNING: using manually-specified secondary and/or tertiary ports. This can cause NAT issues." ZT_EOL_S); + fprintf(stderr,"WARNING: using manually-specified ports. This can cause NAT issues." ZT_EOL_S); } _portMappingEnabled = OSUtils::jsonBool(settings["portMappingEnabled"],true); @@ -2078,7 +2028,7 @@ public: unsigned int mostMatchingPrefixBits = 0; for(std::set::const_iterator i(myIps.begin());i!=myIps.end();++i) { const unsigned int matchingPrefixBits = i->matchingPrefixBits(*target); - if (matchingPrefixBits >= mostMatchingPrefixBits && ((target->isV4() && i->isV4()) || (target->isV6() && i->isV6()))) { + if (matchingPrefixBits >= mostMatchingPrefixBits) { mostMatchingPrefixBits = matchingPrefixBits; src = &(*i); } @@ -2441,7 +2391,7 @@ public: Dictionary<4096> nc; nc.load(nlcbuf.c_str()); Buffer<1024> allowManaged; - if (nc.get("allowManaged", allowManaged) && allowManaged.size() > 0) { + if (nc.get("allowManaged", allowManaged) && !allowManaged.size() == 0) { std::string addresses (allowManaged.begin(), allowManaged.size()); if (allowManaged.size() <= 5) { // untidy parsing for backward compatibility if (allowManaged[0] == '1' || allowManaged[0] == 't' || allowManaged[0] == 'T') { @@ -2675,6 +2625,7 @@ public: case ZT_STATE_OBJECT_NETWORK_CONFIG: OSUtils::ztsnprintf(dirname,sizeof(dirname),"%s" ZT_PATH_SEPARATOR_S "networks.d",_homePath.c_str()); OSUtils::ztsnprintf(p,sizeof(p),"%s" ZT_PATH_SEPARATOR_S "%.16llx.conf",dirname,(unsigned long long)id[0]); + secure = true; break; case ZT_STATE_OBJECT_PEER: OSUtils::ztsnprintf(dirname,sizeof(dirname),"%s" ZT_PATH_SEPARATOR_S "peers.d",_homePath.c_str()); @@ -3093,6 +3044,9 @@ public: if (!strncmp(p->c_str(),ifname,p->length())) return false; } + if (!_node->bondController()->allowedToBind(std::string(ifname))) { + return false; + } } { // Check global blacklists @@ -3130,23 +3084,6 @@ public: return true; } - unsigned int _getRandomPort() - { - unsigned int randp = 0; - Utils::getSecureRandom(&randp,sizeof(randp)); - randp = 20000 + (randp % 45500); - for(int i=0;;++i) { - if (i > 1000) { - return 0; - } else if (++randp >= 65536) { - randp = 20000; - } - if (_trialBind(randp)) - break; - } - return randp; - } - bool _trialBind(unsigned int port) { struct sockaddr_in in4; From eabe091038e4846a194729aa52ad93803ba0612e Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 21 Sep 2021 14:14:34 -0400 Subject: [PATCH 011/144] Backport only the COM mitigation instead of everything from 1.8 --- controller/EmbeddedNetworkController.cpp | 2 +- node/CertificateOfMembership.cpp | 192 ++++++----------------- node/CertificateOfMembership.hpp | 50 +----- node/Constants.hpp | 5 - node/Identity.hpp | 12 ++ node/Membership.hpp | 7 +- node/Network.cpp | 9 +- 7 files changed, 75 insertions(+), 202 deletions(-) diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index 1b2da4c56..2fd2312e9 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -1730,7 +1730,7 @@ void EmbeddedNetworkController::_request( nc->certificateOfOwnershipCount = 1; } - CertificateOfMembership com(now,credentialtmd,nwid,identity.address()); + CertificateOfMembership com(now,credentialtmd,nwid,identity); if (com.sign(_signingId)) { nc->com = com; } else { diff --git a/node/CertificateOfMembership.cpp b/node/CertificateOfMembership.cpp index 10cb0863a..dbda9939f 100644 --- a/node/CertificateOfMembership.cpp +++ b/node/CertificateOfMembership.cpp @@ -20,165 +20,67 @@ namespace ZeroTier { -void CertificateOfMembership::setQualifier(uint64_t id,uint64_t value,uint64_t maxDelta) +CertificateOfMembership::CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Identity &issuedTo) { - _signedBy.zero(); + _qualifiers[0].id = COM_RESERVED_ID_TIMESTAMP; + _qualifiers[0].value = timestamp; + _qualifiers[0].maxDelta = timestampMaxDelta; + _qualifiers[1].id = COM_RESERVED_ID_NETWORK_ID; + _qualifiers[1].value = nwid; + _qualifiers[1].maxDelta = 0; + _qualifiers[2].id = COM_RESERVED_ID_ISSUED_TO; + _qualifiers[2].value = issuedTo.address().toInt(); + _qualifiers[2].maxDelta = 0xffffffffffffffffULL; - for(unsigned int i=0;i<_qualifierCount;++i) { - if (_qualifiers[i].id == id) { - _qualifiers[i].value = value; - _qualifiers[i].maxDelta = maxDelta; - return; - } + // Include hash of full identity public key in COM for hardening purposes. Pack it in + // using the original COM format. Format may be revised in the future to make this cleaner. + uint64_t idHash[6]; + issuedTo.publicKeyHash(idHash); + for(unsigned long i=0;i<4;++i) { + _qualifiers[i + 3].id = (uint64_t)(i + 3); + _qualifiers[i + 3].value = Utils::ntoh(idHash[i]); + _qualifiers[i + 3].maxDelta = 0xffffffffffffffffULL; } - if (_qualifierCount < ZT_NETWORK_COM_MAX_QUALIFIERS) { - _qualifiers[_qualifierCount].id = id; - _qualifiers[_qualifierCount].value = value; - _qualifiers[_qualifierCount].maxDelta = maxDelta; - ++_qualifierCount; - std::sort(&(_qualifiers[0]),&(_qualifiers[_qualifierCount])); - } -} - -#ifdef ZT_SUPPORT_OLD_STYLE_NETCONF - -std::string CertificateOfMembership::toString() const -{ - char tmp[ZT_NETWORK_COM_MAX_QUALIFIERS * 32]; - std::string s; - - s.append("1:"); // COM_UINT64_ED25519 - - uint64_t *const buf = new uint64_t[_qualifierCount * 3]; - try { - unsigned int ptr = 0; - for(unsigned int i=0;i<_qualifierCount;++i) { - buf[ptr++] = Utils::hton(_qualifiers[i].id); - buf[ptr++] = Utils::hton(_qualifiers[i].value); - buf[ptr++] = Utils::hton(_qualifiers[i].maxDelta); - } - s.append(Utils::hex(buf,ptr * sizeof(uint64_t),tmp)); - delete [] buf; - } catch ( ... ) { - delete [] buf; - throw; - } - - s.push_back(':'); - - s.append(_signedBy.toString(tmp)); - - if (_signedBy) { - s.push_back(':'); - s.append(Utils::hex(_signature.data,ZT_C25519_SIGNATURE_LEN,tmp)); - } - - return s; -} - -void CertificateOfMembership::fromString(const char *s) -{ - _qualifierCount = 0; - _signedBy.zero(); + _qualifierCount = 7; memset(_signature.data,0,ZT_C25519_SIGNATURE_LEN); - - if (!*s) - return; - - unsigned int colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - - if (!((colonAt == 1)&&(s[0] == '1'))) // COM_UINT64_ED25519? - return; - - s += colonAt + 1; - colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - - if (colonAt) { - const unsigned int buflen = colonAt / 2; - char *const buf = new char[buflen]; - unsigned int bufactual = Utils::unhex(s,colonAt,buf,buflen); - char *bufptr = buf; - try { - while (bufactual >= 24) { - if (_qualifierCount < ZT_NETWORK_COM_MAX_QUALIFIERS) { - _qualifiers[_qualifierCount].id = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; - _qualifiers[_qualifierCount].value = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; - _qualifiers[_qualifierCount].maxDelta = Utils::ntoh(*((uint64_t *)bufptr)); bufptr += 8; - ++_qualifierCount; - } else { - bufptr += 24; - } - bufactual -= 24; - } - } catch ( ... ) {} - delete [] buf; - } - - if (s[colonAt]) { - s += colonAt + 1; - colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - - if (colonAt) { - char addrbuf[ZT_ADDRESS_LENGTH]; - if (Utils::unhex(s,colonAt,addrbuf,sizeof(addrbuf)) == ZT_ADDRESS_LENGTH) - _signedBy.setTo(addrbuf,ZT_ADDRESS_LENGTH); - - if ((_signedBy)&&(s[colonAt])) { - s += colonAt + 1; - colonAt = 0; - while ((s[colonAt])&&(s[colonAt] != ':')) ++colonAt; - if (colonAt) { - if (Utils::unhex(s,colonAt,_signature.data,ZT_C25519_SIGNATURE_LEN) != ZT_C25519_SIGNATURE_LEN) - _signedBy.zero(); - } else { - _signedBy.zero(); - } - } else { - _signedBy.zero(); - } - } - } - - std::sort(&(_qualifiers[0]),&(_qualifiers[_qualifierCount])); } -#endif // ZT_SUPPORT_OLD_STYLE_NETCONF - -bool CertificateOfMembership::agreesWith(const CertificateOfMembership &other) const +bool CertificateOfMembership::agreesWith(const CertificateOfMembership &other, const Identity &otherIdentity) const { - unsigned int myidx = 0; - unsigned int otheridx = 0; - if ((_qualifierCount == 0)||(other._qualifierCount == 0)) return false; - while (myidx < _qualifierCount) { - // Fail if we're at the end of other, since this means the field is - // missing. - if (otheridx >= other._qualifierCount) - return false; + std::map< uint64_t, uint64_t > otherFields; + for(unsigned int i=0;i= other._qualifierCount) + bool fullIdentityVerification = false; + for(unsigned int i=0;i<_qualifierCount;++i) { + const uint64_t qid = _qualifiers[i].id; + if ((qid >= 3)&&(qid <= 6)) + fullIdentityVerification = true; + std::map< uint64_t, uint64_t >::iterator otherQ(otherFields.find(qid)); + if (otherQ == otherFields.end()) + return false; + const uint64_t a = _qualifiers[i].value; + const uint64_t b = otherQ->second; + if (((a >= b) ? (a - b) : (b - a)) > _qualifiers[i].maxDelta) + return false; + } + + // If this COM has a full hash of its identity, assume the other must have this as well. + // Otherwise we are on a controller that does not incorporate these. + if (fullIdentityVerification) { + uint64_t idHash[6]; + otherIdentity.publicKeyHash(idHash); + for(unsigned long i=0;i<4;++i) { + std::map< uint64_t, uint64_t >::iterator otherQ(otherFields.find((uint64_t)(i + 3))); + if (otherQ == otherFields.end()) + return false; + if (otherQ->second != Utils::ntoh(idHash[i])) return false; } - - // Compare to determine if the absolute value of the difference - // between these two parameters is within our maxDelta. - const uint64_t a = _qualifiers[myidx].value; - const uint64_t b = other._qualifiers[myidx].value; - if (((a >= b) ? (a - b) : (b - a)) > _qualifiers[myidx].maxDelta) - return false; - - ++myidx; } return true; diff --git a/node/CertificateOfMembership.hpp b/node/CertificateOfMembership.hpp index f8500628d..1948dd7b7 100644 --- a/node/CertificateOfMembership.hpp +++ b/node/CertificateOfMembership.hpp @@ -94,6 +94,8 @@ public: * ZeroTier address to whom certificate was issued */ COM_RESERVED_ID_ISSUED_TO = 2 + + // IDs 3-6 reserved for full hash of identity to which this COM was issued. }; /** @@ -110,20 +112,7 @@ public: * @param nwid Network ID * @param issuedTo Certificate recipient */ - CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Address &issuedTo) - { - _qualifiers[0].id = COM_RESERVED_ID_TIMESTAMP; - _qualifiers[0].value = timestamp; - _qualifiers[0].maxDelta = timestampMaxDelta; - _qualifiers[1].id = COM_RESERVED_ID_NETWORK_ID; - _qualifiers[1].value = nwid; - _qualifiers[1].maxDelta = 0; - _qualifiers[2].id = COM_RESERVED_ID_ISSUED_TO; - _qualifiers[2].value = issuedTo.toInt(); - _qualifiers[2].maxDelta = 0xffffffffffffffffULL; - _qualifierCount = 3; - memset(_signature.data,0,ZT_C25519_SIGNATURE_LEN); - } + CertificateOfMembership(uint64_t timestamp,uint64_t timestampMaxDelta,uint64_t nwid,const Identity &issuedTo); /** * Create from binary-serialized COM in buffer @@ -183,36 +172,6 @@ public: return 0ULL; } - /** - * Add or update a qualifier in this certificate - * - * Any signature is invalidated and signedBy is set to null. - * - * @param id Qualifier ID - * @param value Qualifier value - * @param maxDelta Qualifier maximum allowed difference (absolute value of difference) - */ - void setQualifier(uint64_t id,uint64_t value,uint64_t maxDelta); - inline void setQualifier(ReservedId id,uint64_t value,uint64_t maxDelta) { setQualifier((uint64_t)id,value,maxDelta); } - -#ifdef ZT_SUPPORT_OLD_STYLE_NETCONF - /** - * @return String-serialized representation of this certificate - */ - std::string toString() const; - - /** - * Set this certificate equal to the hex-serialized string - * - * Invalid strings will result in invalid or undefined certificate - * contents. These will subsequently fail validation and comparison. - * Empty strings will result in an empty certificate. - * - * @param s String to deserialize - */ - void fromString(const char *s); -#endif // ZT_SUPPORT_OLD_STYLE_NETCONF - /** * Compare two certificates for parameter agreement * @@ -224,9 +183,10 @@ public: * tuples present in this cert but not in other result in 'false'. * * @param other Cert to compare with + * @param otherIdentity Identity of other node * @return True if certs agree and 'other' may be communicated with */ - bool agreesWith(const CertificateOfMembership &other) const; + bool agreesWith(const CertificateOfMembership &other, const Identity &otherIdentity) const; /** * Sign this certificate diff --git a/node/Constants.hpp b/node/Constants.hpp index 400976c13..64b4b7011 100644 --- a/node/Constants.hpp +++ b/node/Constants.hpp @@ -666,11 +666,6 @@ */ #define ZT_TRUST_EXPIRATION 600000 -/** - * Enable support for older network configurations from older (pre-1.1.6) controllers - */ -#define ZT_SUPPORT_OLD_STYLE_NETCONF 1 - /** * Desired buffer size for UDP sockets (used in service and osdep but defined here) */ diff --git a/node/Identity.hpp b/node/Identity.hpp index e6f658dc3..cc8de5126 100644 --- a/node/Identity.hpp +++ b/node/Identity.hpp @@ -109,6 +109,18 @@ public: */ inline bool hasPrivate() const { return (_privateKey != (C25519::Private *)0); } + /** + * Compute a SHA384 hash of this identity's address and public key(s). + * + * @param sha384buf Buffer with 48 bytes of space to receive hash + */ + inline void publicKeyHash(void *sha384buf) const + { + uint8_t address[ZT_ADDRESS_LENGTH]; + _address.copyTo(address, ZT_ADDRESS_LENGTH); + SHA384(sha384buf, address, ZT_ADDRESS_LENGTH, _publicKey.data, ZT_C25519_PUBLIC_KEY_LEN); + } + /** * Compute the SHA512 hash of our private key (if we have one) * diff --git a/node/Membership.hpp b/node/Membership.hpp index 476987714..63a7c10f5 100644 --- a/node/Membership.hpp +++ b/node/Membership.hpp @@ -91,13 +91,14 @@ public: * Check whether the peer represented by this Membership should be allowed on this network at all * * @param nconf Our network config + * @param otherNodeIdentity Identity of remote node * @return True if this peer is allowed on this network at all */ - inline bool isAllowedOnNetwork(const NetworkConfig &nconf) const + inline bool isAllowedOnNetwork(const NetworkConfig &thisNodeNetworkConfig, const Identity &otherNodeIdentity) const { - if (nconf.isPublic()) return true; + if (thisNodeNetworkConfig.isPublic()) return true; if (_com.timestamp() <= _comRevocationThreshold) return false; - return nconf.com.agreesWith(_com); + return thisNodeNetworkConfig.com.agreesWith(_com, otherNodeIdentity); } inline bool recentlyAssociated(const int64_t now) const diff --git a/node/Network.cpp b/node/Network.cpp index 914c96bc6..81e73a867 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -1226,7 +1226,7 @@ bool Network::gate(void *tPtr,const SharedPtr &peer) try { if (_config) { Membership *m = _memberships.get(peer->address()); - if ( (_config.isPublic()) || ((m)&&(m->isAllowedOnNetwork(_config))) ) { + if ( (_config.isPublic()) || ((m)&&(m->isAllowedOnNetwork(_config, peer->identity()))) ) { if (!m) m = &(_membership(peer->address())); if (m->multicastLikeGate(now)) { @@ -1480,8 +1480,11 @@ void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMu Membership *m = (Membership *)0; Hashtable::Iterator i(_memberships); while (i.next(a,m)) { - if ( ( m->multicastLikeGate(now) || (newMulticastGroup) ) && (m->isAllowedOnNetwork(_config)) && (!std::binary_search(alwaysAnnounceTo.begin(),alwaysAnnounceTo.end(),*a)) ) - _announceMulticastGroupsTo(tPtr,*a,groups); + Identity aid(RR->topology->getIdentity(tPtr, *a)); + if (aid) { + if ( ( m->multicastLikeGate(now) || (newMulticastGroup) ) && (m->isAllowedOnNetwork(_config, aid)) && (!std::binary_search(alwaysAnnounceTo.begin(),alwaysAnnounceTo.end(),*a)) ) + _announceMulticastGroupsTo(tPtr,*a,groups); + } } } } From 1b66a1cd2f493f369b923a9e0497aeaa79970fea Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 21 Sep 2021 14:26:00 -0400 Subject: [PATCH 012/144] Version bump. --- RELEASE-NOTES.md | 4 ++++ debian/changelog | 6 ++++++ ext/installfiles/mac/ZeroTier One.pkgproj | 9 ++++++++- version.h | 2 +- windows/WinUI/AboutView.xaml | 2 +- zerotier-one.spec | 5 ++++- 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 5b3ccb85c..97adc1029 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,6 +1,10 @@ ZeroTier Release Notes ====== +# 2021-09-21 -- Version 1.6.6 + + * Backport COM hash check mitigation against network member impersonation. + # 2021-04-13 -- Version 1.6.5 * Fix a bug in potential network path filtering that could in some circumstances lead to "software laser" effects. diff --git a/debian/changelog b/debian/changelog index 52593f067..bab26cd55 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +zerotier-one (1.6.6) unstable; urgency=medium + + * Backport endpoint mitigation against address collision attack. + + -- Adam Ierymenko Tue, 21 Sep 2021 01:00:00 -0700 + zerotier-one (1.6.5) unstable; urgency=medium * Fix path filtering bug that could cause "software laser" effect. diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index fcc1676c0..bcc461afb 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -689,7 +689,7 @@ USE_HFS+_COMPRESSION VERSION - 1.6.5 + 1.6.6 TYPE 0 @@ -865,6 +865,13 @@ PROJECT_SETTINGS + ADVANCED_OPTIONS + + installer-script.options:hostArchitectures + + x86_64,arm64 + + BUILD_FORMAT 0 BUILD_PATH diff --git a/version.h b/version.h index d6c2612e0..81286f557 100644 --- a/version.h +++ b/version.h @@ -27,7 +27,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 5 +#define ZEROTIER_ONE_VERSION_REVISION 6 /** * Build version diff --git a/windows/WinUI/AboutView.xaml b/windows/WinUI/AboutView.xaml index cbebc2c5a..295d27bd5 100644 --- a/windows/WinUI/AboutView.xaml +++ b/windows/WinUI/AboutView.xaml @@ -19,7 +19,7 @@ - + diff --git a/zerotier-one.spec b/zerotier-one.spec index cdad9b51b..7c32bee48 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -1,5 +1,5 @@ Name: zerotier-one -Version: 1.6.5 +Version: 1.6.6 Release: 1%{?dist} Summary: ZeroTier network virtualization service @@ -152,6 +152,9 @@ esac %endif %changelog +* Tue Sep 21 2021 Adam Ierymenko - 1.6.6 +- see https://github.com/zerotier/ZeroTierOne for release notes + * Tue Apr 13 2021 Adam Ierymenko - 1.6.5 - see https://github.com/zerotier/ZeroTierOne for release notes From 7d1f4474584aef49926fe60c01facaacd760ebed Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 22 Sep 2021 09:20:53 -0400 Subject: [PATCH 013/144] Build fix. --- selftest.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/selftest.cpp b/selftest.cpp index 357e9a026..42e9bc232 100644 --- a/selftest.cpp +++ b/selftest.cpp @@ -561,8 +561,8 @@ static int testCertificate() std::cout << idA.address().toString(buf) << ", " << idB.address().toString(buf) << std::endl; std::cout << "[certificate] Generating certificates A and B..."; - CertificateOfMembership cA(10000,100,1,idA.address()); - CertificateOfMembership cB(10099,100,1,idB.address()); + CertificateOfMembership cA(10000,100,1,idA); + CertificateOfMembership cB(10099,100,1,idB); std::cout << std::endl; std::cout << "[certificate] Signing certificates A and B with authority..."; @@ -574,13 +574,13 @@ static int testCertificate() //std::cout << "[certificate] B: " << cB.toString() << std::endl; std::cout << "[certificate] A agrees with B and B with A... "; - if (cA.agreesWith(cB)) + if (cA.agreesWith(cB, idB)) std::cout << "yes, "; else { std::cout << "FAIL" << std::endl; return -1; } - if (cB.agreesWith(cA)) + if (cB.agreesWith(cA, idA)) std::cout << "yes." << std::endl; else { std::cout << "FAIL" << std::endl; @@ -588,18 +588,18 @@ static int testCertificate() } std::cout << "[certificate] Generating two certificates that should not agree..."; - cA = CertificateOfMembership(10000,100,1,idA.address()); - cB = CertificateOfMembership(10101,100,1,idB.address()); + cA = CertificateOfMembership(10000,100,1,idA); + cB = CertificateOfMembership(10101,100,1,idB); std::cout << std::endl; std::cout << "[certificate] A agrees with B and B with A... "; - if (!cA.agreesWith(cB)) + if (!cA.agreesWith(cB, idB)) std::cout << "no, "; else { std::cout << "FAIL" << std::endl; return -1; } - if (!cB.agreesWith(cA)) + if (!cB.agreesWith(cA, idA)) std::cout << "no." << std::endl; else { std::cout << "FAIL" << std::endl; From eb1cafcd0194876ab2a5d24ac369091b2a25e9d3 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 22 Sep 2021 10:43:53 -0400 Subject: [PATCH 014/144] Windows installer. --- ext/installfiles/windows/ZeroTier One.aip | 25 ++++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index ba7873e24..e80494020 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -1,7 +1,8 @@ - + + @@ -17,6 +18,7 @@ + @@ -25,10 +27,10 @@ - + - + @@ -61,7 +63,7 @@ - + @@ -125,8 +127,8 @@ - - + + @@ -172,6 +174,7 @@ + @@ -255,6 +258,7 @@ + @@ -352,7 +356,7 @@ - + @@ -360,7 +364,7 @@ - + @@ -381,7 +385,7 @@ - + @@ -390,6 +394,7 @@ + @@ -483,7 +488,7 @@ - + From 375e5ee7ddbe939a81706548b06752620863e192 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 23 Sep 2021 18:59:48 -0400 Subject: [PATCH 015/144] Revert stupid spam PR AGAIN --- ext/bin/tap-windows-ndis6/x64/zttap300.inf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/bin/tap-windows-ndis6/x64/zttap300.inf b/ext/bin/tap-windows-ndis6/x64/zttap300.inf index 944492ca6..e05038dae 100644 --- a/ext/bin/tap-windows-ndis6/x64/zttap300.inf +++ b/ext/bin/tap-windows-ndis6/x64/zttap300.inf @@ -70,7 +70,7 @@ AddService = zttap300, 2, zttap300.service [zttap300.reg] HKR, Ndi, Service, 0, "zttap300" -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; 'ndis5' is correct +HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; yes, 'ndis5' is correct... yup, Windows. HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" HKR, , Manufacturer, 0, "%Provider%" HKR, , ProductName, 0, "%DeviceDescription%" From 19f3a97a8de0dd9a4d5b29b57147e41c46672de3 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 23 Sep 2021 19:02:38 -0400 Subject: [PATCH 016/144] More reverting of dumb PR --- ext/bin/tap-windows-ndis6/x64.old/zttap300.inf | 4 ++-- ext/bin/tap-windows-ndis6/x86.old/zttap300.inf | 4 ++-- ext/bin/tap-windows-ndis6/x86/zttap300.inf | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/bin/tap-windows-ndis6/x64.old/zttap300.inf b/ext/bin/tap-windows-ndis6/x64.old/zttap300.inf index dbc492b5f..453797b38 100644 --- a/ext/bin/tap-windows-ndis6/x64.old/zttap300.inf +++ b/ext/bin/tap-windows-ndis6/x64.old/zttap300.inf @@ -34,7 +34,7 @@ DriverVer=08/13/2015,6.2.9200.20557 [Strings] DeviceDescription = "ZeroTier One Virtual Port" -Provider = "ZeroTier Networks LLC" +Provider = "ZeroTier Networks LLC" ; We're ZeroTier, Inc. now but kernel mode certs are $300+ so fuqdat. ; To build for x86, take NTamd64 off this and off the named section manually, build, then put it back! [Manufacturer] @@ -70,7 +70,7 @@ AddService = zttap300, 2, zttap300.service [zttap300.reg] HKR, Ndi, Service, 0, "zttap300" -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; 'ndis5' is correct +HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; yes, 'ndis5' is correct... yup, Windows. HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" HKR, , Manufacturer, 0, "%Provider%" HKR, , ProductName, 0, "%DeviceDescription%" diff --git a/ext/bin/tap-windows-ndis6/x86.old/zttap300.inf b/ext/bin/tap-windows-ndis6/x86.old/zttap300.inf index dbc492b5f..453797b38 100644 --- a/ext/bin/tap-windows-ndis6/x86.old/zttap300.inf +++ b/ext/bin/tap-windows-ndis6/x86.old/zttap300.inf @@ -34,7 +34,7 @@ DriverVer=08/13/2015,6.2.9200.20557 [Strings] DeviceDescription = "ZeroTier One Virtual Port" -Provider = "ZeroTier Networks LLC" +Provider = "ZeroTier Networks LLC" ; We're ZeroTier, Inc. now but kernel mode certs are $300+ so fuqdat. ; To build for x86, take NTamd64 off this and off the named section manually, build, then put it back! [Manufacturer] @@ -70,7 +70,7 @@ AddService = zttap300, 2, zttap300.service [zttap300.reg] HKR, Ndi, Service, 0, "zttap300" -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; 'ndis5' is correct +HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; yes, 'ndis5' is correct... yup, Windows. HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" HKR, , Manufacturer, 0, "%Provider%" HKR, , ProductName, 0, "%DeviceDescription%" diff --git a/ext/bin/tap-windows-ndis6/x86/zttap300.inf b/ext/bin/tap-windows-ndis6/x86/zttap300.inf index 76ba896e3..a562e9d64 100644 --- a/ext/bin/tap-windows-ndis6/x86/zttap300.inf +++ b/ext/bin/tap-windows-ndis6/x86/zttap300.inf @@ -67,7 +67,7 @@ AddService = zttap300, 2, zttap300.service [zttap300.reg] HKR, Ndi, Service, 0, "zttap300" -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; 'ndis5' is correct +HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" ; yes, 'ndis5' is correct... yup, Windows. HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" HKR, , Manufacturer, 0, "%Provider%" HKR, , ProductName, 0, "%DeviceDescription%" From 190e9464ce5db59e30ff21fdfff4d3f2f5a4a380 Mon Sep 17 00:00:00 2001 From: Sean OMeara Date: Tue, 28 Sep 2021 17:15:44 +0200 Subject: [PATCH 017/144] adding commit message linter --- .github/workflows/badstrings.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/badstrings.yml diff --git a/.github/workflows/badstrings.yml b/.github/workflows/badstrings.yml new file mode 100644 index 000000000..cb8e96690 --- /dev/null +++ b/.github/workflows/badstrings.yml @@ -0,0 +1,17 @@ +name: badstrings +on: [pull_request, push] +jobs: + badstrings: + runs-on: ubuntu-latest + steps: + - name: scanning commit message for bad strings + run: | + #!/bin/bash + set -euo pipefail + IFS=$'\n\t' + message="${{ github.event.head_commit.message }}" + + strings=($(curl -s https://raw.githubusercontent.com/someara/badstrings/main/strings.txt)) + for i in ${strings[@]} ; do + echo "${message}" | grep -v "$i" &>/dev/null; + done From b277e04efa849ae985908b500c4b01322d2ee613 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 18 Oct 2021 20:52:49 -0700 Subject: [PATCH 018/144] Remove vestigial bonding parameters --- service/OneService.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/service/OneService.cpp b/service/OneService.cpp index dbbac3560..255bad21e 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -1823,10 +1823,7 @@ public: speed, alloc, linkNameStr.c_str()); enabled = false; } - //uint32_t upDelay = OSUtils::jsonInt(link["upDelay"],-1); - //uint32_t downDelay = OSUtils::jsonInt(link["downDelay"],-1); uint8_t ipvPref = OSUtils::jsonInt(link["ipvPref"],0); - //uint32_t linkMonitorInterval = OSUtils::jsonInt(link["monitorInterval"],(uint64_t)0); std::string failoverToStr(OSUtils::jsonString(link["failoverTo"],"")); // Mode std::string linkModeStr(OSUtils::jsonString(link["mode"],"spare")); From cc6de583bed73184fed5b5af18bedc6e21cc25e7 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Wed, 20 Oct 2021 10:48:07 -0700 Subject: [PATCH 019/144] Prevent balance-xor from de-allocating from bad paths --- node/Bond.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/node/Bond.cpp b/node/Bond.cpp index cf4b4eabd..f294eb431 100644 --- a/node/Bond.cpp +++ b/node/Bond.cpp @@ -1155,16 +1155,6 @@ void Bond::estimatePathQuality(int64_t now) void Bond::processBalanceTasks(int64_t now) { char pathStr[64] = { 0 }; - int totalAllocation = 0; - for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { - if (! _paths[i].p) { - continue; - } - if (_paths[i].p && _paths[i].bonded && _paths[i].eligible) { - totalAllocation += _paths[i].allocation; - } - } - unsigned char minimumAllocationValue = (uint8_t)(0.33 * ((float)totalAllocation / (float)_numBondedPaths)); if (_allowFlowHashing) { /** @@ -1209,7 +1199,18 @@ void Bond::processBalanceTasks(int64_t now) * Re-allocate flows from under-performing * NOTE: This could be part of the above block but was kept separate for clarity. */ - if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) { + if (_policy == ZT_BOND_POLICY_BALANCE_AWARE) { + int totalAllocation = 0; + for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { + if (! _paths[i].p) { + continue; + } + if (_paths[i].p && _paths[i].bonded && _paths[i].eligible) { + totalAllocation += _paths[i].allocation; + } + } + unsigned char minimumAllocationValue = (uint8_t)(0.33 * ((float)totalAllocation / (float)_numBondedPaths)); + Mutex::Lock _l(_flows_m); for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) { if (! _paths[i].p) { @@ -1754,7 +1755,7 @@ void Bond::dumpPathStatus(int64_t now, int pathIdx) { char pathStr[64] = { 0 }; _paths[pathIdx].p->address().toString(pathStr); - log("path status: [%2d] alive:%d, eli:%d, bonded:%d, flows:%6d, lat:%10.3f, jitter:%10.3f, error:%6.4f, loss:%6.4f, age:%6d --- (%s/%s)", + log("path status: [%2d] alive:%d, eli:%d, bonded:%d, flows:%6d, lat:%10.3f, jitter:%10.3f, error:%6.4f, loss:%6.4f, age:%6d alloc:%d--- (%s/%s)", pathIdx, _paths[pathIdx].alive, _paths[pathIdx].eligible, @@ -1765,6 +1766,7 @@ void Bond::dumpPathStatus(int64_t now, int pathIdx) _paths[pathIdx].packetErrorRatio, _paths[pathIdx].packetLossRatio, _paths[pathIdx].p->age(now), + _paths[pathIdx].allocation, getLink(_paths[pathIdx].p)->ifname().c_str(), pathStr); } From aed37a391d08388852bc1a3af60854c7730f4362 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 20 Oct 2021 21:33:20 -0400 Subject: [PATCH 020/144] Windows installer updates for 1.8, install dependencies. --- ext/installfiles/windows/ZeroTier One.aip | 57 +- .../windows/ZeroTier One.back.aip | 513 ------------------ version.h | 2 +- 3 files changed, 28 insertions(+), 544 deletions(-) delete mode 100644 ext/installfiles/windows/ZeroTier One.back.aip diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index cb815a432..2a0a4b9c1 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -1,5 +1,5 @@ - + @@ -7,7 +7,6 @@ - @@ -27,25 +26,25 @@ - + - + - + - - - + + + @@ -64,13 +63,14 @@ - - + + - + + @@ -81,9 +81,10 @@ - - + + + @@ -140,9 +141,6 @@ - - - @@ -151,7 +149,6 @@ - @@ -240,9 +237,6 @@ - - - @@ -334,13 +328,14 @@ - - + + + @@ -406,8 +401,8 @@ - - + + @@ -439,6 +434,7 @@ + @@ -466,16 +462,17 @@ - - - - + + + + - + + @@ -500,7 +497,7 @@ - + diff --git a/ext/installfiles/windows/ZeroTier One.back.aip b/ext/installfiles/windows/ZeroTier One.back.aip deleted file mode 100644 index ba7873e24..000000000 --- a/ext/installfiles/windows/ZeroTier One.back.aip +++ /dev/null @@ -1,513 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/version.h b/version.h index e93842665..3e5172416 100644 --- a/version.h +++ b/version.h @@ -27,7 +27,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 0 +#define ZEROTIER_ONE_VERSION_REVISION 1 /** * Build version From 786906b0f7cea8939b58f4b2b256500d34f956a1 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 20 Oct 2021 19:33:32 -0700 Subject: [PATCH 021/144] Version bump to 1.8.1 --- debian/changelog | 6 ++++++ ext/installfiles/mac/ZeroTier One.pkgproj | 2 +- zerotier-one.spec | 5 ++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index f80ceabbe..1fecadf8f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +zerotier-one (1.8.1) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Wed, 20 Oct 2021 01:00:00 -0700 + zerotier-one (1.8.0) unstable; urgency=medium * See RELEASE-NOTES.md for release notes. diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index 939a41884..60b30ca45 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -701,7 +701,7 @@ USE_HFS+_COMPRESSION VERSION - 1.8.0 + 1.8.1 TYPE 0 diff --git a/zerotier-one.spec b/zerotier-one.spec index 810b946ac..116b904d6 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -1,5 +1,5 @@ Name: zerotier-one -Version: 1.7.1 +Version: 1.8.1 Release: 1%{?dist} Summary: ZeroTier network virtualization service @@ -152,6 +152,9 @@ esac %endif %changelog +* Wed Oct 20 2021 Adam Ierymenko - 1.8.1 +- see https://github.com/zerotier/ZeroTierOne for release notes + * Tue Sep 15 2021 Adam Ierymenko - 1.8.0 - see https://github.com/zerotier/ZeroTierOne for release notes From cce8411c2239c5a69e9623a08c3ec9318e411644 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 20 Oct 2021 20:51:01 -0700 Subject: [PATCH 022/144] Make debian parallelism sane. --- debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index e8c46d189..deaa94da1 100755 --- a/debian/rules +++ b/debian/rules @@ -7,7 +7,7 @@ CXXFLAGS=-O3 -fstack-protector-strong dh $@ --with systemd override_dh_auto_build: - make -j + make -j4 override_dh_systemd_start: dh_systemd_start --restart-after-upgrade From 594853e2512dfa127e7bf96e7528fbadca61a12d Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 26 Oct 2021 22:15:06 -0400 Subject: [PATCH 023/144] Remove deprecated vfork call on Mac, and make Mac route application more robust. --- osdep/MacEthernetTapAgent.c | 2 +- osdep/ManagedRoute.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/osdep/MacEthernetTapAgent.c b/osdep/MacEthernetTapAgent.c index 43c4cf133..ca75ed054 100644 --- a/osdep/MacEthernetTapAgent.c +++ b/osdep/MacEthernetTapAgent.c @@ -157,7 +157,7 @@ static int run(const char *path,...) args[argNo++] = (char *)0; va_end(ap); - pid_t pid = vfork(); + pid_t pid = fork(); if (pid < 0) { return -1; } else if (pid == 0) { diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp index 4c1214a66..4371edbea 100644 --- a/osdep/ManagedRoute.cpp +++ b/osdep/ManagedRoute.cpp @@ -507,15 +507,15 @@ bool ManagedRoute::sync() } } - if (!_applied.count(leftt)) { + //if (!_applied.count(leftt)) { _applied[leftt] = !_via; - _routeCmd("delete",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + //_routeCmd("delete",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); _routeCmd("add",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); //_routeCmd("change",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); - } - if ((rightt)&&(!_applied.count(rightt))) { + //} + if (rightt) { _applied[rightt] = !_via; - _routeCmd("delete",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); + //_routeCmd("delete",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); _routeCmd("add",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); //_routeCmd("change",rightt,_via,(const char *)0,(_via) ? (const char *)0 : _device); } From 81f2c57656e9ae227242a473d23f10d0191489ed Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 27 Oct 2021 16:17:57 -0400 Subject: [PATCH 024/144] Properly launch the app on post-install restart. --- ext/installfiles/mac/postinst.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/installfiles/mac/postinst.sh b/ext/installfiles/mac/postinst.sh index dd6ce375d..707b46701 100755 --- a/ext/installfiles/mac/postinst.sh +++ b/ext/installfiles/mac/postinst.sh @@ -40,9 +40,9 @@ ln -sf "/Library/Application Support/ZeroTier/One/zerotier-one" zerotier-idtool if [ -f /tmp/zt1-gui-restart.tmp ]; then for u in `cat /tmp/zt1-gui-restart.tmp`; do if [ -f '/Applications/ZeroTier One.app/Contents/MacOS/ZeroTier One' ]; then - su $u -c '/Applications/ZeroTier\ One.app/Contents/MacOS/ZeroTier\ One &' >>/dev/null 2>&1 & + su $u -c '/usr/bin/open /Applications/ZeroTier\ One.app &' >>/dev/null 2>&1 & else - su $u -c '/Applications/ZeroTier.app/Contents/MacOS/ZeroTier &' >>/dev/null 2>&1 & + su $u -c '/usr/bin/open /Applications/ZeroTier.app &' >>/dev/null 2>&1 & fi done fi From 8f4c038e2369f16254b5d92da84e2251eebedd7e Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 Oct 2021 14:47:01 -0700 Subject: [PATCH 025/144] fix ifdef wasn't running IPv6 temporary address detection for binding --- osdep/Binder.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osdep/Binder.hpp b/osdep/Binder.hpp index f02900325..73273d50d 100644 --- a/osdep/Binder.hpp +++ b/osdep/Binder.hpp @@ -320,7 +320,7 @@ class Binder { while (ifa) { if ((ifa->ifa_name) && (ifa->ifa_addr)) { InetAddress ip = *(ifa->ifa_addr); -#if defined(__unix__) && !defined(__LINUX__) +#if (defined(__unix__) || defined(__APPLE__)) && !defined(__LINUX__) // Check if the address is an IPv6 Temporary Address, macOS/BSD version if (ifa->ifa_addr->sa_family == AF_INET6) { struct sockaddr_in6* sa6 = (struct sockaddr_in6*)ifa->ifa_addr; From 993e58773a87734f99e20f29c8b289cb6164394e Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 Oct 2021 14:58:17 -0700 Subject: [PATCH 026/144] needed in 2 more spots --- osdep/Binder.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osdep/Binder.hpp b/osdep/Binder.hpp index 73273d50d..3744ee8a6 100644 --- a/osdep/Binder.hpp +++ b/osdep/Binder.hpp @@ -40,7 +40,7 @@ #endif #endif -#if defined(__unix__) && !defined(__LINUX__) +#if (defined(__unix__) || defined(__APPLE__)) && !defined(__LINUX__) #include #include #include @@ -311,7 +311,7 @@ class Binder { if (! gotViaProc) { struct ifaddrs* ifatbl = (struct ifaddrs*)0; struct ifaddrs* ifa; -#if defined(__unix__) && !defined(__LINUX__) +#if (defined(__unix__) || defined(__APPLE__)) && !defined(__LINUX__) // set up an IPv6 socket so we can check the state of interfaces via SIOCGIFAFLAG_IN6 int infoSock = socket(AF_INET6, SOCK_DGRAM, 0); #endif From 271dfc0d2b90ec8ad46e7b188441734bf974f731 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 Oct 2021 16:11:06 -0700 Subject: [PATCH 027/144] initial rust oidc lib --- .gitignore | 1 + zeroidc/Cargo.lock | 1330 ++++++++++++++++++++++++++++++++++++++++++++ zeroidc/Cargo.toml | 17 + zeroidc/build.rs | 37 ++ zeroidc/src/lib.rs | 13 + 5 files changed, 1398 insertions(+) create mode 100644 zeroidc/Cargo.lock create mode 100644 zeroidc/Cargo.toml create mode 100644 zeroidc/build.rs create mode 100644 zeroidc/src/lib.rs diff --git a/.gitignore b/.gitignore index 2143346ff..a67ae875e 100755 --- a/.gitignore +++ b/.gitignore @@ -122,3 +122,4 @@ attic/world/*.c25519 attic/world/mkworld workspace/ workspace2/ +zeroidc/target/ diff --git a/zeroidc/Cargo.lock b/zeroidc/Cargo.lock new file mode 100644 index 000000000..bb202f290 --- /dev/null +++ b/zeroidc/Cargo.lock @@ -0,0 +1,1330 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "cbindgen" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51e3973b165dc0f435831a9e426de67e894de532754ff7a3f307c03ee5dec7dc" +dependencies = [ + "clap", + "heck", + "indexmap", + "log", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", + "tempfile", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "serde", + "time", + "winapi", +] + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "encoding_rs" +version = "0.8.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a74ea89a0a1b98f6332de42c95baff457ada66d1cb4030f9ff151b2041a1c746" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" + +[[package]] +name = "futures-io" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" + +[[package]] +name = "futures-macro" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" +dependencies = [ + "autocfg", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" + +[[package]] +name = "futures-task" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" + +[[package]] +name = "futures-util" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" +dependencies = [ + "autocfg", + "futures-core", + "futures-io", + "futures-macro", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "h2" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd819562fcebdac5afc5c113c3ec36f902840b70fd4fc458799c8ce4607ae55" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "http" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" + +[[package]] +name = "httpdate" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" + +[[package]] +name = "hyper" +version = "0.14.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" +dependencies = [ + "futures-util", + "hyper", + "log", + "rustls", + "tokio", + "tokio-rustls", + "webpki", +] + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "ipnet" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "js-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "869d572136620d55835903746bcb5cdc54cb2851fd0aeec53220b4bb65ef3013" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mio" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "oauth2" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e47cfc4c0a1a519d9a025ebfbac3a2439d1b5cdf397d72dcb79b11d9920dab" +dependencies = [ + "base64 0.13.0", + "chrono", + "getrandom 0.2.3", + "http", + "rand 0.8.4", + "reqwest", + "serde", + "serde_json", + "serde_path_to_error", + "sha2", + "thiserror", + "url", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openidconnect" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a42ff51db0f23ae55dd6f234a15ed7bb468bc97938670693a3eaa42869110167" +dependencies = [ + "base64 0.12.3", + "chrono", + "http", + "itertools", + "log", + "oauth2", + "rand 0.7.3", + "ring", + "serde", + "serde-value", + "serde_derive", + "serde_json", + "serde_path_to_error", + "thiserror", + "untrusted", + "url", +] + +[[package]] +name = "ordered-float" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" + +[[package]] +name = "proc-macro2" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.3", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core 0.6.3", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "reqwest" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d2927ca2f685faf0fc620ac4834690d29e7abb153add10f5812eef20b5e280" +dependencies = [ + "base64 0.13.0", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "percent-encoding", + "pin-project-lite", + "rustls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-rustls", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.0", + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "serde" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a65a7291a8a568adcae4c10a677ebcedbc6c9cec91c054dee2ce40b0e3290eb" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0421d4f173fab82d72d6babf36d57fae38b994ca5c2d78e704260ba6d12118b" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "slab" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" + +[[package]] +name = "socket2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "syn" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if", + "libc", + "rand 0.8.4", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "tinyvec" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "pin-project-lite", + "winapi", +] + +[[package]] +name = "tokio-rustls" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-util" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "typenum" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" + +[[package]] +name = "unicode-bidi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" + +[[package]] +name = "unicode-normalization" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", + "serde", +] + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasm-bindgen" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" + +[[package]] +name = "web-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +dependencies = [ + "webpki", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winreg" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi", +] + +[[package]] +name = "zeroidc" +version = "0.1.0" +dependencies = [ + "cbindgen", + "openidconnect", +] diff --git a/zeroidc/Cargo.toml b/zeroidc/Cargo.toml new file mode 100644 index 000000000..0dd5bc919 --- /dev/null +++ b/zeroidc/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "zeroidc" +version = "0.1.0" +edition = "2018" +build = "build.rs" + +[lib] +crate-type = ["staticlib"] + + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +openidconnect = "2.1.0" + +[build-dependencies] +cbindgen = "0.20.0" \ No newline at end of file diff --git a/zeroidc/build.rs b/zeroidc/build.rs new file mode 100644 index 000000000..de8109d11 --- /dev/null +++ b/zeroidc/build.rs @@ -0,0 +1,37 @@ +extern crate cbindgen; + +use std::env; +use std::path::PathBuf; +use cbindgen::{Config, Language}; + +fn main() { + let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); + + let package_name = env::var("CARGO_PKG_NAME").unwrap(); + let output_file = target_dir() + .join(format!("{}.hpp", package_name)) + .display() + .to_string(); + + let config = Config { + language: Language::C, + cpp_compat: true, + namespace: Some(String::from("zeroidc")), + ..Default::default() + }; + + cbindgen::generate_with_config(&crate_dir, config) + .unwrap() + .write_to_file(&output_file); +} + +/// Find the location of the `target/` directory. Note that this may be +/// overridden by `cmake`, so we also need to check the `CARGO_TARGET_DIR` +/// variable. +fn target_dir() -> PathBuf { + if let Ok(target) = env::var("CARGO_TARGET_DIR") { + PathBuf::from(target) + } else { + PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("target") + } +} \ No newline at end of file diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs new file mode 100644 index 000000000..7e80cdfc6 --- /dev/null +++ b/zeroidc/src/lib.rs @@ -0,0 +1,13 @@ +#[cfg(test)] +mod tests { + #[test] + fn it_works() { + assert_eq!(2 + 2, 4); + } +} + + +#[no_mangle] +pub extern "C" fn hello_rust() { + println!("Hello, Rust from C!") +} From c689c0bd8ced0c9cd5c40bb06308848ffee7f204 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 27 Oct 2021 17:09:01 -0700 Subject: [PATCH 028/144] integrate with mac build system and add skeleton --- make-mac.mk | 13 ++++++++++--- zeroidc/build.rs | 2 +- zeroidc/src/lib.rs | 27 ++++++++++++++++++--------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/make-mac.mk b/make-mac.mk index 7438ad9ed..eeddba88b 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -103,8 +103,8 @@ mac-agent: FORCE osdep/MacDNSHelper.o: osdep/MacDNSHelper.mm $(CXX) $(CXXFLAGS) -c osdep/MacDNSHelper.mm -o osdep/MacDNSHelper.o -one: $(CORE_OBJS) $(ONE_OBJS) one.o mac-agent - $(CXX) $(CXXFLAGS) -o zerotier-one $(CORE_OBJS) $(ONE_OBJS) one.o $(LIBS) +one: $(CORE_OBJS) $(ONE_OBJS) one.o mac-agent zeroidc + $(CXX) $(CXXFLAGS) -o zerotier-one $(CORE_OBJS) $(ONE_OBJS) one.o $(LIBS) zeroidc/target/libzeroidc.a # $(STRIP) zerotier-one ln -sf zerotier-one zerotier-idtool ln -sf zerotier-one zerotier-cli @@ -112,6 +112,13 @@ one: $(CORE_OBJS) $(ONE_OBJS) one.o mac-agent zerotier-one: one +zeroidc: zeroidc/target/libzeroidc.a + +zeroidc/target/libzeroidc.a: + cd zeroidc && cargo build --target=x86_64-apple-darwin --release + cd zeroidc && cargo build --target=aarch64-apple-darwin --release + cd zeroidc && lipo -create target/x86_64-apple-darwin/release/libzeroidc.a target/aarch64-apple-darwin/release/libzeroidc.a -output target/libzeroidc.a + central-controller: make ARCH_FLAGS="-arch x86_64" ZT_CONTROLLER=1 one @@ -157,7 +164,7 @@ central-controller-docker: FORCE docker build --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} -f ext/central-controller-docker/Dockerfile --build-arg git_branch=$(shell git name-rev --name-only HEAD) . clean: - rm -rf MacEthernetTapAgent *.dSYM build-* *.a *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o $(CORE_OBJS) $(ONE_OBJS) zerotier-one zerotier-idtool zerotier-selftest zerotier-cli zerotier doc/node_modules zt1_update_$(ZT_BUILD_PLATFORM)_$(ZT_BUILD_ARCHITECTURE)_* + rm -rf MacEthernetTapAgent *.dSYM build-* *.a *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o $(CORE_OBJS) $(ONE_OBJS) zerotier-one zerotier-idtool zerotier-selftest zerotier-cli zerotier doc/node_modules zt1_update_$(ZT_BUILD_PLATFORM)_$(ZT_BUILD_ARCHITECTURE)_* zeroidc/target/ distclean: clean diff --git a/zeroidc/build.rs b/zeroidc/build.rs index de8109d11..0b417c084 100644 --- a/zeroidc/build.rs +++ b/zeroidc/build.rs @@ -9,7 +9,7 @@ fn main() { let package_name = env::var("CARGO_PKG_NAME").unwrap(); let output_file = target_dir() - .join(format!("{}.hpp", package_name)) + .join(format!("{}.h", package_name)) .display() .to_string(); diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs index 7e80cdfc6..5d4c83f23 100644 --- a/zeroidc/src/lib.rs +++ b/zeroidc/src/lib.rs @@ -1,13 +1,22 @@ -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} +#[repr(C)] +pub struct ZeroIDC {} #[no_mangle] -pub extern "C" fn hello_rust() { - println!("Hello, Rust from C!") +pub extern "C" fn zeroidc_new() -> Box { + Box::new(ZeroIDC{}) } + +#[no_mangle] +pub extern "C" fn zeroidc_delete(_: Option>) {} + +#[no_mangle] +pub extern "C" fn zeroidc_start(idc: &mut ZeroIDC) { + +} + +#[no_mangle] +pub extern "C" fn zeroidc_stop(idc: &mut ZeroIDC) { + +} + From 25c5cad1d1b2fcaa0b38308b77b2a48a2b9174ab Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 28 Oct 2021 08:52:31 -0400 Subject: [PATCH 029/144] Advanced Installer for Windows. --- ext/installfiles/windows/ZeroTier One.aip | 55 ++++++++++++++--------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index 2a0a4b9c1..8f220d1f6 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -26,7 +26,7 @@ - + @@ -35,16 +35,16 @@ - + - - - + + + @@ -70,15 +70,15 @@ - + - - + + @@ -204,13 +204,22 @@ + + + + + + + + + - + @@ -228,18 +237,19 @@ - - - + + + + + + + - - - @@ -313,6 +323,9 @@ + + + @@ -332,10 +345,10 @@ - + @@ -401,8 +414,8 @@ - - + + @@ -470,9 +483,9 @@ - - - + + + From 0069b1bac3e60204734fa24a58e9da895a6627e6 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 28 Oct 2021 09:29:33 -0700 Subject: [PATCH 030/144] we can start & stop a thread. so that's nice. --- zeroidc/Cargo.toml | 2 +- zeroidc/src/lib.rs | 62 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 9 deletions(-) diff --git a/zeroidc/Cargo.toml b/zeroidc/Cargo.toml index 0dd5bc919..892f8a38e 100644 --- a/zeroidc/Cargo.toml +++ b/zeroidc/Cargo.toml @@ -14,4 +14,4 @@ crate-type = ["staticlib"] openidconnect = "2.1.0" [build-dependencies] -cbindgen = "0.20.0" \ No newline at end of file +cbindgen = "0.20.0" diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs index 5d4c83f23..d275a0463 100644 --- a/zeroidc/src/lib.rs +++ b/zeroidc/src/lib.rs @@ -1,22 +1,68 @@ +use std::sync::{Arc, Mutex}; +use std::thread::{sleep, spawn, JoinHandle}; +use std::time::Duration; -#[repr(C)] -pub struct ZeroIDC {} +pub struct ZeroIDC { + inner: Arc>, +} + +struct Inner { + running: bool, + oidc_thread: Option>, +} + +impl ZeroIDC { + fn new() -> ZeroIDC { + ZeroIDC { + inner: Arc::new(Mutex::new(Inner { + running: false, + oidc_thread: None, + })), + } + } + + fn start(&mut self) { + let local = Arc::clone(&self.inner); + + if !(*local.lock().unwrap()).running { + let inner_local = Arc::clone(&self.inner); + (*local.lock().unwrap()).oidc_thread = Some(spawn(move || { + (*inner_local.lock().unwrap()).running = true; + + while (*inner_local.lock().unwrap()).running { + println!("tick"); + sleep(Duration::from_secs(1)); + } + + println!("thread done!") + })); + } + } + + fn stop(&mut self) { + let local = self.inner.clone(); + if (*local.lock().unwrap()).running { + if let Some(u) = (*local.lock().unwrap()).oidc_thread.take() { + u.join().expect("join failed"); + } + } + } +} #[no_mangle] pub extern "C" fn zeroidc_new() -> Box { - Box::new(ZeroIDC{}) + Box::new(ZeroIDC::new()) } #[no_mangle] pub extern "C" fn zeroidc_delete(_: Option>) {} #[no_mangle] -pub extern "C" fn zeroidc_start(idc: &mut ZeroIDC) { - +pub extern "C" fn zeroidc_start(idc: &'static mut ZeroIDC) { + idc.start(); } #[no_mangle] -pub extern "C" fn zeroidc_stop(idc: &mut ZeroIDC) { - +pub extern "C" fn zeroidc_stop(idc: &'static mut ZeroIDC) { + idc.stop(); } - From a6c1998c81e26eb36ade1cc32e1cfd094c46c904 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 28 Oct 2021 14:24:27 -0400 Subject: [PATCH 031/144] VERSION 1.8.1 -- see RELEASE-NOTES.md --- RELEASE-NOTES.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 4404eaf87..affb06855 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,15 +1,17 @@ ZeroTier Release Notes ====== -# -- Version 1.8.1 +# 2021-10-28 -- Version 1.8.1 - * Fix UI issues on MacOS Mojave - * Fix icon not showing on Windows - * Re-eneable installation on Windows 7, 8, etc., but without any guarantee that it will work there! (7 is not supported) - * Add an extended hash verification to certificates of network membership to further harden against impersonation attacks - * Remove support for REALLY ancient 1.1.6 or earlier network controllers + * Fix numerous UI issues from 1.8.0 (never fully released). + * Remove support for REALLY ancient 1.1.6 or earlier network controllers. + * MacOS IPv6 no longer binds to temporary addresses as these can cause interruptions if they expire. + * Added additional hardening against address impersonation on networks (also in 1.6.6). + * Fix an issue that could cause clobbering of MacOS IP route settings on restart. -# 2021-09-15 -- Version 1.8.0 + * NOTE: Windows 7 is no longer supported! Windows 7 users will have to use version 1.6.5 or earlier. + +# 2021-09-15 -- Version 1.8.0 (preview release only) * A *completely* rewritten desktop UI for Mac and Windows! * Implement a workaround for one potential source of a "coma" bug, which can occur if buggy NATs/routers stop allowing the service to communicate on a given port. ZeroTier now reassigns a new secondary port if it's offline for a while unless a secondary port is manually specified in local.conf. Working around crummy buggy routers is an ongoing effort. From 7a626abf156a9dbac45a14061e5e1a182083a61c Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 28 Oct 2021 12:37:36 -0700 Subject: [PATCH 032/144] remove BondController.cpp from android makefile --- java/jni/Android.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/java/jni/Android.mk b/java/jni/Android.mk index b60fe65e6..952bc4328 100644 --- a/java/jni/Android.mk +++ b/java/jni/Android.mk @@ -28,7 +28,6 @@ LOCAL_SRC_FILES := \ $(ZT1)/node/AES_aesni.cpp \ $(ZT1)/node/AES_armcrypto.cpp \ $(ZT1)/node/Bond.cpp \ - $(ZT1)/node/BondController.cpp \ $(ZT1)/node/C25519.cpp \ $(ZT1)/node/Capability.cpp \ $(ZT1)/node/CertificateOfMembership.cpp \ From 31888f5ef85ed7b8d1634fb6051d7f0f2671c373 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 29 Oct 2021 09:43:14 -0700 Subject: [PATCH 033/144] provide issuer URL, client ID and local web port to constructor also construct the oidc client --- zeroidc/Cargo.lock | 2 + zeroidc/Cargo.toml | 2 + zeroidc/src/lib.rs | 103 +++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 99 insertions(+), 8 deletions(-) diff --git a/zeroidc/Cargo.lock b/zeroidc/Cargo.lock index bb202f290..24479eaaf 100644 --- a/zeroidc/Cargo.lock +++ b/zeroidc/Cargo.lock @@ -1325,6 +1325,8 @@ dependencies = [ name = "zeroidc" version = "0.1.0" dependencies = [ + "base64 0.13.0", "cbindgen", "openidconnect", + "url", ] diff --git a/zeroidc/Cargo.toml b/zeroidc/Cargo.toml index 892f8a38e..814a497c5 100644 --- a/zeroidc/Cargo.toml +++ b/zeroidc/Cargo.toml @@ -12,6 +12,8 @@ crate-type = ["staticlib"] [dependencies] openidconnect = "2.1.0" +base64 = "0.13.0" +url = "2.2.2" [build-dependencies] cbindgen = "0.20.0" diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs index d275a0463..dc94d95ee 100644 --- a/zeroidc/src/lib.rs +++ b/zeroidc/src/lib.rs @@ -1,7 +1,20 @@ +extern crate base64; +extern crate openidconnect; +extern crate url; + use std::sync::{Arc, Mutex}; use std::thread::{sleep, spawn, JoinHandle}; use std::time::Duration; +use openidconnect::core::{CoreClient, CoreProviderMetadata}; +use openidconnect::reqwest::http_client; +use openidconnect::{ClientId, IssuerUrl, RedirectUrl}; + +use url::Url; + +use std::ffi::CStr; +use std::os::raw::c_char; + pub struct ZeroIDC { inner: Arc>, } @@ -9,16 +22,50 @@ pub struct ZeroIDC { struct Inner { running: bool, oidc_thread: Option>, + oidc_client: Option, } impl ZeroIDC { - fn new() -> ZeroIDC { - ZeroIDC { + fn new(issuer: &str, client_id: &str, port: u16) -> Result { + let idc = ZeroIDC { inner: Arc::new(Mutex::new(Inner { running: false, oidc_thread: None, + oidc_client: None, })), - } + }; + + let iss = match IssuerUrl::new(issuer.to_string()) { + Ok(i) => i, + Err(e) => return Err(e.to_string()), + }; + + let provider_meta = match CoreProviderMetadata::discover(&iss, http_client) { + Ok(m) => m, + Err(e) => return Err(e.to_string()), + }; + + let r = format!("http://localhost:{}", port); + let redir_url = match Url::parse(&r) { + Ok(s) => s, + Err(e) => return Err(e.to_string()), + }; + + let redirect = match RedirectUrl::new(redir_url.to_string()) { + Ok(s) => s, + Err(e) => return Err(e.to_string()), + }; + + (*idc.inner.lock().unwrap()).oidc_client = Some( + CoreClient::from_provider_metadata( + provider_meta, + ClientId::new(client_id.to_string()), + None, + ) + .set_redirect_uri(redirect), + ); + + Ok(idc) } fn start(&mut self) { @@ -50,19 +97,59 @@ impl ZeroIDC { } #[no_mangle] -pub extern "C" fn zeroidc_new() -> Box { - Box::new(ZeroIDC::new()) +pub extern "C" fn zeroidc_new( + issuer: *const c_char, + client_id: *const c_char, + web_port: u16, +) -> *mut ZeroIDC { + if issuer.is_null() { + println!("issuer is null"); + return std::ptr::null_mut(); + } + + if client_id.is_null() { + println!("client_id is null"); + return std::ptr::null_mut(); + } + + let iss = unsafe { CStr::from_ptr(issuer) }; + let c_id = unsafe { CStr::from_ptr(client_id) }; + + match ZeroIDC::new(iss.to_str().unwrap(), c_id.to_str().unwrap(), web_port) { + Ok(idc) => { + return Box::into_raw(Box::new(idc)); + } + Err(s) => { + println!("Error creating ZeroIDC instance: {}", s); + return std::ptr::null_mut(); + } + } } #[no_mangle] -pub extern "C" fn zeroidc_delete(_: Option>) {} +pub extern "C" fn zeroidc_delete(ptr: *mut ZeroIDC) { + if ptr.is_null() { + return; + } + unsafe { + Box::from_raw(ptr); + } +} #[no_mangle] -pub extern "C" fn zeroidc_start(idc: &'static mut ZeroIDC) { +pub extern "C" fn zeroidc_start(ptr: *mut ZeroIDC) { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; idc.start(); } #[no_mangle] -pub extern "C" fn zeroidc_stop(idc: &'static mut ZeroIDC) { +pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; idc.stop(); } From 56cf874d994c79830d8b630b9abdc4f08d9cdedf Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 29 Oct 2021 15:31:23 -0700 Subject: [PATCH 034/144] slow progress --- zeroidc/src/lib.rs | 73 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 7 deletions(-) diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs index dc94d95ee..99db6517d 100644 --- a/zeroidc/src/lib.rs +++ b/zeroidc/src/lib.rs @@ -6,9 +6,10 @@ use std::sync::{Arc, Mutex}; use std::thread::{sleep, spawn, JoinHandle}; use std::time::Duration; -use openidconnect::core::{CoreClient, CoreProviderMetadata}; +use openidconnect::core::{CoreClient, CoreProviderMetadata, CoreResponseType}; use openidconnect::reqwest::http_client; -use openidconnect::{ClientId, IssuerUrl, RedirectUrl}; +use openidconnect::AuthenticationFlow; +use openidconnect::{ClientId, CsrfToken, IssuerUrl, Nonce, PkceCodeChallenge, RedirectUrl, Scope}; use url::Url; @@ -21,15 +22,36 @@ pub struct ZeroIDC { struct Inner { running: bool, + auth_endpoint: String, oidc_thread: Option>, oidc_client: Option, } +fn csrf_func(csrf_token: String) -> Box CsrfToken> { + return Box::new(move || CsrfToken::new(csrf_token.to_string())); +} + +fn nonce_func(nonce: String) -> Box Nonce> { + return Box::new(move || Nonce::new(nonce.to_string())); +} + +struct authres { + url: Url, + csrf_token: CsrfToken, + nonce: Nonce, +} + impl ZeroIDC { - fn new(issuer: &str, client_id: &str, port: u16) -> Result { + fn new( + issuer: &str, + client_id: &str, + auth_ep: &str, + local_web_port: u16, + ) -> Result { let idc = ZeroIDC { inner: Arc::new(Mutex::new(Inner { running: false, + auth_endpoint: auth_ep.to_string(), oidc_thread: None, oidc_client: None, })), @@ -45,7 +67,7 @@ impl ZeroIDC { Err(e) => return Err(e.to_string()), }; - let r = format!("http://localhost:{}", port); + let r = format!("http://localhost:{}/sso", local_web_port); let redir_url = match Url::parse(&r) { Ok(s) => s, Err(e) => return Err(e.to_string()), @@ -94,13 +116,40 @@ impl ZeroIDC { } } } + + fn get_auth_url(&mut self) -> Option { + let (pkce_challenge, pkce_verifier) = PkceCodeChallenge::new_random_sha256(); + + let r = (*self.inner.lock().unwrap()).oidc_client.as_ref().map(|c| { + let (auth_url, csrf_token, nonce) = c + .authorize_url( + AuthenticationFlow::::AuthorizationCode, + csrf_func("my-csrf".to_string()), + nonce_func("my-nonce".to_string()), + ) + .add_scope(Scope::new("read".to_string())) + .add_scope(Scope::new("read".to_string())) + .add_scope(Scope::new("openid".to_string())) + .set_pkce_challenge(pkce_challenge) + .url(); + + return authres { + url: auth_url, + csrf_token, + nonce, + }; + }); + + r + } } #[no_mangle] pub extern "C" fn zeroidc_new( issuer: *const c_char, client_id: *const c_char, - web_port: u16, + auth_endpoint: *const c_char, + web_listen_port: u16, ) -> *mut ZeroIDC { if issuer.is_null() { println!("issuer is null"); @@ -112,10 +161,20 @@ pub extern "C" fn zeroidc_new( return std::ptr::null_mut(); } + if auth_endpoint.is_null() { + println!("auth_endpoint is null"); + return std::ptr::null_mut(); + } + let iss = unsafe { CStr::from_ptr(issuer) }; let c_id = unsafe { CStr::from_ptr(client_id) }; - - match ZeroIDC::new(iss.to_str().unwrap(), c_id.to_str().unwrap(), web_port) { + let auth_endpoint = unsafe { CStr::from_ptr(auth_endpoint) }; + match ZeroIDC::new( + iss.to_str().unwrap(), + c_id.to_str().unwrap(), + auth_endpoint.to_str().unwrap(), + web_listen_port, + ) { Ok(idc) => { return Box::into_raw(Box::new(idc)); } From ebc4c898ff15824f8238255a9ffc91b145315812 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 29 Oct 2021 15:43:39 -0700 Subject: [PATCH 035/144] pass in csrf token & nonce (generated externally) --- zeroidc/src/lib.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs index 99db6517d..ccc376652 100644 --- a/zeroidc/src/lib.rs +++ b/zeroidc/src/lib.rs @@ -8,7 +8,7 @@ use std::time::Duration; use openidconnect::core::{CoreClient, CoreProviderMetadata, CoreResponseType}; use openidconnect::reqwest::http_client; -use openidconnect::AuthenticationFlow; +use openidconnect::{AuthenticationFlow, PkceCodeVerifier}; use openidconnect::{ClientId, CsrfToken, IssuerUrl, Nonce, PkceCodeChallenge, RedirectUrl, Scope}; use url::Url; @@ -39,6 +39,7 @@ struct authres { url: Url, csrf_token: CsrfToken, nonce: Nonce, + pkce_verifier: PkceCodeVerifier, } impl ZeroIDC { @@ -117,15 +118,15 @@ impl ZeroIDC { } } - fn get_auth_url(&mut self) -> Option { + fn get_auth_url(&mut self, csrf_token: String, nonce: String) -> Option { let (pkce_challenge, pkce_verifier) = PkceCodeChallenge::new_random_sha256(); let r = (*self.inner.lock().unwrap()).oidc_client.as_ref().map(|c| { let (auth_url, csrf_token, nonce) = c .authorize_url( AuthenticationFlow::::AuthorizationCode, - csrf_func("my-csrf".to_string()), - nonce_func("my-nonce".to_string()), + csrf_func(csrf_token), + nonce_func(nonce), ) .add_scope(Scope::new("read".to_string())) .add_scope(Scope::new("read".to_string())) @@ -137,6 +138,7 @@ impl ZeroIDC { url: auth_url, csrf_token, nonce, + pkce_verifier, }; }); From 1c7a5439d59eef630cc7a0d20603b51315b72c1d Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 29 Oct 2021 16:04:19 -0700 Subject: [PATCH 036/144] expose AuthInfo struct to external code also get the auth URL --- zeroidc/src/lib.rs | 64 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs index ccc376652..fe27274dd 100644 --- a/zeroidc/src/lib.rs +++ b/zeroidc/src/lib.rs @@ -13,7 +13,7 @@ use openidconnect::{ClientId, CsrfToken, IssuerUrl, Nonce, PkceCodeChallenge, Re use url::Url; -use std::ffi::CStr; +use std::ffi::{CStr, CString}; use std::os::raw::c_char; pub struct ZeroIDC { @@ -35,7 +35,7 @@ fn nonce_func(nonce: String) -> Box Nonce> { return Box::new(move || Nonce::new(nonce.to_string())); } -struct authres { +pub struct AuthInfo { url: Url, csrf_token: CsrfToken, nonce: Nonce, @@ -118,7 +118,7 @@ impl ZeroIDC { } } - fn get_auth_url(&mut self, csrf_token: String, nonce: String) -> Option { + fn get_auth_info(&mut self, csrf_token: String, nonce: String) -> Option { let (pkce_challenge, pkce_verifier) = PkceCodeChallenge::new_random_sha256(); let r = (*self.inner.lock().unwrap()).oidc_client.as_ref().map(|c| { @@ -134,7 +134,7 @@ impl ZeroIDC { .set_pkce_challenge(pkce_challenge) .url(); - return authres { + return AuthInfo { url: auth_url, csrf_token, nonce, @@ -214,3 +214,59 @@ pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) { }; idc.stop(); } + +#[no_mangle] +pub extern "C" fn zeroidc_get_auth_info( + ptr: *mut ZeroIDC, + csrf_token: *const c_char, + nonce: *const c_char, +) -> *mut AuthInfo { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + + if csrf_token.is_null() { + println!("csrf_token is null"); + return std::ptr::null_mut(); + } + + if nonce.is_null() { + println!("nonce is null"); + return std::ptr::null_mut(); + } + + let csrf_token = unsafe { CStr::from_ptr(csrf_token) } + .to_str() + .unwrap() + .to_string(); + let nonce = unsafe { CStr::from_ptr(nonce) } + .to_str() + .unwrap() + .to_string(); + + match idc.get_auth_info(csrf_token, nonce) { + Some(a) => Box::into_raw(Box::new(a)), + None => std::ptr::null_mut(), + } +} + +#[no_mangle] +pub extern "C" fn zeroidc_auth_info_delete(ptr: *mut AuthInfo) { + if ptr.is_null() { + return; + } + unsafe { + Box::from_raw(ptr); + } +} + +#[no_mangle] +pub extern "C" fn zeroidc_get_auth_url(ptr: *mut AuthInfo) -> *const c_char { + let ai = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + let s = CString::new(ai.url.to_string()).unwrap(); + return s.as_ptr(); +} From 37f26beb505fa28f5db317c4829c61ef1a4e5930 Mon Sep 17 00:00:00 2001 From: Travis LaDuke Date: Tue, 2 Nov 2021 11:15:10 -0700 Subject: [PATCH 037/144] Fix multicast flag on linux interfaces. When we re-ordered the way the interfaces come up, this flag stopped getting set automatically. see 9374e45449ffe5c377e4cb2a346129ec598eeea9 and github issue #1477 --- RELEASE-NOTES.md | 2 ++ osdep/LinuxEthernetTap.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 22bf76dd1..e40967398 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,5 +1,7 @@ ZeroTier Release Notes ====== +# 2021-11-00 -- Version 1.8.2 + * Fix multicast on linux. # 2021-10-28 -- Version 1.8.1 diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index acf972682..181c558be 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -213,6 +213,7 @@ LinuxEthernetTap::LinuxEthernetTap( return; } + ifr.ifr_flags |= IFF_MULTICAST; ifr.ifr_flags |= IFF_UP; if (ioctl(sock,SIOCSIFFLAGS,(void *)&ifr) < 0) { ::close(sock); From 4cadfd736ff3b1dcc85b57dbd63aff8f0c7b3d0a Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 2 Nov 2021 15:55:26 -0700 Subject: [PATCH 038/144] move ffi code into its own file --- zeroidc/src/ext.rs | 132 +++++++++++++++++++++++++++++++++++++++++++++ zeroidc/src/lib.rs | 130 +------------------------------------------- 2 files changed, 134 insertions(+), 128 deletions(-) create mode 100644 zeroidc/src/ext.rs diff --git a/zeroidc/src/ext.rs b/zeroidc/src/ext.rs new file mode 100644 index 000000000..f76c4ef60 --- /dev/null +++ b/zeroidc/src/ext.rs @@ -0,0 +1,132 @@ +mod ext { + + use std::ffi::{CStr, CString}; + use std::os::raw::c_char; + + use crate::{AuthInfo, ZeroIDC}; + + #[no_mangle] + pub extern "C" fn zeroidc_new( + issuer: *const c_char, + client_id: *const c_char, + auth_endpoint: *const c_char, + web_listen_port: u16, + ) -> *mut ZeroIDC { + if issuer.is_null() { + println!("issuer is null"); + return std::ptr::null_mut(); + } + + if client_id.is_null() { + println!("client_id is null"); + return std::ptr::null_mut(); + } + + if auth_endpoint.is_null() { + println!("auth_endpoint is null"); + return std::ptr::null_mut(); + } + + let iss = unsafe { CStr::from_ptr(issuer) }; + let c_id = unsafe { CStr::from_ptr(client_id) }; + let auth_endpoint = unsafe { CStr::from_ptr(auth_endpoint) }; + match ZeroIDC::new( + iss.to_str().unwrap(), + c_id.to_str().unwrap(), + auth_endpoint.to_str().unwrap(), + web_listen_port, + ) { + Ok(idc) => { + return Box::into_raw(Box::new(idc)); + } + Err(s) => { + println!("Error creating ZeroIDC instance: {}", s); + return std::ptr::null_mut(); + } + } + } + + #[no_mangle] + pub extern "C" fn zeroidc_delete(ptr: *mut ZeroIDC) { + if ptr.is_null() { + return; + } + unsafe { + Box::from_raw(ptr); + } + } + + #[no_mangle] + pub extern "C" fn zeroidc_start(ptr: *mut ZeroIDC) { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + idc.start(); + } + + #[no_mangle] + pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + idc.stop(); + } + + #[no_mangle] + pub extern "C" fn zeroidc_get_auth_info( + ptr: *mut ZeroIDC, + csrf_token: *const c_char, + nonce: *const c_char, + ) -> *mut AuthInfo { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + + if csrf_token.is_null() { + println!("csrf_token is null"); + return std::ptr::null_mut(); + } + + if nonce.is_null() { + println!("nonce is null"); + return std::ptr::null_mut(); + } + + let csrf_token = unsafe { CStr::from_ptr(csrf_token) } + .to_str() + .unwrap() + .to_string(); + let nonce = unsafe { CStr::from_ptr(nonce) } + .to_str() + .unwrap() + .to_string(); + + match idc.get_auth_info(csrf_token, nonce) { + Some(a) => Box::into_raw(Box::new(a)), + None => std::ptr::null_mut(), + } + } + + #[no_mangle] + pub extern "C" fn zeroidc_auth_info_delete(ptr: *mut AuthInfo) { + if ptr.is_null() { + return; + } + unsafe { + Box::from_raw(ptr); + } + } + + #[no_mangle] + pub extern "C" fn zeroidc_get_auth_url(ptr: *mut AuthInfo) -> *const c_char { + let ai = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + let s = CString::new(ai.url.to_string()).unwrap(); + return s.as_ptr(); + } +} diff --git a/zeroidc/src/lib.rs b/zeroidc/src/lib.rs index fe27274dd..7de1f4abe 100644 --- a/zeroidc/src/lib.rs +++ b/zeroidc/src/lib.rs @@ -1,3 +1,5 @@ +pub mod ext; + extern crate base64; extern crate openidconnect; extern crate url; @@ -13,9 +15,6 @@ use openidconnect::{ClientId, CsrfToken, IssuerUrl, Nonce, PkceCodeChallenge, Re use url::Url; -use std::ffi::{CStr, CString}; -use std::os::raw::c_char; - pub struct ZeroIDC { inner: Arc>, } @@ -145,128 +144,3 @@ impl ZeroIDC { r } } - -#[no_mangle] -pub extern "C" fn zeroidc_new( - issuer: *const c_char, - client_id: *const c_char, - auth_endpoint: *const c_char, - web_listen_port: u16, -) -> *mut ZeroIDC { - if issuer.is_null() { - println!("issuer is null"); - return std::ptr::null_mut(); - } - - if client_id.is_null() { - println!("client_id is null"); - return std::ptr::null_mut(); - } - - if auth_endpoint.is_null() { - println!("auth_endpoint is null"); - return std::ptr::null_mut(); - } - - let iss = unsafe { CStr::from_ptr(issuer) }; - let c_id = unsafe { CStr::from_ptr(client_id) }; - let auth_endpoint = unsafe { CStr::from_ptr(auth_endpoint) }; - match ZeroIDC::new( - iss.to_str().unwrap(), - c_id.to_str().unwrap(), - auth_endpoint.to_str().unwrap(), - web_listen_port, - ) { - Ok(idc) => { - return Box::into_raw(Box::new(idc)); - } - Err(s) => { - println!("Error creating ZeroIDC instance: {}", s); - return std::ptr::null_mut(); - } - } -} - -#[no_mangle] -pub extern "C" fn zeroidc_delete(ptr: *mut ZeroIDC) { - if ptr.is_null() { - return; - } - unsafe { - Box::from_raw(ptr); - } -} - -#[no_mangle] -pub extern "C" fn zeroidc_start(ptr: *mut ZeroIDC) { - let idc = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - idc.start(); -} - -#[no_mangle] -pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) { - let idc = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - idc.stop(); -} - -#[no_mangle] -pub extern "C" fn zeroidc_get_auth_info( - ptr: *mut ZeroIDC, - csrf_token: *const c_char, - nonce: *const c_char, -) -> *mut AuthInfo { - let idc = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - - if csrf_token.is_null() { - println!("csrf_token is null"); - return std::ptr::null_mut(); - } - - if nonce.is_null() { - println!("nonce is null"); - return std::ptr::null_mut(); - } - - let csrf_token = unsafe { CStr::from_ptr(csrf_token) } - .to_str() - .unwrap() - .to_string(); - let nonce = unsafe { CStr::from_ptr(nonce) } - .to_str() - .unwrap() - .to_string(); - - match idc.get_auth_info(csrf_token, nonce) { - Some(a) => Box::into_raw(Box::new(a)), - None => std::ptr::null_mut(), - } -} - -#[no_mangle] -pub extern "C" fn zeroidc_auth_info_delete(ptr: *mut AuthInfo) { - if ptr.is_null() { - return; - } - unsafe { - Box::from_raw(ptr); - } -} - -#[no_mangle] -pub extern "C" fn zeroidc_get_auth_url(ptr: *mut AuthInfo) -> *const c_char { - let ai = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - let s = CString::new(ai.url.to_string()).unwrap(); - return s.as_ptr(); -} From f7934972ea040725a4e8c110f1c1e61363eb3351 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 2 Nov 2021 15:56:40 -0700 Subject: [PATCH 039/144] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a67ae875e..173920d18 100755 --- a/.gitignore +++ b/.gitignore @@ -123,3 +123,4 @@ attic/world/mkworld workspace/ workspace2/ zeroidc/target/ +tmp/ From f8bf91426bbfb2d1d245975f66ac634fb3e9d1a1 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 2 Nov 2021 16:30:09 -0700 Subject: [PATCH 040/144] . --- zeroidc/src/ext.rs | 247 ++++++++++++++++++++++----------------------- 1 file changed, 122 insertions(+), 125 deletions(-) diff --git a/zeroidc/src/ext.rs b/zeroidc/src/ext.rs index f76c4ef60..3e89f247f 100644 --- a/zeroidc/src/ext.rs +++ b/zeroidc/src/ext.rs @@ -1,132 +1,129 @@ -mod ext { +use std::ffi::{CStr, CString}; +use std::os::raw::c_char; - use std::ffi::{CStr, CString}; - use std::os::raw::c_char; +use crate::{AuthInfo, ZeroIDC}; - use crate::{AuthInfo, ZeroIDC}; +#[no_mangle] +pub extern "C" fn zeroidc_new( + issuer: *const c_char, + client_id: *const c_char, + auth_endpoint: *const c_char, + web_listen_port: u16, +) -> *mut ZeroIDC { + if issuer.is_null() { + println!("issuer is null"); + return std::ptr::null_mut(); + } - #[no_mangle] - pub extern "C" fn zeroidc_new( - issuer: *const c_char, - client_id: *const c_char, - auth_endpoint: *const c_char, - web_listen_port: u16, - ) -> *mut ZeroIDC { - if issuer.is_null() { - println!("issuer is null"); + if client_id.is_null() { + println!("client_id is null"); + return std::ptr::null_mut(); + } + + if auth_endpoint.is_null() { + println!("auth_endpoint is null"); + return std::ptr::null_mut(); + } + + let iss = unsafe { CStr::from_ptr(issuer) }; + let c_id = unsafe { CStr::from_ptr(client_id) }; + let auth_endpoint = unsafe { CStr::from_ptr(auth_endpoint) }; + match ZeroIDC::new( + iss.to_str().unwrap(), + c_id.to_str().unwrap(), + auth_endpoint.to_str().unwrap(), + web_listen_port, + ) { + Ok(idc) => { + return Box::into_raw(Box::new(idc)); + } + Err(s) => { + println!("Error creating ZeroIDC instance: {}", s); return std::ptr::null_mut(); } - - if client_id.is_null() { - println!("client_id is null"); - return std::ptr::null_mut(); - } - - if auth_endpoint.is_null() { - println!("auth_endpoint is null"); - return std::ptr::null_mut(); - } - - let iss = unsafe { CStr::from_ptr(issuer) }; - let c_id = unsafe { CStr::from_ptr(client_id) }; - let auth_endpoint = unsafe { CStr::from_ptr(auth_endpoint) }; - match ZeroIDC::new( - iss.to_str().unwrap(), - c_id.to_str().unwrap(), - auth_endpoint.to_str().unwrap(), - web_listen_port, - ) { - Ok(idc) => { - return Box::into_raw(Box::new(idc)); - } - Err(s) => { - println!("Error creating ZeroIDC instance: {}", s); - return std::ptr::null_mut(); - } - } - } - - #[no_mangle] - pub extern "C" fn zeroidc_delete(ptr: *mut ZeroIDC) { - if ptr.is_null() { - return; - } - unsafe { - Box::from_raw(ptr); - } - } - - #[no_mangle] - pub extern "C" fn zeroidc_start(ptr: *mut ZeroIDC) { - let idc = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - idc.start(); - } - - #[no_mangle] - pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) { - let idc = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - idc.stop(); - } - - #[no_mangle] - pub extern "C" fn zeroidc_get_auth_info( - ptr: *mut ZeroIDC, - csrf_token: *const c_char, - nonce: *const c_char, - ) -> *mut AuthInfo { - let idc = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - - if csrf_token.is_null() { - println!("csrf_token is null"); - return std::ptr::null_mut(); - } - - if nonce.is_null() { - println!("nonce is null"); - return std::ptr::null_mut(); - } - - let csrf_token = unsafe { CStr::from_ptr(csrf_token) } - .to_str() - .unwrap() - .to_string(); - let nonce = unsafe { CStr::from_ptr(nonce) } - .to_str() - .unwrap() - .to_string(); - - match idc.get_auth_info(csrf_token, nonce) { - Some(a) => Box::into_raw(Box::new(a)), - None => std::ptr::null_mut(), - } - } - - #[no_mangle] - pub extern "C" fn zeroidc_auth_info_delete(ptr: *mut AuthInfo) { - if ptr.is_null() { - return; - } - unsafe { - Box::from_raw(ptr); - } - } - - #[no_mangle] - pub extern "C" fn zeroidc_get_auth_url(ptr: *mut AuthInfo) -> *const c_char { - let ai = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - let s = CString::new(ai.url.to_string()).unwrap(); - return s.as_ptr(); } } + +#[no_mangle] +pub extern "C" fn zeroidc_delete(ptr: *mut ZeroIDC) { + if ptr.is_null() { + return; + } + unsafe { + Box::from_raw(ptr); + } +} + +#[no_mangle] +pub extern "C" fn zeroidc_start(ptr: *mut ZeroIDC) { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + idc.start(); +} + +#[no_mangle] +pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + idc.stop(); +} + +#[no_mangle] +pub extern "C" fn zeroidc_get_auth_info( + ptr: *mut ZeroIDC, + csrf_token: *const c_char, + nonce: *const c_char, +) -> *mut AuthInfo { + let idc = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + + if csrf_token.is_null() { + println!("csrf_token is null"); + return std::ptr::null_mut(); + } + + if nonce.is_null() { + println!("nonce is null"); + return std::ptr::null_mut(); + } + + let csrf_token = unsafe { CStr::from_ptr(csrf_token) } + .to_str() + .unwrap() + .to_string(); + let nonce = unsafe { CStr::from_ptr(nonce) } + .to_str() + .unwrap() + .to_string(); + + match idc.get_auth_info(csrf_token, nonce) { + Some(a) => Box::into_raw(Box::new(a)), + None => std::ptr::null_mut(), + } +} + +#[no_mangle] +pub extern "C" fn zeroidc_auth_info_delete(ptr: *mut AuthInfo) { + if ptr.is_null() { + return; + } + unsafe { + Box::from_raw(ptr); + } +} + +#[no_mangle] +pub extern "C" fn zeroidc_get_auth_url(ptr: *mut AuthInfo) -> *const c_char { + let ai = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + let s = CString::new(ai.url.to_string()).unwrap(); + return s.as_ptr(); +} From 8d39c9a861c9a1ff4064648bceb2d556da151147 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 4 Nov 2021 15:40:08 -0700 Subject: [PATCH 041/144] plumbing full flow from controller -> client network --- controller/DB.hpp | 26 +++++++- controller/DBMirrorSet.cpp | 10 +-- controller/DBMirrorSet.hpp | 2 +- controller/EmbeddedNetworkController.cpp | 81 +++++++++++++++++++----- controller/PostgreSQL.cpp | 47 +++++++++----- controller/PostgreSQL.hpp | 2 +- include/ZeroTierOne.h | 27 ++++++++ make-mac.mk | 14 ++-- node/IncomingPacket.cpp | 59 +++++++++++++++-- node/Network.cpp | 47 +++++++++++++- node/Network.hpp | 17 ++++- node/NetworkConfig.cpp | 68 ++++++++++++++++---- node/NetworkConfig.hpp | 65 ++++++++++++++++++- zeroidc/.cargo/config.toml | 5 ++ 14 files changed, 400 insertions(+), 70 deletions(-) create mode 100644 zeroidc/.cargo/config.toml diff --git a/controller/DB.hpp b/controller/DB.hpp index 0a5d784c2..24f388b8f 100644 --- a/controller/DB.hpp +++ b/controller/DB.hpp @@ -40,6 +40,30 @@ namespace ZeroTier { +struct AuthInfo +{ +public: + AuthInfo() + : enabled(false) + , version(0) + , authenticationURL() + , authenticationExpiryTime(0) + , centralAuthURL() + , ssoNonce() + , ssoState() + , ssoClientID() + {} + + bool enabled; + uint64_t version; + std::string authenticationURL; + uint64_t authenticationExpiryTime; + std::string centralAuthURL; + std::string ssoNonce; + std::string ssoState; + std::string ssoClientID; +}; + /** * Base class with common infrastructure for all controller DB implementations */ @@ -108,7 +132,7 @@ public: virtual void eraseMember(const uint64_t networkId,const uint64_t memberId) = 0; virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) = 0; - virtual std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) { return ""; } + virtual AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL) { return AuthInfo(); } virtual void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts); inline void addListener(DB::ChangeListener *const listener) diff --git a/controller/DBMirrorSet.cpp b/controller/DBMirrorSet.cpp index de7ebefe1..0e5a90f57 100644 --- a/controller/DBMirrorSet.cpp +++ b/controller/DBMirrorSet.cpp @@ -125,16 +125,16 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,std::vect return false; } -std::string DBMirrorSet::getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) +AuthInfo DBMirrorSet::getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL) { std::lock_guard l(_dbs_l); for(auto d=_dbs.begin();d!=_dbs.end();++d) { - std::string url = (*d)->getSSOAuthURL(member, redirectURL); - if (!url.empty()) { - return url; + AuthInfo info = (*d)->getSSOAuthInfo(member, redirectURL); + if (info.enabled) { + return info; } } - return ""; + return AuthInfo(); } void DBMirrorSet::networkMemberSSOHasExpired(uint64_t nwid, int64_t ts) diff --git a/controller/DBMirrorSet.hpp b/controller/DBMirrorSet.hpp index 4ce962740..9a957ee38 100644 --- a/controller/DBMirrorSet.hpp +++ b/controller/DBMirrorSet.hpp @@ -51,7 +51,7 @@ public: virtual void onNetworkMemberUpdate(const void *db,uint64_t networkId,uint64_t memberId,const nlohmann::json &member); virtual void onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId); - std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL); + AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL); void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts); inline void addDB(const std::shared_ptr &db) diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index ea70cb3ae..9ee65ddef 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -1360,27 +1360,53 @@ void EmbeddedNetworkController::_request( // Otherwise no, we use standard auth logic. bool networkSSOEnabled = OSUtils::jsonBool(network["ssoEnabled"], false); bool memberSSOExempt = OSUtils::jsonBool(member["ssoExempt"], false); - std::string authenticationURL; - if (networkSSOEnabled && !memberSSOExempt) { - authenticationURL = _db.getSSOAuthURL(member, _ssoRedirectURL); + AuthInfo info; + if (networkSSOEnabled && ! memberSSOExempt) { + info = _db.getSSOAuthInfo(member, _ssoRedirectURL); + assert(info.enabled == networkSSOEnabled); + std::string memberId = member["id"]; //fprintf(stderr, "ssoEnabled && !ssoExempt %s-%s\n", nwids, memberId.c_str()); uint64_t authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0); //fprintf(stderr, "authExpiryTime: %lld\n", authenticationExpiryTime); if (authenticationExpiryTime < now) { - if (!authenticationURL.empty()) { - _db.networkMemberSSOHasExpired(nwid, now); - onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt()); + if (info.version == 0) { + if (!info.authenticationURL.empty()) { + _db.networkMemberSSOHasExpired(nwid, now); + onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt()); - Dictionary<3072> authInfo; - authInfo.add("aU", authenticationURL.c_str()); - //fprintf(stderr, "sending auth URL: %s\n", authenticationURL.c_str()); + Dictionary<4096> authInfo; + authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, 0ULL); + authInfo.add(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, info.authenticationURL.c_str()); + //fprintf(stderr, "sending auth URL: %s\n", authenticationURL.c_str()); - DB::cleanMember(member); - _db.save(member,true); + DB::cleanMember(member); + _db.save(member,true); - _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes()); - return; + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes()); + return; + } + } else if (info.version == 1) { + if (!info.authenticationURL.empty()) { + _db.networkMemberSSOHasExpired(nwid, now); + onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt()); + + Dictionary<8192> authInfo; + authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, info.version); + authInfo.add(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, info.authenticationURL.c_str()); + authInfo.add(ZT_AUTHINFO_DICT_KEY_CENTRAL_ENDPOINT_URL, info.centralAuthURL.c_str()); + authInfo.add(ZT_AUTHINFO_DICT_KEY_NONCE, info.ssoNonce.c_str()); + authInfo.add(ZT_AUTHINFO_DICT_KEY_STATE, info.ssoState.c_str()); + authInfo.add(ZT_AUTHINFO_DICT_KEY_CLIENT_ID, info.ssoClientID.c_str()); + + DB::cleanMember(member); + _db.save(member, true); + + _sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes()); + return; + } + } else { + fprintf(stderr, "invalid sso info.version %llu\n", info.version); } } else if (authorized) { _db.memberWillExpire(authenticationExpiryTime, nwid, identity.address().toInt()); @@ -1452,9 +1478,32 @@ void EmbeddedNetworkController::_request( nc->multicastLimit = (unsigned int)OSUtils::jsonInt(network["multicastLimit"],32ULL); nc->ssoEnabled = OSUtils::jsonBool(network["ssoEnabled"], false); - nc->authenticationExpiryTime = OSUtils::jsonInt(member["authenticationExpiryTime"], 0LL); - if (!authenticationURL.empty()) - Utils::scopy(nc->authenticationURL, sizeof(nc->authenticationURL), authenticationURL.c_str()); + nc->ssoVersion = info.version; + + if (info.version == 0) { + nc->authenticationExpiryTime = OSUtils::jsonInt(member["authenticationExpiryTime"], 0LL); + if (!info.authenticationURL.empty()) { + Utils::scopy(nc->authenticationURL, sizeof(nc->authenticationURL), info.authenticationURL.c_str()); + } + } + else if (info.version == 1) { + nc->authenticationExpiryTime = OSUtils::jsonInt(member["authenticationExpiryTime"], 0LL); + if (!info.authenticationURL.empty()) { + Utils::scopy(nc->authenticationURL, sizeof(nc->authenticationURL), info.authenticationURL.c_str()); + } + if (!info.centralAuthURL.empty()) { + Utils::scopy(nc->centralAuthURL, sizeof(nc->centralAuthURL), info.centralAuthURL.c_str()); + } + if (!info.ssoNonce.empty()) { + Utils::scopy(nc->ssoNonce, sizeof(nc->ssoNonce), info.ssoNonce.c_str()); + } + if (!info.ssoState.empty()) { + Utils::scopy(nc->ssoState, sizeof(nc->ssoState), info.ssoState.c_str()); + } + if (!info.ssoClientID.empty()) { + Utils::scopy(nc->ssoClientID, sizeof(nc->ssoClientID), info.ssoClientID.c_str()); + } + } std::string rtt(OSUtils::jsonString(member["remoteTraceTarget"],"")); if (rtt.length() == 10) { diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 9edcf0594..d94602e51 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -336,7 +336,7 @@ void PostgreSQL::nodeIsOnline(const uint64_t networkId, const uint64_t memberId, } } -std::string PostgreSQL::getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL) +AuthInfo PostgreSQL::getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL) { // NONCE is just a random character string. no semantic meaning // state = HMAC SHA384 of Nonce based on shared sso key @@ -347,10 +347,12 @@ std::string PostgreSQL::getSSOAuthURL(const nlohmann::json &member, const std::s // how do we tell when a nonce is used? if auth_expiration_time is set std::string networkId = member["nwid"]; std::string memberId = member["id"]; - char authenticationURL[4096] = {0}; - //fprintf(stderr, "PostgreSQL::updateMemberOnLoad: %s-%s\n", networkId.c_str(), memberId.c_str()); - bool have_auth = false; + + char authenticationURL[4096] = {0}; + AuthInfo info; + info.enabled = true; + // fprintf(stderr, "PostgreSQL::updateMemberOnLoad: %s-%s\n", networkId.c_str(), memberId.c_str()); try { auto c = _pool->borrow(); pqxx::work w(*c->c); @@ -390,38 +392,51 @@ std::string PostgreSQL::getSSOAuthURL(const nlohmann::json &member, const std::s exit(6); } - r = w.exec_params("SELECT org.client_id, org.authorization_endpoint " + r = w.exec_params("SELECT org.client_id, org.authorization_endpoint, org.sso_version " "FROM ztc_network AS nw, ztc_org AS org " "WHERE nw.id = $1 AND nw.sso_enabled = true AND org.owner_id = nw.owner_id", networkId); std::string client_id = ""; std::string authorization_endpoint = ""; + uint64_t sso_version = 0; if (r.size() == 1) { client_id = r.at(0)[0].as(); authorization_endpoint = r.at(0)[1].as(); + sso_version = r.at(0)[2].as(); } else if (r.size() > 1) { fprintf(stderr, "ERROR: More than one auth endpoint for an organization?!?!? NetworkID: %s\n", networkId.c_str()); } else { fprintf(stderr, "No client or auth endpoint?!?\n"); } - + + info.version = sso_version; + // no catch all else because we don't actually care if no records exist here. just continue as normal. if ((!client_id.empty())&&(!authorization_endpoint.empty())) { - have_auth = true; - + uint8_t state[48]; HMACSHA384(_ssoPsk, nonceBytes, sizeof(nonceBytes), state); char state_hex[256]; Utils::hex(state, 48, state_hex); - OSUtils::ztsnprintf(authenticationURL, sizeof(authenticationURL), - "%s?response_type=id_token&response_mode=form_post&scope=openid+email+profile&redirect_uri=%s&nonce=%s&state=%s&client_id=%s", - authorization_endpoint.c_str(), - redirectURL.c_str(), - nonce.c_str(), - state_hex, - client_id.c_str()); + if (info.version == 0) { + char url[2048] = {0}; + OSUtils::ztsnprintf(url, sizeof(authenticationURL), + "%s?response_type=id_token&response_mode=form_post&scope=openid+email+profile&redirect_uri=%s&nonce=%s&state=%s&client_id=%s", + authorization_endpoint.c_str(), + redirectURL.c_str(), + nonce.c_str(), + state_hex, + client_id.c_str()); + info.authenticationURL = std::string(url); + } else if (info.version == 1) { + info.ssoClientID = client_id; + info.authenticationURL = authorization_endpoint; + info.ssoNonce = nonce; + info.ssoState = std::string(state_hex); + info.centralAuthURL = redirectURL; + } } else { fprintf(stderr, "client_id: %s\nauthorization_endpoint: %s\n", client_id.c_str(), authorization_endpoint.c_str()); } @@ -432,7 +447,7 @@ std::string PostgreSQL::getSSOAuthURL(const nlohmann::json &member, const std::s fprintf(stderr, "ERROR: Error updating member on load: %s\n", e.what()); } - return std::string(authenticationURL); + return info; //std::string(authenticationURL); } void PostgreSQL::initializeNetworks() diff --git a/controller/PostgreSQL.hpp b/controller/PostgreSQL.hpp index 637b29749..acbc65a67 100644 --- a/controller/PostgreSQL.hpp +++ b/controller/PostgreSQL.hpp @@ -107,7 +107,7 @@ public: virtual void eraseNetwork(const uint64_t networkId); virtual void eraseMember(const uint64_t networkId, const uint64_t memberId); virtual void nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress &physicalAddress); - virtual std::string getSSOAuthURL(const nlohmann::json &member, const std::string &redirectURL); + virtual AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL); protected: struct _PairHasher diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index 2bdea6474..063db4396 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -1194,11 +1194,18 @@ typedef struct */ ZT_VirtualNetworkDNS dns; + + /** * sso enabled */ bool ssoEnabled; + /** + * SSO verison + */ + uint64_t ssoVersion; + /** * If the status us AUTHENTICATION_REQUIRED, this may contain a URL for authentication. */ @@ -1208,6 +1215,26 @@ typedef struct * Time that current authentication expires. only valid if ssoEnabled is true */ uint64_t authenticationExpiryTime; + + /** + * central base URL. + */ + char centralAuthURL[2048]; + + /** + * sso nonce + */ + char ssoNonce[64]; + + /** + * sso state + */ + char ssoState[128]; + + /** + * oidc client id + */ + char ssoClientID[256]; } ZT_VirtualNetworkConfig; /** diff --git a/make-mac.mk b/make-mac.mk index eeddba88b..5e889cddc 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -1,6 +1,8 @@ CC=clang CXX=clang++ -INCLUDES= +TOPDIR=$(shell PWD) + +INCLUDES=-I$(shell PWD)/zeroidc/target DEFS= LIBS= ARCH_FLAGS=-arch x86_64 -arch arm64 @@ -26,7 +28,7 @@ DEFS+=-DZT_BUILD_PLATFORM=$(ZT_BUILD_PLATFORM) -DZT_BUILD_ARCHITECTURE=$(ZT_BUIL include objects.mk ONE_OBJS+=osdep/MacEthernetTap.o osdep/MacKextEthernetTap.o osdep/MacDNSHelper.o ext/http-parser/http_parser.o -LIBS+=-framework CoreServices -framework SystemConfiguration -framework CoreFoundation +LIBS+=-framework CoreServices -framework SystemConfiguration -framework CoreFoundation -framework Security # Official releases are signed with our Apple cert and apply software updates by default ifeq ($(ZT_OFFICIAL_RELEASE),1) @@ -103,7 +105,7 @@ mac-agent: FORCE osdep/MacDNSHelper.o: osdep/MacDNSHelper.mm $(CXX) $(CXXFLAGS) -c osdep/MacDNSHelper.mm -o osdep/MacDNSHelper.o -one: $(CORE_OBJS) $(ONE_OBJS) one.o mac-agent zeroidc +one: zeroidc $(CORE_OBJS) $(ONE_OBJS) one.o mac-agent $(CXX) $(CXXFLAGS) -o zerotier-one $(CORE_OBJS) $(ONE_OBJS) one.o $(LIBS) zeroidc/target/libzeroidc.a # $(STRIP) zerotier-one ln -sf zerotier-one zerotier-idtool @@ -115,8 +117,8 @@ zerotier-one: one zeroidc: zeroidc/target/libzeroidc.a zeroidc/target/libzeroidc.a: - cd zeroidc && cargo build --target=x86_64-apple-darwin --release - cd zeroidc && cargo build --target=aarch64-apple-darwin --release + cd zeroidc && MACOSX_DEPLOYMENT_TARGET=$(MACOS_VERSION_MIN) cargo build --target=x86_64-apple-darwin --release + cd zeroidc && MACOSX_DEPLOYMENT_TARGET=$(MACOS_VERSION_MIN) cargo build --target=aarch64-apple-darwin --release cd zeroidc && lipo -create target/x86_64-apple-darwin/release/libzeroidc.a target/aarch64-apple-darwin/release/libzeroidc.a -output target/libzeroidc.a central-controller: @@ -126,6 +128,8 @@ zerotier-idtool: one zerotier-cli: one +$(CORE_OBJS): zeroidc + libzerotiercore.a: $(CORE_OBJS) ar rcs libzerotiercore.a $(CORE_OBJS) ranlib libzerotiercore.a diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index 5a2a94642..df2626e89 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -199,17 +199,62 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar const uint16_t errorDataSize = at(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 8); s -= 2; if (s >= (int)errorDataSize) { - Dictionary<3072> authInfo(((const char *)this->data()) + (ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 10), errorDataSize); - char authenticationURL[2048]; - if (authInfo.get("aU", authenticationURL, sizeof(authenticationURL)) > 0) { - authenticationURL[sizeof(authenticationURL) - 1] = 0; // ensure always zero terminated - network->setAuthenticationRequired(authenticationURL); - noUrl = false; + Dictionary<8192> authInfo(((const char *)this->data()) + (ZT_PROTO_VERB_ERROR_IDX_PAYLOAD + 10), errorDataSize); + + uint64_t authVer = authInfo.getUI(ZT_AUTHINFO_DICT_KEY_VERSION, 0ULL); + + if (authVer == 0) { + char authenticationURL[2048]; + + if (authInfo.get(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, authenticationURL, sizeof(authenticationURL)) > 0) { + authenticationURL[sizeof(authenticationURL) - 1] = 0; // ensure always zero terminated + network->setAuthenticationRequired(authenticationURL); + noUrl = false; + } + } else if (authVer == 1) { + bool haveAuthURL = false; + char authenticationURL[2048] = { 0 }; + bool haveCentralURL = false; + char centralAuthURL[2048] = { 0 }; + bool haveNonce = false; + char ssoNonce[64] = { 0 }; + bool haveState = false; + char ssoState[128] = {0}; + bool haveClientID = false; + char ssoClientID[256] = { 0 }; + + if (authInfo.get(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, authenticationURL, sizeof(authenticationURL)) > 0) { + authenticationURL[sizeof(authenticationURL) - 1] = 0; + haveAuthURL = true; + } + if (authInfo.get(ZT_AUTHINFO_DICT_KEY_CENTRAL_ENDPOINT_URL, centralAuthURL, sizeof(centralAuthURL))>0) { + centralAuthURL[sizeof(centralAuthURL) - 1] = 0; + haveCentralURL = true; + } + if (authInfo.get(ZT_AUTHINFO_DICT_KEY_NONCE, ssoNonce, sizeof(ssoNonce)) > 0) { + ssoNonce[sizeof(ssoNonce) - 1] = 0; + haveNonce = true; + } + if (authInfo.get(ZT_AUTHINFO_DICT_KEY_STATE, ssoState, sizeof(ssoState)) > 0) { + ssoState[sizeof(ssoState) - 1] = 0; + haveState = true; + } + if (authInfo.get(ZT_AUTHINFO_DICT_KEY_CLIENT_ID, ssoClientID, sizeof(ssoClientID)) > 0) { + ssoClientID[sizeof(ssoClientID) - 1] = 0; + haveClientID = true; + } + + noUrl = ! (haveAuthURL && haveCentralURL && haveNonce && haveState && haveClientID); + + if (!noUrl) { + network->setAuthenticationRequired(authenticationURL, centralAuthURL, ssoClientID, ssoNonce, ssoState); + } } } } - if (noUrl) + if (noUrl) { network->setAuthenticationRequired(""); + } } } break; diff --git a/node/Network.cpp b/node/Network.cpp index f3138f3ac..0d9261e3b 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -32,6 +32,7 @@ #include "Node.hpp" #include "Peer.hpp" #include "Trace.hpp" +#include "zeroidc.h" #include @@ -550,7 +551,8 @@ Network::Network(const RuntimeEnvironment *renv,void *tPtr,uint64_t nwid,void *u _lastConfigUpdate(0), _destroyed(false), _netconfFailure(NETCONF_FAILURE_NONE), - _portError(0) + _portError(0), + _idc(nullptr) { for(int i=0;inode->configureVirtualNetworkPort(tPtr,_id,&_uPtr,ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP,&ctmp); _portInitialized = true; } + + if (nconf->ssoEnabled) { + if (_config.ssoVersion == 1) { + // start sso handling for network + } + } } Network::~Network() @@ -598,6 +606,12 @@ Network::~Network() ZT_VirtualNetworkConfig ctmp; _externalConfig(&ctmp); + if (_idc) { + zeroidc::zeroidc_stop(_idc); + zeroidc::zeroidc_delete(_idc); + _idc = nullptr; + } + if (_destroyed) { // This is done in Node::leave() so we can pass tPtr properly //RR->node->configureVirtualNetworkPort((void *)0,_id,&_uPtr,ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY,&ctmp); @@ -1434,8 +1448,13 @@ void Network::_externalConfig(ZT_VirtualNetworkConfig *ec) const memcpy(&ec->dns, &_config.dns, sizeof(ZT_VirtualNetworkDNS)); Utils::scopy(ec->authenticationURL, sizeof(ec->authenticationURL), _authenticationURL.c_str()); + ec->ssoVersion = _config.ssoVersion; ec->authenticationExpiryTime = _config.authenticationExpiryTime; ec->ssoEnabled = _config.ssoEnabled; + Utils::scopy(ec->centralAuthURL, sizeof(ec->centralAuthURL), _config.centralAuthURL); + Utils::scopy(ec->ssoNonce, sizeof(ec->ssoNonce), _config.ssoNonce); + Utils::scopy(ec->ssoState, sizeof(ec->ssoState), _config.ssoState); + Utils::scopy(ec->ssoClientID, sizeof(ec->ssoClientID), _config.ssoClientID); } void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMulticastGroup) @@ -1542,4 +1561,30 @@ Membership &Network::_membership(const Address &a) return _memberships[a]; } +void Network::setAuthenticationRequired(const char* authEndpoint, const char* centralEndpoint, const char* clientID, const char* nonce, const char* state) +{ + Mutex::Lock _l(_lock); + _netconfFailure = NETCONF_FAILURE_AUTHENTICATION_REQUIRED; + _config.ssoEnabled = true; + _config.ssoVersion = 1; + + Utils::scopy(_config.authenticationURL, sizeof(_config.authenticationURL), authEndpoint); + Utils::scopy(_config.centralAuthURL, sizeof(_config.centralAuthURL), centralEndpoint); + Utils::scopy(_config.ssoClientID, sizeof(_config.ssoClientID), clientID); + Utils::scopy(_config.ssoNonce, sizeof(_config.ssoNonce), nonce); + Utils::scopy(_config.ssoState, sizeof(_config.ssoState), state); + + // TODO: propaagte to full flow module + if (!this->_idc) { + this->_idc = zeroidc::zeroidc_new(_config.authenticationURL, _config.ssoClientID, _config.centralAuthURL, 9993); + zeroidc::zeroidc_start(this->_idc); + } + + zeroidc::AuthInfo *info = zeroidc::zeroidc_get_auth_info(this->_idc, _config.ssoState, _config.ssoNonce); + const char* url = zeroidc::zeroidc_get_auth_url(info); + if (url != NULL) { + fprintf(stderr, "full auth URL: %s\n", url); + } +} + } // namespace ZeroTier diff --git a/node/Network.hpp b/node/Network.hpp index 33de16911..1aa64cf43 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -41,6 +41,10 @@ #define ZT_NETWORK_MAX_INCOMING_UPDATES 3 #define ZT_NETWORK_MAX_UPDATE_CHUNKS ((ZT_NETWORKCONFIG_DICT_CAPACITY / 1024) + 1) +namespace zeroidc { +typedef struct ZeroIDC ZeroIDC; +} + namespace ZeroTier { class RuntimeEnvironment; @@ -229,7 +233,14 @@ public: _netconfFailure = NETCONF_FAILURE_AUTHENTICATION_REQUIRED; _authenticationURL = (url) ? url : ""; _config.ssoEnabled = true; - } + _config.ssoVersion = 0; + } + + /** + * set netconf failure to 'authentication required' along with info needed + * for sso full flow authentication. + */ + void setAuthenticationRequired(const char* authEndpoint, const char* centralEndpoint, const char* clientID, const char* nonce, const char* state); /** * Causes this network to request an updated configuration from its master node now @@ -457,8 +468,10 @@ private: Mutex _lock; AtomicCounter __refCount; + + zeroidc::ZeroIDC *_idc; }; -} // namespace ZeroTier +} // namespace ZeroTier #endif diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index 6d148cc45..ca1cf5d12 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -182,12 +182,24 @@ bool NetworkConfig::toDictionary(Dictionary &d,b if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_DNS,*tmp)) return false; } - if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, this->ssoEnabled)) return false; - if (this->ssoEnabled) { - if (this->authenticationURL[0]) { - if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL)) return false; + if (this->ssoVersion == 0) { + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_VERSION, this->ssoVersion)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, this->ssoEnabled)) return false; + + if (this->ssoEnabled) { + if (this->authenticationURL[0]) { + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL)) return false; + } + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, this->authenticationExpiryTime)) return false; } - if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, this->authenticationExpiryTime)) return false; + } else if(this->ssoVersion == 1) { + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_VERSION, this->ssoVersion)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, this->ssoEnabled)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_CENTRAL_ENDPOINT_URL, this->centralAuthURL)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_NONCE, this->ssoNonce)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_STATE, this->ssoState)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_CLIENT_ID, this->ssoClientID)) return false; } delete tmp; @@ -374,18 +386,48 @@ bool NetworkConfig::fromDictionary(const DictionaryssoVersion = d.getUI(ZT_NETWORKCONFIG_DICT_KEY_SSO_VERSION, 0ULL); this->ssoEnabled = d.getB(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, false); - if (this->ssoEnabled) { - if (d.get(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL, (unsigned int)sizeof(this->authenticationURL)) > 0) { - this->authenticationURL[sizeof(this->authenticationURL) - 1] = 0; // ensure null terminated + + if (this->ssoVersion == 0) { + // implicit flow + if (this->ssoEnabled) { + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL, (unsigned int)sizeof(this->authenticationURL)) > 0) { + this->authenticationURL[sizeof(this->authenticationURL) - 1] = 0; // ensure null terminated + } else { + this->authenticationURL[0] = 0; + } + this->authenticationExpiryTime = d.getI(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, 0); } else { this->authenticationURL[0] = 0; + this->authenticationExpiryTime = 0; + } + } else if (this->ssoVersion == 1) { + // full flow + if (this->ssoEnabled) { + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL, (unsigned int)sizeof(this->authenticationURL)) > 0) { + this->authenticationURL[sizeof(this->authenticationURL) - 1] = 0; + } + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_CENTRAL_ENDPOINT_URL, this->centralAuthURL, (unsigned int)sizeof(this->centralAuthURL)) > 0) { + this->centralAuthURL[sizeof(this->centralAuthURL) - 1] = 0; + } + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_NONCE, this->ssoNonce, (unsigned int)sizeof(this->ssoNonce)) > 0) { + this->ssoNonce[sizeof(this->ssoNonce) - 1] = 0; + } + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_STATE, this->ssoState, (unsigned int)sizeof(this->ssoState)) > 0) { + this->ssoState[sizeof(this->ssoState) - 1] = 0; + } + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_CLIENT_ID, this->ssoClientID, (unsigned int)sizeof(this->ssoClientID)) > 0) { + this->ssoClientID[sizeof(this->ssoClientID) - 1] = 0; + } + } else { + this->authenticationURL[0] = 0; + this->authenticationExpiryTime = 0; + this->centralAuthURL[0] = 0; + this->ssoNonce[0] = 0; + this->ssoState[0] = 0; + this->ssoClientID[0] = 0; } - this->authenticationExpiryTime = d.getI(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME, 0); - } else { - this->authenticationURL[0] = 0; - this->authenticationExpiryTime = 0; } } diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index 301852adf..f546eadec 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -180,10 +180,35 @@ namespace ZeroTier { #define ZT_NETWORKCONFIG_DICT_KEY_DNS "DNS" // sso enabld #define ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED "ssoe" +// so version +#define ZT_NETWORKCONFIG_DICT_KEY_SSO_VERSION "ssov" // authentication URL #define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL "aurl" // authentication expiry #define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME "aexpt" +// central endpoint +#define ZT_NETWORKCONFIG_DICT_KEY_CENTRAL_ENDPOINT_URL "ssoce" +// nonce +#define ZT_NETWORKCONFIG_DICT_KEY_NONCE "sson" +// state +#define ZT_NETWORKCONFIG_DICT_KEY_STATE "ssos" +// client ID +#define ZT_NETWORKCONFIG_DICT_KEY_CLIENT_ID "ssocid" + +// AuthInfo fields -- used by ncSendError for sso + +// AuthInfo Version +#define ZT_AUTHINFO_DICT_KEY_VERSION "aV" +// authenticaiton URL +#define ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL "aU" +// Central endpoint URL +#define ZT_AUTHINFO_DICT_KEY_CENTRAL_ENDPOINT_URL "aCU" +// Nonce +#define ZT_AUTHINFO_DICT_KEY_NONCE "aN" +// State +#define ZT_AUTHINFO_DICT_KEY_STATE "aS" +// Client ID +#define ZT_AUTHINFO_DICT_KEY_CLIENT_ID "aCID" // Legacy fields -- these are obsoleted but are included when older clients query @@ -242,7 +267,11 @@ public: dnsCount(0), ssoEnabled(false), authenticationURL(), - authenticationExpiryTime(0) + authenticationExpiryTime(0), + centralAuthURL(), + ssoNonce(), + ssoState(), + ssoClientID() { name[0] = 0; memset(specialists, 0, sizeof(uint64_t)*ZT_MAX_NETWORK_SPECIALISTS); @@ -250,6 +279,11 @@ public: 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(centralAuthURL, 0, sizeof(centralAuthURL)); + memset(ssoNonce, 0, sizeof(ssoNonce)); + memset(ssoState, 0, sizeof(ssoState)); + memset(ssoClientID, 0, sizeof(ssoClientID)); } /** @@ -619,15 +653,42 @@ public: */ bool ssoEnabled; + /** + * SSO verison + */ + uint64_t ssoVersion; + /** * Authentication URL if authentication is required */ char authenticationURL[2048]; - /** +/** * Time current authentication expires or 0 if external authentication is disabled + * + * Not used if authVersion >= 1 */ uint64_t authenticationExpiryTime; + + /** + * central base URL. + */ + char centralAuthURL[2048]; + + /** + * sso nonce + */ + char ssoNonce[64]; + + /** + * sso state + */ + char ssoState[128]; + + /** + * oidc client id + */ + char ssoClientID[256]; }; } // namespace ZeroTier diff --git a/zeroidc/.cargo/config.toml b/zeroidc/.cargo/config.toml new file mode 100644 index 000000000..b5447409e --- /dev/null +++ b/zeroidc/.cargo/config.toml @@ -0,0 +1,5 @@ +[target.x86_64-apple-darwin] +rustflags=["-C", "link-arg=-mmacosx-version-min=10.13"] + +[target.aarch64-apple-darwin] +rustflags=["-C", "link-arg=-mmacosx-version-min=10.13"] From 43433cdb5a3b376ab0ac82a562fc33cdc146d88f Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 4 Nov 2021 17:16:23 -0700 Subject: [PATCH 042/144] integrate rust build of zeroidc to linux --- controller/EmbeddedNetworkController.cpp | 2 +- make-linux.mk | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index 9ee65ddef..6351fb4a8 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -1376,7 +1376,7 @@ void EmbeddedNetworkController::_request( onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt()); Dictionary<4096> authInfo; - authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, 0ULL); + authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, (uint64_t)0ULL); authInfo.add(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, info.authenticationURL.c_str()); //fprintf(stderr, "sending auth URL: %s\n", authenticationURL.c_str()); diff --git a/make-linux.mk b/make-linux.mk index 324344b34..645aa0fd5 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -9,9 +9,9 @@ ifeq ($(origin CXX),default) CXX:=$(shell if [ -e /opt/rh/devtoolset-8/root/usr/bin/g++ ]; then echo /opt/rh/devtoolset-8/root/usr/bin/g++; else echo $(CXX); fi) endif -INCLUDES?= +INCLUDES?=-Izeroidc/target DEFS?= -LDLIBS?= +LDLIBS?=zeroidc/target/release/libzeroidc.a -ldl DESTDIR?= include objects.mk @@ -311,6 +311,8 @@ zerotier-idtool: zerotier-one zerotier-cli: zerotier-one ln -sf zerotier-one zerotier-cli +$(CORE_OBJS): zeroidc + libzerotiercore.a: FORCE make CFLAGS="-O3 -fstack-protector -fPIC" CXXFLAGS="-O3 -std=c++11 -fstack-protector -fPIC" $(CORE_OBJS) ar rcs libzerotiercore.a $(CORE_OBJS) @@ -329,7 +331,7 @@ manpages: FORCE doc: manpages clean: FORCE - rm -rf *.a *.so *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/miniupnpc/*.o ext/libnatpmp/*.o $(CORE_OBJS) $(ONE_OBJS) zerotier-one zerotier-idtool zerotier-cli zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm .depend debian/files debian/zerotier-one*.debhelper debian/zerotier-one.substvars debian/*.log debian/zerotier-one doc/node_modules ext/misc/*.o debian/.debhelper debian/debhelper-build-stamp docker/zerotier-one + rm -rf *.a *.so *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/miniupnpc/*.o ext/libnatpmp/*.o $(CORE_OBJS) $(ONE_OBJS) zerotier-one zerotier-idtool zerotier-cli zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm .depend debian/files debian/zerotier-one*.debhelper debian/zerotier-one.substvars debian/*.log debian/zerotier-one doc/node_modules ext/misc/*.o debian/.debhelper debian/debhelper-build-stamp docker/zerotier-one zeroidc/target distclean: clean @@ -351,6 +353,9 @@ debug: FORCE make ZT_DEBUG=1 one make ZT_DEBUG=1 selftest +zeroidc: FORCE + cd zeroidc && cargo build --release + # Note: keep the symlinks in /var/lib/zerotier-one to the binaries since these # provide backward compatibility with old releases where the binaries actually # lived here. Folks got scripts. From c7109c646a4202d924d8239a8210a9151757b2b6 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Fri, 5 Nov 2021 16:52:16 -0700 Subject: [PATCH 043/144] Add IA32 build flag --- make-linux.mk | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/make-linux.mk b/make-linux.mk index 324344b34..e35a82375 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -245,6 +245,13 @@ ERR=$(error FATAL: architecture could not be determined from $(CC) -dumpmachine: err: ; $(ERR) endif +# Flag for Intel 32-bit processors since some machine images are incorrectly marked as i386 +ifeq ($(ZT_IA32),1) + override LDFLAGS+=-m32 + override CFLAGS+=-m32 + override CXXFLAGS+=-m32 +endif + # Disable software updates by default on Linux since that is normally done with package management override DEFS+=-DZT_BUILD_PLATFORM=1 -DZT_BUILD_ARCHITECTURE=$(ZT_ARCHITECTURE) -DZT_SOFTWARE_UPDATE_DEFAULT="\"disable\"" From 62ce6e6a605d6e53c101b59c9bb8652d4db39480 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Fri, 5 Nov 2021 19:38:11 -0700 Subject: [PATCH 044/144] Disable faster x64 crypto mode for IA32 builds --- make-linux.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/make-linux.mk b/make-linux.mk index e35a82375..5ad9120cc 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -250,6 +250,9 @@ ifeq ($(ZT_IA32),1) override LDFLAGS+=-m32 override CFLAGS+=-m32 override CXXFLAGS+=-m32 + # Prevent the use of X64 crypto + ZT_USE_X64_ASM_SALSA=0 + ZT_USE_X64_ASM_ED25519=0 endif # Disable software updates by default on Linux since that is normally done with package management From 4d021e16a59c6c4de1a07d5ff5d4a20b9f604467 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 8 Nov 2021 09:29:31 -0800 Subject: [PATCH 045/144] update field lengths --- include/ZeroTierOne.h | 4 ++-- node/NetworkConfig.hpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index 063db4396..0a8ec85fd 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -1224,12 +1224,12 @@ typedef struct /** * sso nonce */ - char ssoNonce[64]; + char ssoNonce[128]; /** * sso state */ - char ssoState[128]; + char ssoState[256]; /** * oidc client id diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index f546eadec..8b18e150d 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -663,7 +663,7 @@ public: */ char authenticationURL[2048]; -/** + /** * Time current authentication expires or 0 if external authentication is disabled * * Not used if authVersion >= 1 @@ -678,12 +678,12 @@ public: /** * sso nonce */ - char ssoNonce[64]; + char ssoNonce[128]; /** * sso state */ - char ssoState[128]; + char ssoState[256]; /** * oidc client id From f268237372d6b990248cecfcf25215d0d4bea7dd Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 8 Nov 2021 09:32:15 -0800 Subject: [PATCH 046/144] add FORCE tag to cargo step --- make-mac.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make-mac.mk b/make-mac.mk index 5e889cddc..0e4657254 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -116,7 +116,7 @@ zerotier-one: one zeroidc: zeroidc/target/libzeroidc.a -zeroidc/target/libzeroidc.a: +zeroidc/target/libzeroidc.a: FORCE cd zeroidc && MACOSX_DEPLOYMENT_TARGET=$(MACOS_VERSION_MIN) cargo build --target=x86_64-apple-darwin --release cd zeroidc && MACOSX_DEPLOYMENT_TARGET=$(MACOS_VERSION_MIN) cargo build --target=aarch64-apple-darwin --release cd zeroidc && lipo -create target/x86_64-apple-darwin/release/libzeroidc.a target/aarch64-apple-darwin/release/libzeroidc.a -output target/libzeroidc.a From c15890b4dbba6f6f4385909fc4f3cf3ec54515ef Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 9 Nov 2021 09:31:52 -0500 Subject: [PATCH 047/144] Version bump to 1.8.2. --- RELEASE-NOTES.md | 4 +++- debian/changelog | 6 ++++++ ext/installfiles/mac/ZeroTier One.pkgproj | 2 +- version.h | 2 +- zerotier-one.spec | 5 ++++- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index e40967398..9785cc43d 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,7 +1,9 @@ ZeroTier Release Notes ====== -# 2021-11-00 -- Version 1.8.2 +# 2021-11-08 -- Version 1.8.2 + * Fix multicast on linux. + * Update build flags to possibly support MacOS older than 10.14, but more work needs to be done. # 2021-10-28 -- Version 1.8.1 diff --git a/debian/changelog b/debian/changelog index ce6a6d48c..a6a24d9b0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +zerotier-one (1.8.2) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Mon, 08 Nov 2021 01:00:00 -0700 + zerotier-one (1.8.1) unstable; urgency=medium * See RELEASE-NOTES.md for release notes. diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index 60b30ca45..55961ddc7 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -701,7 +701,7 @@ USE_HFS+_COMPRESSION VERSION - 1.8.1 + 1.8.2 TYPE 0 diff --git a/version.h b/version.h index 3e5172416..bb74e0fed 100644 --- a/version.h +++ b/version.h @@ -27,7 +27,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 1 +#define ZEROTIER_ONE_VERSION_REVISION 2 /** * Build version diff --git a/zerotier-one.spec b/zerotier-one.spec index 116b904d6..d6ddb83b2 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -1,5 +1,5 @@ Name: zerotier-one -Version: 1.8.1 +Version: 1.8.2 Release: 1%{?dist} Summary: ZeroTier network virtualization service @@ -152,6 +152,9 @@ esac %endif %changelog +* Mon Nov 08 2021 Adam Ierymenko - 1.8.2 +- see https://github.com/zerotier/ZeroTierOne for release notes + * Wed Oct 20 2021 Adam Ierymenko - 1.8.1 - see https://github.com/zerotier/ZeroTierOne for release notes From 357e1aca544563f107e50d98b1e8f509a8178dc3 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 9 Nov 2021 13:24:03 -0500 Subject: [PATCH 048/144] Likely MAC fix for Linux. --- osdep/LinuxEthernetTap.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index 181c558be..a4c6544e9 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -205,14 +205,6 @@ LinuxEthernetTap::LinuxEthernetTap( return; } - ifr.ifr_ifru.ifru_hwaddr.sa_family = ARPHRD_ETHER; - _mac.copyTo(ifr.ifr_ifru.ifru_hwaddr.sa_data,6); - if (ioctl(sock,SIOCSIFHWADDR,(void *)&ifr) < 0) { - ::close(sock); - printf("WARNING: ioctl() failed setting up Linux tap device (set MAC)\n"); - return; - } - ifr.ifr_flags |= IFF_MULTICAST; ifr.ifr_flags |= IFF_UP; if (ioctl(sock,SIOCSIFFLAGS,(void *)&ifr) < 0) { @@ -225,7 +217,15 @@ LinuxEthernetTap::LinuxEthernetTap( // before they will accept MTU and MAC. For others it doesn't matter, but is // harmless. This was moved to the worker thread though so as not to block the // main ZeroTier loop. - usleep(500000); + usleep(200000); + + ifr.ifr_ifru.ifru_hwaddr.sa_family = ARPHRD_ETHER; + _mac.copyTo(ifr.ifr_ifru.ifru_hwaddr.sa_data,6); + if (ioctl(sock,SIOCSIFHWADDR,(void *)&ifr) < 0) { + ::close(sock); + printf("WARNING: ioctl() failed setting up Linux tap device (set MAC)\n"); + return; + } ifr.ifr_ifru.ifru_mtu = (int)_mtu; if (ioctl(sock,SIOCSIFMTU,(void *)&ifr) < 0) { From c16b03c8b871932120aaff002789453e58934e98 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 9 Nov 2021 13:28:15 -0500 Subject: [PATCH 049/144] Set MAC address twice, once before and once after bringing interface up, since different kernels behave differently (Linux). --- osdep/LinuxEthernetTap.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index a4c6544e9..35a123873 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -205,6 +205,16 @@ LinuxEthernetTap::LinuxEthernetTap( return; } + ifr.ifr_ifru.ifru_hwaddr.sa_family = ARPHRD_ETHER; + _mac.copyTo(ifr.ifr_ifru.ifru_hwaddr.sa_data,6); + if (ioctl(sock,SIOCSIFHWADDR,(void *)&ifr) < 0) { + ::close(sock); + printf("WARNING: ioctl() failed setting up Linux tap device (set MAC)\n"); + return; + } + + usleep(100000); + ifr.ifr_flags |= IFF_MULTICAST; ifr.ifr_flags |= IFF_UP; if (ioctl(sock,SIOCSIFFLAGS,(void *)&ifr) < 0) { @@ -213,11 +223,7 @@ LinuxEthernetTap::LinuxEthernetTap( return; } - // Some kernel versions seem to require you to yield while the device comes up - // before they will accept MTU and MAC. For others it doesn't matter, but is - // harmless. This was moved to the worker thread though so as not to block the - // main ZeroTier loop. - usleep(200000); + usleep(100000); ifr.ifr_ifru.ifru_hwaddr.sa_family = ARPHRD_ETHER; _mac.copyTo(ifr.ifr_ifru.ifru_hwaddr.sa_data,6); From f7dbd050af8daafc820775d64b312770d38cfa35 Mon Sep 17 00:00:00 2001 From: capruro Date: Tue, 9 Nov 2021 19:33:11 +0100 Subject: [PATCH 050/144] snapcraft --- .gitignore | 13 +++++++++ snap/snapcraft.yaml | 70 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 snap/snapcraft.yaml diff --git a/.gitignore b/.gitignore index 2143346ff..cb91b8a62 100755 --- a/.gitignore +++ b/.gitignore @@ -122,3 +122,16 @@ attic/world/*.c25519 attic/world/mkworld workspace/ workspace2/ + +#snapcraft specifics +/parts/ +/stage/ +/prime/ + +*.snap + +.snapcraft +__pycache__ +*.pyc +*_source.tar.bz2 +snap/.snapcraft \ No newline at end of file diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml new file mode 100644 index 000000000..47adc59ef --- /dev/null +++ b/snap/snapcraft.yaml @@ -0,0 +1,70 @@ +name: zerotier +summary: ZeroTier is a software-based managed Ethernet switch for planet Earth. +description: | + It erases the LAN/WAN distinction and makes VPNs, tunnels, proxies, and other kludges arising from the inflexible nature of physical networks obsolete. Everything is encrypted end-to-end and traffic takes the most direct (peer to peer) path available. + This snap contains ZeroTier One, a service that provides ZeroTier network connectivity and makes joining virtual networks as easy as joining IRC or Slack channels. + Visit ZeroTier's site for more information and pre-built binary packages. Apps for Android and iOS are available for free in the Google Play and Apple app stores. + Install + sudo snap install zerotier + Join your network + sudo zerotier.cli join 8056c2e21c000001 + sudo zerotier.cli status + Approve your new node in ZeroTier Central (https://my.zerotier.com)! Welcome online! + +adopt-info: one +confinement: strict +grade: stable +base: core18 + +apps: + one: + # Add -U to prevent attempting to drop privileges since snaps have their + # own containment mechanism. Otherwise, if a user named "zerotier-one" + # exists on the system, the setgid or related calls will fail. + command: usr/sbin/zerotier-one -U + daemon: simple + plugs: + - network + - network-bind + - network-control + + cli: + command: usr/sbin/zerotier-cli + plugs: + - network + + idtool: + command: usr/sbin/zerotier-idtool + plugs: + - network + +layout: + /var/lib/zerotier-one: + bind: $SNAP_COMMON + +parts: + one: + plugin: make + source: . + source-type: git + build-packages: + - build-essential + - libc++-dev + make-parameters: + - CXX=g++ + filesets: + binaries: + - usr/sbin/zerotier-one + - usr/sbin/zerotier-cli + - usr/sbin/zerotier-idtool + prime: + - $binaries + override-build: | + snapcraftctl build + # Grab the version string from the newly-compiled binary. + snapcraftctl set-version "$(./zerotier-one -v)" +slots: + zerotier-control: + interface: content + read: + - $SNAP_COMMON \ No newline at end of file From f8ca7002c2166b686052f64e0c6555f9b9c0a390 Mon Sep 17 00:00:00 2001 From: capruro <64908287+capruro@users.noreply.github.com> Date: Wed, 10 Nov 2021 23:15:41 +0100 Subject: [PATCH 051/144] removing source-type Unnecessary --- snap/snapcraft.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 47adc59ef..f2d097f2d 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -46,7 +46,6 @@ parts: one: plugin: make source: . - source-type: git build-packages: - build-essential - libc++-dev @@ -67,4 +66,4 @@ slots: zerotier-control: interface: content read: - - $SNAP_COMMON \ No newline at end of file + - $SNAP_COMMON From cacfc294d9851ee74109f803165daabacc2ad25e Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 10 Nov 2021 20:04:36 -0500 Subject: [PATCH 052/144] Windows package version bump and PATH fix. --- ext/installfiles/windows/ZeroTier One.aip | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index 8f220d1f6..4542e8c2e 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -26,10 +26,10 @@ - + - + @@ -64,7 +64,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -510,7 +510,7 @@ - + From 953d22de14a9c29c0eac5a69d899ce0ab252de2f Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 10 Nov 2021 22:18:35 -0500 Subject: [PATCH 053/144] VERSION 1.8.2 --- RELEASE-NOTES.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 9785cc43d..ffe03aea3 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,9 +1,12 @@ ZeroTier Release Notes ====== + # 2021-11-08 -- Version 1.8.2 * Fix multicast on linux. - * Update build flags to possibly support MacOS older than 10.14, but more work needs to be done. + * Fix a bug that could cause the tap adapter to have the wrong MAC on Linux. + * Update build flags to possibly support MacOS older than 10.14, but more work needs to be done. It may not work yet. + * Fix path variable setting on Windows. # 2021-10-28 -- Version 1.8.1 From a7116bc9711b3a96fddb45c3efd9ed879d55dfdf Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 10 Nov 2021 22:19:11 -0500 Subject: [PATCH 054/144] VERSION 1.8.2 From fa21fdc1cc45623e7eaf1696e3eb0a268a2dea7e Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 11 Nov 2021 16:19:26 -0800 Subject: [PATCH 055/144] rename stuff for clarity authenticationURL will still be used by the client for v1 and v2 of sso --- controller/DB.hpp | 2 ++ controller/EmbeddedNetworkController.cpp | 2 +- controller/PostgreSQL.cpp | 2 +- include/ZeroTierOne.h | 5 +++++ node/IncomingPacket.cpp | 14 +++++++------- node/Network.cpp | 4 ++-- node/Network.hpp | 2 +- node/NetworkConfig.cpp | 7 ++++++- node/NetworkConfig.hpp | 11 +++++++++++ 9 files changed, 36 insertions(+), 13 deletions(-) diff --git a/controller/DB.hpp b/controller/DB.hpp index 24f388b8f..d0641d72e 100644 --- a/controller/DB.hpp +++ b/controller/DB.hpp @@ -48,6 +48,7 @@ public: , version(0) , authenticationURL() , authenticationExpiryTime(0) + , issuerURL() , centralAuthURL() , ssoNonce() , ssoState() @@ -58,6 +59,7 @@ public: uint64_t version; std::string authenticationURL; uint64_t authenticationExpiryTime; + std::string issuerURL; std::string centralAuthURL; std::string ssoNonce; std::string ssoState; diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index 6351fb4a8..4ce48fa26 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -1393,7 +1393,7 @@ void EmbeddedNetworkController::_request( Dictionary<8192> authInfo; authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, info.version); - authInfo.add(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, info.authenticationURL.c_str()); + authInfo.add(ZT_AUTHINFO_DICT_KEY_ISSUER_URL, info.issuerURL.c_str()); authInfo.add(ZT_AUTHINFO_DICT_KEY_CENTRAL_ENDPOINT_URL, info.centralAuthURL.c_str()); authInfo.add(ZT_AUTHINFO_DICT_KEY_NONCE, info.ssoNonce.c_str()); authInfo.add(ZT_AUTHINFO_DICT_KEY_STATE, info.ssoState.c_str()); diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index d94602e51..f79c8725d 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -432,7 +432,7 @@ AuthInfo PostgreSQL::getSSOAuthInfo(const nlohmann::json &member, const std::str info.authenticationURL = std::string(url); } else if (info.version == 1) { info.ssoClientID = client_id; - info.authenticationURL = authorization_endpoint; + info.issuerURL = authorization_endpoint; info.ssoNonce = nonce; info.ssoState = std::string(state_hex); info.centralAuthURL = redirectURL; diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index 0a8ec85fd..6d61c6ea8 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -1216,6 +1216,11 @@ typedef struct */ uint64_t authenticationExpiryTime; + /** + * OIDC issuer URL. + */ + char issuerURL[2048]; + /** * central base URL. */ diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index df2626e89..15003b4eb 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -212,8 +212,8 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar noUrl = false; } } else if (authVer == 1) { - bool haveAuthURL = false; - char authenticationURL[2048] = { 0 }; + bool haveIssuerURL = false; + char issuerURL[2048] = { 0 }; bool haveCentralURL = false; char centralAuthURL[2048] = { 0 }; bool haveNonce = false; @@ -223,9 +223,9 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar bool haveClientID = false; char ssoClientID[256] = { 0 }; - if (authInfo.get(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, authenticationURL, sizeof(authenticationURL)) > 0) { - authenticationURL[sizeof(authenticationURL) - 1] = 0; - haveAuthURL = true; + if (authInfo.get(ZT_AUTHINFO_DICT_KEY_ISSUER_URL, issuerURL, sizeof(issuerURL)) > 0) { + issuerURL[sizeof(issuerURL) - 1] = 0; + haveIssuerURL = true; } if (authInfo.get(ZT_AUTHINFO_DICT_KEY_CENTRAL_ENDPOINT_URL, centralAuthURL, sizeof(centralAuthURL))>0) { centralAuthURL[sizeof(centralAuthURL) - 1] = 0; @@ -244,10 +244,10 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,void *tPtr,const Shar haveClientID = true; } - noUrl = ! (haveAuthURL && haveCentralURL && haveNonce && haveState && haveClientID); + noUrl = ! (haveIssuerURL && haveCentralURL && haveNonce && haveState && haveClientID); if (!noUrl) { - network->setAuthenticationRequired(authenticationURL, centralAuthURL, ssoClientID, ssoNonce, ssoState); + network->setAuthenticationRequired(issuerURL, centralAuthURL, ssoClientID, ssoNonce, ssoState); } } } diff --git a/node/Network.cpp b/node/Network.cpp index 0d9261e3b..b50337794 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -1561,14 +1561,14 @@ Membership &Network::_membership(const Address &a) return _memberships[a]; } -void Network::setAuthenticationRequired(const char* authEndpoint, const char* centralEndpoint, const char* clientID, const char* nonce, const char* state) +void Network::setAuthenticationRequired(const char* issuerURL, const char* centralEndpoint, const char* clientID, const char* nonce, const char* state) { Mutex::Lock _l(_lock); _netconfFailure = NETCONF_FAILURE_AUTHENTICATION_REQUIRED; _config.ssoEnabled = true; _config.ssoVersion = 1; - Utils::scopy(_config.authenticationURL, sizeof(_config.authenticationURL), authEndpoint); + Utils::scopy(_config.issuerURL, sizeof(_config.issuerURL), issuerURL); Utils::scopy(_config.centralAuthURL, sizeof(_config.centralAuthURL), centralEndpoint); Utils::scopy(_config.ssoClientID, sizeof(_config.ssoClientID), clientID); Utils::scopy(_config.ssoNonce, sizeof(_config.ssoNonce), nonce); diff --git a/node/Network.hpp b/node/Network.hpp index 1aa64cf43..680b54473 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -240,7 +240,7 @@ public: * set netconf failure to 'authentication required' along with info needed * for sso full flow authentication. */ - void setAuthenticationRequired(const char* authEndpoint, const char* centralEndpoint, const char* clientID, const char* nonce, const char* state); + void setAuthenticationRequired(const char* issuerURL, const char* centralEndpoint, const char* clientID, const char* nonce, const char* state); /** * Causes this network to request an updated configuration from its master node now diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index ca1cf5d12..2b76b6730 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -196,7 +196,9 @@ bool NetworkConfig::toDictionary(Dictionary &d,b if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_VERSION, this->ssoVersion)) return false; if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_SSO_ENABLED, this->ssoEnabled)) return false; if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL, this->authenticationURL)) return false; - if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_CENTRAL_ENDPOINT_URL, this->centralAuthURL)) return false; + if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_ISSUER_URL, this->issuerURL)) return false; + if (! d.add(ZT_NETWORKCONFIG_DICT_KEY_CENTRAL_ENDPOINT_URL, this->centralAuthURL)) + return false; if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_NONCE, this->ssoNonce)) return false; if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_STATE, this->ssoState)) return false; if (!d.add(ZT_NETWORKCONFIG_DICT_KEY_CLIENT_ID, this->ssoClientID)) return false; @@ -408,6 +410,9 @@ bool NetworkConfig::fromDictionary(const DictionaryauthenticationURL, (unsigned int)sizeof(this->authenticationURL)) > 0) { this->authenticationURL[sizeof(this->authenticationURL) - 1] = 0; } + if (d.get(ZT_NETWORKCONFIG_DICT_KEY_ISSUER_URL, this->issuerURL, (unsigned int)sizeof(this->issuerURL)) > 0) { + this->issuerURL[sizeof(this->issuerURL) - 1] = 0; + } if (d.get(ZT_NETWORKCONFIG_DICT_KEY_CENTRAL_ENDPOINT_URL, this->centralAuthURL, (unsigned int)sizeof(this->centralAuthURL)) > 0) { this->centralAuthURL[sizeof(this->centralAuthURL) - 1] = 0; } diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index 8b18e150d..8c08838c5 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -186,6 +186,8 @@ namespace ZeroTier { #define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_URL "aurl" // authentication expiry #define ZT_NETWORKCONFIG_DICT_KEY_AUTHENTICATION_EXPIRY_TIME "aexpt" +// oidc issuer URL +#define ZT_NETWORKCONFIG_DICT_KEY_ISSUER_URL "iurl" // central endpoint #define ZT_NETWORKCONFIG_DICT_KEY_CENTRAL_ENDPOINT_URL "ssoce" // nonce @@ -201,6 +203,8 @@ namespace ZeroTier { #define ZT_AUTHINFO_DICT_KEY_VERSION "aV" // authenticaiton URL #define ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL "aU" +// issuer URL +#define ZT_AUTHINFO_DICT_KEY_ISSUER_URL "iU" // Central endpoint URL #define ZT_AUTHINFO_DICT_KEY_CENTRAL_ENDPOINT_URL "aCU" // Nonce @@ -268,6 +272,7 @@ public: ssoEnabled(false), authenticationURL(), authenticationExpiryTime(0), + issuerURL(), centralAuthURL(), ssoNonce(), ssoState(), @@ -280,6 +285,7 @@ public: 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)); @@ -670,6 +676,11 @@ public: */ uint64_t authenticationExpiryTime; + /** + * OIDC issuer URL + */ + char issuerURL[2048]; + /** * central base URL. */ From 0875fb5fe024a5773abab470119646d06fd1fcb0 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 11 Nov 2021 16:29:14 -0800 Subject: [PATCH 056/144] have this make an rlib too for the future --- zeroidc/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeroidc/Cargo.toml b/zeroidc/Cargo.toml index 814a497c5..ba0f134eb 100644 --- a/zeroidc/Cargo.toml +++ b/zeroidc/Cargo.toml @@ -5,7 +5,7 @@ edition = "2018" build = "build.rs" [lib] -crate-type = ["staticlib"] +crate-type = ["staticlib","rlib"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 1ef385b68578ddf62f8bb443d10691a47771bd07 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Nov 2021 16:44:54 -0500 Subject: [PATCH 057/144] Spinlock removed, causes long standing issues on single core machines. --- node/Mutex.hpp | 67 +------------------------------------------------- 1 file changed, 1 insertion(+), 66 deletions(-) diff --git a/node/Mutex.hpp b/node/Mutex.hpp index 0cbe27bd8..13e1b0aae 100644 --- a/node/Mutex.hpp +++ b/node/Mutex.hpp @@ -24,69 +24,6 @@ namespace ZeroTier { -#if defined(__GNUC__) && (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) || defined(__AMD64__) || defined(_M_X64)) - -// Inline ticket lock on x64 systems with GCC and CLANG (Mac, Linux) -- this is really fast as long as locking durations are very short -class Mutex -{ -public: - Mutex() : - nextTicket(0), - nowServing(0) - { - } - - inline void lock() const - { - const uint16_t myTicket = __sync_fetch_and_add(&(const_cast(this)->nextTicket),1); - while (nowServing != myTicket) { - __asm__ __volatile__("rep;nop"::); - __asm__ __volatile__("":::"memory"); - } - } - - inline void unlock() const - { - ++(const_cast(this)->nowServing); - } - - /** - * Uses C++ contexts and constructor/destructor to lock/unlock automatically - */ - class Lock - { - public: - Lock(Mutex &m) : - _m(&m) - { - m.lock(); - } - - Lock(const Mutex &m) : - _m(const_cast(&m)) - { - _m->lock(); - } - - ~Lock() - { - _m->unlock(); - } - - private: - Mutex *const _m; - }; - -private: - Mutex(const Mutex &) {} - const Mutex &operator=(const Mutex &) { return *this; } - - uint16_t nextTicket; - uint16_t nowServing; -}; - -#else - // libpthread based mutex lock class Mutex { @@ -142,11 +79,9 @@ private: pthread_mutex_t _mh; }; -#endif - } // namespace ZeroTier -#endif // Apple / Linux +#endif #ifdef __WINDOWS__ From ea4d7ae92f6f818a1134a00f3942fd0461f2e57a Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 12:16:22 -0500 Subject: [PATCH 058/144] Add spinlock removal to release notes. --- RELEASE-NOTES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index ffe03aea3..c2dd26634 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,6 +1,10 @@ ZeroTier Release Notes ====== +# -- -- Version 1.8.3 + + * Remove problematic spinlock, which was only used on x86_64 anyway. Just use pthread always. + # 2021-11-08 -- Version 1.8.2 * Fix multicast on linux. From c890f1762a8632ac18b1b0781de1ceaa4077d782 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 14:09:52 -0500 Subject: [PATCH 059/144] This code is obsolete but remove vfork anyway. --- osdep/MacKextEthernetTap.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/osdep/MacKextEthernetTap.cpp b/osdep/MacKextEthernetTap.cpp index 836ac0360..fce0c121d 100644 --- a/osdep/MacKextEthernetTap.cpp +++ b/osdep/MacKextEthernetTap.cpp @@ -330,7 +330,7 @@ MacKextEthernetTap::MacKextEthernetTap( Mutex::Lock _gl(globalTapCreateLock); if (::stat("/dev/zt0",&stattmp)) { - long kextpid = (long)vfork(); + long kextpid = (long)fork(); if (kextpid == 0) { ::chdir(homePath); OSUtils::redirectUnixOutputs("/dev/null",(const char *)0); @@ -405,7 +405,7 @@ MacKextEthernetTap::MacKextEthernetTap( OSUtils::ztsnprintf(ethaddr,sizeof(ethaddr),"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",(int)mac[0],(int)mac[1],(int)mac[2],(int)mac[3],(int)mac[4],(int)mac[5]); OSUtils::ztsnprintf(mtustr,sizeof(mtustr),"%u",_mtu); OSUtils::ztsnprintf(metstr,sizeof(metstr),"%u",_metric); - long cpid = (long)vfork(); + long cpid = (long)fork(); if (cpid == 0) { ::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"lladdr",ethaddr,"mtu",mtustr,"metric",metstr,"up",(const char *)0); ::_exit(-1); @@ -459,7 +459,7 @@ MacKextEthernetTap::~MacKextEthernetTap() char tmp[16384]; sprintf(tmp,"%s/%s",_homePath.c_str(),"tap.kext"); - long kextpid = (long)vfork(); + long kextpid = (long)fork(); if (kextpid == 0) { OSUtils::redirectUnixOutputs("/dev/null",(const char *)0); ::execl("/sbin/kextunload","/sbin/kextunload",tmp,(const char *)0); @@ -488,7 +488,7 @@ bool MacKextEthernetTap::addIp(const InetAddress &ip) if (!ip) return false; - long cpid = (long)vfork(); + long cpid = (long)fork(); if (cpid == 0) { char tmp[128]; ::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),(ip.ss_family == AF_INET6) ? "inet6" : "inet",ip.toString(tmp),"alias",(const char *)0); @@ -509,7 +509,7 @@ bool MacKextEthernetTap::removeIp(const InetAddress &ip) std::vector allIps(ips()); for(std::vector::iterator i(allIps.begin());i!=allIps.end();++i) { if (*i == ip) { - long cpid = (long)vfork(); + long cpid = (long)fork(); if (cpid == 0) { char tmp[128]; execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),(ip.ss_family == AF_INET6) ? "inet6" : "inet",ip.toIpString(tmp),"-alias",(const char *)0); @@ -626,7 +626,7 @@ void MacKextEthernetTap::setMtu(unsigned int mtu) { if (mtu != _mtu) { _mtu = mtu; - long cpid = (long)vfork(); + long cpid = (long)fork(); if (cpid == 0) { char tmp[64]; OSUtils::ztsnprintf(tmp,sizeof(tmp),"%u",mtu); From 0e798222a71e6e661d7ac3082428653e3b814457 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 17:17:05 -0500 Subject: [PATCH 060/144] Fix FD leak on MacOS. --- osdep/Binder.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/osdep/Binder.hpp b/osdep/Binder.hpp index 3744ee8a6..f55fa5c8d 100644 --- a/osdep/Binder.hpp +++ b/osdep/Binder.hpp @@ -336,6 +336,7 @@ class Binder { // if this is a temporary IPv6 address, skip to the next address if (flags & IN6_IFF_TEMPORARY) { + close(infoSock); char buf[64]; #ifdef ZT_TRACE fprintf(stderr, "skip binding to temporary IPv6 address: %s\n", ip.toIpString(buf)); From a2a7122da926de5618f8feecba02582e97b85218 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 17:18:04 -0500 Subject: [PATCH 061/144] release notes --- RELEASE-NOTES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index c2dd26634..a74a4f4da 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,9 +1,10 @@ ZeroTier Release Notes ====== -# -- -- Version 1.8.3 +# 2021-11-15 -- -- Version 1.8.3 * Remove problematic spinlock, which was only used on x86_64 anyway. Just use pthread always. + * Fix fd leak on MacOS that caused non-responsiveness after some time. # 2021-11-08 -- Version 1.8.2 From bee137c6d9acfdde59b1160c2cf8af1309226a9a Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 17:27:16 -0500 Subject: [PATCH 062/144] Set shell for ZeroTier service user account on Debian to /usr/sbin/nologin for GitHub issue #1492 --- debian/postinst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/postinst b/debian/postinst index 2e673aef9..b6e7471c4 100644 --- a/debian/postinst +++ b/debian/postinst @@ -3,7 +3,7 @@ case "$1" in configure) if ! id zerotier-one >>/dev/null 2>&1; then - useradd --system --user-group --home-dir /var/lib/zerotier-one --no-create-home zerotier-one + useradd --system --user-group --home-dir /var/lib/zerotier-one --shell /usr/sbin/nologin --no-create-home zerotier-one fi ;; esac From 65549cb0da18d208e40601dc13fcd01b9ec71ec2 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 18:27:14 -0500 Subject: [PATCH 063/144] Fix the FD leak fix, and release notes. --- RELEASE-NOTES.md | 1 + osdep/Binder.hpp | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index a74a4f4da..062bafede 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -5,6 +5,7 @@ ZeroTier Release Notes * Remove problematic spinlock, which was only used on x86_64 anyway. Just use pthread always. * Fix fd leak on MacOS that caused non-responsiveness after some time. + * Fix Debian install scripts to set /usr/sbin/nologin as shell on service user. # 2021-11-08 -- Version 1.8.2 diff --git a/osdep/Binder.hpp b/osdep/Binder.hpp index f55fa5c8d..0c7ec4465 100644 --- a/osdep/Binder.hpp +++ b/osdep/Binder.hpp @@ -336,7 +336,6 @@ class Binder { // if this is a temporary IPv6 address, skip to the next address if (flags & IN6_IFF_TEMPORARY) { - close(infoSock); char buf[64]; #ifdef ZT_TRACE fprintf(stderr, "skip binding to temporary IPv6 address: %s\n", ip.toIpString(buf)); @@ -369,7 +368,7 @@ class Binder { else { interfacesEnumerated = false; } -#if defined(__unix__) && !defined(__LINUX__) +#if (defined(__unix__) || defined(__APPLE__)) && !defined(__LINUX__) close(infoSock); #endif } From fabfb10b973ca47d65df999962233698843731e6 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 19:48:07 -0500 Subject: [PATCH 064/144] Remove managed routes in destructor (regression fix). --- osdep/ManagedRoute.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp index 4371edbea..904917c25 100644 --- a/osdep/ManagedRoute.cpp +++ b/osdep/ManagedRoute.cpp @@ -405,7 +405,9 @@ ManagedRoute::ManagedRoute(const InetAddress &target,const InetAddress &via,cons } ManagedRoute::~ManagedRoute() -{} +{ + this->remove(); +} /* Linux NOTE: for default route override, some Linux distributions will * require a change to the rp_filter parameter. A value of '1' will prevent From 8b77a93d60c96d2deff2ae2b3ec68e3638daa83a Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 19:51:56 -0500 Subject: [PATCH 065/144] release notes --- RELEASE-NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 062bafede..f0be80366 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -6,6 +6,7 @@ ZeroTier Release Notes * Remove problematic spinlock, which was only used on x86_64 anyway. Just use pthread always. * Fix fd leak on MacOS that caused non-responsiveness after some time. * Fix Debian install scripts to set /usr/sbin/nologin as shell on service user. + * Fix regression that could prevent managed routes from being deleted. # 2021-11-08 -- Version 1.8.2 From dfac6303bcdb4ef0b02157249f5212cbc9ca7b32 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 15 Nov 2021 19:55:58 -0500 Subject: [PATCH 066/144] Version bump (all but Windows) and limit .pkg to MacOS 10.13 --- RELEASE-NOTES.md | 1 + debian/changelog | 6 ++++++ ext/installfiles/mac/ZeroTier One.pkgproj | 2 +- version.h | 2 +- zerotier-one.spec | 5 ++++- 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index f0be80366..3af53e198 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -7,6 +7,7 @@ ZeroTier Release Notes * Fix fd leak on MacOS that caused non-responsiveness after some time. * Fix Debian install scripts to set /usr/sbin/nologin as shell on service user. * Fix regression that could prevent managed routes from being deleted. + * DesktopUI: Remove NSDate:now() call, may help with older MacOS. # 2021-11-08 -- Version 1.8.2 diff --git a/debian/changelog b/debian/changelog index a6a24d9b0..75ee9674a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +zerotier-one (1.8.3) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Mon, 15 Nov 2021 01:00:00 -0700 + zerotier-one (1.8.2) unstable; urgency=medium * See RELEASE-NOTES.md for release notes. diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index 55961ddc7..4a46b4add 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -701,7 +701,7 @@ USE_HFS+_COMPRESSION VERSION - 1.8.2 + 1.8.3 TYPE 0 diff --git a/version.h b/version.h index bb74e0fed..eea8cfa9a 100644 --- a/version.h +++ b/version.h @@ -27,7 +27,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 2 +#define ZEROTIER_ONE_VERSION_REVISION 3 /** * Build version diff --git a/zerotier-one.spec b/zerotier-one.spec index d6ddb83b2..17e0b0ba4 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -1,5 +1,5 @@ Name: zerotier-one -Version: 1.8.2 +Version: 1.8.3 Release: 1%{?dist} Summary: ZeroTier network virtualization service @@ -152,6 +152,9 @@ esac %endif %changelog +* Mon Nov 15 2021 Adam Ierymenko - 1.8.3 +- see https://github.com/zerotier/ZeroTierOne for release notes + * Mon Nov 08 2021 Adam Ierymenko - 1.8.2 - see https://github.com/zerotier/ZeroTierOne for release notes From 1a7fb83882262111b8fc2fe2b251767f4f9ad237 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 16 Nov 2021 11:23:57 -0500 Subject: [PATCH 067/144] Release notes. --- RELEASE-NOTES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 3af53e198..4b38cb1fc 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -7,7 +7,7 @@ ZeroTier Release Notes * Fix fd leak on MacOS that caused non-responsiveness after some time. * Fix Debian install scripts to set /usr/sbin/nologin as shell on service user. * Fix regression that could prevent managed routes from being deleted. - * DesktopUI: Remove NSDate:now() call, may help with older MacOS. + * DesktopUI: Remove NSDate:now() call, now works on MacOS 10.13 or newer! # 2021-11-08 -- Version 1.8.2 From 3e3d46e72ec761cafa151f3a7fd5e46735e6c8a7 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 16 Nov 2021 12:04:10 -0500 Subject: [PATCH 068/144] Windows 1.8.3 --- ext/installfiles/windows/ZeroTier One.aip | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index 4542e8c2e..ed6efc28a 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -26,10 +26,10 @@ - + - + @@ -64,7 +64,7 @@ - + @@ -510,7 +510,7 @@ - + From 7f4cc1a239d75f959c451f243d08ecb2598b0e26 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 16 Nov 2021 13:27:27 -0500 Subject: [PATCH 069/144] VERSION 1.8.3 From 91e9b736dd5513a1326325db4d57125cbf9e1647 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 18 Nov 2021 10:32:25 -0800 Subject: [PATCH 070/144] make service objs dependent on zeroidc --- make-mac.mk | 2 +- node/Network.cpp | 28 +--------------------------- node/Network.hpp | 6 ------ zeroidc/Cargo.toml | 1 + 4 files changed, 3 insertions(+), 34 deletions(-) diff --git a/make-mac.mk b/make-mac.mk index 0e4657254..784c167e7 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -128,7 +128,7 @@ zerotier-idtool: one zerotier-cli: one -$(CORE_OBJS): zeroidc +$(ONE_OBJS): zeroidc libzerotiercore.a: $(CORE_OBJS) ar rcs libzerotiercore.a $(CORE_OBJS) diff --git a/node/Network.cpp b/node/Network.cpp index b50337794..357cf1432 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -32,7 +32,6 @@ #include "Node.hpp" #include "Peer.hpp" #include "Trace.hpp" -#include "zeroidc.h" #include @@ -551,8 +550,7 @@ Network::Network(const RuntimeEnvironment *renv,void *tPtr,uint64_t nwid,void *u _lastConfigUpdate(0), _destroyed(false), _netconfFailure(NETCONF_FAILURE_NONE), - _portError(0), - _idc(nullptr) + _portError(0) { for(int i=0;inode->configureVirtualNetworkPort(tPtr,_id,&_uPtr,ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP,&ctmp); _portInitialized = true; } - - if (nconf->ssoEnabled) { - if (_config.ssoVersion == 1) { - // start sso handling for network - } - } } Network::~Network() @@ -606,12 +598,6 @@ Network::~Network() ZT_VirtualNetworkConfig ctmp; _externalConfig(&ctmp); - if (_idc) { - zeroidc::zeroidc_stop(_idc); - zeroidc::zeroidc_delete(_idc); - _idc = nullptr; - } - if (_destroyed) { // This is done in Node::leave() so we can pass tPtr properly //RR->node->configureVirtualNetworkPort((void *)0,_id,&_uPtr,ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY,&ctmp); @@ -1573,18 +1559,6 @@ void Network::setAuthenticationRequired(const char* issuerURL, const char* centr Utils::scopy(_config.ssoClientID, sizeof(_config.ssoClientID), clientID); Utils::scopy(_config.ssoNonce, sizeof(_config.ssoNonce), nonce); Utils::scopy(_config.ssoState, sizeof(_config.ssoState), state); - - // TODO: propaagte to full flow module - if (!this->_idc) { - this->_idc = zeroidc::zeroidc_new(_config.authenticationURL, _config.ssoClientID, _config.centralAuthURL, 9993); - zeroidc::zeroidc_start(this->_idc); - } - - zeroidc::AuthInfo *info = zeroidc::zeroidc_get_auth_info(this->_idc, _config.ssoState, _config.ssoNonce); - const char* url = zeroidc::zeroidc_get_auth_url(info); - if (url != NULL) { - fprintf(stderr, "full auth URL: %s\n", url); - } } } // namespace ZeroTier diff --git a/node/Network.hpp b/node/Network.hpp index 680b54473..10b48f1f9 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -41,10 +41,6 @@ #define ZT_NETWORK_MAX_INCOMING_UPDATES 3 #define ZT_NETWORK_MAX_UPDATE_CHUNKS ((ZT_NETWORKCONFIG_DICT_CAPACITY / 1024) + 1) -namespace zeroidc { -typedef struct ZeroIDC ZeroIDC; -} - namespace ZeroTier { class RuntimeEnvironment; @@ -468,8 +464,6 @@ private: Mutex _lock; AtomicCounter __refCount; - - zeroidc::ZeroIDC *_idc; }; } // namespace ZeroTier diff --git a/zeroidc/Cargo.toml b/zeroidc/Cargo.toml index ba0f134eb..41ac73029 100644 --- a/zeroidc/Cargo.toml +++ b/zeroidc/Cargo.toml @@ -3,6 +3,7 @@ name = "zeroidc" version = "0.1.0" edition = "2018" build = "build.rs" +publish = false [lib] crate-type = ["staticlib","rlib"] From 2e356613ecbfbd1cd2dcb118490cee65e62261a5 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 18 Nov 2021 12:39:55 -0800 Subject: [PATCH 071/144] Refactor NetworkState into object with accessor methods --- service/OneService.cpp | 249 ++++++++++++++++++++++++++++------------- 1 file changed, 169 insertions(+), 80 deletions(-) diff --git a/service/OneService.cpp b/service/OneService.cpp index 255bad21e..309784979 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -53,6 +53,8 @@ #include "OneService.hpp" #include "SoftwareUpdater.hpp" +#include + #ifdef __WINDOWS__ #include #include @@ -526,31 +528,117 @@ public: volatile int64_t _nextBackgroundTaskDeadline; // Configured networks - struct NetworkState + class NetworkState { - NetworkState() : - tap((EthernetTap *)0) + public: + NetworkState() + : _tap((EthernetTap *)0) + , _idc(nullptr) { // Real defaults are in network 'up' code in network event handler - settings.allowManaged = true; - settings.allowGlobal = false; - settings.allowDefault = false; - settings.allowDNS = false; - memset(&config, 0, sizeof(ZT_VirtualNetworkConfig)); + _settings.allowManaged = true; + _settings.allowGlobal = false; + _settings.allowDefault = false; + _settings.allowDNS = false; + memset(&_config, 0, sizeof(ZT_VirtualNetworkConfig)); } ~NetworkState() { - this->managedRoutes.clear(); - this->tap.reset(); + this->_managedRoutes.clear(); + this->_tap.reset(); + + if (_idc) { + zeroidc::zeroidc_delete(_idc); + _idc = nullptr; + } } - std::shared_ptr tap; - ZT_VirtualNetworkConfig config; // memcpy() of raw config from core - std::vector managedIps; - std::map< InetAddress, SharedPtr > managedRoutes; - NetworkSettings settings; + void setTap(std::shared_ptr tap) { + this->_tap = tap; + } + + std::shared_ptr tap() const { + return _tap; + } + + NetworkSettings settings() const { + return _settings; + } + + void setSettings(const NetworkSettings &settings) { + _settings = settings; + } + + void setAllowManaged(bool allow) { + _settings.allowManaged = allow; + } + + bool allowManaged() const { + return _settings.allowManaged; + } + + void setAllowGlobal(bool allow) { + _settings.allowGlobal = allow; + } + + bool allowGlobal() const { + return _settings.allowGlobal; + } + + void setAllowDefault(bool allow) { + _settings.allowDefault = allow; + } + + bool allowDefault() const { + return _settings.allowDefault; + } + + void setAllowDNS(bool allow) { + _settings.allowDNS = allow; + } + + bool allowDNS() const { + return _settings.allowDNS; + } + + std::vector allowManagedWhitelist() const { + return _settings.allowManagedWhitelist; + } + + void addToAllowManagedWhiteList(const InetAddress& addr) { + _settings.allowManagedWhitelist.push_back(addr); + } + + const ZT_VirtualNetworkConfig& config() { + return _config; + } + + void setConfig(const ZT_VirtualNetworkConfig *nwc) { + memcpy(&_config, nwc, sizeof(ZT_VirtualNetworkConfig)); + } + + std::vector& managedIps() { + return _managedIps; + } + + void setManagedIps(const std::vector &managedIps) { + _managedIps = managedIps; + } + + std::map< InetAddress, SharedPtr >& managedRoutes() { + return _managedRoutes; + } + + private: + std::shared_ptr _tap; + ZT_VirtualNetworkConfig _config; // memcpy() of raw config from core + std::vector _managedIps; + std::map< InetAddress, SharedPtr > _managedRoutes; + NetworkSettings _settings; + zeroidc::ZeroIDC *_idc; }; + std::map _nets; Mutex _nets_m; @@ -888,7 +976,7 @@ public: { Mutex::Lock _l(_nets_m); for(std::map::iterator n(_nets.begin());n!=_nets.end();++n) { - if (n->second.tap) + if (n->second.tap()) syncManagedStuff(n->second,false,true,false); } } @@ -913,9 +1001,9 @@ public: Mutex::Lock _l(_nets_m); mgChanges.reserve(_nets.size() + 1); for(std::map::const_iterator n(_nets.begin());n!=_nets.end();++n) { - if (n->second.tap) { + if (n->second.tap()) { mgChanges.push_back(std::pair< uint64_t,std::pair< std::vector,std::vector > >(n->first,std::pair< std::vector,std::vector >())); - n->second.tap->scanMulticastGroups(mgChanges.back().second.first,mgChanges.back().second.second); + n->second.tap()->scanMulticastGroups(mgChanges.back().second.first,mgChanges.back().second.second); } } } @@ -1114,8 +1202,8 @@ public: { Mutex::Lock _l(_nets_m); std::map::const_iterator n(_nets.find(nwid)); - if ((n != _nets.end())&&(n->second.tap)) - return n->second.tap->deviceName(); + if ((n != _nets.end())&&(n->second.tap())) + return n->second.tap()->deviceName(); else return std::string(); } @@ -1157,7 +1245,7 @@ public: std::map::const_iterator n(_nets.find(nwid)); if (n == _nets.end()) return false; - settings = n->second.settings; + settings = n->second.settings(); return true; } @@ -1168,20 +1256,20 @@ public: std::map::iterator n(_nets.find(nwid)); if (n == _nets.end()) return false; - n->second.settings = settings; + n->second.setSettings(settings); char nlcpath[4096]; OSUtils::ztsnprintf(nlcpath,sizeof(nlcpath),"%s" ZT_PATH_SEPARATOR_S "%.16llx.local.conf",_networksPath.c_str(),nwid); FILE *out = fopen(nlcpath,"w"); if (out) { - fprintf(out,"allowManaged=%d\n",(int)n->second.settings.allowManaged); - fprintf(out,"allowGlobal=%d\n",(int)n->second.settings.allowGlobal); - fprintf(out,"allowDefault=%d\n",(int)n->second.settings.allowDefault); - fprintf(out,"allowDNS=%d\n",(int)n->second.settings.allowDNS); + fprintf(out,"allowManaged=%d\n",(int)n->second.allowManaged()); + fprintf(out,"allowGlobal=%d\n",(int)n->second.allowGlobal()); + fprintf(out,"allowDefault=%d\n",(int)n->second.allowDefault()); + fprintf(out,"allowDNS=%d\n",(int)n->second.allowDNS()); fclose(out); } - if (n->second.tap) + if (n->second.tap()) syncManagedStuff(n->second,true,true,true); return true; @@ -1969,12 +2057,12 @@ public: // Checks if a managed IP or route target is allowed bool checkIfManagedIsAllowed(const NetworkState &n,const InetAddress &target) { - if (!n.settings.allowManaged) + if (!n.allowManaged()) return false; - if (!n.settings.allowManagedWhitelist.empty()) { + if (!n.allowManagedWhitelist().empty()) { bool allowed = false; - for (InetAddress addr : n.settings.allowManagedWhitelist) { + for (InetAddress addr : n.allowManagedWhitelist()) { if (addr.containsAddress(target) && addr.netmaskBits() <= target.netmaskBits()) { allowed = true; break; @@ -1984,7 +2072,7 @@ public: } if (target.isDefaultRoute()) - return n.settings.allowDefault; + return n.allowDefault(); switch(target.ipScope()) { case InetAddress::IP_SCOPE_NONE: case InetAddress::IP_SCOPE_MULTICAST: @@ -1992,7 +2080,7 @@ public: case InetAddress::IP_SCOPE_LINK_LOCAL: return false; case InetAddress::IP_SCOPE_GLOBAL: - return n.settings.allowGlobal; + return n.allowGlobal(); default: return true; } @@ -2016,18 +2104,18 @@ public: // assumes _nets_m is locked if (syncIps) { std::vector newManagedIps; - newManagedIps.reserve(n.config.assignedAddressCount); - for(unsigned int i=0;i(&(n.config.assignedAddresses[i])); + newManagedIps.reserve(n.config().assignedAddressCount); + for(unsigned int i=0;i(&(n.config().assignedAddresses[i])); if (checkIfManagedIsAllowed(n,*ii)) newManagedIps.push_back(*ii); } std::sort(newManagedIps.begin(),newManagedIps.end()); newManagedIps.erase(std::unique(newManagedIps.begin(),newManagedIps.end()),newManagedIps.end()); - for(std::vector::iterator ip(n.managedIps.begin());ip!=n.managedIps.end();++ip) { + for(std::vector::iterator ip(n.managedIps().begin());ip!=n.managedIps().end();++ip) { if (std::find(newManagedIps.begin(),newManagedIps.end(),*ip) == newManagedIps.end()) { - if (!n.tap->removeIp(*ip)) + if (!n.tap()->removeIp(*ip)) fprintf(stderr,"ERROR: unable to remove ip address %s" ZT_EOL_S, ip->toString(ipbuf)); } } @@ -2036,13 +2124,13 @@ public: fprintf(stderr,"ERROR: unable to add ip addresses to ifcfg" ZT_EOL_S); #else for(std::vector::iterator ip(newManagedIps.begin());ip!=newManagedIps.end();++ip) { - if (std::find(n.managedIps.begin(),n.managedIps.end(),*ip) == n.managedIps.end()) { - if (!n.tap->addIp(*ip)) + if (std::find(n.managedIps().begin(),n.managedIps().end(),*ip) == n.managedIps().end()) { + if (!n.tap()->addIp(*ip)) fprintf(stderr,"ERROR: unable to add ip address %s" ZT_EOL_S, ip->toString(ipbuf)); } } #endif - n.managedIps.swap(newManagedIps); + n.setManagedIps(newManagedIps); } if (syncRoutes) { @@ -2052,18 +2140,18 @@ public: OSUtils::ztsnprintf(tapdevbuf,sizeof(tapdevbuf),"%.16llx",(unsigned long long)((WindowsEthernetTap *)(n.tap.get()))->luid().Value); std::string tapdev(tapdevbuf); #else - std::string tapdev(n.tap->deviceName()); + std::string tapdev(n.tap()->deviceName()); #endif - std::vector tapIps(n.tap->ips()); + std::vector tapIps(n.tap()->ips()); std::set myIps(tapIps.begin(), tapIps.end()); - for(unsigned int i=0;i haveRouteTargets; - for(unsigned int i=0;i(&(n.config.routes[i].target)); - const InetAddress *const via = reinterpret_cast(&(n.config.routes[i].via)); + for(unsigned int i=0;i(&(n.config().routes[i].target)); + const InetAddress *const via = reinterpret_cast(&(n.config().routes[i].via)); // Make sure we are allowed to set this managed route, and that 'via' is not our IP. The latter // avoids setting routes via the router on the router. @@ -2100,48 +2188,48 @@ public: haveRouteTargets.insert(*target); #ifndef ZT_SDK - SharedPtr &mr = n.managedRoutes[*target]; + SharedPtr &mr = n.managedRoutes()[*target]; if (!mr) mr.set(new ManagedRoute(*target, *via, *src, tapdev.c_str())); #endif } - for(std::map< InetAddress, SharedPtr >::iterator r(n.managedRoutes.begin());r!=n.managedRoutes.end();) { + for(std::map< InetAddress, SharedPtr >::iterator r(n.managedRoutes().begin());r!=n.managedRoutes().end();) { if (haveRouteTargets.find(r->first) == haveRouteTargets.end()) - n.managedRoutes.erase(r++); + n.managedRoutes().erase(r++); else ++r; } // Sync device-local managed routes first, then indirect results. That way // we don't get destination unreachable for routes that are via things // that do not yet have routes in the system. - for(std::map< InetAddress, SharedPtr >::iterator r(n.managedRoutes.begin());r!=n.managedRoutes.end();++r) { + for(std::map< InetAddress, SharedPtr >::iterator r(n.managedRoutes().begin());r!=n.managedRoutes().end();++r) { if (!r->second->via()) r->second->sync(); } - for(std::map< InetAddress, SharedPtr >::iterator r(n.managedRoutes.begin());r!=n.managedRoutes.end();++r) { + for(std::map< InetAddress, SharedPtr >::iterator r(n.managedRoutes().begin());r!=n.managedRoutes().end();++r) { if (r->second->via()) r->second->sync(); } } if (syncDns) { - if (n.settings.allowDNS) { - if (strlen(n.config.dns.domain) != 0) { + if (n.allowDNS()) { + if (strlen(n.config().dns.domain) != 0) { std::vector servers; for (int j = 0; j < ZT_MAX_DNS_SERVERS; ++j) { - InetAddress a(n.config.dns.server_addr[j]); + InetAddress a(n.config().dns.server_addr[j]); if (a.isV4() || a.isV6()) { servers.push_back(a); } } - n.tap->setDns(n.config.dns.domain, servers); + n.tap()->setDns(n.config().dns.domain, servers); } } else { #ifdef __APPLE__ - MacDNSHelper::removeDNS(n.config.nwid); + MacDNSHelper::removeDNS(n.config().nwid); #elif defined(__WINDOWS__) - WinDNSHelper::removeDNS(n.config.nwid); + WinDNSHelper::removeDNS(n.config().nwid); #endif } @@ -2414,12 +2502,12 @@ public: switch(op) { case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP: - if (!n.tap) { + if (!n.tap()) { try { char friendlyName[128]; OSUtils::ztsnprintf(friendlyName,sizeof(friendlyName),"ZeroTier One [%.16llx]",nwid); - n.tap = EthernetTap::newInstance( + n.setTap(EthernetTap::newInstance( nullptr, _homePath.c_str(), MAC(nwc->mac), @@ -2428,7 +2516,7 @@ public: nwid, friendlyName, StapFrameHandler, - (void *)this); + (void *)this)); *nuptr = (void *)&n; char nlcpath[256]; @@ -2442,28 +2530,28 @@ public: std::string addresses (allowManaged.begin(), allowManaged.size()); if (allowManaged.size() <= 5) { // untidy parsing for backward compatibility if (allowManaged[0] == '1' || allowManaged[0] == 't' || allowManaged[0] == 'T') { - n.settings.allowManaged = true; + n.setAllowManaged(true); } else { - n.settings.allowManaged = false; + n.setAllowManaged(false); } } else { // this should be a list of IP addresses - n.settings.allowManaged = true; + n.setAllowManaged(true); size_t pos = 0; while (true) { size_t nextPos = addresses.find(',', pos); std::string address = addresses.substr(pos, (nextPos == std::string::npos ? addresses.size() : nextPos) - pos); - n.settings.allowManagedWhitelist.push_back(InetAddress(address.c_str())); + n.addToAllowManagedWhiteList(InetAddress(address.c_str())); if (nextPos == std::string::npos) break; pos = nextPos + 1; } } } else { - n.settings.allowManaged = true; + n.setAllowManaged(true); } - n.settings.allowGlobal = nc.getB("allowGlobal", false); - n.settings.allowDefault = nc.getB("allowDefault", false); - n.settings.allowDNS = nc.getB("allowDNS", false); + n.setAllowGlobal(nc.getB("allowGlobal", false)); + n.setAllowDefault(nc.getB("allowDefault", false)); + n.setAllowDNS(nc.getB("allowDNS", false)); } } catch (std::exception &exc) { #ifdef __WINDOWS__ @@ -2484,8 +2572,9 @@ public: // After setting up tap, fall through to CONFIG_UPDATE since we also want to do this... case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE: - memcpy(&(n.config),nwc,sizeof(ZT_VirtualNetworkConfig)); - if (n.tap) { // sanity check + n.setConfig(nwc); + + if (n.tap()) { // sanity check #if defined(__WINDOWS__) && !defined(ZT_SDK) // wait for up to 5 seconds for the WindowsEthernetTap to actually be initialized // @@ -2497,7 +2586,7 @@ public: } #endif syncManagedStuff(n,true,true,true); - n.tap->setMtu(nwc->mtu); + n.tap()->setMtu(nwc->mtu); } else { _nets.erase(nwid); return -999; // tap init failed @@ -2506,12 +2595,12 @@ public: case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN: case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY: - if (n.tap) { // sanity check + if (n.tap()) { // sanity check #if defined(__WINDOWS__) && !defined(ZT_SDK) std::string winInstanceId(((WindowsEthernetTap *)(n.tap.get()))->instanceId()); #endif *nuptr = (void *)0; - n.tap.reset(); + n.tap().reset(); _nets.erase(nwid); #if defined(__WINDOWS__) && !defined(ZT_SDK) if ((op == ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY)&&(winInstanceId.length() > 0)) @@ -2926,9 +3015,9 @@ public: inline void nodeVirtualNetworkFrameFunction(uint64_t nwid,void **nuptr,uint64_t sourceMac,uint64_t destMac,unsigned int etherType,unsigned int vlanId,const void *data,unsigned int len) { NetworkState *n = reinterpret_cast(*nuptr); - if ((!n)||(!n->tap)) + if ((!n)||(!n->tap())) return; - n->tap->put(MAC(sourceMac),MAC(destMac),etherType,data,len); + n->tap()->put(MAC(sourceMac),MAC(destMac),etherType,data,len); } inline int nodePathCheckFunction(uint64_t ztaddr,const int64_t localSocket,const struct sockaddr_storage *remoteAddr) @@ -2937,8 +3026,8 @@ public: { Mutex::Lock _l(_nets_m); for(std::map::const_iterator n(_nets.begin());n!=_nets.end();++n) { - if (n->second.tap) { - std::vector ips(n->second.tap->ips()); + if (n->second.tap()) { + std::vector ips(n->second.tap()->ips()); for(std::vector::const_iterator i(ips.begin());i!=ips.end();++i) { if (i->containsAddress(*(reinterpret_cast(remoteAddr)))) { return 0; @@ -3110,8 +3199,8 @@ public: { Mutex::Lock _l(_nets_m); for(std::map::const_iterator n(_nets.begin());n!=_nets.end();++n) { - if (n->second.tap) { - std::vector ips(n->second.tap->ips()); + if (n->second.tap()) { + std::vector ips(n->second.tap()->ips()); for(std::vector::const_iterator i(ips.begin());i!=ips.end();++i) { if (i->ipsEqual(ifaddr)) return false; From 87fdd644d464245be8864b5d91669f6b7f68216c Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Thu, 18 Nov 2021 13:36:09 -0800 Subject: [PATCH 072/144] cleanup some ifdef'd things --- service/OneService.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/service/OneService.cpp b/service/OneService.cpp index 309784979..5b2448363 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -1217,10 +1217,10 @@ public: { Mutex::Lock _l(_nets_m); NetworkState &n = _nets[nwid]; - *numRoutes = *numRoutes < n.config.routeCount ? *numRoutes : n.config.routeCount; + *numRoutes = *numRoutes < n.config().routeCount ? *numRoutes : n.config().routeCount; for(unsigned int i=0; i<*numRoutes; i++) { ZT_VirtualNetworkRoute *vnr = (ZT_VirtualNetworkRoute*)routeArray; - memcpy(&vnr[i], &(n.config.routes[i]), sizeof(ZT_VirtualNetworkRoute)); + memcpy(&vnr[i], &(n.config().routes[i]), sizeof(ZT_VirtualNetworkRoute)); } } @@ -2137,7 +2137,7 @@ public: // Get tap device name (use LUID in hex on Windows) and IP addresses. #if defined(__WINDOWS__) && !defined(ZT_SDK) char tapdevbuf[64]; - OSUtils::ztsnprintf(tapdevbuf,sizeof(tapdevbuf),"%.16llx",(unsigned long long)((WindowsEthernetTap *)(n.tap.get()))->luid().Value); + OSUtils::ztsnprintf(tapdevbuf,sizeof(tapdevbuf),"%.16llx",(unsigned long long)((WindowsEthernetTap *)(n.tap().get()))->luid().Value); std::string tapdev(tapdevbuf); #else std::string tapdev(n.tap()->deviceName()); @@ -2581,7 +2581,7 @@ public: // without WindowsEthernetTap::isInitialized() returning true, the won't actually // be online yet and setting managed routes on it will fail. const int MAX_SLEEP_COUNT = 500; - for (int i = 0; !((WindowsEthernetTap *)(n.tap.get()))->isInitialized() && i < MAX_SLEEP_COUNT; i++) { + for (int i = 0; !((WindowsEthernetTap *)(n.tap().get()))->isInitialized() && i < MAX_SLEEP_COUNT; i++) { Sleep(10); } #endif @@ -2597,7 +2597,7 @@ public: case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY: if (n.tap()) { // sanity check #if defined(__WINDOWS__) && !defined(ZT_SDK) - std::string winInstanceId(((WindowsEthernetTap *)(n.tap.get()))->instanceId()); + std::string winInstanceId(((WindowsEthernetTap *)(n.tap().get()))->instanceId()); #endif *nuptr = (void *)0; n.tap().reset(); From 4e10b4e01788134da616596a11d6e0145cb83db0 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Fri, 19 Nov 2021 08:16:14 -0800 Subject: [PATCH 073/144] Modify snap command aliases --- snap/snapcraft.yaml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index f2d097f2d..0e8db17e6 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -7,10 +7,10 @@ description: | Install sudo snap install zerotier Join your network - sudo zerotier.cli join 8056c2e21c000001 - sudo zerotier.cli status + sudo zerotier join + sudo zerotier status Approve your new node in ZeroTier Central (https://my.zerotier.com)! Welcome online! - + adopt-info: one confinement: strict grade: stable @@ -28,11 +28,18 @@ apps: - network-bind - network-control + # For backwards compatibility with old package (e.g. zerotier.cli) + # Should be removed someday cli: command: usr/sbin/zerotier-cli plugs: - network + zerotier: + command: usr/sbin/zerotier-cli + plugs: + - network + idtool: command: usr/sbin/zerotier-idtool plugs: From 5e241663180a25c5da30c22933693f22fa0faa66 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 23 Nov 2021 15:44:08 -0500 Subject: [PATCH 074/144] Remove unused but shipped curl dependency in ext/ --- ext/curl-7.58.0/Win32/include/curl/curl.h | 2751 ----------------- ext/curl-7.58.0/Win32/include/curl/curlver.h | 77 - ext/curl-7.58.0/Win32/include/curl/easy.h | 102 - ext/curl-7.58.0/Win32/include/curl/mprintf.h | 50 - ext/curl-7.58.0/Win32/include/curl/multi.h | 439 --- .../Win32/include/curl/stdcheaders.h | 33 - ext/curl-7.58.0/Win32/include/curl/system.h | 473 --- .../Win32/include/curl/typecheck-gcc.h | 683 ---- ext/curl-7.58.0/Win32/lib/libcurl_a.lib | Bin 1890332 -> 0 bytes ext/curl-7.58.0/Win32/lib/libcurl_a_debug.lib | Bin 9275630 -> 0 bytes ext/curl-7.58.0/x64/include/curl/curl.h | 2751 ----------------- ext/curl-7.58.0/x64/include/curl/curlver.h | 77 - ext/curl-7.58.0/x64/include/curl/easy.h | 102 - ext/curl-7.58.0/x64/include/curl/mprintf.h | 50 - ext/curl-7.58.0/x64/include/curl/multi.h | 439 --- .../x64/include/curl/stdcheaders.h | 33 - ext/curl-7.58.0/x64/include/curl/system.h | 473 --- .../x64/include/curl/typecheck-gcc.h | 683 ---- ext/curl-7.58.0/x64/lib/libcurl_a.lib | Bin 2247876 -> 0 bytes ext/curl-7.58.0/x64/lib/libcurl_a_debug.lib | Bin 9657460 -> 0 bytes 20 files changed, 9216 deletions(-) delete mode 100644 ext/curl-7.58.0/Win32/include/curl/curl.h delete mode 100644 ext/curl-7.58.0/Win32/include/curl/curlver.h delete mode 100644 ext/curl-7.58.0/Win32/include/curl/easy.h delete mode 100644 ext/curl-7.58.0/Win32/include/curl/mprintf.h delete mode 100644 ext/curl-7.58.0/Win32/include/curl/multi.h delete mode 100644 ext/curl-7.58.0/Win32/include/curl/stdcheaders.h delete mode 100644 ext/curl-7.58.0/Win32/include/curl/system.h delete mode 100644 ext/curl-7.58.0/Win32/include/curl/typecheck-gcc.h delete mode 100644 ext/curl-7.58.0/Win32/lib/libcurl_a.lib delete mode 100644 ext/curl-7.58.0/Win32/lib/libcurl_a_debug.lib delete mode 100644 ext/curl-7.58.0/x64/include/curl/curl.h delete mode 100644 ext/curl-7.58.0/x64/include/curl/curlver.h delete mode 100644 ext/curl-7.58.0/x64/include/curl/easy.h delete mode 100644 ext/curl-7.58.0/x64/include/curl/mprintf.h delete mode 100644 ext/curl-7.58.0/x64/include/curl/multi.h delete mode 100644 ext/curl-7.58.0/x64/include/curl/stdcheaders.h delete mode 100644 ext/curl-7.58.0/x64/include/curl/system.h delete mode 100644 ext/curl-7.58.0/x64/include/curl/typecheck-gcc.h delete mode 100644 ext/curl-7.58.0/x64/lib/libcurl_a.lib delete mode 100644 ext/curl-7.58.0/x64/lib/libcurl_a_debug.lib diff --git a/ext/curl-7.58.0/Win32/include/curl/curl.h b/ext/curl-7.58.0/Win32/include/curl/curl.h deleted file mode 100644 index 7680acd18..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/curl.h +++ /dev/null @@ -1,2751 +0,0 @@ -#ifndef __CURL_CURL_H -#define __CURL_CURL_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* - * If you have libcurl problems, all docs and details are found here: - * https://curl.haxx.se/libcurl/ - * - * curl-library mailing list subscription and unsubscription web interface: - * https://cool.haxx.se/mailman/listinfo/curl-library/ - */ - -#ifdef CURL_NO_OLDIES -#define CURL_STRICTER -#endif - -#include "curlver.h" /* libcurl version defines */ -#include "system.h" /* determine things run-time */ - -/* - * Define WIN32 when build target is Win32 API - */ - -#if (defined(_WIN32) || defined(__WIN32__)) && \ - !defined(WIN32) && !defined(__SYMBIAN32__) -#define WIN32 -#endif - -#include -#include - -#if defined(__FreeBSD__) && (__FreeBSD__ >= 2) -/* Needed for __FreeBSD_version symbol definition */ -#include -#endif - -/* The include stuff here below is mainly for time_t! */ -#include -#include - -#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) -#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ - defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) -/* The check above prevents the winsock2 inclusion if winsock.h already was - included, since they can't co-exist without problems */ -#include -#include -#endif -#endif - -/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish - libc5-based Linux systems. Only include it on systems that are known to - require it! */ -#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ - defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ - defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ - defined(__CYGWIN__) || \ - (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) -#include -#endif - -#if !defined(WIN32) && !defined(_WIN32_WCE) -#include -#endif - -#if !defined(WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__) -#include -#endif - -#ifdef __BEOS__ -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) -typedef struct Curl_easy CURL; -typedef struct Curl_share CURLSH; -#else -typedef void CURL; -typedef void CURLSH; -#endif - -/* - * libcurl external API function linkage decorations. - */ - -#ifdef CURL_STATICLIB -# define CURL_EXTERN -#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__) -# if defined(BUILDING_LIBCURL) -# define CURL_EXTERN __declspec(dllexport) -# else -# define CURL_EXTERN __declspec(dllimport) -# endif -#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) -# define CURL_EXTERN CURL_EXTERN_SYMBOL -#else -# define CURL_EXTERN -#endif - -#ifndef curl_socket_typedef -/* socket typedef */ -#if defined(WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) -typedef SOCKET curl_socket_t; -#define CURL_SOCKET_BAD INVALID_SOCKET -#else -typedef int curl_socket_t; -#define CURL_SOCKET_BAD -1 -#endif -#define curl_socket_typedef -#endif /* curl_socket_typedef */ - -/* enum for the different supported SSL backends */ -typedef enum { - CURLSSLBACKEND_NONE = 0, - CURLSSLBACKEND_OPENSSL = 1, - CURLSSLBACKEND_GNUTLS = 2, - CURLSSLBACKEND_NSS = 3, - CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ - CURLSSLBACKEND_GSKIT = 5, - CURLSSLBACKEND_POLARSSL = 6, - CURLSSLBACKEND_WOLFSSL = 7, - CURLSSLBACKEND_SCHANNEL = 8, - CURLSSLBACKEND_DARWINSSL = 9, - CURLSSLBACKEND_AXTLS = 10, - CURLSSLBACKEND_MBEDTLS = 11 -} curl_sslbackend; - -/* aliases for library clones and renames */ -#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL -#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL -#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL - -struct curl_httppost { - struct curl_httppost *next; /* next entry in the list */ - char *name; /* pointer to allocated name */ - long namelength; /* length of name length */ - char *contents; /* pointer to allocated data contents */ - long contentslength; /* length of contents field, see also - CURL_HTTPPOST_LARGE */ - char *buffer; /* pointer to allocated buffer contents */ - long bufferlength; /* length of buffer field */ - char *contenttype; /* Content-Type */ - struct curl_slist *contentheader; /* list of extra headers for this form */ - struct curl_httppost *more; /* if one field name has more than one - file, this link should link to following - files */ - long flags; /* as defined below */ - -/* specified content is a file name */ -#define CURL_HTTPPOST_FILENAME (1<<0) -/* specified content is a file name */ -#define CURL_HTTPPOST_READFILE (1<<1) -/* name is only stored pointer do not free in formfree */ -#define CURL_HTTPPOST_PTRNAME (1<<2) -/* contents is only stored pointer do not free in formfree */ -#define CURL_HTTPPOST_PTRCONTENTS (1<<3) -/* upload file from buffer */ -#define CURL_HTTPPOST_BUFFER (1<<4) -/* upload file from pointer contents */ -#define CURL_HTTPPOST_PTRBUFFER (1<<5) -/* upload file contents by using the regular read callback to get the data and - pass the given pointer as custom pointer */ -#define CURL_HTTPPOST_CALLBACK (1<<6) -/* use size in 'contentlen', added in 7.46.0 */ -#define CURL_HTTPPOST_LARGE (1<<7) - - char *showfilename; /* The file name to show. If not set, the - actual file name will be used (if this - is a file part) */ - void *userp; /* custom pointer used for - HTTPPOST_CALLBACK posts */ - curl_off_t contentlen; /* alternative length of contents - field. Used if CURL_HTTPPOST_LARGE is - set. Added in 7.46.0 */ -}; - -/* This is the CURLOPT_PROGRESSFUNCTION callback proto. It is now considered - deprecated but was the only choice up until 7.31.0 */ -typedef int (*curl_progress_callback)(void *clientp, - double dltotal, - double dlnow, - double ultotal, - double ulnow); - -/* This is the CURLOPT_XFERINFOFUNCTION callback proto. It was introduced in - 7.32.0, it avoids floating point and provides more detailed information. */ -typedef int (*curl_xferinfo_callback)(void *clientp, - curl_off_t dltotal, - curl_off_t dlnow, - curl_off_t ultotal, - curl_off_t ulnow); - -#ifndef CURL_MAX_READ_SIZE - /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ -#define CURL_MAX_READ_SIZE 524288 -#endif - -#ifndef CURL_MAX_WRITE_SIZE - /* Tests have proven that 20K is a very bad buffer size for uploads on - Windows, while 16K for some odd reason performed a lot better. - We do the ifndef check to allow this value to easier be changed at build - time for those who feel adventurous. The practical minimum is about - 400 bytes since libcurl uses a buffer of this size as a scratch area - (unrelated to network send operations). */ -#define CURL_MAX_WRITE_SIZE 16384 -#endif - -#ifndef CURL_MAX_HTTP_HEADER -/* The only reason to have a max limit for this is to avoid the risk of a bad - server feeding libcurl with a never-ending header that will cause reallocs - infinitely */ -#define CURL_MAX_HTTP_HEADER (100*1024) -#endif - -/* This is a magic return code for the write callback that, when returned, - will signal libcurl to pause receiving on the current transfer. */ -#define CURL_WRITEFUNC_PAUSE 0x10000001 - -typedef size_t (*curl_write_callback)(char *buffer, - size_t size, - size_t nitems, - void *outstream); - - - -/* enumeration of file types */ -typedef enum { - CURLFILETYPE_FILE = 0, - CURLFILETYPE_DIRECTORY, - CURLFILETYPE_SYMLINK, - CURLFILETYPE_DEVICE_BLOCK, - CURLFILETYPE_DEVICE_CHAR, - CURLFILETYPE_NAMEDPIPE, - CURLFILETYPE_SOCKET, - CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ - - CURLFILETYPE_UNKNOWN /* should never occur */ -} curlfiletype; - -#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) -#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) -#define CURLFINFOFLAG_KNOWN_TIME (1<<2) -#define CURLFINFOFLAG_KNOWN_PERM (1<<3) -#define CURLFINFOFLAG_KNOWN_UID (1<<4) -#define CURLFINFOFLAG_KNOWN_GID (1<<5) -#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) -#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) - -/* Content of this structure depends on information which is known and is - achievable (e.g. by FTP LIST parsing). Please see the url_easy_setopt(3) man - page for callbacks returning this structure -- some fields are mandatory, - some others are optional. The FLAG field has special meaning. */ -struct curl_fileinfo { - char *filename; - curlfiletype filetype; - time_t time; - unsigned int perm; - int uid; - int gid; - curl_off_t size; - long int hardlinks; - - struct { - /* If some of these fields is not NULL, it is a pointer to b_data. */ - char *time; - char *perm; - char *user; - char *group; - char *target; /* pointer to the target filename of a symlink */ - } strings; - - unsigned int flags; - - /* used internally */ - char *b_data; - size_t b_size; - size_t b_used; -}; - -/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ -#define CURL_CHUNK_BGN_FUNC_OK 0 -#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ -#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ - -/* if splitting of data transfer is enabled, this callback is called before - download of an individual chunk started. Note that parameter "remains" works - only for FTP wildcard downloading (for now), otherwise is not used */ -typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, - void *ptr, - int remains); - -/* return codes for CURLOPT_CHUNK_END_FUNCTION */ -#define CURL_CHUNK_END_FUNC_OK 0 -#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ - -/* If splitting of data transfer is enabled this callback is called after - download of an individual chunk finished. - Note! After this callback was set then it have to be called FOR ALL chunks. - Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. - This is the reason why we don't need "transfer_info" parameter in this - callback and we are not interested in "remains" parameter too. */ -typedef long (*curl_chunk_end_callback)(void *ptr); - -/* return codes for FNMATCHFUNCTION */ -#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ -#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ -#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ - -/* callback type for wildcard downloading pattern matching. If the - string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ -typedef int (*curl_fnmatch_callback)(void *ptr, - const char *pattern, - const char *string); - -/* These are the return codes for the seek callbacks */ -#define CURL_SEEKFUNC_OK 0 -#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ -#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so - libcurl might try other means instead */ -typedef int (*curl_seek_callback)(void *instream, - curl_off_t offset, - int origin); /* 'whence' */ - -/* This is a return code for the read callback that, when returned, will - signal libcurl to immediately abort the current transfer. */ -#define CURL_READFUNC_ABORT 0x10000000 -/* This is a return code for the read callback that, when returned, will - signal libcurl to pause sending data on the current transfer. */ -#define CURL_READFUNC_PAUSE 0x10000001 - -typedef size_t (*curl_read_callback)(char *buffer, - size_t size, - size_t nitems, - void *instream); - -typedef enum { - CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ - CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ - CURLSOCKTYPE_LAST /* never use */ -} curlsocktype; - -/* The return code from the sockopt_callback can signal information back - to libcurl: */ -#define CURL_SOCKOPT_OK 0 -#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return - CURLE_ABORTED_BY_CALLBACK */ -#define CURL_SOCKOPT_ALREADY_CONNECTED 2 - -typedef int (*curl_sockopt_callback)(void *clientp, - curl_socket_t curlfd, - curlsocktype purpose); - -struct curl_sockaddr { - int family; - int socktype; - int protocol; - unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it - turned really ugly and painful on the systems that - lack this type */ - struct sockaddr addr; -}; - -typedef curl_socket_t -(*curl_opensocket_callback)(void *clientp, - curlsocktype purpose, - struct curl_sockaddr *address); - -typedef int -(*curl_closesocket_callback)(void *clientp, curl_socket_t item); - -typedef enum { - CURLIOE_OK, /* I/O operation successful */ - CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ - CURLIOE_FAILRESTART, /* failed to restart the read */ - CURLIOE_LAST /* never use */ -} curlioerr; - -typedef enum { - CURLIOCMD_NOP, /* no operation */ - CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ - CURLIOCMD_LAST /* never use */ -} curliocmd; - -typedef curlioerr (*curl_ioctl_callback)(CURL *handle, - int cmd, - void *clientp); - -#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS -/* - * The following typedef's are signatures of malloc, free, realloc, strdup and - * calloc respectively. Function pointers of these types can be passed to the - * curl_global_init_mem() function to set user defined memory management - * callback routines. - */ -typedef void *(*curl_malloc_callback)(size_t size); -typedef void (*curl_free_callback)(void *ptr); -typedef void *(*curl_realloc_callback)(void *ptr, size_t size); -typedef char *(*curl_strdup_callback)(const char *str); -typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); - -#define CURL_DID_MEMORY_FUNC_TYPEDEFS -#endif - -/* the kind of data that is passed to information_callback*/ -typedef enum { - CURLINFO_TEXT = 0, - CURLINFO_HEADER_IN, /* 1 */ - CURLINFO_HEADER_OUT, /* 2 */ - CURLINFO_DATA_IN, /* 3 */ - CURLINFO_DATA_OUT, /* 4 */ - CURLINFO_SSL_DATA_IN, /* 5 */ - CURLINFO_SSL_DATA_OUT, /* 6 */ - CURLINFO_END -} curl_infotype; - -typedef int (*curl_debug_callback) - (CURL *handle, /* the handle/transfer this concerns */ - curl_infotype type, /* what kind of data */ - char *data, /* points to the data */ - size_t size, /* size of the data pointed to */ - void *userptr); /* whatever the user please */ - -/* All possible error codes from all sorts of curl functions. Future versions - may return other values, stay prepared. - - Always add new return codes last. Never *EVER* remove any. The return - codes must remain the same! - */ - -typedef enum { - CURLE_OK = 0, - CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ - CURLE_FAILED_INIT, /* 2 */ - CURLE_URL_MALFORMAT, /* 3 */ - CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for - 7.17.0, reused in April 2011 for 7.21.5] */ - CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ - CURLE_COULDNT_RESOLVE_HOST, /* 6 */ - CURLE_COULDNT_CONNECT, /* 7 */ - CURLE_WEIRD_SERVER_REPLY, /* 8 */ - CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server - due to lack of access - when login fails - this is not returned. */ - CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for - 7.15.4, reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ - CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server - [was obsoleted in August 2007 for 7.17.0, - reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ - CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ - CURLE_FTP_CANT_GET_HOST, /* 15 */ - CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. - [was obsoleted in August 2007 for 7.17.0, - reused in July 2014 for 7.38.0] */ - CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ - CURLE_PARTIAL_FILE, /* 18 */ - CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ - CURLE_OBSOLETE20, /* 20 - NOT USED */ - CURLE_QUOTE_ERROR, /* 21 - quote command failure */ - CURLE_HTTP_RETURNED_ERROR, /* 22 */ - CURLE_WRITE_ERROR, /* 23 */ - CURLE_OBSOLETE24, /* 24 - NOT USED */ - CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ - CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ - CURLE_OUT_OF_MEMORY, /* 27 */ - /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error - instead of a memory allocation error if CURL_DOES_CONVERSIONS - is defined - */ - CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ - CURLE_OBSOLETE29, /* 29 - NOT USED */ - CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ - CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ - CURLE_OBSOLETE32, /* 32 - NOT USED */ - CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ - CURLE_HTTP_POST_ERROR, /* 34 */ - CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ - CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ - CURLE_FILE_COULDNT_READ_FILE, /* 37 */ - CURLE_LDAP_CANNOT_BIND, /* 38 */ - CURLE_LDAP_SEARCH_FAILED, /* 39 */ - CURLE_OBSOLETE40, /* 40 - NOT USED */ - CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ - CURLE_ABORTED_BY_CALLBACK, /* 42 */ - CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ - CURLE_OBSOLETE44, /* 44 - NOT USED */ - CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ - CURLE_OBSOLETE46, /* 46 - NOT USED */ - CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ - CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ - CURLE_TELNET_OPTION_SYNTAX, /* 49 - Malformed telnet option */ - CURLE_OBSOLETE50, /* 50 - NOT USED */ - CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint - wasn't verified fine */ - CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ - CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ - CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as - default */ - CURLE_SEND_ERROR, /* 55 - failed sending network data */ - CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ - CURLE_OBSOLETE57, /* 57 - NOT IN USE */ - CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ - CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ - CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */ - CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ - CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ - CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ - CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ - CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind - that failed */ - CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ - CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not - accepted and we failed to login */ - CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ - CURLE_TFTP_PERM, /* 69 - permission problem on server */ - CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ - CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ - CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ - CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ - CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ - CURLE_CONV_FAILED, /* 75 - conversion failed */ - CURLE_CONV_REQD, /* 76 - caller must register conversion - callbacks using curl_easy_setopt options - CURLOPT_CONV_FROM_NETWORK_FUNCTION, - CURLOPT_CONV_TO_NETWORK_FUNCTION, and - CURLOPT_CONV_FROM_UTF8_FUNCTION */ - CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing - or wrong format */ - CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ - CURLE_SSH, /* 79 - error from the SSH layer, somewhat - generic so the error message will be of - interest when this has happened */ - - CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL - connection */ - CURLE_AGAIN, /* 81 - socket is not ready for send/recv, - wait till it's ready and try again (Added - in 7.18.2) */ - CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or - wrong format (Added in 7.19.0) */ - CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in - 7.19.0) */ - CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ - CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ - CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ - CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ - CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ - CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the - session will be queued */ - CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not - match */ - CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ - CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer - */ - CURL_LAST /* never use! */ -} CURLcode; - -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all - the obsolete stuff removed! */ - -/* Previously obsolete error code re-used in 7.38.0 */ -#define CURLE_OBSOLETE16 CURLE_HTTP2 - -/* Previously obsolete error codes re-used in 7.24.0 */ -#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED -#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT - -/* compatibility with older names */ -#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING -#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY - -/* The following were added in 7.21.5, April 2011 */ -#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION - -/* The following were added in 7.17.1 */ -/* These are scheduled to disappear by 2009 */ -#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION - -/* The following were added in 7.17.0 */ -/* These are scheduled to disappear by 2009 */ -#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ -#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 -#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 -#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 -#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 -#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 -#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 -#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 -#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 -#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 -#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 -#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 -#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN - -#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED -#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE -#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR -#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL -#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS -#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR -#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED - -/* The following were added earlier */ - -#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT - -#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR -#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED -#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED - -#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE -#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME - -/* This was the error code 50 in 7.7.3 and a few earlier versions, this - is no longer used by libcurl but is instead #defined here only to not - make programs break */ -#define CURLE_ALREADY_COMPLETE 99999 - -/* Provide defines for really old option names */ -#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ -#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ -#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA - -/* Since long deprecated options with no code in the lib that does anything - with them. */ -#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 -#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 - -#endif /*!CURL_NO_OLDIES*/ - -/* This prototype applies to all conversion callbacks */ -typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); - -typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ - void *ssl_ctx, /* actually an - OpenSSL SSL_CTX */ - void *userptr); - -typedef enum { - CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use - CONNECT HTTP/1.1 */ - CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT - HTTP/1.0 */ - CURLPROXY_HTTPS = 2, /* added in 7.52.0 */ - CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already - in 7.10 */ - CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ - CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ - CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the - host name rather than the IP address. added - in 7.18.0 */ -} curl_proxytype; /* this enum was added in 7.10 */ - -/* - * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: - * - * CURLAUTH_NONE - No HTTP authentication - * CURLAUTH_BASIC - HTTP Basic authentication (default) - * CURLAUTH_DIGEST - HTTP Digest authentication - * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication - * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) - * CURLAUTH_NTLM - HTTP NTLM authentication - * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour - * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper - * CURLAUTH_ONLY - Use together with a single other type to force no - * authentication or just that single type - * CURLAUTH_ANY - All fine types set - * CURLAUTH_ANYSAFE - All fine types except Basic - */ - -#define CURLAUTH_NONE ((unsigned long)0) -#define CURLAUTH_BASIC (((unsigned long)1)<<0) -#define CURLAUTH_DIGEST (((unsigned long)1)<<1) -#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) -/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ -#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE -/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ -#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE -#define CURLAUTH_NTLM (((unsigned long)1)<<3) -#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) -#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) -#define CURLAUTH_ONLY (((unsigned long)1)<<31) -#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) -#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) - -#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ -#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ -#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ -#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ -#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ -#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ -#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ -#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ -#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY - -#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ -#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ -#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ - -#define CURL_ERROR_SIZE 256 - -enum curl_khtype { - CURLKHTYPE_UNKNOWN, - CURLKHTYPE_RSA1, - CURLKHTYPE_RSA, - CURLKHTYPE_DSS, - CURLKHTYPE_ECDSA, - CURLKHTYPE_ED25519 -}; - -struct curl_khkey { - const char *key; /* points to a zero-terminated string encoded with base64 - if len is zero, otherwise to the "raw" data */ - size_t len; - enum curl_khtype keytype; -}; - -/* this is the set of return values expected from the curl_sshkeycallback - callback */ -enum curl_khstat { - CURLKHSTAT_FINE_ADD_TO_FILE, - CURLKHSTAT_FINE, - CURLKHSTAT_REJECT, /* reject the connection, return an error */ - CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now so - this causes a CURLE_DEFER error but otherwise the - connection will be left intact etc */ - CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ -}; - -/* this is the set of status codes pass in to the callback */ -enum curl_khmatch { - CURLKHMATCH_OK, /* match */ - CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ - CURLKHMATCH_MISSING, /* no matching host/key found */ - CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ -}; - -typedef int - (*curl_sshkeycallback) (CURL *easy, /* easy handle */ - const struct curl_khkey *knownkey, /* known */ - const struct curl_khkey *foundkey, /* found */ - enum curl_khmatch, /* libcurl's view on the keys */ - void *clientp); /* custom pointer passed from app */ - -/* parameter for the CURLOPT_USE_SSL option */ -typedef enum { - CURLUSESSL_NONE, /* do not attempt to use SSL */ - CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ - CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ - CURLUSESSL_ALL, /* SSL for all communication or fail */ - CURLUSESSL_LAST /* not an option, never use */ -} curl_usessl; - -/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ - -/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the - name of improving interoperability with older servers. Some SSL libraries - have introduced work-arounds for this flaw but those work-arounds sometimes - make the SSL communication fail. To regain functionality with those broken - servers, a user can this way allow the vulnerability back. */ -#define CURLSSLOPT_ALLOW_BEAST (1<<0) - -/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those - SSL backends where such behavior is present. */ -#define CURLSSLOPT_NO_REVOKE (1<<1) - -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all - the obsolete stuff removed! */ - -/* Backwards compatibility with older names */ -/* These are scheduled to disappear by 2009 */ - -#define CURLFTPSSL_NONE CURLUSESSL_NONE -#define CURLFTPSSL_TRY CURLUSESSL_TRY -#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL -#define CURLFTPSSL_ALL CURLUSESSL_ALL -#define CURLFTPSSL_LAST CURLUSESSL_LAST -#define curl_ftpssl curl_usessl -#endif /*!CURL_NO_OLDIES*/ - -/* parameter for the CURLOPT_FTP_SSL_CCC option */ -typedef enum { - CURLFTPSSL_CCC_NONE, /* do not send CCC */ - CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ - CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ - CURLFTPSSL_CCC_LAST /* not an option, never use */ -} curl_ftpccc; - -/* parameter for the CURLOPT_FTPSSLAUTH option */ -typedef enum { - CURLFTPAUTH_DEFAULT, /* let libcurl decide */ - CURLFTPAUTH_SSL, /* use "AUTH SSL" */ - CURLFTPAUTH_TLS, /* use "AUTH TLS" */ - CURLFTPAUTH_LAST /* not an option, never use */ -} curl_ftpauth; - -/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ -typedef enum { - CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ - CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD - again if MKD succeeded, for SFTP this does - similar magic */ - CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD - again even if MKD failed! */ - CURLFTP_CREATE_DIR_LAST /* not an option, never use */ -} curl_ftpcreatedir; - -/* parameter for the CURLOPT_FTP_FILEMETHOD option */ -typedef enum { - CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ - CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ - CURLFTPMETHOD_NOCWD, /* no CWD at all */ - CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ - CURLFTPMETHOD_LAST /* not an option, never use */ -} curl_ftpmethod; - -/* bitmask defines for CURLOPT_HEADEROPT */ -#define CURLHEADER_UNIFIED 0 -#define CURLHEADER_SEPARATE (1<<0) - -/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ -#define CURLPROTO_HTTP (1<<0) -#define CURLPROTO_HTTPS (1<<1) -#define CURLPROTO_FTP (1<<2) -#define CURLPROTO_FTPS (1<<3) -#define CURLPROTO_SCP (1<<4) -#define CURLPROTO_SFTP (1<<5) -#define CURLPROTO_TELNET (1<<6) -#define CURLPROTO_LDAP (1<<7) -#define CURLPROTO_LDAPS (1<<8) -#define CURLPROTO_DICT (1<<9) -#define CURLPROTO_FILE (1<<10) -#define CURLPROTO_TFTP (1<<11) -#define CURLPROTO_IMAP (1<<12) -#define CURLPROTO_IMAPS (1<<13) -#define CURLPROTO_POP3 (1<<14) -#define CURLPROTO_POP3S (1<<15) -#define CURLPROTO_SMTP (1<<16) -#define CURLPROTO_SMTPS (1<<17) -#define CURLPROTO_RTSP (1<<18) -#define CURLPROTO_RTMP (1<<19) -#define CURLPROTO_RTMPT (1<<20) -#define CURLPROTO_RTMPE (1<<21) -#define CURLPROTO_RTMPTE (1<<22) -#define CURLPROTO_RTMPS (1<<23) -#define CURLPROTO_RTMPTS (1<<24) -#define CURLPROTO_GOPHER (1<<25) -#define CURLPROTO_SMB (1<<26) -#define CURLPROTO_SMBS (1<<27) -#define CURLPROTO_ALL (~0) /* enable everything */ - -/* long may be 32 or 64 bits, but we should never depend on anything else - but 32 */ -#define CURLOPTTYPE_LONG 0 -#define CURLOPTTYPE_OBJECTPOINT 10000 -#define CURLOPTTYPE_STRINGPOINT 10000 -#define CURLOPTTYPE_FUNCTIONPOINT 20000 -#define CURLOPTTYPE_OFF_T 30000 - -/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the - string options from the header file */ - -/* name is uppercase CURLOPT_, - type is one of the defined CURLOPTTYPE_ - number is unique identifier */ -#ifdef CINIT -#undef CINIT -#endif - -#ifdef CURL_ISOCPP -#define CINIT(na,t,nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu -#else -/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ -#define LONG CURLOPTTYPE_LONG -#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT -#define STRINGPOINT CURLOPTTYPE_OBJECTPOINT -#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT -#define OFF_T CURLOPTTYPE_OFF_T -#define CINIT(name,type,number) CURLOPT_/**/name = type + number -#endif - -/* - * This macro-mania below setups the CURLOPT_[what] enum, to be used with - * curl_easy_setopt(). The first argument in the CINIT() macro is the [what] - * word. - */ - -typedef enum { - /* This is the FILE * or void * the regular output should be written to. */ - CINIT(WRITEDATA, OBJECTPOINT, 1), - - /* The full URL to get/put */ - CINIT(URL, STRINGPOINT, 2), - - /* Port number to connect to, if other than default. */ - CINIT(PORT, LONG, 3), - - /* Name of proxy to use. */ - CINIT(PROXY, STRINGPOINT, 4), - - /* "user:password;options" to use when fetching. */ - CINIT(USERPWD, STRINGPOINT, 5), - - /* "user:password" to use with proxy. */ - CINIT(PROXYUSERPWD, STRINGPOINT, 6), - - /* Range to get, specified as an ASCII string. */ - CINIT(RANGE, STRINGPOINT, 7), - - /* not used */ - - /* Specified file stream to upload from (use as input): */ - CINIT(READDATA, OBJECTPOINT, 9), - - /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE - * bytes big. */ - CINIT(ERRORBUFFER, OBJECTPOINT, 10), - - /* Function that will be called to store the output (instead of fwrite). The - * parameters will use fwrite() syntax, make sure to follow them. */ - CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11), - - /* Function that will be called to read the input (instead of fread). The - * parameters will use fread() syntax, make sure to follow them. */ - CINIT(READFUNCTION, FUNCTIONPOINT, 12), - - /* Time-out the read operation after this amount of seconds */ - CINIT(TIMEOUT, LONG, 13), - - /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about - * how large the file being sent really is. That allows better error - * checking and better verifies that the upload was successful. -1 means - * unknown size. - * - * For large file support, there is also a _LARGE version of the key - * which takes an off_t type, allowing platforms with larger off_t - * sizes to handle larger files. See below for INFILESIZE_LARGE. - */ - CINIT(INFILESIZE, LONG, 14), - - /* POST static input fields. */ - CINIT(POSTFIELDS, OBJECTPOINT, 15), - - /* Set the referrer page (needed by some CGIs) */ - CINIT(REFERER, STRINGPOINT, 16), - - /* Set the FTP PORT string (interface name, named or numerical IP address) - Use i.e '-' to use default address. */ - CINIT(FTPPORT, STRINGPOINT, 17), - - /* Set the User-Agent string (examined by some CGIs) */ - CINIT(USERAGENT, STRINGPOINT, 18), - - /* If the download receives less than "low speed limit" bytes/second - * during "low speed time" seconds, the operations is aborted. - * You could i.e if you have a pretty high speed connection, abort if - * it is less than 2000 bytes/sec during 20 seconds. - */ - - /* Set the "low speed limit" */ - CINIT(LOW_SPEED_LIMIT, LONG, 19), - - /* Set the "low speed time" */ - CINIT(LOW_SPEED_TIME, LONG, 20), - - /* Set the continuation offset. - * - * Note there is also a _LARGE version of this key which uses - * off_t types, allowing for large file offsets on platforms which - * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. - */ - CINIT(RESUME_FROM, LONG, 21), - - /* Set cookie in request: */ - CINIT(COOKIE, STRINGPOINT, 22), - - /* This points to a linked list of headers, struct curl_slist kind. This - list is also used for RTSP (in spite of its name) */ - CINIT(HTTPHEADER, OBJECTPOINT, 23), - - /* This points to a linked list of post entries, struct curl_httppost */ - CINIT(HTTPPOST, OBJECTPOINT, 24), - - /* name of the file keeping your private SSL-certificate */ - CINIT(SSLCERT, STRINGPOINT, 25), - - /* password for the SSL or SSH private key */ - CINIT(KEYPASSWD, STRINGPOINT, 26), - - /* send TYPE parameter? */ - CINIT(CRLF, LONG, 27), - - /* send linked-list of QUOTE commands */ - CINIT(QUOTE, OBJECTPOINT, 28), - - /* send FILE * or void * to store headers to, if you use a callback it - is simply passed to the callback unmodified */ - CINIT(HEADERDATA, OBJECTPOINT, 29), - - /* point to a file to read the initial cookies from, also enables - "cookie awareness" */ - CINIT(COOKIEFILE, STRINGPOINT, 31), - - /* What version to specifically try to use. - See CURL_SSLVERSION defines below. */ - CINIT(SSLVERSION, LONG, 32), - - /* What kind of HTTP time condition to use, see defines */ - CINIT(TIMECONDITION, LONG, 33), - - /* Time to use with the above condition. Specified in number of seconds - since 1 Jan 1970 */ - CINIT(TIMEVALUE, LONG, 34), - - /* 35 = OBSOLETE */ - - /* Custom request, for customizing the get command like - HTTP: DELETE, TRACE and others - FTP: to use a different list command - */ - CINIT(CUSTOMREQUEST, STRINGPOINT, 36), - - /* FILE handle to use instead of stderr */ - CINIT(STDERR, OBJECTPOINT, 37), - - /* 38 is not used */ - - /* send linked-list of post-transfer QUOTE commands */ - CINIT(POSTQUOTE, OBJECTPOINT, 39), - - CINIT(OBSOLETE40, OBJECTPOINT, 40), /* OBSOLETE, do not use! */ - - CINIT(VERBOSE, LONG, 41), /* talk a lot */ - CINIT(HEADER, LONG, 42), /* throw the header out too */ - CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */ - CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */ - CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 400 */ - CINIT(UPLOAD, LONG, 46), /* this is an upload */ - CINIT(POST, LONG, 47), /* HTTP POST method */ - CINIT(DIRLISTONLY, LONG, 48), /* bare names when listing directories */ - - CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */ - - /* Specify whether to read the user+password from the .netrc or the URL. - * This must be one of the CURL_NETRC_* enums below. */ - CINIT(NETRC, LONG, 51), - - CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */ - - CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */ - CINIT(PUT, LONG, 54), /* HTTP PUT */ - - /* 55 = OBSOLETE */ - - /* DEPRECATED - * Function that will be called instead of the internal progress display - * function. This function should be defined as the curl_progress_callback - * prototype defines. */ - CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56), - - /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION - callbacks */ - CINIT(PROGRESSDATA, OBJECTPOINT, 57), -#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA - - /* We want the referrer field set automatically when following locations */ - CINIT(AUTOREFERER, LONG, 58), - - /* Port of the proxy, can be set in the proxy string as well with: - "[host]:[port]" */ - CINIT(PROXYPORT, LONG, 59), - - /* size of the POST input data, if strlen() is not good to use */ - CINIT(POSTFIELDSIZE, LONG, 60), - - /* tunnel non-http operations through a HTTP proxy */ - CINIT(HTTPPROXYTUNNEL, LONG, 61), - - /* Set the interface string to use as outgoing network interface */ - CINIT(INTERFACE, STRINGPOINT, 62), - - /* Set the krb4/5 security level, this also enables krb4/5 awareness. This - * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string - * is set but doesn't match one of these, 'private' will be used. */ - CINIT(KRBLEVEL, STRINGPOINT, 63), - - /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ - CINIT(SSL_VERIFYPEER, LONG, 64), - - /* The CApath or CAfile used to validate the peer certificate - this option is used only if SSL_VERIFYPEER is true */ - CINIT(CAINFO, STRINGPOINT, 65), - - /* 66 = OBSOLETE */ - /* 67 = OBSOLETE */ - - /* Maximum number of http redirects to follow */ - CINIT(MAXREDIRS, LONG, 68), - - /* Pass a long set to 1 to get the date of the requested document (if - possible)! Pass a zero to shut it off. */ - CINIT(FILETIME, LONG, 69), - - /* This points to a linked list of telnet options */ - CINIT(TELNETOPTIONS, OBJECTPOINT, 70), - - /* Max amount of cached alive connections */ - CINIT(MAXCONNECTS, LONG, 71), - - CINIT(OBSOLETE72, LONG, 72), /* OBSOLETE, do not use! */ - - /* 73 = OBSOLETE */ - - /* Set to explicitly use a new connection for the upcoming transfer. - Do not use this unless you're absolutely sure of this, as it makes the - operation slower and is less friendly for the network. */ - CINIT(FRESH_CONNECT, LONG, 74), - - /* Set to explicitly forbid the upcoming transfer's connection to be re-used - when done. Do not use this unless you're absolutely sure of this, as it - makes the operation slower and is less friendly for the network. */ - CINIT(FORBID_REUSE, LONG, 75), - - /* Set to a file name that contains random data for libcurl to use to - seed the random engine when doing SSL connects. */ - CINIT(RANDOM_FILE, STRINGPOINT, 76), - - /* Set to the Entropy Gathering Daemon socket pathname */ - CINIT(EGDSOCKET, STRINGPOINT, 77), - - /* Time-out connect operations after this amount of seconds, if connects are - OK within this time, then fine... This only aborts the connect phase. */ - CINIT(CONNECTTIMEOUT, LONG, 78), - - /* Function that will be called to store headers (instead of fwrite). The - * parameters will use fwrite() syntax, make sure to follow them. */ - CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), - - /* Set this to force the HTTP request to get back to GET. Only really usable - if POST, PUT or a custom request have been used first. - */ - CINIT(HTTPGET, LONG, 80), - - /* Set if we should verify the Common name from the peer certificate in ssl - * handshake, set 1 to check existence, 2 to ensure that it matches the - * provided hostname. */ - CINIT(SSL_VERIFYHOST, LONG, 81), - - /* Specify which file name to write all known cookies in after completed - operation. Set file name to "-" (dash) to make it go to stdout. */ - CINIT(COOKIEJAR, STRINGPOINT, 82), - - /* Specify which SSL ciphers to use */ - CINIT(SSL_CIPHER_LIST, STRINGPOINT, 83), - - /* Specify which HTTP version to use! This must be set to one of the - CURL_HTTP_VERSION* enums set below. */ - CINIT(HTTP_VERSION, LONG, 84), - - /* Specifically switch on or off the FTP engine's use of the EPSV command. By - default, that one will always be attempted before the more traditional - PASV command. */ - CINIT(FTP_USE_EPSV, LONG, 85), - - /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ - CINIT(SSLCERTTYPE, STRINGPOINT, 86), - - /* name of the file keeping your private SSL-key */ - CINIT(SSLKEY, STRINGPOINT, 87), - - /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ - CINIT(SSLKEYTYPE, STRINGPOINT, 88), - - /* crypto engine for the SSL-sub system */ - CINIT(SSLENGINE, STRINGPOINT, 89), - - /* set the crypto engine for the SSL-sub system as default - the param has no meaning... - */ - CINIT(SSLENGINE_DEFAULT, LONG, 90), - - /* Non-zero value means to use the global dns cache */ - CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* DEPRECATED, do not use! */ - - /* DNS cache timeout */ - CINIT(DNS_CACHE_TIMEOUT, LONG, 92), - - /* send linked-list of pre-transfer QUOTE commands */ - CINIT(PREQUOTE, OBJECTPOINT, 93), - - /* set the debug function */ - CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94), - - /* set the data for the debug function */ - CINIT(DEBUGDATA, OBJECTPOINT, 95), - - /* mark this as start of a cookie session */ - CINIT(COOKIESESSION, LONG, 96), - - /* The CApath directory used to validate the peer certificate - this option is used only if SSL_VERIFYPEER is true */ - CINIT(CAPATH, STRINGPOINT, 97), - - /* Instruct libcurl to use a smaller receive buffer */ - CINIT(BUFFERSIZE, LONG, 98), - - /* Instruct libcurl to not use any signal/alarm handlers, even when using - timeouts. This option is useful for multi-threaded applications. - See libcurl-the-guide for more background information. */ - CINIT(NOSIGNAL, LONG, 99), - - /* Provide a CURLShare for mutexing non-ts data */ - CINIT(SHARE, OBJECTPOINT, 100), - - /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), - CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and - CURLPROXY_SOCKS5. */ - CINIT(PROXYTYPE, LONG, 101), - - /* Set the Accept-Encoding string. Use this to tell a server you would like - the response to be compressed. Before 7.21.6, this was known as - CURLOPT_ENCODING */ - CINIT(ACCEPT_ENCODING, STRINGPOINT, 102), - - /* Set pointer to private data */ - CINIT(PRIVATE, OBJECTPOINT, 103), - - /* Set aliases for HTTP 200 in the HTTP Response header */ - CINIT(HTTP200ALIASES, OBJECTPOINT, 104), - - /* Continue to send authentication (user+password) when following locations, - even when hostname changed. This can potentially send off the name - and password to whatever host the server decides. */ - CINIT(UNRESTRICTED_AUTH, LONG, 105), - - /* Specifically switch on or off the FTP engine's use of the EPRT command ( - it also disables the LPRT attempt). By default, those ones will always be - attempted before the good old traditional PORT command. */ - CINIT(FTP_USE_EPRT, LONG, 106), - - /* Set this to a bitmask value to enable the particular authentications - methods you like. Use this in combination with CURLOPT_USERPWD. - Note that setting multiple bits may cause extra network round-trips. */ - CINIT(HTTPAUTH, LONG, 107), - - /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx - in second argument. The function must be matching the - curl_ssl_ctx_callback proto. */ - CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108), - - /* Set the userdata for the ssl context callback function's third - argument */ - CINIT(SSL_CTX_DATA, OBJECTPOINT, 109), - - /* FTP Option that causes missing dirs to be created on the remote server. - In 7.19.4 we introduced the convenience enums for this option using the - CURLFTP_CREATE_DIR prefix. - */ - CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110), - - /* Set this to a bitmask value to enable the particular authentications - methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. - Note that setting multiple bits may cause extra network round-trips. */ - CINIT(PROXYAUTH, LONG, 111), - - /* FTP option that changes the timeout, in seconds, associated with - getting a response. This is different from transfer timeout time and - essentially places a demand on the FTP server to acknowledge commands - in a timely manner. */ - CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112), -#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT - - /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to - tell libcurl to resolve names to those IP versions only. This only has - affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ - CINIT(IPRESOLVE, LONG, 113), - - /* Set this option to limit the size of a file that will be downloaded from - an HTTP or FTP server. - - Note there is also _LARGE version which adds large file support for - platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ - CINIT(MAXFILESIZE, LONG, 114), - - /* See the comment for INFILESIZE above, but in short, specifies - * the size of the file being uploaded. -1 means unknown. - */ - CINIT(INFILESIZE_LARGE, OFF_T, 115), - - /* Sets the continuation offset. There is also a LONG version of this; - * look above for RESUME_FROM. - */ - CINIT(RESUME_FROM_LARGE, OFF_T, 116), - - /* Sets the maximum size of data that will be downloaded from - * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. - */ - CINIT(MAXFILESIZE_LARGE, OFF_T, 117), - - /* Set this option to the file name of your .netrc file you want libcurl - to parse (using the CURLOPT_NETRC option). If not set, libcurl will do - a poor attempt to find the user's home directory and check for a .netrc - file in there. */ - CINIT(NETRC_FILE, STRINGPOINT, 118), - - /* Enable SSL/TLS for FTP, pick one of: - CURLUSESSL_TRY - try using SSL, proceed anyway otherwise - CURLUSESSL_CONTROL - SSL for the control connection or fail - CURLUSESSL_ALL - SSL for all communication or fail - */ - CINIT(USE_SSL, LONG, 119), - - /* The _LARGE version of the standard POSTFIELDSIZE option */ - CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), - - /* Enable/disable the TCP Nagle algorithm */ - CINIT(TCP_NODELAY, LONG, 121), - - /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 123 OBSOLETE. Gone in 7.16.0 */ - /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 127 OBSOLETE. Gone in 7.16.0 */ - /* 128 OBSOLETE. Gone in 7.16.0 */ - - /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option - can be used to change libcurl's default action which is to first try - "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK - response has been received. - - Available parameters are: - CURLFTPAUTH_DEFAULT - let libcurl decide - CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS - CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL - */ - CINIT(FTPSSLAUTH, LONG, 129), - - CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130), - CINIT(IOCTLDATA, OBJECTPOINT, 131), - - /* 132 OBSOLETE. Gone in 7.16.0 */ - /* 133 OBSOLETE. Gone in 7.16.0 */ - - /* zero terminated string for pass on to the FTP server when asked for - "account" info */ - CINIT(FTP_ACCOUNT, STRINGPOINT, 134), - - /* feed cookie into cookie engine */ - CINIT(COOKIELIST, STRINGPOINT, 135), - - /* ignore Content-Length */ - CINIT(IGNORE_CONTENT_LENGTH, LONG, 136), - - /* Set to non-zero to skip the IP address received in a 227 PASV FTP server - response. Typically used for FTP-SSL purposes but is not restricted to - that. libcurl will then instead use the same IP address it used for the - control connection. */ - CINIT(FTP_SKIP_PASV_IP, LONG, 137), - - /* Select "file method" to use when doing FTP, see the curl_ftpmethod - above. */ - CINIT(FTP_FILEMETHOD, LONG, 138), - - /* Local port number to bind the socket to */ - CINIT(LOCALPORT, LONG, 139), - - /* Number of ports to try, including the first one set with LOCALPORT. - Thus, setting it to 1 will make no additional attempts but the first. - */ - CINIT(LOCALPORTRANGE, LONG, 140), - - /* no transfer, set up connection and let application use the socket by - extracting it with CURLINFO_LASTSOCKET */ - CINIT(CONNECT_ONLY, LONG, 141), - - /* Function that will be called to convert from the - network encoding (instead of using the iconv calls in libcurl) */ - CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142), - - /* Function that will be called to convert to the - network encoding (instead of using the iconv calls in libcurl) */ - CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143), - - /* Function that will be called to convert from UTF8 - (instead of using the iconv calls in libcurl) - Note that this is used only for SSL certificate processing */ - CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144), - - /* if the connection proceeds too quickly then need to slow it down */ - /* limit-rate: maximum number of bytes per second to send or receive */ - CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), - CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), - - /* Pointer to command string to send if USER/PASS fails. */ - CINIT(FTP_ALTERNATIVE_TO_USER, STRINGPOINT, 147), - - /* callback function for setting socket options */ - CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148), - CINIT(SOCKOPTDATA, OBJECTPOINT, 149), - - /* set to 0 to disable session ID re-use for this transfer, default is - enabled (== 1) */ - CINIT(SSL_SESSIONID_CACHE, LONG, 150), - - /* allowed SSH authentication methods */ - CINIT(SSH_AUTH_TYPES, LONG, 151), - - /* Used by scp/sftp to do public/private key authentication */ - CINIT(SSH_PUBLIC_KEYFILE, STRINGPOINT, 152), - CINIT(SSH_PRIVATE_KEYFILE, STRINGPOINT, 153), - - /* Send CCC (Clear Command Channel) after authentication */ - CINIT(FTP_SSL_CCC, LONG, 154), - - /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ - CINIT(TIMEOUT_MS, LONG, 155), - CINIT(CONNECTTIMEOUT_MS, LONG, 156), - - /* set to zero to disable the libcurl's decoding and thus pass the raw body - data to the application even when it is encoded/compressed */ - CINIT(HTTP_TRANSFER_DECODING, LONG, 157), - CINIT(HTTP_CONTENT_DECODING, LONG, 158), - - /* Permission used when creating new files and directories on the remote - server for protocols that support it, SFTP/SCP/FILE */ - CINIT(NEW_FILE_PERMS, LONG, 159), - CINIT(NEW_DIRECTORY_PERMS, LONG, 160), - - /* Set the behaviour of POST when redirecting. Values must be set to one - of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ - CINIT(POSTREDIR, LONG, 161), - - /* used by scp/sftp to verify the host's public key */ - CINIT(SSH_HOST_PUBLIC_KEY_MD5, STRINGPOINT, 162), - - /* Callback function for opening socket (instead of socket(2)). Optionally, - callback is able change the address or refuse to connect returning - CURL_SOCKET_BAD. The callback should have type - curl_opensocket_callback */ - CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163), - CINIT(OPENSOCKETDATA, OBJECTPOINT, 164), - - /* POST volatile input fields. */ - CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165), - - /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ - CINIT(PROXY_TRANSFER_MODE, LONG, 166), - - /* Callback function for seeking in the input stream */ - CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167), - CINIT(SEEKDATA, OBJECTPOINT, 168), - - /* CRL file */ - CINIT(CRLFILE, STRINGPOINT, 169), - - /* Issuer certificate */ - CINIT(ISSUERCERT, STRINGPOINT, 170), - - /* (IPv6) Address scope */ - CINIT(ADDRESS_SCOPE, LONG, 171), - - /* Collect certificate chain info and allow it to get retrievable with - CURLINFO_CERTINFO after the transfer is complete. */ - CINIT(CERTINFO, LONG, 172), - - /* "name" and "pwd" to use when fetching. */ - CINIT(USERNAME, STRINGPOINT, 173), - CINIT(PASSWORD, STRINGPOINT, 174), - - /* "name" and "pwd" to use with Proxy when fetching. */ - CINIT(PROXYUSERNAME, STRINGPOINT, 175), - CINIT(PROXYPASSWORD, STRINGPOINT, 176), - - /* Comma separated list of hostnames defining no-proxy zones. These should - match both hostnames directly, and hostnames within a domain. For - example, local.com will match local.com and www.local.com, but NOT - notlocal.com or www.notlocal.com. For compatibility with other - implementations of this, .local.com will be considered to be the same as - local.com. A single * is the only valid wildcard, and effectively - disables the use of proxy. */ - CINIT(NOPROXY, STRINGPOINT, 177), - - /* block size for TFTP transfers */ - CINIT(TFTP_BLKSIZE, LONG, 178), - - /* Socks Service */ - CINIT(SOCKS5_GSSAPI_SERVICE, STRINGPOINT, 179), /* DEPRECATED, do not use! */ - - /* Socks Service */ - CINIT(SOCKS5_GSSAPI_NEC, LONG, 180), - - /* set the bitmask for the protocols that are allowed to be used for the - transfer, which thus helps the app which takes URLs from users or other - external inputs and want to restrict what protocol(s) to deal - with. Defaults to CURLPROTO_ALL. */ - CINIT(PROTOCOLS, LONG, 181), - - /* set the bitmask for the protocols that libcurl is allowed to follow to, - as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs - to be set in both bitmasks to be allowed to get redirected to. Defaults - to all protocols except FILE and SCP. */ - CINIT(REDIR_PROTOCOLS, LONG, 182), - - /* set the SSH knownhost file name to use */ - CINIT(SSH_KNOWNHOSTS, STRINGPOINT, 183), - - /* set the SSH host key callback, must point to a curl_sshkeycallback - function */ - CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184), - - /* set the SSH host key callback custom pointer */ - CINIT(SSH_KEYDATA, OBJECTPOINT, 185), - - /* set the SMTP mail originator */ - CINIT(MAIL_FROM, STRINGPOINT, 186), - - /* set the list of SMTP mail receiver(s) */ - CINIT(MAIL_RCPT, OBJECTPOINT, 187), - - /* FTP: send PRET before PASV */ - CINIT(FTP_USE_PRET, LONG, 188), - - /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ - CINIT(RTSP_REQUEST, LONG, 189), - - /* The RTSP session identifier */ - CINIT(RTSP_SESSION_ID, STRINGPOINT, 190), - - /* The RTSP stream URI */ - CINIT(RTSP_STREAM_URI, STRINGPOINT, 191), - - /* The Transport: header to use in RTSP requests */ - CINIT(RTSP_TRANSPORT, STRINGPOINT, 192), - - /* Manually initialize the client RTSP CSeq for this handle */ - CINIT(RTSP_CLIENT_CSEQ, LONG, 193), - - /* Manually initialize the server RTSP CSeq for this handle */ - CINIT(RTSP_SERVER_CSEQ, LONG, 194), - - /* The stream to pass to INTERLEAVEFUNCTION. */ - CINIT(INTERLEAVEDATA, OBJECTPOINT, 195), - - /* Let the application define a custom write method for RTP data */ - CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196), - - /* Turn on wildcard matching */ - CINIT(WILDCARDMATCH, LONG, 197), - - /* Directory matching callback called before downloading of an - individual file (chunk) started */ - CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198), - - /* Directory matching callback called after the file (chunk) - was downloaded, or skipped */ - CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199), - - /* Change match (fnmatch-like) callback for wildcard matching */ - CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200), - - /* Let the application define custom chunk data pointer */ - CINIT(CHUNK_DATA, OBJECTPOINT, 201), - - /* FNMATCH_FUNCTION user pointer */ - CINIT(FNMATCH_DATA, OBJECTPOINT, 202), - - /* send linked-list of name:port:address sets */ - CINIT(RESOLVE, OBJECTPOINT, 203), - - /* Set a username for authenticated TLS */ - CINIT(TLSAUTH_USERNAME, STRINGPOINT, 204), - - /* Set a password for authenticated TLS */ - CINIT(TLSAUTH_PASSWORD, STRINGPOINT, 205), - - /* Set authentication type for authenticated TLS */ - CINIT(TLSAUTH_TYPE, STRINGPOINT, 206), - - /* Set to 1 to enable the "TE:" header in HTTP requests to ask for - compressed transfer-encoded responses. Set to 0 to disable the use of TE: - in outgoing requests. The current default is 0, but it might change in a - future libcurl release. - - libcurl will ask for the compressed methods it knows of, and if that - isn't any, it will not ask for transfer-encoding at all even if this - option is set to 1. - - */ - CINIT(TRANSFER_ENCODING, LONG, 207), - - /* Callback function for closing socket (instead of close(2)). The callback - should have type curl_closesocket_callback */ - CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208), - CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209), - - /* allow GSSAPI credential delegation */ - CINIT(GSSAPI_DELEGATION, LONG, 210), - - /* Set the name servers to use for DNS resolution */ - CINIT(DNS_SERVERS, STRINGPOINT, 211), - - /* Time-out accept operations (currently for FTP only) after this amount - of milliseconds. */ - CINIT(ACCEPTTIMEOUT_MS, LONG, 212), - - /* Set TCP keepalive */ - CINIT(TCP_KEEPALIVE, LONG, 213), - - /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ - CINIT(TCP_KEEPIDLE, LONG, 214), - CINIT(TCP_KEEPINTVL, LONG, 215), - - /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ - CINIT(SSL_OPTIONS, LONG, 216), - - /* Set the SMTP auth originator */ - CINIT(MAIL_AUTH, STRINGPOINT, 217), - - /* Enable/disable SASL initial response */ - CINIT(SASL_IR, LONG, 218), - - /* Function that will be called instead of the internal progress display - * function. This function should be defined as the curl_xferinfo_callback - * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ - CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219), - - /* The XOAUTH2 bearer token */ - CINIT(XOAUTH2_BEARER, STRINGPOINT, 220), - - /* Set the interface string to use as outgoing network - * interface for DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_INTERFACE, STRINGPOINT, 221), - - /* Set the local IPv4 address to use for outgoing DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_LOCAL_IP4, STRINGPOINT, 222), - - /* Set the local IPv4 address to use for outgoing DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_LOCAL_IP6, STRINGPOINT, 223), - - /* Set authentication options directly */ - CINIT(LOGIN_OPTIONS, STRINGPOINT, 224), - - /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ - CINIT(SSL_ENABLE_NPN, LONG, 225), - - /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ - CINIT(SSL_ENABLE_ALPN, LONG, 226), - - /* Time to wait for a response to a HTTP request containing an - * Expect: 100-continue header before sending the data anyway. */ - CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227), - - /* This points to a linked list of headers used for proxy requests only, - struct curl_slist kind */ - CINIT(PROXYHEADER, OBJECTPOINT, 228), - - /* Pass in a bitmask of "header options" */ - CINIT(HEADEROPT, LONG, 229), - - /* The public key in DER form used to validate the peer public key - this option is used only if SSL_VERIFYPEER is true */ - CINIT(PINNEDPUBLICKEY, STRINGPOINT, 230), - - /* Path to Unix domain socket */ - CINIT(UNIX_SOCKET_PATH, STRINGPOINT, 231), - - /* Set if we should verify the certificate status. */ - CINIT(SSL_VERIFYSTATUS, LONG, 232), - - /* Set if we should enable TLS false start. */ - CINIT(SSL_FALSESTART, LONG, 233), - - /* Do not squash dot-dot sequences */ - CINIT(PATH_AS_IS, LONG, 234), - - /* Proxy Service Name */ - CINIT(PROXY_SERVICE_NAME, STRINGPOINT, 235), - - /* Service Name */ - CINIT(SERVICE_NAME, STRINGPOINT, 236), - - /* Wait/don't wait for pipe/mutex to clarify */ - CINIT(PIPEWAIT, LONG, 237), - - /* Set the protocol used when curl is given a URL without a protocol */ - CINIT(DEFAULT_PROTOCOL, STRINGPOINT, 238), - - /* Set stream weight, 1 - 256 (default is 16) */ - CINIT(STREAM_WEIGHT, LONG, 239), - - /* Set stream dependency on another CURL handle */ - CINIT(STREAM_DEPENDS, OBJECTPOINT, 240), - - /* Set E-xclusive stream dependency on another CURL handle */ - CINIT(STREAM_DEPENDS_E, OBJECTPOINT, 241), - - /* Do not send any tftp option requests to the server */ - CINIT(TFTP_NO_OPTIONS, LONG, 242), - - /* Linked-list of host:port:connect-to-host:connect-to-port, - overrides the URL's host:port (only for the network layer) */ - CINIT(CONNECT_TO, OBJECTPOINT, 243), - - /* Set TCP Fast Open */ - CINIT(TCP_FASTOPEN, LONG, 244), - - /* Continue to send data if the server responds early with an - * HTTP status code >= 300 */ - CINIT(KEEP_SENDING_ON_ERROR, LONG, 245), - - /* The CApath or CAfile used to validate the proxy certificate - this option is used only if PROXY_SSL_VERIFYPEER is true */ - CINIT(PROXY_CAINFO, STRINGPOINT, 246), - - /* The CApath directory used to validate the proxy certificate - this option is used only if PROXY_SSL_VERIFYPEER is true */ - CINIT(PROXY_CAPATH, STRINGPOINT, 247), - - /* Set if we should verify the proxy in ssl handshake, - set 1 to verify. */ - CINIT(PROXY_SSL_VERIFYPEER, LONG, 248), - - /* Set if we should verify the Common name from the proxy certificate in ssl - * handshake, set 1 to check existence, 2 to ensure that it matches - * the provided hostname. */ - CINIT(PROXY_SSL_VERIFYHOST, LONG, 249), - - /* What version to specifically try to use for proxy. - See CURL_SSLVERSION defines below. */ - CINIT(PROXY_SSLVERSION, LONG, 250), - - /* Set a username for authenticated TLS for proxy */ - CINIT(PROXY_TLSAUTH_USERNAME, STRINGPOINT, 251), - - /* Set a password for authenticated TLS for proxy */ - CINIT(PROXY_TLSAUTH_PASSWORD, STRINGPOINT, 252), - - /* Set authentication type for authenticated TLS for proxy */ - CINIT(PROXY_TLSAUTH_TYPE, STRINGPOINT, 253), - - /* name of the file keeping your private SSL-certificate for proxy */ - CINIT(PROXY_SSLCERT, STRINGPOINT, 254), - - /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for - proxy */ - CINIT(PROXY_SSLCERTTYPE, STRINGPOINT, 255), - - /* name of the file keeping your private SSL-key for proxy */ - CINIT(PROXY_SSLKEY, STRINGPOINT, 256), - - /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for - proxy */ - CINIT(PROXY_SSLKEYTYPE, STRINGPOINT, 257), - - /* password for the SSL private key for proxy */ - CINIT(PROXY_KEYPASSWD, STRINGPOINT, 258), - - /* Specify which SSL ciphers to use for proxy */ - CINIT(PROXY_SSL_CIPHER_LIST, STRINGPOINT, 259), - - /* CRL file for proxy */ - CINIT(PROXY_CRLFILE, STRINGPOINT, 260), - - /* Enable/disable specific SSL features with a bitmask for proxy, see - CURLSSLOPT_* */ - CINIT(PROXY_SSL_OPTIONS, LONG, 261), - - /* Name of pre proxy to use. */ - CINIT(PRE_PROXY, STRINGPOINT, 262), - - /* The public key in DER form used to validate the proxy public key - this option is used only if PROXY_SSL_VERIFYPEER is true */ - CINIT(PROXY_PINNEDPUBLICKEY, STRINGPOINT, 263), - - /* Path to an abstract Unix domain socket */ - CINIT(ABSTRACT_UNIX_SOCKET, STRINGPOINT, 264), - - /* Suppress proxy CONNECT response headers from user callbacks */ - CINIT(SUPPRESS_CONNECT_HEADERS, LONG, 265), - - /* The request target, instead of extracted from the URL */ - CINIT(REQUEST_TARGET, STRINGPOINT, 266), - - /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ - CINIT(SOCKS5_AUTH, LONG, 267), - - /* Enable/disable SSH compression */ - CINIT(SSH_COMPRESSION, LONG, 268), - - /* Post MIME data. */ - CINIT(MIMEPOST, OBJECTPOINT, 269), - - CURLOPT_LASTENTRY /* the last unused */ -} CURLoption; - -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all - the obsolete stuff removed! */ - -/* Backwards compatibility with older names */ -/* These are scheduled to disappear by 2011 */ - -/* This was added in version 7.19.1 */ -#define CURLOPT_POST301 CURLOPT_POSTREDIR - -/* These are scheduled to disappear by 2009 */ - -/* The following were added in 7.17.0 */ -#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD -#define CURLOPT_FTPAPPEND CURLOPT_APPEND -#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY -#define CURLOPT_FTP_SSL CURLOPT_USE_SSL - -/* The following were added earlier */ - -#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD -#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL - -#else -/* This is set if CURL_NO_OLDIES is defined at compile-time */ -#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ -#endif - - - /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host - name resolves addresses using more than one IP protocol version, this - option might be handy to force libcurl to use a specific IP version. */ -#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP - versions that your system allows */ -#define CURL_IPRESOLVE_V4 1 /* resolve to IPv4 addresses */ -#define CURL_IPRESOLVE_V6 2 /* resolve to IPv6 addresses */ - - /* three convenient "aliases" that follow the name scheme better */ -#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER - - /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ -enum { - CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd - like the library to choose the best possible - for us! */ - CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ - CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ - CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ - CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ - CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 - Upgrade */ - - CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ -}; - -/* Convenience definition simple because the name of the version is HTTP/2 and - not 2.0. The 2_0 version of the enum name was set while the version was - still planned to be 2.0 and we stick to it for compatibility. */ -#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 - -/* - * Public API enums for RTSP requests - */ -enum { - CURL_RTSPREQ_NONE, /* first in list */ - CURL_RTSPREQ_OPTIONS, - CURL_RTSPREQ_DESCRIBE, - CURL_RTSPREQ_ANNOUNCE, - CURL_RTSPREQ_SETUP, - CURL_RTSPREQ_PLAY, - CURL_RTSPREQ_PAUSE, - CURL_RTSPREQ_TEARDOWN, - CURL_RTSPREQ_GET_PARAMETER, - CURL_RTSPREQ_SET_PARAMETER, - CURL_RTSPREQ_RECORD, - CURL_RTSPREQ_RECEIVE, - CURL_RTSPREQ_LAST /* last in list */ -}; - - /* These enums are for use with the CURLOPT_NETRC option. */ -enum CURL_NETRC_OPTION { - CURL_NETRC_IGNORED, /* The .netrc will never be read. - * This is the default. */ - CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred - * to one in the .netrc. */ - CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. - * Unless one is set programmatically, the .netrc - * will be queried. */ - CURL_NETRC_LAST -}; - -enum { - CURL_SSLVERSION_DEFAULT, - CURL_SSLVERSION_TLSv1, /* TLS 1.x */ - CURL_SSLVERSION_SSLv2, - CURL_SSLVERSION_SSLv3, - CURL_SSLVERSION_TLSv1_0, - CURL_SSLVERSION_TLSv1_1, - CURL_SSLVERSION_TLSv1_2, - CURL_SSLVERSION_TLSv1_3, - - CURL_SSLVERSION_LAST /* never use, keep last */ -}; - -enum { - CURL_SSLVERSION_MAX_NONE = 0, - CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), - CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), - CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), - CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), - CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), - - /* never use, keep last */ - CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) -}; - -enum CURL_TLSAUTH { - CURL_TLSAUTH_NONE, - CURL_TLSAUTH_SRP, - CURL_TLSAUTH_LAST /* never use, keep last */ -}; - -/* symbols to use with CURLOPT_POSTREDIR. - CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 - can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 - | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ - -#define CURL_REDIR_GET_ALL 0 -#define CURL_REDIR_POST_301 1 -#define CURL_REDIR_POST_302 2 -#define CURL_REDIR_POST_303 4 -#define CURL_REDIR_POST_ALL \ - (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) - -typedef enum { - CURL_TIMECOND_NONE, - - CURL_TIMECOND_IFMODSINCE, - CURL_TIMECOND_IFUNMODSINCE, - CURL_TIMECOND_LASTMOD, - - CURL_TIMECOND_LAST -} curl_TimeCond; - -/* Special size_t value signaling a zero-terminated string. */ -#define CURL_ZERO_TERMINATED ((size_t) -1) - -/* curl_strequal() and curl_strnequal() are subject for removal in a future - release */ -CURL_EXTERN int curl_strequal(const char *s1, const char *s2); -CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); - -/* Mime/form handling support. */ -typedef struct curl_mime_s curl_mime; /* Mime context. */ -typedef struct curl_mimepart_s curl_mimepart; /* Mime part context. */ - -/* - * NAME curl_mime_init() - * - * DESCRIPTION - * - * Create a mime context and return its handle. The easy parameter is the - * target handle. - */ -CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); - -/* - * NAME curl_mime_free() - * - * DESCRIPTION - * - * release a mime handle and its substructures. - */ -CURL_EXTERN void curl_mime_free(curl_mime *mime); - -/* - * NAME curl_mime_addpart() - * - * DESCRIPTION - * - * Append a new empty part to the given mime context and return a handle to - * the created part. - */ -CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); - -/* - * NAME curl_mime_name() - * - * DESCRIPTION - * - * Set mime/form part name. - */ -CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); - -/* - * NAME curl_mime_filename() - * - * DESCRIPTION - * - * Set mime part remote file name. - */ -CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, - const char *filename); - -/* - * NAME curl_mime_type() - * - * DESCRIPTION - * - * Set mime part type. - */ -CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); - -/* - * NAME curl_mime_encoder() - * - * DESCRIPTION - * - * Set mime data transfer encoder. - */ -CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, - const char *encoding); - -/* - * NAME curl_mime_data() - * - * DESCRIPTION - * - * Set mime part data source from memory data, - */ -CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, - const char *data, size_t datasize); - -/* - * NAME curl_mime_filedata() - * - * DESCRIPTION - * - * Set mime part data source from named file. - */ -CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, - const char *filename); - -/* - * NAME curl_mime_data_cb() - * - * DESCRIPTION - * - * Set mime part data source from callback function. - */ -CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, - curl_off_t datasize, - curl_read_callback readfunc, - curl_seek_callback seekfunc, - curl_free_callback freefunc, - void *arg); - -/* - * NAME curl_mime_subparts() - * - * DESCRIPTION - * - * Set mime part data source from subparts. - */ -CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, - curl_mime *subparts); -/* - * NAME curl_mime_headers() - * - * DESCRIPTION - * - * Set mime part headers. - */ -CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, - struct curl_slist *headers, - int take_ownership); - -/* Old form API. */ -/* name is uppercase CURLFORM_ */ -#ifdef CFINIT -#undef CFINIT -#endif - -#ifdef CURL_ISOCPP -#define CFINIT(name) CURLFORM_ ## name -#else -/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ -#define CFINIT(name) CURLFORM_/**/name -#endif - -typedef enum { - CFINIT(NOTHING), /********* the first one is unused ************/ - - /* */ - CFINIT(COPYNAME), - CFINIT(PTRNAME), - CFINIT(NAMELENGTH), - CFINIT(COPYCONTENTS), - CFINIT(PTRCONTENTS), - CFINIT(CONTENTSLENGTH), - CFINIT(FILECONTENT), - CFINIT(ARRAY), - CFINIT(OBSOLETE), - CFINIT(FILE), - - CFINIT(BUFFER), - CFINIT(BUFFERPTR), - CFINIT(BUFFERLENGTH), - - CFINIT(CONTENTTYPE), - CFINIT(CONTENTHEADER), - CFINIT(FILENAME), - CFINIT(END), - CFINIT(OBSOLETE2), - - CFINIT(STREAM), - CFINIT(CONTENTLEN), /* added in 7.46.0, provide a curl_off_t length */ - - CURLFORM_LASTENTRY /* the last unused */ -} CURLformoption; - -#undef CFINIT /* done */ - -/* structure to be used as parameter for CURLFORM_ARRAY */ -struct curl_forms { - CURLformoption option; - const char *value; -}; - -/* use this for multipart formpost building */ -/* Returns code for curl_formadd() - * - * Returns: - * CURL_FORMADD_OK on success - * CURL_FORMADD_MEMORY if the FormInfo allocation fails - * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form - * CURL_FORMADD_NULL if a null pointer was given for a char - * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed - * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used - * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) - * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated - * CURL_FORMADD_MEMORY if some allocation for string copying failed. - * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array - * - ***************************************************************************/ -typedef enum { - CURL_FORMADD_OK, /* first, no error */ - - CURL_FORMADD_MEMORY, - CURL_FORMADD_OPTION_TWICE, - CURL_FORMADD_NULL, - CURL_FORMADD_UNKNOWN_OPTION, - CURL_FORMADD_INCOMPLETE, - CURL_FORMADD_ILLEGAL_ARRAY, - CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ - - CURL_FORMADD_LAST /* last */ -} CURLFORMcode; - -/* - * NAME curl_formadd() - * - * DESCRIPTION - * - * Pretty advanced function for building multi-part formposts. Each invoke - * adds one part that together construct a full post. Then use - * CURLOPT_HTTPPOST to send it off to libcurl. - */ -CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost, - struct curl_httppost **last_post, - ...); - -/* - * callback function for curl_formget() - * The void *arg pointer will be the one passed as second argument to - * curl_formget(). - * The character buffer passed to it must not be freed. - * Should return the buffer length passed to it as the argument "len" on - * success. - */ -typedef size_t (*curl_formget_callback)(void *arg, const char *buf, - size_t len); - -/* - * NAME curl_formget() - * - * DESCRIPTION - * - * Serialize a curl_httppost struct built with curl_formadd(). - * Accepts a void pointer as second argument which will be passed to - * the curl_formget_callback function. - * Returns 0 on success. - */ -CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg, - curl_formget_callback append); -/* - * NAME curl_formfree() - * - * DESCRIPTION - * - * Free a multipart formpost previously built with curl_formadd(). - */ -CURL_EXTERN void curl_formfree(struct curl_httppost *form); - -/* - * NAME curl_getenv() - * - * DESCRIPTION - * - * Returns a malloc()'ed string that MUST be curl_free()ed after usage is - * complete. DEPRECATED - see lib/README.curlx - */ -CURL_EXTERN char *curl_getenv(const char *variable); - -/* - * NAME curl_version() - * - * DESCRIPTION - * - * Returns a static ascii string of the libcurl version. - */ -CURL_EXTERN char *curl_version(void); - -/* - * NAME curl_easy_escape() - * - * DESCRIPTION - * - * Escapes URL strings (converts all letters consider illegal in URLs to their - * %XX versions). This function returns a new allocated string or NULL if an - * error occurred. - */ -CURL_EXTERN char *curl_easy_escape(CURL *handle, - const char *string, - int length); - -/* the previous version: */ -CURL_EXTERN char *curl_escape(const char *string, - int length); - - -/* - * NAME curl_easy_unescape() - * - * DESCRIPTION - * - * Unescapes URL encoding in strings (converts all %XX codes to their 8bit - * versions). This function returns a new allocated string or NULL if an error - * occurred. - * Conversion Note: On non-ASCII platforms the ASCII %XX codes are - * converted into the host encoding. - */ -CURL_EXTERN char *curl_easy_unescape(CURL *handle, - const char *string, - int length, - int *outlength); - -/* the previous version */ -CURL_EXTERN char *curl_unescape(const char *string, - int length); - -/* - * NAME curl_free() - * - * DESCRIPTION - * - * Provided for de-allocation in the same translation unit that did the - * allocation. Added in libcurl 7.10 - */ -CURL_EXTERN void curl_free(void *p); - -/* - * NAME curl_global_init() - * - * DESCRIPTION - * - * curl_global_init() should be invoked exactly once for each application that - * uses libcurl and before any call of other libcurl functions. - * - * This function is not thread-safe! - */ -CURL_EXTERN CURLcode curl_global_init(long flags); - -/* - * NAME curl_global_init_mem() - * - * DESCRIPTION - * - * curl_global_init() or curl_global_init_mem() should be invoked exactly once - * for each application that uses libcurl. This function can be used to - * initialize libcurl and set user defined memory management callback - * functions. Users can implement memory management routines to check for - * memory leaks, check for mis-use of the curl library etc. User registered - * callback routines with be invoked by this library instead of the system - * memory management routines like malloc, free etc. - */ -CURL_EXTERN CURLcode curl_global_init_mem(long flags, - curl_malloc_callback m, - curl_free_callback f, - curl_realloc_callback r, - curl_strdup_callback s, - curl_calloc_callback c); - -/* - * NAME curl_global_cleanup() - * - * DESCRIPTION - * - * curl_global_cleanup() should be invoked exactly once for each application - * that uses libcurl - */ -CURL_EXTERN void curl_global_cleanup(void); - -/* linked-list structure for the CURLOPT_QUOTE option (and other) */ -struct curl_slist { - char *data; - struct curl_slist *next; -}; - -/* - * NAME curl_global_sslset() - * - * DESCRIPTION - * - * When built with multiple SSL backends, curl_global_sslset() allows to - * choose one. This function can only be called once, and it must be called - * *before* curl_global_init(). - * - * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The - * backend can also be specified via the name parameter (passing -1 as id). - * If both id and name are specified, the name will be ignored. If neither id - * nor name are specified, the function will fail with - * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the - * NULL-terminated list of available backends. - * - * Upon success, the function returns CURLSSLSET_OK. - * - * If the specified SSL backend is not available, the function returns - * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated - * list of available SSL backends. - * - * The SSL backend can be set only once. If it has already been set, a - * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. - */ - -typedef struct { - curl_sslbackend id; - const char *name; -} curl_ssl_backend; - -typedef enum { - CURLSSLSET_OK = 0, - CURLSSLSET_UNKNOWN_BACKEND, - CURLSSLSET_TOO_LATE, - CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ -} CURLsslset; - -CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, - const curl_ssl_backend ***avail); - -/* - * NAME curl_slist_append() - * - * DESCRIPTION - * - * Appends a string to a linked list. If no list exists, it will be created - * first. Returns the new list, after appending. - */ -CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *, - const char *); - -/* - * NAME curl_slist_free_all() - * - * DESCRIPTION - * - * free a previously built curl_slist. - */ -CURL_EXTERN void curl_slist_free_all(struct curl_slist *); - -/* - * NAME curl_getdate() - * - * DESCRIPTION - * - * Returns the time, in seconds since 1 Jan 1970 of the time string given in - * the first argument. The time argument in the second parameter is unused - * and should be set to NULL. - */ -CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); - -/* info about the certificate chain, only for OpenSSL builds. Asked - for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ -struct curl_certinfo { - int num_of_certs; /* number of certificates with information */ - struct curl_slist **certinfo; /* for each index in this array, there's a - linked list with textual information in the - format "name: value" */ -}; - -/* Information about the SSL library used and the respective internal SSL - handle, which can be used to obtain further information regarding the - connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ -struct curl_tlssessioninfo { - curl_sslbackend backend; - void *internals; -}; - -#define CURLINFO_STRING 0x100000 -#define CURLINFO_LONG 0x200000 -#define CURLINFO_DOUBLE 0x300000 -#define CURLINFO_SLIST 0x400000 -#define CURLINFO_PTR 0x400000 /* same as SLIST */ -#define CURLINFO_SOCKET 0x500000 -#define CURLINFO_OFF_T 0x600000 -#define CURLINFO_MASK 0x0fffff -#define CURLINFO_TYPEMASK 0xf00000 - -typedef enum { - CURLINFO_NONE, /* first, never use this */ - CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, - CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, - CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, - CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, - CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, - CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, - CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, - CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, - CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, - CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, - CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, - CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, - CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, - CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, - CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, - CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, - CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, - CURLINFO_FILETIME = CURLINFO_LONG + 14, - CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, - CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, - CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, - CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, - CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, - CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, - CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, - CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, - CURLINFO_PRIVATE = CURLINFO_STRING + 21, - CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, - CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, - CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, - CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, - CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, - CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, - CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, - CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, - CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, - CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, - CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, - CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, - CURLINFO_CERTINFO = CURLINFO_PTR + 34, - CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, - CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, - CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, - CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, - CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, - CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, - CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, - CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, - CURLINFO_TLS_SESSION = CURLINFO_PTR + 43, - CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, - CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, - CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, - CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, - CURLINFO_PROTOCOL = CURLINFO_LONG + 48, - CURLINFO_SCHEME = CURLINFO_STRING + 49, - /* Fill in new entries below here! */ - - CURLINFO_LASTONE = 49 -} CURLINFO; - -/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as - CURLINFO_HTTP_CODE */ -#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE - -typedef enum { - CURLCLOSEPOLICY_NONE, /* first, never use this */ - - CURLCLOSEPOLICY_OLDEST, - CURLCLOSEPOLICY_LEAST_RECENTLY_USED, - CURLCLOSEPOLICY_LEAST_TRAFFIC, - CURLCLOSEPOLICY_SLOWEST, - CURLCLOSEPOLICY_CALLBACK, - - CURLCLOSEPOLICY_LAST /* last, never use this */ -} curl_closepolicy; - -#define CURL_GLOBAL_SSL (1<<0) /* no purpose since since 7.57.0 */ -#define CURL_GLOBAL_WIN32 (1<<1) -#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) -#define CURL_GLOBAL_NOTHING 0 -#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL -#define CURL_GLOBAL_ACK_EINTR (1<<2) - - -/***************************************************************************** - * Setup defines, protos etc for the sharing stuff. - */ - -/* Different data locks for a single share */ -typedef enum { - CURL_LOCK_DATA_NONE = 0, - /* CURL_LOCK_DATA_SHARE is used internally to say that - * the locking is just made to change the internal state of the share - * itself. - */ - CURL_LOCK_DATA_SHARE, - CURL_LOCK_DATA_COOKIE, - CURL_LOCK_DATA_DNS, - CURL_LOCK_DATA_SSL_SESSION, - CURL_LOCK_DATA_CONNECT, - CURL_LOCK_DATA_LAST -} curl_lock_data; - -/* Different lock access types */ -typedef enum { - CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ - CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ - CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ - CURL_LOCK_ACCESS_LAST /* never use */ -} curl_lock_access; - -typedef void (*curl_lock_function)(CURL *handle, - curl_lock_data data, - curl_lock_access locktype, - void *userptr); -typedef void (*curl_unlock_function)(CURL *handle, - curl_lock_data data, - void *userptr); - - -typedef enum { - CURLSHE_OK, /* all is fine */ - CURLSHE_BAD_OPTION, /* 1 */ - CURLSHE_IN_USE, /* 2 */ - CURLSHE_INVALID, /* 3 */ - CURLSHE_NOMEM, /* 4 out of memory */ - CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ - CURLSHE_LAST /* never use */ -} CURLSHcode; - -typedef enum { - CURLSHOPT_NONE, /* don't use */ - CURLSHOPT_SHARE, /* specify a data type to share */ - CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ - CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ - CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ - CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock - callback functions */ - CURLSHOPT_LAST /* never use */ -} CURLSHoption; - -CURL_EXTERN CURLSH *curl_share_init(void); -CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...); -CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *); - -/**************************************************************************** - * Structures for querying information about the curl library at runtime. - */ - -typedef enum { - CURLVERSION_FIRST, - CURLVERSION_SECOND, - CURLVERSION_THIRD, - CURLVERSION_FOURTH, - CURLVERSION_FIFTH, - CURLVERSION_LAST /* never actually use this */ -} CURLversion; - -/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by - basically all programs ever that want to get version information. It is - meant to be a built-in version number for what kind of struct the caller - expects. If the struct ever changes, we redefine the NOW to another enum - from above. */ -#define CURLVERSION_NOW CURLVERSION_FIFTH - -typedef struct { - CURLversion age; /* age of the returned struct */ - const char *version; /* LIBCURL_VERSION */ - unsigned int version_num; /* LIBCURL_VERSION_NUM */ - const char *host; /* OS/host/cpu/machine when configured */ - int features; /* bitmask, see defines below */ - const char *ssl_version; /* human readable string */ - long ssl_version_num; /* not used anymore, always 0 */ - const char *libz_version; /* human readable string */ - /* protocols is terminated by an entry with a NULL protoname */ - const char * const *protocols; - - /* The fields below this were added in CURLVERSION_SECOND */ - const char *ares; - int ares_num; - - /* This field was added in CURLVERSION_THIRD */ - const char *libidn; - - /* These field were added in CURLVERSION_FOURTH */ - - /* Same as '_libiconv_version' if built with HAVE_ICONV */ - int iconv_ver_num; - - const char *libssh_version; /* human readable string */ - - /* These fields were added in CURLVERSION_FIFTH */ - - unsigned int brotli_ver_num; /* Numeric Brotli version - (MAJOR << 24) | (MINOR << 12) | PATCH */ - const char *brotli_version; /* human readable string. */ - -} curl_version_info_data; - -#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ -#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported - (deprecated) */ -#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ -#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ -#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ -#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported - (deprecated) */ -#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ -#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ -#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ -#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ -#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are - supported */ -#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ -#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ -#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ -#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ -#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper - is supported */ -#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ -#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ -#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ -#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ -#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used - for cookie domain verification */ -#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ -#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ -#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ - - /* - * NAME curl_version_info() - * - * DESCRIPTION - * - * This function returns a pointer to a static copy of the version info - * struct. See above. - */ -CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); - -/* - * NAME curl_easy_strerror() - * - * DESCRIPTION - * - * The curl_easy_strerror function may be used to turn a CURLcode value - * into the equivalent human readable error string. This is useful - * for printing meaningful error messages. - */ -CURL_EXTERN const char *curl_easy_strerror(CURLcode); - -/* - * NAME curl_share_strerror() - * - * DESCRIPTION - * - * The curl_share_strerror function may be used to turn a CURLSHcode value - * into the equivalent human readable error string. This is useful - * for printing meaningful error messages. - */ -CURL_EXTERN const char *curl_share_strerror(CURLSHcode); - -/* - * NAME curl_easy_pause() - * - * DESCRIPTION - * - * The curl_easy_pause function pauses or unpauses transfers. Select the new - * state by setting the bitmask, use the convenience defines below. - * - */ -CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); - -#define CURLPAUSE_RECV (1<<0) -#define CURLPAUSE_RECV_CONT (0) - -#define CURLPAUSE_SEND (1<<2) -#define CURLPAUSE_SEND_CONT (0) - -#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) -#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) - -#ifdef __cplusplus -} -#endif - -/* unfortunately, the easy.h and multi.h include files need options and info - stuff before they can be included! */ -#include "easy.h" /* nothing in curl is fun without the easy stuff */ -#include "multi.h" - -/* the typechecker doesn't work in C++ (yet) */ -#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ - ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ - !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) -#include "typecheck-gcc.h" -#else -#if defined(__STDC__) && (__STDC__ >= 1) -/* This preprocessor magic that replaces a call with the exact same call is - only done to make sure application authors pass exactly three arguments - to these functions. */ -#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) -#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) -#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) -#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) -#endif /* __STDC__ >= 1 */ -#endif /* gcc >= 4.3 && !__cplusplus */ - -#endif /* __CURL_CURL_H */ diff --git a/ext/curl-7.58.0/Win32/include/curl/curlver.h b/ext/curl-7.58.0/Win32/include/curl/curlver.h deleted file mode 100644 index 6d93cc118..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/curlver.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef __CURL_CURLVER_H -#define __CURL_CURLVER_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* This header file contains nothing but libcurl version info, generated by - a script at release-time. This was made its own header file in 7.11.2 */ - -/* This is the global package copyright */ -#define LIBCURL_COPYRIGHT "1996 - 2017 Daniel Stenberg, ." - -/* This is the version number of the libcurl package from which this header - file origins: */ -#define LIBCURL_VERSION "7.58.0" - -/* The numeric version number is also available "in parts" by using these - defines: */ -#define LIBCURL_VERSION_MAJOR 7 -#define LIBCURL_VERSION_MINOR 58 -#define LIBCURL_VERSION_PATCH 0 - -/* This is the numeric version of the libcurl version number, meant for easier - parsing and comparions by programs. The LIBCURL_VERSION_NUM define will - always follow this syntax: - - 0xXXYYZZ - - Where XX, YY and ZZ are the main version, release and patch numbers in - hexadecimal (using 8 bits each). All three numbers are always represented - using two digits. 1.2 would appear as "0x010200" while version 9.11.7 - appears as "0x090b07". - - This 6-digit (24 bits) hexadecimal number does not show pre-release number, - and it is always a greater number in a more recent release. It makes - comparisons with greater than and less than work. - - Note: This define is the full hex number and _does not_ use the - CURL_VERSION_BITS() macro since curl's own configure script greps for it - and needs it to contain the full number. -*/ -#define LIBCURL_VERSION_NUM 0x073a00 - -/* - * This is the date and time when the full source package was created. The - * timestamp is not stored in git, as the timestamp is properly set in the - * tarballs by the maketgz script. - * - * The format of the date follows this template: - * - * "2007-11-23" - */ -#define LIBCURL_TIMESTAMP "2018-01-24" - -#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|z) -#define CURL_AT_LEAST_VERSION(x,y,z) \ - (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) - -#endif /* __CURL_CURLVER_H */ diff --git a/ext/curl-7.58.0/Win32/include/curl/easy.h b/ext/curl-7.58.0/Win32/include/curl/easy.h deleted file mode 100644 index 752c5049f..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/easy.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef __CURL_EASY_H -#define __CURL_EASY_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ -#ifdef __cplusplus -extern "C" { -#endif - -CURL_EXTERN CURL *curl_easy_init(void); -CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); -CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); -CURL_EXTERN void curl_easy_cleanup(CURL *curl); - -/* - * NAME curl_easy_getinfo() - * - * DESCRIPTION - * - * Request internal information from the curl session with this function. The - * third argument MUST be a pointer to a long, a pointer to a char * or a - * pointer to a double (as the documentation describes elsewhere). The data - * pointed to will be filled in accordingly and can be relied upon only if the - * function returns CURLE_OK. This function is intended to get used *AFTER* a - * performed transfer, all results from this function are undefined until the - * transfer is completed. - */ -CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); - - -/* - * NAME curl_easy_duphandle() - * - * DESCRIPTION - * - * Creates a new curl session handle with the same options set for the handle - * passed in. Duplicating a handle could only be a matter of cloning data and - * options, internal state info and things like persistent connections cannot - * be transferred. It is useful in multithreaded applications when you can run - * curl_easy_duphandle() for each new thread to avoid a series of identical - * curl_easy_setopt() invokes in every thread. - */ -CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); - -/* - * NAME curl_easy_reset() - * - * DESCRIPTION - * - * Re-initializes a CURL handle to the default values. This puts back the - * handle to the same state as it was in when it was just created. - * - * It does keep: live connections, the Session ID cache, the DNS cache and the - * cookies. - */ -CURL_EXTERN void curl_easy_reset(CURL *curl); - -/* - * NAME curl_easy_recv() - * - * DESCRIPTION - * - * Receives data from the connected socket. Use after successful - * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. - */ -CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, - size_t *n); - -/* - * NAME curl_easy_send() - * - * DESCRIPTION - * - * Sends data over the connected socket. Use after successful - * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. - */ -CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, - size_t buflen, size_t *n); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext/curl-7.58.0/Win32/include/curl/mprintf.h b/ext/curl-7.58.0/Win32/include/curl/mprintf.h deleted file mode 100644 index e20f546e1..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/mprintf.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __CURL_MPRINTF_H -#define __CURL_MPRINTF_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -#include -#include /* needed for FILE */ -#include "curl.h" /* for CURL_EXTERN */ - -#ifdef __cplusplus -extern "C" { -#endif - -CURL_EXTERN int curl_mprintf(const char *format, ...); -CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...); -CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...); -CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, - const char *format, ...); -CURL_EXTERN int curl_mvprintf(const char *format, va_list args); -CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args); -CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args); -CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, - const char *format, va_list args); -CURL_EXTERN char *curl_maprintf(const char *format, ...); -CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); - -#ifdef __cplusplus -} -#endif - -#endif /* __CURL_MPRINTF_H */ diff --git a/ext/curl-7.58.0/Win32/include/curl/multi.h b/ext/curl-7.58.0/Win32/include/curl/multi.h deleted file mode 100644 index 911c91dd1..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/multi.h +++ /dev/null @@ -1,439 +0,0 @@ -#ifndef __CURL_MULTI_H -#define __CURL_MULTI_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ -/* - This is an "external" header file. Don't give away any internals here! - - GOALS - - o Enable a "pull" interface. The application that uses libcurl decides where - and when to ask libcurl to get/send data. - - o Enable multiple simultaneous transfers in the same thread without making it - complicated for the application. - - o Enable the application to select() on its own file descriptors and curl's - file descriptors simultaneous easily. - -*/ - -/* - * This header file should not really need to include "curl.h" since curl.h - * itself includes this file and we expect user applications to do #include - * without the need for especially including multi.h. - * - * For some reason we added this include here at one point, and rather than to - * break existing (wrongly written) libcurl applications, we leave it as-is - * but with this warning attached. - */ -#include "curl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) -typedef struct Curl_multi CURLM; -#else -typedef void CURLM; -#endif - -typedef enum { - CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or - curl_multi_socket*() soon */ - CURLM_OK, - CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ - CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ - CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ - CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ - CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ - CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ - CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was - attempted to get added - again */ - CURLM_LAST -} CURLMcode; - -/* just to make code nicer when using curl_multi_socket() you can now check - for CURLM_CALL_MULTI_SOCKET too in the same style it works for - curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ -#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM - -/* bitmask bits for CURLMOPT_PIPELINING */ -#define CURLPIPE_NOTHING 0L -#define CURLPIPE_HTTP1 1L -#define CURLPIPE_MULTIPLEX 2L - -typedef enum { - CURLMSG_NONE, /* first, not used */ - CURLMSG_DONE, /* This easy handle has completed. 'result' contains - the CURLcode of the transfer */ - CURLMSG_LAST /* last, not used */ -} CURLMSG; - -struct CURLMsg { - CURLMSG msg; /* what this message means */ - CURL *easy_handle; /* the handle it concerns */ - union { - void *whatever; /* message-specific data */ - CURLcode result; /* return code for transfer */ - } data; -}; -typedef struct CURLMsg CURLMsg; - -/* Based on poll(2) structure and values. - * We don't use pollfd and POLL* constants explicitly - * to cover platforms without poll(). */ -#define CURL_WAIT_POLLIN 0x0001 -#define CURL_WAIT_POLLPRI 0x0002 -#define CURL_WAIT_POLLOUT 0x0004 - -struct curl_waitfd { - curl_socket_t fd; - short events; - short revents; /* not supported yet */ -}; - -/* - * Name: curl_multi_init() - * - * Desc: inititalize multi-style curl usage - * - * Returns: a new CURLM handle to use in all 'curl_multi' functions. - */ -CURL_EXTERN CURLM *curl_multi_init(void); - -/* - * Name: curl_multi_add_handle() - * - * Desc: add a standard curl handle to the multi stack - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, - CURL *curl_handle); - - /* - * Name: curl_multi_remove_handle() - * - * Desc: removes a curl handle from the multi stack again - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, - CURL *curl_handle); - - /* - * Name: curl_multi_fdset() - * - * Desc: Ask curl for its fd_set sets. The app can use these to select() or - * poll() on. We want curl_multi_perform() called as soon as one of - * them are ready. - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, - fd_set *read_fd_set, - fd_set *write_fd_set, - fd_set *exc_fd_set, - int *max_fd); - -/* - * Name: curl_multi_wait() - * - * Desc: Poll on all fds within a CURLM set as well as any - * additional fds passed to the function. - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, - struct curl_waitfd extra_fds[], - unsigned int extra_nfds, - int timeout_ms, - int *ret); - - /* - * Name: curl_multi_perform() - * - * Desc: When the app thinks there's data available for curl it calls this - * function to read/write whatever there is right now. This returns - * as soon as the reads and writes are done. This function does not - * require that there actually is data available for reading or that - * data can be written, it can be called just in case. It returns - * the number of handles that still transfer data in the second - * argument's integer-pointer. - * - * Returns: CURLMcode type, general multi error code. *NOTE* that this only - * returns errors etc regarding the whole multi stack. There might - * still have occurred problems on invidual transfers even when this - * returns OK. - */ -CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, - int *running_handles); - - /* - * Name: curl_multi_cleanup() - * - * Desc: Cleans up and removes a whole multi stack. It does not free or - * touch any individual easy handles in any way. We need to define - * in what state those handles will be if this function is called - * in the middle of a transfer. - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); - -/* - * Name: curl_multi_info_read() - * - * Desc: Ask the multi handle if there's any messages/informationals from - * the individual transfers. Messages include informationals such as - * error code from the transfer or just the fact that a transfer is - * completed. More details on these should be written down as well. - * - * Repeated calls to this function will return a new struct each - * time, until a special "end of msgs" struct is returned as a signal - * that there is no more to get at this point. - * - * The data the returned pointer points to will not survive calling - * curl_multi_cleanup(). - * - * The 'CURLMsg' struct is meant to be very simple and only contain - * very basic information. If more involved information is wanted, - * we will provide the particular "transfer handle" in that struct - * and that should/could/would be used in subsequent - * curl_easy_getinfo() calls (or similar). The point being that we - * must never expose complex structs to applications, as then we'll - * undoubtably get backwards compatibility problems in the future. - * - * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out - * of structs. It also writes the number of messages left in the - * queue (after this read) in the integer the second argument points - * to. - */ -CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, - int *msgs_in_queue); - -/* - * Name: curl_multi_strerror() - * - * Desc: The curl_multi_strerror function may be used to turn a CURLMcode - * value into the equivalent human readable error string. This is - * useful for printing meaningful error messages. - * - * Returns: A pointer to a zero-terminated error message. - */ -CURL_EXTERN const char *curl_multi_strerror(CURLMcode); - -/* - * Name: curl_multi_socket() and - * curl_multi_socket_all() - * - * Desc: An alternative version of curl_multi_perform() that allows the - * application to pass in one of the file descriptors that have been - * detected to have "action" on them and let libcurl perform. - * See man page for details. - */ -#define CURL_POLL_NONE 0 -#define CURL_POLL_IN 1 -#define CURL_POLL_OUT 2 -#define CURL_POLL_INOUT 3 -#define CURL_POLL_REMOVE 4 - -#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD - -#define CURL_CSELECT_IN 0x01 -#define CURL_CSELECT_OUT 0x02 -#define CURL_CSELECT_ERR 0x04 - -typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ - curl_socket_t s, /* socket */ - int what, /* see above */ - void *userp, /* private callback - pointer */ - void *socketp); /* private socket - pointer */ -/* - * Name: curl_multi_timer_callback - * - * Desc: Called by libcurl whenever the library detects a change in the - * maximum number of milliseconds the app is allowed to wait before - * curl_multi_socket() or curl_multi_perform() must be called - * (to allow libcurl's timed events to take place). - * - * Returns: The callback should return zero. - */ -typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ - long timeout_ms, /* see above */ - void *userp); /* private callback - pointer */ - -CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, - int *running_handles); - -CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, - curl_socket_t s, - int ev_bitmask, - int *running_handles); - -CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, - int *running_handles); - -#ifndef CURL_ALLOW_OLD_MULTI_SOCKET -/* This macro below was added in 7.16.3 to push users who recompile to use - the new curl_multi_socket_action() instead of the old curl_multi_socket() -*/ -#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) -#endif - -/* - * Name: curl_multi_timeout() - * - * Desc: Returns the maximum number of milliseconds the app is allowed to - * wait before curl_multi_socket() or curl_multi_perform() must be - * called (to allow libcurl's timed events to take place). - * - * Returns: CURLM error code. - */ -CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, - long *milliseconds); - -#undef CINIT /* re-using the same name as in curl.h */ - -#ifdef CURL_ISOCPP -#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num -#else -/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ -#define LONG CURLOPTTYPE_LONG -#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT -#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT -#define OFF_T CURLOPTTYPE_OFF_T -#define CINIT(name,type,number) CURLMOPT_/**/name = type + number -#endif - -typedef enum { - /* This is the socket callback function pointer */ - CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1), - - /* This is the argument passed to the socket callback */ - CINIT(SOCKETDATA, OBJECTPOINT, 2), - - /* set to 1 to enable pipelining for this multi handle */ - CINIT(PIPELINING, LONG, 3), - - /* This is the timer callback function pointer */ - CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4), - - /* This is the argument passed to the timer callback */ - CINIT(TIMERDATA, OBJECTPOINT, 5), - - /* maximum number of entries in the connection cache */ - CINIT(MAXCONNECTS, LONG, 6), - - /* maximum number of (pipelining) connections to one host */ - CINIT(MAX_HOST_CONNECTIONS, LONG, 7), - - /* maximum number of requests in a pipeline */ - CINIT(MAX_PIPELINE_LENGTH, LONG, 8), - - /* a connection with a content-length longer than this - will not be considered for pipelining */ - CINIT(CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9), - - /* a connection with a chunk length longer than this - will not be considered for pipelining */ - CINIT(CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10), - - /* a list of site names(+port) that are blacklisted from - pipelining */ - CINIT(PIPELINING_SITE_BL, OBJECTPOINT, 11), - - /* a list of server types that are blacklisted from - pipelining */ - CINIT(PIPELINING_SERVER_BL, OBJECTPOINT, 12), - - /* maximum number of open connections in total */ - CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13), - - /* This is the server push callback function pointer */ - CINIT(PUSHFUNCTION, FUNCTIONPOINT, 14), - - /* This is the argument passed to the server push callback */ - CINIT(PUSHDATA, OBJECTPOINT, 15), - - CURLMOPT_LASTENTRY /* the last unused */ -} CURLMoption; - - -/* - * Name: curl_multi_setopt() - * - * Desc: Sets options for the multi handle. - * - * Returns: CURLM error code. - */ -CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, - CURLMoption option, ...); - - -/* - * Name: curl_multi_assign() - * - * Desc: This function sets an association in the multi handle between the - * given socket and a private pointer of the application. This is - * (only) useful for curl_multi_socket uses. - * - * Returns: CURLM error code. - */ -CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, - curl_socket_t sockfd, void *sockp); - - -/* - * Name: curl_push_callback - * - * Desc: This callback gets called when a new stream is being pushed by the - * server. It approves or denies the new stream. - * - * Returns: CURL_PUSH_OK or CURL_PUSH_DENY. - */ -#define CURL_PUSH_OK 0 -#define CURL_PUSH_DENY 1 - -struct curl_pushheaders; /* forward declaration only */ - -CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, - size_t num); -CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, - const char *name); - -typedef int (*curl_push_callback)(CURL *parent, - CURL *easy, - size_t num_headers, - struct curl_pushheaders *headers, - void *userp); - -#ifdef __cplusplus -} /* end of extern "C" */ -#endif - -#endif diff --git a/ext/curl-7.58.0/Win32/include/curl/stdcheaders.h b/ext/curl-7.58.0/Win32/include/curl/stdcheaders.h deleted file mode 100644 index 027b6f421..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/stdcheaders.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __STDC_HEADERS_H -#define __STDC_HEADERS_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -#include - -size_t fread(void *, size_t, size_t, FILE *); -size_t fwrite(const void *, size_t, size_t, FILE *); - -int strcasecmp(const char *, const char *); -int strncasecmp(const char *, const char *, size_t); - -#endif /* __STDC_HEADERS_H */ diff --git a/ext/curl-7.58.0/Win32/include/curl/system.h b/ext/curl-7.58.0/Win32/include/curl/system.h deleted file mode 100644 index 07bbd9ca9..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/system.h +++ /dev/null @@ -1,473 +0,0 @@ -#ifndef __CURL_SYSTEM_H -#define __CURL_SYSTEM_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* - * Try to keep one section per platform, compiler and architecture, otherwise, - * if an existing section is reused for a different one and later on the - * original is adjusted, probably the piggybacking one can be adversely - * changed. - * - * In order to differentiate between platforms/compilers/architectures use - * only compiler built in predefined preprocessor symbols. - * - * curl_off_t - * ---------- - * - * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit - * wide signed integral data type. The width of this data type must remain - * constant and independent of any possible large file support settings. - * - * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit - * wide signed integral data type if there is no 64-bit type. - * - * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall - * only be violated if off_t is the only 64-bit data type available and the - * size of off_t is independent of large file support settings. Keep your - * build on the safe side avoiding an off_t gating. If you have a 64-bit - * off_t then take for sure that another 64-bit data type exists, dig deeper - * and you will find it. - * - */ - -#if defined(__DJGPP__) || defined(__GO32__) -# if defined(__DJGPP__) && (__DJGPP__ > 1) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__SALFORDC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__BORLANDC__) -# if (__BORLANDC__ < 0x520) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__TURBOC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__WATCOMC__) -# if defined(__386__) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__POCC__) -# if (__POCC__ < 280) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# elif defined(_MSC_VER) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__LCC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__SYMBIAN32__) -# if defined(__EABI__) /* Treat all ARM compilers equally */ -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__CW32__) -# pragma longlong on -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__VC32__) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int - -#elif defined(__MWERKS__) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(_WIN32_WCE) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__MINGW32__) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_WS2TCPIP_H 1 - -#elif defined(__VMS) -# if defined(__VAX) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int - -#elif defined(__OS400__) -# if defined(__ILEC400__) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# endif - -#elif defined(__MVS__) -# if defined(__IBMC__) || defined(__IBMCPP__) -# if defined(_ILP32) -# elif defined(_LP64) -# endif -# if defined(_LONG_LONG) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# endif - -#elif defined(__370__) -# if defined(__IBMC__) || defined(__IBMCPP__) -# if defined(_ILP32) -# elif defined(_LP64) -# endif -# if defined(_LONG_LONG) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# endif - -#elif defined(TPF) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__TINYC__) /* also known as tcc */ - -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 - -#elif defined(__SUNPRO_C) /* Oracle Solaris Studio */ -# if !defined(__LP64) && (defined(__ILP32) || \ - defined(__i386) || defined(__sparcv8)) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__LP64) || \ - defined(__amd64) || defined(__sparcv9) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 - -/* ===================================== */ -/* KEEP MSVC THE PENULTIMATE ENTRY */ -/* ===================================== */ - -#elif defined(_MSC_VER) -# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -/* ===================================== */ -/* KEEP GENERIC GCC THE LAST ENTRY */ -/* ===================================== */ - -#elif defined(__GNUC__) -# if !defined(__LP64__) && \ - (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ - defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ - defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ - defined(__XTENSA__) || \ - (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ - (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__LP64__) || \ - defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ - (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ - (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 - -#else -/* generic "safe guess" on old 32 bit style */ -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int -#endif - -#ifdef _AIX -/* AIX needs */ -#define CURL_PULL_SYS_POLL_H -#endif - - -/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ -/* ws2tcpip.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_WS2TCPIP_H -# include -# include -# include -#endif - -/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ -/* sys/types.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_SYS_TYPES_H -# include -#endif - -/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ -/* sys/socket.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_SYS_SOCKET_H -# include -#endif - -/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ -/* sys/poll.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_SYS_POLL_H -# include -#endif - -/* Data type definition of curl_socklen_t. */ -#ifdef CURL_TYPEOF_CURL_SOCKLEN_T - typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; -#endif - -/* Data type definition of curl_off_t. */ - -#ifdef CURL_TYPEOF_CURL_OFF_T - typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; -#endif - -/* - * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow - * these to be visible and exported by the external libcurl interface API, - * while also making them visible to the library internals, simply including - * curl_setup.h, without actually needing to include curl.h internally. - * If some day this section would grow big enough, all this should be moved - * to its own header file. - */ - -/* - * Figure out if we can use the ## preprocessor operator, which is supported - * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ - * or __cplusplus so we need to carefully check for them too. - */ - -#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ - defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ - defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ - defined(__ILEC400__) - /* This compiler is believed to have an ISO compatible preprocessor */ -#define CURL_ISOCPP -#else - /* This compiler is believed NOT to have an ISO compatible preprocessor */ -#undef CURL_ISOCPP -#endif - -/* - * Macros for minimum-width signed and unsigned curl_off_t integer constants. - */ - -#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) -# define __CURL_OFF_T_C_HLPR2(x) x -# define __CURL_OFF_T_C_HLPR1(x) __CURL_OFF_T_C_HLPR2(x) -# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \ - __CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) -# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \ - __CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) -#else -# ifdef CURL_ISOCPP -# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix -# else -# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix -# endif -# define __CURL_OFF_T_C_HLPR1(Val,Suffix) __CURL_OFF_T_C_HLPR2(Val,Suffix) -# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) -# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) -#endif - -#endif /* __CURL_SYSTEM_H */ diff --git a/ext/curl-7.58.0/Win32/include/curl/typecheck-gcc.h b/ext/curl-7.58.0/Win32/include/curl/typecheck-gcc.h deleted file mode 100644 index 10c74c764..000000000 --- a/ext/curl-7.58.0/Win32/include/curl/typecheck-gcc.h +++ /dev/null @@ -1,683 +0,0 @@ -#ifndef __CURL_TYPECHECK_GCC_H -#define __CURL_TYPECHECK_GCC_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* wraps curl_easy_setopt() with typechecking */ - -/* To add a new kind of warning, add an - * if(_curl_is_sometype_option(_curl_opt)) - * if(!_curl_is_sometype(value)) - * _curl_easy_setopt_err_sometype(); - * block and define _curl_is_sometype_option, _curl_is_sometype and - * _curl_easy_setopt_err_sometype below - * - * NOTE: We use two nested 'if' statements here instead of the && operator, in - * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x - * when compiling with -Wlogical-op. - * - * To add an option that uses the same type as an existing option, you'll just - * need to extend the appropriate _curl_*_option macro - */ -#define curl_easy_setopt(handle, option, value) \ -__extension__ ({ \ - __typeof__(option) _curl_opt = option; \ - if(__builtin_constant_p(_curl_opt)) { \ - if(_curl_is_long_option(_curl_opt)) \ - if(!_curl_is_long(value)) \ - _curl_easy_setopt_err_long(); \ - if(_curl_is_off_t_option(_curl_opt)) \ - if(!_curl_is_off_t(value)) \ - _curl_easy_setopt_err_curl_off_t(); \ - if(_curl_is_string_option(_curl_opt)) \ - if(!_curl_is_string(value)) \ - _curl_easy_setopt_err_string(); \ - if(_curl_is_write_cb_option(_curl_opt)) \ - if(!_curl_is_write_cb(value)) \ - _curl_easy_setopt_err_write_callback(); \ - if((_curl_opt) == CURLOPT_READFUNCTION) \ - if(!_curl_is_read_cb(value)) \ - _curl_easy_setopt_err_read_cb(); \ - if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ - if(!_curl_is_ioctl_cb(value)) \ - _curl_easy_setopt_err_ioctl_cb(); \ - if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ - if(!_curl_is_sockopt_cb(value)) \ - _curl_easy_setopt_err_sockopt_cb(); \ - if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ - if(!_curl_is_opensocket_cb(value)) \ - _curl_easy_setopt_err_opensocket_cb(); \ - if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ - if(!_curl_is_progress_cb(value)) \ - _curl_easy_setopt_err_progress_cb(); \ - if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ - if(!_curl_is_debug_cb(value)) \ - _curl_easy_setopt_err_debug_cb(); \ - if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ - if(!_curl_is_ssl_ctx_cb(value)) \ - _curl_easy_setopt_err_ssl_ctx_cb(); \ - if(_curl_is_conv_cb_option(_curl_opt)) \ - if(!_curl_is_conv_cb(value)) \ - _curl_easy_setopt_err_conv_cb(); \ - if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ - if(!_curl_is_seek_cb(value)) \ - _curl_easy_setopt_err_seek_cb(); \ - if(_curl_is_cb_data_option(_curl_opt)) \ - if(!_curl_is_cb_data(value)) \ - _curl_easy_setopt_err_cb_data(); \ - if((_curl_opt) == CURLOPT_ERRORBUFFER) \ - if(!_curl_is_error_buffer(value)) \ - _curl_easy_setopt_err_error_buffer(); \ - if((_curl_opt) == CURLOPT_STDERR) \ - if(!_curl_is_FILE(value)) \ - _curl_easy_setopt_err_FILE(); \ - if(_curl_is_postfields_option(_curl_opt)) \ - if(!_curl_is_postfields(value)) \ - _curl_easy_setopt_err_postfields(); \ - if((_curl_opt) == CURLOPT_HTTPPOST) \ - if(!_curl_is_arr((value), struct curl_httppost)) \ - _curl_easy_setopt_err_curl_httpost(); \ - if((_curl_opt) == CURLOPT_MIMEPOST) \ - if(!_curl_is_ptr((value), curl_mime)) \ - _curl_easy_setopt_err_curl_mimepost(); \ - if(_curl_is_slist_option(_curl_opt)) \ - if(!_curl_is_arr((value), struct curl_slist)) \ - _curl_easy_setopt_err_curl_slist(); \ - if((_curl_opt) == CURLOPT_SHARE) \ - if(!_curl_is_ptr((value), CURLSH)) \ - _curl_easy_setopt_err_CURLSH(); \ - } \ - curl_easy_setopt(handle, _curl_opt, value); \ -}) - -/* wraps curl_easy_getinfo() with typechecking */ -/* FIXME: don't allow const pointers */ -#define curl_easy_getinfo(handle, info, arg) \ -__extension__ ({ \ - __typeof__(info) _curl_info = info; \ - if(__builtin_constant_p(_curl_info)) { \ - if(_curl_is_string_info(_curl_info)) \ - if(!_curl_is_arr((arg), char *)) \ - _curl_easy_getinfo_err_string(); \ - if(_curl_is_long_info(_curl_info)) \ - if(!_curl_is_arr((arg), long)) \ - _curl_easy_getinfo_err_long(); \ - if(_curl_is_double_info(_curl_info)) \ - if(!_curl_is_arr((arg), double)) \ - _curl_easy_getinfo_err_double(); \ - if(_curl_is_slist_info(_curl_info)) \ - if(!_curl_is_arr((arg), struct curl_slist *)) \ - _curl_easy_getinfo_err_curl_slist(); \ - if(_curl_is_tlssessioninfo_info(_curl_info)) \ - if(!_curl_is_arr((arg), struct curl_tlssessioninfo *)) \ - _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ - if(_curl_is_certinfo_info(_curl_info)) \ - if(!_curl_is_arr((arg), struct curl_certinfo *)) \ - _curl_easy_getinfo_err_curl_certinfo(); \ - if(_curl_is_socket_info(_curl_info)) \ - if(!_curl_is_arr((arg), curl_socket_t)) \ - _curl_easy_getinfo_err_curl_socket(); \ - if(_curl_is_off_t_info(_curl_info)) \ - if(!_curl_is_arr((arg), curl_off_t)) \ - _curl_easy_getinfo_err_curl_off_t(); \ - } \ - curl_easy_getinfo(handle, _curl_info, arg); \ -}) - -/* TODO: typechecking for curl_share_setopt() and curl_multi_setopt(), - * for now just make sure that the functions are called with three - * arguments - */ -#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) -#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) - - -/* the actual warnings, triggered by calling the _curl_easy_setopt_err* - * functions */ - -/* To define a new warning, use _CURL_WARNING(identifier, "message") */ -#define _CURL_WARNING(id, message) \ - static void __attribute__((__warning__(message))) \ - __attribute__((__unused__)) __attribute__((__noinline__)) \ - id(void) { __asm__(""); } - -_CURL_WARNING(_curl_easy_setopt_err_long, - "curl_easy_setopt expects a long argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_off_t, - "curl_easy_setopt expects a curl_off_t argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_string, - "curl_easy_setopt expects a " - "string ('char *' or char[]) argument for this option" - ) -_CURL_WARNING(_curl_easy_setopt_err_write_callback, - "curl_easy_setopt expects a curl_write_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_read_cb, - "curl_easy_setopt expects a curl_read_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_ioctl_cb, - "curl_easy_setopt expects a curl_ioctl_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_sockopt_cb, - "curl_easy_setopt expects a curl_sockopt_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_opensocket_cb, - "curl_easy_setopt expects a " - "curl_opensocket_callback argument for this option" - ) -_CURL_WARNING(_curl_easy_setopt_err_progress_cb, - "curl_easy_setopt expects a curl_progress_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_debug_cb, - "curl_easy_setopt expects a curl_debug_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_ssl_ctx_cb, - "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_conv_cb, - "curl_easy_setopt expects a curl_conv_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_seek_cb, - "curl_easy_setopt expects a curl_seek_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_cb_data, - "curl_easy_setopt expects a " - "private data pointer as argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_error_buffer, - "curl_easy_setopt expects a " - "char buffer of CURL_ERROR_SIZE as argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_FILE, - "curl_easy_setopt expects a 'FILE *' argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_postfields, - "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_httpost, - "curl_easy_setopt expects a 'struct curl_httppost *' " - "argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_mimepost, - "curl_easy_setopt expects a 'curl_mime *' " - "argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_slist, - "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_CURLSH, - "curl_easy_setopt expects a CURLSH* argument for this option") - -_CURL_WARNING(_curl_easy_getinfo_err_string, - "curl_easy_getinfo expects a pointer to 'char *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_long, - "curl_easy_getinfo expects a pointer to long for this info") -_CURL_WARNING(_curl_easy_getinfo_err_double, - "curl_easy_getinfo expects a pointer to double for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_slist, - "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, - "curl_easy_getinfo expects a pointer to " - "'struct curl_tlssessioninfo *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_certinfo, - "curl_easy_getinfo expects a pointer to " - "'struct curl_certinfo *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_socket, - "curl_easy_getinfo expects a pointer to curl_socket_t for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_off_t, - "curl_easy_getinfo expects a pointer to curl_off_t for this info") - -/* groups of curl_easy_setops options that take the same type of argument */ - -/* To add a new option to one of the groups, just add - * (option) == CURLOPT_SOMETHING - * to the or-expression. If the option takes a long or curl_off_t, you don't - * have to do anything - */ - -/* evaluates to true if option takes a long argument */ -#define _curl_is_long_option(option) \ - (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) - -#define _curl_is_off_t_option(option) \ - ((option) > CURLOPTTYPE_OFF_T) - -/* evaluates to true if option takes a char* argument */ -#define _curl_is_string_option(option) \ - ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ - (option) == CURLOPT_ACCEPT_ENCODING || \ - (option) == CURLOPT_CAINFO || \ - (option) == CURLOPT_CAPATH || \ - (option) == CURLOPT_COOKIE || \ - (option) == CURLOPT_COOKIEFILE || \ - (option) == CURLOPT_COOKIEJAR || \ - (option) == CURLOPT_COOKIELIST || \ - (option) == CURLOPT_CRLFILE || \ - (option) == CURLOPT_CUSTOMREQUEST || \ - (option) == CURLOPT_DEFAULT_PROTOCOL || \ - (option) == CURLOPT_DNS_INTERFACE || \ - (option) == CURLOPT_DNS_LOCAL_IP4 || \ - (option) == CURLOPT_DNS_LOCAL_IP6 || \ - (option) == CURLOPT_DNS_SERVERS || \ - (option) == CURLOPT_EGDSOCKET || \ - (option) == CURLOPT_FTPPORT || \ - (option) == CURLOPT_FTP_ACCOUNT || \ - (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ - (option) == CURLOPT_INTERFACE || \ - (option) == CURLOPT_ISSUERCERT || \ - (option) == CURLOPT_KEYPASSWD || \ - (option) == CURLOPT_KRBLEVEL || \ - (option) == CURLOPT_LOGIN_OPTIONS || \ - (option) == CURLOPT_MAIL_AUTH || \ - (option) == CURLOPT_MAIL_FROM || \ - (option) == CURLOPT_NETRC_FILE || \ - (option) == CURLOPT_NOPROXY || \ - (option) == CURLOPT_PASSWORD || \ - (option) == CURLOPT_PINNEDPUBLICKEY || \ - (option) == CURLOPT_PRE_PROXY || \ - (option) == CURLOPT_PROXY || \ - (option) == CURLOPT_PROXYPASSWORD || \ - (option) == CURLOPT_PROXYUSERNAME || \ - (option) == CURLOPT_PROXYUSERPWD || \ - (option) == CURLOPT_PROXY_CAINFO || \ - (option) == CURLOPT_PROXY_CAPATH || \ - (option) == CURLOPT_PROXY_CRLFILE || \ - (option) == CURLOPT_PROXY_KEYPASSWD || \ - (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ - (option) == CURLOPT_PROXY_SERVICE_NAME || \ - (option) == CURLOPT_PROXY_SSLCERT || \ - (option) == CURLOPT_PROXY_SSLCERTTYPE || \ - (option) == CURLOPT_PROXY_SSLKEY || \ - (option) == CURLOPT_PROXY_SSLKEYTYPE || \ - (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ - (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ - (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ - (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ - (option) == CURLOPT_RANDOM_FILE || \ - (option) == CURLOPT_RANGE || \ - (option) == CURLOPT_REFERER || \ - (option) == CURLOPT_RTSP_SESSION_ID || \ - (option) == CURLOPT_RTSP_STREAM_URI || \ - (option) == CURLOPT_RTSP_TRANSPORT || \ - (option) == CURLOPT_SERVICE_NAME || \ - (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ - (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ - (option) == CURLOPT_SSH_KNOWNHOSTS || \ - (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ - (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ - (option) == CURLOPT_SSLCERT || \ - (option) == CURLOPT_SSLCERTTYPE || \ - (option) == CURLOPT_SSLENGINE || \ - (option) == CURLOPT_SSLKEY || \ - (option) == CURLOPT_SSLKEYTYPE || \ - (option) == CURLOPT_SSL_CIPHER_LIST || \ - (option) == CURLOPT_TLSAUTH_PASSWORD || \ - (option) == CURLOPT_TLSAUTH_TYPE || \ - (option) == CURLOPT_TLSAUTH_USERNAME || \ - (option) == CURLOPT_UNIX_SOCKET_PATH || \ - (option) == CURLOPT_URL || \ - (option) == CURLOPT_USERAGENT || \ - (option) == CURLOPT_USERNAME || \ - (option) == CURLOPT_USERPWD || \ - (option) == CURLOPT_XOAUTH2_BEARER || \ - 0) - -/* evaluates to true if option takes a curl_write_callback argument */ -#define _curl_is_write_cb_option(option) \ - ((option) == CURLOPT_HEADERFUNCTION || \ - (option) == CURLOPT_WRITEFUNCTION) - -/* evaluates to true if option takes a curl_conv_callback argument */ -#define _curl_is_conv_cb_option(option) \ - ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ - (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ - (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) - -/* evaluates to true if option takes a data argument to pass to a callback */ -#define _curl_is_cb_data_option(option) \ - ((option) == CURLOPT_CHUNK_DATA || \ - (option) == CURLOPT_CLOSESOCKETDATA || \ - (option) == CURLOPT_DEBUGDATA || \ - (option) == CURLOPT_FNMATCH_DATA || \ - (option) == CURLOPT_HEADERDATA || \ - (option) == CURLOPT_INTERLEAVEDATA || \ - (option) == CURLOPT_IOCTLDATA || \ - (option) == CURLOPT_OPENSOCKETDATA || \ - (option) == CURLOPT_PRIVATE || \ - (option) == CURLOPT_PROGRESSDATA || \ - (option) == CURLOPT_READDATA || \ - (option) == CURLOPT_SEEKDATA || \ - (option) == CURLOPT_SOCKOPTDATA || \ - (option) == CURLOPT_SSH_KEYDATA || \ - (option) == CURLOPT_SSL_CTX_DATA || \ - (option) == CURLOPT_WRITEDATA || \ - 0) - -/* evaluates to true if option takes a POST data argument (void* or char*) */ -#define _curl_is_postfields_option(option) \ - ((option) == CURLOPT_POSTFIELDS || \ - (option) == CURLOPT_COPYPOSTFIELDS || \ - 0) - -/* evaluates to true if option takes a struct curl_slist * argument */ -#define _curl_is_slist_option(option) \ - ((option) == CURLOPT_HTTP200ALIASES || \ - (option) == CURLOPT_HTTPHEADER || \ - (option) == CURLOPT_MAIL_RCPT || \ - (option) == CURLOPT_POSTQUOTE || \ - (option) == CURLOPT_PREQUOTE || \ - (option) == CURLOPT_PROXYHEADER || \ - (option) == CURLOPT_QUOTE || \ - (option) == CURLOPT_RESOLVE || \ - (option) == CURLOPT_TELNETOPTIONS || \ - 0) - -/* groups of curl_easy_getinfo infos that take the same type of argument */ - -/* evaluates to true if info expects a pointer to char * argument */ -#define _curl_is_string_info(info) \ - (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG) - -/* evaluates to true if info expects a pointer to long argument */ -#define _curl_is_long_info(info) \ - (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) - -/* evaluates to true if info expects a pointer to double argument */ -#define _curl_is_double_info(info) \ - (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) - -/* true if info expects a pointer to struct curl_slist * argument */ -#define _curl_is_slist_info(info) \ - (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) - -/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ -#define _curl_is_tlssessioninfo_info(info) \ - (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) - -/* true if info expects a pointer to struct curl_certinfo * argument */ -#define _curl_is_certinfo_info(info) ((info) == CURLINFO_CERTINFO) - -/* true if info expects a pointer to struct curl_socket_t argument */ -#define _curl_is_socket_info(info) \ - (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) - -/* true if info expects a pointer to curl_off_t argument */ -#define _curl_is_off_t_info(info) \ - (CURLINFO_OFF_T < (info)) - - -/* typecheck helpers -- check whether given expression has requested type*/ - -/* For pointers, you can use the _curl_is_ptr/_curl_is_arr macros, - * otherwise define a new macro. Search for __builtin_types_compatible_p - * in the GCC manual. - * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is - * the actual expression passed to the curl_easy_setopt macro. This - * means that you can only apply the sizeof and __typeof__ operators, no - * == or whatsoever. - */ - -/* XXX: should evaluate to true iff expr is a pointer */ -#define _curl_is_any_ptr(expr) \ - (sizeof(expr) == sizeof(void *)) - -/* evaluates to true if expr is NULL */ -/* XXX: must not evaluate expr, so this check is not accurate */ -#define _curl_is_NULL(expr) \ - (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) - -/* evaluates to true if expr is type*, const type* or NULL */ -#define _curl_is_ptr(expr, type) \ - (_curl_is_NULL(expr) || \ - __builtin_types_compatible_p(__typeof__(expr), type *) || \ - __builtin_types_compatible_p(__typeof__(expr), const type *)) - -/* evaluates to true if expr is one of type[], type*, NULL or const type* */ -#define _curl_is_arr(expr, type) \ - (_curl_is_ptr((expr), type) || \ - __builtin_types_compatible_p(__typeof__(expr), type [])) - -/* evaluates to true if expr is a string */ -#define _curl_is_string(expr) \ - (_curl_is_arr((expr), char) || \ - _curl_is_arr((expr), signed char) || \ - _curl_is_arr((expr), unsigned char)) - -/* evaluates to true if expr is a long (no matter the signedness) - * XXX: for now, int is also accepted (and therefore short and char, which - * are promoted to int when passed to a variadic function) */ -#define _curl_is_long(expr) \ - (__builtin_types_compatible_p(__typeof__(expr), long) || \ - __builtin_types_compatible_p(__typeof__(expr), signed long) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ - __builtin_types_compatible_p(__typeof__(expr), int) || \ - __builtin_types_compatible_p(__typeof__(expr), signed int) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ - __builtin_types_compatible_p(__typeof__(expr), short) || \ - __builtin_types_compatible_p(__typeof__(expr), signed short) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ - __builtin_types_compatible_p(__typeof__(expr), char) || \ - __builtin_types_compatible_p(__typeof__(expr), signed char) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned char)) - -/* evaluates to true if expr is of type curl_off_t */ -#define _curl_is_off_t(expr) \ - (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) - -/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ -/* XXX: also check size of an char[] array? */ -#define _curl_is_error_buffer(expr) \ - (_curl_is_NULL(expr) || \ - __builtin_types_compatible_p(__typeof__(expr), char *) || \ - __builtin_types_compatible_p(__typeof__(expr), char[])) - -/* evaluates to true if expr is of type (const) void* or (const) FILE* */ -#if 0 -#define _curl_is_cb_data(expr) \ - (_curl_is_ptr((expr), void) || \ - _curl_is_ptr((expr), FILE)) -#else /* be less strict */ -#define _curl_is_cb_data(expr) \ - _curl_is_any_ptr(expr) -#endif - -/* evaluates to true if expr is of type FILE* */ -#define _curl_is_FILE(expr) \ - (_curl_is_NULL(expr) || \ - (__builtin_types_compatible_p(__typeof__(expr), FILE *))) - -/* evaluates to true if expr can be passed as POST data (void* or char*) */ -#define _curl_is_postfields(expr) \ - (_curl_is_ptr((expr), void) || \ - _curl_is_arr((expr), char)) - -/* FIXME: the whole callback checking is messy... - * The idea is to tolerate char vs. void and const vs. not const - * pointers in arguments at least - */ -/* helper: __builtin_types_compatible_p distinguishes between functions and - * function pointers, hide it */ -#define _curl_callback_compatible(func, type) \ - (__builtin_types_compatible_p(__typeof__(func), type) || \ - __builtin_types_compatible_p(__typeof__(func) *, type)) - -/* evaluates to true if expr is of type curl_read_callback or "similar" */ -#define _curl_is_read_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), __typeof__(fread) *) || \ - _curl_callback_compatible((expr), curl_read_callback) || \ - _curl_callback_compatible((expr), _curl_read_callback1) || \ - _curl_callback_compatible((expr), _curl_read_callback2) || \ - _curl_callback_compatible((expr), _curl_read_callback3) || \ - _curl_callback_compatible((expr), _curl_read_callback4) || \ - _curl_callback_compatible((expr), _curl_read_callback5) || \ - _curl_callback_compatible((expr), _curl_read_callback6)) -typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); -typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); -typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); -typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); -typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); -typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); - -/* evaluates to true if expr is of type curl_write_callback or "similar" */ -#define _curl_is_write_cb(expr) \ - (_curl_is_read_cb(expr) || \ - _curl_callback_compatible((expr), __typeof__(fwrite) *) || \ - _curl_callback_compatible((expr), curl_write_callback) || \ - _curl_callback_compatible((expr), _curl_write_callback1) || \ - _curl_callback_compatible((expr), _curl_write_callback2) || \ - _curl_callback_compatible((expr), _curl_write_callback3) || \ - _curl_callback_compatible((expr), _curl_write_callback4) || \ - _curl_callback_compatible((expr), _curl_write_callback5) || \ - _curl_callback_compatible((expr), _curl_write_callback6)) -typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); -typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, - const void *); -typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); -typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); -typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, - const void *); -typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); - -/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ -#define _curl_is_ioctl_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_ioctl_callback) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback1) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback2) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback3) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback4)) -typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); -typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); -typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); -typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); - -/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ -#define _curl_is_sockopt_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_sockopt_callback) || \ - _curl_callback_compatible((expr), _curl_sockopt_callback1) || \ - _curl_callback_compatible((expr), _curl_sockopt_callback2)) -typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); -typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, - curlsocktype); - -/* evaluates to true if expr is of type curl_opensocket_callback or - "similar" */ -#define _curl_is_opensocket_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_opensocket_callback) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback1) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback2) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback3) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback4)) -typedef curl_socket_t (*_curl_opensocket_callback1) - (void *, curlsocktype, struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback2) - (void *, curlsocktype, const struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback3) - (const void *, curlsocktype, struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback4) - (const void *, curlsocktype, const struct curl_sockaddr *); - -/* evaluates to true if expr is of type curl_progress_callback or "similar" */ -#define _curl_is_progress_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_progress_callback) || \ - _curl_callback_compatible((expr), _curl_progress_callback1) || \ - _curl_callback_compatible((expr), _curl_progress_callback2)) -typedef int (*_curl_progress_callback1)(void *, - double, double, double, double); -typedef int (*_curl_progress_callback2)(const void *, - double, double, double, double); - -/* evaluates to true if expr is of type curl_debug_callback or "similar" */ -#define _curl_is_debug_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_debug_callback) || \ - _curl_callback_compatible((expr), _curl_debug_callback1) || \ - _curl_callback_compatible((expr), _curl_debug_callback2) || \ - _curl_callback_compatible((expr), _curl_debug_callback3) || \ - _curl_callback_compatible((expr), _curl_debug_callback4) || \ - _curl_callback_compatible((expr), _curl_debug_callback5) || \ - _curl_callback_compatible((expr), _curl_debug_callback6) || \ - _curl_callback_compatible((expr), _curl_debug_callback7) || \ - _curl_callback_compatible((expr), _curl_debug_callback8)) -typedef int (*_curl_debug_callback1) (CURL *, - curl_infotype, char *, size_t, void *); -typedef int (*_curl_debug_callback2) (CURL *, - curl_infotype, char *, size_t, const void *); -typedef int (*_curl_debug_callback3) (CURL *, - curl_infotype, const char *, size_t, void *); -typedef int (*_curl_debug_callback4) (CURL *, - curl_infotype, const char *, size_t, const void *); -typedef int (*_curl_debug_callback5) (CURL *, - curl_infotype, unsigned char *, size_t, void *); -typedef int (*_curl_debug_callback6) (CURL *, - curl_infotype, unsigned char *, size_t, const void *); -typedef int (*_curl_debug_callback7) (CURL *, - curl_infotype, const unsigned char *, size_t, void *); -typedef int (*_curl_debug_callback8) (CURL *, - curl_infotype, const unsigned char *, size_t, const void *); - -/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ -/* this is getting even messier... */ -#define _curl_is_ssl_ctx_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_ssl_ctx_callback) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback1) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback2) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback3) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback4) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback5) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback6) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback7) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback8)) -typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); -typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); -typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); -typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, - const void *); -#ifdef HEADER_SSL_H -/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX - * this will of course break if we're included before OpenSSL headers... - */ -typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX, void *); -typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX, const void *); -typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX, void *); -typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX, - const void *); -#else -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; -#endif - -/* evaluates to true if expr is of type curl_conv_callback or "similar" */ -#define _curl_is_conv_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_conv_callback) || \ - _curl_callback_compatible((expr), _curl_conv_callback1) || \ - _curl_callback_compatible((expr), _curl_conv_callback2) || \ - _curl_callback_compatible((expr), _curl_conv_callback3) || \ - _curl_callback_compatible((expr), _curl_conv_callback4)) -typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); -typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); -typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); -typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); - -/* evaluates to true if expr is of type curl_seek_callback or "similar" */ -#define _curl_is_seek_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_seek_callback) || \ - _curl_callback_compatible((expr), _curl_seek_callback1) || \ - _curl_callback_compatible((expr), _curl_seek_callback2)) -typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); -typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); - - -#endif /* __CURL_TYPECHECK_GCC_H */ diff --git a/ext/curl-7.58.0/Win32/lib/libcurl_a.lib b/ext/curl-7.58.0/Win32/lib/libcurl_a.lib deleted file mode 100644 index 241a0e8c7428fb15688e2d61d0bf358f5e9a6703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1890332 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⪚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%0A$x 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

= zMo#~Yoc_00_et;V zVusjH>?__Tri*>VH1Sq3RqQSH5_@8;`z>O!*h5SbyNiipH?ga@!uy1Gx%YAJGVfCF z67OT)#okA~i@c9`7kVG|F7Q6&o$r0nJJ0)ocdqw-?;P)J?=0_q-kIKey)(S`c&B^s z_D=K0ylviAZ;LnTjd&%m=$+~fdqZBq8}tUe&E6(2?``xpc>P|^>+^cO99u&rdn>$VZ@G7z*W@*N4PL!h z=hb@4ykotk-Z9?M-cjBX??`X4cZ9ddTj(wD=6f~XJa4Y|4sVWkxObR$sCS5Wuy>Gm zpf}q)z?*{A{82n5{ve(dzZXx4-{GXoZ^dKcQSpfQ4NmI*T0A6v zB_0&N6c31Bi2KFQ#eL#u;$HDnagX?kxLf>K+$DY_?i4>1cZeT|?~Ct=+r@Xqcf_~F zZDJSfZ&iybQ7I|}7G6aleBmLgUR-e?{tm(4bJ3f%8d_026kz{7h}D@x@plCO9g20A z!xa6_h;mP_pGgeS4pA$H=~c9eOp!eF|BptG@>d~YwlEUTxh5BPze+W2>Ep|5rn_ZQR-bQcGa3FT6TimY5}-B>5CXU@hZ z@?Dgb(&1UVERzRcCE~WN7Tj=>T~17Qa;x20ZVq?d*z)cI?$<>s-0N!9U)Hcp89Egt z{|{2BdiM3nVruD{i5!05*+<;yS)0Z;ZsQj#lay6Gn{YP_rK4BG47DLw$Y*3{(8=5+ zAtN*7J6Gn*=D{|>rBO>lN(W21Dk)-ooGCqJk2LlAri|_Z%88ze0(K=--;Fz9#yEFb z=4yOdU+NrcEc6z~hH-6k6TT&+$FRVjMMCjPdHD3P)YLtg9~f)KhvWE6R^FUc+qVfH zQ+E#Gu@Ua@c+FYaX zA^r&CsP`&l1K$V+M%51;G~SpW<-V)1O>`Zrn<+-)HS(Sk(wO3F!H3htMm1EZRk&S) zP~?~t3a*)+6-zL7;1YSDTydZc;Ea;2d_j>?S{bh{XaPthdZ40l8(nFNk&-*{THKE& z?TizZXTW>#BrY*D4-TW6Lj`ECY-XhDH^nR8nNRX|7UAb|vg4GY$rh$Ev@RNO%}gJth#3Mz)#l3YA(lOwS>jO zX*0wJo~5tni^*5vo|FN)?N$xj)FtY1XB>@cS+AN|#N%#BpEUi;Ea12Zt$s=5XiF3dX$hNkk(V zZWrjykz-g*4=}mUF)F6a2O_No%cLu1T5KJ-`A|M9(J1dN)b%9Kr;6ei15?jvGI3x- zbDw#QlQ8T}ktr-`Rc~n+o(tF1l-M=KWO8QY1Q{bQIHZ577LQ*RO_8W8CCSaO59`TP zE6?;}tdf}Zd@FnW*vR8TB*B<*n$U>s#@^H;xLmr-FRpEU+4prV9@z(yWh<<<>3Yt( z+(X4wxE#VzOA?n`Ra=6hlz%um7ABom--2zaPj#~fLy8rcBE?y=E{sSft;L|KoXo?i z3%`nP+!byM!gw??{xjmF98PA$ER(Fv)8;7&%OsEaO4ft!y7cld!6UAtc~J5ldY#aE zTa`oP3_OMLG)pix)Py%pYH@{Mz6UY6gGDoH;k0QHGhWopM8|b%E+8q7P$U4Sv5B&g zoGi)qvodYOJ6r|2(#;X9y`hyP)}Dh3Fp7b6PRWMQ!EewxWCZwWQ>Cy!el%1YA!Fl8 zI0l+UYveaB$4f0I`O^0#b8xMjsA*4{aN)GZleBe&lZbDq4J0-0u{J(w>TarJo%L`) zIa)L+v9fk2hvY-SwoK%*3mBO70O!z3CCpWqsK^&c{jpj;%_b~Ylb7R(#ru(wO%tG zH!0%jk>$A17{f9yb~fFixx|^G>6?aZWf@I2m)7FGYf5SKLwVEaj`&wgVNfz^Bth`9 zcIObkrmd}*CM0P+8Bv(bBf8F&F>!3e^DoYtGK%ps@I;Z&1kX&AaN0;6Gy){06-?Ra zk*lKXEp^$NYL#Q9q^pjThMA78+WGw@Zgny~>-lgMvmmO$&HGlf*@L(mo7!=eXg;?k zhY9G=s$yM!Xpj)Sv|z(C3`$KiIM*v;^oE~L=3L@cBu=5jHMBgZR8gC$BN|G^bMR$5 zVSoTC;wr;9o@c>qGWM3KzCqMDd*!m?F_E>}*}{>Nv7_VqTAGn! z=Mb4X3}3Y%dVxg2@D*xxp_pk|+7ZNb+qP6<%d92%uPx5bRK%3uwRZg}Hvt5!`& zMT*$j!v4VsqtKQPX{gl8Do(~$iMlE>b=o`Wu|ro$@|71$3)_nI2e?{RG^QpScv#B! z=8#{1enX9#=wwjTv?fiFYw+kc$;{;PJ1^qHvn|i}(9NAgBeH0$?DIO{%G@CErH%Pv zX+3nep|jdkZ)2pNp;exG%m!<572|0w=$N=67_OMm&H`+E_tu!8R*(#W+#u?`oY&C} zwv!(MqRR%^4|HJllR_7rJ#HJsIxrc^(BL3aVzQc}9$4*uMlZDyjcC@-=K|!R-@mP?H#iAA_W94E%lPmkOf2o|xvXQHxr50{7 zelRaxdz~fox|JxK?@rm2YEl_Es?L(7Ttbvc@rJ5!9#eJ2NlQsq^&E=qFDebkSllkE z!Q9qJk=>TC$WD7&LS?eJa!Zz!R#2G~&R9JeWjU>6B{UtwO2}GCXiCbWD7L0x5TheQ z%>}%}mLH*w7Oa2DH9#$;ve99=;X&b{TnliW5;qtV#>u2S9jn0{s+Z@W<;<1zwh!LE zQ{vKUlMG5!vLV{RsV&j&iSpEGg7VZhfwHD}r%;B*E=?}5%DU6SHi9B-AIbe4T9?(! z80=|lmn}4kQr>Q@g<=oZT)0D7RU7HV5M*gRtgTBYH1o|1w&LgMI2OWAKJKI zMkb7AKVc_etD^)=kuy~q7h-NyDxREiB-GKSyc^Or;CAr7+)6kqOsthpFlgy{hx&9P18@guu3q431U)H2Lnv%e&f5#!0mR9DvB8;QV>7PP%etg_|3~@e9nx zxdX;HYB+<^E1t|K4VXAJns^OXZeQqnYQ@=D)RRLP5=w=*DTI+;w+8t@NAKvmdi~VO zZFCUp1Wls_ezPgo9;F6>C%KlSql3t03m!Bqvb)oMf#pijw2Mg4;0=s|sSurC$>!fS zjI};eQq0Pzw&UwN7F$)9$k85bbW&AmMsAu4Tb9VgEEo~dwwDYt8D^ob5}l{N8vz5d$CHx0ewj_x_Mi(l&48>`9=hEu z7n3GhZU#i^3{oc3NWfCV@$lQ9$5N2AQ8c_ZW66W{H@ zjtB<^l+CFT$&#J|#(@DVamr%pSVV_jULf1Rk^>!L>ot872|^C ztD@s_!htW)MulETVJ~+V<1G{tO^O40aaZI6P0G>Ip-^`6dVx81irVePqH7+@!eX@7kg!}ut8_TQJ2)KIrK7nGhD&~hhE~(WK+Bk_8BccMO&D2O z8MeccK}I9j;|XNbUnHsn=8H*E9@`WMh_u2KjU51K4ejj^si(v$19#i#2pdjc7Pnkl z&k|WJx;y1)9Uxb|oURr%`AD5zr3^alj6h&KPQ(W*ZEk5Uj($v8*~1{*3;R!Za0Ir@ zK%~t@a>zboIxdiwX(WaU5J^AjBwA}~azRZgS*i8Sf*(062d}3-EVkbp$V(;Xe7J*#E4)_!p!4bzhKZw&k*kgWVrzysl{AYYsY=XA+sycMk8Gz+FQ=h z(e1HCZ|bjnUA#9y%94|lH^E~^vofa!yxWC`mHJd8Q1isItW1`;Kw|`w&(6YV-yy|G zcS1MKu9YIQG3hO%N>D7@k`&`QO=4L;djF-iqjla0K6WU=z0>d1E7J|FHW{8X{bpF= zA!`2F598F2EiuA+S%-hi=SNkk|LNP+<=<78kF1w_;2q~;ooCLw|6hOQ3p+sgBms|R zny2WLN=UR3jCsBKIDL%Awm%*#PCkY{&QsalSr4Vt<6C&*3@1eKZlQiLjgh^)BGJ{0 zc~BQ#3CH`M?D4b!luoh8hrqk|eXgByjh_|POmaoo%s8cOfEdGgl3lHO@0@cKlZ$b< zFf!%~7SfHHuW|-!W!!#t7jcvMd1>&df#>oclgv0(>41K&9G;WhAmYp=2 z;xbjQ8K<;y#Ni++@%TFHKo!3sH-h(m^V;h$Ni{FOwlz9zTN@slROw211eOmpCCJ(| z%8*|eAj z>8-sRyG?IWG{zB;m`wivAAOs$+^eB9;M3xcuAdAMN+pcPn0{d!aAZuA5KQ7RbM?!9 z@f9Z?heq%}oD?$D5{C1Ut|0_F!`<{Xl_q2jAaCjo;M}%hO!`$e@&}JYy44iQdZ$$P zsa~2lg~=hvxgjo*-9};>xoI=GM*i$ucKhQ_5+~qQ}fQlwsKg1&VP@m?#mUb5dh#Y?|2jvv=0S7zEhgG}XTWk_!`=ZeK4t$6ok zVGwERp^opV^fD?K*+@HvS82hH(-j zk&@!{43r+7bXttRNj5?y*{qktb;{wP;rWRI2$f7(94RFWC=K=`5(1MSpsC2|u8+spX$P`GO5sQy{60{L3020x)6^k#3sHX~rE+;STAH zvKpL!7vO8UkZ=$l)6Q%-Z-O@FLllQWhf0kDDMc`Cnycx~>pWo7GB9zfVX*d7wYClX zufOY@5iaxG@PFmKXUd6#PrN#xH|jG;ij0*$-t0T|1q?lfks)o1IG2c7$;gnl19A-d z1zak!tA15$Yh!(FCL4Seo(h{KBk5DK4cCy{GrzVh>MCKd z*3Kb6yk!yjC*2qDn@-(p_7VqTh@Z?O_5<`zHL%!MQA`r!TCv1g`ql`{tV!r?ZeluL z?&KyTM2*5ydDlR`r-<<0LZu!~?ptV@cQBV5DP^vM4CV&oC<8x=y&JW12H{z$f2-He zRZ)!P{(&)1i_J*nlSEOClepnx4yat>sdmo6vOV>CDpt&lA zj2v@~me3BTj>dB`Nv7FzSMN6MP$ZH@8WSHY6lS*8te%m5*t^kXE7dR_O$SF+LPs(a zK*slX4T?=l-!;YwyCV+`)Ez%qrM2A5aR32u8D#hhfsvUrzUWAX4fpOkQ@ z>gpPU+p7OXt82ZOZg%0nIIN+)upC1Oj}8G6jeDsiAi?HrQpVfr@QzyZY5;N^ufio4 zEHpZHz36$xB4#;QlE8F_2Q=8L@yzJcrQEuObB|O~^6xIWxY&naH9w$jhA9|iih3GF zHwB;>DRi|4iQx^!QUlCO=ZBvy`N8}Mov^31d<%~Qq&OUj7A*DWiXG_2rYI!pz_Ak? z0UdzbReQ)*N{dM8T*~UTX#a=>OWe zD6XVT)N4x8zm(%}sOeI+@(nXO-yyU5N3nI6QzdvztRJy8X!c=DD-bF0QdErVrzt26 zAu$RXrxmprVY!as;VzsF$dONq>C`+{#{~~%s3Ru&NgH=OdZSat=@>m2uQGvii<1&- zM~O;c5K!s;KpAwr?lY_t^jV8R2AR+REr+@xA2_#-=>bO- zM()%4C&B|gDJ^zy#Sn$y!c4?0gQkDZTh!H~O<4UlvpxDfzXk@a^TzKk-XO3L#hevq zPzu`^I52>V>>7qu;1&Wbc3JHw!-fH@Qk(pGw~*y?d}DAFb}Z*TDmv%aCWq8mrqa;B z7Q;(F60ME4BBZmnCvoWgxbv(xr-$Si>x_>EjUdelAq)YHMn+-zPn%>}bd2VEfD*eC zNvdW1hLnk;k)JAQx~*Z~3V*GLMn||S0Vq3CpvkaYa&cCxOWpl6niqSqX+W!-h&)v$ zL_u3yt1_i-S}X4^bkRNvEym$n_n4b#j!q>z;3`trjI%HZjA z7|Evdk?vW03}ERj^00PC_&qwzJvvSXM8f~zD}$Pai_EM9KPha9oux!LR$hYBfxmKH zN{J_3bi)i{_rg#-fsq9K#+h8J?XbAfg=>4d(JOO9dV!===<6Bnhu~Ub$dULVhfqz& zP}|32s*SK470sgu;S&8DLifa>ETgcQg;>{Q046!L>lw3VrP#93956Z%R3K^Qp|q#d zgF!GJcX*elY!uDZL=eq5*PhwJa&{`55wH_?I$mcit@S2Wq6trSl#zGByufI;tNNLhAF-(nZB1;( zay5DmSHfyaXVO684D$ju+RbviDLl;ytxRa3H1iB%F426lU`7B&={h>Si+Bye?PW~T z^AD>q>itsjiAf2U;?7A3g%F>nJSGPO`n<57*xcY5fLhp1I8~Y(D2metK*QtME8+NQ zujSxp7ouQTq2uKQIML zfx@}VK?=DE!INgge55bmuY*2X)TW)_86k#{7fEn&9Ydop==9Ch0sRdQCGHN=Xbpqi5*ylSVpY=%VPm9OTnD(C=PKXeyFP;VOZGPt36f z)ylhwq#i=Sl+5?rQ-oDz>tfx9)8AKVdliX=aMQzTuY!>^HsvmJ52M#|HmNNywLNl-?nTHIu< zk7aXC(i*H1=+F&Q@HwnhdV4O$;V3_7kZcK2esd@rqNtj9EpicxpY>U>ppeCw?IzL(PJLOL)F9z{`fSTv2Nlgo5G zKZ}BDW>Qdw%8Pf1Sg&*>yrinHE{Bcry3d_D+C9*~XOj5CV9JD0ZN*%FejA}k?S#?) zramGs52%;NF}ROQQ{X!V_#**XY|JYUvvWt0NZfae&HZMqL-8#QTntfUqss&IoGH#A z@o9cdpcB1J(Dun+88D_pekZJ(!f?jticK-nnHmoM*$Auc&EdPxy!`x)^OO|%y+n*a z1LAA?Y~~I=bS;gVYQ#A}@w^7ZN3h9$V~fB3}UrUjeE z{!%@iOd`!Pf?F7U7?Ym(w><8U^BZL2L;9L#epT51|9$}dsm z<)!1Y$R5Zn@@6;w=YZXBNnwOF+K_$FLCHHowLpe*72*eZNoYIYTApH%oz}`qwg(~T zreu5#ZdHqPK=%=Afy!~1JTSMV8|{~GMNjGHpx)xG?Bo}vv7FzMZ1?u?DyRUXwE)gK=YM`E{R9l9{v}!sv zJ`J)i4u?c(7Wru?k!S}H=j_ylx~Lx4A%R9PgX0PiY-ea?v|(H*EVx^rpdoQY)Ig7jU|IiLZgG}+;_ zvPx|L2))%6&3c?v&6{Ruz%AxF?=+PI5p5f3vNSN&ifQtytp$8eSGMT(m0CJk^K=Gu z#d=aWYB!Erpevn%a8`@CXwz6Kj6x_!Yg5#8#$BdK#!o5|!osW+3LSIj`l{#E3@4V@ZI97o6Fbtrdke8DmacN~G zZqm{nfM-&qEIZbL9(nYaky6t@_XeJWxM+FNmlTY-;eK&huw2nsQmI~z5tg0?VPm#X zx>qWcRHnm4s00^XbCAf3P?~FXDOZ#kNy+qY4t`L9wQ}B$jzq^(+<0~Qny%wkH#cHwlbC+GpMsS_u*sU+EQ;m&;Fc$Qf2A*2tLH4OFLqMgNQGVuf@9K*x=A8 zUdO;%DK!c{2FD5&-zv{d*te=cT1$|qoIcv5sUOH=tW8kqYGg)X3mRW_4NL29#;-OU zdXl3lEj7ps6cLuN4~Q|kf5vW#e4j-}_(onsVn%Wu=G7YVb4jeyB$o$Xc`s&m3Wr7x zgQk!szXVkd%h^<2CN?PWfJZ!(vQ|p1)V~I3BUlCXT$xfQPC4mzQW$C#ICyktI#DH4 zb5pHG{6cs0D;!@SNQxwR<&~xQ%o&3u?!8Ri-6eG=xiYA67Ai8JD^9Ijp3oF6eci+8 zJ}up)kw$s)mM|;3hxu3M5c(C(8wp8g)jNk&wG>JkC$M~u9U;YL)gdU-ppRFm8nC`0 zHa*!2=BJ*{a%5m_UK)E5A#TVy zLkQWVEFz08EhRyhvQa0`Ajsa7An>=%7_La`{FI6*iz%|tNlLoO+vu>EUA;0as;;GO zOlOo9W$@0!N(5Fxa5(#;*Rqx{D zIH9hy8izzH64U~vZn-q6N|Qg_Or)H&KEkUVnN>_uW$cRFQv~|3mRu*RNDFAVVm)c` zGDxfXwK@`_IdZ2(aLKU-Xzr^%v8L`)>P9DK?}VGpYTKF{WEd~;Cye6I8%>8@5s-ow zT}E9H>`~dbD(j{7T&-bt6QyoKS@+gLH!%iFO1dh9bh{H_9D}i09YP(4xSGrh zaxfb?^+0)ykU^9cLu#4GGbtVz6~;8q+G5m|=4=S>l%1lg5H%xvRXwF&&Q3ctb;$_3 zNhOR^3Ki?rFGY2AAlDyNODJEc%9SKzRcfh$15I5QeU}C?!S$JWHuQubQL0v|4L^6H zSa6h4tC9x{ma<*7xiqKFT2`=>@d%)3gEGQq>zg<^h{|#iAUXw;u&%PRIP^qCbpmxS zwX4pR%?&NsC&WRZe)zwx#%&z0uI#`L&u~X^i`?jG>n@dWuDuUE72c){QPR3M=W2U! z5(n=&bTrh^=(f^9aV$b8ii1rU*1(!X2gj9Q*fs23*_+vpxy1vz zdhW3-N#-L{sog?ae@rDy((H8PrtHFKP>?yg6hwZ8VtSvQkOl&oFoTQ`hsY=^xsyhj zrqDc*B($?0iL0%pVzVf!PLxJ1Q}U)Nvnqti6-%!)mc|>L#MMzRhYZ{p%L=zqaptPA zEgrcg8*|7t0F^gJQ_4HBF3=$lLy&c68^6a2kuA!{BsTO%yj;O}4oLZqGrG5zTnwRU`)ZNL5;96jC&x0S4x3;` zSQ5!5pgwZzO_~z(kt;TQx<;nfVCSa88XGq{G6afrK^W@Clvbf+1JSHhA-QZSg_Fn3 zjF;THcw_L9GW+JOOH1H_z?q;YZ50Wpr& zys?@+R=WXfNTpS-6D6m^TsoGJL4zJP6^X@`gCw3uAel1=Qr0v9;%SkU0%T4QF@aZ` zThy2);?OlyNqHGVZNMj!$Fy|TawyW3OjSXS<(4wI#uBTXB3FzRZdHhXTcy$Xouy(v zzhQ5t(Yp-PYWBenxi(;97v z#UQN8TR0??3Nbia1oCEf9x+WuEH;h3k*T@Kj?roHIM^`BrCx1;3FGpp{B0(cw?fIY zFgWXh&$RFfS)V*gfWAq^WD;S?4jDd`-si#I1$$>sDfb_;DeUr%NvR=#n_8NT!N~nL z$e}Ps>-1Yyj0OqCq3WeDeDWa{2vIS9n4YVe4_K8C4IjuyBTSc}n;fy~!lpqU3p_DO z`YMHD7G?Fsg5RbA>G#Uj&2rYDJ1A#lu%<+N)_^=%KK3*yhX!-Cr%yhDJdMKIr4tu^ zlS-Ay24f^vnAkLpR4Iy)Oi@g&=r@T`KY;mIu0)Sn=zc*PpY(N{v?~asL}mA<26FUO zDZh=BGXhkKk$N+jm7um?vT3GboX#~os}$ARs`;6hQLHQ3ZEYlSO(KmEw&R%4pm}~6 zQsI2t0Ag<064E`yC@Wcs-UYMUi#81;%BWU7V{9CQdDhtU8-p=9D@>e6!sKO7LF9t6 zl^#^>ES#w^aGFV)y+&B7iczU#rajDS$~<#|nhZiaD*A>_p48L_C1iso@eaQl$m>Un z19BpO8J3kSO(wBb@8pcLIE?Dba5xg6>-6UMe4RXbfU0q_7;pR+^B%me&Zx z=1ypiL1;7DnJr6!<3pajwCfz~q_tkWzJ;kHy(ojdMaa>CkCW7^-5GwEsPG|}*O?cn zBnn60v24SWUJ^u7NiCAh5kUfp>=|PRee&Spa#Rgdvaw%l)*)$oZX3-#r%u%f+XUr;) zER#sH2-#dZlyPTTNT&($hCJeY9Nw23_n8dl+)ySpJ~xy}jt>T9lAVJ=nH=U|kVU0t z)>_gPBAlgi7j3ky{5l=i;9!I^<#|{_&8oc>e>`Xt#^MQ=oza5ZZ(;8tI4ceO=jI{GV4~8S+|HH$MEv*ySQPswGRqud$WrF`MN1;IGLTJ|%OXTa zwi%-L)I5|7A5YltO>$c?!*m8A(BemjLhKQ8#V{04RD1cqtwi@r0@};6Q zv(+d4Po=wkI8X-zMVIP3l{Q=ksMh<|cGQwy=rt|M2fq-qv6{?cKqg+sD$Gx@bRIR( zPgG*WEcn9PD6O3cjM zVKUWPjdY138eS%FWXTXNm~ ze6$@5^4yWCW*ycE@HK>zK20(*J0!JRo6M{g$54$bodiTNifrv@QxZ#^;h^tEqYnCE z)Pb3jA!z&6u8(^z_fBc9F`dpmSVtHjC8o_=bibs3BXsRmy;UYAB+crz66Fyb+Z2>@ z;8Dx&^&R+HQ)f;8PGwC>*w|2XzHJ(-G-a%5AHT4f8m&eB%IYJ7IjZ5r2^O{6|e zpi0ZKWW1!a(-m{EB)80ozhyPquPV|jTQVP}=xoL(AUigx?v3(b(s1wc+yJe5QW**< z*LBl)-XNhHaS$+;T2~GW<~gIh+>D}R&+Xob4IJFO zfRj9`0qXQ4qOvXJV3Ac9f4*!I#;!K)i$ibQEcjx8N~Yb6Wcn=(DXsV%!F%O8fx3hBwX83)5WCL z)h#XQLXjT@y-f|xbkQTVZx>yfgS)XxBYk6FK0ST9s+mz;_+77p1y zP)M`cR7!_O&S_ITbz{6hpP63LoLp*`Ey^k>gA?~-l;=e7gVc&VCtD@tv#;0Qc{!zIWx7}1_||Y270?Gp$SRjjSba+ z6xUkS#Nbz6G>4cJjD}6eG}1Yj5eg~gaH>QyI?XsIFGY0;mLzK1-afmlQeNj- zkvUvr`2dv+x@xHMf1*y76pF*PDJoTKFy5w?i?dcSX%@LsYq99ejnZOMr$Q3s zqzo2Wj;tk&MoRgvj>>YTbd$-6(L^rqWQ!gb4#rfAS~+q)Wvj@E4OK3x$IGIL}jt-nsKEI$Orig7!H2`I_6EN)xk=n`p>D)O>T)#sO{g3}=VSzUAlJPKKFWstHoIg8bw)5PgmExgxELIO0@=bB#NP z>am(Ej|N+glvxHgG-FW~Pe8kc@Hmqpc5Kzqm1JUDbn%Gga0fHxuWZTk?1ZIY&t;&_ zp3T&ZSQ3|_U{STlRjtaTZL|m1GNT=M`7Is>WI24`Cab&1@iOjo$-;T{sNQs_a%4V- z#t~gyS=DM-#KA(^2nC$+G=im)d0Po+p|X)*4oOro#VMD;vZYZpw|B{U(g8qvU)pXG z*H&bZ0DVwpq{58nrBsUExf6O^sdD+~3ra23y9F7BSovib;=*{T*R^1?GicR0vp*Te zj9Sy|Ar{nXQODjDSE;!mvq%$7RmRPtvt^tttjfxU9yhC)yL^^y8^=oU^aEMlgQ|pR ze-oSrYK3JXIPlJvg!5pg*s+dJrO6{7EpWRi-KJQJXEE|UnEfT}nrP6zR;z2+Oza$w z80(<9fNZSDlT3os+bmKI8HG^qEH4ATjLsG4cIph_+Z$S`Zf>Whf{kiPsd0R%GtqCVG zI7%hVt}R`TQ$rd|&8Zeg*HBJOv_oc9D>Im?OXwU=hQ#ID$?es|N^wE?Hc}>@T_H1b zS7Kozm&Ym?;w+4%X6cNG%_Y^x;O4BnWH{m21s39Q__nZtZahV}guyV;Vbv8-Ffi=Y zT6rbff-ZLI-b}ezi)_SBWl|i5Goh}GhG5SqC^f5f=JsHkDyKD_5SN)a_Hs*O zeC(91MHnuUvW}_NM2x7=CC`~vHQcV_5ao%6ID*w5UASY4E1Bl8%1`K4ZYL$XOS#xu zom3zlP-n1WT*qt?a^r*+RZmZBtZ>We9r|h!x&dodu`WL}h^LP7y&PD^>%5c`txIH$ z7xKVPvMjj=9V-iME5mo#8t0;-_=GlMw$3-l7FTiHTzBq6v9=PAAZ7Y6@x%qDVqR{M z&X)K)4ZHf~QzpG9N=cf7JDP%FJWqq}*f~TU5S`Mo3PV7rbO`b3M%R{I2N!eM*6d`2 z6*Al|f+ogSI41UST$16S%gfov(Y2OYnRK?W_e+SX(p#-SmaUgRGm5e#aVsrzO8aCz z3cHn;+&dFmSEv>1dvrZhTrZ4<8*s?g{S4hIB7^Qs!P9j4xv?^_G}+!txZLe#;WMKPM8*h75`jpE3IL7kxM0B=%XnQ+$M@&{% zncT@7EfwWC)`v;Y4 zS!QyI>Uu__U(#1vPda-}kyXXAWxPpdrNmS=84Z*rUAg2aJ&qNXI`UZTQv9?OZ1n*) z7OdP_bh|IB^s2eRq?$adB~wgUt!Obhc99Y}lQFAqk};)4$eO~*qpEJZ{|CvP=+Ds% z>n~HYGJ8c&YZgW}Ix?iLWY7HM&gluma$`82D9DvEEHr03BPQ=O+wxr4IV-7n9FYn8fHVm{$jTcRCjXY@*wozcrCQ(=5t>$n{3s_hLMxg<#2Zt{j)xo>U- zxLk&E+_lRVCX}oQYf}XFz}<(151le@}^Nc zT($|0b%H<(E_J9a#OTAJdW7DN`Db#Z@^E(cDJPx{^Ya&U9?3dXpopE_#SQZFpk%#} zGA1Ug*IZhO_Z~KO4`9K~k~ba%fXw894VaY|=0V&(g5^7M^0Aw9DRwsmMU`xqYei*Q z3`yx#nT}ILI)!%JAkgi28!6cogp*@rECzim5r+sWVTvi)WRz1HSKzroGCRU1c~=(( zWlO|@BwI3rC8?3sg<;ta&R~W*7=q)VrivbmBHF_+Wwcqgp3moLw^ zW^~F~@|L}2Sr)Hc_Hyf$BD=K%S>CCyN7+WVs7zc`KHTKg-~!vv{y@{bLq~>nal*6zIF^ zrotgPmrzQlmTAMh2E+!zKv5 zJCdQ?jP^<^#bV;6?hI*3Vdcc7aGl%SH6>D#RRwt;vX1vrg#WeluA3i!ay9 zXL2PqMn{#cro<|6qHn6tuT-DX>zK*v6!;r0E2A>KiB2_kxQl^gnOG*Iqw&27p93`c zk2Dq`DYLsRg-;~$F=y{6o*tnUK{_m@w%-!s5+kh(CNl)GBR5X~(aGfq!CPMr{cEo$x?zn{1=)ERBVQa(p@mWlnJr3zamH$=)nh^)nFBW z{KCVi-dKwV5Ir~~tEV|Fi?)z4ah7LylHBVnFx@G{PjKG`m5k*m}D4_)~!Jz89hn)#G#Fm5(bTBL@)n|+lU>B$=O(rq$k-jKy8z%)lk;UV2Dmlp6|9jzIpd1?h z7cVOhQhqAxr*uR}1^h(NaYMq#SR`6LR$eS=?v-*+c2MsaX6UKY5Sq{$)%wk^4zLLGeVPdD}8m{>QTdt?cZ&VY}uo?y8 zRwPBsN%))QOwXQVt_^s}w|67f=di~E^PwhBnouTVEP}mu4a1h)c6NzYbQt1n-V~QH zD_4m!OOsd1m=pArO-s5NT1-Z^Cbr01X?TSzjt3ihHgLGu(Gib0z+r)_Fw(EbW&{}2 zL&ik!$cd;c5xHjJ-Q zaPVhK{Bb!pN8+{srB%Hji#t#7YK;{_fF@s$l@zBU6k)nrve#WHWs1RGa#ajko{Y4b zlt@ME*P3K|VPt5NY!A#NdHXG=)c5$t#*odCD%rYNmhOg@*2-yP3WENj(PA&w%@>&g z#AU&jM4Y%lS2yq$k!^r6mS%!+Tr2NbV0H?jt!%7r8r!k#7-VJEHi+sjv;j0g%bJPh zqqsMz8y~Dz$8uUj4$Vr-y{c0?i*B^umSV777BiH6+}kZl6~JHa+WT~rhc2APoKc7n zJMuJ@;+uG~kwu4c;-*UFj&+oB%j3?SxGha0 z>MR*(m=8{NjF(VGeRkJ0dBOw=C0qkyg?iMZ;{KzJ(`Yh_Z25OulWocuOCz*OLZ8FO z2?s_?8yove^6>-HzuBX+CBl80MT{70NA8@bxsEw*eHU-J37e2WXL^uWDoF2em|LE+ zSTJf^^8||F+~e{jhB`3-kA)@j+G4RAi_4}<5(9M+lR2%d@Hh4NI(ab9Tha9Nq+BDg zKjIvh(e^mZXipv)k-7t0nlRCfo^8+L5aid7uFxh`{81!MBhcM-PTdTf?Y6AU?N%o= zeLs)AW=k2QMfwgswwdwx68Wi%R+eu?-|y$J(3UPqwJZl^sHblzT3tU>K)d$qCveOK z2PfvRyKFTtQW=_j6p@X9#WyxkmdPH$iOGJP#+YSnOT|#KRmhY|+=(N*^vA zpuDut_}A=-p<`USU&TjubzI{ZQJT%%HE&8w^TapKkHe()Dr_rB=M-N~KTb~074_rr znTzUEJY*486bn6TQHYYV1(%pG0~LB>a)9S#)TJoSK$2!ij39~uQx7t!#4zL%lPU9k z@y05hXdHrzvd&mg#qw&Gh;Gfpdbt}IfQlvLIHlc(5;VD;>NFoO@xhKTpdxJH{d!&u zbO+MJS#!6e@+t%=-CUY&`*u08vH-g#8taa4YY`g{Z7snm(8gWX z9E$FN!@9MyA9`QG9#hj)dtg*XHI^JYW4mtd!){w`sW+duMq@@&4Tg)kVXW}d9%Yi8 zfsSuLsVxi@#s-JzQSQyTLOh~iuNQlhLs%%yahvw7;)kp<8L0few)}9eejty~C6kA~ zbGHZuIBUGuN_6~Wn*V1kFQ*V`b!XG!&LO1|JB>nt z1`b2WzI$Jec<3ub+)?ZnH%NCK$U@WiH1QIfMF84(XM?saMcyK&oRV~9aafijBBfQ2 zq0OViDkaniiObT`=_mlg*vVwqolr*^Mn^ZLZp^%uPUT$D8kt*|YIK4Qr#LMOE_L(zJ5QO>;BmJ?;=~aX z!tlXZor|S7O@hot^|G=uP)(7es5;T@3Mq4S7-$hOHpEi5+*NU;lPD*ZQ!le{IgWag zJoW?#)lHFUM~g;lR<&CR!yD_{twILFs(!7?xaqA@ow}71&1FjJjh2ek-l_3$s2H3U zdvbhQfZK8#>=~q_o-jHz(oJhfSpp(8t*DOh6~WYpEDtM_%MlA{>02}zz&LG#9CXm* z;G64ZAE8Wf<*{u64vE?UR)dY3ctZdsYaVzPd}(c#2NRSsiLH`xYR}e|MRA){5=?_z zuF18H1YcTZ2?lxWAs#DH0m(rX%M^}l?DQBpy9b_1!(cQ_U*0-dw&Htf+DqUOipMIa zf6-=^Zab%^6Cw3!F+_~@(ws1LoD|~1EOu96oF!2mnac2}*-qI4l{%a@;{vqXS0}ujCSwMtbP~r^S~gFX z=H#}BYGXBeIPypaW8Z4!kLM$9t@SY^Vnx83Sh|9aF-?(8WGf!XH`PGkE7LrVv|zKE zE=%z)hoeWgK42Wz1A?y2IZ>hUT8~n35MJIfg2fSwDwNf9S$uka?Q~XkB|=uStZZ&* z=^Djo*42+uq6^m-#r=O}2e$KvJBnN6u6`Sy6W)rAa`+xIQk7w`Il4FJYI{mU1Gvzs zqk-QxkU_yphhRmbM4*|Q3FaHDc7YSaiFz#2_Uc#cWo~Bjp?9v#uptj4)Zt@mEMee5 z6zT8cT1vXCqF$kk$0JEqvul}DvRX2g<+0a>t;Nj@;f zkhSoIv21B|ST;U1nw^!_+RHn;k`03K?98lotlgQ>%GF*n47|MOHIZ})qQcD>_oe;Cc%U0qdOU0q#WeT{G? zVF$&q*DEuiPCId3BQslMNaHjBE@p*6Z&m4lA_@`5L38b0-ENgZ(eU#zmx$zBOX4C4 zhgyXs0SGRy9gj&Px(OpB6U%gBDlF+Ohv1$CPml@uo(!0;*Gin7L4sB%N2p=FNIk&D zP>0iEK$Op_0UAesQ!=8YwIasg)$JKkXcdyvJAmwPNnRttI(;%ARC|Hpy%0`J%ceQu zETpN3KUSi{E@e~EVes^rZMLz2+tdLdE`5qo!V8C%uXt|9OwY?jS#?mrVs<3T%ohGn zE{$}VQJct&U2{uRn$wt5nO)zJ9O;KL!bW3`SZ$nE6B%>x*{uRHxr3}Shj`WG5H6q6 z__e1O3L*v=0}jVLl2n~GgMJc5Nti7U*!8v(TpQ5h|915A0AA2XmuF z#*E8lIib;#w!o<$S%^UBJtXhvxTaZhxJ-yezf+l`um-JBe^3eyvA`OCQn`%2P$@Csn)mti2@@i6H2Y z2|yUH^j+mL7McYSU{RYdJLSv38&P^a9E-ZS>TJ{9?HxizuteIH&{`M`}csm^wT; zsAkr_xe@|4FJiLXnKiHqyHL6|!hP|rEV58kTOt9SE<7T;YX9z^H%q}Sr zrnl6e3=t8B;PAUljJno4PaUP4WQgRg^JR$YEKp0%igcfG>{*_ZyG1UlM|62 za!di&GMeOAQ-m2Qh$7lxpT2P-8E8?P><m>U@zB$rQHA|zO?Wk-i`aDR5H zSUTobi)&=Sq{o-TO{~Ij^Sslb4umwfg>i(VVLbDoQH3jH4Al#+=(I65B3J;Dz=kKvW_7TYJBe*CZ8~4vN6n3AVUqy`Hq5xyaA-uf?pw8E zA$Qxoo8hU3-BTVKHk4&`vEO)*D~MPF<^czczM=FIAzaJl}AO-dYuRx zfCyc8C%S8XfZWY;Ee^6A`KIrwOMz1@>{@65CT=GWjUgbovK!d~9lC}|`822DvUoCt z+kKNDz@@7Tdc`kwUJewAAe@1_>R?>qq&Np~nCx)dU3_zMB3NW|b0SQ1b8{k4bl-9! zP{O|DM7YSlWe0|8212GrPKx2*D7cjYok^tSabGpW`vO>GVCgL!;Qn33}eN zYUY#aK+bB13*_~DQkKejroyKBu=R!kby(Mlo*k2AVsm%Pwr$(pIz{rZj$)lnwY(gb z+u@7?kzzYL6x-DyZ+AM%Ytys#bijCBdfxVJ9r8K|WqSvqY~RrVX9uZl?;w@!yF1{# zwnJVAxoqzsm%a{i>FXeuz7BHf>mZlD4sz-1AeX)la_Q?Jm%crzs?>K~YSxZz=~>&; zvz(0yk^ZwIz5nd!AdwyEePm~chTG{joY)C*9v$ro6YXMD=(S3wzRAOwHaG21(HU_i z!_Fv7+&&zUB_GD#wdXFW3g$JfL=Pkk#xkOq4CMx72?at4zKoA43C71G2R@YlfOib# z#WL6DRQqah%2+MQD*)H^!|rQ!VU28!)Nhp8k!rFw+i4?qc!FC*r_RZTg&SpTi;^5S z%Al^3k!08UW4s%y*0ANtbF{q`rW6ohv17sE+*lY?Jv=taR}yC{?MiswjOT^?>#+dF zd5^x9YpmFw@m5L>=Q9)^ub;Iu5T;?G04G1`Cf|6j>*Y!=XNXnQ*xUtXg~nW7Lj{g_ z0(9Rg(s6vFSUzGh+1r{wT? z7_la01+OaW&KRP3uD{7VnQ$xmu722iXY!~E=9R9J<};C8PlfXt#!lF-`3Ax?Mn}*U zTrEk4p|89cC?_U_Iwa#tfT^^xA?}z|7T$H(>l6x6xKe%A>$DoZ&5Kr*n~02}xCj}o zD7M;ai>@nJWVpRq4$gb(4S-um^JW8K1gG|wC6G-!?^-6Xin37%*GR=7*i8FQDRjKe zy#qN9G$MurIFsd`y#gU7MT9H^;H-I6Mu<8tJ<22iIPN?F>ZSIqGaY79%XBxdTisHx z)`lv@Y3DpCfc1`SHR;%gcp=Vpd3BBhL~7~*c)O^g=tppbD$+b&Vdh5~XCyzSYv{HE z4#CYtgv+Fea1oD)0GXa=1`)AZVw2o17D92iWo)w~YK5TKf^UbIf@xVv+b9=#}z(4VWy-IW|mwE=~_`HPT)+jow9wW$0 zV#DdmK6caFB3cAAx~>uJF~-yzj8vlQ)sRchMln>lvQ;a3I1!}AZa7M=VTt5M#_Y*j zu^b(>-MUQHW*`htFfMXN&EedbVISQJMXH!%z5B8!*bw91AoPHi_=;D^knJn4SCa<@3F-yMTd@&$OEiG3T=JgFDogtMe(c4_Z8fYpi3h2}f>3V`;oLNU`$Q0jD zVPohP1J(qWD}4S1D9)l!Mu1Ye(>E!ehLYZfGJ*>f2l5IwKi}XQmNW7fXS5+XEtI|@ z%_HiKsl^#6Bqll@gjX%KV*=X=p&Oi`^8A~b#vd-uaN9v9vC)~MH&P@t3Ud|F1dU*3 zT-phMh!o7rX+N;wTBPC(HWc6*MqHVr8+D&~$HCPYHDssPU5^MZD?SzJG(-6@HK01E zt7dS-7{^z`!@(KXWSEe$y7$lDhF2(HU>xYjTfpvx@kKSe4f`A3ek{O@)Jui7X$&S! zEtKaQenO?hQ#5{BG-aAsofU9#Hn)MhpwqbV9q&GSNfB&STn6Cg*U*EKP&F!*V}*9{ zs0-WhE;wZcTBTym-gqhr$Eppl7;c|%>`rMG=hh2#=!?M{rexwthr=YyNLw=P3)R{9 zdZCyps3JU(Du+X>_D6Bstw{`97O67`2TYw}p2MO|uQ3eZA|bdWTEzh@6NFqiG$R$# zYYJ${8&erRnBpalK4O!uq6RKW^z{W@z$L1Z#msog5Kx>d#a8!XEi*DTvUK?ASP5*n zYZpW)7DAG0?Rqhkhe^VFrna+4S_9Y|aaK7!(k&MXL)4%+Rm9aKRufcOxoq0pd|SOR z305miLIFA)Eyc80NhT(iF0_)$7g~uJ3avPfc=?2~k#bY$8y;CE_!ODq6Jtt*Ta^?q z808b|Ri$Hv>FO*t;rP&Qj!&+n!b2XLC2psnC^3_%l+m00TnyjErnO+wMkSRNA*vE1 z^i*Q3MKy+at2!B}m?H9WibPx3%Sy)Qx3nn`X>FSv#Zjx_lw^IbFxRq{RZFN=!wUrw zNn-ayeO8WDre;KC8WxF>CbCv4HkFfzPGv>$;WnWH#vks_h;YZ8rWw$aG8c-oh!`i7 zQW;Suh)?At@t|@Fv*DPcBr5)0p@I9&3m7R_d7ofBKSDPS5FxJsTJZKdQE>AUDYyWM z6c%O|41q)hPQG8h3?HHGcSV)tqfu!|MPvO?fyTRGn4X3v(h0)?(LU(rBqH+_M}tQ? zph=A&sP)ZH`vXo{k|OeuG`}c(Q`}KiaNEi+lmHOH&}{bMhy{Z1o*rVCuTGBOv*{5u z@VOclZN{UXn`nL|2_k|#2_!-X7jd%2WnW$un;gMt)1zqYFrm+R`n3;75p(h5Y4T5p zKB`X6IHf5>$3^8%!*gy{r*OpFqaVrh>m14SInz!$49}?qjMhB*dGKFNPxrN4j@D~4 z7EyIC%jW?;XSDrPl3x#%7B4Du0~%0|NkZG4NUvrdd`)b=i4{@Fal$G+PMmbh5C)8Y z3|GSVLCQ&^N0=Tbkuq|GML4L$ISz~YDBY=*bVMfj#hKz4nybvY(>p1r)BK`3F;co- zu1@>vIR3R)7?U8OyA~Ij~HF!kpO==85Gh(m+h$I`< zRRUINF(DB!31MHnZUjxJm`YB8Z)K&Cl}r^YeT@C6At; zuXvK2Y}ecgzcc_7e1c5z$zT@YPBXAI0QU&{g%UxMu%vo{3WJ-SM8VBZLZ4h~h1=#O zA-0*xSXpDw_!*RGqEJFgLgqRy2`Js{Bu3r*B=n98npE7$j+BP`Q*U|X z$v%NF-NziJM|zZ-k%lVTvy@yTY_bvh;{3OYt=U3+DsPj0Hf?gWi#r*S61eBRG~@Bo zk|e(}DlMsKK?h!BZj^v0CVGV`J|=|eiDck;MMNJKh}BkVKoU{W>oOcUQyI3INg^oN z+(a(@!A4Vy3^pb;8G+wL4Q#|z+2kk=cxY2c3y9nvjdG%Ln)UfM0&9_WN_4YY*87Ue z!GK4I<0ScPMRe6iAErkTg&C=sqD>waiM6?#6~Wh7n@Bu1FoEogxELzQXH2E}ROV|m3qCeUijWWoGajf3lYLTQx=$`l z_ktrla#jo1j1bnvR*s#9D}Fk`;3hX(gb`kTGJfT(RkjdgD7icNS_lg|Mfllv7pI}6 z@sM;&-#Hxe<;IK=XaS4c`gU$}{=l(L-!tuI*!1mvl|4K6*b*jvYI@qH@dwfuS~az{ zQDBT{q2+zZ8V56+RUL0V$63iyKg}AB`cf_#f9olsS+|iSvtlD3vR1=iO8NOqIa_X# zaAk)1W=)2_h0~xQKkYgURZimZ;Yv$T2!BJB!Vl<=1b4OUp%m^KOKHA2Tfk$jrvN0I z29a%(u#h!_aQ-X|RhXzE5pD|RR$MJ{lT=;9LXF~l%fo`@Y2FFqmZ2W{-_R;Ifm-K( zqc{5y?WP{PL(=m#pJR!VXf$#y30EfsoL{P8?I)^cGNm0Q1Bu+St26LbsTszP&eo@j zvk_V9L`No0N&#~~gGm)`wPwSL&lQa_2L>$uzod9$Y92!9IiaIox{Uf;e>*kSL1Q{1kci%CvDZ(ctiFX?n8B z)qUA~@+lHZq2MX&oJz)vM@JF3P_>jKU(prVblDNPKvAP#M_-}HXAlbQdZ9`WLSR(} zzL_lfD&u4UFC0v9*S7f%73^f8Rc+T>HiuvHcNw_WG2~V4*KG7_-piZU{R%j-IPG9* zH{134^t9FiWZ&f?nkNGm5x?e3hNOI1v`~E)5?>A^zd}f#0>AV?ak4PaFIz=^h1HNR z-B2eBC%9uHC{*UFJNFc(nz(qRgiX(ZxKmu!mc{y=K>@bde$v6gcVs_+O_4QqRm9x` zfPCf%LazSf+gtbNx4+`=q}a87r1`7-Ho>g#Gr?Wi*Wa)Xva`;v=G%4rYHcU0Ms2Ph zoog)Y;2c7p#ei20t#R^e2=U{&j97Yl2_UMJ>y$&hTn!N+gWM6lNg@?!ba581e&E5z z5O%g+Z}8HCFh%SV8!iOhEp^)6uJ4Sdp`LTI<%PZ&)2axvBh`$iGn=$+dKxBGK?Rmj z8=c|QMx~_I2AA6MMYKwp9Hc@ik<-{!*`!*C6bCkVg?uZpsBqlWLVXrvl&R;!PIwHB zN;xcn`6ID%HemL5$d(WDp*DN?+dQHhJY?=&AGjWxN)^4J3a~)}#od^(Nq>L+72g=saOG_v#ff|phk+LaiC2bRI&9O}%7TIis z&{*^q2=nD^euyQ7{K(3_Sa%1xyVb!hYd1N>6T{Np#s&=--O}JB%QQQzdbn93lAcCIjDkZ)Han-QOGah6(Oa$WxM-D>+?)tLH!FhA3Fk%%IXR|`T8h_X z)rTphzI;GOcl9E^qq<>AypUDg5Gd@RZd#8&o#ImbWQkq4+|-;yP)GKP4v} zS=f|N2l(!?@yuP&7mSe=dCh(#)zl%9Y-sB!jauJwu-dg6gOw8ovm~FCX6d+qh6chaRFBedPKwN~c#X3ex@1(YC0zX{Anohw*j%sT zypU~x5Gd4EH!V`s7#*da*Sz*$PIX zu;396jDa(2pOIpA?q%{3rE$sOuD57HNWfb*)ukc}rZ&|Z6cHlSqhyHPq*(Of%B0~S zOtHnnq=a&z=tD3^_HLprt=2LPMfGK=sZR?Vu4Gz>Fv)}BvZfM+v!E#nW+~J8Fv#rk zrOML_m(GW+pN#l=u~PEG1cNM0F^q*Ndh%lzCGB#gU5Kg_88}7$)Tab#DU3?gN6RgL?(D)cKr6S ziKGnk08zZi;i3M_SW=P0`MyFz`Zd?|dVkw@ZQrwJ+sqntuot9oTXEE zwyUccizmC>IE^}*LT) z)RaE}?44#jOR|Z_p)_(hgWZ?j|~fcB{o&moT>Grn-b_rrmCI%Wj|Cwe7lMtG2yM ztd;9+{I5&M8r4PxE6m+eI&L2<6|wf&CHA=OKvq(_gikbB*4?L0wY$Y6o|GzglRt)* zx`|Ibh7z7O={nLA-Ry3KF8UzS&Rz8runo4hRn0cKBu2rAoo?MSr`SKXRW_7$i9eb^ zY&Wi-Jk=$H-1OGX;pk|+fg9Po#GKL?wI__byt;&z(;!C4x`a-+Y_{jRg>PoASn3jM zCyLG5EcPdL37ynb^|x-JWC*cK+%<5jzk%m?yM(Sa*X|l;^~R1aaaF~3u`Z#K*2L;9 z4zhKt!v2t#Y?UEc@tr>=R@lW>< zb_)}mq+7V!O`N9b7Bakt*R27&J>504q}E`%R7Y7g=P{cu;j`OayM#|ROP}i2q?XvK zjc!F46tIwE6sw|sw| zJnf>NDZcA;ZH`a8bxDXVysL?WY2EU~cnZ5)oVA-cXVop&sg2-g3s*UJi8<^Z?qa)Q z3rn+G;f;1>7U;TE%{g^`woBO58TKwALkr-@dY6#tgRx!0*2Op)c868U-CS6xPWM&2 zHH9lzOWjg5Y^dsz@Vhw`td-T)vE^@x;JDnS3YPHpNVQvLk=I4=x`ZzAhA8||EEIHW zVx;DPUE*yDgURl0x%Rx60DDEd#2VcML8Z1$UR|D@RU0L@Zuj>^nlH0Ia%Z1Oxnq40 z{QT!ZFtp<5_&Yxcf+ylXXD4WgItYI*lFE)`Dx^S41!pU2h&xyx{$3=V-N|$=1da2A zj<*9gM8EVJb&%V+ijuh;XgO3&GxhqdLki~@D!h?sIW#)dWV51Su0dK3m7U2ga{(x9 zA{BQF^m6EQkl02;XSovVK;vxEFdMudr+S=aXz+5Y<y5O0(0ljtpk>kO(8sRR^`eWveErzjK^J#Al1vzi@ojJm3auO}^DMP`Y4!`0Ghb(mAEq7-$Iorl=M7J3Xlxq}X_ z6gqq~h?XAjq;BGp+kjSk-a3epI#0u50+@>^t0I_TURNG0;P zoI`5KdeF(TznVISw*jNC<1LF`ilw*=^?H?|ryg*PKG)}v4Sz09qPtQgdMT*>il&AJr=MO&@})q5?~)b|Y?(&5iV*0;lW{mYti^v%VP#$%{yN-w_}HGQR~H;NsO zZj-9#8tr3{4*BrsB5RxCdv5{tUvj8-kz&eB>1m+&3Ws8LzKP2R+V5tJ!#KV8UImHhiLe7kuBMwpZ=nznf%acNNMSk?bJ_Ss;Tl- zXWlAQQA(6mPt3|2tPbh$=i=(SJ7pAp24wsaOPTN3Cch*b(t8ZGPU$sQf%c0v?T*jb zI>f`D%dhu~3~d~=Yu5F1uUg*bN#Bs(((ApegI?dGX{* zBzU1mGj1UtKgxG|ls&~x5cE>(yemb&Xq8`JDC3qwzC`Cd=^T=A1im;a@9Z!$c)p=X zce6Y8xWgFmJeOL!8ZFsd+nr(`uYpYOa%slZC~2TwGW}g0>U_$jpFY$son}hk=|!DS zx-?S;zEGhSr$xI`wCHlsJ0bM)+4v*t>J{~nR(I{vLMq+mS%*%3@w`iO1W}fJqgbk# z7v+~#(+*nH)>J1O+_yW{tS?k?FFd5%=S>cmu0<&$?Zs%-Rw7Ma^0KU2cF?1yp;&`A z)5hJsR=&BDeSVWJy`~+;x8tdFmpAwBWa}H6X1>xk%{hpz|B(g_CB3*_+R1aOhZHjn zY$_|^Vwid@3w=6TZ=QlK?O0w+V|U8z>gmv>T1VP@aUFPA)9%`cIZat>l#w;Njz=`4 zzkEs0CezH+%GsGBuHRX%q&w-=v1HnjZoAalcCv_7pQ6)eBg(w=KHDKGa%U>lzGb#- zr_p>Sg=$2+ORs4Mukfg*xj(cNW4O#A5>{Pui*}$m9jEv>+onoLG1)fxops6b?PQzE z9ceFHhdao*q$zV24a3x~m+;~^Et5CIF1ckpc!pC+6dy-TDq4CnThANw>ksBju3-ne zaEGSYj~&k9Ll}~fs~@yqGSv?LSs{(8U(u!OZA$e13XG}GQ8Y7$Ra|(OkLF<7m|H+- zt+iYo>fkNaK)Y}_pP8)9V9(z^ULJ;X8VB%u@AC9EWfsS1^s{wcCu_wrcEz@vyZ}`@n9^EYGdgH#@nt)0K(e#ALUeiBzcXbtC zpd*70t^XG~a=@XtTpj5Y^W3lL821uOG1JwfnBUiqRw4#@$-3DoiZc+StJVrKI7VK| zB4)PS(Yr(c%Ng2rknx@ACD(Ch%DjksxBE4n5qVtKC$!}8rURXb4tW+xt$5cQ#mFZjbLof9E3T zFSqY^@@{q{(`OWT`Qu236~Ml9y2~F)Qr4%qTYq~<_tw$;zEf=Ih#D{1!|61RYzyg) zBAzuX4~t^Dff!yS(6eNV)FF0I*H#u<9nR*L7qja??P^^|nLy<$a^7!wmZ8&(eygG8 z#?qr*bm?uF;tg|s{Hi31(N4K^iXG;P&u}P?RN5!%&0{*+yF9seS{=F4rD?W1m`P9T z@G@r`on|^u??^d!^6{j7#c60~mRs)>Tg0{U%RACuF6B<~?#ndg{&}@MprZC@Ex#9~ z#Gbh?_|jyW%kD>=cD-GqX{!Bh7xy3b|DtnDMs7|JY;0Y3bb^c>@boXHn#b%do#vePc&S&yc~tIP)1<;~YS_#hQcQ>Ymq zWO*~b4zZUzU21yjuW#FOf`ir9rk5X?I7c$5vm7pK2*;Ve4<@#+37^8T!oGpyrom^Fe0C;EnX(J z((Wznbd}~gmS&k3^-R>&lKbPj(!M#F=Ht53zRA!ml`87N#L&Waci-bip)@ub*)_K8 z-9@`o;;}p*bGD|L)#n%7sqOK399&su58aVs7kH!0_i@m)a5y*S51OHL7q_dk(>ni| ztR1%Nvi~s+_`C|dac#8j2=dXxYT-e()l$JTB7sI z@(?@OkJT}1t_6|cnCC_aJ%-*sUZ2OE ztChWbZ{L4lEOXo5XSvl}GUdK&&7|#)^+PLG;_kek|NQfiXb=9w--@f{(&J0=>N5!T z;>W$_L;t%s*tqZNDz8txgqOm|AMdXCl>Tl0*&A&8u!iGhB=SeN&*wcl45qsJ>B)z!tyw55Q<=G?hd{|S$KZ)`zBg6f3qSQKQVV^1%1e6-J@GCljYU5}juS}A^4fy~6#eZLsFZF+WgWeB!OA8&e=*>zC zsm2@yf?#dHJN;J6uTb9>*ABWr_3aG;;dUm_DN;Aqccn?$Nf;zxCaqz1g(*zux|I22 z&DC95VagbO77DTEMgWPAoTsZpTHm_HG`hZIYWvRXuHCU?8{RrMw@#^lw{P3FdpFXy zZ`-p?oxG)%oE_YK{N~$t{O*e263t@NR$Z|#2xe79OeF&8Tgs+Qn8e$jwIX<3zxh)C z3S5&mElg)Ced|7`rSrFUt5C%`?rNVpAeUL3xQ76HfT_En33V?9Qb;3Br3QI`VX zUany&%Do$5>mzViA^o=i^H+<2`yyc0{*J11Cwxx^%>L8Bk-ujH<|U_rBY$rI%tvEz zxURFkz>uB%u`gZ&ee(X+Zf>d#SD)Oo8y7+ynXA^S z^&^MG^ygBv!{+^oe7s2svp>wnh-{#Z8J zz!kgIyKvs2my=vvklPH%%Xa*?DOkJdOmMRz7@o`W5zjJ)vbCH3307}qFo;(zn$7t} zJ5y>`7b^SeZ3fV!?0ZqsO91#I0B#IMre;T*Rct6K&PthSoGu=m9;}rsCvmIo+D%zZ zc2@>t^%Iq5e}$XP`}?qBq)G?DM5!^@$j(&oy3+g{mI(LFPvasT2IDyc3Z4SMi+B@f zFjB6z_H64bY~PMKbFRkIIc34$i|n<*c;)Cw8&}~pPaUkBg56%biC4p}2>NH`m!$${fIp9U_1yBmV$st_nu#N;YH7 zN&{{jT2vbF-ymKz;NV1I|KwnQa0TE$hYorP;A>;Wqm}Yly*?|go0+X1tyRi-gsX6j z7B>MaNQl;f6wwi9kKh~}C=3xT8|+4~u|nDbq0s$YdFvp);q0Jj9yNm^Tj%J$6&L%>d!Ys^f;@KF&NS<_>RobrS{8(Gr?n~@ zsIvXo>(CZ4QynQO)y}rR>HA~K!IO~xF_EP7kI7c0X?h1u2l?r7aax9`|3}ax(FC)_ zcGxFL@NWenL|Ls*G^@~AS>72e4`*%@f>fL{l|h1$5yI3N@raU#8gHKO%@ENL~ zkOre>_V|4myk@3aI6!EJE{NA3x(-y2&PZ{Jb**n_rKhvmtwHJua#b`B_2U3EXicC7 zt;5A*m3~CPXNwTw-*{SrwVPbTEMGBwfcz~b|NTIUK)xr$h)@e$9%P25pyFq zt7G^yDh4*#ch8-pSEDe6|b+I$Q3!BapLY^tVZWN+CJ*zrSJ z3Vm9{P1RXx`!bDb6EE~&sG>fyuKz8%;f&60Tm><~2WhGVL(2rz^j?t}bcPBx)~wd~ zE)P1o>Q|dMP>)wi6*@I|6TBq|;Bz!#f2o{owX+pzLsAEHgeam>DXJ=klYI%Ft-`AX<6drj_vY#xmI~h!rMA59UUKCnNPu4$GF_ z;7|@`Xx*ltJDL5tLxZSsc64N7d~^sJzi!j3oorjy;gu-<7cjO${ke%u_5h?tRInQB zHvP=ao*W^wh0M@UVc+eAgSp#<%A*dITPJhlw-@pgnUVg?cz^-da*!bWfsMY=)L^~l};rn2M9VM+Zeb7ay8h&3UKbTdm&VKL#Kp1Hy0#M?q0;eGU z#HGXP%e{K{cw1+zo6Qgn()UCRQ5m)$_poZY&4%A+y~vG zg1^V55LXs(Fm@@|KQs^v&-;_&GB!NTZRZbV6gl-?zjAY;FOj1Olf z21iF=4%cn^KLqJVOF%C({r#pR(l9+FrM2yf^mQ7hKXUVvx*=J3&;^RigUWCWt*$vh zH-V^A7F0> znC8c}KdbWlNG}YeN|Ofl_rjvIIbfKn54d#2_)=Bh>ZV2wKP}kr0>IS7Hz#2RYW@xI!|+4Mp*07s&K%u{A;+DyH6ggG$l`I(PBh;*4 zauG@g;UN49H#I>4Xr^8c7^7SvCuWdk_kSKBluSY!Ya~tDCmjsR{Lv_!#ZoY^1CtoC zZSQr43X1y-03AM%%M^0s;}Fq!E<1{$8wvfeLIXpY{dpOrJL|DKw6VL;W+t0VD*PWr zhZY%OSr3jyzKNx(&J$jE9LtU8F&gJa;OdBXLE)TYAyJsPaHxi^aHL(>WlykByw}kN zE(kttYn3!f=11frpM|PHF#9tT2k1Qv<%Z!wNT-;0i&;|$k%nW^CZK5n46@cPYCwW@ zhZnX#Ox0E-*Ia~g)p2FcA#o1iMvIckQ|)J6q-vlLn|wL)j>Yq0T~Mt4oi3p5V6+Zw z-WlW;3@6rVvola3JLw~bnkNu<)Z}xZrJ^b=NY_+q{Yq&k;~?HTnHi#^I645&W?URw zDq0VbX>S_?9o&DW{uD)x53W+LL~7QmUlQR%z~8@ba3YVXoEj)K+Tl$8peRN!22X48 z=%B+MvkU27e3g^(d4KJ^}a>*MK_wY4AXo5S?R`j;{#%CrH$i za@+;>80u<@s?xsQi0rXJFfu-nK~Eab4L~8$r$if{g-q#e6NAG!NMU$PCL8nzQ{2HP z0OdR?ISG^kizyCt9JTC62f_RYE_h}bKgRQz?ycLj1E??*<_586i9^DllO1SUVc+Bc zI4RH^K)XdyA{v<+SrIx0Oq2>!Rj2U4cuu+d2QV-U<;KOCokDn_Fg`I<=)Zj=GYlv7 zKqh~nFp;4f_;hgaA##wMj~T+`aBe)q#Zrp)g9ObTLa#6MXC^YJqFqa+UHKWS4mm+^ za5qg;3KJhlCxVIkx=qxRgJ|R-sWYQ91!xGQHaF&_z z=s|eiP$LdcClT)`OpXj@p;zEy96F{Z6-c*`O2oO_gs(p}d_iM|D3ZePc>XYXKPbKZ zeazQt2`_tcMAQ=PD;m$X89^_HNGWgO;bE4*1Pg7M&%wx0waDA2G2br;Fb=zqC~NMpIW&rnKQ^HhYMx1C1alJxBj9y&OetU~fHvtN(h%lks=9lpc-Eg}E61CYV=sGR zGCG>q-9V@Hb7C@I*e9(_L32H(Fp(V_9D}M!%Sj9c!I*WM9!2}G!%nitvf>{i`Ge96 zWbS+^3p>KhAHbx$zc8E|9>wgMW88g&IH+eXXs<~%R=kDmXd8xB&W+?b8KTS?jw|$! zP9PdLcHnlU5FF-S1YR6}1?Ku7WG7t_ff&rDgyU1tv^*3Tc5z%d{55jS9v;yZWdkS~ zdL^!b6Q_jQ`SA``d(#$&L1@k9{fGKCvAb6$~xEbTc-nFr#^4 z0D%)eUrk@HYo+65>>@_7i68@kqf3jtskW~pxZ9->^~F zgfQkIDky^HxcXzU9CnBhd--O<%Ss%Z@7FYc9Jj4vi{`QAVLK7qV8!=iNMQ170j~wf zdN624LVv(|j2+skJzxQS4M2^Oj!L{qEOe2{kx^EZh7GjGX@+owFp{d)3PtP`mahDE z@RwlV2zoJE;Y4Ys*eo#S4!4>}tbJe z9>swYj?SB5fjWMdNLTv5mLV1KKJW*Ng-{sAX7&e$;MjVn2tJnC55ws9a@;7eZqrkc z8<#G46<09yG76!?NeQ16q;Uyz#=_OZ!X(^Y@gxt?4MvD7FT*hn&Iy)vXewJOUe4Xn zG$%*L)5ToK7-N`?O~~k8P9wK4aob2ZUh8p&OkHh?DrZ{TZ#B`R-Jc^`Ie!^S#{eAats+%+%w|Jh=!^`~BdEEvB#Q2#>=*0su(AWY3j^bs z{W2cwCZ^z;R9zLp)}E9^k=gHiDRX!tg^|&T!GYTg*`W-YpW5Pt*0LFRL_^Z4=95Qj zrM0ZvYP7`IL3kcAD&9#(BOVly|Albmsv>3mceEEA^b$NfhK{PhmM|t79j9bwNYM6a zN~X+|q}HW@FEKNF7&abTW!7yvfL=8?J|?ywKZ9)k0QMhBZ+s3RldLEE&?f+_eFZgJ zqC3dWznk4u=V()G8kJjiXjBW;+HQ#vA0Y*}`{-}*YOpqf$-h4t;lu?ZlA%>x;bFF3 z%&*3db86VI_SzSMw3i(l#-G>2D`8~$9CRR18f}6<-G$4k9dci=&EON5q zFhZ;;Gb3X^IaF~&n>Y+`P}xxLFsc{MCD>4}q<|d>ie}K+$Rp-in2=#)h$PLRC9cx% zqtw_z9d@SYe~=&&^4Slc;MU1eOvETq6BA?gron-1sA0o>$@d@BC`2e~Xn`t9@0{B> zl_*Bfbo&t6 zvr~RD#I@u?I7_0gOd_^BIlK?fl9`&a0()fnjK(JK+8Q>=btEyI863(Fjbip5>uYTN z99v(SP4`{#lvvR6Q_wjyYHtO&)OQ>!l6GRi84O2p*UzJm%&3BRADpBxVFTJ6wm^AW zq*Mhy6OY2+pba{;e>-`Ic!T1gqT#aQpz@0vrS@o1rM97r1RLBLF{Q~7F2PGvLmc_I z6aW~?5bEG0$yi$o=o0dg!6eAc+^G%h@R9z`Hm##JQKRCFQSSq@2RXabt*NKyq`!q! z^b{fVO}8WGY~;i>EWrs0E7OZ2g<&qfqd(a26i1(rfI(AKwJLhPC}BR>jeL4MuAHiHk8VKE^dbb1vv8D;E+| zZcc(9Os)NDL^9$*ojYYY}y|RlRA(B5sT}_jm$c>Q^;b+2*cPiVA`=xjXdnEoHQng&#}G# zNeJx{m|!6XTh61z(~V80DAaF~F=MfnJ5A4=Q(L#8H62bMXb=kt7Lg4muF#=T2#P4`>hXlx5 zd`1JDlZ=*2dwrT5gyPeYxxXfTh|e0Ccw~;l2O~1FeBsBO3x~GJB!Hov*yzcD|HCAj zW~r#1A0j|(e3d@M>8&3h)$`k{Q110?_E^{4 zzEj}146Eiv>{A@>3Nqdig4+jWqFhkJEX@y+WIBgw2%EA9trCaR>79CXAU+%Bl&W(R z?ud=qgahvuI@6(hY@JIRFrY!Av#Q$2daLBe%pYI|*pm0NQj2Oya{m@WC;Kr}r{7_A zHl~Vnof&TTq9x+SUrarcah?mRhxnD!&y7i8D^o}ZGXn!$(7#}GdA2}Dkv zq_2_*Dx%-eRKXi*O5-uXLS}qCqt-Ql4d@vN#$eBGs22t3bHAE3md#aaih|9R!xFY_ zgGUt>k!gXXajxl3H94Mcw<-f${|qFsYdO59`k1bEJi-3L%TSOk<_kvRGafM*f-Yh9@f}I;VG{dG9lvkh#T=uHbSV< zYK|ZaC3g#sv>}G0-ey3UIDIxVmf1Im74|`Fyo3r>Haw#LCQ=HoP1CC;eb0BICJsv$Jq-<>XMxv&p?rAZr^t2<_01iH;*_I%7giX%F0Y>2tXAW{-_t?Y%>En#p z=+!O(=di$;mhqVp43u_xAoMPo5vN{)#*;GSK(u}G(^_3|bdomr!w2?)54{WC+)T7Wx zlOB04X)+u~MMs+jVZit&sE-N#dS-|7opUHjRtn=jIpFyPe>EHZ8Ue;}23P1&N^q0T zWJ-M8dXsGNN2z7eVTU664tatEU{xGBm@$F<;@gBsn02sK&qoEhGhGble-hAk4HHue z=vpv*Xso~hwyzA`E+teylzsH>Dg+s(d5>9lq8dd;#4+cLhih?8OHj*tMK@*sLfgeT zzPCj~W=j7KbYYJb@AG*8bjGzj+!NWhVsWZ1F0`fp!YU`P)KEMPR9on?kBa*lt1FxS zZZ?iyRAv<~Ag5ZTbubY(Kmk_+=gU^$-`+U;bI{$31-?pZjS2nIAfD z;lax`|N5n?wm?QkGe0uhxcddE#>%Vf{?jU%Xz)kO{T{yCF z&!1iKsh6JFs(s|+UwrwKzrC=sw&B+|efUj3c=~%D3WDDexVQb{s*hdv?Nj&t=_}v1 z;opva=#r0~GjhkFOP~L*{lEFVm$rZJJO2^{pAfkJ`pk!J`iE=3^4fRZf6w)I{Lz~~ zamTe=|8D=aC+}P_wd2OW`2Eing5Vzn?(0AO%qr21t0p2_f7A3(^Rmzeb)n@-S)N3TU!qm9{Ice_aA-Yy57xw7^(#BUoXF*_R9Zx z-YZ_2|M3sL`K1@W<(VJCW1d`bO^j+m%=RpVz{qUW0!x-KK?(M}$uL^R);5{lN==de7~zh0>oAxPQF-i%H16n+o-@+!avE$m{z8T)FjbY!k|!W^%k3EZRj%&hTf>Xe*Jzj_AY zdz_5Np*5b^KT)k6X*8<~g;x2P;F-cn&vvVPI06R~x$*At6%6v(d%YY(f>Pjh%}?QCX<98+f}sQ9iYHidg5G2?U!J zoH4B6@>=53?Nw^FkF?~eMkK1cT-FCGHeyH!Rs`RDWPQ-H5sQz(`g`!7{=ES?yMxv6 zNbaEqJAdI&33ub_n=_Mc!rr|a-%5>dOR#eDndhyojj{F`1zig)l@S1iy3+Zg9vw{_yA+z9Ye9z-wI0GB` zFApwnBn;YdlZGXZCKT5gdlMePO!r@N|5$ zJY`NE`gQqS2)B{_#mIfXPB%O}3EwR1@-V1z+!DcIco+)Pg@YuZq@0Aho|71WnCWf8plKghvDInP1pSbPAz4Bn@;abw5jeChUUll-n&=IKg+>u zejD4$xuk1b`EBeF>A_C)JV#&%7vLrj2fvs*=Nt5BgE%Ro4SI^$pq`Dysm6yD8%f{T zlA=xTk@WR1RrM{|^cB(;Z0k^tD}oC1A(v?lw;A?~{eYnv^Ir(RGMLfu)d=2a<2!^~ z5ggNSvl?z+vb^K_*F@~GWJp8VyPBojv(fzCtj9LaMG*_YQ*yy0qzAjvb6nDx&bCO{ zFV}${<v5)3lDAL^;;+E4WgQyb(X^cx7@O z^)y!rPR@4dIz4Y0b>c2;w@#$ZI=#TJQzC7)6DQ!T!^64`#Ao`+aR|lqlNV_ojcr-L z_lxmgsJlJEO9%rwywt+3JdbU$1^@No8VHOB(wA6P%7GT`+RJshSLkvh$?{{IEb#z< zNHi^1%lMTV_l4jARTZAd|1aY|x4$ZTzdE>=@TkkL=yFd*IjFMe5bMJ-=3oA1eN@>s z!K-!I*XXiu)Vlhs_znWO?nPfN8i>9U&nozq#iO|IN$cslfVT~+eB$2_wZC5mK9H|Gf=L16JR*jd8-a7btXUeX?_l)a71pAEog$oPeYwL z$&Ip1lG|IP9#R4D>Pab8Zue_GX=^&kElQKJVp$_M`aVf=dn;gQ#}fqSr|EWlK=X4< z_(_^Grfet>!^743*j@u*R^#s5fSYlEZ3;QK6mck`r3%FcIYyx!xHlWV? zlqTx9jgWU%1LrN;zW;&9f%T^icx?PpXSiL0ee%jl>P%wYont9d;qV)^q>X%su4Br$ zr}sijS@j#`o~z}-{)k9%eI7Scv3+T~Rt2LcYPf%q-&>Ho4*4*9HC|q1#`p(86E<;y zH(D9Ei-OVF@?i7$Eab$xz|Qyl5#Y>UueVh@UKh&aA;41}Z@*dDf1XZI<01TE=Qrsy zeK+dS13uwD)!Vq7t|T`xDZZGVaFRr@ikfzS1cK`bz6P_ zI1%lw6w7El_*c}26=;JGN;>mIR}=MtvggKm%Kijof3PgY?}#EoU5NBmwBWE=B?W#Iu$zUHGS1AF39q-~4w zz&iW|U|EOhE3t!_Z;eU-YXi?$QE%6tiC5y@qi0E4IM9&G}ok-75c*0TFzH^1*!Jq;`Nfd z5v5Lk9he@khtDrzJhlXn&sP*CTI zr@7ltXkF&j!f`9qnU*UH+ms%Bk0pIL5f6ssKQNRDe z`OUISH}g1-X%+|YF^>1o8pju%a$ky+V?Sme4*POX@MXe)_P=V_6nmAtCr->&Vits< ze5rrac+J@7$|01&%HTgVAOBawn|UYeDsWQI6~Wgu+}AbS7RZ;k#s53Lzl#69f&Yx0 z`7g(Yu>9KKn=FU={(t=Uo>Y4uv%$*V$C9O<^d~qjeG52gmyK_8KyHgH6h^07@CMtJ zee>=9I$REQC2b&nVGnfc+ft5YgJ6t{{z>O3P9tmT-FJY8dUvn3>I8Ke7lamh z12dLcg-^zP{zu9y31D6jVM%FTBvJTey&pwc*89-2!7unGZPn&#?EZaxhx)%F_&M_d z$6&kBjkoDCDShAB+U%Su5$PpnSsAX>G+g?o|E|_~W=^q1s(<=9)*6&s2j7qVDO;SK zohp`&nfZm1ug=p!7uE@4@4=nv_D|2f;&wfE1UO2i;&e|yS_62Q$F`(S@ITQX ze6NL9b~f^;zg%cC`fFr+b#i;yYdKZ(>TRT8g?P@q=_*Q>}Jo?oiRy(~UvCjR+SK!+65E0Wa+h=hdwH z1(Jq4*|GJ4<*9R&|9QeE0Pu&{UrgtytK9BJ88>fIGGpD8O;hW*lrd!<_RpT+NrZu1 zF4V9oGBsy|MWp%z5>;dVMY`-7v@7`|{-+>~f-<(TOO{NYhSo|03vMK$K zyBVb%e%LZk(`8sU^V_UPT#7uLttq0FnuE=TjNdB8fiKk@woS1?Qd(25NFXM#2E8g+ za~W`~ipSC>yyzOZVY^%oShmZL=TgTi>~HkW+p7BbiMDP}ck1>a@Uo4Kzr{Ab68T$D z!?2xK23N5RWU*D3J*4&jYJ6jhJHlF-M#&6b&^x2k*a_Wg;YEa_M%|sfRi>PYcq5Oo zT8?qo2wvi5U-6_Ojpe0iIc-B3%IW4B{WRrcF%6qDTl(hz`h3fdr!CXJeiLN?Gdo*X zksay1;Dv3~gSP4ejszYO+iHjA;U@5qvJU2NeUz5+l59Ke0xq}z@ooj`Uf3=@!L@`z zyX?`h^pO(c2i{Q=eQ-%ACu9hH#176gHWlKLHNynFO7GmWv5w|B$+k{-sYU9+1mPbtsx1w=ecVcLu`UgxZ<(N=Cif5!&K zDsIF_s94!&wx4NldfuuPRol`YUJwl8+2Udwm)Q&b2JrSGUVoe~-`1P*q6*u*7wL$H z;H?+fwDC%N9`CKt&te|SY~eUvI;KVe-QG-pn$Z)hBB~7WT@qyFwMtVbrd_JjB-HKT zxhz0?_hnW022nT0Yw$A7lHe>xf5q`)ioC3eQQI zv4B1j_QGPm5zZ~xPW08D^%(egw&vr;F7ol5$H2#PH6Q!I$H*CKuDwF~cz=~I+SQw< zoYz;>oVZ8w2j*vI(_vN$3}1>%hrxaj*b>C#tECu?)sly?q*lhv-OX0<=QWaV-i(Ro zua*2<(aqs}UfVA*QPI3Jqzw0@xH*d6ddX97BDuN5`2@-1D^PBZD!0MnY`K{dTR2nl z@SYalaFhM>E(FFk;yz1Y@K$dOK;@q;`D}}LT{lV|hi(_KDz{1U?7E=~AapnD{8=|g z^K_2M)83v7LY~i+{9LU(I?V=lvjz8gy1X2nXjh^F7nt(}Cf|mCI_DxF{wGS_SheAy zR`t5T=F!pcxEH)nviakcxq92fK-?Ef{xHVx)@)rpBIuGA98dOO@Ya|Mp=ETDz|dEu zw}wG90p=+JqkP}N1RZ~>#i9I77X^9!1;s~wp^}}&lTnzAhwmiOmm*BBz}z}tZ+l%q z@-CLV@k*oEY*ohUIJ)5?Q02D>%t)nu0^!-wMkT2pPZJpH6HFA3#_?PtFnC|7bPSGT zJpWS3A1tR@3|*hgG+e6n(Quaw99|l$mbp7j8F!bghPy)G@-uk&FHsMluISZ6uixDR z;UZM>x>Ca{Us@io8!y(5#`NqN8qT~)bs!>rw%t{Vx9MtK`w}iW&Hq*lbErN$?^`b7 zxLWcV{Y`GpAtNi?dNc zjjvB&2g~YJt%;L~BZY?Dp-HY zPAZ=xqj`(S71^ra?Mur~k!4oVthC_el=E+gHqWrPNV!3^-?eWT1;8HP$5Bl!ua0Tpp}@59(fh4D|2R^edqMt`2qYM4vGP#>Z59 zg>f;a_o6X2ASNUIb8tF$5^)?e&t~44L8iRGNXlq!*34U2{|$lm4 z&wbLfPTd#V?sK~CHPqe2#*<{vxXCKU1GxH&KEiqtZk&1d#RNE4z%JUp~9`^PXjIMmAMEsel>?0Xfg8B^oKIB^J)$?(4vJ; z;z8-?Kr6|EW&PEB3Oq{md92u$XRP%@p4x7!d6kioMD1Kog%35qf*fQ%8s$XQSJ^Mn zg0q*cH@rzJc~Nt%f!1)PT`U78iiI$0t_2u%s>b7^54QX)=mu^1JleW2fOAL#qw4l- zZNS5ny>{JpLF>h9F6?ZR2!}RxhaY93(N@MLodk^eTdYkyrRl!`dfCY)E{6W|9s~X7 zYx?(te$(rBqx0>?ym{k2A@(v@i)I^}0KGFho8?R2Os8GhAo24ZPC;eUXfy71cwekd zd!gq2LGaGFAY(v`$(p#)iv*`X{?e8$Hg5Fd$H3D|G*1tARi1;G--r!Zv^;!apO%d3TtLyajNdw&hS zx$k?S3YS2wuvwmeRbZ7hS*-kCi!zMAe;+(Q7Mibn3^ZS_Y5q*wEOE^=pT%|5yeJco zf$94?MQrhONRe`T18`D?o3%aq4dE-_q}+@T@S6^=i}eBCsCiv;JT>+%PJZ&0@WOL? zzUKY6L4&-X-p9gxrP}TpWerMi-Ui$^1WZ<1Cx1yH1hW`5+ z_oc^E?UGzbDB8+jqL(W+z8&SvIodzOZ|Z2uSu1;ip0aNC6PT2Zd#5gM{DpVm8~bQ@ z)y^~`6S7FoF`sK{?p`x~uL=A;kq@Hmy0EO{D_DH_My144O>`YGF6lE>LX&hCzdrd8 z%25Be9#37j)y?W%4=18b$guKw7w}S^7ixR;Zs9FkY!s)kQ=?tQDy+3z?~y!Vd(mzF z$0$R-uR9(D&qDo!`1u>GH+Q&`SZdG_#Mb3cK#O&`OxNXM;dhV`&iZ_lz3lirLNZ+1 z7fWSy`F#Snw0iw1%CKIU<57Egc&1vK$v2=(W)7;xd4DZ`3&^bt!u3Ame{P8QBea)) z=J2;zd-(y)-yrxiV^ObE5o;I6!Z!VogL}my`|*c0?g`+2(6yCvG+WOa`;{$QK^rRR zW|!<>KjR9@W|}<4YG7rju%Lrn=B>2l25T*>)RmB9;+j0KuW%|_`AV~jK=AzBlsY%Z z@~bTjz0V?c>^6abcNVNY59iRuPJRUSh`$aaHZqnBB@_GjQC;^>!#xo*5f3_v0$+^ixa2=mPL7uVBeeS36$KMvg5 z7K9HANp+*Cs4d1D?u+<@=I1M@Z=dd0OmlfM^)@;TpPK7q6&wMyKH*6He~WFu z&uJd!jt9ZlY>+O#5ON2Z=5%zAEoknY=e!Z^R$np^76BlN&}hOm7Q7X zmNR*MDsNR%-VWnyIrL2Xquy-4HD0-y`F6Q}qNdw+t(&KVI^^>vw5i#X{{_@P;XyyT zCWy($Z;Cf<_xDLmzfr5npiB5vBlV#f0R7cI*awi{z=m~aXfV|ZRA-Ba6K7$ zssapi&htg!a(##|2|r4%+~miT_lDPhk-Vkx`el^iSo^}`sdJyWFwH9q$`MS@M;&O_ zl$}+or8pNUdp5*PckSxGfj=V|b<-|iY*Vf5+$$`XSerKfcU`BGXk+g44E-V(6Or)s zWBVQ`ihuW!|F!%IM;V!p;E;*2NxBcIblbJfnCq00e&Y2XRVLC8bpKI#dA}dv+%Eg8 zpGTTFf93QcKOb(7>C?I&sr$)b#xo}tIIuR@MWKKkiO5xbiL zk)dC5Ec=?4`4D8jpl#w7QAO46W|tzzv9AEuoG%bAxI~AAOLcvWn&Yw!jh$qf|BG+T zgGF)pO?sFEYk`IKl>6_#A^254SgcR?O_X6jc*SwX2@`$kZ1fQ!>9x^Rh=l$2KY@?^ z*4!cTE#XP;)vuI|+idq?GJloX2kYd^j1;qEo@-)1??L^(Ex1(u7CT;i2W42l`;K$2 zp!P1S_Q8tyLKP>c;8CD0DO=@Jb6O>%nX}fT{A|YHUDyrq2d8l}Cez3x{p$aAcwB57 zJfeAgCwLs!Jdzj81e!;&N21o=Zs&oJl}_ukY3pp-4x5HO)f#T6*h%vCy~n`Y_cd=1 zgSWd^D*25Fo-DRHsWF4H%R6b@>15<|o0D#KDVaR(DMXFAqhDmry?warnkV9<9$cH% zcQe^-0H!S0PO$@!_j{ZQGgUisT~n76uZsL}y$^k_($;wq+?;#$7b5Vm^!<3GRo&d>gnh_&9$zzJAt?3g~{wd9cV40Tg2}oO!mj9h{FU z{n4i=Ytz-ET6UaIN_)%HRLSQrB~2!d==3U$^8v3Oob>2C`kDdu%wrbdZlaPlpsxd6 zEmqsS4M@p^J_SY&@imQ)LcO4k)#*}}HVM2j-l=4#>Cp}V=kTEZX5YgZk2X$#N}V~T zUxtv;50Rc=TN2N1{0OkLe`ho}XIJ+jz6NQR;6K_Jo=xIexV4x8{RC;W;XmcS_XNS; zXj{~ae4d}Xv)&w-uZd?M^d)NLPC${XGW%gY=7>GcM6H4><2*$5-C{!ZH3)lrevo;CzD|yK@dd(L4~~-iZIX=e{6(fnC9W0h_XhB5zU%dH&L4>PlUP zw9IdF@5E~4u^r8SAZh1)}uN2=4K@|VdCME7js+QS# zMrOE|hjmkGu6#s(Gv4f;(E>R7;JCTm+dBhwCNgmjUv@&6wK(F~4Wt|7UQ%tkw9RJv z#sIrFcneS2&$|?P=bH0WJm96voDCWm1QXRcxKPBs1^i$ivb7uhM*qbboni??0otuv zGW&;>-%_1IGfYY4DU5Il8=V4U;HZiMUvgR5c$*@>IUl{+M!j! zlaa?V7xCYF{PIkHs!rdm&mvN`SWA+%FUBb|t;yLsLOiTjuga6Sllfi|49;<}ORn$J zvfKw=afg$Q_Y$^-G{oW>rO;%EZ$o;F=uUEfOC$>Y6E1bJt z3>dc2_iv<()qNuL3)mJv$G^M>_Gy$gWPS<%y(jb`IEIif({{ZeMjzrb4S%_YH)GaCJOx-JX`KO-Y6B;&-wXTqNk*H zjiyo4z7D4G_#10CwR}}uOYgF6&pnN9Y_k_7)LtH?1N=VI!l=0$`{Y?RtxxK~HG}P- zZ~l01$z!Pp##ec>09*3YANO#cgJ9eDf$k3ccLKyy#-7+ah^{#8GuMzL<+w}B@x@w> ztS{FujQ#1wS5IWElWFh^XNt92#rTCx&kT2)1=?vr1v`M zH#zC#)xhu7>92y!RIE_u4r=gBk7KL+{%v}_!70Wv>lSB<7_G| z5^px^S^L1FSsrj=hLj!R&3cW;$$brtM&L8(%69$6J?RrnrL1`US^-f zen(!;n{%GH!gNRr^`pM=Nj}Q!vU_MJR-Q*0ZGo;_fOV;q{uzCvPP%6#5d`#EYAtj2 z)r0!C*;6)*Z`iyduSGC@jA`tL)9vg`6*6EyW7@i49QQQqMDR}DR-&(s2oB<*EmUv7 zIqxT?@`gPZr?*}1dqG-We57v-|2=6v^{ZzidE@wyvLAqA>AxLksRy%oAu)fTAaC3I z@%+v(kR<8kH60_nXQRz<$HEL&gL%oS$cbs_Z_UaA&&eQq5E)C3VmWZWSrJ|-yGh_Q ze_D3S=9N0d_h>1jPj65%B43ozRPvlErT)$fskRjp*bBj|&fTtMb!dt7CdO}9wmFp} zK!A$bQ}%3;-+^LlM%@xYUDfR}-&9F5PB0B;3%s`40>N)Y9G7=~n0@<{4_uU4)&V^V8XZ@=SFpvfZ{MYJ2wS^ltIQ%NVmT>3Ncc!ely9a&L zz+b@oJ#%x7Hm+x(jLrOwWiC=>5aDhX;X&JS^bdPMN1x{w*)VQXblL-Po5v&@%6&@9 z{Y#L0N*rbgJH?cg`D<_Id)UdAdk;Ht_JH4t!!PbCj^QLP(|}nEz5FHAc_g`?AWov= zE0O2vr8}nOf@kW%4DeGAQerTtbF$qmsznJKR#g5W^@(>1 zhA~B+UR8N>C=1{HBsMVUYa7*j4|SyD4!7#8>@-&~VYUy~*&4_*f3OQ_EudtYmW#Tv z{f`3|ZNRo?pq$e@AsT6a~CPPg6NG_rl+Fx_>hOu206J+{vJ%N)xmL1HUlmq9Ix6;iU zK^Po%gk@H_=_qp>wrZKY)zLiF%-UyjXzj0HyH>Tta$ILO{@Mx1#;vS8dJGA`xpm~j zR8(F29(`Eo9D>Wm(o^-3>u-zdi$o^#|3a`DTgDI-Jdk zELTL*v%^`xJvDq5yA*u>6&^Mx(`{R7cr>T=@oih`Jkw+>wT^z53*{g9fe0`HV>Z;Ml-$HluWSeLRoVmU2%>$V1g7Z$l(c6GTr{ZF^=UKjaA@ zTIbJ-z+k!oo3Qr0vvs?_AlmMuljDfOC97{f%tY(UeB*B2_Ak2*_Qq>_29gGNX1)zs zmYCPf{VE2nhim2@lK~9sv@* z5SBawge~wwu*pjTS^WKecd38<|J^MOCMV}R=S!b6Qg_v@s#~{i-MV$_)-9X%5kDt+ z(bSiG<%=XA{8EL9PIyN7BFS?Rknlx1&qRRKtGtoq`{1*z@T~p&@3%8| zNd`}_%oV_GdvwmmH1>5*E}<>?$NP3mu!E^>jC~sr*jC@=VM$N-oACQ`)g>M@fLX0j zQvYa@X9an;ecfiLS^1v>UjC`3B!5^nb={7nf5;ioHTyZJgL1QhaqM(Hg-0+N#agXW zgCF`(rDn=xRH-JTM%9a+i~6|kchCV_3O4kWjTT(BTFXW4N80Odt@R;18=rA+F`upm zQs}Z~^9#_2Eg{QeUAo_UK&dRfCsMx9UDCmN6^p@)w=yqNZ>TMcCz z2MVL5;la{)t6F6v)k^oI3|hVWF|^rUjqBW=Yj(6dEr8}6!}BqQpEZ4(zv)XMC;v9v zd@f@Tsp&S;nEq1G72pzcJdaVbjEK^%?sO)Q3G1e(#b!G4;#WAk9BGn`pU5g+1k&ZFfgk zW~TM6Y0*1gi#mT3e=NxUy%OKGPkR3JJp3jd`jOA`r{88i;9j4BOZ!)J<=$X$Z#1|L zz6-P&jMeG~@rcgQejUtI5=Kqs@tdt4mt&-F4tvZgM6SXSt{lUXhXDqimOgBZSIZZ( z^bN~A==VF!v=8?GsfIeWy~SvHd}eNDULS7{Z?h{I)n5Eo)cxP^_fFJL`j8%^qtlM> z_&8184mjp@SgZDv7JS8Vq6ph)d3aR(j3*kc>7WkVdWY5LXM1e>_mIZ6*8rcj*ya5` zVF3G1gY96$-e0el$}$*=fRZJfigx|}?z>Q*`q3q4^!-S|y{GWbn6D%67FfblrnKpg zwbs&qw8y#o9+am|{_ZaJMfo$`&#v5i*+2C25BdM8g#OrHhFIwDvplckE%=?#sw?+? ztK$P1xPH_T!+p@;K4frCf7aKJF-TzZxsMp^N87=s>doi=*kC_yu&1#_)`tqCg~8Ec zyGhiVXZ-RBtM@dv`PQ7DLL3WZwcq~wy?N3 zc`~wRehT#rWacz!0^ZJl8hQR1=+bkJAC)HLtv^LQoWHLV-ojg3_^xs=-}@Q+zRCK4 zpZKVBAq`O^|L2-0IRkdy(t^j2OvCOAK8t#Z*K5!S`H6IjdHHk5Q$E)>2L1%U2@~_) z7YKtn@kN8BZ*;Epj%K-9YK&EeCq|2IYmHL|1~}(>|2OLJbHguLee~zz{tdo|rEy)B zWUq(!H1NALqLx;@H(yQp{rijK^D&)U)**Ka-QS(71aAx z{NZUi*r|2xeImX?My2*@gp2+9xt90j_F{2Vy=NNvxc7TxlqqQ2{mH+EbpKqK?t#vX z7o#oxPTG!szpRVvt)*Yi`)f+Wze5@N2s4r-TzN!?{GOz>_g8yZ z@)!^O$n5-m3NK02IpNDi{2?N{A3-AC&dy@m5&ur>@uGXpffGpc@1x$o$KL?3zB)~- z;n7BMqO@y|w&A~wHvfP!I-e3f4rlKVZ)vHcGEoXO;5*8=>R*))cpo4$lrQ&QDGY6z9Zxk-?nLkD@*xRTv(| zJ@0xnnKOwXfXq`q=t~?1P`3S9$jsdC#w3E(lgJbPL+Hmjlt+1=A8YVEJ7!Q5&`$EU zHh*t1y07EIu@T+7f3-ngmD6Y>i9D)hxd)yf36{C$#15yZSQhx|2c+dTYc~e6xseX(9-3|Gs1V(k=6p1 z>p?$Ysl)f;H`jwc{(nlplb-&a^zrZgrpLBlGw@2lJ?vxy$O@iuf{j(a_X4Z0{W#Z$ zD%E1cmK^^fWnW@+Qu&R*qPrVMCXdgA*mO+K=Omr(gTaorR?{eWX5fA(>Fi&RrVCSX zer-Yd3pH(NYJQ>FfT(Bsg@8?^FD);wOfAd39s1!s0r~#9Bo}wNJq@n5b*q&}?pxY9 zv!D|bYYfNrBGi2`{@#NIz~}N7{NwQ3*K>~FrTES9yNv&z((m#3^@sE>p}o(OEg?PM zOP&s=!L;Gm2w6* zl|q^N%HcV`QwTdoNH0udNm4qk#2hdeM+W}bO zG6P($YpV~=%*EnYzN0i{?~N$u{IUz*$wzMI=$Gb~8i#Rbn{$c3yK?xAd)odRbGC69 zceDNX8vfp;_X;6y^1D%|e^ztXxikG|=1c_3-1-UBy9a+4qjFyhOtv)cGki^^H0}ew zlzAXe{^lPMAI{^aT3eT(Esyuc_Q6e!mAS@Y@-6#MI7_?F)3z`Pa3ZJx$2AG#+x;}a zwxLJcdk{~z_PO5pzJ+PpRxZ3dJs@dJXWi|`oc$?SeY)PLT)GKq@wzgE-;@i({Qp!g z*FJtvBrmh#Qur(1J7VRzelGwo(u1}%*F|m2fUGSCMoSwzq|0(3^d+y#dZ5&lw0%gE zwV?4pb8()warG}MA>BW{v0QJ1Cuwpk;5mm*f=SqKw&n7eZMb}8e|)}_LppqP!*``; z1;0s8u0NFXw=o~})(p;NGRviDpU;gO?1aIl@zMIJ7qEWHA=ZDpl{sW(=+B|LU>P@k zV~1Cjys7EVXd@;U6Om>X|WEekY9Ls{4HE1kM9qZq~{j z&%hEc+s3@XE*PxeUwb@$6DQJ!^C`h=ZElgUz-5X5pX#Ky`}|H#8Vr-#aaXKtJh#uq z+;)4S&Fx8_+LV#^p$yiH$;LFy;i!k}9j09Vex&;+nXj$wa;}~PEa&QXP{7A@FMg9Y z>3*)s{WQ|p&!6G{r}$mx4{4Loqbv6;gZtSG9P5qYo^5asCUCu^gUf{HMCruE)1RB9 ziyn9dezV?wz>ue&&wSwd0)vb5Tz0(3^1RPdKQ===<4EAw4Ebw}UVC*ON| z9(njn=5xS$(B5qaB=e;T|yFy)?b+^^!I=zt|i>D1F9Q&@;*Z8elzL@qdG) zr|U|6T zb_?EJA{TtFycOvtyHa;z-e&3azsR-PfPvfY#z?KOcZ~P9VxNX~IhaYDqi;u@-tO;) zcGqnpJ$vGL0iNexhw1qZ$@g_i5tV;(Mj|==UY9 zm5<&j>CP{5!}fvF%{TA#{ptHr z7yJ5MEc9G^*dEusCe|&kc@H6v{O#)+eTuoJ5svWuP3!502nYBN8@%gXgmc(_e5c;^ zQG@-M!FD*aE)SRLjc`t?Bb!c>d6Dn^xYgsj%@(wS{TCvd$#J#tUq4dtPGUGKWt-@7 z{u3zcAMjMV{tj(IFFN!2zueuKo>?-x4TH_t^P+z&d{7Z1q zx>9drcE}9<`wPR5x-I!{3kHz;*7)~0e!tDu{m%eiWu2}+e~#aLmtk>f84qS9v5Yte zKLFlltOQujgl|4;Wjz2s?mU~o)V29@$nVMc0J1%KD-x?~XdsH`Oq_djWiUr|etyRk>l@9l~8W96%*^_X)c%^1i6eNi8rF96>v z)}Dx_boG||xM(l`MdbVEO_-B`KhMDX+<*Kf%5t7v0fP+Z!tYUzozm~5A-{Jxk4HPW zw2)~neO2zXAOk-CzKr%`nMr;iE&A~%G86yP*XgT-1CD=f@ORtVOqw&k5AM=4-k%cP zXv(@Iehhfa>HIaMkq7-DD8GI0V~x9CA zWl_ifu{wMW@-hkS^SSRD?B5ye%^hW3qMW6~oF+?uW4Xh7t7n#Z^?ij}akw#79IN=9 zzliTrxoClX`o7`WL7#+=$T)8!?JbP&ORW)YG6ZMV`G2j>_nDleT#V)9S(q&(CDiJx7x+vcJz*8R^` zH}z?bukY{qz03CZ@_mi!)AHTy0rK7U`tsfO`tsfO`tlw7p2Mm81^#w@D=!fq`k=jS zA8}>0c40reh`3)2#+cfVvuy0E`>*I5-oHxi@&8TJmKG4u5rOd*C5U+l2dO;tsK7uX z!+V1_peV1w_^1o~iHo6(0m-y3Nn`!4ihogSM^E=le$RFom2-l&!f9Ru=T|ZaLALPYu)Wvn+UR3Bd zQmzGD+c-b_kxu!|wDlOd9>9~YHt_#b`kk^wzpEXQzZ03?l{?$YoD<3@9OYgNcb>uZ z2Dp4LVdA>o50`Clzw|gObH0`FKCm45g@2oo$99(Soqf2#$~@l6us@DlwtPRzJi*GV z9eQo)B%UTw$<-?e+U= zbrjyMmHmZ!X}B1vZLR4812T?RS$#Frfj(k-I1W2x4tx~9_vHo=vZ^_keH&#|;!7$V z=~P8rZalYu(+)g-3Z0iYQrEc#ZTRODq745iI6}srdCvz0=gtL0Bwv~h`ps6fc`g2~ zLc?y~CO?y=S0kOgb3Oj&*x$haPbF~db3*&B+%|)Ia)8VCl1|S5J1pJ#faSd{KfAcm z>e!WmC7kn&;+4bBihrjXu!~Fa`lS_zp%M9TorbCu7qOJV?3}|#dVpq=3 z$|Va)Q{6!#vWQH6D)71_sf%l_>~TmB+NEwmzJCVV@zpBnK{@y|)J1+NphD7wZIdQG zrZ?j^=_Gss7|!hh!T`1qV0*+C8T+peSsvkjJ|oN6U)I+z_2D%{t8cHB>0tXmSgkhd zaG|F!nrawv%0S|~&h}uBfe#aP9i=a)dz)p5jPhVsyMsK7I4@ z;DKe-Sw`KN8swg2It_#|d@6uv41||pa=L8TVr!P+RR94SHgLQkJz+&#Nm`qYRu_kxO;O{Va;y|2YUToLSPg%KVhH|>bI*)Pw zQRdxcaFYhNE!QRT^*SKjD9z2{)d_KJng!Q1r{TwrXjw<~@$)8QlwnUO@J|B$cnhU4 zCGXMfA#JmH<@pirqf>diP)?%fB7SdkatWD9xsVqMCV5Xyx3^<=RL=9PSSoKI(;hMd zo*^$O_%POg>0dG39(AKsx)s5mM$>Q2v=h@KIGI~v-rkG8Eh7xHwrn`!(qWvtF@nKYg*m$pI&D3y1M<9Y*cKo&;nPoy~XSsspis7o}W6&X5ddl+mk zs)L9G!+G2ZW(-SqX{b;i2ah|wvTfmpg3Nhef3o@Yi9uTCYLy9^*9zrBR^OT6i}hmd z05l3O(Fw=VQknM+L5|M-sF%izXM#DfYphVM7DZ?2)YgGrqKQb15a;!5e-G>$uNBJm z(Zaaa<#3nT7}Y_HmO+Zfpam`rRI-NBj|aRU)u29*DB;&kUMTH+L?0Y4TdK2YGPdcw zP&BMZ^o>c%Dib=b(q&@~Oz@^Y>@*wjHktse4z7znylTH&Mo=_`PLv1=(B? zh-f!#b+nrY&TkP+rn)rF-meH=8VyuAO}m4&N@3Xeyi+~#-0B3=j<>V;#JufuGz(K3 z8QSrb9eZ%^M`b}ae{2XA2A@Xg*Jc?)`y`&xl)E`AH^hWgf2T=mOpln zS9TRK^GdkDOS<@YPDy>c8&%wjE8U*VN6*j7MvTjNp_<65Y(CqG>(Az61t|_!lJaSp z6C`-hS?I&cHM4j-WbzO~o+;~%)GA{Q$Hn!F)4@7kK2Pbl%6fw=4^1a)kd4#sc4O}J z5g61HWPuJv(09F#>{$Ca%@`h?#?#wbQn-%u?j@4%3zPD$JTJ3{_NkTFo3?nO|ArxkUO6Ca;tBSBH>5WZS;Dvanp8pPgjfrHQ$F=J?p3*-}Ej zJ_@i8VRbWAFtfR)i=j>D?@t0=FjPZHb$&ri zrF9N6=|j8C4*=t~Bem~z<-Wl*S0vP|mFCjcWtwzA`6U0;7-d6!n z+PxBQ)A(MMu_^XrFCzw?(wyw~BznfQ`-Y|WD!%Xk5X&6_2jG#k#d~LkHjKZq@j;~% zZCL#7cbmQ;xN@_ow#{$ix4hd5A0qm5<qONqg} zNKH(((}94rkbQclll4fz>e0+w5|-?&Q5UfYoA&eE1N4kRL4F*1uhiBa-Ll!kI52Yg>pPX$8Os!d1Sw040(3v?|dzjxxJ~JNb z#M^zj^5SwC0|$LWBkV9;uiB6mRBs`H+6VoomZKq8|DHead`*-T^zU>H`*=1bpj0J6&GT`PqfGCS^nGw)f*VtFcxH(`Hs7cXl80FP!zbquvqIurv&=@T z%N{{)q2F0n4z=+K`O+Ms%&^?qlI{{fV+fvOb!q>?en8;Ql{~~>#KRUIf0y-~m#Rl; zP9DOWwRWpX`^L1ha}y*w12a-eB)xk*ZD~^5=GgkJDNA zuH5jBQB*NEmBhbAeA=Dav|Dn+H+mX zIAg%|@=d6Ndim?@&B!ZEzW7}Yf1B`h?}Z#N9eQ(wPv`eSaG}b5YTLh*&=3ea2o(Z?(5V+#kj5QEwOBdK_}y_YBE--Cv z8as9zELMwi#=qIT;@s5Y$ptP)J5n&X4-PFbln)bt<>S1hd;pR41n;}WVi(z zrmh=Pbuq>`SU~m{7lS8sZB?2#FldcBUZbB7hR4oA7S@(buoU*?onn;CEl*F+0gq%~ zaS7VF6o2>QGX6)pomXnjqh-90ivVCvVCZ86D*)4Bk4mz1{3RV*1W_YdLTJo8dX)fR#5GFW&;jdNyi3fYB#F9ACy4=J?MqEhiaPFa3*^H!2IwIhN3|<=cH$ z#xtake7_Ir0Mwn=(CqvY*Ce)Yd1ybAZEc;G)R{1@<@F|cF_TKYeMw$hKHZe$qilxJ ztp3L(FbPvx9&~o^Yl?x`r_F8hvSV{W0uva5WgnkO&z8F|lixC^hTjtsxC~*H?!3dG zV;F{4YzM^Q;-qYxDRjLgl(Qj5DVDi3DU)OvE|-NeBZvZgj0_`nU7nN)8LX>6z>mVh zKybzRi3z-CNIhEu`~+@nY6;eJMFO8>7*1D)GERQc!5HRW>bxo`+XBG4uMXwGK0q;) zw)(G0%4YzyFIzQ#2zv8jI3>Gf2IjB(mxo|*oLgBCx?UUFG2=hUVQpNOv=L=${nv+b z^~n<=^)&s4q>N`sf1ecKYfUJ$Q?YE_mXwJywZ12Za!w|0jFpDllX9s{(r*X%sKSC+ z-)D}T)LYE@#tfcSm38!TuA{Z$-bT4HUK%;n7#c0qeFe=XbM2%)){ipO7f0?=Tc^K) zM4P4GfqI?Ur+HU~ry%z)*Ci^TTF0?T=kD5c<}HBWdtZ~VZE1euGfdkx;+aKxb{i7o zLmi%F5sM(oPv1vkK75Iz{N&CPeS>Moz7qZM4`LEToAJ~wFSY-6$^~&qo2yV4_v$ak zUY+|=w$DG_eSO64z4#p|y{4-B4!-A0JO13!*(Pm)wD0j1Tyg(fP$+0Df!0Q|(Ud^Vd`9TGwA9?FPXkf%{fSQyA`Dw&Skw z(z2-iLO+hjp4=$h0z1>{7Rm2SuXKLW-)k`b1G$kEc|;LBItU(vGiZKm#AEvqufABu zgL~2a3uUgBxPFdcdG%wkX^b}) zkJ~!1hBmPjjPYB?d_M-z*v6b!%b@f1z&mZ^m-l|!S^p&i9TpjL1Ip2!e>>{neKGba zck0n#ail$WVh$l8;DqdUTifZ);UOxKx3GIJO&Y#=#E!)eNylrUGgFK6xXmb!`$`(( zAFnJPPN(4w+M!bPo>zD7z*sT*jXlc>e-bymxsCUiN(KMDAveUYQa9#mHLm9@{H_b6 z%6HsDU!0#p6qWf!=^s15I?vIaD}Kt6PpI$QTosX(wFbhS$KTAgHLEvw;P{la-Ipui z5QdrB)+U!5DM~WF-+Eqsk}=!HF$>3cQT*CWqL0;+jW>UQ``mtpawcC=;_Bz87m45L z#N6?e=c%5Doe!jF>vUNDhS_yyK1@x$^UAg7jhG+d3>E7J?{EJ#()`@N58n~KbPo13 zIWOD~yFpy{dypUd>=sYx8s+Ej8^z9$_|@ux4<7nin1Za=I2*h(_UEW4nWNm-hVeZB zEA#xKPZb+4wGU)q@EFv}%p6Ba?(}k;PXi~8_{rOCZQ7(Y9^ILlDvS+-7r2-9v$|V2 z-m+b;)+$2?S&Wx~@YeTmMXrqaRyv!9(Fguq^PYzC+#}xsLC0};y4jC9+(q*DNGgN3 z;$0sc4+^W9ovK5o$U)XUfOa@$w?eK$Amkw)q7UCYr2ph7uQ`^}aRJ(9g?b0A-Zz-- z7+t_8xo^bZ`DmSbDH7antcsq5winG;yT#UmTO+SU$O6YJ~<0x!+d94YgiZ9M~ZQrE|MP;(lm zK21ZGdHpDJrQFNIb^;ei88yq(uY$fo^F|d63#BBaQzz$54vH(+Pgu`2dQ-zPwC_yc zYV}x#(1hvNnoh>r;(D&Lbh-CoeIxw!mabSSJ+>en>wmakwt{)L9WVsb6co6qFYW+aEm(-Syvo|BjZUani(^%!T$mz00&CB3q; zTscx%#G5u%-ZX`>$~=v0HovlrM>}VXmzll+Yv>8a)KnwAt;Z7!JXfzZ?_Gh>IOq>& z<@VY61+R_p6>MLhq5F7|$t8&`$9Fn;zj_(O-wS%ekD)P99feaac2kAA`!}>CV-T>` zuJWELO_5W_W{%G_Pr@Q8vUVTZD&g;~XqWQvTwBBbb8n&Z`TtLQ3$B6OTa1Dq{L^l4 zfhD#g(YhyE_Z^Z4rledLLp_uWW$ZC{mfMd?HI|)yx3guYd%VXi%(@81<2~+1on00K zA`9>5)sk-K)$-k9Ovv{r=46+}m|%L|VoV4O=4!w>!l4tMKTf;eFKHM3x?r8YVQ?Y( ziIpL&6I_$^clkiP#>IL?KOhh*o^Nc5S7Zzq>l=il-Ckp&=$R+eP!~KJk~cM(hP@xt zsB$dMTc9YeJr#^^R}SY&bf|zlXIfR#m1J+O%eLJU{_ly2em)}9pm9%k#LBA-71&0Yq6G1MrnRv1t z>+4SUdnn3>(a|%d z-aDea8hm?PZ~Dn7eb`UN4VOEkJRjY-AM7{w>!j~aI+Y;^KAZtG4hi#&_B%zxgHIN+ z1Q+Jzaxe+5sOwWgD@kkNjh_-c3WqVUXhQ3Mrlc9hB^-Q;ON`dvkUXi&(Qc`eIOG)v zaZq&})@YiS3%Vu7_t+xz!8YS7>7jtpPV3h)sm3k;F5sBY4V|2tbUkey&?s5{HG+Za0GS-C`#Y}$Q|};TGA2105>hYji#g( z@wWHTlSvZ_e?;==)v<_EGazB(c2w(0^|xK$*!MNit#Nr?eH0B3rsGED%JSsgaw{D* zT?QjXL+oI!mSl_+HcNBLG}vlIUd4V7)L-#tF?8u*y%gKmO&Ee>=#zioCybDh)x!7? zV_+q5yWpXaO%D3%49as|`sUMNTQ$4#7O9YW{&aO_A>nbR>)UB#kYLKIOp9Z$NsjfO zd1og!ktNU#Tbra@FXY!@aLM#-E3ktm>F4L5hejEs8}}L)VoZ)q;;|r3S*WAV3;k%P zU*<6q&2y1sPQMBIrQZ|LXe)N(g)v+~gZFH)F$8^byx2g@1Ek@4ifxon2Qi@Q`K;0H zrkUj31;*x4d%X6A@ncpKXOVFxVS($OL!I!Aj;!F~(3T8jDgaxQXE@EHJniEbO6$OJeSmRi)DE)0*<7%VEXI*(h<)3{3M$rZ%aL@>k#suC;!p(JFYfwyF97`#J$?na z(SlGIh&sUObp@kwTDj>sPJFnm^5a4Tl9a>UG<#>4lbew>e- zoSX7vFdg?rNk?52F7%4G`LHDEci=4u*cK8pNjuAu7bJqDJ%BX#gUZGFxu?*tE3z;cAix zCk9`7+{HDyAAqm6nCv7ibBL$2Xm=s_do3)V-1l=&kq6zL8_^B(y{+*~Eevh5fU4RC zpJ%xKBy0^kt$q5);jHTb61d0H5v`pdP%9SFIexvOzx|Aq=gD zAtAK+LThvB3fhfTX5jtBt!+r_l(k?ES<~4wnw88X#Pq#C9mmxSaRCsM! z;Awl^nz6m!0Dgi44dU`oos4lIj@$Koh4_ZILVmkw7|%wQZZ88W53+^;~~fso)7nXykhRt4LcTZzSSfMq)P3_Y(2l@Oc&T`S#!#aPYI60?t@? z&v10|0XW@y1d~+!kZ`B?`QYy;{)a6AiT~^~ZO&);k-uYp3I8f^6pGJ=N}@5Elt$-RchnBL#N~O+h{*;@4MF^41C^? z>yz)E6!3jL;OPsC;Lvz0QSaI_?v%;?4tJ3B9*B?cD&oUP|1ZHHkrw1r&I$4<{4XEA z*8|T_#3v2g~`PxnKbyAGd&(_{>EE(4i|jRSwHp`Odp+}I~vNr34Mlr zSN23MOUN&0=L(3-5{~u-hc^S3eq(AUQM`zIKkU?tuw45@=U6cvazxgl!s1cchwT7g zc;41b-cHL~0G>CnZCSh$`v%jW#B^KFogcPA&bWO8zNeed1v%aVJpHpB{933E8Jpr8 zMw_zYcK}1){28&w<$K?X@6MY~w6P&?elw)2KHX#TL+EMmOvv}>UdGz^&P8;eq6_ya zD0>LM5$`5^$@u;4g0It6?N7feY2&;wX5oKyHD|xyA$dipWmC&AOT>%4(D(Nw-)=j{ zxi;s2U-C;wF~6GoW}w*Wiy~D-)D>CxPRYj=sg>#ZWlo2568TCW;@#0vlUAWe$qtrQnK*#RgsE=d!Ea)H{qbG&&>gwgY zy0ojhEHS-a^qz#Bl@EzG{GXt!sea}>#k;xAQ@jfRS)c#Is1Mj@rv#ol)VGm@!P8#l z;U5{^Pbe$i&yD1vpS}9~8Js`R*Kq$Go_RbyG=<&g59YG?U4^4c8(Wsc-Q(kkFO@Ec ze4ZJzFCU2df_nrVj)iS7aE#33-k>7sfigxy`}C0YsR|wRS*8y{ic-g+LXLwg@wAuy zVpoz5r#a8^J!U9Vnwu29ma`{VQN1pAlCiyKNcV@`Z#`rBusW1?$**!p!8JQn+!QAT%oqXNo0S`bg0DB^22Rd{&K=8vI%^50g} z_iH8x_!~BD2;Jn)IsHHE4n8jf%7Q>1AZ!oUX}dV%Y1og>&M#Y{@x(__2YroWxy|yI zz!wY~bdoJrXBi3U6<4E(*KH0N`zSag8PS#Y5_x%NtDI@(w=taaeunk%FiM;OIfvAnqwm)189yMfZKJ`Eu_W{HgoE z*8IZAu<=%F-dN#wv0GpoiQVFpzz+r)jN*8$RM=b8jjcT+d~jFWEOhQiIEQ5S8VFE< z{^1~!YtyID=BM$;H#L0^%9#GV{d#zozTWUa$AhizJHyzfaojxW;>H13Z<4r`{J!60 zC2eE5Rv!<@f(eFeXfQ$<|F4WdKGe983i6;6fQ%{I_$+GXTFP_uHf`xJa0>1%W90ii2oEZgy3)(jk9%|RlWBO@!b zv+5d-pnDLmONfW6F_OO^?XWG*8Sc#kNmAjw+hhcu{vzriPoHacjh95a-o2=I3;qT$ z?>}yRLpDB%uE*c8PDlMVj`hpm@R!3$)A8o$9 zMh0V)|9|yu3BCmay{-Ej=#$2^_qUfin4(i}fplN+O_ZY@`h?x7-ea`5H8s|V9JB(< zK@&HFZ7j))&}%$B_--*BdYY%-NOLamQmhyH0tUQZTUx#?w?a;%V@(3Dr99;+vH;OD5JiQx@h0H z2lfruEBM}mXhCx2Ao2Gd!Tk08@E1)dqg?wA`p@(Z`oqvzV`O4dG9O3OXte%algh zRHMzmpe)zymt8|%Omvt<$Sl=EUH2%=&Ci`Yj^JdXL&7FwI!WvMq^f_0{Nr#0g@YTk zZA=K}!A@gk>3MlnGa%dISU-;fuS5kYjd5aD%6fn{T0Bq`-y`g1f|k+-1YMLp4FW++ zAHRb!Pp`Y_xkEVYIbwW6j9$(cj0@zk?e}3In7RiCLm9iwhFq{uROV(+3cqmO&7*Gr z=-#uFI;q1I`qiqCqFcHLU1R;Cq~+MX89c7MyZSTGt{?H;ohQII=?k`=bxWV%JA8Z+ z2Z|~?)=L^`G&wUzCxnBOi{i9mYh91zbG|D-Z;;=#!z~?~pJl-JW)ogQ!s{CyR_>EP z_7qM)Pm-_~B4^H$e2HGLtP!^rhqEOe-VqCvU@lZYj)Ve^xZ4b zvxR2lLO^Wb%yMf?KFOT{Fq*$J=X<4BV2&f691egNPwElu;z_xqioGw(``eHFzCQ3# zzW0Se2AuWWqr1flatZNk=$i~RSvo_Ub&7fV_q_kDiJSPbErH1ul`V}ZHTeFtF;o21Vg~UY_iL;ew3lSesEg(mb z-7~# zJ1?jmc&nuC!#M!n*TyBLcz$0id3D@Wlp6>lE3VVJO~gePrI|b6?=tU>>?3$0nOs@mbx~z@rOz>_i=U7FR6o+QYR&4&(SEv~we1cpmpm z)IVr-;U_+{9AH5=`KY#6zaFAA;h577N6k?eYCW?AuKAl#uYdGBUxQ`DP7t&gNCXW{ z3^?sZS@Q9)?UnwPymw0bJz=tJ6YkCU+?%>bd{-vsR+gFw<2bp9qafz-jzMeQ4#~^6 z&D&`@NV{@3N}k4Wl=coxP92s*LbkOosc&qOu0E2ZbGnYs3!{*;T2-vh7`tkSfq{|TMrEIET4Rjsi zjrbkkWeky#gqAM9*5)n-+_}-788QNAFnY$#cavj#&=c_swvSY-*=~Cq-sRF>;1cw1 z@;G>#`$X#1`-E1klQ1nlgelu)*1^y+gG?%+F4}KCY%=NBO%9PSR%~DBw0I6=7xXE* zGB8v&EYFxa<_k>tI%weXjJ7)0%dZeT^*mI*+gYl7xARke@47I7S^tFOdryD#eQWf6 zd-Q$JBM(1h^sWkhu-}@Wn|9mrZIT8*19>KFK^>JL% z(tJ4~X~Xd3SC|9xdkp%&o~a&`--nu$cHi)J`8|Y-q*#_?A0PcGQL*gii9WS)9Y zw>T=tJGLcjn}oMUDO#`2o{T18;tb=;e2+{bS(Ctk;~p3o*E;C=*ka6JFi&dPY!&H0r0B6jC~ zk^RBE`?!s7tWW&}#~*ol%ai#W`oC@y=UXr6MBSI)FO244Z#2j9m{$(db#wB4-BTY4 zXPI---{c)2(r#YT()3)AG`F4LHm=e6UP*^P+v3b&nVy!uDCxuV*aeTy+na_6Fb1dIC%-=uXq)f-K=l2G zHV^&Y{pI)_pWm4`j_gO*MRWE78#nh&;@fnm_f69H$Q{nBhijz+vA?6v?rbW0&AyyM zpUG<->Kef-Lp&_=iw0U(Hr48S(CRuD@0#Z^O6P!nCqSQskMp_b5C-l3e1P?JHJ@`n zexBuRL_JVjq@IM|yK*nEI$jvnfu>*+Na}cT$Xm1d7w~-x@)xj9KeL0cCx!#1lXd#^ zzMkqpN#3V?fR88cm*XvD+kY~h?ZL-e)1z}O!o$x~)73IA>(R4;Bkn;+dhignHHUY! z;omKJa!cFh3~761xPR-)vFcMlhx)eS)iykdFpt|v3zN%JLDoGNdGPU+`nbUR+f-j}=q}V_;JK0#q zF1xW}uQh;nZSyDRLj0<(Y}q5naB*MD<+FLyOCb+8n$m5~EONKP`(d{4%H+=#}8!ElSPAwL6>FR9}APtBrMC-s}f-ju3aJ3uz_3w+LZBb-pd!_npD-MJulYXw#(O4{*opC7lJR*kr5;QrZ&IH5%@eirH>_^9|K#ZVA^Yy~;u>jF z{XxYN#))9``U~ru^Th?g{l2LsiGg(3_?di>-9s=9a$pu0Jta~f<$(IJU@ywJbME4g zc08}wePE(I`d3jVd@$ng3v;*Nb~LYUK52RK=+k8urc#WrKV*FU>(?R%*nc3dA9)P8 ze$;UNZQy!YShv9fcwuQ~>f{)%yuf&EcSCLcMSL>P2ggdpRvd(BAh2YO4ltFuW*WxV zK-{s9>Pf07%~`Y79&E!77rc!UXk8E2#W1{#ZT?J41w>3+S^}O?35>n2>7m|KerO*L zu;OK(Cf*Q|dHi&&tMu38y86eUTccFF%>$I3=6{ zx!}GyGp{dNd2l$vQE6>?I39A^;ms=0#M1S6$ZXD0y1jq36L^!CiT5WQ@61^cQT8NY zE4coN;rg?{^@S-uwz+fw%Jcl9=%+gG%#0ePv%iQ-Z}-lXsn`e3J=V_{a@z599_#DP zjf;;y%-jikp)BVneUU$f^8Pu0m2>mc)~C0iPdB&glSkJx98>*@@`ytoIQ&_JL(eL4 z_>AH3F5uvL4cmdWkA7H)uauk@Y5VE@H`AckSQtR1CDYDU8wnPUgEP}GtGEpN^9aY@ zRpR(r!|@M+S3k$1U$*-Ai@&hkmHc8<_t~qY!(Uq6A8#3} zw5>(Q3G*Ux8y6nevBJD)lTM#ex6S!jeJR3mwPW>HhU1?B$ET-w+UHhc-%sp;dIqZa zIUYNOXRve2eHF=+fbVw<-$#J&3FFIt;RlWA z%r$_&5$`5-7msfU=)6ec1tl?rk~4GY1$gNk9uwFUvo7W3(lnPnNwl>BPax#~Ho||k z{QOB+6gew(`7_oa_0h);id z|N0~Bx4SR+d+X!N(MOlTcIMRbCJ)ZyQ|BJ!+juRYEr2rkA0pgvUm|n#vf6Vayu)R< zor`msb~YBj57IgAsrnJ(y?Tj!nmX_dPK24)2(k}hqalm1ItLr4K z)z7V4($jux>#e-&n(Qm_2xoZU9o~zeuSXAHPv`5=-t{c)590SC*#8ZvkLP(mW#@T* zCe%UJ4AE1uCgLI3Jrg@(r`&-7@u6hDc&F3W-j+L^Ycp%+*}x4kL+BebISZ9TT!6*x z{gHlOY=UW|I7rcJYyTI}~*rp{!?_i-`8j>3>wK4IW z*O|~h5936uD{&K6ka1zsAbr-RVtW0V%%)X{}|}=B~9e*IAi(T*yDfxwYK7+znRl zNmefIb3e*>S^vL%JsWaQwtBW(J$~lQIYGXJE(E^s%I!3`8x5{q-c2D-&%Zf$eEw)X zIG?t9_82VhVRzyu_;Ves)b=+j)nd5=Pjvzbe08(66VsLSc`DLhj`hp&W7>LnfZk&G zJ!{jC8SQd@H4dg3@cB*9I)>(KaiISNcZ-sqAqi>z5bQJflEEjkD5-0|hh zq`yhtL`z;mr-LndNuLi{9&vTPbNVx;-%lbxjnA6goh$?RpR%$J&+#JPIK1))e8>#` zE`#@TT*9Ye^SQ$YI~8C(wp)_dw7k3V)_9_u&<~_?B;!3Hd*@An$39Q|Du#|V5w_q6 z-lAKYLBL%FlBOSW0l#Ao^UxIYJYar=3hgv*2IJq=4B^L;#y(c37 z{5T)yj&supxgOmyyb3UQLrCfnFJjZ3w;~yRkpPvc1yJFgrXx6_;Vfy)qPdJ4Ugg={S3BR&$*kcpdBIbFBugW#1 z-*9Ed3_Pw`7t^oQyQFwP$FF}U`}M6Mo~gz=^2WUE4I#fhKExIK@fQ2mcE8s>2=@%$ zVZ~)^kEKqWb|F^U3|?d8yCl?YxVK(J-~5Bvgh82Ur`wSCmHMUvbZ%gZ?u*Q5tSwx72_; zdaX1#G45|}x5*e#-@rAS{|oA69~h%x#OTJ~xx@ye)5Yk+Jo*yF>(aAO2lm}=fWtYg z+B<(X>O1_eQieS3aw^Gi>b~HV_4V!0N9p_II9~Z<;P_w$N4LrTT!iBduot&8SSqe< zvjWb~F`Tc5T`1B2RF6x3CwnZ{Wy#aNXXp3lVgEpRcb$!e+8IYzW}>^tIDb$1dXpdW z;I$V;eZhV4Hp8wxX_FE9@nY-8-Jm`3@jYZB>s8Nt$A91)PG+PeH|T~$D2)N3w@>JNtxg_=l1SjwQ{%3 z*Rw^1KCep3wvk(+5(xWHC*e8buL0gaxaSb5AWEVrA&m2@QHE>PtFcybUS#bVZmZ$^ z@jWoV`@SfiOZ44O=JXzvEi>#)y`Ph4f?D@5p~|GCHrre2Qu2cN&uYs@pn~ zz3+`EOF2q<^+n(Nqwm|J@9vjO_)9H48JEO{<93TAPwlq}e#w5??{0LkM-8>Hjc3m& zPY)yWbj{{>1K%weD-1hg5bB?xPUyCsnC%s4?OZ@TFHwyA7 z|B=Ul!$%E=uKRBVO?Jo4n8V_k@9^f%h9V*aXJPdGS+^q0LWQo4C;NBlF^)J%;u^W9{`} zPNsRW)kkq{L2+ z7yK7}UViN{wD)yuZ~toBgKw6%_sz%9-nXp1>MGl#-XhseBgig z-ukj%dFD5NYvN6NUhtwXzVxPZPF7z0H>GcH{Mftx%Y|hJMX?9Ly~(Ke;4EL3AuCnUdwX;`QTdXUK%3rDAp?6K5`l6QhK3% z+lXP+vX|rkOWT$mtyHRm2#uxX&kE)FZ8hcbWYXwxtytFbU}bBc-;(nE_;p#^_6KWt zKY0j8CxSnZ4itZWOUjcz7oq%Hv4z*q5=`KeFrPP;xaP6%{L`}hmXy5|zb9(2aEq8TyJ^Cn@?13W)2e@tf_Lp_# z-mfX!ruow6m33m!g}*gjTL)9vH1Qme!UzxN1?KiU2pc|xS)67}Ci&2Owx&yLRskdr z7=9=#_#sR_Rf;)Dsi$1@%FhA9O1Us1OuE#%RH=vhp7o)m)RoBNhcM|yCF1EF`6Fw^D>bThUn1 zH4S4S=?a9xKwsZ3_$~Y#L@=3k;5mGBDjOFt}2X!3T~|8GI;>({1$# z%rT@lQp-sA6&8k&5=4DSNrZPJEsq0)iP()#-n|QapL}-gddg4Sc;oi%yLKmO{I+BJ z_T9UYwqy79o1U_VDR*rg?V89v>)vM^`bHz412@PgCN>jpScb0vDG_}Ja=nA`1Yy=) zAMDCK|Je}`z6xA4Ntnwi@~vS`spK=zyL}*@Ow1vB{L?DnI6ZR3HuWWQlMuOn{H<+; zdw;fF)^}wqTnm1L+qw!k_Tz?C!tGim+%2nsBb|p=0mpufuL6$!xP29H6d`x50*?3{ zStZd?Y?A{aIaY<+}l@Z66>!Awp;f~D*(%|_x(Ybr_sA;Y{$Ukx z9FHHa5-vZ|X8yL38yi;%chM@~*x&0`3Ab$(aP05SRl?o8O1QyQ!ri(`xY{b<$bWaN z67KF*!acAGIF82)R{=*lzoZ>pq(}e+{yc~?1h|hIEIDkTH>_Kt{1I*de_sO3WqXwe zJHfHOoq##A3b+RV^R_dm3(u3KNl{wej@*c%Ll4$PQiFW^GBBZx7M!h=l%8LGY`O{zn?DMa41_u+cb1e;qRi{`o6Q_ z$qc`x{Y3DZmr&XgmQg7_Q z<$?8m=OY!tl5pvEk*5gil{`3)5HHf!%h48M{`Fl9uzYUhV6}v|;mUkeaW8@#H}H~8 zdAw1mRznIRiQ*1-8Ly1wu0^@az1&zsTL!v~+r}E>6Mz{_9*_m-6#&K6i-XlM34^Uw zj~}Wcq_W_=zgT0D;aa7txcxeCV;kF(HndQ+Ryj}_26}Np9FZ$%m$s1sg@@3%xPb31 zm5aHn0J{s-8m#q*52|XhVcd`(FA4#l4zP`^5|7c15AAD|@fsc8F)NG;{Vs>K=`vJy ztKev3HB_qZLtBL+24UwO+@nxBSz~EB)e7Z$70+V_QW3QSacy{Nqh8Qw85{LF1_-aE zj^ogAecvH~t#<|)D&p?zNC`opi{O-D6seL~t^wSgfCCRGBN2{`jgc8e-Bo&|sE4qEczq2au&+dsSrmao*Wp>ezb&lB`?IAZ>bfm-x*K$Q zGQi0%Yjl8=4uy&FeWj|fObaQ9(l55)uHmxa;#(Q73{^%OK!W8@fP@W}P3iaguhmS=}X3-x+w_CCYq5qhb%asC zOJGGrN?hNkFI)>|;l*cgObtjDt78S5oBL2VS&PFD%f!?|X+f@2Ev+06F%WrGLhkNd z3P63lnqiUmY~R_~vEyK|TAbsp2{;?0hU>u}WGB9X99R`{Byc|O)ybSBrTL2RdU#A6 zE#pZ_T)N`5rVEkIxhhn(xvKN@@yL0v>ZcZF7UZqu zy4)T2SCmNvKGYgo*ZGR4cZzuEwow}y+Ou!C&MK?6UH{l z@Gk8rV;l8-1<@Y1A(LI|W|usgM&f;G9UN|Y2cHOdj%z@uWn6J8t5Z*Ag-tzNj~yx9 zjys0y`##glxg9?{BU+0D@xo&{@N=NwD2M4PIo>q(Ouv{XBAL>iwPDW|Jz^vCm}JZg z8A~H_9YMqspQY@|QR;*+fCs>B^NWa%1wJ3xlJ$BaCnYxbDHVmT$A+Vi&rBn%Cv3LnY1~iWN@! zFn7|EzA_;YJ7Ve-BiSglImas9kQ-u^m*XepP`ApV;v60&UPLGuc~p(^lJve702o(U z5>085b;LE7J%FKRDBN}?&9Gdniee$Up?7g(ZmcR@T0WT|)8}C4QK+ zvBVdd!LjE0@cU5RW%L1!_Z(Ih56}BJk;TeVGnd$)sZ40NjYBe01t@*P(q*ngYlI`h zI)pb1>MIKih|7h=$mfoeMdpsvgOii9&xB(#`zqBc>SuR2jG4vOW%oq2EGh@z7y+vu zA6Y~^Sd|H;##81^O78d}a!X?jPttNkr0RPl$7cthA(1D+ePVN&;{vE+QI*wE+))?( zlw|{2@`Q<(-60EJuh2D7j(o2{Hu}0(I))pRRG%B=!dS5}R2bSLkz*1rth*=}(oayjLjqL!gILne!$iMgc(JRNgn1|#mOTUQJ)ygf)_xMyYb0GV$T z57d=x;>WrY)c^5utj49X@NQpMPR8%qI({{E6M1G6O#2)BYsOND*1@8R~c5{j0Z9Y@`j03CHG z+oO}F4DGp;#4{tnV~~rDciyAz0l@k_@DEd{MT(5bMrbj7L*KJ z5f~a9Dv6T8Dmg*ce%A^+{^>==v?sxu3Slfu7jN7L}V+B$%V$he;N0Ga$KFc=`hMu{nw>LH_AbAvvM-GDbjS23nC3ZZ>n2! zX=Xfk+m}qhU)nWI_LuTvJyl0rwPm{DV&@@=tLC~aFLH#A1bT6QMAfr$2Gx`I!ex@( z2~``S7k=uAvhBK@?y!d|6Id^CD4_ekAh2X4vim;UIfkttg~Z#XtB^f2^H5~)%H1Ht zCX}Yf3bzNnKIp$@QsKlR*~##>H8n9eR>2ibF5NoW)a-!;ye@k~j-;t!93~&hgEhR= zibZFP!KlW#ar2$Yx`@zF%=h{}?IL)b_&!kw12g}|oucazDcg}7Qub6MUQ&nVyH}W= z>RFIdv3e$giYg=ZU%|Ci{~a2w)Qe#svFQwhd0@9_d(>XeQLEA%;^9%SQt2S)b9%x{ zSJyAz%YyYv1Q+cs#?~$N7OM3eKW>#(iyS-zJ4T^aD;(OfTc4gFD|1?PDK{eaUSLIE zH?gfs+7+4L!abi7?z-mDW)sL}>JJ<{rGx)VdZ7dFBMT8jiv)+n#@(00FiUmS<@|x{ z!G?ZVw;$9Qe4QxP4wUe)J2u?aps;f-p$a3_rc{^;OcJB85OAm|K1iTPg^%h;f?$*I zGa?+w;~eY1h)^G|>__Y&Z1KzJALAw#VGMCKCF#4Egj`J-27eEt9vXwJpKfeuXAGh} ztW<_g=(Y*0BEwih>WI+@Etj48zSMz@1~1H3Czp@4?4P(iQ>DKmH;jwkkWb^sW|kO1 z&-Vp6k*j}-ks|2dpmV}Rc+v=w<3x4v?XCKeya%9KNChhpG+DW6X5g&g)-(v7^7trr3fRSK z-@c0f$=qx?r>O6WPQ z4~G(pM1;RByFcS@m{|F20RH`FFH5Qsg^mN_Vy!~eNa7G+oeLI5 zonSucQx-9YKnvNg*6Hz0jAmrWdpg7+s)k3@&0vBBnhq^RzJprb^owZ1WMsr6_#d z+?=1QElt5(#b_K$%ag|!pwq#nlsw8wd!7hnm9%)HBmQU%t&v> z>Vatl&jHL?9^S>6hd)jaT6e;1i>*5r;zaPKSPDQcmaws}R)CWp zGjZ*f0dHBmvH2_3a2luWj^lswDrqb>@rF)I3$NQUJ2??A| zd~e5lpx6@CntaoTdpp;5^1@7MZ6`6N3T^%t^|(}6Cv&7UcVcoDVOO|*zCtKQ1tvO> zg4#_!+cdondMH4O#L@A^t zaEE9qJoN`lr%(O)1Q6E=(qD<0r9TNqJtb%;GHwrmSd{5p%!4{vszSdW+FJ;#_u7`# zJ7N2qQJRcr`bnDc%wmfzAm%FMs2@e?VHV1ecV3M@>i@KLz-uZ#M#StZ9A2UU#tlh0 z6A$X=&RxRx7klexvSQoTR1QwL;F;*pj(M1Fk-x%cVEdt%<{m})JK3Yy@Jc>qFxW3E zgU4W`7NwknhjC30p1j9IA;axmx^&Q28l#mVOaju0s(;vTq*ecl9K`cbI6Vi@bNU1n zZ?D1zh~ud7+JvwItT&W;)a#+BCWPg26q}+}vOazKC6;Y@n1cXZwp_l(%hrutx7?)e zYqf2UYw#c8p4aU|YBc6qA8wP93|#9%2jjKQ*(Z#k={T7Yj8q~~TDX2v2|bH!YFh33M%`*Ruz;Yf*RY}NMkEZ!*wdKk2k_? zp_rz$ZeCELZwSS5I0`>3bVUX%s@CVroMGGIwiz~6#(D#9|PPa2z zSvNK@IFRk;*k|Rpi<5wrFvyl1F2J4;G(@HwP=s6Ea9YUYO0x>x{_8; z#2;Dgw}lU;({JGVySsoP?Ek7{2)Y5IA8GM2bBuFJ|-diTKeGg?#S;~5E z#P*1_7*~Sd8_Tm=VFXTbqWdN8Fv0UD4;m%r0j?|0#<)8rlA|;1MdXmKF>+9v;LszK zE0pwbQkjGVP(_oP0H^c@SHmOo2T95q$Ee4M0E#0DxG}9XC+1cVKv*6ff=3ItYwU^( zbzl>9Mf@ved1NDJc_T$QXmOrii!%i`9C~*|8LMl{|dLzgZNSHz)*+b)4< z*>(wS=tm>;pqLA@B^Glu(=kYBJt)yOC9=!0TOha?V`&@`crM86xFC1*Q%Uyf>@9}{ zQMxfKG9w2^D}y>1DxbT=+lS>bm2|aqrE)$|sH7ey%93|R@grp-ot4@*} zv?s<(u9O^>pkOgr{65^aALhA0*ksF=KWltZj^ZvzPQq2*P-;Y*YzhVTH80j;IZM)h za<4?0Yh#v?xq2>ZVmHTbaC;t*L>o{XWHr>~*?mlVoVzGqGd`xY=?HUe-#OMXUd$;#>bRce)Dc~a zwNh2@BZcuGP!l1d2Tv|HmppJ4p9iAK#HRhMA>FhJ5cm}u4z2;4QN67O3;_Um*MR+u z?{PXwOXHYR*zye*Z&&{HV^C!j^a^s2yKkf5gyG@{s8W~4MD}`|}Q**IA zH(D(B&dwjksfK$hokw3r9%2eFy!~mo(2j<=1(ckvh`UD(28y#Pz}^z|^{7U0O*Taf$ZClrLw1wkzjF_GK9v|o(A^s z>3iFS3Cf{89QZ;x>gnr^>KQJ|ktYWTCk|NHdis8|U0EFdIIgVXytqTd#c}u>*^|jo zS$q1F;|II#p1!jq7^_8(RxufR`p$|QX&IN8 zcpSw4ie4oeK{gI9A=XE&K`t>ofDE^c1(x%kzKv`#3I!|N@d;Mkj*BGtB`e+#Bib^u z*8}3T92WQF@fke5+b{z4^f4%1%Ny0u6_nB2;uvvyFW}DaLkEl4!H}J#&QGIvfpbG^ zn*sYW_8az%=&`@ckep{SCJOjgZG}-2B*v%W3U%O<$EIW+d=d~oSK0!Q;vET2LVPT4 z1AF}{PXu6^=;`}tRCf)#RUU270~D6_hK@6F{73`^M>;Ss99OXws+Z^jLk9nF+(Ij} zaEkm2Kp;QcJ&MR7`B2n`_7XBW{U(vL^g(F}Q#U<7{0*!ppsI%mGK`Vn#TG1sI;Ww& z_w;>0N}KG;%ykN;_s99|rXf4~KVzU)dXO2G!Fq;)_&b*>*aY?TZNYj6jnz0|d>>__ z%4$O>=;Ff>UJwVO+5N2wniN_X5oD3FFVMya(x26FN|n0`*-sU&LwqxZN0qi#b)+X|O%gPs!k5)dGe=W)f z+D3!M&a>{e@%G7*uV%r_93f}@T3n$_5H63eic{M#0L9d=0>+su!NeC?PX8AJLTQr7 zSf@1GenC`&ia)Z?Xb6r~ULLFC92I9*JZBWy_(B#EhG``Z*)S%Kj0>mi z^I52M)=>sNPwF#StJLHetV43AM}A4j=f=f?C`_$MeE@q7s|m6c=P5mXr&!W(;rK&T zJqgJ_8&}xMIx)?;Bt8q^&PDB;C)@v*xKdpxL?&PJ|MK=FaB>$_{=ey50|XdCf(XbC z;S>RL8E(jArYC7KN7FqsA&NAUnVzI!GBfF($>D(k5ii7hJ$6N9MRr|fS&vm$#rs@! zSzYgQ-4)&S+Msyi`u~34dsV;s{rcCF!0zYYpU))SRj*#XdiCnnt5>h8koTnJYS2WB6#SD3{~s$1f$@0ppB$b$y?U z7VyIJ)-8}A+l>Xdaj3F6<66}cTt^A(M4DHfwiKhot$Pc%UKwN{YlchFHW+U71>>YD z&suirnHUa+Z-EBdmKbG&Jf0vuM#Qlj7=p!JD#=-bhFE6=76}I>heL}euc<;epdM^3 z!_U>*g~5uGN|1RBTM_u{ktySuksaVqe^J&mG&x&XoKy~PK&gb^37&*@*&dSahNvbs zhvJy-Rah>zA2)|aa?3%gYKMW$hzyIP=c~2|ZwIwytY6!YTaBtPS?3Guxc>%Ym#s-x z;1*+4I8R)@x0Kg~3nKn|`rzZG7TS(I zs!C}HXSlZ^_!eH*&0Xcql_7=|U^ArsI9`HY%+ANjlHq>DaWD*xJ@`)qwZH^EuozH7 z4f#j12;G7Hf#K|ANr>PL=`AXeA;K_Z^og9{;!!2aVB8%QxEWNKw?Gp6gfHBWtw4;? z1Epb{ae^bR%Zn#BH&r|XzqvGF5**vwTdWLh#2IDG2Nc~Q9z-h1l8!D%N=(|}D0^>k zShOGa1=j0=2M`*u1@Glz7;&E8haCZ&83@B0WJr7t=^j$|A@kP=TX@m1um$6yk3CZ9 zFO|2Fbz4O2=}sg$aXhhTQ{L^5z+vGqRx!f^#;|LoL+Jps@CW*a;Opi2b8-~&x*5wI zZ47k=g-fh?g}NIS}EY z3`Zfy10P-xe(F3`%5TEl4+jGd3ZrK2C5G~lr@?*;+;6Hsx5QMeLK5$a<{*Yl2ct|j zlFfNWu7=1jMhOuPj5Ft%rf7Van1H4S2eutN)yDly*GL$Vzr_$w)|IT$=?x*1UZ3GU z9%m>H>9Cw*5(&gwm2}w=hYB`csRcjCI)rG5LTMYe>d9dWCHQUf>!p&m*c|j;HabqX z>wwNi`Oq+WRr-t_^8grI8R{;Au_iv^27oWG{kTWapHz>-)Q_BV8L=x;;f4}sZVCQ| zy;TNNMX7$6G~$d9=*Esr`*FM@l!I5MbK%!#S!d8U=FjiX_Yan~$q?Gjd3%d3fFTyc zYI3}Tt+07Y;_P_EfQTeFTq`|;L#tO;ikr8o+|gRP8BGYxUW;Ouk*N<;OGEcVpt(ta zxlc99E7=CB*OW-A0wzOg+@inzVp(ik&LQ`sals@TyL}5d2**DBDip3CjWS?m)10&R zQdArFIl>ia4%~;DD22W%J0HLUF$i)~GpiN6BZ9M(UaOVgSVgebUnUfU%H(RTMA?XGT5pqf>0&Xw9az=*J=HX|j4MqKE$h zWXeV@PMgTo=az#kb0?(~6DZCJvJY^}j5Li8UD+TZOX(-(wDC7&X>nv-1*<^Df>Oi1 zJ47$xon=AsI-qa^ZE)jNjNGHOw}Z(kYfuD`O%*V9*KrQdI5btFV4N*m#X->=RM1X)I$I1^4-& zyXbTa(C~VN_T#<@z6T1>dW0;#jqv1w?J#oNOfFTYZg~*Jf|ex~@uF*~u`6C>Q=re` z+*B;~rDhG0i0edt7-1!Ij5PjrsG`!Wp2Xq;St1=YnNk)L{Tr=jG~9B8W7lllXNVlC z%v;88$W!?}NN2WKFt(1N`ni?tK#4$2xS5#TeXejWO30F%(8oa$=d9(?cG>~-qDXd=6NNo6Nvw>z_bVZ@ z1xW3aTv1(l+hnOnP^c~TAitREcyfTRuq7sIlP9XbWz@->YlOH9F|?>3!4UN>d%KDf za8fW0`=P=!(a^A1Wax=#9r)~KPAa0{RWB%=v^eHSCx)6%A8hvfRQIi~^p?6dapH7J zkeyKHFt9U#@$4((lw0wbcsIFFD_LR4Xb(K--CbDlGFG&u5vC)6>{x`(D{g^7DeAXD zLdBGiO;|FNu_~tQ!blaV_!B~HDDv#Of8oHV!IH5iq1u}U#teJLjU{qzio|%`L9X4v zlq_N4+*@O2_f|~5IF{6Y+-8j4La8XzGQLLL<;{#}A(}BlX3ZLuDMnt0<`Tu2o%>lJ zF>MM3ix667Q2ZIR8%_jq$gb$7_0%FsHS9#o-z#35S}(gx+esMDw&JK|0ZXE8n6cQ# z^+Tg94h3*lj3rt7E#`oB)^Dssii4PBN%jv|y)MIOHz?U`=k=&dXQkK~LX(=&)DYsV zSZbAYwwWg)ZEBT?o=avyU6DDBu?V^z3+5D&5OJPz^5=Y|&N`j2*n>3G%|@f+WEn|^ z|4}6KZo&^IZ3{{!kKf8@GzXf+xCrZq$a4NCo&U6qP|G6kt++zE3G*zx9i1@@e!7jaeco6=b&{QFpCqOfIP((hzowQ+f z`9LU+-wFpXm#e&)A$H`*m=;bz_`nE)@1|Pcid|Z=o>v7x@-R)~bO>fwol>}xW&i&V zq!SCw3jDHgc|)6WsVF#UxzSaJ$P_BiK{O^@7K#MBE++T;0Dwxuss&CV{qj8))3LtnWM0a(o{iUt2b1t4NzmM1G`G_MI|B9<5J zu1LpRO3a?%N?^1;3mqy9DIwfM*4U(Ee$%-kqQHnJ)6U+mR;lM0rx$|eU%2?;dX#=x zFgf z^um#6w16_!4r*Em9RPr-11~ot5Z(02J~)kZU@3u1CFP8i=nJaRloqAfJV^&k!jElD zqCmeN#BQO7#stRve5{|3Q8{OByp~#xoOa|i3vq_^8aIX^d^~(li#XmXpgHkZAkY<6 zxq!0b)C0%)dgRko4*6t5#udr5mAOP%PVzJC5cR8&H9rT(;6u!^(bVnAbJGTQrEjw+X0cLBVx~SBXpTlbs^82H{fHmjg!Y-Cbv(v9hiT;btCmTKZ5M-EMmzHZFW zWIZX^2${@x@zk8Imf&f}sl@bhiR*+>Ae|lEp=X7pn*U}sP5P8vyKZwL&E}By?7$mU$4EGkPJIG`>rS)OHD5PS1g? z$C}&+?3-_sVmH<3qL1pD&YVz|tRA+Xn!J*s%GvK?{f-Qx4~XO+frO4elR5b9I8?+M z`wFWS<;y)*8Q85i#455#+(NI7w@K0`v8%#juNjZA9*B4A5%`L!R|iBph=wm@C$ec$;8IvafcNLp16%9?t9= zXZ6u^f6z?Uc?K*S_c7s8hHr_(=Wjq=i#3G0zF5&)T@$#?2+f8&tFYsW%exsp9BT%O zXqJT1!1*YNpi&HWb0`O0Wari{90fH@=5=AU4*;JnScl7;iDfU@?f%I$L9nlaQEWo< z0v|YsIW@~z{Uiq z$%2E6@Z)T;fv^Yn^n+VWk(TJ9y!zsBvWFDvUQ0~=~sHSp$!ia4X(ew03 z1(T9@w^BBFyJVI!!s!&mO|ZZJf;56hm~g!@$mKR&N@~fgcu{Y1>W^oBjv4w|58-Nk z87oMrR?z^HYcB*%FVK-g2*$b!-QKcx|&K_IgUXX4^Zml&}OpLZLG3G=i9DU zAIc$JXQEVkh&W|Xi#+7f;3gl4O#R(LORK4$bNcNpYjdMN8(WZj1$9o%m{Pg!;fZ7G zs^Gk_4kdO1&sbW1c*0UlE8d6Xmt$_x)!l_noQmXg?H*ctp}&R^2j@usd`@L*PM*UR zb(1=U3y&20p6(9btS2WSVt)rqE=E=h2Q=ptZeDWNyv5!nRYDsuaMGe9x+IH6?ospk zXAu#6j}Td)Ly_F#$wuQ=c&<@wx`&ac4oGt!kwjhjtGt`TJPqUAy2)dShl+8bNGH%D}`q>Gz3EHfbISs$=EWqCM!US zNA`p#V5h#;;;cv&X=^*n#b^aLSFq>rj!j*J6Ki;z;3vZvqt_(Z z!Z1cIa6Rfn7uauHgg33hsnI?SJfS8^Mi;T~K1GOpxzIN#6XHtR9BQYK4z|;DPS8wN zc@uaC3x*MVUaVyCbDJ{N1t@am!x%F+d(g_^>@AbGQ_6g791#oTI3+kOfn0>mk5(5| zTjC9 zVrK9hvy2+94}z;V6oN_xk{!ico()!?HF0sffww=%aBg+?gJPv;=6H%Gdl3dVCl{XU zPDbnLE+c*IdR44gD(LMNo56mqNO^vQ!!~V@F{A7#)JrIp9$Krsq$g8*#HI{pF!Hn? zkQ{}WX95{p9Zcw{jQNZQbIK>d`EDo z1cJe)(Hx1_7wTXaRD%$b)XJR>TgJ!)C^&jMMPG=kgoZMmor$PdaoSvpdSWdqOU-8j zFtF#!;F-iedz>04%^7q(o17geLH5j`+1_KwH<~zraqW=>D~a7DOVB13P^fNVw+EXP z3|w-G-DdG$p@P@q-itQ;-?^YV{NvIsW8ZzscmJ6GZEnqHc71&M(hslLbMINp{`|~^ ztMC5C=XiH1;m+Rw>dig5(K~Pa(Hozhd-Y%3{=2)M621HK-?l&UQFNie z-Er@4KJfVGJ$&nrR}GC7y4O82{I;*`dhHMIZ1kRe*-zj8+moIeMb`=3$g6Ju-gSTX zgs)ul$@@RCbmEu09-02*b2qhpVe*uBE`I5&zkl(1yss&66KkhV8tAy_gXety)}tF! zAN$O=o`3Ss_AHoM`sc@eqpLf*7tf|_sm;o-}>|KMA2sj?iUYy_=>Mx`2APB^R5GzT>p1({Ot7?p8qeKF5GuR z+xE4Wf8wvdT#2Hu3EYo<|G--+xo<|{gu4Sew8 z-$v1Y3)~y8-!=Y@D}Vpat5)1ozjEqjpSx@FHJ`3*{a(KR;LZPj>kH=|z#W!gbmxMF zcf9X2mo_TPZ~XBiA3OPNuPA-;fd^MSZusPPpZT*}?*93Y`p}Li3f#dHKm6MFPpo~z z_GsDcGw%My-?*=G@Lzg9u;X#V=2O4%(C*bgz3JGuEPMC!qv$6B*YOV@I&kmR zN8WSspMT{u_uRT}>hWs^ZusW~=luPvUw`Y^yFU5+-{30O9Qk+J?Y;N^YuAsT{f8qT zUiP#6!Ut}D#fxrQ__T-5zT)oB+;R8nn;C z^@MMI?z#70cHBpQ^t6@hes|dy?)>EkzW%uHU+~Vaz2T{k``APj{StEZUcg2T#69Bu z#M;!@wYwU7X>alI#GO(2%px4yD|{Yj?K)|EO`eRr9xh4yLL5D zvNn@}aeV*O%xHa9ZbL!#ymW$h($X=!Et!RC@-W&;920wIX4uwdI`=l#)LOK#HnaXP z(a+3Gjy5JU2&~PlI}8-nJyWwY_31sC1WwJi;Qua)Q(D;SRft)2YOG3J*0E#t*=rlK zbv)IDL|lr(%dFcvFvUb|(L)E1jB*_aV2zGEz;yk-6glgoMVQ?VP||}>JRid>y5P#L z;V@yt2E(_&@U4s%EIWF|0vurAr+1Q9y1U=)(MI{rdQeGj5z4p^ZjLI;6h(LNrKrj1g26$aR9fNfC(=k!oGVm-q7Qg54KTL}b{?A)pItYV)JkDT= zV>fafj^k4}mS^BtVK`0*aKKUlc9oYCeR@vh=*U~N&Xat4TL%|H4*rxD>8A$iGk{-U z_&ZbS4$sOUomRhtKO>dy;Li%uNxy?XCrBrqF8$m%eHo^|=rsH$Z)fm*2{?Ej^TFHm zW4Mmap!}0tq_4Jg*Keoe_YBGrH^<=;aB3}KfP0<6vfqf?wPk&a^o!zjq4`YwCSLM~ zG+)Ae;Jq}4>%cVY+kCmDJKE01Z*+I z`k*IrPZt=%MYypmz%S}9_>KCggShgd4tj#ip2w!TOyp8TIKoNk8&dZSR;* zZk~AUnUH08T1*)0X=)}FNR+b?KJpW3h&eKJBDkEZZx<_gWH(R@8*DW zVS7_DxS{%P%GaCgaNn2N+{OhjoH5mXcn*Q}L2u-COB&PJ7a0NW^VCQFa{)>IpKbhS z9pwKd+3iW43lQYVG_-{Lo-;ffjdtn*tg)+8JMfbBFCRL{xtVEr*Kc%RZP(l`%VIir zNFY~Y#}bybpwDu9fzy2;TgiG=zLIGsWBX8!ZT$Wsl?CEw8_&&dqb-`1aT4WcZF=Va zqD?%t7Pg6XvrW%Vwkfl2_7j)$Y{UDk4aDch$!;*kjgy;=MyFf$;P)-~i)A+#J(n=( zqgy@ff)(tGmH1nO>)bFO$XH@oDTlhK*Pd_XUSQ=0viV0RXXc4Y;b^N|<)}Rxz=H;wPy9=x{M2lHKQ6?cm2paWX1NYr zMLjW!HXyh3OL06wRv|L-yJ`UJCSlS?wS zV_%6nUWLC8ogebc@mlRfHxIoAaFoL}(c-{{Pn}mp$K#It@Cf4u>brA|-)t{*1237Z z&l(TdM++lf;x35?o$dbmp#AO9Wph(}Ph$LhgsNR38X%E^S~zz80%bUMt_8oZdK7iC z?^u?WFTZn+rd*7UD@|-OP%eH0U^v%>4J0vHZ6-Z;8a-Q4IK{VA7_lHprlC#q@r}I9 z;@g|09nt{Mn&47PzTIVXQrFDKw{)H470Wul(e}yW+gkubJ)Xh1WSaHk-A2!iLQmHE zszr#BC?3ZDG(|4~v(CHs05|2hHz6M*)w;a39FI%BV}ds!_u%eN(Fv3Z=zwWnF+Vgt zi6?`xA_mT@Ouzq)@PX~84tQ+zQDzu`#W8vAFl8pQ?ZHV^X>j}-t)z~8yS1^!yl1C` zq^y2Nx$BG{9FK5EPtW1m2=*^^*TQIU?^LxezgHr+9r;juQ*c5}xjFt`)Crv^?|rfy z;ZBJLC&vr*-IL%G+X6kG`#Zq7PiNu~Q*&F$kNW^me!LBj%&=`dfvEE#?BU=$>u36U zv?GW5VLwgJ;vL&DxocPHVtT75N^z&D*tN4L`5xd3H$Xwz)^$Mw*d=~|e*hfy%^hf% zvp3(3-%RfWo_H=^5WNp+r2qZ=|A2mXG&B7Jmfpg?Y>plfb~Pn~w1*HUtUi(t0Vll2 z)zNWu9_%a1LmT?weo1GZ$ZDoMkoP=NM&9oQ?=MK|{lvi*kb)s6{uPau1r==5M^QE$ zYpNgQd2@Lpo^nFl*V(%KP5Wda=0rT=Ao9lFi=*zDxx%>6fG%JBag>2R32Rg}9HxK< zw&4?iWg8~WMO1Y5c#04Hsf*|uQIx4O#Te1TTej;{z{hrR>_<)htX2mKrNf%G#O3&a z(5ij*8Q{hoDYUY$J}bYOhMvUS({x*iplwPPTG{^3p*-7v0Pi?=C;Wy>< z^Z0)uM#mSJ54bOSxVRsg{(z-_EEkWnDgO#jbkL2xI4!@gIyQ&v_aBlxJSOd)?1>1A zH*13H`-6uV41PiS`AbX33wA-d?$NQGRS_)eYvRQd@~)mlCi51zEGzX3T}!xLDNavM znjP2NE_wM->PohO>CNp((o2{GS%N1?R~ja!tusNtd-+KDoAD%);6CJo7tjxEW6S48 zE&q%}-C-M&bR6Oh45{m^mbj#?4xzwC>1Q5{o`tFOkRs|lwy84#V`%YG1aiuw5jtU;iUBBrgx|NQ$jzQ=2+h0#~=o8#uI z{QrP{|61^!Wtr~Qah%gU4&b97@0*6>TS2*Rr^<00a}390ITwAGFsS=`2HQekWyimY zUdhZ7-9o(oW_aD)7xE$I!Gh@DjgJ2?c(?9kTLn(q*%m!$a6dA*mEbSdLeUTK`-k}Z zG5#E%`9J4|xcrjnKUofR{TKf~&{E$w>0s6OP07+u+7q0YehQq_%g(mhEU!~kDude_ zum)$V8|P+wreSjEqvny=g*nL9&!im7Mp2QG1zBg|4#8{6-OquCa(BDwaq`2-6ZyjL zz1j0o>ngKy&}#DVA;X!~e%hCZYCmaV`+o&k_u1JZ0#BOXf)=*@Vc=lfuSP7v71?b} z$Gr&3RHF1J+x8pa(lO_J<+1Gj&hoCXey48|{a)kKr0o0O<2PO?n6BSgtvjay(<#e% zL}Rp$Wh&m!5IX7i`Gb^K4q#o7B1t7Ll_+$w-H)Iw+dc9$&R;a+Bz=ivgYBdp(z-$j<^))XtH`G;O(Ek?O^*nS*O z-J_F}+egQ4bn6S{ujQH3g>3@cb4yUpeQfPz_w5{ho5*k8FG+sC?dcINE6B9%7{w&q z!57bqBdxvn`?W{^E?6fr6^(nlr+=3v$eaX!=&r4GJWJF)y=yx>PY!MY(l?LR$M+%< zpnG~JcV1`1ato2~aSu;T*J0boHc$Vq;qun*5PmV>&GRbBV$RsS7#;W%kPvi%` zm%u7J7I~CkZZtXhb-cYGyFdJO`6{v&p$t-p=Xk^ORvXK_6C+$}@FyN+L+GZCZT<$o z#wXSFC*z%$^0!CD`t(?}(Li6uV_msc-rtz5?iv{l^WH`)iUp$|_^($m9AI$}_f2b(-$ulE>tEJU(;L;|T-4 zoMf;qcQF4JRA9{*`pw#E2k z5U7;H7hmRdE5o+A?`}WhOyuE&-za*iUZ~H={H;C?{L=35eTtY*=}p^_ICufpywKr` z&jOBx&Azmugm(?puwTvwEc@lRyIRgw2%=2fnV{`SCi=ELF=*Spz{@^%_7?m2T;#7r z3*&xX5S_;|;Klh?cEsfW0{q7L5xBLwX2#s)1-WxFjX?TFV-7(bPTYgMg|3|Qcq5O# zTF!A#7QDpGv6A45bXFq8__PXT$fql(Xs4--#WX~KHug`A?W|8vP0uy_eA;m1>vbpt zn90d$_3Xug8W9QtYvaAeSs*;i|ghATiri+wPQ`n5nx>8V7L@295#S2+H7a}i}P z?w4G2Az{!j7a1&VqzwN-;#ip-g_N2zGNk@vq6I6QP6c~p&oBe8%3XMeK_GcSvTxI6 zMrU@6OX7+W!4%wC;&EJIIKE_kdYCeEo2-r2_uG(FS*Fc)qS$PToH%%kLub@ISLcKZ^*nYXUY8T! zpw_(-RCU6B8@sWpTQ?^ASEAe*(O|u{qc$}<*^Bq92e;o)9TR;`zEEFp5W3l}2&VuO z(%w@3yHJMmKLOcmq3h)Argl6|q=KW)CS_T?4FN7qj_$WPrd!f5u7f!$f}eI5-kYYM zmamODebximRn2r}j*-04ISx9%*{0)Es*1#t5Z%FbST2}HIq$$u8K3OJRgj!EjhEyx zp5^lUYSfiWG2RjASi_5Ea22b5X8*bVrsb`@sC`R)cw$tTMi26#K+uirga zZOl&B`=`gNqUSr24u41$fsIo;O4Zr9y4qQk2bNjMd3x+dodt|Wrl0QQ#EXd5O?+oW z-SqrVx;8QGOiL42cYx=t2>p?t+Earv6NjhevCP?l4pWY39n|ONh^{S6H@0j0o`kgX zBrW!@Q+KUO$-u=(yU1v9>fPz~%cOj~*UohI?S^P*v^E)u?Ez(!+k`atnL*5ZdcNfx z$J?bSyZ?$gj{1yai@L9cKBL}o_Y}Az177o_G9cw@XKXQ?&oI5wCv>^z4xM&To>8u_ zM=?V=cQzVj60(Nz+BJ(n#qIDwdO2j?kx`k!wq0X^T}M3F!x*)#Sef6rXVEWpBNLyF z=5aHe81ZNUc{G4BO5c$1xlasAs@TNFmHcrp(Yz>2W5W6f5xMYDC^!;ZO+F7tH{rfhB@?GoBk3NmCnN>jwr*JlrTr@J5usWRfbH2xx{&t zcu3N4Ho{EtR~#*Qc=UZ{x*>7)Aq3_%;>N?jC|}F~(EMX1pMBBX)(*+z z)Ey$$a>q%Y-!}{aq+Yx=je4;r2y=`kJgBL8X6=O_q~{%V+yMm949AWk}uHGh9RC)1ctUEtu;)dAr^yqg21TlTgZ^{Q#}r~H$xPx#d!P@uA`$kWt)j(CI!v>hu2W}rH|7w*}? znQB%$P8S$&6AX>+XvTAfz~K4Uu^VAHHs_xy`GxV88pC*Ymcg~uJ_dKTz>SPf*2Wnf zrpi66*5J+&xbn{F`fPgO3y+?t^-afCe;5N1B2<2zYw&7IZ^V-N#?t82jwU&KlEJxm zfj6hP&;C76X`84`n=KJmXY`-%VMeAW=bClX1(HwiXSRNNvgDg{qA=bVZlHV8qt@zL zC9ng0YRLBs z2kTxZF#520I`1h;*W9krflPh4Uh>_1lg+CO1x6_V$7ZL;rV|Q=G+bmbsd-}K{+ZE6 zLoMU(omKV06aHd>Pu159EwXrtz-m9ISxQ`&N`6w4F#R%1&+nTZpO43v3mo*pmOra}e3kjpJd7S=wZ;M_@UkLsn?LdC9ZgfG`_nd*S=f!#?C*`1P=})VtGs6BMj& zxc{@SiGs;3d*q{Lr~MTU5-0b7l6EWOj@7QBgy>qAW!3Hp2$aUgej2q?3RC0NeRBQ^ zuAtl)%DKGG@%dQQiJE$ViAtXXxF zAIhU1zlWyI@_AiahK1liIm)gGIW*FI%kQKI_anh4P+Yh(jcUjw~(01n= z&*D9Ostf54;O;NR2-`)tc1v@90+&wTfl8(N#wnN6kAc1!qwf~bcS4K4Vf)*FzaHSv z*rUjly@ug`3GjajK0WGPT}SmcnrCL!9kz~Y^o?$>CMFWoJGzGIZO|VdNUFqAsr>df znrA}At?Q@WhPTQ>1cqPNP`wR$e(K4oO!U02p?VwC@L4pdjP^FNELgT**HfTTywAna z*_|N~N~f-?9FN3n7Xk?#y1oJ*WIdXuMDeKpLR~QSx~FFni&oO2Ypvc!e|2_r9587t zgweGYVDwZ?f{r!N<;OrasLSWj*OgwJL+TyW=Ppcv$0-~9zU>~9iGn zg;8NDo$Yi2NM(%n*!PoSEoJ4XulV<(=SLL5Ph=FZ*;TZ z%%c79{6@Dt2AZC0G`;Wtl%EBxZ$t+iHb0;D7-+xEX#WamPs*b6L5D*wo*NbhzBxA* zUJ%rOxMSgkR{!@=zuOiqx4zk-fp=YPYUqrUA&-cw+0K_n$y8W^6fRiNgggUee_zP zt6V4FoDJ~0fY!sc0bXykF5cbJ_bx_$_Ddu}bL)Jg{V!1mX+N}$h4o5(wp_EbHg7<= zcI+p@4FJO{9$QOYnyE3ipZfAnz`M`k>dQBx4CSL^_n~d9HwX9+m%n!z{*!^9_BH2h zjN~~u1tw+N8GDyZYm4&SPKMJh&R}{jDo*c3h@pq}b{5z4dqyYY9Ko{?`*`&oRm7ii z1i4HX3txt#1m5egc5hd~&ou?FZhh7jl6@VVd?LTFX83zc$=w?ry1<c`x-Z@xMNh@}kDAZlV83~u zTh65g^Md%cyccz`EoWI<-Y4`H=;556t84yW{ZHGCIKVrCtfcxH1SIU-#tr~lrzJwN&bQdLC=%HUhb*9UsuLfFnJ2rHX z%e)2Dy|zWtz)sy5a@@WH&+BWR)>W?7Yj6b5?b@#A=2(7_hoSX3iiq7h5b(}|B`a_a zUG(I~(2nM}(L_f!B}2$WKYrZW{srhqx7KGGbjY}i)pc_9Nl6!`ANF|pl;OX2x7v|x zi;KS+!pU`KC1L^+KH+8+nL(K6!e2s5m+j42dp`r*rVHX%{iM0+RJ0cJ4dWs{YxH~{ z?OkKzifJKDuH8XB#^o(o(TU<5H{i&@k9oP% z_76AUWF;ZPa5GLwfVR!oseBwW!{jQw%Ng%{+08Xb(3D1*`T09lzGrUN4EHchhMf)U zacrEPrVXSrm@12{)>*ou83qRYBY`abGurCr>{bs^NLL*K$jRvg#=94w-!8F!BmX$p z(Ocql(-#5P2ESi;cA8~jpMaU#e~d%;64Kn~aQpAeM#HY%QS_kiFR_y}aCaDnjLeUS zW;cH0ydmu<&F8TVc9!Ltjiq_z$!c{5nX6ULEC|cFyfvD)Fe`7Zv$cZyT>qop?7zi{ zay#c{$EWvBS>G-R^USG3I3D4JG(yqfwgHL`j~N^v0W5mA`-qz;UB6;@rMrnkEd5C>XPLM z4w*QeWMfFv{m^!EZcs+XNn-qHnbbJ2@uPX=T{W z^S6%HcggZf%i@jW%1oPtGxz9ete zrslFrX0u?gN9}C-;6vD@um^enD$__K?dtyyXgu6LIA}D!12mS5M$&?nKz#>dB&KFp z`*k3AWoc`CTDwnM>(dZZZE)*EPm;D@J_g!;WwgBywB58o`8ObVx)JK6a|U@=4$>Iu za>1xw?ueRmU|7&$ShpyndUDDAOpQ<#`--&ZhytgGmD}9n! zQDQ|ivEMSJ4fOwkCu5D8@}K@Nt4{*39Ix+ExGKWS5SFE|^t%|W5+8ex1owS$zIR+W zd|bafTfaN>3fMU0I#~D!2Z~b|!8+UP4z5R4e(V(G)I@EE@s8_B>2Fz@Dt|sDX}SR9 zSxfdA*8_=maM5FVv^68d%wrW022n{L(AI&hj@D**8<6sZHU(x5u{E8I!aAs9EnUh| zCxJHlJC%1k{-|SkHi>89mS6?+JET#E|DOLJh@vl=F6u-+&(Ga3UGJTn63al^!SuGMzlIa2 zP3hPx_Gdf@w?OU-;%HF5lP=f*?yR)$Q_{wJ(!xCe^6*NeYpi54#^4V~KP5Qhl0Nf* z^FDrl<=row;~zm8_c;US8|2tsaQKN9(r|M!W;mVm|A_MB=^wEUBEK%fZ}Q9C-@xZb z_!pl00`mp7jsF9-#U6@0C?eJKo6V^UtPJaN-`%|vi;%~DbboQ33!}wW=MpRL`hOvQ zw_CXw9{b-0f26^;IuEB0J0{M`PmxparF;^Rrzv*ud&u9T0W3c4z_D-CE zIvSZchcA&3ZZD2F)&uEMxtG*bm+5S#cSMNZ;4M7k$-Fa>x7?kl;sGx!b1dpOF&e7v zf(b?3D?tz9kiFjEZ;W4@(HR}XRDgb~jk)+C?j4>H#e0X8|8q=lAa1ZamAcFAJm=G* z2g2%yO2qjo=;5&&#k3<0?9X+)4{}az5Ylih?9H1~}CXSt`JW#JPP7TWf1Zuk3$YcWTl)FJCFP@hi|Cig@b7#4)wz-o0IWd*DCdfO5 zG|Fy}-XCxjn$ih6+^5rCnGEL@u3b+94EyL;my^eOp9t*&_Qjv@KktD(oxBFm&*1+D zVjF^U2Kbbjw!Qsu#Cs2I9oUVYG2Ff@_o;k#?ZIf zi4q#iqcXtXM|&7uyKzh&5s=_D z2=@IN)Vmgcdr^6dxyNY9W~WaDC&|aB7$0vjKC->szi|4e6Tfn)y-udVF5EdfHHE{p zI!2hr_?bOOapQFn&UKD4a4OJyi!t6C*mEKb`>dU3-*D!Gc0Jp}ed`M|dFv@ph=)%_ zd&nQYa!mf*0o)iH(muCee2KM{>1?M-(cx?fM@C}l(mCSo~`}Z zn%}d^_8WpSJ*y?n{MH7yM$*jRW@&3B&HQYdmhv~d{j80k(QOX|K11>j{$|_b2{OPw z@r!k%9CgbzXfXN2->%(xYxk#oyOjj4q~z8|thV@l6nl5!DE97cE#!77TQO7;~RzK*I5Us zCl;(Ak5)ofPQ<=ci}9I$U{KV1DiIafS!&}s$LbdQ?qbUN@f$jCl-DA-F~&5G!-?7M zoi*@)}nTOw#DZ3{5g1_TH3P#5Z3b;0wSEono{#i4aq_^y!gi!Uq|@%Q*6 zDPOq`(#H9rMLYo6(z6X`sSDkBJhO~v5xX|xDY?W^^!Z`HN!C-gdK~YbhCag`3p=qJ z%u7~JX{Ai@MQQTr3rm$pq>DV- zo;`=QXn*khuX3SRA*}&36lOJp+d}@ic6=IQg)+Y3hXXdwKPKC<#YayoL ztbc6}6r{re`?a>G*1!!LoPKrACfst`&g3-@{I_ z!h6_>GY5LB0lm1ZxCtj|nE=cZ$mI*s=7H>S0zXNQ`d7M3`L3aq)@qdtnkff6fuC~F z!UvP@F3LMC+E(|=%HCjQd$Z{px@G{cDVOjtHeMDE16eaNfKlh6NyFKK@A<0+Er^)k zjE*TQbCbz3mIC<1Hu;Un#~Gb{v-MHkl<;mvwGSyzyi+jtDf0BH=IugR*zWrfz+l%l z>U$5V{ndi! z!E2+%uI?@Qp~{FpE*8Ek?{kcQvmR$+Pq-OZZ(rA@GRYpwKqr~fkN11KZR^hJXue*j zi^-1U!fRpnT9DU|a8)djX~*TFAidaK$nTQ_=aRP|%o~6k9D0Oh7KZ64a}7eZT;8H| zo_4d@Y(ZU{stDJrjjK*nW)*efZ^xLnRpjLUsSihlnF zZBrXuPTUSYU(0s1Uxs%o?F<<9AGA-)^)Ys9e|KJZ*_KN0?(a_ar@?oFeQcZWOG{^W zCi>FS(VgDL_kC%3uFF_%ajO2pKw-$qz>-wn#=$|KhkIHR?J0K`99rpvBU1T=VsC$U zm&)*w&3SCLlshUT4^5Z6rKvot5F=Il{peJFOcOv%=8s9iV7UREuw=!t*6+_w_xs>* z30}Bt@h!)h=zUpl++=-!+r`i~iN2>Jsh4NwXTggygUrXctTwt-4q}*V0)FY(j`M8T z3r|!Y;=Ew!OTLcrI3My-go{pOM&%;Tb1EQ~i)5au0Ku!W5$C(kXIYhvIFCGL{G5ve zIgsM9=~eO0^bVHrzIwB!XoiW$+s(%Fv!FMo628ka+{?NqaCXzel&@qZ#yZ}5Ox*di z2l#M~(A#v>OC1sP@w8}UvDrArmunid3^d^Ees9a2Xz3Ej3|9^7rd*s7rpxw$+H;JV z@3cL4Nrp_Y%;}(QRj|*-G`97kDCRBY$F=P;?*~)g7~8f%V4Gu?dn7&CZo+SliVbcw zKv=C%jK43=vw}R^zGwx^tlV=!m-`eGn%~cwI&TNs-{)-5Ir~=Npx&&YA6xBD;Sr2V zzEm14Ar8HJuw=$$fK-!#QSGAJfRFQj3mdShU`1cqXrfioS}w3pWZQ1d_;5WNo^~H- za-SX!r0`|IiWi~{E5Y2&@L9OH-WMPZDOeg~lgDJ>MMyg!`xb~e4z@eU%N+XX#Zrdl zqUbY;J~}inX;a;f^6a0VU|yq5MY_mae!s)Mr`}?cR+g}nQ3emlRI`9w5?c7s!Fn>L z?r=C$8R_aP^lU5)HJeq|Q_Xyj%b?a99z&hkW?bv~oMlJ9(+qgdK3tAI{Hod8{LNSj z+4;B8=EgGCkeY5Ijp;7~kKreRy)Bz?GVWhazDIJu&Bhv5frRS>)}y>GP<#9pfD3gR zbq?%st)od7^_GTBZ&A--FHhmTrc<5pO61|LmC~@qc5qCO)l0~-{-v*_`Kk}ISF8rVSD6d5s%IoX+{{j6@UbydnVd?C%PLyFe z#0cZw*Koa0^%(CzU@r^5HExW4Yxp$rTVuxF0DM>@;rBXO6VtxD6KU>)y@{rCR9I6U z+IP2Ot~RbuO^e;}M&NuC{#cOhdkwy8n{@x_`S?vfbRwVoPk+UHz`Z2}myEAyi{5H* z_ZVD@*ai9w`b*`lctodri*{xr3B9KJ_-_o4(_`dsgf-?EZmz->u580nh5?5431irJ zUoBtE(l;z~;NRae(>_@LCn{=H_e$gGuG&;>S|54$Z@4QP)nEK};C=`G-UIyP5BWhp zI^OXeAIFpX0LQ!*bJZ5|g0DCZ=iwV2=;@OM&~T+W9o%7E?=*aFZ;y4q3u&x-0q9wX zRo=S^1K9T%YzrUumU6K$Af2HEC|lC0sMnp}eJ}8799_Ie--#5Qd-Cs$xq0M$0!w)6 zl#KRRZB6Y*eH^>*M|t|>Z)js%R6djKY>Pg?_Mx30R&wP3{;QO`=W4WfT=AfX4F$1UO9xb3Rf zNB0N*%zp-+4XH6roo>$67KU_M zlC>V*)4=aSuXQ3tc?5tA4>w=y~?zzX9(L z@Q0`6;HTEP_cVNmj!LZ62p7inb1rX>Heqs9yJsBvIQKiz#}w4<;>rI5>F#r4vIROa zLfSz#Y5F0`kfwDgNFK6o$HO1tyOXoGdwZg-gY`R@{|aD!V&B&%?a)%bH(%m$9gF)R zEkju9BvYjia~(hP_!cc&37WJX{eEg2=UYqvGoD{l9{vJl7$eM^BoWFZHspUxT6VnJ zLCNEN=o6FEdlg=iXmcW#i}XW9E`A7!csn~yX-oQB&Bt{YH3vx`&wmNLzrx=JP<>XC zS3P}|{BU92MOugZWxV+{%IJ8C?KtecA6(glV{o|OG2lDOXVjCZ20sABcQ=)%zeQcJ z0&pj=^5=K*dvLA>7}_$w$8X#SUIVGP3tZp5_yf`wBLbjR8(NK#@kzB-$eTxi6$86Hrh5 zwl;sSG`=t5!?6M17t3!PM8w#?0DR7Y#Y>QOI5FK$9vg^?td5Im2vc!yZ3@7@MA{R-o#cej;EK>5bX?+}Ny~+hH8eHkaKwp{&@U$^EvzP3HZ(aJC*+*(C=aYb^7!+;k_FtD}8#d zgEFCI+r*}DFlSo2vt!uvmP^#OaPWk5L$$Q>kZg zQpuMo&uyP_XA0rR@abLS7*f!QgkKb-mw7PB@Ze0Ihaar(7@ev;BXP$2m>^&8i`BgW z_%eJsw_fBMlw*LbD)fr3yEFSYSZhBCxX#1hbvg1+=h#!w zF86)mDe>HJ0pJil!vmi(7d%;h$8mU+U7R73xs>CIw(u%}kqpeKZYYUNx*s4{xxjQwWv|g|I;FA~ z^it=6J-JIBB|RL+ms(w?pe}dc8|#NORpzED+bOqfKjAEGuS;9WB*2NH0vzWg^zY)! z0h_^(%ySS|SpA%D+`5HnT36)Xo!%g6OegN_K4*Kn44=+7s+XREv~XVO#&7C{9{ztI zin8zT3G`)JU5b3=I(n@<=kFQNMSjqi=4?^xGZ1Ujf$`G%4(T!-2!AQ7G9M^6C2cd( zWG<*YqgtP)Z(QSx3P^XKj!>^>&`F+L1$d63{SXqin{_#T%sQNYWqaIs8Sv?d(e>Yz zpM&^Kescbyp1+#;z*{mnr;}MO$@^S1WU#{qo1{na(=H%>>LKF4#>#B7GK}X?TW|m; zeZzoP)xB+zrYCJergcs2AEV{ybUM>w>ybF|)-uv!>rr(%(+X3#ISVtd+LJEM^=Y7K zAj_UiB|>E8(Z5q>^{URh7C4`dzqg>1$sh8WeMFuxFXYMfmgoG!ZXWDJ*;wWmMB51m zTw?~$@28o~L^$%Cc%98PVQ{W5iMN73!qN(79R5zi08h^J|a8Z_-5Ga6H9yEsW}f1uYH!f1s7!?#6dw(4d>tk2_~&!?Aq~ z#5AeH=AMz&VM_Y80!96DhN4z22%?5W%4A((EIGu27kWN}$`fYK# z*ny|xH}Q4?hBEa6=7Y``8eEv?bjOP=&$U_bV==@%ju?JH^b*5$hsULI=HO%4T=X)7 zeR&F&^d)J`MXxm2SEXR7>zuyR_T-{JH`v!0ENu;5G*w*ov0q!?=+>4fxo`oW>_I;t+XiU!q>5FrkP980?bm7;cIK6Fg@O?@Ay}kXR zgWt871LBqQ;M|_;ni|*L*`&YfjiAr%+ggsyWp9%75u8ZoZBc4dbON$X?)Dj+z`a=v zvjf)r*i>(=iqLT>_hyvCJ%@?3yCjX9dcK^jhu9{}FgR;IX;o`IOvgRD;|Npd{deBp z=9pz3?uTY91nN%45&RYE!Cn{60ps0Ev%B6RY5mjnYA>$R=N${WCwaGrb?Hj~TO~bt z?&ls43%r57i8xxEX&jpF!$y&_u{uHD5qv{dUSUw2r1?nO8<$5G8gsiGJm+@Y^C6)b zU9c(ngdW?;beCCSw$sp1#BCU8oE9dnM%P-ICTU zNAHnzCoi()E#u%HLL4SDLZ98+2jSI#9azP$)o%mkha3Aa|K58De?(g-9 z{(c|oc|ZQ@sEm9hEz6C+{GMB`JmvSrC&b^mu5@>;d_ZXJ^*-4T%I~Be_>iRO_2HE9 z`{j31$FL5!{v5#i1aY{FKMc4-uTKgyd)Civs?HidsfP7~q)RSYuF3lZv@fNv6rT$aQ?q@HpFMCF;TY3pbj{cD2Y~CsOcEqTefJooI6I^C;^+ zkf|j87InfdI`sa(oZT6(HOw#h1=RCJ{M`%G$^jbfut6h zzI|Ua`e@ry{#K#`xo!=A58?N{Ht&BK@T%){{`m@i^Ie8|V-^o)#djHT41N@{&ASrd zITN}0s+DyY;N#4*DNLQ4zmEL&R16^NleZ!GK8C{9mL+N&O>_r8I$ zI6Hzor$d#FOR;Cw>F3d89?PuaeIzxm$CG)i>mvBxaMEOqdv|Oj(=M|)*1ajhbn+2B zwmp0U9?Pnz2WN+H77iOw@!5UCZVqBFxi`_rI|cYMt+j^L`(krRRNr%5>u?amoEL zkS)jO|3DgL&^-j@PT#w}#@R2Q=T6^~2M~kY4^h^A5bHE=1HHOv%_iZ2^TVg@Dma~M z)7$0hFu#xdAnN}S{yqXC$P2d5^_SCQCt+QPc`y1e`BCk4DmG5rmmsQi8&%8Lue+>hYjcbrYETvLp^yE#>+x?e+izncJj6o zP>?r$PaNsC>JZ(+Jlq2T2SRdPrRlh`HO>)u*3rTDvgLT9>N>*WE+jxE*E4C|e9-7M zJ(AGNrvb-_&|7%I4XcZdwNc!?&GEqWlQ6czdkm-#aVD>&KJHBDFvar_>OQB1KBk`8 z&_W;cZIYt2%{{v37BZ@ve+9hP==;p$dX7L;qtO0q&BFo^_Z@7)#k1AA%qpDcsW*Qk z{6GWoxjxjJe&Cu7v0(%B(Bcz*3wY|v*TLCLd0?A3_FBtta^R;Y?aW-%McjWd+_b0J zzixfc?`^iem+uSIo|f>K%NP^uah45Zb^nOA;r*+`8vlPZtuccO9dR*UT`n>A*FmZb{YhY;krBPY z6Ht^-2tIH@K5;OVcR(_&P11;e8aJ=wl7KumNsZ2&1D7IG~ z=e5@s9L&ObV7l=(lY^su!TmdDLr^}BMi(wZdG}$API~@4T=}3ZE(R{n1G|CH`A9hz zaBk!H>_j^CH`A7&=h^{JxjKUXAJFgACHh_ci2NPv{I+PRl{wm%Q8?+o>7 z4#I@ET^ug!;CktJE3@3nxHhmH<%NGMkjHvv@ttir!OA?&%CJ3-wsiSUlzF_BS3mT^ z=p-wDvXyu99cf~H(kAeZYpy34?5Q5s#kjRauDzW;PkoY(_7KlX!*ja9Zp^mti^V=f zw+?RUDi?b4f!WrazF~v(67~<6^?u= z;$Ch%w}9OaJbntBmo(DWIU9Aj&jH*r{Ag%|jy?364+hS)Gq{nwG3o7_b5Q3K@pmRF zcK&V3GkJOz(kVMn!vF01^Z5UP7>;d@dEXXYU~o_NaJdfh$;tm}OLua>@~$qocd^!R ztV_WX&dH3@m5bIJ?1cu~VqR$GW2LK9>ax2GTIE{5Uu?M9e%8yjywzlY^oZ}HHlD`` z`~5C%fI5+RSi|`F{T);Qz`{Zf}9-+eY@$<<-A0U>$9y2%sQ zr?}?gaK@qhiw;MWEj8NZFz)yUP_m-y~Nik`0yH{;oD?oTKN9A7K@cK zLg*QbrWQt+vLTLLXMOO;Acl#yj`E##X1y1773y>!_+vthnRU#&))=pDpWA_s?i$ zGB69A1HhfaAg7U&X<&@eGYELzfp7-~r_&89ZO)QB)OjFe?a?*Fk#;g`8?Iz z%y&LFT^r#BD#NqYV4XitU@`XROed+HSP*S9_@^2?X&_CZEN0d7bSrnAFQ;>?lQE7z z>b&a>Zq(qe%A7~G_7*Dx8~ZAJ!ckV@U4;QGZ$uJWYKDhNaIh}9KcyEj4badbD%NoW>Nqi3ha6ep_@TUD4CHPE zjQf1Ot%Xb+LS7DgZlBmYGjn6CPbN|KF8rN@wsC)k{tCB0GmUhP6*sPD@S8ez9RE}P zcQYSyTK90d4)U61?(n(^{a6+`<@xqXS07I7;3AZs%EoOKG&R;wNx1I5!GRb^br|j? zPT=x^;2xQaDM`ZhcU^<^V0`bw9B5RCq*qQNkww0@u4|nS!86^r2YAT4y*acQ_p7Te zE)G`s&f2~jJ+U(@%5}!tXqc)odFZJmI z5HQ7gnNRB}4+VYJ@6!kTJUZah3f+CZ*KF)JdUyErV!@^Dj?*@|w1!XXTQg*GaH~%% zce}Jd`Lt5kR;wdwbNxn%Ho5X?h^5b$MlfbrKx8i0oL4B~w5#LAf)@FMy}f;dT|Ii| zM>EXUff2>Os5y^>;rzjp6{nj$u@B?JsHO(ny3T%J6p1~vANl7&=lp#eb<2Vkolu0- z=TITC7vg>cOx8fi!DtIVUAPNQn&sTwIzu%lqe{K=t{F!Kkz&+KK8Q@TZBr^RP~Y7I zVyNR<>~rM@dWwU1Y0%N5xYDVH>ww{!XO6ck3o?6^wrStz(8JYl~u~e`9Y+fWp-yZ^&xJ@*sjYE^##&zy)fc+ z##6H{Dg$$;dP*@SIY&|k+A-I%{;7DK^s+1% zSvqOm&vNyw%dTe@EqYbd;62l3A|%)4q?ItQjmGi*R5$J}*1M;l4ZLqc-8j|mwkxEq z&p~>7TXkl7Y$rB$M<<=_mH-CXPZAUmDtC*6?LA|wx?E~og1AjObpHO zE?BAhp@WoX`g5NL827oTO$7Ea+pJvw+y;D{b6=6e7=(PoAd|7^Y!u2HZ4_NIv_&rj zEa6_n{}04|xfkH~u_#NpS^TjK)9BN>ovh(c6 zmuJNic^gvoA=A_8^WuUB;Xjo2<&*W%x0*<|BG?nr^s7?!g#7S%u28_M!DKz_*9Glz zc~&fuHx$ewafEfG9L2qj<-k_zB+i%JI%mx$|Qe~?0M$f z&qTD{;c)Fkvb4>md-^rQ!%vV`vy;8p7~sk$I@Ri|AzkiC^Y^aHokl)?Qp?TAu9k

VclD3XFr=qC&QcA15O{z0D4t$GAuWJ@akSId-ME&Xz7c+hTxHO=H;*>@fqXS}stpU%V^ z`F!4ufO=E7c$P!U^Q?PJR~fT1um5v(Ch1F+F`Vf#NjjZgItO!8VPL%+e68Tg#I8P` zM^GA$vpj^0(HB_>JbIXSvSF|}QQQdYkNwsPrXMc9LU$Jyi98dZjRz;3Wz4(zCrwLv zcq4cAxj=*Cs%v1I;X4$(TadUCt!V5k4Dh}Zu%mT5%7vl)p-DEd0DHqs%vDO zcrs

|{ON-jQ`frLKW;AKet;m^jt?s0?N_byCm=O>n-W;yIM(03Zv32Kd0DSYA_k zzO<7g#_+qcg))oAeVfelMg4rl*!sAv3ZdgwvTP`UG2Qg1JBN9tTzG08bvwF-1^2py zd^;Yyyx{>{s4p*7H4j`@Pk&*+jiq_uVzPkG z(ZzEvg@JWWZk;H2+v}EOenPHOdA=K*{P6sV!=0AvWS%eT=_&?s){W?wp)UBX zT={f9>k09v^D%?udj{k3NuA?0xVKq&299$kb{goB&oDMra69hVBSEqY;D@Yf_&sG<`1XWI~@#7R5&YYJLab68jNd7zTxU{o*uvl zP_&A@{9Fi_;>_essmkl^_f&0JL5p5j6ljaX$Jm7yu-*m}n5j&B(a-&!M`25zTV*|) zE1O_7VVlnTn(=;BDo@{i!CpWrUEe&xen2XHwTv(BDKzJ;S;hNbn1?+BUyfJ9uX)OP zyN@@SzV@PZl8(It53e+@@%3O2A(f~8XWqr_?%O?T1!N}$We(p|DqM!5Uz+YgsNsnL zoG0UH1KsOh3Y3JSUDy>|Z>(GeF1Nqp()sol)40Fl(%k*c++Xo&00YA7uJ|jo@O@1y%*;l~_ z@Zx@~8$Cba+pKi;!aJXL`)r6piPLPqOZG4cmuHZ(@_K=T6E&e{+u^nqI!{1d#4?bt z^x_4azHRaTWRTWU7O>mvBtgg2O?~a0>q31sMZP@Ab z`$NnZe!6@p(#qBSU_Dl$#lcd%lN9hU4XYbB76B5-m4oXV9@<m0f>zGB?{Bs*HtbTdbd@u^@FzQCE9mH zSO;hrStHF$l51@{vKclYN85B%2-7oIF8b;;AMw(0o8tPKdWrpcw8A13UlC5K5v z3`}krlW>fU^HWuB`(cP@mGENQ3II|Io4jdGg>>$6(kZg}XQ-zWfA4`reid=%fo#&p zqwfaFI6wnw!+=Y@U4_2kl6y-+c#sVXnGIn@*Yz`|IsxKuZt@L;4+Z`s)DOk13IM4ANQO!k(_Z5+OP`>x{UnyY51f2YN)E@$Cg%;Fj22&ddiHM#^0p# z*&|n=Kipk4=b$~!P@#nvVvqaci6}=KZV&o&4S2!*Vx~pWSZxM}XofHav7JosMCw9I z$2w}FhPYww$D$i^Pm(e$$36EXB~)aOrhhosoo95t82H?J^NX;J#G2EM%i{Emgg%$K z=pv234sE7>(+ytlsorsYX7i%zB@feE=%Xt-Kd=ermi4{pg%q5&Z%dwfAu%Ur!cix< zdTlOD!NDNvras#`SlR;j18hdlSgwren^YN5rW6Cj`^9qbWbiGE;-rz%#2ja#9DFqP zi8lekd-mBX)V&&iZ$zI>B>Te5EMI#@xX zlh(SnH$kRbpACRfA?;WPJe-@9e(C(aRS2nF;J$Js@|i7~`=$HeFuHjM1BE9HUt7b71rbS}RKM`0ZVd@lMP z*(HE+ADms41xarg9&X}IrtwcSS^Mr%z;o^Kn&~KdeK>z(W*F+;Yz{n~d!)}SeUm&t zSBl4qrT5_mRwuu@4pBS?UqQT)_tDc z_s#NUPEFJL@97P~Jf6XuDXXL)|4qyHIG?`*rv(PtRzA(Wqf!$c?7R{)-Cw2wnD+@3S< zsNVt+lR%Bal%*quam#1j|iem0YbC>boaJ{&^4ok+RYxs42>RvAspqulD_d@MK_(gVFTi57N3wuS;}t}J{^w5 z|FALZe7JmbU`y4uh%?(69ekVDS!Sc!lg=f7l0V^M-jg_j`X@ zkmu%o*aeAlp&W#Be*taJfV9cK83kA-dhRNeqaW;c3ut2{w!(pP3!wDsvMn?>+j$6?=&9Hhu3gR)bDC;lE^rg5(2ep95 z3p^uf`1$aQdk2I=LxmLyFXyYrmrGVCZb+4=|<}a75&B}?c zY*B8cytTmj27U~=#M`sd%8D*MMA>|*C}|a4+gvV?NjQg0#zglv!(yf@m-GGD=<4y; zQ^~w{47Kn)@Y~`J#vMpYRv=tQ?3DqGz08toB5}CudZxv(fe?&i8gu`leM`K12dno+ za8_dwbQJOTdo1pzybc6qSV|Z2eG>Uy;R|=hAG6ss556C69&x%SpUqa&JbiRZWX0Cu zn(h^uzPsssY$fG~t5u-1&tu_E1_K>IDv>|*9<*rJ3h!5nN50o@| zJs##05ZcV?Ft5)OFt~9^p{z|A_4F1HiJ*GI>-G?b3Z)`x5IVelb?qQpE9qHy!T2+DCDxDtl+ZQk}XOfX99&JB1MwOyWn-TBfG4hK^2 zHt`LMqmB8}pc_+u4&?6gw*JB4a*9Xga-YNDc``86*U!gnZR~qK$n9p`o18rQeWZY% zO1`@XU0QT=DeP&R2xFQZjN50ySrvr=EiTWMKQbfFl{?Di<*|cpw8B1DTwtFZpYXcH z(&;yaypefa72(0;&4WF$8}GWn&bub=*Lg}Mx_KVBcpsX z!J)0ffE&}5zOHT9piw>4x}3ToptbOL%>bSzxq7(3TXBkmTy(%S!1AVRllA5Y_!bjp zC^^x=xGyTe zLEV2MCJ>&BSNR#f z>}0nkET4##`2hEmw!-K4K*K$yQP5t&kvdGF#lfxcJLya%{!Hy%^Q@z*oS$Z$wxay8Q)#7iUncCe~;H)bAF}vX~%V3Vg zv9prb9fwyRw9bf3_v%cGs7IZDXaa4Y7fV|DT2Y#k!yUj&IlK-Px%KAga;`VAlCJO9 zePQ&V>hBa;+m*QJeR{4ei||s;40$nIkEmOVq4#!Mpic?Q~8IU58>9df|D`OH(K9O zE#oqhW+>HLpbNp=RosO;FkPH$>{R(!5XnWH{vKbwe=i#c^nSHky=c{%)mJwISlbpQ z@6qcX#X*%xT$@T77DxTn@!F_{$=Aksx`@wPGg@6_bxE=;&WYjnUh{>sd@A2v;tTA` zul8j5&7+N-`cQ_^c0_Z&oNyv;yfHp8)7&bd3${k0AM|ikGcfV+oNdszYxJO7Htf+! zdgSSOT#OHX=smNGItQV6$p9ov$x5P5^a{f^rw-Stx5jait`z$xXQz?7<8 zbF(|a3|`C{`$$R4ag=S7p;oeeTr^Oh9YDt+Hf(xw&Kjfmmqmqsf76-Kb-dx+Q?Bml zo*td7HpXxgBpy%8qf%oG)$&XTPVViR!Bb?o3|{(WIm=SyZ6r0ybGYrM%E3E2+01e& zvm(OOk&#EA_7luzxe->1GoCF@;XZFvy&y0IEQPX)>w~TY~ zAjHr2%xP_i)7X}I8TqJ&XW6EJbtUGO&L}!K0o#ba>eKKWr&@R)+Z5CrN08r3%Go{F z;vq*LxILx?kwrC1$Hwq@zro+hY`5R}GK-?k(=&awUA0-u3GgjW-kEIxaeYfN?#>SJ zvkiC`eqyFDwH?p7ju&Q%ylZK;Z*)JrpL#bLVPxD6&dp{589jtsN?Z<3bTaQIb=Z_H z!X48Zj%TAp*RU_SCp!b)yAS;Rt^4Y*`f~9JyMd3k!df7uKk%J!TIfE9y~_tZ=kBX( z3*YPeKfJHb)4Yx_Un=$nL?B^RUZJ$hJjC&OL7f2pXY0rT&>1pNf z3ln%WjWX2kbe{2*X-lKw!oVD2rtMy+7ojZg`KR2-+QwkNim`cKqzC!PZP!-H=PH8_ z(}{as)U&z|%cH5W{X#F(E{b~Aq|+{ode*u$-mlsTUGrkl;XWJi4rG3$fJZ;Q^HT} zILH9sWws9@T?g=C*&!8RjL^6u|Hs~& z$H#e9=i?)Jjk7r>2~G%!;v{4b-s1!amL)k>ELn;cI|+e_ERF3+q#0#Ka$;ypN?X1y z`(E~a-wG63=t|kz(uKVgC=?21Y2jOvu9TL1pXc2DU9R=!9rOF+m-&2T&)n^~%em*? zd(OG%9yb{}S7f5kN14>a|1k#1>9lb2fe9SVf+nH*7=hsKRxT3|@zUmjG{g34-Ay8$ z(#D&lOsDlWiFB?!N-8Kn8piXxrfjXdN#v0hvSY-K!N`JNi27&M*z1qnX!b+4&00IK zS$h#MUW~s#LqE~KG}|SpFsH2I=s8Zo+-<17wl70^>Tvg=rd*dV((Cf|s6Y7>?FsOrp7BYgU6?Cgt!xc!oY_!Y z8=hC7T=Nl~P>vH2ncb*gPPColuS9wDsqm}al}gLESFH{VkHRF{(pwdLZbI2gss7|| zTt&BYke$J>Emjt+>;)KxE2cV~vJsG?gqD?UfGUbu$`(Ks!{18xuZrMr(PvfZqek%; zrPJ>pnbdcim`3UHcijq&f;e*Av|YV3%Q&Uam$+R+BfC_DuA9>5!{aCBKhuiN2)w3m zlGfogHR~H29Hko;Qn)%(oX!~l>EYgieGmfL-FQ&$S}#p+UmxGSO(iAX8Io=i7rRE_ zbaWi{*f10pD03bnmTQ-8melnTl6TkO1g^oN^!|ZcR8E$ArXMFgvVE&x?t>CP4m7ya zp$#z_p0zN6|OHeyYOxa7Yh&tV`xOeLjcY*xVjhF@2f$J zL~<$IG;?7fU6e-a}yGZ{zzZ@$ouSXi@ zeFOi$kNbJ!Kg7koNymLd&)*)DgZbOmZr@~WW>{C{ka7fv9Z6fCp@`dE!7fEkA!?4Z z9;++Ufjtq!)|xPS`$QYbEBM~{`pSH(c@$niTkhTQ*P%|A!S4+B8A=qT_9<^f_*Iog z6E7_t+uhhGb$c_yHrgg;-8kL>9{mLIF3MYw-h6g&M3k>VE)*sF^{qVn zttgkg=49}{D|BDphW!P+TH?J5=XYiULhw#&{V-li!q%*^AN2xz>VCUduT$_A_yp{I zZ{3HR5q;G?z2ke}Nf1nc<_^XueJlmYh&1#LlsSq$*t<_rbZ{N&M>;TfN8cwlDHD(- z7+agl{cl9wWnKui8u2&I{$d&^tKa0lz57NE?9=lkKb;nZs&tC4W|jvA2t!6FEs3kv ztju(<+E(c($2aTOd(cLi!CG%0)YMI}%mUF(GS}XVGC0?Ix+;}~e0luV@d;RT%VmWz z*hmhHf(IFXujR>p8q|>2Kow7uHbVvMl>v+4i3#k32KVVSS|^f~2Kyw{ciLvtPa^|C zCbrw#%e_zaMTjUVZAWCpp%*mIc|ZFAf1d$cG&Zk)4;q$}g|>NxuoSw9)-h%D`oR6~ zv^pqCkRcDPZrXHUV056N&q9ipT--oox^--xqOeUt8oaCN=kGU%DdzX%Tz;EG_;`1i ze{bzr@4+_CkY=p>cvr@zRJvthIdJIij<||GT|HenK{BZiWJR_;F5Tv!&5#dgrAgIk zWoEi9L0OOoXOy)iD2ucLRv_!q2Qkh{Zl}hqia`_o4;14{>m%kwsYuQlF};p6_ViLF~$a3gYWf=DA$Lu=S?(Jg_+? z-Jpp-l=RHQ^~uM|v!0h0gm)iMC9XSvr0a7SWx4a8K0e|uP1GjFk00CzH6#`W-LF=E z@2BzXUF=!ek2iX6&2R1b*iWO+MYLrxy84fz4H-37b0Z@HO_#OgPmqtcEPKI2Kef`V zrDL_j`xYRruPxLtBTaiC31>L&p}Q!>?<5@RI8oU!htMP6{!{7wD6`gh7&coFXK`$_ z?$>3iTomf5p}czPc;rtfVSSgY{9`ppy8QO(aO87QOus^Wk3OA6X^Up zjme)%#&XuEa*(F4RrC7iWF6jYFSrO@F5e|lv@tSYYp{iC>`!%hOoX)YG!>47>WB^x zkJ#3$JUR~eiD->=x+~KWu8v#l;(Q_%%rjh^%4a)A;jVM>X+qQGKfn z{{#fYK0PZV&cf^bXS+0(Aei@&iST5;^@;e@pz89^ap@8rtJ=@EkJK32;T1hS>+mR- z*N>EbJ^d>^e z*BnkN22A_B^%|GQi&W)3*5)(aL?yK9!;LOq5Xt`AM18Q3AojC3W2@Is z)&ArOdf)hQtZgs{yU|E+Ai$4c?aq9Gl&p-Hcxc>pI z!!~cLspl<~ETkc_g>jgO&DLmlL)!|{Alpc}%xdUe=HY3={9ePctQ~dlGNQ zTAbBV;yQLU7EL{$pS4s0>m5 z#kLu+pnZ>*coUUwXBh9=`xhAhot52-A`HU#@jWCM(Rcr)M`L>`RpTcB4#L#CO^Ucu z!8?t9>#vZXbMAUf+}B!}4s1k>ZK8U`TlA8g`++T@#P!>_z^+iojURzNc%s&t)9b)8 z+MfhvYkJF#HztY7hTQDCKZAOQ28Sb)W9r%<+?NE#iV}ea%f9=w$VYpDTQF99XO3;E z-1nfh?%^qDvVo_h;e6QGNNLFiykMC9^$o3Wo7^HfcG0`^hN$;+-js9?i=hizfY?4@vHEC%+*o9oRjez zMzV-j{2lMtwwlv;eVq=mVFJYlu*_4Hqy|65{M43rT4i+KD9vm&_UZi1A9~GNTiHK1 zt+CIj^ui$2VXZTKBk0MB+yjI-QDh09=a`8Uk2gG(SX{{v!ay@tUqE`&=1(9TUuVY3 zoVJwhGn5hoW4L_PzfargC+xgU{N$*XL)x=pm>=#1cWm~2Bsm-WD)b!+qtD3V?Ab6Z zV`NhIyS*2Xh&TOc?+1kO{e3!ra8JPDL&~cq@wX?-)%WvMJs@#S zS6IzC(d`-htaP?um0sVW%Pn`ir3tUT8RfbPt8(>SIo)rgP|6)ZFHuXZ;`N=lbbO+I z`VL$wovD|;=a!C7l%wyp>2!L$or51+FMX#iKV70+eWxuqy{V_@D9yMSdh_s;{U`cL zliv2XmqGh76MbbgovpC&>~+*a#L{a&S)$8~rVGmz{iaC|wdp`FZY1eCp5z=EwfbwTp_%8^=%s(OBBCJtvmN7N_X*+(=q8rjLrHNtAbeIGzhhx zwXL~4o+c>oifCF@&nx3;g7R=4ar2A)EA^9W%QUBepE-1{UNf&=LRwq6&U4N2^VqfX zu}essEPrEW9_`=6tNW(oq)V2&IiB9udCPIqCClBKOb>IL1JwcCeA)$~*n^8}uD`b} zA#Jk!?Z?k!>wfJL(k9E_;pZ{@4$iZ9BOKdEbIo4n<8^*o%WET01T{kB4*8y>T@(G7gV%Ub(%;PixEFl}u}<32X*%yHdPBo4MY1{Is^*{$$!+ zFp>hJc7>|G9XL)p)33Yzbb4RmHt?#f8zX5FgX!B-C{n z_0yU%-Bj0ZG^A*mlQ;Y6ZQ0owSeG$BJ?9$klu?cM%l?w;Q z2PTe_PvMDOj^!Pb$H}9yOeX1v{m03ZXqO$s1INjiY?q;}TaJ^@Zv8e~?b7?w z+x$FAoxd0R_JQHaTiD6c_9w;C=yGmPr?LJ0;DErhM_L=PX!QFa2s`>HgL2l1R#s+Uw_tF%9 zIi%9;nuH}gF3YPktF|ei&q~-qh%D!;kh{pr5~Lh=o{z_I!OkmVyb7re<~Q{OUqfE{ zNVytv8`^Z9scrd;T!z1Km9O5kBIub}=4INqLDpvMKdB#C1uMI6Bh2`num&v$EKOMWnc9Geb4oez*2c|cmP}ylB()3%!t(d5gCt7ue|&k8J_PK z3C&{M}@h5!mR;_@~Pe8+gBs|AP8ul@>UGO4Mef z$D@9X{PYk0QqaR&HE-zR9a7xXu8mH?6ixZIAA}94+)TD(kxtWJ3)3uPIlc4qf#h=9d zyk4G@U+(mJ@yYxrGe6Av8n}!pw;bzj7~k`k;!$$fx8DZ#9)iB8zs4KF({fLbe9G8_ zK7g^Kw>vt_cfP&!@{|!__`ts+AMbnpxn7%Y(03KG?LB$vL{5GqyZG=gNL#c-`p#ZX zB%st<_8-9ET6Pokq)_m61Je6c2S<44i_Y)lY&jy{^EgA{b2KZ;miu42+_&m`v}gi8 z&UTW&yFI=03lL!L(E4{2o{#X=mHqPvQD5qz$?qT|Z)1pPMk4xThCvQ(!t6cM|3n?m z#H%yYG>=w=nnzJ>S?i(us~?3?n7pirHy1Sy*e>+uyX#Q?@oJ{%3W@*kD3i83@TE|j z;XKrpWn2&PTr55?VIBlSJUX8+;g`UEfaZ#$V8$>qu;H|^;ft(PKXTnP=`U3;uIdOE zewi*uN7(e2Ya0ue=9hDY4wv^^b=z3aD|NW4m9q_i{A_mWa9irPh&2WBC^S;pyRdGr zK-i9oejSJR`L($R<2In&os|Pqb<7FsR!vxc1^Q3e9Pu~DYLDplm9J2Sy%%K;Y2Tsd z_w5z6E8_2;pwDOFQ+E#bf9zC$?1?#F!NZd@F_0n^F6|B$Ot?oozaZ^VgEnw4?#s40 zO7z3J;;i#QlK%}X^SQ6W8EPBoMHF#2?Q#b_=r4BR_k*R;$$@Tt}~ zIyGCLQ5Tlwys)M+IZvN7W3{^%arwpC1DsshqwjL>#`CYdouk@#3U%Nn%T!zXpEld4 z>b=wdqCa7oP=yarJgx`9OYgYyS#e-%Dj0*nu{*w>M0l&Xou>5DN9uEp+A&zv%Q@g@ zzpixKQ{JR9Y^%G``a~`1GRfO*hDET?NVm(7kNe?CwEbb*D8;}2 z|707*H6J9tOt!#Omp%DT-^_ zCAetU*(;Q-=6bXfE1~$%=DNo{i2A*6zrUvY`=}nI=u-C|<)th?oxi_gI^H{I*IGww zGwNO^!%!CZym}Ubm<)sM8pF8EwwkkUKd>6(+f~6mFgjn-cUDi5F!4qq>-!q{jT>4` zybCzdoW(u}PCT&7m{PWXEFXS?rW)F>2Y$doA7G%?e!YA5KRZCLDfKROvd;S}#se z^cqc^GrYJyaZqM{4MV+BjS4(R&aB3kc=c z=8+PnYwQlGQvQ00lk!cqQ)RLa-3m`!N|`z=Q(-2b-AiM9kKlsGOvd<1xXs{=J!~;0 zE&$i@=b(<=mA+%sIBmC@hw6NZ&djfKRUFQJ*zCGkY1^YD?#5Pgaef@nwa+X{Mm7HD zNnGzC*iB+%2nql%W4j(L;ke9=7vc@Z`4TqJsI?9sa}X;11rkS(J}un(K_$$%sd9q$ zX0?rdy9{TEgNuiiKSNy)hQlIlabc>VynA_l)uqFe{=K>@kVffJ+!(1cl6_8|23vF9 z*Or47_k_&D{W{L}I6GMDYq8zkh9S5RZ89JD!h$8+DCLN7u(@ZTm!3-HJemr&`|}OR z&vog0H~9XrwH4st@F+Zkj8LHi?WuVC;J(b-M~3ly#~5-}T*cl82mktxwY8ND(~3Ok zPV8%qOz>jVL!(mc?Rg6hGy0blm8Adp$<3bb5@66CaT*==*ZK~?2I)MW;bunb^KL#f zoOjBmW`@D7-5GGTch-^^O#@6Xdw1Hsi!&(*Jz(d`@nhUt@M`gucJm_ax?T9072_OD zMKC?jk?TQ!ho%;17s#G))G&14gR**LO+cXb=t%nJ-G16}Uh2`qWso95kPT0|gLvVo zPhKynj`mV{KY?*oq!CN8Q|(srq1S0 zK?Cn!?5eEfn6JD7W#Zin?>+P5k)2-bt7N=rf2f>%1Cu zl`}{>wRa9lN1~~67P$ubDeHU&#@@aAq-P5}21M_;`tfx7UhSQjusV;7GRAZKzWe2{ zCyeZCz?{c2%JS~ZT6<={oWy-uYt!tf@y>MS-ttEDM+Tbe%Zv!qkDHK>^M4Wq$ajl4 zjFE#X;W1O7MX3i+Pnukg`012{d;-db&53+pWX_tzkMX--2LqhmDPC&QT+7r7u} zqGXFYNc5`cd9Fv@C<>(?F75gq&yQm%Q6rTZW!m*Pm<(Z0wnB-2s3`~#=zong+%snZ10&^6X>VLK$x{NM9Y*ocAp17=hzwlUKa__(RyoPacXw(kaGX4_vegTU0G;NVYfIv z4)O6cG%Sdt@11VcbHJ-7)?U%m?jIbRn8X99gS)E}>VZ?bj|!eq%u9mWE8X~RluQ3D zuj*3u-{RF-@sqvu{yJ;+1`O+}z>QH$?IZZR+uU=JAikaM=FA|%Ww;cU(KAj zN%!5IkRceqI-dnTHJW(t-FP6nzhQYBRvqog4jS`GJS#Fegx8NbUcGqq&-mvOSzVA0 z@BfSq!6P`uZQgnqq;a}kf6fo1j!9IHn`K6s_U+SsdpG*l`HzB(8*_Mr-gl60E0s}P z2vhTpzn8;efO6!U^w{5wa?A&Nj7(*WBGb$$JJw^mzn=uz^=6Gv|C8{3aSYsU&i6}6 z|C8V)fxpUYu-ECvUS|U3EU!QsWc}U~o!TfHU@<2(W*Y>4z8*)=%bYmn*3)u|2PbLo zsxYB++lq$k5?_i^X1`8YAxS9%u~r1K}l?>zY^hyA%uy2#CZY>E`6|?dHzG8Yv_g%Bvh?WuM6Ff3fi6f|#vjLW6xc|?cf-lGbK8N`h!oV;^|4Z|(3 zUWiLyaV-Lm^!QqRdd4rL=*2nSL;gJawGfpdSm+bdlqn) zlP-qX{wd@?h`*O%gTwpNJ?Kc%5`H>4F6!>fbPeB_LB2|bN*HTf-a5Lw?3$#2Lv zu`q7XXQaajTZS{ZVLQeT@A&c-rtBR!hag z^%hI}V8_^*b@jz46V?v!cYvj4pw()^FY#0K8j$2q{O$86%4>|i-b!pVA0fS*;>odl z@O!P+0bh?f%6^(h8_frI{`YDwN((amrfCp_&QX1HH}Y|B)wNIY@9RMuh$W%3G^kV~{opt3*5+s_cu*JXZUQ zWLjJ==bK6Df)701$!0@nNzUG2D8ZBVILfP%hX!}U;sUc?(+{IcvDtALtLF7-lEd^l|R>HJCz0R z$Ubc9Ob=>asQkSq)ARJnebTD4P6C}RfXMCz&1BWgo07TFAUv6q$500M#A`4ock4OQ zBLqBLZ!}wD*c6E+0oOl~5ShApC){d;g%> zTTFyOb`Jak($f!RxVV9FydVhSiJ{%Bc=b4{DZ}`FOP5jYg|e6SHQ>8x*kmJc~P!-txU z!#4k~pkAxBPQ#Q*UVTcXcYd0T+LHnND$>%&lhO&gvqleWQ1E!ptl4z2UThQgbaE!> zZ5Dh^)#Q2 zSSxx*`?yn>ly4Xiu9?q78mv+5WG4WdNNWaP`U3lfQftx5rRXY)gno2#N zgY?|1OrZeIgLh*LI1l*!LOmz={d+cC$?sN!K8!4H`D*XG_wL7X|4k3?y^b!t*J1Lm zIs1Y8zoGf@3sDzv!a&FUA_<$|16F!FB!npY(HBeH0K`DB5IkD*54=LVFOhg{>*mMm zx%yIxA3O~HU)xj1vkve<3~Mr4=1Tc5lXyJYv^djr&(^7V_L~xC>bhCdb52*x+woW? zW-+lz4}24bdXJY&9!bQrw)J0YPuNCErDjKdyq+_!KzW=qzjTorudD5Nb*=pmtS^+Y znzfER#GL&d8&Pwd^@fiqY$BD6!pvp9X>aB--w2kUF!VLa5xq-QAUPk^9(ko zgs$c6v&`i&j)e5y(n~LfeHF3OH)ol*pk7tze8#F2YwzcdkuS&&?6W?EvLi8A!XMtM z+jST;#3>G`l zRLfkZj~whXC{H*9&u_92o3yKWHqj5Wm@vq{XPXN;P}9WQfkl6e=y%xAsCi7R^WZNF z<#P5Pm6Mp3qrVgBd!!x}@t4js`nwQjK6^xNXWObD1*L`#4k|Jmo=SpVP;=tlD3^12 z?Gb^i+3oL&$S2lJ5uqzyOq2G zKAux?Tw1u-!Zea~<+o5jX#X&Zc&Y$0jj9OJtB_w{B|oq=GYX9>VB5(mR2QUuT9)xX zV7?!JP@h()J5JM@ti@`dM*$DtK8DyF=I-NKVjfE%eV;?aa;swivqoNf&}!&JpyVgd z`XK7aHIqCtT}O3ag=KjUL8v)l3-n@8D$D#GT_(@l=`ztQ^)`gOYaxY&K~lF@>b%`!MN$64UL2Fb*by;)E#5R}FZ52|y;yJ6sO!fPJU6fA z&m!XaWt<2Y8I@i3bhC5T< zdy_2hcM(4!@qU!b`(ec0QbCU`wqOGU`-|B*RK&I8jtcCkTgQf{+IQJLm{EPKr5MVu z9c7&#L0RT=q(XvFvcW#D$7sm^rrQVF#)*zCf?KKXz> z3%WRwhxbF%qWFY9Ho17Rg5Yl49{@9zO7VeIFe)nR$R8pP&s%4po<@H4L+FKgTj<~{ z`xqW~p+_|L=K9d4y*0?d^!AOiWzEg8ckEs}f_Sq}-K+OK**wBM>T)v_Yg_1X179Q7w2Y}GU7BNkVA>P1YvRiS)a>s8+sZ|M>jXk zor_N)e0fFP5K+5bM_cq`*~T<9S5Dk|w|jARR=L6*k@p1J!jH(m|5R`km0`~Y9&TH# z$xKx_BSP9wI{Pz}!S(4h$kkg3Iy1&6Vtj?Q)~7QQXJlbU-eAH2Sj`j3>tAd75^(7r7f#K&eevd4%TM1yHt)7Z38%d$#+~BPJh)?vnq~tHRB53 ztI(6+$x`p#Io6Tqez07qUBJ#^#Ax#THQKk{#|K~HIh?Yz&mhixZmHl}+b%Wk_<{~n z{qtF*;W%H4ac<~7ARZ*rxC7G0p32#PF?_kz6XOCDH`|bEo4U|OjQ+u4(Wwo@RJ(eR zZ*7Ks7|%(h*Ux+PTn~+5@8Hn*5FTF7u@1|RN2@sIU(jv35w>9*^Y@^?IhUQB!Dn06 zHc;o6^=5%8L;r_d-98c&Van^D^eodZJa3kJ} zu^4MBC`61f+K@K?cCR5k;DO0b~ZWebr)n%P;Y^uz5>rz}!(FPhP`yR$V?Mx0Lix zLm4Df6VQtwAGadJvJ(W>hE#+p? z?M)fJu`&wvJM@0?fVbjFNPpd|}AFphlGmvw$0cwq{~ zKf^Fo4p^+;50IWZpxvmI*@K=+y$g??;*MMK$>;fXck*X#c?ovKx4-PV0JKyZ(Ol3+ zfon%9jlPPd%h5gwjEq`ivBf+qxO4aqRhyHg1uhA~Lc}A1wEsuQOPTa@(0=mG-Qb~S z5B)U|gZci?nxE$Er~8zRmJ{;0#}XBpL=xC}{s8L2dEJ9~ZtSM`oAOgmP}1zbBF%Cw zf8ja38}#~b2s59HD^);Q`HK^|BtwD9@&9+^B~O0grKJVdsLGS%<|buN`X|#(q%m;Rok%aU2(7RW$QL_oL%@Q~R*ZN4@ktiuuVTj+2*61YZMlQ!vg|JQWY2 z;KM$esyBFv=fG4;E`4d9-6iqlxr&~<Sr}8dAf2Jrck7tEQ3JUy^M6s}@*J+# zD1SGubucr zcdvbx<=e-wVktKirqHWHlcXPe&>$_|fVkCZUCUobpD=m*Y^#xNEw&=2PO z%JoRwwM6Kbo3F>5!u15h!EM+L~#&Hg2s(2+?#wrzT#_Bxe;TrRd8E4b<0?@USb3uNCYq`e;4^1`} z+hQY2n%t(x)XarP>bWphTWI0UD{N7eVXbJwXqlqaw+|Z1=qkM^k?Sb7y3tRPOOQlx4>oF2Hj@xMBjYVkj zQdPFzLysPky9&6)Z1~z`L3}?XVbkDxIBVjLrn!rFxuh}m@O86}_w5Gl@(g+f(uTZG z`$Ee;{P>X=a1x1e0}QFiLuE0=eXf^tLUs!IZGowgz`=R!Zu={b59*#tvrV=Tka zwn=5M;R2<+HI=Tl+fg2M+D3lLdRHoNdWQ4cG{sDaBOR*t=y2sY$A+&q=?Ct`z6_SG zx?h;*6cdLbVL0o|{mc%p4cUFXo?_3R8Y-P_X{jhK0P=`$v$9$P1qU8mjKaok#f6#OGHBO_RDUROWr+#y@c66z74;9|DN_WaP%eHPkJzWLYQJ1Rh@DX zM@Orgo{c;>l}5XxWI0CXkxIj(Kg#j#(*{vjwMk5+=BCuh0HR4i5ke0)p)Bqx&jgcq zYu570qtN!#JUJZLBJ5?<+Vr>BH&a?-WXu=h7v!mw_zQpK@0FEM?mG+|dyeG1#eAjg ziF|b*;>-tYizf$`d)9$&Dkl=nQS?26vM3Y&q?QT4TJu)Y`l8|i=I!!(80T4K|Mq10eQRwB_X=3XQ{;Ca4!Vo>49x!Fd>!f?!zNiS zR)8rza6jeJYd{WF!vkF${iE?zJ8k^>{1$Ik9Y{rJ3=uD0<^%$Z}U$cRB#Jo*9(=4+nCx znh{~^K8rFqo}bfpO|(nod?L@mSL~BlR-TXcq|V}Fy}QMl2aHXiJ&(HSL$_a&I^ktRpi#m*??yiI&STwbJU*@I((%#m%C)3h z@RDvFCw$0`+lqDM4QnwDJg4#ddXIms^>{-!_<>2&b-nw(;&BgHd%1gLoUGnM&QbSD zSV#xQB+SS#Yb`?`PnB@o8*J4N3R}^1^E3(XZ$cV1)I6+sz%NKxNc*h6U9+`piTWVe z%dPxHq&M?Fsr2#KKr+hG&o3cA>F0dS4;D22us<*1p87u3&kxwX?Osb=qY3|S%|DFq z?hEkSw<}SXEtFhng~w~o*5hXGXWRy?`2CFWXJDQf6s=~vegkc0 z{d3CVqXjhLfS6zW=%`7U4Ao^lTbFej{1bp&E2pCWj-r3u{OhhfmuZ0eJe$^?VGSL> zK*!-6wysN;=6IimZfuka+N0pu#;n1*V72T7@euq0FIYp^orzBjE#{uThpo->UFg zAaUYdRnHmr?Zwt_ra7pnx$_*9hxeCoq#A6(tJeI~!nEbl&qo~Y(n@*Un3%cwLWFNL zbyGKTrEV`l_*NZ0*`W7Mh4GsR-=XdY=d%+&`>GH}9H+-T?2kmvg+QV0OzjoaUKbKJ( zM(zn-gM8H6y&M>%)62bi`VEgC{1?)2-ux2iiF@lxWv02XX;XFn$g%1IBv94G#$Ao( zJyvg%il1uOcdNUSc@G_dgI{&l>`unbv~Aq7WL&+)lPdkH=`(ktPR&Cz=FQj@$-GBe zQZn1JG8tD>{xBG~Dj9cVL9kXQ!;c~Ybjmy@CF5r1te@It=)=l=iFyw1*27<@m{gv?f(Lv?c}WHg>tT$-D~Ni*sKYLzxq6pHdsDSdd~>ia5r7t+CIZ)QfDa2bBXvyahdl4sD~0FqF7yWH>%BWHRy$}k_? zsa^7#!Txv;@^X&;BkZHp2U~Z~PBcNVN?Gmh!~TIv z106fK?O;PjMx=c+R(d0Ksp_(c|5)$)t@^v+C6`Kh>i(0I!%2cMX1+J*b%x)+toy*w z&)I0lJ=1M@JLaIKd(uzxOvW(qi&+>eQFAP7y0VwV*`EIS%yoZYl9wRPhwO;n%ivgqC(eYn}PiTSFjcS7&VDw`nGR_gjSUDv0huFneS zSkI;X*wn*0hFO!X&9WEH_O7lNzpjd?*aqfd`FvwuDVD=H&STgz%l%ZSLL7M^FXtxj z;e8$X&F9P|&dqP=HoX&Vx<0E-+U1+6BkN(?<;AfM-KfJiy*jL3VjaGv>+rj%gW3NO z2hvmZQoxYYxhninF2FGCe~wJy{T045WcvSz#OR0Kul$L*tfkpu3cgszoYB; z2dLxElZSoRtLswv?e}zDKaRQ@eJ}4Ms{5^SS5ACo{lF{xlqL4VKk2eRof@l92BgLb z^TJ)3wBxdx>q|yB?orx~jsdUagtSp7)X@$;zT4FOG?xuwpqAuTC80!2%v9-D<` zaKh{U7q1>m?W-T_dVB@-2zAM-ueNUV>tWYu1iQ5uef5ym=?A>}E|qTnRoC}BdG+0q zUEduYsPDf&g!=x6uJ1qR)OY*V%=#j@eEb5;ILFF_89HM7 zrA$8arR{RBf&3XVh?PG>T*f?`$l4D-h_pOIzY6{M%zzHmjXJZ|_5dwS3*v`>V!dWt z%={INGp+XjV(+2w9Gt#0CdMB2P73R?y0R$ea^5@dT8~Wn(-WR^3!KYWp52Xd*v1#5 zjfMwn9p21L3wu#Lri$OD*A9Ozpv-_gc)3?M*vBMPSxeQ!tvq{$uG?wQb7je5%>Bvy zchr=f@%W^ANi9$yTO;E{?9QFJvJdgj0(Uczlfp?L)SKf2#+gA@6iQO}hAL^@WJVc5 zkj|@QOlzb+DFw#GKTasT;6*nUJWq2@o-FY}1Y{4&kLM|fyDGhB$fWmEb$<^Wu2kqV zjb+c^+zV?6^ZuFmCuDdJLU~6@-FY5>r-?-|H#Tu6DcdOu4;E)2zBb`&Z1_k+PFK1O zEbnA_yGN}=cUm3x}i+ma`EQWPH34H=znTrSS1TQhoHCM+q4)q0B*}gy-S}tYy1LHSVdKd2% z2B&b@*IT{znzTKr&mBmMKC=UA<{;&TGZiIeG_pe0k>RsCoGX%vtS`Fs1NVj(SGS1q>b4xWt*FZHcpaeC*`Xv&psFB zQ7`&rtrvYM)(gt1b9iGP{Pp4WfI)bcw(?vjAI*yema+Yz{}sJgNcmq`o>=1_jk>|d zEw(%0U)ZwCl?IAE(I18;&X>MpnUoRp9uNIKyUHaOwMYWgQpqeXK$%?Io_VR*Uay0F zue|s8%aAj2Tzc?l{=WiYM&{4(RjBcW$WNKx2L69vybR9qtTHavWn7}m;5uf?H*uHh zxEz_gJW;r-cN`Y5o?noPm|A4Vp$Ay+%XPVs$F2j->9;OXPlTuIx}tI=(<9$iIv?*} zXRKX<2?O7K{k^!Wnq8%=Xc-rle@#xk9-C9Ijk;c&bUv2x2#goU1Tyn=C+W6vT=};J z>CCvYuhVTksj^j;zkj|bO8j)5<(2Dop2z7t z{8guf2_(A1A% ztKgM+Sl4f#&bK+ceglR>swroGTHH~cpLBV%{_fKQX=x1M2A^9hzW*@Jw8%4|^CW4I zQMj&P&rLq;=CT2a%TH zVSCq9rgi;hbXl&wF78k&&h^ugRGe$`ojQ(nHFRhCpYMIlB0j9ovdSFuAbmsUHR(BC zq#Ki7(Fc5O>hyQ(^hQ6;^kLfWN?WI0uxX7wor^oFkoOT|8=????U#tw}_Cqb7{vNw7R;$gQT@p9cl@BJ=AIQHri?!QxfHNx?(vxGy3 z);hKezOLbB3YXFaZ!_Z0^y8tmYs}!uS?}KZcBEOa(}-of#=H*Uc;8vdrv1zGUE??w zprShd@rdsU;&H;jK7o6*CnE0RWZbS}bbcuDyAW^fbVRDb0{|}}sr&vldFaeH{4nxAUbkj)?4 zI}kU-d=h9gO8?amH>&GPD8^E>fGxJfA4dFyjZRK3ac_SNdAX1MYrHE&{$bW$em85E&sWIjl5335uZ&F|&xaZNyO9I?Xqvch zVoWYKPFB5uo!na!>z7d{?!Vru+M()AgtO>crtj7ba z61+k^HmEE-)STkE@-#W`JGt3u=wEfVg7j300)&2gkoI)_PB{+E>bj>cpX&sCCW%i_ zKAFV#o>(7-p9zoI(-=Y61)3-+k8OiYfOQ?fJhyKzkze-cx-y~;i+h&E@Qc;mcz6Tg zd*-z8QSD&dW%jM3bUhe~oG(Vp3>kOs`Th2MQ!(H;Qs{AA8I<{a`2 zea=?$MX5V_i+6+67%O{+A@K0tX=>#qMvtSicVL`w2#I3fGkm@16c39lLc{yme(-xR z2_8*xM zu~VI0m!0)Il*=~I?~Rea@OQ<@j1-ya{$U(#r2KX1`6vVDZX+;+-dM?JU*NSJc4dL! zQ8hUT(sf#S_6v1e--rDuZMsYyFD_BX7boh-@xdOp`z2l-uY!C#OTen?ni*y5{8C-# zD(GA5n;#=kK$=q#wv)4B2MEH0IeNQH|52{&tv1k!_&RcYQ&H_za z`KGMPTJ9NGZ*JF8HShxReC>#38rddaKHJiBct7M^XmpEA$tvR5P&%ZZ^@QG$cK9p>OJ3u^yY*6BHk86b&(ff$NAmJ!?o&FSgSZMlpMmz zGmNZ;^T(Wl`Q4n0{JHd8$O{~QP_i3Wrju=$vn9(hvLu&I-GeYXWX>1Jf^+A~>WujU ze--*oM;O=K<#f+{?`yUOnLA9Zc~y~XVGl|_tD<}$P_0Y(9oM=KdwmK2dZpxdq`!~o zeqMq3L5SjNHP-Dfz9d zpF2;RJ1{x&sJ;x@c!u~nB|mp*WS%ZN>(5bN&NB=<{DrGC_l5WkZ)o(%28U5@uS?s3 zr0+W4=K0eo%gWH5ib?E@4UhQ?q%j|ib5=W+B;)58|0T-eTw1u)p9g6fF~`NopB@ve zJ<3wq?2mER-`+vw9Pb8Qe$K1!Qf(VPuj}=>$50-x`c%!Ue&U<9!8qq1~Ob zI5zEDjxiOZLT^9j><5)C7xy(^eh78=TV025p$_z;M@&UW<~*eK&kV!6i^_mhaarNL zq`{@s4@+40S06(CzNYK*Ss2yBFd3!LtkPK}x)5#4)h;o@VVj$*ZFYTVunN{S@<`Y{Rxl zTULT@fAA36@=v-gJ!nhJ{_=+pq3j>&vad;vRmi8{bH(yS!%N&)Ill2P51|e})^*s9 zIvCp?HCA$y#NN$Q{K3&jx*pEH@_~m?kAKzm=tDi0!n0}bW#;9-KLou0(0F^7iU(UV zgZEz#0q-XoZ*+-xv{N&9KYa*z|D*9HfoJxXoEJRL{JiZGfA$dS|Ddk_ZK(eh#y(NX z(LS0qzvkLo@%R|m!IXWXgy}WUnJ&t@M}BE+1C3mW{7dW?H3oTr{MPo2oVWO$vR&j{ zO4=@xu1#8f!DHIDVI&(}*x|2>E%X2UaaZSf`N^G$Rro6kR%e?R`flq#20 zPCerk+~iZAdSm+(gzr@-4{9?_sICsx@2$dND>VpeL{EkcT76q%%h`&M&6QKmxC%NJ z^-(TF)bp3hhlxDC3F+{Sm=nDNxpJhXB>cnp@KYv}3*;i=e-0aNJ&0!NsACI+V@tZ5_Lj1ZQv#jk4&8=adbKF&Z z_|273oE|o9-hmQWuWhzWesg7-Ii2QPXk*wsDTn2$y78MU$MBeRIoUksakd`&ko&7PjoLE!&6Q#1`V#r?_@3VCCURi*HJPTW7r(hO zH{#bdOXR;?GdVL@-hNvizq#_v8k45yaE-au=I1w;U$rrRKY;rOv}?AV&*hl+W>}}& zZJGS$%DfW4F3+avS-!T1ZN?GkT`b3CSyfvWzqzsuU8U*4%`=~_4%%|~&6V>IcoMj_ zq7P1DHJ1G5$}BvVdL1}o%j36)Rvy=8F3s#aE?TO7{N~D2V_R&GX6UV9%j7p#X3;ip z-lpcm-L^b_bLDNpFWe{0*pIg9>HsD!Gi0MF=FE04*fROemB}5zg_&jgdt5cP_t-M{ z&6Q#Ja(Z6TZIa6SRGXLITwb$QWzuZMTJ?*z9DZ}sJy4_vdU|>)JEw8Y=bHM= zhC5bvQAf3`vhxsLuDWL9#us)~KB_{lnW-IIJbW<)KuRyvbrlb)?gMdxPBX#4Zu~9l zy5r+rE=8rnG_4tW7M73bmb%vJ6m#!*;_o0I#S-`|SO1CrsXNHUm}Onm&hhi?$4opI zHPX2#edb5f1i4lqbeU+U7{83`#}1{j17(*Vm=5E?$_>cPMKtRH#b^BmSwRG_2@ zYq$zA4(r=JzyA$~b+69FG+{2b$mP2Iz9;p&T+i0Im?q4{8`Z8iR5H^WuhF?AP0$-W zKf7H2@tLc>@7nb-olDXLxlRsp?f=;gPj|V#t8+=3AQ$dM0LzT>&e_*r0FW~s3AOTqlO%7e%>_ns2@A5 zJ9RFm39;BB*RDrC;i8*euBYi-OcUlhBgpl`Pk-c(U9MN^Tuc+@S|_$4yJ@#h`ZtvVOegjkfgxpqyizV7)h*WEf7(}cMm739JXd`!vS$j6SRw3PnRpCs88u!k|xMS{_1-EWgAyP&}eG-1D%U$ z!Wv!>g$Qvy|K7XreS^!j zQ|DruFxLjjW%}?vuec0s%=FqdFi+g`NW_2H>{K$s@%!^?tPFMa(d z-s^I0(Ycr=%th_7!@>`I%qS1)Tuc+@x&k3?l+WzB8;VhrYroFLG-0kQC6^iHaMhdF zxg?F*$;fVp8tG+STctGogU_D|fCux|{V69E1xn9z+w@sQeQfa7159_lom4+<} z+y01DnkS^voS8~$+BiRzW{;%ViGK~&1*tTH zlE$Z>o>ZEfB#qBEE=;A_D`|G(UxT$Fm1aoN`0ctVl?GdxMB6V;rP(KGcH&=ybxA7C zNUEI2q|%J0%DFU^23uj&$ETmmQfbB{jZdqWr_zwQhO~M`D$RtXAr+Z+T`6f^365UP zH3-yx?2c#RhXS&#_NuvNcs7eOd9p#)jzPo6t=}SbwB~HN1^MP_wi^=mX0~25ipa1Z zi&VfAPkXRx(!|T+q1+6cEgS8bVI8*}ROZ`^C^ytS+nA(s-9|VQ3o&IvxEffhz-=OH z8lr8Ds#(TEHnl5KtTt?ssZz4cb#fal_K(*7CNc!Zq{i0AQCCRzd3GWC%0akjmC34PXr2Wv2hUZWL4WGv9@JnQ9f~M0;?p__G~1|G```G4mCE< zG|JJ&)(Fzq6G$cLBGP+*mq04ndl3rU+hu5?z0jPmF3h$|Q$?f)|J=5#%?IKZ=Yxh7 zp2wDtgvCAJ4=q*`JYB?_(Kw zC3`c1_9q!=<@z$lr9Ya1RV$n>9dusdl{I#1z22Q#r`od}Isrvy_v5qh!j3H5zSs=7E{zuw zNJr5gmqshuw%FLwx=B$9E|tQ^!{%D6g{N!1$yIz+-x{GxYR-JTa!9dL>mPVXe4M&^ zg4ej;&%_Id&g<4C?fYUQ_j{RmCHph7>U<;vFPsL2TNgq5a0XhrzKqTA-_1ZP*ORe1 zKpnE019x z$iCwJnRq4pGiNR2$?ttBJh-f^HKr2>+~Tt&g85r{m|?dT$Bf9$-kXORbZueEiOkCP zBoHYzIPtvT-4WEVdkeQU!VBINK@B>%@R)ATnJctxeL{lAV{-*h;kB7+7E|ab@(pq1 zu%injZ_T0O^=R`uZBN6GO-UJg4CfsIPS~KLl(RKQclAhM@RX?bA#6`MT8U|_-fnRk z+=Iivonmw45M%o}+9{}(2_oKLfV+CH>x!RgVtRqMg=kaek&copV-6)!6YjIs~qje=;DnDq>}v?v1)lk0%>!SFpBqJ1nu={w6JN#(QjwMOHFkM8jUY)`U2dgkvgf3{+Z+lSMRjv7SEfW>I{x$o zT8>D(_!veoe<=^MEZs!by`DVGQk1hjXBR=+si7`2j#lFarwoYGSyPy>Q0K5ud;imS*|J=FPGc>1rF zT_Iz9=vW3?xgL$}f-lWLE7y}To%p>Dtvx+8k8AC9dMK#kA?-Qv+mKufk6{e?o;Y&Y z!NrktsE7RMlX2vrvkUWu99&ZEQHR@VZEi2L@JM;s!JR}~%s>k}wJ2JQYR}F<3p%p! z2yV;KJ8^z2IJCwzr+>cTTt{)+G2F0o3**L411*a?)7ZRtsH6-fhV=aeQrM`%6qB>} zp?-*W)z$7!wW%Dn#Prv9J0!5R1yD=5Sr@~aPhpkp!JM_1I?BhUu*&seOh432Vx3_9 zP$LtsTwliYLvxvUCHph77R+Ygm7~ho4(6^5v~qnJTMO>YKr7diF^*MFpq1;z7}Ajh zQpp~S@WwL}NacEOTjbR6M0-Y>Zow0I#N56p?~kGGjG&h5)!44#uM z09m|;BNE4{Ow4lpHn!)uBNHzi%EFYJV;|1lDCHSyM=E+C-KQn{GctzN1fDfA4%HYP z9m9(gn3Sp3Yaw9aK8?u5pW@*GstGS!9k4=(>13arjTn+mNBi{lY{Y|ALLyfuwhsvl!KWio}8ar`aZ zx)|a_He$*CjIFlg*@)%(G&0L?&cX{f6UBQpf;XClSGGSRC;WX`c%^zXc5h-RiB_^F zV_18WSS5Qg#+x6J#46Q;F+WN-Ii%Sp?wxzOyHc33)_vN;tW7n_dIgQFJl}IjM{3h| zX*EwsBt=)A7&rNDCSFJ=Me$-iIcV{+oLP1fX-@*FWSer%2b7Rsoj?l6urP0o*|^>q zAeEzv7|!khr)1CNoH}S*{e%FgWWPm5Xu#r3&A_R2*m1>2D1x*rL<+mEI8u&%2=DA% z6(R+lS9l&pc8k3MPAB$Lv7PYFG+Nm{jOQ$oQ;rD9YVkIiv{h<7uxtEl)3` zofs77eG#Nde zF^cruc7rny`AB4or&hbGbkD`Kvs(?4a{QnyuYwLN+^z_BxXPgMI@1Y5 zx!RzV_ks|auiGrjEX;LF`vZwc54Kn&Ws00JNS&o}@(0e_gGbBvV1&xAG3`2dv^HHH zDZ(Ef>yTy=2i@X57omxb1_y5~HK(f~i5EtS*^F%C7!Bb?pvgv^R%jE=$%)-Nf+^Ke zJjz%V9$)~bP)p+FjM#<1T4(Tvr{)Lf^lzehpx)TBxg=slX13NK-dI~0nrbfyY5-T1 z6K=lNY}4;pGt{*VZ#q5r;Fo~XjX!+4{MXhQ(2Kw4@Qe4^Sy{UakGA7A^@};=@>!05 z|4M&1|Lv@7{HRVx;k101?sNLP`H$&{zpiqU1fA?P>e9+1)~-V6GM)Ie%9_fCJJt=? zr(4Z-^Uy-iWn-833=Qt13{F1oN%=1Qq&$NO%MW3?D+ATf$5e|u-8b3-_il38;=gR z>)^^M`0^nBOge_|tn_@eV|2&@&4*yD2nkuy;;IU#_6q#1^1H6GlyT5gYV*!YMXGzG zqC=!{#93xSwlWO@DmKkF7sBu!{-Zx^dZof+rulSN#_+XTO$~QdPaed{^hqVipI&Qv z`}g;b4!TF^j{62(j?CmzRBd9}DV6GhR(+v1(3ox=n_sBS?5@w&#-{GsxoLC7N2(OZ z&DnEr0Pc3dovJU4*IGyG)3xyhn2PP(v^|9M@i{4u*V64dyHuXXw-Ir&T^p@8b~jr= zYug7>jqN1z)(CQMX=KYhGv52#BFOVtXlfI!DY(=u-NP}o%?UKLt>k#d{OfKKv_`9T zxZcM75^3L!i}jiI&K)5U6{lOXz$be2F`%NyDpc$P@6wdpk5&BORJ*owYY1DEf?{pG zMxoXlc|a>FHX#J<%LFcqhym4(!}qvb8bX zt8#IB%j23wGcmSTVr;KexV74NZDAjLrO%AlrWe5)j}0~sH4p6EnrL!iy4oJWz9NR* z+X3vH^9?mZmmBP{TKfdGJc52%9K8c=kIk%06*_n$2A$*Fno|>N^Tu#G7ar}H-SA^9 z>dlL_me7~QElXuF9qJ_(cNnu74l4Ffm7Y;Cz5d0^R+EFEcQszwKFyIkTns9{$hK|Z zC~Oc1$t&SSdS`MVi}K~z-JA^}X8E-|XP#Vy_FYJ<@nc}dbGsKC)4b}uaqFfOWN|u; zVD@BTZtMVNWM_Cm2IiLS$%U@yD8}BNdUO`z))U*x^Rh6vlx}6DUmul)xcNjPo|}cZ z=|m!)lZCkPL?W)wK-_%Yi9~#47UGW5h!HMub{68b9he^x%(JpEx1U(dGqW(aomk9A zWMOuK_eA=3T^8n+6Wh)+vM@KFSj@Fqm?wC}JUt7u6Dww9JWtEO+;rWE?b}ncFn63- z%u}*3PcR=kIScay^Px3am?xMIos@-ng89(uEX)(khgM}_o?t$-G7Iwr^Pv@4m?xMI zEziK*c!K%RvMkI_@S(^~x;qQ=+R{6)2x3DixU zVU|CKMON$o%|blE9O!?tFgw73VzQB+3g$v{zC)Ua7}kFWSmpH&F}vTND6Fa0f@xS; zJy{Ixze2RMx~RCkCt{QIpB7CkH`0o+!g$+rX5UqiY5hkMuWz9>+h1?bPc2LzskI<; z4+Vxrr9Lt2e~)8B?pzK#X6N&7N$d`cYpkvRDtNU8s6Sg&?`rKQM2LH9#|G{#t*485 zWqTloo$Tbo)D^q&c)v!LdD;iX*}u|aI!RcrX#grp+0IBI0p z{)<690*5Oz6T~jx${bzQg=ppf)p(xjezCmPHKx1&QHZFNkVZR~I&>E05;2X*4@2Z# z^@Von*%G@m_|F#4sU8RJJ+O02SxtIGbMjA_n7!pOBQ*4b49uOI%WCdp8rJV85c_NG z=~jJyq1hUrnx0J!YT+5WJ%=yQr`q>&vB!q{)Jw#rXKalBe>WF@Ua^ z`^HvtalSlu4wX@(|D9ay{?3ef&aAoy*x$~@HY1)iuqw>AB6ceOkU&@V8^crW)B;!( zH8$4Y(x{`Y`cc>%g?t+OjM7#k5&N!h#;{9kfn(bIzt_kaHY4RZTF$zEIVkKKdAL~% zMsa=?LH>F^a(dY)j2!Fhzsp00X;A6aBhuopY23ZFR--l>5_XD(6>jnNoSD24qx@Bk z>}@Cea5bQJapA~QN1HGNI|gg4gt1EDIUQNMz7oM7svWJ(ri}^M~ zO0WJg8=lW-mLZc(z7HHF0ddR(?kx!TwW= z4ZB6P4EXI%E(jeR=1$*X9qW1RX=EOMXt z4_5tL7BO~e`KUu|&do34t^`GByWvW&GuSct(jPl)`iN41iGeNJyD^&jBZIdKR~E)< zhe25o0h@hQiku76R7{ughr}MkmJzCx=6G%P(9XoRwJ=)jHp(9;wE1RhLD)nGWN49l zroW#+OCN&@k7AAvkrw;Er_kn_M{5-6w@ItPji%CTPmC9S#G!|x^|Evu(G-2yU@nkq z#cF>4)a+vIKx=9qFF%#uTWpU=a(*|B%>@th#-MLa5OU$Mj;!>*6QB&HqmwMT@a)|lq3{nXWOcXe0PYF)9hs^(`bLI-E_$5b_R)pL@La& zvQfcG%A&?rzxVs7TBSoZ?4GH{%q(@V2?8rj+Y#Bq`{LM?V z<43sKd*k@MW&1uxZSVH6WrZAXF1C0_G%?_XTO31uR}N~bsl`zvtMfZG>SSZ6IW?WwYe^VMU-J!)1b5?TRTYF=G=uR4C*RS#@7d+AjqX3g{Z5KUICgu1?XkLKti_^QO~l6YxBW?{ToZ@xCf>%f{AoAIyFXt<0F z-F)`&6`t`qGRq$H=Brb9=>~QZ?^PCWeij#F6?rDerIUECOyQ-;r7&J(t$l^XYv2w& znwQ$b6-JAU-pe(bcOpy)F$&}5?AYkHI;2jBg5FaHL>9@OiK~!eL)5yOl!*`=A7whgZX@oI089it3Fd3ZPjLKhscK# zpoM!jronxlL7lHPD3a@&oocsh?XhNap)@~=t~HoCN-l zht{{)YC(_2sZxGk=8Pb1q@JlU_cf`rgAlQCn0pf8^X0jGOe6hk8krJ@;mN^q^*DD2 z=rz*AznX>FfjJVRpUUI+9Nv6+6%!&7{v?8wDhcW;QsmAIzaM8IK)1kFPTy^BAH)=C| zQ@Fy0HjeBZZf0Uh!EPS^eh%JmIlrSN|L<3i{`pO`_=?M^ZFjbZ*2fRqo2fOm7;C zV#cI9cP24|Q*vqUmqR~1>(uj+vDGSz9MfYRNg{Vf2NKa^9Zn;5Voi(8mP1Lz)Z{Em zMX~)sO`|CrNVWedt1*jF?MxESr`qzKZzEJYosZlJ->(rGI+#S3U0>;4W(096jhHqR zEY9O|dY7k!JCcZL=2sjqGE1rkuQ`8At(c|xdj#z%3AA+M3eU-iWckS!t-&|FVTXtd zIxX0eB%4^gM7gy$%dwODtp=4=*eCepev87I zvey?nAw7@qfCEXqwBV(1Uv7)&^Y&Z3<2@-+bauw>hD;Jw)WBjAJ<^C8L>EPlNh-!H zvY3i?;67vw?dA}z6SFZgmZKI;n}+hCjz!#dN(s-4_GnCYK9Y@EUQ>{xsiZHWeM!v3 zCEv1g-`MVJIEg*P_a&sKJ3vh_<=X_sW zo3qOD$*}>8%e#p%J~-BU7#hy@aTcQDD{tg{(P!(>J3A|jQO46o9Yx%gM(n^&EoNQa zOT^JuQ{JQD(-NiaD`IzlZcu3Tqqx+2m@mS}YgKYRzjt=3HCKKH#n7K{9Q5)tDJI{2 ze1P6}qz3P4$)iqTei5PG#|d7ob!Z%3BQe59VZGBzs?ds4Z)6R)-XX%Dqk*JDyu`v& z95teuye<>9JZ6lNc34b!0UT;J4)d?Cx!AzdSt5uny`PKi&96*kO=KuWAKD#TAU}Zf03LzK*5o{@l{#15ZGkn3y*IE^~x+%K44gS4;9nG zU13m1U>qwWt?rg4kMl)adTq|k;Zw<%8_Yq-plWk8H9Rq^UQTb*bJu0rb?E5YcWurZ z#OHi3HTYy!wH6%mIchg^tzCZI&p8uOBl(y}4N@dmc$UW`NS7Goelbok%}tVAam(ZPwvIFU{m|P}(rgkFr z>=zi+-kF(P@+wZ#IWw60!}Ey)EJwiZgC$YRp%M+bNVjhXUjIivU}wC+5O z*3g3cvSSx}3-eI{R?5A6;Zciu`8n5OiA!+nKVuvY=rD}sxnR!ziZ_hU39*$s^5j%3 z+}fB#XuUzy(wVeEwkXGqp*=EzmKJvvM$6g9^q@D-wrG9BQw_Y>3WpqJ*OQpc=d2W7 z2iljTb>V%=GYy`R=!y6G(k;x{6`c>nM;JuoJg&UWVgzkn60N+|P(){chDA$gUeiQV zd{FuHX~V*z*fHtd$qt)mN59Ei6Q-)g=_*3cYw~c@S62(;#osZmsIULj1t#ZgBa*8#%C~d`XSLWiT8(b7OX4$!dxclaD<%)JH^ckO8(2I|3 z&I(JrhUJ1M*B=8D4s{nYy)YDQYm9d+i(;4W=hz;&JBnSt&tqEtE{CnU*{n?Ecis`M zRdJ}haPM5%Gbk&P(x<2xML*aDiXNT5(v6bh)1#cYGIzQezs)%+J zE)4F0m*w)3@R)A!rxE1MDd@s|9ML}fM34vjhpLO<#MMK%;8PvAx4e8K#u*+U=1_YI zD()6sQ^+$ZN&ue_5*D5@F2Y;G@tyRMCy=YIz-aqW<$|MN?QUji3%0*iqv%LDh9x@!nx9SVWlwDzYZWTFo z{wP3g)!>69L0*O17+H6I=+JInY%WZ-cQ;!(U0ZxqBl?wpcDNoP2LxWa-7%i|Pnr12 zQF{uwc*}FnpnO~E2M!s14M%CxXs;8>Yjtv@rhLup`wl(DMmp8{n63Wz9DZN#XnFlg z?3D0bjWt$-|Bl+xD9bK7r(zuYA1yAOeA`36c=|STtL&VPwfj2(zD69YA3n0s0gYh} zFWCgz`nJXujY=?;N!=Y=D{|!5d^7GJqBSV5wT$)pw|s2lvZ7P#Mb7%zgEoINfy))6 zw7q+zkN@7s^Vn9WxJT?<_>ClXKxG}^+mRLP>ppf4=Po^~BeU!8eEbu}yJOmuulY4l z+&i)HE6hbBvX8H7Gzt%cVa{PBMX_T$zpvzBr&vf~)QG2m9QtIZ$6X0s|;apQLK6lWqNU26F15 z@ZxQa>=pk!fhgmd-`K*~vDNL*vaolSeeEa44gXXl`s$&wn$DQ?^-~V-=PVifq(dI7 z%{3R~C996`rkF&0A`28GIEg~y#@0fFn zzZ5P0J&mnQM1o0{RAm(ACR=mn_qo9RNPt_KlSKA6AJ$09pgU+`2Ru*2X43EGBd5r? z=nRhSA%7>p{dt_+KNKJuCY2=IqHWxoqi;P2^z%W3NR#;_`4pzqSa1HeMXF7;#GnX| z1eZpP?V~=R5n-6`c>hGxbZbf8AKO{H-yv(XPVu0ae&T(Cs*dbhui0N~Pq*sxP;8Il zmH;2oDB0>5{%;)@KkekGC@shKk?(c*cD&_CpEjr}PT3LO|DHVDv@un2+{h~X?hIUR z*3sM(C<}X64k{X35;gYr=sPn|J>f;#*&dAKRB(qJGg|_W7?+SaQd3 zvaz5{8_Of+Xq0(h?d2XKU#Nt=Gps3-kVVHdHdB66Bi8O+m~7Oin=>7_FA&=SyiD*K z?S-k?SrJuE%hlgx6AO=HO#Ap!g;`&y!%2aXLysR>T$ll4=)`U-qFs1NJ~9`SB-<_C z>In9WW7uhyUmQE4m3&b?HjonwTVdoFeZ4S1?%XKHFkg^`*@<@M^e}JEKi^@_)}LDA zqEnjh#?B4TOW>v1e&RS@d{iT?eQt@@Hc z#NS1Q?S*aoy)X6QakVfuoS(||;VcJN$Rp1u0#0$LOY9{+Z0u!072%MW(fffzmpNdD z%~R%^eYicvQgQ!eX}Tic^!th&8aY6kcxU3p0(lIKrO`eNc|FtBJ=Y{~|F%%S;SgSq z1Llde9(t2N&ZM$Xo~EY5y?L>j6}eBepx)RRwFy0x?ZoW4M8!cf?iXRCt*G_BycXD~ zy9!&wHa#ELC~W-(vhERn=vuX*?f0S8J=PA5X6u`-R%r6vBA4Djg>ABkt;L47uO6>X zy-3))v*GRa;>nGZLs-7)db~qgzN!}w_jIA=^$?b?QjZtCe3ss(?BYRtt{6U70wFaDGo`zCi*%;R^QsLWv!(!P=83>WL(C?eG+AVL+>7ZsWIB{>Cl`nty}Y&) zkTDlmK80oX$ZeK25l{1MnAwJy^=7w1%WuHW4t1dIZh%>*C^&pu4M60pwNW2p?Jzzy z%C)$U!Qrt3dMCaIy*v;*Ie<~2S}qkL_l~x8OePS2Xdg6E)NMqBt!W$fWr5hTqmJ53 z+OVG!h`qU7nx2YYZi~F_3dHVjj=Tl*)SP!bI}lq-n}6#mbd6hfMJ`q7y!L^Or)FCT z3OIY9CZC-Oc?iZu3V5268^e+v8Xa*CF+;g zd>f0QaV>JTUEvN+Pwvi@hsM3gbrbo}{hIBL&o+(Cy*~XKmqS()Y=hfQLq>vd8x57A zOKd|<2P4-Hn4ytvyiNrnH^DBtZFZ1UxC3ZG`Kdxq?b$?L@7s3jpVb)C)v{X$9-7lO z^x=b`*KIw7Mz`^Ms4;pSXy`t~(svDNOrbz^%sAAH{w~aRM{yt!w+{oy1eU9Km=?9~ z3|OhIz<7~R_%J3nT96Mry@mG=lc8(cR{E`W^oB~0!q&QN&-W6IFBZ&Ax$|K;v4|_Q zt+{eBS2)O|AT*zCJ?9pM953#H_Oe-pI8>PbocC5f;lw!MPv zYk*jPG!+)nwzBC}h_S2jR4$vZ#;}M)XUUyKoGjO0v2G@Ij}^QAnssPw%Sg3RWADY$ zCwAs-+sC1CEo+)*YFtxo^gymUIwowx_#UZ;Mh=i>u4$g3k;lhjQX6_4<>Q6FOHE&F z#g1On8v@3Qi&5^26t*&Yn$Az=E-e*vMuo>TM|R>3OEcby2JGPQ)cffwH+|FPG9+)y zK4@bfNBqxYn_W(e|a%t2WfLgHY=( zUWG;tI2Ygv?pZ_?8^qhO5XM&CXt6Sm^Pk9Xx&lTvuEx&vV#=!!b=StjmeRIIdxjqo zk8PoI4fiebuvr;(eJ z3(~X9#TqG=a}yZ5Ag;ddAT*w3o`0%~r;H%04V1bqe_oWH^y-S^Q!650;lf2 zE}*Hc@mLpWxSSi$U)>ZuOCNWPi`TrH<+gF-Xo06K-ijIP=4oh^q~aLg^gKLYEq&`z z0l0Od+EmmdHL7~7P|>ryHNIt7cvMU8b3|iQ@dVq~#WodpX%KD`&KztzRZAMI975d}H;L zKwO-3__~c|j&6%3ZnnICig%}R1C$rz{VWcR7_di1eQApfM7evR_Yk7)+}KWI7aFMC zF^RsjY(qQDhZcQD+4e$vzC>fiiQ$F|qsSw;Wkg+2hu0n17L|>g^L%)94I*?8WP8&; zSD?|b*Ho!2Z<;|^qVm&r&wWlkVh>iE>JWXMZ$Jy(7A^Zh9SxA1P}YF87yO$(Biq(2j*C1xrtc48H1Ua4=z6uRS)O#b6Ga)WAz~ak zgouAth_rN2E2F zxoc}X8T?;`r|;TI#JVeL;oGLA2Yf!LTE%=KlDEeu|KDG+>AajGO}%C z`=de@W^S8SR@+Y4A6!J-A<&3&`W3Y=vdl0a4?>N;`)`>Q{kKNlGg_R;4GM#|k>}Bt zHSl8!&)X9l2*j;pZ+KkGnD%?(_D}Od7S39Q3Wx?h$=C2L?w*s9irAqr7zb)}CLqnt6dWuIR`YgJ{upGCY zDE&sF7IIYJQr?@#VW_W=VbN^*tAAZXYjEru8Y!S};EDOKB$8OwH>XFitz$CNz2GppKQtkWc~{xwp0SKHqjR*`4B1ceFV!I_Zu#rvg*{F5?Wg2*G)wBvQl3C z2iW1cYH5{UGcny(>4yw0J(f~_)kLhdN)`tAB z1sP*@)Lm*zukd99xtJVrv0peEEa&# z_x&w>;AdPkcWb6OEygl4`E)%dd*8ZAU)Vmuwods}4O4EBu#~MLF|`S}SKP1^Jl?DQ8eJU=Z``d|%FPMl$y zDVZCOJaXA~(LU~C_GE>EHZ^BQ=N@%@w(PfmEC4n7tiYz{{{s>=HzxLg>Xz`K>(aJ2 zdcOxt-Xo-~TU-yyj}|bN_@^UHMSs5?z5Wm|G`fw?_j%Ck7W1L8Y<YT(f1A4m;t$tw;mXEeuBzJ1GfkV*q1eB6DTki9~Ny$-LwfMM}$^RHKFJZT)fzDb6bARF3kUbOng7#hvi1H4k9;rfxsZlGUO!}8O% zqJKpVQ{3&3(=ZxTti|gd>4iqMNa?LLRCOslYs zlRX{fyFnrqp_03rF2OiPNy$~?E1c2K_yY36J8LgA@*)+Hp!n$${%gXz%Yu7-Aa3;4 z*98G9+f69%3+i#}j2@!+b#BpTe70Q8{EfMaJ}cb#mn1)ghSi{1d5RErabyid3$5ckmb z3Hwdlx|R=#m&LF1i7x%NKH=)WF;~&s#QK0$##*$AeFw>vv@QY8M0_i>KHvu61<1qR zS>-`kTdmJX_>tU_lj+l8hWN%)*t>ZLlXoYZF`>`dC$UsudLaHNp!#yeg_?K1=B zjnw2>J}7?le$&=xUloAwju$=w2+Mn0yPPtxWgBcfi-|gew&kHTt2{*SpKN*+iYgB@ zASE_m>O1Ms?aqcb>Bp-tUU)pq-K~Owr?z>T^De=Hd1WKa`l)C5at8EgU1-Z!)MM6N z*a+Qz0_J+_fR~qelT*`G=-1>fkJ#a%irOZxLDvPG9nebE9+itpT$oMdi#fs%RPr^$ zY>|0jJGGq<=!H^6swD9rScI-$TVFX|!}3}mRYxZNLyWL>ZF{qxbFozmYL+G2fORKd zz>T?>`bl-<5(bQf+(F6K&`j<8$R?&sJam=^%zoQba@i|Ie>9MzNwdnHd~{2FHti>uxu`H?y(JIG-B|PcJA}|} z(ju|Xk%)YTuNoz;L5}Aq4(*Qft^m~NJI=QC^|J#|yPI(GX2ZQS2)7w$aF)HkodTC9 zUpNh5a1QEw*hOu$SMNU%ZYJ`O1v$E<4%~qqDc5YiGUgG8?kP#7I zj@Z!S2SJbC&)aT@ZV~8s*$%bvBgI5%bc}DFqRPGvakGI44fxwe3)4-|>SLRyZSo?b zfVz*XTmFY`YqnW`%)}iPugP%HAo5Kq%g$22fyhferLuU!7Wrk4?cP$Kfl1AWO?fjH zFj944r0O;Bw7mKY7%aKZ%$mH&MC3+bGiuTzIZu~( z*(;}~^tM>t_DwU(cVRtV-Sj0io@Fg~0r7;%sDb3CLn`8KX-14Sjg9lX| zTSrF>Sbgyp(RvdRCiHk$P!-hQ)rBvqrB$voaW@xAyI~4rl*V3tT|wwNwP2p#7&EdQ z+1>%Ibuon{6OSbM863K-mY#Nv54TyeWLs-=dog{|>v(k&Z<%r0(-Jw$i^4JyA6+9leGFRlI0VtZDK+}qRzG1sHak39rSe9x6 zrtQ7*NfL96>j_-QQR=m&1)>Iv@6dgTO|nk3VEa3<(5=_9dOJbk4&V;ZD0alqhMTe9 zXqn|7uMlzKJ_aequ>x9fu5P0tJa;Ygu;Ub_SRBj#LY`I%1S(LWZRf?WCLVXnGsJw zY;TH>Xp9jyT+D4oujj$WDIXteVrFI73)-gIXs_k{&Qw6HH z0@}xWSC}(G_asgyptUstYs(nyWv5jbEl+OWxXw4!htA7}01otFmT`EPy!7su_ZX3< zsB>&vo}TiztdCc`;N1rv?ZuHF& zXuF|tS#E)+_DomDO8ck|!7=9*PUte)P&)!pqw7oB5OAgvgG4(EV*c`8J0{o?%cd}xMw8Qm)X)Y*q?}HG8;Dz_iP^S*}C!4h`i|Dpf9ptzA(|& z;XH}Y*O8-keDP^pIhNZ!J+V9`fAWOeacgrnIu66Lk_-IacyO-F>({{nr2NV`aL!OSo!~7ULU8CKP#2^2ve<<2qUYUu{ zhHtcGl#%?34-5|_)0zHQsxKKIP7fu+x68E`=%bUGEFRwGI16O98uHB|i`}|3e6aUW@e`#S{ zIaVkj7qgIIRhsUNjw5os$1%%Cqz>(}mSNz4H%KbX`85~1pUVH#hoyI%3)L@@cHF>a zz1LNFM&~+MD1uwrV5vOGO*NKyHm%Hdk4ualI>DTLo60NE+DUMAq4{f8h?bLLF>b^w zI?3Fa0>z1~b`zlHk6B^rPNnPeg${ZW$4Q_Ud-6&4SnV9E;$y{h3A>=#(wNvfG66i$ zvqIAi(1*r%Mr|${4-Kcvxv6HMt_?sv5vY!f+EdBq^L3SI7I!u!{D&Ct%t9Ty@lK=E zjd$8(wk`4h)$z{EY-nBy0aO3YrjNCccV<>*Ba8nKrcP7j~&UmMDZ5i)$ zkh)gZm)tp=Uem1`*+FNOwtJvw(}MZ%rXA7-;_zstvaeJYnym~J$M~D#c~C@KzkHTL zg!0}^J9=>&3#&3Cee>^GVcFLBXKE~AbF2@Vv{Jl1%nQ;c@Wj%_L5;#W;Y(_nxt!h@v)d19WMEd@T^q2AaSXWoYfMKo{ktb{ zo>{DpM=P7{2FR}z4o_@{QmKeCYI`a1IOi#SH9Mr~{3Pa`qmxsvK~nCP7(6upo)tgW zyQ@y`OpwdN$9(7mIGY*8>sr?sDxS^odM^%*%`AkLBik*M0|&_i&)iIKRCDbeU~;P=4pb?ax(5vwL!5e*Q30e9sO-KH-KVQb&^9`%t~o0kFdMSW`+gFDikFTN#}V88qaW8$F=VUJgUX1-pzWP-8bzPoxEaur zxySdTM!1nnYHK||@E{sv1$8VNMGIf6wi^}S_n_juPTek3oc0e+;agF_{F-{6zSjU7 zdv%tg8*G?W4cqSLey4_>s~SC|dfFOQrY+_EwuuZmjtgsS<9WOmDwpu2y;?UN4O?zo zfB7vFy{EFjm~~BZ8!&%^lv(Bh->hNAhviZ{j$3wRm`M|TwU^mOHfB}J>jQR4xikL_ z6FHfKF2>y69B!ar0cdgOzEsAo?9oDLViT^9`Uk48IkBw*zJ8FLM8*#2%{VXlniqSr z1RkI}&5e=!1C zpHoDVU)u=z1rtv`K=$-qk!O0AU9ZoZ*s#JH&~QRalx@f0b1tUtF5MlQjcdIVuJE`4 zqvCSZ>wg)z6S!fRE9>=|w{ne&p4I4Jn*)5d5vIFTirP!qR_33nLvFNI^G^K2mfUs@ z{Am|oyrq>Fm3cYL0Qnon0gEhu%0+|}(?nsj)`kJ&9%u2N^kX(GUjVkhn+V-2S$c{0dNGUC zk{%V$wjy|s2agJ6BG+a>?{FR@_Z|=0XdydYz|Om>%S5g?QQZ@{<=FcCch~T9lSwQJ z@G3Rx{M>flez%FIp0gX$VoqpgHLBWb@?9ntpC4tT)}#&X-(55=BU4h_v01dxEzx#b z_D&Z~SZXX3j6E?dJ<2#ZjVw2|Ug#ZueBX|G)Dv3Un&;mPY@CPJj!U4hD5~t*%KWw( zuDHQ5JiQy;J+}mLP9+~>Myu}teHc$eKk;@uc6Zb@ylvg}uQqIdR~%Z(ZR?)9{K#AT zQX3-gu-itsJ6%K`IOD8FZN2#$lTp#L>Zfe-e1`|qBURBy^MDx}*IRG(;JRlB-eqj~ z`V1KDcpK@>9z^r#AnK`C`Rq+QvEPFBJIx*gr^wMYf%gy~adt<_Vdlh28FAatdoSZp~?LRfq3G1EhQz zIQ{AxHeZ@l)n=gY*f}(Z14_$r;#D=od~pn=758!?@1zHu1M-c=Z5~9SA_rP(#`s{v zH-!&dPTMZ;KYLJ(o&)Wfd-;uu9Twkxrs&&$y9lLzrHe0b>w0DaR5#WuE@mP(%J@&z z(JP?NIflH#mY4c#aG@pKHs8F}hVAdfLnGVfoB!lT7V}LXo12RGvKnG>deUuMhj0#d ziyyIef)a6`%=W_mr5@Bq10?mVMdozCUO!K)USi}R%L~qW!s`PK+oEl&iJMJKY&6Th zx_+q`8q+d9ytpBzzuAOFv~c!CE+RIzJ)HFlR9H;giOEfVOn1B4m~@H*9RG4LY%Xl| zd!v~PvwkDq61KgOxuGGZzv+Z7rR6N}g+4^xaL)HW1PI+P+Q#DRT})Stcqx)bD_Rnf}%l5Y9YA>p~&1bMZ;1YJ&JlG_B zpEnQ5++OP5|?;}xaqM?CNJ4j17|95C18slZkB z$isW~S8xVhX!x`=Y^iN0hf^9G&l=JtWy~sKS#5ZwI=tv_8Ekz<(Z$0(O;#kf0OWOV zpD2Z{QQKL-q=6bM?x6unT8om+HX?Uz<6^Z0(yT72zPOwyO_YYpz4_84AAV%TZfnF{ZQBZScMYG< zYW$pz6(?ZKKI(3Bz}##F%0F7e7cV?G#E8DFRA9|Z`)5Xn7Jl_*o0VVgMfVRiwY7G{ zm4WR|LZ+4nd4=4ZHTecvgAub@k=Xjz%lx?BIa9<_Lfcu@b6n*9L2(W&mfA3(eF)b8 zyBcD`e0Ee!%Z}i)H70M_8nsFzS4K^mf6uB`ZF_N-24K=oO(aZ9kGa!>DQ5c-rN?&v zXom+aSKf<97um`b)I3j>inyj2`9#iA((NvGygyy)DNG1c6_NNFu!iJK^lciA%L>&- ze2fh}MUpHt-^z3@1fD!&Q zlzUj?;{uRiyI955T|)^i$udM)++csdL)^&~n zn~b4(Z`)r@7&&my?$sUch+~jN%C;J)lxV4C0(TK{DTws%?+wmsYCt6R(*U|*z&cVX_{OvHY~hP&Co^-t9O9e3FB+Bm++z%_W? z?46K+SqFD?V*xqfQaI{L*tSCGH*uT3_hXyI_L;~SrE48_M7g%y-Rt#YHoJZUW(KQK zzdah6*XUA#op!`t#a7cB%^cJVdDQj4WvAzvLC6$tacR<9?657{c3brsHtgo?d{|ob z#WwVa9Jk$^xX6R+HtR!(_;e4VyOkRe(Y8js&_%>mO*H|G7gMl4ksA}wYrR*X!_R*# z^S%ojVmAfVvR2$+qN;hmZ^<9NlmYFQ_ixvmc(JQ74X89w78ka)+D@X@nTTQ=7&R(4 z8@yda=yKX5>3k1rZK~BY?0`Dud)~Ey*jTyxud;-`V8e3RR^q3bsK#6hyDqZ3@-Biym)Lfmac%&%cQPw& zIU8j*cZMVH_nhO&Lpsr{a@$(f**?s_XL--^U?=}B_D(X3R_eUr)1t;)7Pu8gNa(OCO z7#GT7YO~y^yGyop=t*95-Hv^mr(x^X){al~A=b*N!K0oB*v?^22u5cYqV^lSlY_9O zw^@HZ-iNO)kFinJcc405C-d0=c;_|6XqXkCTKE%f1C0?|;t?I}-PL`5(YHV@sB3;5O zQQxF5bV)63=cz8*7>xhnQd+vySG$ttTRw(wwE?SE-UvM0M9!%TsAKBJDQ|($SW?87 zb+)tfrx^Ij-1wn8j|f;}@c!rGgXJM=&09`m78%(7bH>06fuSY9rjK)>CkI0DrqPu_ z1olJIth~X1OLN{%Eo>XG<>Ro~=K~k%qUFPOr(wat^3j}KU`uZ>zd;Vt3EdcdQ`XS3 zV0%?FuK_aN5~*$=GIGG}MOr$TYakoqm&g~d)bPG;Fs$s^>U>UPbTvH;$Utb$+vYGG zW)9McW|rF`Y3*LrzhimZOyuO>tGw*%GZZiAjKQf!lgr!fnpvpXp#B2(Suvfaw=^Ys+1 zW)1xVD21Y?+kVDrN`eL}l*t8pt!L=>)rpO@^)E|N|BaKa=8?5`g8$$2WSp<~=dx6I#iC>Kj zp{qPw?7{{$uZ8EW?smsmT4`N<{^|`IR;^v%?e2=u74EB6t>a!@_u322mzR{Jr2Nmx zFS_)nm%EbUtb|h2Y;|u==bI}Ae~;xX>_oWS?&*o;DIKnBDK(pWKcZ)o;b;P0d=?Bk z&UX>k{4gA{cwT>OQ_n~Or@_4!E*nT~>r1Blmw8=>61ZVJ5KArVnu7!m;QKaw^G@3m zrq_4juCd(SUD@e!Va58D=WkfKYS-@Rd||AztB~Idg%GUJ~m|X9i>GOtL2(%k&Km zrjtX7Ol+{HHxYBXRp54O;DMeUnckkk{_S{Pum$Ir5@3!sPJgOzIFs(#?5tA3=Uan| zyk|BgdN!w=a}XotFF|~$VFAupVLb)#hfSrC`JTkkU@Wt3C^0e+b526Ee*#3i(>IjN zY>OpR@u9)YK+h%o)$N=N?;RoseIv<4CY4I)Ab9JzcQvX~`pjVK^B}#RmI$V;2l%!O1jHds*bdllP+$YTZ$H7TT4eK)%zZAR|K@T8r>}!Pxy@J&attgeLTvh}oGc);O32{$DTsG%qZmKYv z%~kqJH#8i}px-3xSS6koVblp*%*zl# zNSE$?oy^Z4;*e<1R>Q zCX+2!b2K z2@N7qlP4xcY&B%?Cv(nxBiGD`=Cw#z2hU(q27fXi_2@_uU=`krGA4%mTp>7uBB82^ z)&457U-uNKzN6qqDPqqbOQkZKdIsW&oua_Z7HdD27C*_oOun>xdR#Db3cf;^m(yZdC5{%5lGSNYNA4ig(ZsX+4aXQw zaM$#G?>Owy^hY0l-A6FD7Vc}ycf?mbzI)NSn|q%)x_jP(j&n{s(`mmWzij!nf4t!M zCyrlo)P1|Z?KsaD?*I0tyZT=^r{k}^+4b)z{&@YU<9tfEZyL-V|C1e$Kkcxo6MuN! z`A>Y*agM~wtF!H8pS$R~vwl~2*B9|BJtP z^J7V9)EDkU?|=K?51xEi{CDqo^=lTs^Yk}3&i@McqZg0Gzxb?2CeJzj_M4x#{~doo zV?^zAwq5h(TT{P(`^DewIPv?NHk^IyjN{xY+;4j5)mxAL<+jO_|7q@)6>s`e+;P4o z+}jW98u{Ye+B$x9!+kdG4H$O+4CIdzrp|a!_UcHxNE9hnkbJ>c455FRl3f)dc(T2cVS^L zR@ztTx-ws_>{`8QSH74nOpoR8=gL(pSD(LX-5RVmrqNaGs&YcHa!>SxD!49MoM=W$ zSsdxG7n{sYW~cUND$PuDU!^*hFEukokzgiUDvswPmws~BzDjpBJC&b`n8OMxH8;l8 z@>65E@rbDjLD97W4mPWzCxvC1h?!GG-91{#RV!l=6B8w^?62(NWS|*oaXe^7IxhE{ zm0&a4ftE5%bIavYRozsX1w+?*g;>%eI=185Kpz^G29>XKve9{^D zw@Bj#$9cxV^Tmm)QYs{CL}@1SLzoGw)JyZ2Xf8DDZ<50{^dRhs8G9ZR2bREM(& zza0mQq&zJ7fVXse3f$&6le@JWdEAceoWn&}hUcb8;~83AdGy>3IY>Hlk7nG+!@24w zAY%s(cjg_<`C=!&zs5X^^&w;fb>PYm{ytunm$PupE{D02-BT*SxU+MBGKr||M;hgu zqvxtVnY^^gWyrW=^<$zeoFyNP@A1gxJjfw)OPM=O&=JL;5^0U^~<42V=~4&Qus@`SN!Hc#g+#B_u zJq!=I>{apjw@3qWqRTY!FB1&EMBNTgBO>;vA0lg0Vwjc*C|km#MHB6;_v@a>IHH=G{DJ zRK?w`;_C9SEJ5WNQ*m-Cj>$8|@#e3?nNZ>PsPL3`?xtvYzoO;A8p7S*1e^=GDZgx_*-1%qPDL+rywvyR%oNvrmOx z)^Lu3-G7dG)k$~GuwRA0PmQ56U)9M>1)IhHE$0k$n}d^s%w)c3x-FpFp3-z#%`F&i zu?ROdy5Df?6mBI?+#~6>KR0T|J(h0!ym3zy;k<5Lbjw%9uyc-aX6{iq;%k2{%Ar5Y z;cu3+`Qy4;!+<}Wqwrki`S>1#46shF5qYV}$aVN_j?MIEIMyNS`33YxUvs@1uDw&# z3*<+S=iI9^V9kTDo1o1ix9Q#FcW;Y>1_kmbIYH9$cAwIpZRqdY&rzP~B_F94AMRue}+lfXhObh=abS{Z_=)AIOzT zx*lh+S#vp6)vRY8q`VT}Gm(KXd1rkv@3(pKZm$pGaX*%LUBJ`*2>S;1o&J90c7$Uc zzJ_#$btd}?%9=N9yYo5~_Vp?(`##QlI>2Y9@dmo1e)#ty6$bn~s=?aMTydG3^>s@H z!_$?6Hyik;0$=yNZ&mJ>sXplr{KmXqo%T$L6|LD1VLq??CU<9W?;tZddbRc^udtp` z{)H^|xyEu+Jdu6u0Lz4Ox8Et!Cx*Da_BWS_b#@oh;(FyLn1t&(n~UFUKi;;~;k*s* z3-%#gP_4CRM1BhrP8@}t)?_pA8yV>o`a-vhq1nT9SO z*K;f*aYS5^Zin+>#zB5RqT-t2?}eK`{Kr)IkE`&yZRq(o(`Foqg7XO#_8}FPI2^ml z7mdT;jQdG^8CT8;I-F0bxSv*WHIAO|m^hzRVgE~oB|q8cwW~JxdDp#N@ND7rvdmv} z-Q|2mhyQYb`&V3dq@&6~tSMmW_WpG@jC9v&e$#O0Ns8xr;g0H}IQ0nnD;#){p5A{{N&FuCoh1I{wcB+<&3mHUGbb-&2Ukw59yDJHKKW zr2T6ZmONqFx-5?bxIbER7kT~;eluP2hk5=z{gLj0TDVU3Z932Yt=x6qzK7q8Yv%0_ zDvdw-($IN(qUJ90@B{p2e6gW`Jp4(;|G!$e&Sgd({-WG<9=?FzjBDoMNtFgOr~3q^ zq4UsQa~FB|5yCURp3}^sKlm`W7OwL&BM29&u%X7vEw#(h|Ae zU16V~(hJzLHTmaW{m=|?Z!~BhmF7vl@|=v{{_>o{Fep!#3cJvmyL1`kNRCVD?>6#U z{(W-$V+S^=dBrls!Pzuaw`ya7j@TnTO}G!^P#TwWU=~2nC6-HfX-^6Dw@%F;P8aS> zi|eF|ri(==tQ=cW9i4cF;F`w;WoydZw01-w)*xpf4`<^0%A|t}IdcD(e88=S!stZB z;odL9(4NdnXCCLH^UlWa2Ki0<^UHb7IV$~Ik^Y08^kMLcs-nOTVjLyX94?g#l9$Ke zH!j%~a-+rRsm;9XCf$#R`(lrKAFYBE`f#GQdo+8c<~i%T(@A1S7e;p##)*h~q|*a! z@-S=#X!XcIl<`#f9qVk$7jaT?jr7$iiu|!0Ct`-cJ^<$z?N7sR{pkw4!c-@zwd+l& zPx6NspveChgFlo<@BoA3DEp4JZhSd! zJOaOUTW1ScM}OpHy$YxM1%_k(YGK=*3sl$(RaiaOVOZv$`L2cU;I&+l_Qj;gx0$xt zMmb_UQ-$5=3#;c*OjpjK+MQk%woirSxO^2VNY684%Dr)4>s}FKh3OxPUu~V65m%?P zMWu7N({WT6(qD!zh9I=1j-xnU>)*?itY3ogxGjOh7%9J7#qaH<@|c6QsccUPxOLXI z|GM_HtqE&WbtH!}@^&RoOVnP(0P--1FV7fI7I6+lH_nR5Gb~HmhsAHYF~6EkLca75 z!86J=FWxb|;}Dj0LEdN{rr@sSH|_o{=TSP$HrKtqbG!Sul-D?Zv+lc)CR5!>f5_{l zZn$<)XBvZbp#Sbtb6NJm^<%ESNQYaF>qNOs2PF^fof(y0V_9{IT zQzkzq!j2-W#~lZ<)7h#+9^fpeeK-8|=fv6-quCz>D>AJUfQif#sHZjN5VT#IK_e%`tmA7_h zieZ3%m79iK-)emBweWAf_s@E%AS@}r^e3&tjpgFs^YL$5rMp+9%RXgF#c7+vJxh5u z#_(o(>;oI6w_l}qjgj6}D!ujv4(2wJzj}XxYn=ILPtRBJu2u0G?+cn&twpz4yL!EG zW5AidzSJ$dS#c{@gzZ?`4*A7}aB&$tKG>HS>5n;dYg2Bq9n$R?&U~>a#ynq-{585l zj?}lWZQubYG3R+9;!(!F(JuPBqh5f&mmxi{@xb+}jnWOb&~TYNBTmglBUAg@^qV97 z#2v(O%rf-6gK002e&dtaGSco$f3b9j!oNy6tL7v(B0Tz1;#9<)ZeWn#xNFdUlgI<} z!Fh|F-|TZ=gzzla0hCLR!yHqI&97)f_&p!1%9|06GW-(K8Pl(}$8wAEW4IaPZR`)wifPpnrdtP_Ft48=?0R!KHVf%?GD82gd5$3 z+^dHf-Zsqi_~3)QlVg5+C)_1EU46C1V*OWu0zwT(>Rx3EWT7WAy@OXnY)(_slw7tlUIM)!#5b3-F>y zbT+Erpj)T2C$?9uGs!=W<^P5}>Ccg#%lP&DYepNIp4^4gz1sCP%E3F3hj-$;78&vP zL(F%Lm)LVA4^by~lg>C|PU6(v1@pXiVnIxYja=6>-Uo4~Z~8eE{;t5V5KjgGArb4%{M@!l8Q#2r5^%MT!IryI6g+l@~U3#yz&!p*Pl+8PxX0V86HAdmf<&uz&x?u zb)G(nzqLG2?qvSt86W4N8?kuReI#@88HRxzeb$ZF*4c%0b$XxkrNQ_*4Sg2!1(n7Z zRao6O>oZ7(XIR}2u!sDziu16Fqx%h=M;)HOxhwuv75-}~JkyeXwK9A|`LR6oW7+-b zehXo0aXXxEt8~Ak;`;N>F+k^qe>3mjQ*pkp;+Pm_c%Anjs_;K*5T0o>PK`Gm&QDbM zpQ`YBZNl_)SY7s?tFXUNVFSk1+LJFaEVw_FT(@`r%7;aqU&F1IuXg7*3hNOSw(%Ym z)0T3JKiu>mWt$fdQQU?EPKj7sc`?N!eO2%?l>QZ zG&Ax_0WyWxIGHItD5;KTO3*?8n}w9qGXld_vZKXXP~1lpX`aY5_m1yVDHWJTfL|qp zIcb336#dZGdD4`K1>SvZ;LhY~SSv+7D#cnxYJTVX{1{WGsp9EqSu>A5KTp|sFE*3e zThS34Ny)`!S;C*M&0PK0m*_?p}Ufta+j%8TID#6ZzLz zn?$^Ex4L!Sz3yHtuOD;%m|NG%Pv^pw505*OGxEo~tzdo8%>?{({&>f;=2w#`y1P*f z{GBqqo0Kk(!cgws@_7AZd33y#2R|ctr~S4`zpM*pl*#Akkqh2MMVWNGDGM)z{Ayn0 zWV|}wdfXLnbsXL+-CL1SD&UjuJ9vjDlNsgfz=@piopTxQ?XNc4;(Hi2yJs&ZC^x?tNl}*>L7SWYI-d!;8+%~G+RTQ`XanMJb|I))9%hsdJ>8W@zU(NG$HK)&NW5vCB z7(m6ETjt?H5iXUh>Hz6IWr*q&4~6x(c(Ff>=ZLsAeo9OuEzfa%E!;+bdOR}Tp0DoV zu`$Z5^H!Iham=stCd2gSaJ*95ugjndX~@o1z|{H+GO=fk^d!XIzNm*wm0vt1RDNVe z22;bazWAm%6oTly_`@WIhK8w{$jq-ljJq8UImMm&hFGzYxTw#S0sg6xUZK_qx+tjY zWN;^U>yh5U!b25Ga$Bt5jiLE9p~{+qt|aOT@D$eIeO)-Wz>m4|`&p!wsb=wPx;Ex; zU6L7h*EX&U^`ei!j)jDCr-pEK2$ZtBR8T0g9pyjHABz{($wh9lUkVH*(l0 zT;VUP;*+=*w0-UD!pgeC8MUY@ysz}@T+^x%sBujwW7BUZso-iSzR$%&JUwsVnIw#4 zPmWdxa+M11LHE?!*=vmY&Qu(?O>%DrePJ<+#V*%P$Kf~EO?RudBeeCnm$+QLYFpx) zx2Ur}^ZJ+TKRA>eK$j``+wRfm1s#xPI z?=M3|1Wyj!xdYGYU|1XW8la7-vL!c)`%=2@c#ey9ioq~3TB*kPVx9Y70-tNtahMxr zIdyoxJCVy&?qR4ltisB&J5%s12o^vA4IOQFa0(jy$mzIiZ zPi0d4PUQCH3hw;}$AP`@>73Y~Wgk}*VHl75L;8w^*kjT^#6A=IEoz+N-e|sEuH9$w zH)T-wRosKaP*BEm5pfQq-CqKCahReAMPjXa0=(-PH~Ne-2Vqzq zUEV(6gJ)t+q|>p;CA#ifJ%~PFLTqe$=J?#>*6oFTJ#kM`d_1Q^&xxS9EIvSuXkxCB zi9=Zw6hNtQ-0QcdyEmRrVip`vVu~wd7Gt(IOgxc+ve9HuQl^11)$0!>QBWKvG>*nM z42*+Ym zHK6X3WQ8&}1Mw{x87H}|N9Cj4@%qQM)ch9s{CbgYUvC0xz;xQ8?4k@A!B6R~cqQG} zt%aPZ`jWho?wgWB16Vi=^bA7YB>yGPBu_G4|4cHL?x9l3;o<(F0sN(TL0Qp!6q?ka zk`j6;`(sH+jFQVPqa3lG^d*_}mXX1&8Nnp-)0rdq3r(OYQ4cz8={^j3Vv}GUItP;I zgK(yUN-po>Wt&q#vE3TF69vp)SKE4uVH&!%txoW)dX&g+CZ&aH~e%@)Ud#-0+Jb9&> z1=Z#T^Bar{dS{;Xqx*j9WvH7Q$lYTxE^Su*Df?FAev6o|@qARwsi_|fb;mF<6<*KZ zUeEN!%SD+*_S1UIuKb$1P0r1mAQT zym!KR-X=8%)?=qiW3q(#l^#2n2_AX(4cxh(!DGIq&y3~A$CZTWG=EXcgPUe!-qz+4 zI-hR6kIMY(G{1o~Q7kbp()qNei8-oHlV{vAE?5Hj)bjIo=3ng}k3tVI=TlAf zpk8!7`0f#N4Y7_{rq-Md^nCN85LJEi9fgo*gu$9csPWrmsPU_5>E4#FOpg}2Qq^f3 zn02jQ3-x{5`gZlk2X|!)D`Pui$irhQtrbIKT`T(0XJgRrT9Himt?pWJ>H4k}iGH{b z@V|b!uufwh(1#gC*NV6$kBxnyZoILFT26PZD3%JPiBi{!?Q6SM>>FFV8Y>Y_G`s2{HjQlWnwZ!q>xT5tJA|U4B84(w{a|fMARhgM! z4^)i84N8ZH(nB2QQ!03Tc-y*K%>JS6DQMOnjw`1WRBa9p#)!D=Z>$D&Q+HW}Bzn?` zflYn8Y$;JT=e0?BQEDEyD>aW>52ohPmNicz7zQ@&NcC^swRYvYm8&)1cTG>uI)xx@ zlk(b8l)S!%_ah9vdXS%Oz#SUPdtYmEE zN-E~}D%t0nSnn-a+R!d)@?W)bYHT;cL*LfXbDjS{PVd9_L->9e-w)#Z*a2;dvdO!GvuFZL`5+$-!f@VXZXiCT%wS5jGoscscK;$d8$Sx-j?6wAnBR zrD&$jhP#lzi9>6%VWI*>tQhL+8Se%FLU%Vqq!luUQ_`MY0!|?U;u4S`m?e*5vQmzkE$hEd81 z6ve_V+wr(vrMY(F( zY>@9k?tr}DWKJ!jS~eT>*v5G&znrtz=Ibq+4P48RAJoCYdHcuM-(Wt$`Ax8tu31kW4l^58?X*shW6C5*}&H`Et?H|pGMuIEt?H?`(@40ajUMUz)qJmU&OuB zS74s^N_<;38(KCSS~eTTO8Y7YIp1p8Y;f%fwrn;`6ghrzj{5-m(3Z^x?(?^7Ht2g8 zyi39J4D(z=-jQnAY~buy^M^b!&*fS+8(KCSW_@42vcIy6I`44Vn)BI~%?3jQAa9k_ ze&V!1-ot6xY{&>5^;$2_i8u$P9SE&#UhDGlx_kBLD_aPzhC|cd!MP&6nmq@`)M@%` zD70)gpzm+lY`{*Clo_qO%42uH>({c`(6ZT3(Q;OrDe0h zaWsEgHXB+t8&Y}sspqD81eOl*rKQ}Lm}jIcA2 zS%b9&b=9_PHneOuV4>Nv*&yB;%X@V#n+@8AjcZRq8)guFMjPyN@5_}(D!FpYW`mlG zv}`tDE|PEAY*1sW*KR_~W<$$nL(67E%Vq-}LbYr*IF7KH(6ZU!vESIT*`T)4TQ(aq zsg}(K8h~ioY%mQ!v}`u)^4n}UzJbjKsboLPH;dZlir*F}k`Z=U{z2?D(9(hT!)Mv& zbziWGb{h0&^}*~ltY5u$tq5GR*HFzzx7Sd`oaRH`>^U2q&R)~*1ikyW!3Km>h~b82 zIArNOW$_h8VJ=)YklNOlO!qJIx(+4!g~hvNT`c~#p%W}Pr9lLy@@a2PvfD^#3W+A3S6g3sPu**S zcfk@qMH+EEY2V?U2tLeb?1@;<;K*=hb8={8SY-S4$O6qDG6z~=_b}{0C2_fD!4h7E zb`8bD0AhbELvvDY%zQCJMu^{h5VtS8XS56k9ErGZBc?7L-hHowTCN34UW63$Q<=$% z;>sepG3It!7dQz&Rv;WHa!KEtNG%D5FC1EO5@|;?Ng8*YnWChGiec-_XBxdPzcp4Cc&TNV&(y^ov z7{32V49l{xYEIK7gB4qfI2*JprK$8#k|sG5TX5%O!4lS#>&FU)JLBA_3X_Tt3@2i) zasy!l;)U?@2}uSPVi7LQgGDsFbbK%-nB0Y|jEJ^ICbKipVj*%)@7|#yHd(x6TCn7L zh3e{3P%IWK;_^Lnzd$PB5V?^XD{UF3zW^c_si zka98(=+2g8EH#oyL)lql#tB?bVA%VB!A#lhjfAKYmxXdG)onMYAnaY@us&O^>YAm} z+|1PU?m|B695evC-K)r?_;6+*rDUK^ekowgVn$gl2Lsqdj{-EJ#6%I;PqPwLKh3^< z1lEB?XUhb$sw#wP4+=1un~>bqKU+2+S~eis+V5!DfWRA~mJNvLD(_wWlg-e5-?9Nw zoM?s}f|d=4S-)v<<+o)6Vm1$Qv8z(#`=7|BGP2eEQ&DYh9K;61e_}d>2@rI;Hq@;K z`{C2$QsI~QbEDQjjKz+l^&fHqD)n}?ceX2cn|%bW5VVvpVs%}S$qUN~J|Cb_N7x*d zChm+cgT;wGO)l9m&Fz$L8Rt6l7#{IxJ6q;arE!DfJfm?rP4t!xh{-N2 z@pF~XW_46Q0nry{;ZFtsJMsN>o2(BZ8>j=;jgTMw4Lia@Cy&(mnHetN`uCnvVGO%2 z2Pl(>+I}R`(4RS24>yv@OVxgO^fp&2=eUa5r^jmfMvZHXqwzf+8JPz;WPT`fr$P4k zITn5_*KwpXHQnb&;CGOXffH05zUxwLX(`I<>Kvtvvt_kxK-9PK6^eI!zee6^-MWo= z-Le5e9{Kyvjo@9Q{qy!+pwtYbRoCZtRC~n)2DQ0ny%h0y+rFTEL#I$v5k~}KpY#my|4e*e znWTMJxgW|l-?9PGH(Ds{9?f3avH_uOsT=`0ISOBnwbWV2k>vvXW?yz8=}c`elwps- z_jr73;X9m*7!KhtCPjENZO$`lVcVT&s<0brERRM;G@rm zV#>X-y&d<87&~qK1HB1tWVdy0MqHgv%LWAbjkA^7wYoZ8akmJJB4PyJOGZ*ZeLGhNK=({6H(o{|^aah|Z!nFozi&b-?ZwgLar9*$xp z;~4!Kgr&U;-YZzD=Kge(ShYJ4uM=)`XWIJlh8*@q22^@{6vFi6nBU&XXCQJ6ZtHvj z{?=pr8(sJI&KuR=-0OCnnRbby|2Hp_i}iHvayc+L=D$V7*Jpjp5S8Dz!ktvlC+8#Q zcQ7pC+^OQ6gS!-mAq@BZ7?$%-leTO?%;J2jWdovR1A>|oE1A(kzGVYKu4y}tno@nr z;ZDm2gzlTQjRW5O(Pu64-ek)L1ZTgRKjaC=Ey=O=31q8<||Uu{d%s``np5t)OU=H2z3ej|%N4Lq+SPuI$v^RsKplcIu#X`QQ z_Uq`jkZ#j>X{hYd&}}i@CTecP?W9|oz%o6aha5>azROi^JbyZtZlgSImwSSA>!RDF z*X=C2Wu+T=vIrIPdxERaD){5orH3cYuxTbW?t3fRxfXt> z4DTkT%j324;4P2WuVn+GWdounXWEuQ%LWA1HH?nIro-xWn8WDy`A4)jY4bvO9KfA0 zq0340tz`qEWdovR146b5z9VSafRJy{s4$23L>^ip-c^V`<8AoevH{Uhsa4Ac1m@FU zgM2_4Q8A0fF8AG!!*A|i+>JFqb$NR=HfeoXnJw|nTO9hgc{Dn?{)0owfu01$G=^z! z940Ze-4Xr=(FJD<(>F9SnC85<*O@PDvU3k4gLdFiSfsPX<^1-w4ZX1G(Xs)7`da9; zY(NyN z`*3n-$4=3ow0qpCkxoWpKhja}CnKW$(|?ZZKQy#89uw)!^}1aG#YH0QJlA~$n!yH= zv1g6Mpa)U-&DVZPF=qxS>7hPow$e6(RGIo?+v0r^=P(^7HrO}R550;i>_Y9n3727e z`rQ7C`Ca7kqgu1Uo^*U0RKE>npa3|@evRQ48{vkjNKLsvMZ0f}?UY=S;SV?6C5J>h zPxZL>q*B}aWi*vuX9Is3U8cLl^siNoNPB6WpNz@;AL05XdozjHwpc>)`AF>!-M+~_ zYIc*nJW9J8c|W@57Gr%tTm_qo;m-*T{7wFx==EoLJn>Iz;BUr1+4P6j!NFMn@JMeW-sh{|Q*7Z3-gKGa z`r^Y|V#!P*o>I+F*6FE1VT^Q^nPFm^`>8iCrrOGBrXTpoCk8b?mBkdyaM= zW;>w^x1oi^Sc;L|IpO{M-bE-%9N_I3%;B@_wFnPo`7DnN%z# zY?nd9pYmVj^-m{bJp-AMWL*2N_V}k!Gbzz^uswEbKY@tElkCPaqV)7%qy0TTvixhc z-#|}1k=c|S8j$sQzQ?_1B)vttuhZ_mu^u)-roUdhrF)W_AxL!FpxvmX_R<(S+*ooT zj{XpeIO%_Z_U{`S-Z?y!N^gqC68$OR=T&9<81#b7KkDf?&*5C~`IrmV^lggypZk+@ zKIjk;>m=v}@$1Ph_Pl;Y#nt5#*w@qri=bn5oe zrj;W1q;?MW)nvb2yY~&D|LsfbXq3SY?bkn;$_%43HTsJ=+HVV#$L`F;cE)<44pqwM zT`JuKTrE5M+P&4SP`lAJzu-0hGVh*zAdr7twPopXm_1475*^SeQ0PC zH99MIukvTvHh9*_w(&~HaZS~$XdCWNy&j@ESjzjGadv%9hvX}iM0@Q!#i0{4q33Tt zzct;xar92l8i5Ate%U8LiL^gH#--k5Pg14<<<4GzOt+wPRA@ktZ^o#o`r=N1I5mC3 zAd^HN0j-`2Z-)2Ud}*Rf?AzKO>mAwL-;?eUyq$w^)TKQTAE2gKpv>&TlX3_L)AKYm(x&j zJcQ;ll*lM$`l{auqf4J{VwQUJMH`vD68*;xT#B(AU61ImUW>9D3c>42AT@#uW*#({ z?%$}Eo&3Dh*fYJJ{G7a!mqVbx;jsgHyrsUly0KCnM6-VMn7Y0}xQaY^7GvsWHKuZI zVBC!r^N@$(C-&o}_Gc=zhu%5+Oi+D{U6wV)JHHbeH7o1;kylM)Q^L9t%xt{yKvWVxinE8o$T6V=-~7eHRxSA z9+j7?%eq#i`?^-_z}RxKTKleCxr=Mvz12cxSIy|p-)ckZL&)ie@%;q858?YDzKmJ%Wq$1T%jUE_`6TsKY#h&xR#&cC^@=uUM!KvVgKEv{-W--Dn6D#D+baI)`6#~;?`Qyni zy7cH3?M^#0i;tOq{$}pe%8$RrXJIG8<#ta`EEi><+YZ>Fx&h(7dxZ=#jK4QFup#xi zkv8Yg`(zmXzYK>h3he-T1ungQ`tx4kjn2l8t*qv*t}dS}>Y#sJ?>OB*YI9Z{M@~A< z_YkGa8NPgFS*Wx#+c7pL6%%|}v0pB-(MQfZ*m=)GOjB_S_l5Wruoi?4v3|i4%SY}z;$%OT1f&RmB zVB=(=bK#OdKl$X7M?3AXim}*CzKK7VICFK%*+Oo#I6Vd1Ad8kTD~r);v!!AY1z)se zF&wJ+@+CL=?A+D3!oFw;X1U_JJvB`8H%rQ^;DuaK{5}?cpN3>$>qI2`4U~sXZmd+y z35O@(zzE`s_(@3Nhj8cuXUjS0jVR&BJ2#d=>f=x*%zXV4-iISWA^i;hJe9yC-qYoZ zS-NL{K2hC+`{;|7{0qGAL0h9ey>aI#xV#uH3y^|v!8Q3xRs{S#oLRmifX848Y0;AJ zs+7%~sFaU}H#)>8k&IKROy$K%+jIr5{}wIzDcq;vLC(Q28!$UGgPj3{Kao%6_)u`s zlIJ2Qxsk76Z0Noc^*j$;yI{%d+1l{gfsFHaoRWsmvFi5RZg++V{}{fVDjK~gm%j&n6TWkl`#;ZdW+=0_fvyC773le(uLivs^mfo;(AR;c zLEixSY*6ew&9GbichKuV-v#<&(07CW3+O$d?*e@f=zBrm3;KT0_kn%_^j^>}gZ>BT zk3sJP{RQazK_3CVAM{V44}dNLYd#3t3Hl*WDwqB+=n0^o0PO;O2(%mYlc1YHKLwft z{S4?n(EkFx9`tjdF9rPq=-r@S0=*aX%b*_yeHio$pkD#~3h38Ce*pRo(BFW56BPV) zz6E*$==VT3g8m3}FX+!euLb=%=#8Mi0DT$gFG1f7`YX`4gZ>)ygP@OqJ`DO>(653% z3i@r(-+}%V^!K2D06hTuKcJ6+{sr{EL6>3>eH`>e&_95#2K`^qZJ>VveKly?TxaI9 zpmRZg209P)NznPA$3w&xfIba$G3W^B5>V;|!KICv8$gc+eJkkkpx*&K5!8X~oC5k( z&{IK=0bK@q66kW!ji6_MZUQ|MbO`h;(91#32F-z<3wjmk(?FjOx(f6b(AA)?1nma> z2dOheU=nbG( zfZhmt3+RhLUk-XR=s$zL6!d=3mxF!}^q)Z=1$_f3d$%`%c7whZv=8(S&>_&fKzD%t zD`+0{ouK^)IZkmhFs5}ui-$(&zDfH<;Gb5EVMWO zSkE}i5tekFj%bYam0WR5jP)~2QGJlE{v5ioKIBM#FUE`6jN}}{UW+b4%}QJy`xWyg8Ktq4Vj z>YjWh!&2rPJwDICnV&x+3mk91BY!$yQNIrWkDp`Ic>PIce!$JM?X$E!~6P~b3x~Tc7x6Zy#RC`Xae*w&=lxXKr^6+gWdwV6!ev# zM}WQ_^hnSGEr2cuodi7>vM0ev3m z&7jW*eL3j0ptpiv2l`sj8PK89_H`A7>8j_!guA7_)mP=;>CP5mCN?Z$v4+3+RI00 zmWtNT9__D~Yoh6Mw$4t1i-u+RB8@c6;D~m`R3O20>&Ik$xLOu{0&!K)-u=~Ficdz3 zwy_c3`osLPZJ=n*TIF~**vK-x8x&Jp=N?cd3AvtOx!w!v=T#Tn`C%^k@$>4{a9i(N z*LA^-I49$KUI4H9xu&r5OLxq3(PM}u2zxc=gA4>`dazz%Cq!nED}&RMaEcXjlZq*i z!EqzL`qPC!{5-i2WoBM6*Pdb8_k$h<`TYwq;U5s+P;-Kh@YSh=KRVhixE7lkJrfrjd1ogq+9|dLod<^t@(2s-u9P~lZ zM?fC}?Lhobf-VOA6zJigp8@51=yRawf_@(K63{P#?gIT1=w+Y}gHC~d1+)zMHP9PC zzYcm6=r=)c2mKc48$mI=&D;U{UC_HgzX$4yuAX(;&_J(onQ)1XZxsoZfvC(hW~@diM|_zJgALF__;{E$V(aQiqW+ z7R+Yx5F+~Ldu)_nMZlX8yS`C!Hs`i1=I|bcUE9au+|aj=L#)psO(f}=GIG*)E8J=P zWlyP6rA{ogJZx7XjWi}hK0#|=9w-&u8chp#p8TepA zCX=C~o|Ims+QvtbLrzNB^7(nc`n?U2_|cQpN7e6ND1WRz#fOtp#=jFQO@4IvSE&Z~ zI~D#6tjze);oqWu&qsVYa6bm$A94UvAGUM$dHeDGs&fAk`V#g5KL+KV(@#Lxf&LUU z4*FZr6e#AQGtU7 zy$P6|MU}^0eY=x1w*z*NK)?V^2&;hE2mwLU>Fy*Ao$jWWBw+N?Ytp7SddY&@ML`i! z8AN2zQ5705` zojP^u)V`fM9rz63bAU$!mjSi*vJ$uscqXtNxEk08JR3L#JO{W7NUqr!@%g}i;CmhL z9l!?Q2Z4>i&j6XiQ0A356%i4@~o@#;D z0gnRS06ZN?|CB!$$Wm#36Y!sa+ko!`jsgD}_;TR8fmZ`r-^;%j_^-gbfwu$i1%3$l z5bz_wd6an8|MJfQeiV2X@MA!&`7n>kUjY0h@P)uTfn&hCftLgS3-~7B7l1bd+1kl} z3ivhP7lHQx?+1Pz_){S3iTS?(zXjA<&bNWj0Nw{Y68IqS-N2s%KMedO@Gjs(z^?*- z1$+$n8{kpYyx##g0Dlj>5cmh+An;GX>wtd--U|E+@RPv*0e%z6d@TPxAXPU1dtfE- zufQtcJl06&02ct~0-psu2zUap2B@`|`M}b#!2c4SF-S5N_&n)Mj|F~6{V5#_D9lNO z5nS;kV}TVm7ElcFha%$d|0838r`Y+btJQ`s_M}(=C zy0Yu>F70DAV%3mT-2I4Edm2Uk>J*4UA}aK&mjp&nx<7Icgwt?N3l#Q8)LXXUy$tVu z9%Jn3x9)Z;D0+_>ee*`}MSZjS;4Y9e``~u4C4I1lCFwp`ofpl8{bJ{(Wd{A?_f_FL z?x1Kwn)bheCP=^7*|B73zu4JnnO8q`c8c$#p#&y7F6#Skq!$_HUl{*|D{o zryX{u12vvM1NeU6bAYsGj&-Iy?UY*%{049}@B!diK-w9%2KX58Y+wdOodYB;_gvsg z;JLs?;CaAS;5y)TU=vV%>IUFjf%LcecLFZ}ei+ySyc4(ysCAk);Fo~yz;6S)fj*gD3LF8d zPaOxUPn`muK>=XTCf@?w4eSSA24s!Ky##m@@TI^zfG-1n4)_WndqA?bnSTg)Igq^= zcO{TL5l11*v$x?GU*y@la90DL2YdsNwQ%<)AZyz02H?X$*0A!A18)Lm=#$W4em?MR zz@vfx1Y8Py7jP}`J-{u%e*yLY-wT`ovZs{a3%m_@9q13wEK0R9K?mB9Z5z6N+V@ERb?n)w@np9g*hNM2gs_7$KukiQN* z56GTY{zX9A{rn!_gTT)Le*$~}_*3AofaHCCAMoeEKLQ^DJ`Vgfa1Qn7H^6zo-vZ|Y z_W>6H9|0}_{sE{_>7RhwqkkNDHt^5D^MRF>`eXA4%)ZAz5(VcOvZII z#oBSr&dRmp>Rt3eWHQH6KcEgM)nco!x`#Q;o8WBIuGDNwt1Ic2JiT>(Dyln#%F0jE zpwGghXyU1!^vfWZLBNY0J$*a;dVQLQ8rQq1p!{@LLG#qLh}%1`-M;S#-`cK;v#LLa z9E(f+tR>qoe$OHA^?Nh_9p?~20R&f8}Jn1r+}vdKMyi-5%hLz?T3uCweK6GY{@%Kozq*@T)*% z&OZozCGc;+D}jenE?x~>1bhwfXyDbrlYrL%*&BDS2bQ)|w3)W%O|i9K4eitsv|6yW z_5EGsPwD!s!W@DBy$ZXZcFLbqwuWkz=WhR}8mj!EPjyvE)m$y1nw1~Jjybx13au6_jA{FcL7{aZNhsR_1Q%NdofOeen|g)yj?V_He57~P(=+*t z)Rf!2^5S}+_A%ZJTmifRxDNPM;03_90WSpp6L2f=W?&DHeWLts;JblW0{;bg1Mt1T zn}N3iKLUI|kad1Xy~zIu@OI#Xz&n6{1b!4)g{&V3E(HEN@L1rdfzrokft|p+fXwmT ze*x7dd>;5=;1_|+VcnO2KLCCi_(R}VfIkENH;}oh`znyRsQVg_xu?4a_yq7?;KAtU zo4_N0KLVZ#{4uZ-_;cV^;4guU1KqEHgTP+{_W~aVsxA2q@CqPnA+{&D5BL_o9|1BB za(@6au5ph7KLdOW$au#63COs`{RPN4#XSL3{rD^JG4!*PzxZ1c9PaBMTc~plTvp8$mOH}&ce;W+wSA*x!=n7rJoV>R`(iD#0;;}A^)db=qsph` zjOqQ-9KUDuW#EzEzXB}P$IHNrdu$k_50z;mvo`2H;B!m#p)jHmJoicTVJ(m%DD$HQ z`nwk4|BeCBpQz|kk2OnWnvz6^s*mxf^hk%&MN2@ku4Q%n>%eD$yBDYi^_#$RfZqZ> zA9x?I0r*{D6YzdusjmM4yvki#*Wwv<{SMq~OLVO;qIo@k&!0`#b|7P%p^jQ*6}niu z36%b&n*2Ly>GpFTRE?!t-%kfJ9ezx7wlT$1@=0e*K^Rl}A7#jN^+TY>L_Y$q0sa{H zI^fTMO3%-Mr8-&;Uca=CRHmbjuE2eEiH;OTG$->{KbwyFhQ}rcOgT`M`=ylgBsEfs zQ2kSy;!iS250dk=fP9GbNv>Z37Xg_U<|X5A%B1^J@CvIx{fRxo%glha3$ABwHsD6KjzX~?1?DmVxhFd(FWSQ`;@cnq8zb|~p zWyN+?eSY!#1F3IoO6?psdo9UNWm5G-?T6O>^ke_T&b%OK{sg`&fU1J5Ddj&1oCDN+ zvKpvtVt*z72jHQ=dGL59@JQf7;PZfsfQ`T-f$R^t#X!Zynv|U%I0pDqzK;X4kK>jA zZw9hfm7hZjR{(2)tAJAMSwPK^&jDTnd@gVl$bL@#T3`c^H80l)WbMi|0ly4f4`fZp zoeyL!$6WwqZtPlsbwKuk@}~h?fop&rz(!yvQ1izwpw4A=178Q+3}pQ6E(X36_yQo~ zRmVP(%^P0`Wc=wa0W$t{tg+2#PtHVdYCGajVvXV)}9P; z`pVjpGP`p(h5H}gq^&_|98vrWK!7}Ms06zUI9pmQkEFIG+jN(xX zw_&z)#7ianAJ-=1gmhZOzcejF$gVhF3{<>3%cMnV)GxNYrD=H;ex+$q81dD)oAYN& zOE}5&BqIVfI*M8?OxU1N>#Lq?nm@bglB73wjd)mjP1Wi^igz8t4vbDsjA3_2imU}Et%Z#xtrn=~SpsTD!^Gb4DQ;TsvbJ{>DE+>{ z@KbHEc24yBR`{OupYA*1`;DpZLfg6{U71_d=jIihe3AxLginuF(kWH?%7~J3HB*j+E@{Y{~l8tr-v|A`!$5o*xAsY z>#E;?2E9B_-Qotevld)N@{3Z?+*a09$eDq*C;_Fkon07(tH(f4Q*LuxOZTQG%bJ@} ze1+TG)L~}LS}<>x>)Ke~n!`>IW@8VBu_!VLg~uNs@RbRE19s1_6qXKr1VnGO!0j#d zUF$JKo7;jdy)KqZ4ql)=TK}`vlD-kU2*~Qe!3#7lN_*J^ z%#Ub#rpEflhFb@=k4+63s%g(uuD+$cl}hIMJuC3TtW~aUeQs0JrZy}n9T$8TM_(*e zVOFxO)l6VD$_CcakbDHm%NQ%lZC+s+q$C_4IGBk(Zw@Pm6(lSd9U0;{D^jRt6??4- zUL8#hn@haTjiJoUqRjT0E*0g4!K;2leRC_P)#fc20qYg#t<`Pp>T2(#D?NBY|KUaX zq9e6&^^0NAyam&!6*Hqxrq)j0`I(-~bxyMvH92WzZ^Q6j{q`mGpsYi(jF$dgp%%V|qwQKxCjnKFygr+tN$kTpbG z=@Jvgn|k&PjZAAaRlT5#B~gxiQYlofruO9eXzO}=`gSscsb270d?oFs&JFHRzAuQ> zBUnAc^3ajs)_}85?mqL9*M!|f9zYw_3pykDxQtOyZwlNG$NNIOLvbD)+McsJSI-3h zVXCY(yd6`M;~fK+vea7=wL2C}bL2k8BBC~A7-J;T9|OV0NYJ-qdUPjuvpFFgQ@0TR z_4r#nJEo?_S8xezoauh`g7*`>sbp|!yl2{OaaS*R92HLXOb+YKDV^M{UeFl158HX# z{;9DE#*5Vp&IIq(W2DajbtD{N=EF*_>lCx}I=P)*rFubaQ^pg%rx zGn*9!UW&gi`bjC{96F}LS1(u+u|98lx6|arypeWigrc;m7%Zo`rm^10d|=q8B2k^y2 zU>E)A25eGyZQPV=Zp3V0Ggd`AtbiXHQ?Z9NAnCV|2nnm9Ut%lKqP`-;qT*_KF>CHC z{K2sAtnX~0`b>?{`&BQvK7`M8q0ELcN{N*9(?ry^`u67Bx|X(e3@54=e2Vz3B-_qm zK{iFIFg|r{>&|a(ECkBLG)+$K*g3E_$rY80LLkg0Hf>-?WpT-?A_k+=+f|6_IJ~6E z{U}n!@vkvmQq0(Rsv;}Zr;+I`vI0xKTC|q6x5O~hS}h*7%J&4g_Conk#{Lu~$ZoJq zVOkM-c?dT&CYundHGhemb}Gf}TvRVOE>YdkaDQLVM89v=d?9>P^z5AV*%=Q>$g4aq z_NxQdkV*d!N4`U2eN)t;SitM>I}5+grUpOi%*hmPC|q3^L-<01R37e$0jz0f4p_b5%b=89SR%FtW__!*8eash7Q=E#v7d=9d=9Az zSD*PANV+EnCK?9@heikbjoTEX053k-#==5QH-KsMBs$%K`cW$aBZO_Yw#^ze)!RGC z#F*KX$*~D6^;%y&4NtDQT{ZwS>2fDwn_8Jlnf=C6eRg_Xs*f3h&_o`g8i||I(Fjte z4RfQCMPzpn@%9OxNX`uo4KtHx3PBf6ayziqPFYK0kg3R~tzAT5+CL9YVIbT)ZLPNW zA3^;Z8tDmr;=y2azNNi;3sziB7k3k#Oo-PvHg;H4sxXRVmKt+1EHtTpQk#xUcdKnO zWz4X{i|KSf^I_^>2K;laO&i*}nmv+~_>PC@Reo%+Z<&}BpdCGvI||iEv o~c1> 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⋘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

Xxb&O#^z?$#5K*H#M#xwOi{}G$I+L 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∓%r(G!4nV&f#skNSEO}?a?pjdX#?HTB+Ehn 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

ci>*#>SPADKqk;W4aqK?m$GfgeO&ZY42Dg( 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

$UZJzw(Q*{-h_cHh1vBC=6MW=a(eL+&b*?( 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%0D^EPo{k! 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 STZ}jf8H0PNvCqAqV4nq}*j$+yx{nqPV)^>!~ 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%0DLiU`HG108ViDtzlnw>aNOxKV%C(-GN6P+HD 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

h@|ZB<#rJ->zQP!ZVQdcmI8(nTI7`8x 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

SsTpqGWjhPzp1ahb8$|6;hpoJ`no&k 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%0D=QQmhF@RQ-^g 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 diff --git a/ext/curl-7.58.0/Win32/lib/libcurl_a_debug.lib b/ext/curl-7.58.0/Win32/lib/libcurl_a_debug.lib deleted file mode 100644 index ee9efe50287eff98e5f31dc2ce0aaf74c4beffe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9275630 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