This commit is contained in:
Joseph Henry 2021-09-10 13:26:54 -07:00
commit 8d21ae9813
4 changed files with 26 additions and 9 deletions

View File

@ -209,8 +209,30 @@ MacEthernetTap::MacEthernetTap(
::_exit(-1);
} else {
_agentPid = apid;
// Wait up to 10 seconds for the subprocess to actually create the device. This prevents
// things like routes from being created before the device exists.
for(int waitLoops=0;;++waitLoops) {
struct ifaddrs *ifa = (struct ifaddrs *)0;
if (!getifaddrs(&ifa)) {
struct ifaddrs *p = ifa;
while (p) {
if ((p->ifa_name)&&(!strcmp(devstr, p->ifa_name))) {
waitLoops = -1;
break;
}
p = p->ifa_next;
}
freeifaddrs(ifa);
}
if (waitLoops == -1) {
break;
} else if (waitLoops >= 100) { // 10 seconds
throw std::runtime_error("feth device creation timed out");
}
Thread::sleep(100);
}
}
Thread::sleep(100); // this causes them to come up in a more user-friendly order on launch
_thread = Thread::start(this);
}

View File

@ -176,10 +176,10 @@ static void die()
close(s_ndrvfd);
if (s_bpffd >= 0)
close(s_bpffd);
if (s_deviceName[0])
run("/sbin/ifconfig",s_deviceName,"destroy",(char *)0);
if (s_peerDeviceName[0])
run("/sbin/ifconfig",s_peerDeviceName,"destroy",(char *)0);
if (s_deviceName[0])
run("/sbin/ifconfig",s_deviceName,"destroy",(char *)0);
}
static inline void close_inherited_fds()

View File

@ -405,9 +405,7 @@ ManagedRoute::ManagedRoute(const InetAddress &target,const InetAddress &via,cons
}
ManagedRoute::~ManagedRoute()
{
this->remove();
}
{}
/* Linux NOTE: for default route override, some Linux distributions will
* require a change to the rp_filter parameter. A value of '1' will prevent

View File

@ -542,10 +542,7 @@ public:
~NetworkState()
{
this->managedRoutes.clear();
#ifdef __APPLE__
Thread::sleep(10);
this->tap.reset();
#endif
}
std::shared_ptr<EthernetTap> tap;