Update bloom filter for MULTICAST_FRAME retransmit, and temporarily add abort() to catch gremlin

This commit is contained in:
Adam Ierymenko 2013-07-12 17:21:23 -04:00
parent 086050686f
commit a004878546
3 changed files with 4 additions and 3 deletions

View File

@ -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;

View File

@ -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) {

View File

@ -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>();
}