[Openvpn-devel] options.c: do not force route delay when not using DHCP

Message ID 20191219132953.375-1-lstipakov@gmail.com
State Accepted
Headers show
Series [Openvpn-devel] options.c: do not force route delay when not using DHCP | expand

Commit Message

Lev Stipakov Dec. 19, 2019, 2:29 a.m. UTC
From: Lev Stipakov <lev@openvpn.net>

Route delay may be only necessary when we perform
DHCP handshake. When we use IPAPI / netsh / manual,
no delay needed.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
---
 src/openvpn/options.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

Comments

Simon Rozman Jan. 16, 2020, 2:19 a.m. UTC | #1
Code looks reasonable. Tested it.

Acked-by: Simon Rozman <simon@rozman.si>

Best regards,
Simon

> -----Original Message-----
> From: Lev Stipakov <lstipakov@gmail.com>
> Sent: Thursday, December 19, 2019 2:30 PM
> To: openvpn-devel@lists.sourceforge.net
> Cc: Lev Stipakov <lev@openvpn.net>
> Subject: [Openvpn-devel] [PATCH] options.c: do not force route delay
> when not using DHCP
> 
> From: Lev Stipakov <lev@openvpn.net>
> 
> Route delay may be only necessary when we perform DHCP handshake. When
> we use IPAPI / netsh / manual, no delay needed.
> 
> Signed-off-by: Lev Stipakov <lev@openvpn.net>
> ---
>  src/openvpn/options.c | 19 +++++++++++--------
>  1 file changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/src/openvpn/options.c b/src/openvpn/options.c index
> cebcbb07..a6f40e10 100644
> --- a/src/openvpn/options.c
> +++ b/src/openvpn/options.c
> @@ -3001,9 +3001,18 @@ options_postprocess_mutate_invariant(struct
> options *options)
>      }
> 
>  #ifdef _WIN32
> +    /* when using wintun, kernel doesn't send DHCP requests, so use
> netsh to set IP address and netmask */
> +    if (options->wintun)
> +    {
> +        options->tuntap_options.ip_win32_type = IPW32_SET_NETSH;
> +    }
> +
>      if ((dev == DEV_TYPE_TUN || dev == DEV_TYPE_TAP) && !options-
> >route_delay_defined)
>      {
> -        if (options->mode == MODE_POINT_TO_POINT)
> +        /* delay may only be necessary when we perform DHCP handshake
> */
> +        const bool dhcp = (options->tuntap_options.ip_win32_type ==
> IPW32_SET_DHCP_MASQ)
> +                          || (options->tuntap_options.ip_win32_type ==
> IPW32_SET_ADAPTIVE);
> +        if ((options->mode == MODE_POINT_TO_POINT) && dhcp)
>          {
>              options->route_delay_defined = true;
>              options->route_delay = 5; /* Vista sometimes has a race
> without this */ @@ -3016,14 +3025,8 @@
> options_postprocess_mutate_invariant(struct options *options)
>          options->ifconfig_noexec = false;
>      }
> 
> -    /* for wintun kernel doesn't send DHCP requests, so use netsh to
> set IP address and netmask */
> -    if (options->wintun)
> -    {
> -        options->tuntap_options.ip_win32_type = IPW32_SET_NETSH;
> -    }
> -
>      remap_redirect_gateway_flags(options);
> -#endif
> +#endif /* ifdef _WIN32 */
> 
>  #if P2MP_SERVER
>      /*
> --
> 2.17.1
> 
> 
> 
> _______________________________________________
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel
Gert Doering Jan. 18, 2020, 11:19 p.m. UTC | #2
Your patch has been applied to the master branch.

(Stared a bit at the code, sounds reasonable, no testing whatsoever)

commit dd4647acf40b26bb8d7403debc00a342c663d618
Author: Lev Stipakov
Date:   Thu Dec 19 15:29:53 2019 +0200

     options.c: do not force route delay when not using DHCP

     Signed-off-by: Lev Stipakov <lev@openvpn.net>
     Acked-By: Simon Rozman <simon@rozman.si>
     Message-Id: <20191219132953.375-1-lstipakov@gmail.com>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19257.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

Patch

diff --git a/src/openvpn/options.c b/src/openvpn/options.c
index cebcbb07..a6f40e10 100644
--- a/src/openvpn/options.c
+++ b/src/openvpn/options.c
@@ -3001,9 +3001,18 @@  options_postprocess_mutate_invariant(struct options *options)
     }
 
 #ifdef _WIN32
+    /* when using wintun, kernel doesn't send DHCP requests, so use netsh to set IP address and netmask */
+    if (options->wintun)
+    {
+        options->tuntap_options.ip_win32_type = IPW32_SET_NETSH;
+    }
+
     if ((dev == DEV_TYPE_TUN || dev == DEV_TYPE_TAP) && !options->route_delay_defined)
     {
-        if (options->mode == MODE_POINT_TO_POINT)
+        /* delay may only be necessary when we perform DHCP handshake */
+        const bool dhcp = (options->tuntap_options.ip_win32_type == IPW32_SET_DHCP_MASQ)
+                          || (options->tuntap_options.ip_win32_type == IPW32_SET_ADAPTIVE);
+        if ((options->mode == MODE_POINT_TO_POINT) && dhcp)
         {
             options->route_delay_defined = true;
             options->route_delay = 5; /* Vista sometimes has a race without this */
@@ -3016,14 +3025,8 @@  options_postprocess_mutate_invariant(struct options *options)
         options->ifconfig_noexec = false;
     }
 
-    /* for wintun kernel doesn't send DHCP requests, so use netsh to set IP address and netmask */
-    if (options->wintun)
-    {
-        options->tuntap_options.ip_win32_type = IPW32_SET_NETSH;
-    }
-
     remap_redirect_gateway_flags(options);
-#endif
+#endif /* ifdef _WIN32 */
 
 #if P2MP_SERVER
     /*