mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-03-23 12:25:21 +00:00
Ping supernodes on surface change, and also reset TCP flag.
This commit is contained in:
parent
b7148c107d
commit
eeed31b396
@ -468,12 +468,7 @@ Node::ReasonForTermination Node::run()
|
||||
}
|
||||
|
||||
if (resynchronize) {
|
||||
/* Send NOP to all peers on resynchronize, directly to supernodes and
|
||||
* indirectly to regular nodes (to trigger RENDEZVOUS). Also clear
|
||||
* learned paths since they're likely no longer valid, and close
|
||||
* TCP sockets since they're also likely invalid. */
|
||||
RR->sm->closeTcpSockets();
|
||||
RR->topology->eachPeer(Topology::ResetActivePeers(RR,now));
|
||||
} else {
|
||||
/* Periodically check for changes in our local multicast subscriptions
|
||||
* and broadcast those changes to directly connected peers. */
|
||||
|
@ -258,7 +258,7 @@ void Topology::clean(uint64_t now)
|
||||
}
|
||||
}
|
||||
|
||||
bool Topology::updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress &mirroredAddress)
|
||||
bool Topology::updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress &mirroredAddress,uint64_t now)
|
||||
{
|
||||
Mutex::Lock _l(_lock);
|
||||
|
||||
@ -266,10 +266,20 @@ bool Topology::updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress
|
||||
return false;
|
||||
|
||||
if (_surface.update(mirroredAddress)) {
|
||||
// Clear non-fixed paths for all peers
|
||||
// Clear non-fixed paths for all peers -- will force reconnect on next activity
|
||||
for(std::map< Address,SharedPtr<Peer> >::const_iterator ap(_activePeers.begin());ap!=_activePeers.end();++ap)
|
||||
ap->second->clearPaths(false);
|
||||
|
||||
// Reset TCP tunneling if our global addressing has changed
|
||||
if (!mirroredAddress.isLinkLocal())
|
||||
(const_cast <RuntimeEnvironment *>(RR))->tcpTunnelingEnabled = false;
|
||||
|
||||
// Ping supernodes now (other than the one we might have just heard from)
|
||||
for(std::vector< SharedPtr<Peer> >::const_iterator sn(_supernodePeers.begin());sn!=_supernodePeers.end();++sn) {
|
||||
if (remotePeer != *sn)
|
||||
(*sn)->sendPing(RR,now);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -298,6 +298,7 @@ public:
|
||||
/**
|
||||
* Function object to forget direct links to active peers and then ping them indirectly
|
||||
*/
|
||||
/*
|
||||
class ResetActivePeers
|
||||
{
|
||||
public:
|
||||
@ -332,6 +333,7 @@ public:
|
||||
std::vector<Address> _supernodeAddresses;
|
||||
const RuntimeEnvironment *RR;
|
||||
};
|
||||
*/
|
||||
|
||||
/**
|
||||
* Function object to collect peers with any known direct path
|
||||
@ -364,8 +366,9 @@ public:
|
||||
*
|
||||
* @param remotePeer Remote peer address
|
||||
* @param mirroredAddress Real-world network address the remote peer told us we have
|
||||
* @param now Current time
|
||||
*/
|
||||
bool updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress &mirroredAddress);
|
||||
bool updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress &mirroredAddress,uint64_t now);
|
||||
|
||||
/**
|
||||
* Validate a root topology dictionary against the identities specified in Defaults
|
||||
|
Loading…
x
Reference in New Issue
Block a user