Hi,

On Sun, Apr 13, 2014 at 03:39:20PM +0200, Cedric Tabary wrote:
> Bug is still there in this build,
> I think you patched the route removal but not the ipv6 address removal
> on the interface itself.

Next try.  Thanks for your patience :-) - this patch + installer do the
"store=active" both on the "address delete" and on the "route delete",
so it would be good to know that it works on both ends of the spectrum,
Win XP and Win 8.1

  http://www.greenie.net/ipv6/openvpn-install-2.3.3-win8fix-I100-i686.exe
  http://www.greenie.net/ipv6/openvpn-install-2.3.3-win8fix-I100-x86_64.exe

gert
-- 
USENET is *not* the non-clickable part of WWW!
                                                           //www.muc.de/~gert/
Gert Doering - Munich, Germany                             g...@greenie.muc.de
fax: +49-89-35655025                        g...@net.informatik.tu-muenchen.de
From ee4a33029d1aafd1aa3c85f0317a93612c03ea1a Mon Sep 17 00:00:00 2001
From: Gert Doering <g...@greenie.muc.de>
List-Post: openvpn-devel@lists.sourceforge.net
Date: Sun, 13 Apr 2014 13:12:02 +0200
Subject: [PATCH] IPv6 address/route delete fix for Win8

Use "store=active" for IPv6 address and route deletion - seems to be
required on Windows 8 and up, and not doing it will break OpenVPN
reconnection (old addresses are not properly deleted, thus address can
not be configured on connect).

Reported-by: Cedric <cedric+open...@bgtn.net>
Signed-off-by: Gert Doering <g...@greenie.muc.de>
---
 src/openvpn/route.c | 8 +++++++-
 src/openvpn/tun.c   | 6 +++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 6333ee7..f470f7e 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1974,10 +1974,16 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const 
struct tuntap *tt, unsigne
     argv_printf_cat (&argv, "METRIC %d", r->metric);
 #endif
 
+  /* Windows XP to 7 "just delete" routes, wherever they came from, but
+   * in Windows 8(.1?), if you create them with "store=active", this is
+   * how you should delete them as well (pointed out by Cedric Tabary)
+   */
+  argv_printf_cat( &argv, " store=active" );
+
   argv_msg (D_ROUTE, &argv);
 
   netcmd_semaphore_lock ();
-  openvpn_execve_check (&argv, es, 0, "ERROR: Windows route add ipv6 command 
failed");
+  openvpn_execve_check (&argv, es, 0, "ERROR: Windows route delete ipv6 
command failed");
   netcmd_semaphore_release ();
 
 #elif defined (TARGET_SOLARIS)
diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 976cc52..ba4b15e 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -5196,10 +5196,14 @@ close_tun (struct tuntap *tt)
          /* remove route pointing to interface */
          delete_route_connected_v6_net(tt, NULL);
 
+         /* "store=active" is needed in Windows 8(.1) to delete the
+          * address we added (pointed out by Cedric Tabary).
+          */
+
          /* netsh interface ipv6 delete address \"%s\" %s */
          ifconfig_ipv6_local = print_in6_addr (tt->local_ipv6, 0,  &gc);
          argv_printf (&argv,
-                   "%s%sc interface ipv6 delete address %s %s",
+                   "%s%sc interface ipv6 delete address %s %s store=active",
                     get_win_sys_path(),
                     NETSH_PATH_SUFFIX,
                     tt->actual_name,
-- 
1.8.3.2

Attachment: pgpeKuwBbXnvJ.pgp
Description: PGP signature

Reply via email to