diff options
| -rw-r--r-- | talpid-core/src/routing/linux.rs | 4 | ||||
| -rw-r--r-- | talpid-core/src/routing/unix.rs | 12 |
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 { |
