Trac #637

Signed-off-by: Lev Stipakov <lstipa...@gmail.com>
---
 src/openvpn/route.c | 16 ++++++++++++----
 src/openvpn/tun.c   |  2 ++
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 4a60345..2012b5c 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1770,13 +1770,17 @@ 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);
   if ( r6->adapter_index )             /* vpn server special route */
     {
-      struct buffer out = alloc_buf_gc (64, &gc);
       buf_printf (&out, "interface=%d", r6->adapter_index );
-      device = buf_bptr(&out);
       gateway_needed = true;
     }
+  else
+    {
+      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",
@@ -2168,13 +2172,17 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const 
struct tuntap *tt, unsigne

 #elif defined (WIN32)

+  struct buffer out = alloc_buf_gc (64, &gc);
   if ( r6->adapter_index )             /* vpn server special route */
     {
-      struct buffer out = alloc_buf_gc (64, &gc);
       buf_printf (&out, "interface=%d", r6->adapter_index );
-      device = buf_bptr(&out);
       gateway_needed = true;
     }
+  else
+    {
+      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",
diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 014d988..aed5e75 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -1328,6 +1328,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