diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-09-04 14:26:25 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-09-05 13:20:32 +0200 |
| commit | 3de82dd8710afeea8ed0c4d4843f1406d11ec160 (patch) | |
| tree | 5d2a32e71d0b828b71d499fe2e4f3d320a084b9f | |
| parent | 853a60fd3c008f7e9ed8ab292727d86ad70efc1c (diff) | |
| download | mullvadvpn-3de82dd8710afeea8ed0c4d4843f1406d11ec160.tar.xz mullvadvpn-3de82dd8710afeea8ed0c4d4843f1406d11ec160.zip | |
Add back default tun route if deleted
| -rw-r--r-- | talpid-routing/src/unix/macos/mod.rs | 12 |
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(()); } } |
