openvpn: Allow override of interface name
[openwrt/openwrt.git] / package / network / services / openvpn / files / openvpn.init
index a560b89ff243cbd37c430cfdac4216cdb8c443c6..a454eb4ba0197115881f60b3c096a741437e2978 100644 (file)
@@ -69,6 +69,40 @@ section_enabled() {
        [ $enable -gt 0 ] || [ $enabled -gt 0 ]
 }
 
+openvpn_get_dev() {
+       local dev dev_type
+       local name="$1"
+       local conf="$2"
+
+       # Do override only for configurations with config_file
+       config_get config_file "$name" config
+       [ -n "$config_file" ] || return
+
+       # Check there is someething to override
+       config_get dev "$name" dev
+       config_get dev_type "$name" dev_type
+       [ -n "$dev" ] || return
+
+       # If there is a no dev_type, try to guess it
+       if [ -z "$dev_type" ]; then
+               . /lib/functions/openvpn.sh
+
+               local odev odev_type
+               get_openvpn_option "$conf" odev dev
+               get_openvpn_option "$conf" odev_type dev-type
+               [ -n "$odev_type" ] || odev_type="$odev"
+
+               case "$odev_type" in
+                       tun*) dev_type="tun" ;;
+                       tap*) dev_type="tap" ;;
+                       *) return;;
+               esac
+       fi
+
+       # Return overrides
+       echo "--dev-type $dev_type --dev $dev"
+}
+
 openvpn_add_instance() {
        local name="$1"
        local dir="$2"
@@ -83,7 +117,8 @@ openvpn_add_instance() {
                --config "$conf" \
                --up "/usr/libexec/openvpn-hotplug up $name" \
                --down "/usr/libexec/openvpn-hotplug down $name" \
-               --script-security "${security:-2}"
+               --script-security "${security:-2}" \
+               $(openvpn_get_dev "$name" "$conf")
        procd_set_param file "$dir/$conf"
        procd_set_param term_timeout 15
        procd_set_param respawn