Fix default device path selection on BSD.
authorEtienne Dechamps <etienne@edechamps.fr>
Sun, 21 Sep 2014 10:58:23 +0000 (12:58 +0200)
committerEtienne Dechamps <etienne@edechamps.fr>
Sun, 21 Sep 2014 11:00:23 +0000 (13:00 +0200)
Currently, if DeviceType = tap but Mode = router, the default
device path is /dev/tun0, which is wrong. This commit fixes that.

src/bsd/device.c

index cb65dbbf307484d1cd9c4dc5fdbe832c1bc3d278..d0d0b58cf733fe630fdac3672a6eaecfc20530b8 100644 (file)
@@ -63,27 +63,9 @@ static device_type_t device_type = DEVICE_TYPE_TUN;
 #endif
 
 static bool setup_device(void) {
-       char *type;
-
-       if(!get_config_string(lookup_config(config_tree, "Device"), &device)) {
-               if(routing_mode == RMODE_ROUTER)
-                       device = xstrdup(DEFAULT_TUN_DEVICE);
-               else
-                       device = xstrdup(DEFAULT_TAP_DEVICE);
-       }
-
-       if(!get_config_string(lookup_config(config_tree, "Interface"), &iface))
-               iface = NULL;
-#ifndef TAPGIFNAME
-       if (iface) {
-               logger(DEBUG_ALWAYS, LOG_WARNING, "Ignoring specified interface name '%s' as device rename is not supported on this platform", iface);
-               free(iface);
-               iface = NULL;
-       }
-#endif
-       if (!iface)
-               iface = xstrdup(strrchr(device, '/') ? strrchr(device, '/') + 1 : device);
+       get_config_string(lookup_config(config_tree, "Device"), &device);
 
+       char *type;
        if(get_config_string(lookup_config(config_tree, "DeviceType"), &type)) {
                if(!strcasecmp(type, "tun"))
                        /* use default */;
@@ -102,10 +84,29 @@ static bool setup_device(void) {
                        return false;
                }
        } else {
-               if(strstr(device, "tap") || routing_mode != RMODE_ROUTER)
+               if((device && strstr(device, "tap")) || routing_mode != RMODE_ROUTER)
                        device_type = DEVICE_TYPE_TAP;
        }
 
+       if(!device) {
+               if(device_type == DEVICE_TYPE_TAP)
+                       device = xstrdup(DEFAULT_TAP_DEVICE);
+               else
+                       device = xstrdup(DEFAULT_TUN_DEVICE);
+       }
+
+       if(!get_config_string(lookup_config(config_tree, "Interface"), &iface))
+               iface = NULL;
+#ifndef TAPGIFNAME
+       if (iface) {
+               logger(DEBUG_ALWAYS, LOG_WARNING, "Ignoring specified interface name '%s' as device rename is not supported on this platform", iface);
+               free(iface);
+               iface = NULL;
+       }
+#endif
+       if (!iface)
+               iface = xstrdup(strrchr(device, '/') ? strrchr(device, '/') + 1 : device);
+
        switch(device_type) {
 #ifdef ENABLE_TUNEMU
                case DEVICE_TYPE_TUNEMU: {