summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node/Multicaster.hpp5
-rw-r--r--node/PacketDecoder.cpp1
-rw-r--r--node/Topology.cpp1
3 files changed, 4 insertions, 3 deletions
diff --git a/node/Multicaster.hpp b/node/Multicaster.hpp
index d9d12607..9a7000af 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 e953c60c..b2bd6d3e 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<np;++i) {
diff --git a/node/Topology.cpp b/node/Topology.cpp
index de65de3b..9632c464 100644
--- a/node/Topology.cpp
+++ b/node/Topology.cpp
@@ -115,6 +115,7 @@ void Topology::addPeer(const SharedPtr<Peer> &candidate,void (*callback)(void *,
SharedPtr<Peer> Topology::getPeer(const Address &zta)
{
if (zta == _r->identity.address()) {
+ abort();
TRACE("BUG: ignored attempt to getPeer() for self, returned NULL");
return SharedPtr<Peer>();
}