Refactor: move network COMs out of Network and into Peer in prep for tightening up multicast lookup and other things.
This commit is contained in:
parent
11ff96ba1d
commit
a3db7d0728
11 changed files with 289 additions and 215 deletions
|
@ -56,6 +56,7 @@ namespace ZeroTier {
|
|||
|
||||
class RuntimeEnvironment;
|
||||
class _AnnounceMulticastGroupsToPeersWithActiveDirectPaths;
|
||||
class Peer;
|
||||
|
||||
/**
|
||||
* A virtual LAN
|
||||
|
@ -94,6 +95,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)
|
||||
*/
|
||||
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue