diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-04-27 17:41:38 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-04-28 13:56:26 +0200 |
| commit | 7b7d323abbe38ff4c7f4050df6587db49b50a2a2 (patch) | |
| tree | cac19941215de6217a6ef5899082105271629148 | |
| parent | 03e4fdf44391603e5c34a1bb1d8ab27a89ab74d7 (diff) | |
| download | mullvadvpn-7b7d323abbe38ff4c7f4050df6587db49b50a2a2.tar.xz mullvadvpn-7b7d323abbe38ff4c7f4050df6587db49b50a2a2.zip | |
Clean up default routes in RouteManager
| -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 { |
