summaryrefslogtreecommitdiff
path: root/node/SelfAwareness.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-09-07 11:13:17 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-09-07 11:13:17 -0700
commitb5c86b6ba4112b23e46170fe241b4688532b493e (patch)
tree01d77467768c48efae59a5397eae119724bc4ceb /node/SelfAwareness.cpp
parentf2d2df2b112c8a644b718abc521af296a83b5337 (diff)
downloadinfinitytier-b5c86b6ba4112b23e46170fe241b4688532b493e.tar.gz
infinitytier-b5c86b6ba4112b23e46170fe241b4688532b493e.zip
Bunch more path refactoring. Peers no longer forget paths, but do not normally use expired paths. Expired paths might still be tried if nothing else is reachable.
Diffstat (limited to 'node/SelfAwareness.cpp')
-rw-r--r--node/SelfAwareness.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/node/SelfAwareness.cpp b/node/SelfAwareness.cpp
index b9ab9d67..6bf50720 100644
--- a/node/SelfAwareness.cpp
+++ b/node/SelfAwareness.cpp
@@ -33,37 +33,31 @@
#include "Switch.hpp"
// Entry timeout -- make it fairly long since this is just to prevent stale buildup
-#define ZT_SELFAWARENESS_ENTRY_TIMEOUT 3600000
+#define ZT_SELFAWARENESS_ENTRY_TIMEOUT 600000
namespace ZeroTier {
class _ResetWithinScope
{
public:
- _ResetWithinScope(uint64_t now,InetAddress::IpScope scope) :
+ _ResetWithinScope(uint64_t now,int inetAddressFamily,InetAddress::IpScope scope) :
_now(now),
+ _family(inetAddressFamily),
_scope(scope) {}
- inline void operator()(Topology &t,const SharedPtr<Peer> &p)
- {
- if (p->resetWithinScope(_scope,_now))
- peersReset.push_back(p);
- }
+ inline void operator()(Topology &t,const SharedPtr<Peer> &p) { if (p->resetWithinScope(_scope,_family,_now)) peersReset.push_back(p); }
std::vector< SharedPtr<Peer> > peersReset;
private:
uint64_t _now;
+ int _family;
InetAddress::IpScope _scope;
};
SelfAwareness::SelfAwareness(const RuntimeEnvironment *renv) :
RR(renv),
- _phy(32)
-{
-}
-
-SelfAwareness::~SelfAwareness()
+ _phy(128)
{
}
@@ -98,8 +92,8 @@ void SelfAwareness::iam(const Address &reporter,const InetAddress &receivedOnLoc
}
}
- // Reset all paths within this scope
- _ResetWithinScope rset(now,(InetAddress::IpScope)scope);
+ // Reset all paths within this scope and address family
+ _ResetWithinScope rset(now,myPhysicalAddress.ss_family,(InetAddress::IpScope)scope);
RR->topology->eachPeer<_ResetWithinScope &>(rset);
// Send a NOP to all peers for whom we forgot a path. This will cause direct