summaryrefslogtreecommitdiff
path: root/node/EthernetTap.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-07-06 15:56:12 -0400
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-07-06 15:56:12 -0400
commit2eaac3891ec5f6da0ba9577bd032fd692392dd40 (patch)
treee20e47dc23bc290b96268084baa32e891fff7b76 /node/EthernetTap.cpp
parent7f3dea018c8034208b40e2633b04d06f917c1957 (diff)
downloadinfinitytier-2eaac3891ec5f6da0ba9577bd032fd692392dd40.tar.gz
infinitytier-2eaac3891ec5f6da0ba9577bd032fd692392dd40.zip
Enable ff:ff:ff:ff:ff:ff w/no ADI a.k.a. broadcast. YOLO.
Diffstat (limited to 'node/EthernetTap.cpp')
-rw-r--r--node/EthernetTap.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/node/EthernetTap.cpp b/node/EthernetTap.cpp
index 596cc5c2..68884464 100644
--- a/node/EthernetTap.cpp
+++ b/node/EthernetTap.cpp
@@ -31,6 +31,10 @@
#include "Logger.hpp"
#include "RuntimeEnvironment.hpp"
#include "Mutex.hpp"
+#include "MulticastGroup.hpp"
+
+// ff:ff:ff:ff:ff:ff with no ADI
+static const ZeroTier::MulticastGroup _blindWildcardMulticastGroup(ZeroTier::MAC(0xff),0);
/* ======================================================================== */
#if defined(__linux__) || defined(linux) || defined(__LINUX__) || defined(__linux)
@@ -337,6 +341,8 @@ bool EthernetTap::updateMulticastGroups(std::set<MulticastGroup> &groups)
bool changed = false;
+ newGroups.insert(_blindWildcardMulticastGroup); // always join this
+
for(std::set<MulticastGroup>::iterator mg(newGroups.begin());mg!=newGroups.end();++mg) {
if (!groups.count(*mg)) {
groups.insert(*mg);
@@ -658,6 +664,8 @@ bool EthernetTap::updateMulticastGroups(std::set<MulticastGroup> &groups)
bool changed = false;
+ newGroups.insert(_blindWildcardMulticastGroup); // always join this
+
for(std::set<MulticastGroup>::iterator mg(newGroups.begin());mg!=newGroups.end();++mg) {
if (!groups.count(*mg)) {
groups.insert(*mg);