diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-10-09 16:40:16 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-10-10 11:33:13 +0200 |
| commit | 806ec7e38ad7a778a7aeb70772fad3f3d83dc6ab (patch) | |
| tree | 308eaa075390e8c4c3d0e1463df063f47ce6b9ca | |
| parent | 864503f26701a0001f53204c9363265bd4c2df6d (diff) | |
| download | mullvadvpn-806ec7e38ad7a778a7aeb70772fad3f3d83dc6ab.tar.xz mullvadvpn-806ec7e38ad7a778a7aeb70772fad3f3d83dc6ab.zip | |
Refresh routes when connecting in offline states
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 6 | ||||
| -rw-r--r-- | talpid-routing/src/unix/mod.rs | 8 |
2 files changed, 14 insertions, 0 deletions
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index 2bfc83e558..28731d617d 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -539,6 +539,12 @@ impl TunnelState for ConnectingState { retry_attempt: u32, ) -> (TunnelStateWrapper, TunnelStateTransition) { if shared_values.is_offline { + // FIXME: Temporary: Nudge route manager to update the default interface + #[cfg(target_os = "macos")] + if let Ok(handle) = shared_values.route_manager.handle() { + log::debug!("Poking route manager to update default routes"); + let _ = handle.refresh_routes(); + } return ErrorState::enter(shared_values, ErrorStateCause::IsOffline); } match shared_values.runtime.block_on( diff --git a/talpid-routing/src/unix/mod.rs b/talpid-routing/src/unix/mod.rs index 02dac8ac0f..863e3a3aac 100644 --- a/talpid-routing/src/unix/mod.rs +++ b/talpid-routing/src/unix/mod.rs @@ -93,6 +93,14 @@ impl RouteManagerHandle { response_rx.await.map_err(|_| Error::ManagerChannelDown) } + /// Get current non-tunnel default routes. + #[cfg(target_os = "macos")] + pub fn refresh_routes(&self) -> Result<(), Error> { + self.tx + .unbounded_send(RouteManagerCommand::RefreshRoutes) + .map_err(|_| Error::RouteManagerDown) + } + /// Ensure that packets are routed using the correct tables. #[cfg(target_os = "linux")] pub async fn create_routing_rules(&self, enable_ipv6: bool) -> Result<(), Error> { |
