summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-03-16 11:55:37 +0100
committerDavid Lönnhager <david.l@mullvad.net>2022-03-18 10:27:41 +0100
commit57c3f78e298be5168dc2e69b7ba991128f7e12ad (patch)
tree7371fc16e1869bbda206b1f2ce2b4ac333eaecdf
parent38bcad1ba806f26f307a9f5ea91d53f4f83d994f (diff)
downloadmullvadvpn-57c3f78e298be5168dc2e69b7ba991128f7e12ad.tar.xz
mullvadvpn-57c3f78e298be5168dc2e69b7ba991128f7e12ad.zip
Only send new addresses to the ST driver if they have changed
-rw-r--r--talpid-core/src/split_tunnel/windows/mod.rs26
1 files changed, 23 insertions, 3 deletions
diff --git a/talpid-core/src/split_tunnel/windows/mod.rs b/talpid-core/src/split_tunnel/windows/mod.rs
index 5102039e47..e8b5455434 100644
--- a/talpid-core/src/split_tunnel/windows/mod.rs
+++ b/talpid-core/src/split_tunnel/windows/mod.rs
@@ -362,6 +362,8 @@ impl SplitTunnel {
}
};
+ let mut previous_addresses = (None, None, None, None);
+
while let Ok((request, response_tx)) = rx.recv() {
let response = match request {
Request::SetPaths(paths) => {
@@ -397,9 +399,27 @@ impl SplitTunnel {
tunnel_ipv4 = None;
tunnel_ipv6 = None;
}
- handle
- .register_ips(tunnel_ipv4, tunnel_ipv6, internet_ipv4, internet_ipv6)
- .map_err(Error::RegisterIps)
+ if previous_addresses.0 == tunnel_ipv4
+ && previous_addresses.1 == tunnel_ipv6
+ && previous_addresses.2 == internet_ipv4
+ && previous_addresses.3 == internet_ipv6
+ {
+ Ok(())
+ } else {
+ let result = handle
+ .register_ips(
+ tunnel_ipv4,
+ tunnel_ipv6,
+ internet_ipv4,
+ internet_ipv6,
+ )
+ .map_err(Error::RegisterIps);
+ if result.is_ok() {
+ previous_addresses =
+ (tunnel_ipv4, tunnel_ipv6, internet_ipv4, internet_ipv6);
+ }
+ result
+ }
}
};
if response_tx.send(response).is_err() {