From e72a1de0d5bc11fae2d4182921a6fbe939e7f90b Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 30 Sep 2013 16:31:22 -0400 Subject: [PATCH] Fix bug in next hop selection. --- node/PacketDecoder.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/node/PacketDecoder.cpp b/node/PacketDecoder.cpp index 3ca2e40f6..8bdddbe9b 100644 --- a/node/PacketDecoder.cpp +++ b/node/PacketDecoder.cpp @@ -576,8 +576,11 @@ bool PacketDecoder::_doMULTICAST_FRAME(const RuntimeEnvironment *_r,const Shared // First element in newFifo[] is next hop Address nextHop(newFifo,ZT_ADDRESS_LENGTH); - if (!nextHop) - nextHop = _r->topology->getBestSupernode(&origin,1,true); // exclude origin in case it's itself a supernode + if (!nextHop) { + SharedPtr supernode(_r->topology->getBestSupernode(&origin,1,true)); + if (supernode) + nextHop = supernode->address(); + } if ((!nextHop)||(nextHop == _r->identity.address())) { // check against our addr is a sanity check TRACE("not forwarding MULTICAST_FRAME from %s(%s): no next hop",source().toString().c_str(),_remoteAddress.toString().c_str()); return true;