summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-09-15 12:46:57 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-09-28 12:41:50 +0200
commita247e6220fe924c89923beae638dfc182797ba18 (patch)
tree2ffa5de8ee4ba2f777b4bfe9001dca44696fad6e
parent7bb46817d71859115d4c3f26f09ed212e4dc50a2 (diff)
downloadmullvadvpn-a247e6220fe924c89923beae638dfc182797ba18.tar.xz
mullvadvpn-a247e6220fe924c89923beae638dfc182797ba18.zip
Disable unused features on IP interface
-rw-r--r--talpid-core/src/tunnel/wireguard/wireguard_nt.rs17
-rw-r--r--talpid-core/src/windows.rs2
-rw-r--r--windows/libshared/src/libshared/network/interfaceutils.cpp1
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);