From a0048785465eb14356c1cb185c271c223862491c Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Jul 2013 17:21:23 -0400 Subject: [PATCH] Update bloom filter for MULTICAST_FRAME retransmit, and temporarily add abort() to catch gremlin --- node/Multicaster.hpp | 5 ++--- node/PacketDecoder.cpp | 1 + node/Topology.cpp | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/node/Multicaster.hpp b/node/Multicaster.hpp index d9d126076..9a7000af3 100644 --- a/node/Multicaster.hpp +++ b/node/Multicaster.hpp @@ -287,12 +287,11 @@ public: } // Add a supernode if there's nowhere else to go. Supernodes know of all multicast - // LIKEs and so can act to bridge sparse multicast groups. We do not remember them - // in the bloom filter. + // LIKEs and so can act to bridge sparse multicast groups. if (!picked) { Address avoid[2]; avoid[0] = upstream; - avoid[1] = originalSubmitter; + avoid[1] = originalSubmitter; // otherwise supernodes will play ping pong P peer = topology.getBestSupernode(avoid,2,true); if (peer) peers[picked++] = peer; diff --git a/node/PacketDecoder.cpp b/node/PacketDecoder.cpp index e953c60ca..b2bd6d3e3 100644 --- a/node/PacketDecoder.cpp +++ b/node/PacketDecoder.cpp @@ -477,6 +477,7 @@ bool PacketDecoder::_doMULTICAST_FRAME(const RuntimeEnvironment *_r,const Shared setSource(_r->identity.address()); (*this)[ZT_PROTO_VERB_MULTICAST_FRAME_IDX_HOP_COUNT] = hops; + memcpy(field(ZT_PROTO_VERB_MULTICAST_FRAME_IDX_BLOOM_FILTER,ZT_PROTO_VERB_MULTICAST_FRAME_BLOOM_FILTER_SIZE_BYTES),bloom.data(),ZT_PROTO_VERB_MULTICAST_FRAME_BLOOM_FILTER_SIZE_BYTES); compress(); for(unsigned int i=0;i &candidate,void (*callback)(void *, SharedPtr Topology::getPeer(const Address &zta) { if (zta == _r->identity.address()) { + abort(); TRACE("BUG: ignored attempt to getPeer() for self, returned NULL"); return SharedPtr(); }