summaryrefslogtreecommitdiff
path: root/node/Network.hpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-01 11:11:52 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-01 11:11:52 -0700
commita3db7d0728c1bc5181b8a70e8c379632125ee376 (patch)
treeac18257023caca1e605271319e1f0063058adf41 /node/Network.hpp
parent11ff96ba1ddc07c3414590aa31a35e6353176213 (diff)
downloadinfinitytier-a3db7d0728c1bc5181b8a70e8c379632125ee376.tar.gz
infinitytier-a3db7d0728c1bc5181b8a70e8c379632125ee376.zip
Refactor: move network COMs out of Network and into Peer in prep for tightening up multicast lookup and other things.
Diffstat (limited to 'node/Network.hpp')
-rw-r--r--node/Network.hpp45
1 files changed, 10 insertions, 35 deletions
diff --git a/node/Network.hpp b/node/Network.hpp
index ad9f18de..37077650 100644
--- a/node/Network.hpp
+++ b/node/Network.hpp
@@ -56,6 +56,7 @@ namespace ZeroTier {
class RuntimeEnvironment;
class _AnnounceMulticastGroupsToPeersWithActiveDirectPaths;
+class Peer;
/**
* A virtual LAN
@@ -95,6 +96,12 @@ public:
inline Address controller() throw() { return Address(_id >> 24); }
/**
+ * @param nwid Network ID
+ * @return Address of network's controller
+ */
+ static inline Address controllerFor(uint64_t nwid) throw() { return Address(nwid >> 24); }
+
+ /**
* @return Multicast group memberships for this network's port (local, not learned via bridging)
*/
inline std::vector<MulticastGroup> multicastGroups() const
@@ -177,33 +184,10 @@ public:
void requestConfiguration();
/**
- * Add or update a membership certificate
- *
- * @param cert Certificate of membership
- * @return True if certificate was accepted as valid
- */
- bool validateAndAddMembershipCertificate(const CertificateOfMembership &cert);
-
- /**
- * Check if we should push membership certificate to a peer, AND update last pushed
- *
- * If we haven't pushed a cert to this peer in a long enough time, this returns
- * true and updates the last pushed time. Otherwise it returns false.
- *
- * This doesn't actually send anything, since COMs can hitch a ride with several
- * different kinds of packets.
- *
- * @param to Destination peer
- * @param now Current time
- * @return True if we should include a COM with whatever we're currently sending
- */
- bool peerNeedsOurMembershipCertificate(const Address &to,uint64_t now);
-
- /**
- * @param peer Peer address to check
+ * @param peer Peer to check
* @return True if peer is allowed to communicate on this network
*/
- inline bool isAllowed(const Address &peer) const
+ inline bool isAllowed(const SharedPtr<Peer> &peer) const
{
Mutex::Lock _l(_lock);
return _isAllowed(peer);
@@ -347,16 +331,9 @@ public:
inline bool operator>=(const Network &n) const throw() { return (_id >= n._id); }
private:
- struct _RemoteMemberCertificateInfo
- {
- _RemoteMemberCertificateInfo() : com(),lastPushed(0) {}
- CertificateOfMembership com; // remote member's COM
- uint64_t lastPushed; // when did we last push ours to them?
- };
-
ZT_VirtualNetworkStatus _status() const;
void _externalConfig(ZT_VirtualNetworkConfig *ec) const; // assumes _lock is locked
- bool _isAllowed(const Address &peer) const;
+ bool _isAllowed(const SharedPtr<Peer> &peer) const;
void _announceMulticastGroups();
std::vector<MulticastGroup> _allMulticastGroups() const;
@@ -370,8 +347,6 @@ private:
Hashtable< MulticastGroup,uint64_t > _multicastGroupsBehindMe; // multicast groups that seem to be behind us and when we last saw them (if we are a bridge)
Hashtable< MAC,Address > _remoteBridgeRoutes; // remote addresses where given MACs are reachable (for tracking devices behind remote bridges)
- Hashtable< Address,_RemoteMemberCertificateInfo > _certInfo;
-
SharedPtr<NetworkConfig> _config; // Most recent network configuration, which is an immutable value-object
volatile uint64_t _lastConfigUpdate;