summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-09-04 14:26:25 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-09-05 13:20:32 +0200
commit3de82dd8710afeea8ed0c4d4843f1406d11ec160 (patch)
tree5d2a32e71d0b828b71d499fe2e4f3d320a084b9f
parent853a60fd3c008f7e9ed8ab292727d86ad70efc1c (diff)
downloadmullvadvpn-3de82dd8710afeea8ed0c4d4843f1406d11ec160.tar.xz
mullvadvpn-3de82dd8710afeea8ed0c4d4843f1406d11ec160.zip
Add back default tun route if deleted
-rw-r--r--talpid-routing/src/unix/macos/mod.rs12
1 files changed, 8 insertions, 4 deletions
diff --git a/talpid-routing/src/unix/macos/mod.rs b/talpid-routing/src/unix/macos/mod.rs
index 3e5d8b0aed..7720d79d08 100644
--- a/talpid-routing/src/unix/macos/mod.rs
+++ b/talpid-routing/src/unix/macos/mod.rs
@@ -254,14 +254,14 @@ impl RouteManagerImpl {
}
}
- if let Err(error) = self.handle_route_change(route).await {
+ if let Err(error) = self.handle_route_change(route, true).await {
log::error!("Failed to process route change: {error}");
}
}
Ok(RouteSocketMessage::AddRoute(route))
| Ok(RouteSocketMessage::ChangeRoute(route)) => {
// Refresh routes that are using the default interface
- if let Err(error) = self.handle_route_change(route).await {
+ if let Err(error) = self.handle_route_change(route, false).await {
log::error!("Failed to process route change: {error}");
}
}
@@ -274,7 +274,11 @@ impl RouteManagerImpl {
}
/// Update routes that use the non-tunnel default interface
- async fn handle_route_change(&mut self, route: data::RouteMessage) -> Result<()> {
+ async fn handle_route_change(
+ &mut self,
+ route: data::RouteMessage,
+ is_deletion: bool,
+ ) -> Result<()> {
// Ignore routes that aren't default routes
if !route.is_default().map_err(Error::InvalidData)? {
return Ok(());
@@ -288,7 +292,7 @@ impl RouteManagerImpl {
let tun_gateway_link_addr =
tunnel_route.gateway().and_then(|addr| addr.as_link_addr());
- if new_gateway_link_addr == tun_gateway_link_addr {
+ if new_gateway_link_addr == tun_gateway_link_addr && !is_deletion {
return Ok(());
}
}