summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node/Path.hpp2
-rw-r--r--node/Peer.cpp2
2 files changed, 4 insertions, 0 deletions
diff --git a/node/Path.hpp b/node/Path.hpp
index 718e1cdd..8151ed27 100644
--- a/node/Path.hpp
+++ b/node/Path.hpp
@@ -156,6 +156,8 @@ public:
*/
inline unsigned int preferenceRank() const
{
+ // This causes us to rank paths in order of IP scope rank (see InetAdddress.hpp) but
+ // within each IP scope class to prefer IPv6 over IPv4.
return ( ((unsigned int)_ipScope << 1) | (unsigned int)(_addr.ss_family == AF_INET6) );
}
diff --git a/node/Peer.cpp b/node/Peer.cpp
index 3701d9a1..110d67fd 100644
--- a/node/Peer.cpp
+++ b/node/Peer.cpp
@@ -138,6 +138,7 @@ void Peer::received(
if (verb == Packet::VERB_OK) {
Mutex::Lock _l(_paths_m);
+ // Since this is a new path, figure out where to put it (possibly replacing an old/dead one)
unsigned int slot;
if (_numPaths < ZT_MAX_PEER_NETWORK_PATHS) {
slot = _numPaths++;
@@ -157,6 +158,7 @@ void Peer::received(
if (worstSlot >= 0) {
slot = (unsigned int)worstSlot;
} else {
+ // If we can't find one with the same family, replace the worst of any family
slot = ZT_MAX_PEER_NETWORK_PATHS - 1;
for(unsigned int p=0;p<_numPaths;++p) {
const uint64_t s = _pathScore(p);