summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/routing/linux.rs28
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 {