From 357e1aca544563f107e50d98b1e8f509a8178dc3 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 9 Nov 2021 13:24:03 -0500 Subject: [PATCH] Likely MAC fix for Linux. --- osdep/LinuxEthernetTap.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index 181c558be..a4c6544e9 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -205,14 +205,6 @@ LinuxEthernetTap::LinuxEthernetTap( return; } - ifr.ifr_ifru.ifru_hwaddr.sa_family = ARPHRD_ETHER; - _mac.copyTo(ifr.ifr_ifru.ifru_hwaddr.sa_data,6); - if (ioctl(sock,SIOCSIFHWADDR,(void *)&ifr) < 0) { - ::close(sock); - printf("WARNING: ioctl() failed setting up Linux tap device (set MAC)\n"); - return; - } - ifr.ifr_flags |= IFF_MULTICAST; ifr.ifr_flags |= IFF_UP; if (ioctl(sock,SIOCSIFFLAGS,(void *)&ifr) < 0) { @@ -225,7 +217,15 @@ LinuxEthernetTap::LinuxEthernetTap( // before they will accept MTU and MAC. For others it doesn't matter, but is // harmless. This was moved to the worker thread though so as not to block the // main ZeroTier loop. - usleep(500000); + usleep(200000); + + ifr.ifr_ifru.ifru_hwaddr.sa_family = ARPHRD_ETHER; + _mac.copyTo(ifr.ifr_ifru.ifru_hwaddr.sa_data,6); + if (ioctl(sock,SIOCSIFHWADDR,(void *)&ifr) < 0) { + ::close(sock); + printf("WARNING: ioctl() failed setting up Linux tap device (set MAC)\n"); + return; + } ifr.ifr_ifru.ifru_mtu = (int)_mtu; if (ioctl(sock,SIOCSIFMTU,(void *)&ifr) < 0) {