Imported Upstream version 0.3.3
[anytun.git] / src / bsd / tunDevice.cpp
index 4fdd5fd..9cd58df 100644 (file)
@@ -54,7 +54,7 @@
 
 #define DEVICE_FILE_MAX 255
 
-TunDevice::TunDevice(std::string dev_name, std::string dev_type, std::string ifcfg_addr, u_int16_t ifcfg_prefix) : conf_(dev_name, dev_type, ifcfg_addr, ifcfg_prefix, 1400)
+TunDevice::TunDevice(std::string dev_name, std::string dev_type, std::string ifcfg_addr, u_int16_t ifcfg_prefix) : conf_(dev_name, dev_type, ifcfg_addr, ifcfg_prefix, 1400),sys_exec_(NULL)
 {
   std::string device_file = "/dev/";
   bool dynamic = true;
@@ -149,7 +149,7 @@ void TunDevice::init_post()
   }
 }
 
-#elif defined(__GNUC__) && defined(__FreeBSD__)
+#elif defined(__GNUC__) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
 
 void TunDevice::init_post()
 {
@@ -262,7 +262,7 @@ void TunDevice::do_ifconfig()
   else {
 #if defined(__GNUC__) && defined(__OpenBSD__)
     args.push_back("link0");
-#elif defined(__GNUC__) && defined(__FreeBSD__)
+#elif defined(__GNUC__) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
     args.push_back("up");
 #elif defined(__GNUC__) && defined(__NetBSD__)
         // nothing to be done here
@@ -270,6 +270,12 @@ void TunDevice::do_ifconfig()
  #error This Device works just for OpenBSD, FreeBSD or NetBSD
 #endif
   }
+  sys_exec_ = new SysExec("/sbin/ifconfig", args);
+}
 
-  anytun_exec("/sbin/ifconfig", args);
+void TunDevice::waitUntilReady()
+{
+  if(sys_exec_)
+    SysExec::waitAndDestroy(sys_exec_);
 }
+