From: Christopher Schenk <christopher.sch...@hotmail.com>

---
 src/openvpn/tun.c | 39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 48a8fdf7..93d028c8 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -69,6 +69,12 @@ static void netsh_ifconfig(const struct tuntap_options *to,
                            const in_addr_t netmask,
                            const unsigned int flags);
 
+static void netsh_set_mtu_ipv4(const char *flex_name,
+                               const int mtu);
+
+static void netsh_set_mtu_ipv6(const char *flex_name,
+                               const int mtu);
+
 static void netsh_set_dns6_servers(const struct in6_addr *addr_list,
                                    const int addr_len,
                                    const char *flex_name);
@@ -1000,6 +1006,7 @@ do_ifconfig_ipv6(struct tuntap *tt, const char *ifname, 
int tun_mtu,
         netsh_command(&argv, 4, M_FATAL);
         /* set ipv6 dns servers if any are specified */
         netsh_set_dns6_servers(tt->options.dns6, tt->options.dns6_len, ifname);
+        netsh_set_mtu_ipv6(ifname, tun_mtu);
     }
 
     /* explicit route needed */
@@ -1391,9 +1398,9 @@ do_ifconfig_ipv4(struct tuntap *tt, const char *ifname, 
int tun_mtu,
             case IPW32_SET_NETSH:
                 netsh_ifconfig(&tt->options, ifname, tt->local,
                                tt->adapter_netmask, NI_IP_NETMASK|NI_OPTIONS);
-
                 break;
         }
+               netsh_set_mtu_ipv4(ifname, tun_mtu);
     }
 
 #else  /* if defined(TARGET_LINUX) */
@@ -5236,6 +5243,36 @@ out:
     return ret;
 }
 
+static void
+netsh_set_mtu_ipv4(const char *flex_name,
+                   const int mtu)
+{
+       struct argv argv = argv_new();
+       argv_printf(&argv, "%s%sc interface ipv4 set subinterface %s mtu = %d 
store=active",
+               get_win_sys_path(),
+               NETSH_PATH_SUFFIX,
+               flex_name,
+               mtu);
+
+       netsh_command(&argv, 3, M_WARN);
+       argv_reset(&argv);
+}
+
+static void
+netsh_set_mtu_ipv6(const char *flex_name,
+       const int mtu)
+{
+       struct argv argv = argv_new();
+       argv_printf(&argv, "%s%sc interface ipv6 set subinterface %s mtu = %d 
store=active",
+               get_win_sys_path(),
+               NETSH_PATH_SUFFIX,
+               flex_name,
+               mtu);
+
+       netsh_command(&argv, 3, M_WARN);
+       argv_reset(&argv);
+}
+
 /*
  * Return a TAP name for netsh commands.
  */
-- 
2.21.0.windows.1



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

Reply via email to