From c61e9c0ef955e444a4271006e347e56cd717f2f8 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 13 Nov 2014 14:21:06 -0500 Subject: [PATCH] Prevent "software laser" in legacy multicast support. Already hotpatched in supernodes. --- node/IncomingPacket.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index 172a5d5b7..efda53708 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -611,14 +611,14 @@ bool IncomingPacket::_doP5_MULTICAST_FRAME(const RuntimeEnvironment *RR,const Sh std::vector
members(RR->mc->getMembers(nwid,dest,limit)); SharedPtr lpp; + uint64_t now = Utils::now(); setAt(ZT_PROTO_VERB_P5_MULTICAST_FRAME_IDX_PROPAGATION_DEPTH,(uint16_t)0xffff); setSource(RR->identity.address()); compress(); for(std::vector
::iterator lp(members.begin());lp!=members.end();++lp) { - if (!senderIsLegacy) - lpp = RR->topology->getPeer(*lp); - if ( (*lp != origin) && (*lp != peer->address()) && ((senderIsLegacy) || (!lpp) || (lpp->remoteVersionMajor() < 1)) ) { + lpp = RR->topology->getPeer(*lp); + if ( (lpp) && (lpp->hasActiveDirectPath(now)) && (*lp != origin) && (*lp != peer->address()) && ((senderIsLegacy) || (lpp->remoteVersionMajor() < 1)) ) { newInitializationVector(); setDestination(*lp); RR->sw->send(*this,true);