diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-18 13:20:34 -0400 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-18 13:20:34 -0400 |
| commit | 03b909603ae6010d7bf059de688c0cfe0f96a0a3 (patch) | |
| tree | 94ddb3b067a790554489a9af0b9c285add0a97ac /node/Switch.cpp | |
| parent | 5a8f213c236936c9803485ff7f053b7923bd8722 (diff) | |
| download | infinitytier-03b909603ae6010d7bf059de688c0cfe0f96a0a3.tar.gz infinitytier-03b909603ae6010d7bf059de688c0cfe0f96a0a3.zip | |
Clean up the awful Network::Config mess and break that out into NetworkConfig.
Diffstat (limited to 'node/Switch.cpp')
| -rw-r--r-- | node/Switch.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/node/Switch.cpp b/node/Switch.cpp index 37184076..14f6c506 100644 --- a/node/Switch.cpp +++ b/node/Switch.cpp @@ -82,6 +82,10 @@ void Switch::onRemotePacket(Demarc::Port localPort,const InetAddress &fromAddr,c void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,const MAC &to,unsigned int etherType,const Buffer<4096> &data) { + SharedPtr<NetworkConfig> nconf(network->config2()); + if (!nconf) + return; + if (to == network->tap().mac()) { LOG("%s: frame received from self, ignoring (bridge loop? OS bug?)",network->tap().deviceName().c_str()); return; @@ -92,7 +96,7 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c return; } - if (!network->permitsEtherType(etherType)) { + if (!nconf->permitsEtherType(etherType)) { LOG("ignored tap: %s -> %s: ethertype %s not allowed on network %.16llx",from.toString().c_str(),to.toString().c_str(),etherTypeName(etherType),(unsigned long long)network->id()); return; } @@ -115,11 +119,11 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c const SharedPtr<Peer> supernode(_r->topology->getBestSupernode()); uint64_t now = Utils::now(); - for(unsigned int prefix=0,np=((unsigned int)2 << (network->multicastPrefixBits() - 1));prefix<np;++prefix) { + for(unsigned int prefix=0,np=((unsigned int)2 << (nconf->multicastPrefixBits() - 1));prefix<np;++prefix) { memset(bloom,0,sizeof(bloom)); unsigned char *fifoPtr = fifo; - _r->mc->getNextHops(network->id(),mg,Multicaster::AddToPropagationQueue(&fifoPtr,fifoEnd,bloom,bloomNonce,_r->identity.address(),network->multicastPrefixBits(),prefix)); + _r->mc->getNextHops(network->id(),mg,Multicaster::AddToPropagationQueue(&fifoPtr,fifoEnd,bloom,bloomNonce,_r->identity.address(),nconf->multicastPrefixBits(),prefix)); while (fifoPtr != fifoEnd) *(fifoPtr++) = (unsigned char)0; @@ -143,7 +147,7 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c outp.append((unsigned char)0); outp.append(network->id()); outp.append(bloomNonce); - outp.append((unsigned char)network->multicastPrefixBits()); + outp.append((unsigned char)nconf->multicastPrefixBits()); outp.append((unsigned char)prefix); _r->identity.address().appendTo(outp); outp.append((unsigned char)((mcid >> 16) & 0xff)); |
