diff options
| -rw-r--r-- | talpid-core/src/routing/linux.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/talpid-core/src/routing/linux.rs b/talpid-core/src/routing/linux.rs index 2adabc556a..94c00f14da 100644 --- a/talpid-core/src/routing/linux.rs +++ b/talpid-core/src/routing/linux.rs @@ -351,6 +351,34 @@ impl RouteManagerImplInner { } async fn cleanup_routes(&mut self) { + for required_route in &self.required_default_routes { + let best_node = if required_route.destination.is_ipv4() { + self.best_default_node_v4.clone() + } else { + self.best_default_node_v6.clone() + }; + + let best_node = match best_node { + None => continue, + Some(node) => node, + }; + + let route = + Route::new(best_node, required_route.destination).table(required_route.table_id); + if let Err(e) = self.delete_route(&route).await { + if let Error::NetlinkError(err) = &e { + if let rtnetlink::ErrorKind::NetlinkError(msg) = err.get_ref().kind() { + // -3 means that the route doesn't exist anymore anyway + if msg.code == -3 { + continue; + } + } + } + log::error!("Failed to remove route - {} - {}", route, e); + } + } + self.required_default_routes.clear(); + for route in self.added_routes.drain().collect::<Vec<_>>().iter() { if let Err(e) = self.delete_route(&route).await { if let Error::NetlinkError(err) = &e { |
