summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-10-09 16:40:16 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-10-10 11:33:13 +0200
commit806ec7e38ad7a778a7aeb70772fad3f3d83dc6ab (patch)
tree308eaa075390e8c4c3d0e1463df063f47ce6b9ca
parent864503f26701a0001f53204c9363265bd4c2df6d (diff)
downloadmullvadvpn-806ec7e38ad7a778a7aeb70772fad3f3d83dc6ab.tar.xz
mullvadvpn-806ec7e38ad7a778a7aeb70772fad3f3d83dc6ab.zip
Refresh routes when connecting in offline states
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs6
-rw-r--r--talpid-routing/src/unix/mod.rs8
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> {