Re: [Openvpn-devel] [PATCH v2 7/7] wintun: clear adapter settings on tun close

2019-11-09 Thread Simon Rozman
Hi,

> -Original Message-
> From: Lev Stipakov [mailto:lstipa...@gmail.com]
> Sent: Thursday, November 7, 2019 6:45 PM
> To: openvpn-devel@lists.sourceforge.net
> Cc: Lev Stipakov 
> Subject: [Openvpn-devel] [PATCH v2 7/7] wintun: clear adapter settings on
tun
> close
> 
>  }
> +else
> +if (tt->wintun)
> +{
> +netsh_delete_address_dns(tt, false, );
> +}
>  #endif

if (tt->wintun && tt->options.msg_channel)
{
...
}
else
if (tt->ipapi_context_defined)
{
...
}
else
if (tt->wintun)
{
...
}

This construct got a bit convoluted.

Otherwise, LGTM.

Best regards,
Simon



smime.p7s
Description: S/MIME cryptographic signature
___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel


[Openvpn-devel] [PATCH v2 7/7] wintun: clear adapter settings on tun close

2019-11-07 Thread Lev Stipakov
From: Lev Stipakov 

With tap-windows6 we clear adapter settings with DHCP,
but since wintun doesn't do DHCP we do it with netsh.

Signed-off-by: Lev Stipakov 
---
 src/openvpn/tun.c | 79 +++
 1 file changed, 50 insertions(+), 29 deletions(-)

diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index c3ea4a8..9bdd707 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -6369,6 +6369,50 @@ tun_show_debug(struct tuntap *tt)
 }
 }
 
+static void
+netsh_delete_address_dns(const struct tuntap *tt, bool ipv6, struct gc_arena 
*gc)
+{
+const char* ifconfig_ip_local;
+struct argv argv = argv_new();
+
+/* "store=active" is needed in Windows 8(.1) to delete the
+ * address we added (pointed out by Cedric Tabary).
+ */
+
+ /* netsh interface ipvX delete address \"%s\" %s */
+if (ipv6)
+{
+ifconfig_ip_local = print_in6_addr(tt->local_ipv6, 0, gc);
+}
+else
+{
+ifconfig_ip_local = print_in_addr_t(tt->local, 0, gc);
+}
+argv_printf(,
+"%s%sc interface %s delete address %s %s store=active",
+get_win_sys_path(),
+NETSH_PATH_SUFFIX,
+ipv6 ? "ipv6" : "ipv4",
+tt->actual_name,
+ifconfig_ip_local);
+
+netsh_command(, 1, M_WARN);
+
+/* delete ipvX dns servers if any were set */
+int len = ipv6 ? tt->options.dns6_len : tt->options.dns_len;
+if (len > 0)
+{
+argv_printf(,
+"%s%sc interface %s delete dns %s all",
+get_win_sys_path(),
+NETSH_PATH_SUFFIX,
+ipv6 ? "ipv6" : "ipv4",
+tt->actual_name);
+netsh_command(, 1, M_WARN);
+}
+argv_reset();
+}
+
 void
 close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx)
 {
@@ -6391,35 +6435,7 @@ close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx)
 }
 else
 {
-const char *ifconfig_ipv6_local;
-struct argv argv = argv_new();
-
-/* "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,  );
-argv_printf(,
-"%s%sc interface ipv6 delete address %s %s 
store=active",
-get_win_sys_path(),
-NETSH_PATH_SUFFIX,
-tt->actual_name,
-ifconfig_ipv6_local);
-
-netsh_command(, 1, M_WARN);
-
-/* delete ipv6 dns servers if any were set */
-if (tt->options.dns6_len > 0)
-{
-argv_printf(,
-"%s%sc interface ipv6 delete dns %s all",
-get_win_sys_path(),
-NETSH_PATH_SUFFIX,
-tt->actual_name);
-netsh_command(, 1, M_WARN);
-}
-argv_reset();
+netsh_delete_address_dns(tt, true, );
 }
 }
 #if 1
@@ -6441,6 +6457,11 @@ close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx)
 strerror_win32(status, ));
 }
 }
+else
+if (tt->wintun)
+{
+netsh_delete_address_dns(tt, false, );
+}
 #endif
 
 dhcp_release(tt);
-- 
2.7.4



___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel