summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-05-23 19:52:39 -0400
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-05-23 19:52:39 -0400
commit657f6ae342c3b6d8b55beaafad0c5e1617d7cc8d (patch)
tree39a49394ea895916ffa721f53d60744eddb481d3
parent2861229558dedebaaab5944b9d30cfb21f6d02d8 (diff)
downloadinfinitytier-657f6ae342c3b6d8b55beaafad0c5e1617d7cc8d.tar.gz
infinitytier-657f6ae342c3b6d8b55beaafad0c5e1617d7cc8d.zip
Don't transmit broadcasts if enableBroadcast is false on a network.
-rw-r--r--node/Switch.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/node/Switch.cpp b/node/Switch.cpp
index d2f2d275..59be6dc8 100644
--- a/node/Switch.cpp
+++ b/node/Switch.cpp
@@ -109,9 +109,14 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c
MulticastGroup mg(to,0);
if (to.isBroadcast()) {
- // Cram IPv4 IP into ADI field to make IPv4 ARP broadcast channel specific and scalable
- if ((etherType == ZT_ETHERTYPE_ARP)&&(data.size() == 28)&&(data[2] == 0x08)&&(data[3] == 0x00)&&(data[4] == 6)&&(data[5] == 4)&&(data[7] == 0x01))
+ if ((etherType == ZT_ETHERTYPE_ARP)&&(data.size() == 28)&&(data[2] == 0x08)&&(data[3] == 0x00)&&(data[4] == 6)&&(data[5] == 4)&&(data[7] == 0x01)) {
+ // Cram IPv4 IP into ADI field to make IPv4 ARP broadcast channel specific and scalable
mg = MulticastGroup::deriveMulticastGroupForAddressResolution(InetAddress(data.field(24,4),4,0));
+ } else if (!nconf->enableBroadcast()) {
+ // Don't transmit broadcasts if this network doesn't want them
+ TRACE("%s: dropped broadcast since ff:ff:ff:ff:ff:ff is not enabled on network %.16llx",network->tapDeviceName().c_str(),network->id());
+ return;
+ }
}
if (!network->updateAndCheckMulticastBalance(_r->identity.address(),mg,data.size())) {