summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-05-06 21:56:14 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-05-13 17:56:36 +0200
commit256cfc5f85b93f72b264ce37ba4af891cd095864 (patch)
tree5d90011a0b730a8bb5d19a6d38587c918db4fcbb /talpid-core/src
parente7da57005597765885e73c354b24fc75f04a027c (diff)
downloadmullvadvpn-256cfc5f85b93f72b264ce37ba4af891cd095864.tar.xz
mullvadvpn-256cfc5f85b93f72b264ce37ba4af891cd095864.zip
Add RouteManager::clear_routes
Diffstat (limited to 'talpid-core/src')
-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 {