mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-01-18 18:56:24 +00:00
Tap driver load fix.
This commit is contained in:
parent
c9af603b9f
commit
508519b62a
@ -344,23 +344,20 @@ OSXEthernetTap::OSXEthernetTap(
|
|||||||
|
|
||||||
Mutex::Lock _gl(globalTapCreateLock);
|
Mutex::Lock _gl(globalTapCreateLock);
|
||||||
|
|
||||||
if (stat("/dev/zt0",&stattmp)) {
|
if (::stat("/dev/zt0",&stattmp)) {
|
||||||
if (homePath) {
|
long kextpid = (long)vfork();
|
||||||
long kextpid = (long)vfork();
|
if (kextpid == 0) {
|
||||||
if (kextpid == 0) {
|
::chdir(homePath);
|
||||||
::chdir(homePath);
|
OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
|
||||||
OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
|
::execl("/sbin/kextload","/sbin/kextload","-q","-repository",homePath,"tap.kext",(const char *)0);
|
||||||
::execl("/sbin/kextload","/sbin/kextload","-q","-repository",homePath,"tap.kext",(const char *)0);
|
::_exit(-1);
|
||||||
::_exit(-1);
|
} else if (kextpid > 0) {
|
||||||
} else if (kextpid > 0) {
|
int exitcode = -1;
|
||||||
int exitcode = -1;
|
::waitpid(kextpid,&exitcode,0);
|
||||||
::waitpid(kextpid,&exitcode,0);
|
|
||||||
}
|
|
||||||
::usleep(500); // give tap device driver time to start up and try again
|
|
||||||
if (stat("/dev/zt0",&stattmp))
|
|
||||||
throw std::runtime_error("/dev/zt# tap devices do not exist and cannot load tap.kext");
|
|
||||||
}
|
}
|
||||||
throw std::runtime_error("/dev/zt# tap devices do not exist and tap.kext not available");
|
::usleep(500); // give tap device driver time to start up and try again
|
||||||
|
if (::stat("/dev/zt0",&stattmp))
|
||||||
|
throw std::runtime_error("/dev/zt# tap devices do not exist and cannot load tap.kext");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to reopen the last device we had, if we had one and it's still unused.
|
// Try to reopen the last device we had, if we had one and it's still unused.
|
||||||
|
Loading…
Reference in New Issue
Block a user