diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-09-15 12:46:57 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-09-28 12:41:50 +0200 |
| commit | a247e6220fe924c89923beae638dfc182797ba18 (patch) | |
| tree | 2ffa5de8ee4ba2f777b4bfe9001dca44696fad6e | |
| parent | 7bb46817d71859115d4c3f26f09ed212e4dc50a2 (diff) | |
| download | mullvadvpn-a247e6220fe924c89923beae638dfc182797ba18.tar.xz mullvadvpn-a247e6220fe924c89923beae638dfc182797ba18.zip | |
Disable unused features on IP interface
| -rw-r--r-- | talpid-core/src/tunnel/wireguard/wireguard_nt.rs | 17 | ||||
| -rw-r--r-- | talpid-core/src/windows.rs | 2 | ||||
| -rw-r--r-- | windows/libshared/src/libshared/network/interfaceutils.cpp | 1 |
3 files changed, 13 insertions, 7 deletions
diff --git a/talpid-core/src/tunnel/wireguard/wireguard_nt.rs b/talpid-core/src/tunnel/wireguard/wireguard_nt.rs index 723e3f00d0..2bd14f644d 100644 --- a/talpid-core/src/tunnel/wireguard/wireguard_nt.rs +++ b/talpid-core/src/tunnel/wireguard/wireguard_nt.rs @@ -25,6 +25,8 @@ use winapi::{ in6addr::IN6_ADDR, inaddr::IN_ADDR, minwindef::{BOOL, FARPROC, HINSTANCE, HMODULE}, + nldef::RouterDiscoveryDisabled, + ntdef::FALSE, winerror::ERROR_MORE_DATA, ws2def::{ADDRESS_FAMILY, AF_INET, AF_INET6}, ws2ipdef::SOCKADDR_INET, @@ -462,10 +464,10 @@ impl WgNtTunnel { ); } device.set_config(config)?; - set_interface_mtu(&device.luid(), AF_INET as u16, u32::from(config.mtu)) + prepare_interface(&device.luid(), AF_INET as u16, u32::from(config.mtu)) .map_err(Error::SetTunnelIpv4MtuError)?; if config.tunnel.addresses.iter().any(|addr| addr.is_ipv6()) { - set_interface_mtu(&device.luid(), AF_INET6 as u16, u32::from(config.mtu)) + prepare_interface(&device.luid(), AF_INET6 as u16, u32::from(config.mtu)) .map_err(Error::SetTunnelIpv6MtuError)?; } device @@ -979,13 +981,16 @@ unsafe fn deserialize_config( Ok((interface, peers)) } -fn set_interface_mtu(luid: &NET_LUID, family: u16, mtu: u32) -> io::Result<()> { - let family = windows::AddressFamily::try_from_af_family(family).map_err(|error| { - io::Error::new(io::ErrorKind::InvalidInput, error) - })?; +fn prepare_interface(luid: &NET_LUID, family: u16, mtu: u32) -> io::Result<()> { + let family = windows::AddressFamily::try_from_af_family(family) + .map_err(|error| io::Error::new(io::ErrorKind::InvalidInput, error))?; let mut iface = windows::get_ip_interface_entry(family, luid)?; iface.SitePrefixLength = 0; iface.NlMtu = mtu; + iface.RouterDiscoveryBehavior = RouterDiscoveryDisabled; + iface.DadTransmits = 0; + iface.ManagedAddressConfigurationSupported = FALSE; + iface.OtherStatefulConfigurationSupported = FALSE; windows::set_ip_interface_entry(&iface) } diff --git a/talpid-core/src/windows.rs b/talpid-core/src/windows.rs index e39bb1037e..03cd8a9c74 100644 --- a/talpid-core/src/windows.rs +++ b/talpid-core/src/windows.rs @@ -1,8 +1,8 @@ use std::{ ffi::OsStr, fmt, io, mem, - os::windows::{ffi::OsStrExt, io::RawHandle}, net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}, + os::windows::{ffi::OsStrExt, io::RawHandle}, ptr, sync::Mutex, time::{Duration, Instant}, diff --git a/windows/libshared/src/libshared/network/interfaceutils.cpp b/windows/libshared/src/libshared/network/interfaceutils.cpp index 28263f383b..fba4d71ba0 100644 --- a/windows/libshared/src/libshared/network/interfaceutils.cpp +++ b/windows/libshared/src/libshared/network/interfaceutils.cpp @@ -99,6 +99,7 @@ void InterfaceUtils::AddDeviceIpAddresses(NET_LUID device, const std::vector<SOC row.InterfaceLuid = device; row.Address = address; + row.DadState = IpDadStatePreferred; const auto status = CreateUnicastIpAddressEntry(&row); |
