Rename getBestRoot() etc.

This commit is contained in:
Adam Ierymenko 2016-11-17 16:31:58 -08:00
parent bf8d71e82c
commit 1615ef1114
6 changed files with 9 additions and 34 deletions

View File

@ -229,7 +229,7 @@ void Multicaster::send(
Address explicitGatherPeers[16]; Address explicitGatherPeers[16];
unsigned int numExplicitGatherPeers = 0; unsigned int numExplicitGatherPeers = 0;
SharedPtr<Peer> bestRoot(RR->topology->getBestRoot()); SharedPtr<Peer> bestRoot(RR->topology->getUpstreamPeer());
if (bestRoot) if (bestRoot)
explicitGatherPeers[numExplicitGatherPeers++] = bestRoot->address(); explicitGatherPeers[numExplicitGatherPeers++] = bestRoot->address();
explicitGatherPeers[numExplicitGatherPeers++] = Network::controllerFor(nwid); explicitGatherPeers[numExplicitGatherPeers++] = Network::controllerFor(nwid);

View File

@ -211,8 +211,7 @@ public:
} }
if (upstream) { if (upstream) {
// "Upstream" devices are roots and relays and get special treatment -- they stay alive // We keep connections to upstream peers alive forever.
// forever and we try to keep (if available) both IPv4 and IPv6 channels open to them.
bool needToContactIndirect = true; bool needToContactIndirect = true;
if (p->doPingAndKeepalive(_now,AF_INET)) { if (p->doPingAndKeepalive(_now,AF_INET)) {
needToContactIndirect = false; needToContactIndirect = false;
@ -231,11 +230,8 @@ public:
} }
} }
// If we don't have a direct path or a static endpoint, send something indirectly to find one.
if (needToContactIndirect) { if (needToContactIndirect) {
// If this is an upstream and we have no stable endpoint for either IPv4 or IPv6,
// send a NOP indirectly if possible to see if we can get to this peer in any
// way whatsoever. This will e.g. find network preferred relays that lack
// stable endpoints by using root servers.
Packet outp(p->address(),RR->identity.address(),Packet::VERB_NOP); Packet outp(p->address(),RR->identity.address(),Packet::VERB_NOP);
RR->sw->send(outp,true); RR->sw->send(outp,true);
} }

View File

@ -1049,18 +1049,7 @@ public:
* OK or ERROR and has no special semantics outside of whatever the user * OK or ERROR and has no special semantics outside of whatever the user
* (via the ZeroTier core API) chooses to give it. * (via the ZeroTier core API) chooses to give it.
*/ */
VERB_USER_MESSAGE = 0x14, VERB_USER_MESSAGE = 0x14
/**
* Information related to federation and mesh-like behavior:
* <[2] 16-bit length of Dictionary>
* <[...] topology definition info Dictionary>
*
* This message can carry information that can be used to define topology
* and implement "mesh-like" behavior. It can optionally generate OK or
* ERROR, and these carry the same payload.
*/
VERB_TOPOLOGY_HINT = 0x15
}; };
/** /**

View File

@ -131,8 +131,8 @@ void Switch::onRemotePacket(const InetAddress &localAddr,const InetAddress &from
} }
#endif #endif
// Don't know peer or no direct path -- so relay via root server // Don't know peer or no direct path -- so relay via someone upstream
relayTo = RR->topology->getBestRoot(); relayTo = RR->topology->getUpstreamPeer();
if (relayTo) if (relayTo)
relayTo->sendDirect(fragment.data(),fragment.size(),now,true); relayTo->sendDirect(fragment.data(),fragment.size(),now,true);
} }
@ -254,7 +254,7 @@ void Switch::onRemotePacket(const InetAddress &localAddr,const InetAddress &from
return; return;
} }
#endif #endif
relayTo = RR->topology->getBestRoot(&source,1,true); relayTo = RR->topology->getUpstreamPeer(&source,1,true);
if (relayTo) if (relayTo)
relayTo->sendDirect(packet.data(),packet.size(),now,true); relayTo->sendDirect(packet.data(),packet.size(),now,true);
} }
@ -763,7 +763,7 @@ unsigned long Switch::doTimerTasks(uint64_t now)
Address Switch::_sendWhoisRequest(const Address &addr,const Address *peersAlreadyConsulted,unsigned int numPeersAlreadyConsulted) Address Switch::_sendWhoisRequest(const Address &addr,const Address *peersAlreadyConsulted,unsigned int numPeersAlreadyConsulted)
{ {
SharedPtr<Peer> upstream(RR->topology->getBestRoot(peersAlreadyConsulted,numPeersAlreadyConsulted,false)); SharedPtr<Peer> upstream(RR->topology->getUpstreamPeer(peersAlreadyConsulted,numPeersAlreadyConsulted,false));
if (upstream) { if (upstream) {
Packet outp(upstream->address(),RR->identity.address(),Packet::VERB_WHOIS); Packet outp(upstream->address(),RR->identity.address(),Packet::VERB_WHOIS);
addr.appendTo(outp); addr.appendTo(outp);
@ -793,7 +793,7 @@ bool Switch::_trySend(const Packet &packet,bool encrypt)
viaPath.zero(); viaPath.zero();
} }
if (!viaPath) { if (!viaPath) {
SharedPtr<Peer> relay(RR->topology->getBestRoot()); SharedPtr<Peer> relay(RR->topology->getUpstreamPeer());
if ( (!relay) || (!(viaPath = relay->getBestPath(now,false))) ) { if ( (!relay) || (!(viaPath = relay->getBestPath(now,false))) ) {
if (!(viaPath = peer->getBestPath(now,true))) if (!(viaPath = peer->getBestPath(now,true)))
return false; return false;

View File

@ -163,15 +163,6 @@ public:
*/ */
void setUpstream(const Address &a,bool upstream); void setUpstream(const Address &a,bool upstream);
/**
* @return Vector of root server addresses
*/
inline std::vector<Address> rootAddresses() const
{
Mutex::Lock _l(_lock);
return _rootAddresses;
}
/** /**
* @return Vector of active upstream addresses (including roots) * @return Vector of active upstream addresses (including roots)
*/ */

View File

@ -4,7 +4,6 @@ OBJS=\
node/C25519.o \ node/C25519.o \
node/Capability.o \ node/Capability.o \
node/CertificateOfMembership.o \ node/CertificateOfMembership.o \
node/CertificateOfTrust.o \
node/Cluster.o \ node/Cluster.o \
node/Identity.o \ node/Identity.o \
node/IncomingPacket.o \ node/IncomingPacket.o \