]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Use adapter index for add/delete_route_ipv6
authorLev Stipakov <lstipakov@gmail.com>
Fri, 11 Dec 2015 22:37:52 +0000 (00:37 +0200)
committerGert Doering <gert@greenie.muc.de>
Sun, 13 Dec 2015 18:54:15 +0000 (19:54 +0100)
Trac #637

Signed-off-by: Lev Stipakov <lstipakov@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1449873472-14954-1-git-send-email-lstipakov@gmail.com>
URL: http://article.gmane.org/gmane.network.openvpn.devel/10759
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/route.c
src/openvpn/tun.c

index 4a60345d451931c220429714f98ded0f660ee9eb..2012b5c0f5e2140febe3bc942d47d2568428505f 100644 (file)
@@ -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",
index 014d988541b0a513ab6e4f41adc09c29c9278278..efcd22541cfc3fcccc102ef6e3e6f04c5c117636 100644 (file)
@@ -1306,11 +1306,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,
@@ -1328,6 +1330,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;
       }