Trac #637
---
 src/openvpn/route.c | 8 ++++++++
 src/openvpn/tun.c   | 6 +++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 1775a9c..cf5a067 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1623,6 +1623,10 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct 
tuntap *tt, unsigned int fla

 #elif defined (WIN32)

+  struct buffer out = alloc_buf_gc (64, &gc);
+  buf_printf (&out, "interface=%d", tt->adapter_index );
+  device = buf_bptr(&out);
+
   /* netsh interface ipv6 add route 2001:db8::/32 MyTunDevice */
   argv_printf (&argv, "%s%sc interface ipv6 add route %s/%d %s",
               get_win_sys_path(),
@@ -1954,6 +1958,10 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const 
struct tuntap *tt, unsigne

 #elif defined (WIN32)

+  struct buffer out = alloc_buf_gc (64, &gc);
+  buf_printf (&out, "interface=%d", tt->adapter_index );
+  device = buf_bptr(&out);
+
   /* netsh interface ipv6 delete route 2001:db8::/32 MyTunDevice */
   argv_printf (&argv, "%s%sc interface ipv6 delete route %s/%d %s",
               get_win_sys_path(),
diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index b4223b1..b08c827 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -1231,11 +1231,13 @@ do_ifconfig (struct tuntap *tt,
       {
        char * saved_actual;
        char iface[64];
+       DWORD idx;

        if (!strcmp (actual, "NULL"))
          msg (M_FATAL, "Error: When using --tun-ipv6, if you have more than 
one TAP-Windows adapter, you must also specify --dev-node");

-       openvpn_snprintf(iface, sizeof(iface), "interface=%lu", 
get_adapter_index_flexible(actual));
+       idx = get_adapter_index_flexible(actual);
+       openvpn_snprintf(iface, sizeof(iface), "interface=%lu", idx);

        /* example: netsh interface ipv6 set address interface=42 
2001:608:8003::d store=active */
        argv_printf (&argv,
@@ -1253,6 +1255,8 @@ do_ifconfig (struct tuntap *tt,
         */
        saved_actual = tt->actual_name;
        tt->actual_name = (char*) actual;
+       /* we use adapter_index in add_route_ipv6 */
+       tt->adapter_index = idx;
        add_route_connected_v6_net(tt, es);
        tt->actual_name = saved_actual;
       }
-- 
1.9.1


Reply via email to