summaryrefslogtreecommitdiff
path: root/osdep
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-14 19:21:56 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-14 19:21:56 -0700
commit508519b62a9a7eae47c1000d56c85c645dae0b55 (patch)
tree2eab162dea07f9c0924e46aac631c914576dd0ad /osdep
parentc9af603b9f6cf8fbc158ff00e776d97fb62e27a1 (diff)
downloadinfinitytier-508519b62a9a7eae47c1000d56c85c645dae0b55.tar.gz
infinitytier-508519b62a9a7eae47c1000d56c85c645dae0b55.zip
Tap driver load fix.
Diffstat (limited to 'osdep')
-rw-r--r--osdep/OSXEthernetTap.cpp29
1 files changed, 13 insertions, 16 deletions
diff --git a/osdep/OSXEthernetTap.cpp b/osdep/OSXEthernetTap.cpp
index 05eca4f8..d1c82fce 100644
--- a/osdep/OSXEthernetTap.cpp
+++ b/osdep/OSXEthernetTap.cpp
@@ -344,23 +344,20 @@ OSXEthernetTap::OSXEthernetTap(
Mutex::Lock _gl(globalTapCreateLock);
- if (stat("/dev/zt0",&stattmp)) {
- if (homePath) {
- long kextpid = (long)vfork();
- if (kextpid == 0) {
- ::chdir(homePath);
- OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
- ::execl("/sbin/kextload","/sbin/kextload","-q","-repository",homePath,"tap.kext",(const char *)0);
- ::_exit(-1);
- } else if (kextpid > 0) {
- int exitcode = -1;
- ::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");
+ if (::stat("/dev/zt0",&stattmp)) {
+ long kextpid = (long)vfork();
+ if (kextpid == 0) {
+ ::chdir(homePath);
+ OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
+ ::execl("/sbin/kextload","/sbin/kextload","-q","-repository",homePath,"tap.kext",(const char *)0);
+ ::_exit(-1);
+ } else if (kextpid > 0) {
+ int exitcode = -1;
+ ::waitpid(kextpid,&exitcode,0);
}
- 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.