Mac multicast bug fix -- GitHub issue #986

This commit is contained in:
Adam Ierymenko 2019-07-31 13:25:58 -07:00
parent db813db7e8
commit 632d6e04ad
2 changed files with 4 additions and 3 deletions

View File

@ -165,6 +165,7 @@ MacEthernetTap::MacEthernetTap(
break; break;
} }
} }
_dev = devstr;
if (::pipe(_shutdownSignalPipe)) if (::pipe(_shutdownSignalPipe))
throw std::runtime_error("pipe creation failed"); throw std::runtime_error("pipe creation failed");
@ -285,7 +286,7 @@ std::vector<InetAddress> MacEthernetTap::ips() const
if (!getifaddrs(&ifa)) { if (!getifaddrs(&ifa)) {
struct ifaddrs *p = ifa; struct ifaddrs *p = ifa;
while (p) { while (p) {
if ((!strcmp(p->ifa_name,_dev.c_str()))&&(p->ifa_addr)&&(p->ifa_netmask)&&(p->ifa_addr->sa_family == p->ifa_netmask->sa_family)) { if ((p->ifa_name)&&(!strcmp(p->ifa_name,_dev.c_str()))&&(p->ifa_addr)) {
switch(p->ifa_addr->sa_family) { switch(p->ifa_addr->sa_family) {
case AF_INET: { case AF_INET: {
struct sockaddr_in *sin = (struct sockaddr_in *)p->ifa_addr; struct sockaddr_in *sin = (struct sockaddr_in *)p->ifa_addr;
@ -361,7 +362,7 @@ void MacEthernetTap::scanMulticastGroups(std::vector<MulticastGroup> &added,std:
newGroups.push_back(MulticastGroup::deriveMulticastGroupForAddressResolution(*ip)); newGroups.push_back(MulticastGroup::deriveMulticastGroupForAddressResolution(*ip));
std::sort(newGroups.begin(),newGroups.end()); std::sort(newGroups.begin(),newGroups.end());
std::unique(newGroups.begin(),newGroups.end()); newGroups.erase(std::unique(newGroups.begin(),newGroups.end()),newGroups.end());
for(std::vector<MulticastGroup>::iterator m(newGroups.begin());m!=newGroups.end();++m) { for(std::vector<MulticastGroup>::iterator m(newGroups.begin());m!=newGroups.end();++m) {
if (!std::binary_search(_multicastGroups.begin(),_multicastGroups.end(),*m)) if (!std::binary_search(_multicastGroups.begin(),_multicastGroups.end(),*m))

View File

@ -49,7 +49,7 @@
* to force a minor update without an actual version number change. It's * to force a minor update without an actual version number change. It's
* not part of the actual release version number. * not part of the actual release version number.
*/ */
#define ZEROTIER_ONE_VERSION_BUILD 0 #define ZEROTIER_ONE_VERSION_BUILD 1
#ifndef ZT_BUILD_ARCHITECTURE #ifndef ZT_BUILD_ARCHITECTURE
#define ZT_BUILD_ARCHITECTURE 0 #define ZT_BUILD_ARCHITECTURE 0