summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/routing/linux.rs4
-rw-r--r--talpid-core/src/routing/unix.rs12
2 files changed, 16 insertions, 0 deletions
diff --git a/talpid-core/src/routing/linux.rs b/talpid-core/src/routing/linux.rs
index b1087bfdc0..d9f272639d 100644
--- a/talpid-core/src/routing/linux.rs
+++ b/talpid-core/src/routing/linux.rs
@@ -445,6 +445,10 @@ impl RouteManagerImplInner {
log::debug!("Adding routes: {:?}", routes);
self.add_required_routes(routes).await?;
}
+ RouteManagerCommand::ClearRoutes => {
+ log::debug!("Clearing routes");
+ self.cleanup_routes().await;
+ }
}
Ok(())
}
diff --git a/talpid-core/src/routing/unix.rs b/talpid-core/src/routing/unix.rs
index f15877f494..151c642c41 100644
--- a/talpid-core/src/routing/unix.rs
+++ b/talpid-core/src/routing/unix.rs
@@ -45,6 +45,7 @@ pub enum Error {
#[derive(Debug)]
pub enum RouteManagerCommand {
AddRoutes(HashSet<RequiredRoute>),
+ ClearRoutes,
Shutdown(oneshot::Sender<()>),
}
@@ -113,6 +114,17 @@ impl RouteManager {
Err(Error::RouteManagerDown)
}
}
+
+ /// Removes all routes previously applied in [`RouteManager::new`] or
+ /// [`RouteManager::add_routes`].
+ pub fn clear_routes(&mut self) -> Result<(), Error> {
+ if let Some(tx) = &self.manage_tx {
+ let _ = tx.unbounded_send(RouteManagerCommand::ClearRoutes);
+ Ok(())
+ } else {
+ Err(Error::RouteManagerDown)
+ }
+ }
}
impl Drop for RouteManager {