Normally OpenVPN is configured with --dev {tun,tap}, but it is also possible to use --dev myvpn instead. In these situations, OpenVPN will request --dev-type as well to be able to set up a tun or tap device properly.
The 'dev' environment variable will contain the value provided by --dev. In those cases where the plug-in/script need to behave differently when using a tun device versus using a tap device, there are no possibilities for it to know what kind of device --dev myvpn would be. This patch adds a 'dev_type' environment variable which contains a string of the device type, either automatically discovered based on the --dev name, or set using the --dev-type option. Signed-off-by: David Sommerseth <d...@users.sourceforge.net> --- init.c | 4 ++++ misc.c | 3 +++ misc.h | 1 + 3 files changed, 8 insertions(+), 0 deletions(-) diff --git a/init.c b/init.c index b4a0384..f86aa35 100644 --- a/init.c +++ b/init.c @@ -1088,6 +1088,7 @@ do_open_tun (struct context *c) c->plugins, OPENVPN_PLUGIN_UP, c->c1.tuntap->actual_name, + dev_type_string (c->options.dev, c->options.dev_type), TUN_MTU_SIZE (&c->c2.frame), EXPANDED_SIZE (&c->c2.frame), print_in_addr_t (c->c1.tuntap->local, IA_EMPTY_IF_UNDEF, &gc), @@ -1123,6 +1124,7 @@ do_open_tun (struct context *c) c->plugins, OPENVPN_PLUGIN_UP, c->c1.tuntap->actual_name, + dev_type_string (c->options.dev, c->options.dev_type), TUN_MTU_SIZE (&c->c2.frame), EXPANDED_SIZE (&c->c2.frame), print_in_addr_t (c->c1.tuntap->local, IA_EMPTY_IF_UNDEF, &gc), @@ -1186,6 +1188,7 @@ do_close_tun (struct context *c, bool force) c->plugins, OPENVPN_PLUGIN_DOWN, tuntap_actual, + NULL, TUN_MTU_SIZE (&c->c2.frame), EXPANDED_SIZE (&c->c2.frame), print_in_addr_t (local, IA_EMPTY_IF_UNDEF, &gc), @@ -1208,6 +1211,7 @@ do_close_tun (struct context *c, bool force) c->plugins, OPENVPN_PLUGIN_DOWN, tuntap_actual, + NULL, TUN_MTU_SIZE (&c->c2.frame), EXPANDED_SIZE (&c->c2.frame), print_in_addr_t (local, IA_EMPTY_IF_UNDEF, &gc), diff --git a/misc.c b/misc.c index 815c057..a9882f1 100644 --- a/misc.c +++ b/misc.c @@ -174,6 +174,7 @@ run_up_down (const char *command, const struct plugin_list *plugins, int plugin_type, const char *arg, + const char *dev_type, int tun_mtu, int link_mtu, const char *ifconfig_local, @@ -191,6 +192,8 @@ run_up_down (const char *command, setenv_int (es, "tun_mtu", tun_mtu); setenv_int (es, "link_mtu", link_mtu); setenv_str (es, "dev", arg); + if (dev_type) + setenv_str (es, "dev_type", dev_type); if (!ifconfig_local) ifconfig_local = ""; diff --git a/misc.h b/misc.h index 4695d3e..d064043 100644 --- a/misc.h +++ b/misc.h @@ -93,6 +93,7 @@ void run_up_down (const char *command, const struct plugin_list *plugins, int plugin_type, const char *arg, + const char *dev_type, int tun_mtu, int link_mtu, const char *ifconfig_local, -- 1.7.2.3