diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-01 17:19:24 -0400 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-01 17:19:24 -0400 |
commit | 4b6ec872c7680a2529e8c12a3ef9a4a349c1aff8 (patch) | |
tree | e445ccd0dfb81545b5214801107e0d35ead44a90 | |
parent | 3443b203e4035104071f5af0143591dcd48a4974 (diff) | |
download | infinitytier-4b6ec872c7680a2529e8c12a3ef9a4a349c1aff8.tar.gz infinitytier-4b6ec872c7680a2529e8c12a3ef9a4a349c1aff8.zip |
More multicast fixes.
-rw-r--r-- | Makefile.linux | 11 | ||||
-rw-r--r-- | Makefile.mac | 2 | ||||
-rw-r--r-- | node/Multicaster.hpp | 16 | ||||
-rw-r--r-- | node/PacketDecoder.cpp | 2 |
4 files changed, 14 insertions, 17 deletions
diff --git a/Makefile.linux b/Makefile.linux index 353b8721..84ad5bec 100644 --- a/Makefile.linux +++ b/Makefile.linux @@ -4,19 +4,18 @@ CXX=g++ INCLUDES= ARCH=$(shell uname -m) DEFS=-DZT_ARCH="$(ARCH)" -DZT_OSNAME="linux" -DZT_TRACE +LIBS= # Uncomment for a release optimized build -#CFLAGS=-Wall -O3 -fno-unroll-loops -fstack-protector -pthread $(INCLUDES) -DNDEBUG $(DEFS) -#STRIP=strip --strip-all +CFLAGS=-Wall -O3 -fno-unroll-loops -fstack-protector -pthread $(INCLUDES) -DNDEBUG $(DEFS) +STRIP=strip --strip-all # Uncomment for a debug build -CFLAGS=-Wall -g -pthread $(INCLUDES) -DZT_TRACE $(DEFS) -STRIP=echo +#CFLAGS=-Wall -g -pthread $(INCLUDES) -DZT_TRACE $(DEFS) +#STRIP=echo CXXFLAGS=$(CFLAGS) -fno-rtti -LIBS=-lm - include objects.mk all: one cli diff --git a/Makefile.mac b/Makefile.mac index a6637bf8..e195f088 100644 --- a/Makefile.mac +++ b/Makefile.mac @@ -3,6 +3,7 @@ CXX=g++ INCLUDES= DEFS=-DZT_ARCH="x86_combined" -DZT_OSNAME="mac" -DZT_TRACE +LIBS=-lm # Uncomment for a release optimized universal binary build CFLAGS=-arch i386 -arch x86_64 -Wall -O3 -ftree-vectorize -fstack-protector -pthread -mmacosx-version-min=10.6 -DNDEBUG $(INCLUDES) $(DEFS) @@ -13,7 +14,6 @@ STRIP=strip #STRIP=echo CXXFLAGS=$(CFLAGS) -fno-rtti -LIBS=-lm include objects.mk diff --git a/node/Multicaster.hpp b/node/Multicaster.hpp index e86de0a0..9641f0a5 100644 --- a/node/Multicaster.hpp +++ b/node/Multicaster.hpp @@ -154,11 +154,11 @@ public: throw() : _origin(origin), _bloomNonce((uint64_t)bloomNonce), + _prefixMask(0xffffffffffffffffULL >> (64 - prefixBits)), + _prefix((uint64_t)prefix & _prefixMask), _ptr(ptr), _end(end), - _bloom(bloom), - _prefix(prefix), - _prefixBits(std::min(prefixBits,(unsigned int)16)) {} + _bloom(bloom) {} inline bool operator()(const Address &a) throw() @@ -167,10 +167,8 @@ public: if (a == _origin) return true; - // Prefixes match if N least significant bits in address are equal to the - // prefix. (e.g. 0 bits and 0 prefix would match all, 1 bit and 0 prefix - // would match addresses with LSB == 0) - if (((unsigned int)a.toInt() & (0xffff >> (16 - _prefixBits))) != _prefix) + // Exclude addresses not in this prefix domain + if ((a.toInt() & _prefixMask) != _prefix) return true; // Exclude addresses remembered in bloom filter -- or else remember them @@ -189,11 +187,11 @@ public: private: const Address _origin; const uint64_t _bloomNonce; + const uint64_t _prefixMask; + const uint64_t _prefix; unsigned char **const _ptr; unsigned char *const _end; unsigned char *const _bloom; - const unsigned int _prefix; - const unsigned int _prefixBits; }; private: diff --git a/node/PacketDecoder.cpp b/node/PacketDecoder.cpp index 3269504b..4b13a70b 100644 --- a/node/PacketDecoder.cpp +++ b/node/PacketDecoder.cpp @@ -564,7 +564,7 @@ bool PacketDecoder::_doMULTICAST_FRAME(const RuntimeEnvironment *_r,const Shared // New FIFO with room for one extra, since head will be next hop unsigned char newFifo[ZT_PROTO_VERB_MULTICAST_FRAME_LEN_PROPAGATION_FIFO + ZT_ADDRESS_LENGTH]; unsigned char *newFifoPtr = newFifo; - unsigned char *newFifoEnd = newFifoPtr + sizeof(newFifo); + unsigned char *const newFifoEnd = newFifoPtr + sizeof(newFifo); for(unsigned int i=0;i<ZT_PROTO_VERB_MULTICAST_FRAME_LEN_PROPAGATION_FIFO;) { unsigned int j = i; i += ZT_ADDRESS_LENGTH; |