diff --git a/rust/bin-shared/src/tun_device_manager/linux.rs b/rust/bin-shared/src/tun_device_manager/linux.rs index abb592312..d1d125490 100644 --- a/rust/bin-shared/src/tun_device_manager/linux.rs +++ b/rust/bin-shared/src/tun_device_manager/linux.rs @@ -8,7 +8,8 @@ use futures::TryStreamExt; use ip_network::{IpNetwork, Ipv4Network, Ipv6Network}; use ip_packet::{IpPacket, IpPacketBuf}; use libc::{ - fcntl, makedev, mknod, open, EEXIST, ENOENT, F_GETFL, F_SETFL, O_NONBLOCK, O_RDWR, S_IFCHR, + fcntl, makedev, mknod, open, EEXIST, ENOENT, ESRCH, F_GETFL, F_SETFL, O_NONBLOCK, O_RDWR, + S_IFCHR, }; use netlink_packet_route::route::{RouteProtocol, RouteScope}; use netlink_packet_route::rule::RuleAction; @@ -282,6 +283,12 @@ async fn remove_route(route: &IpNetwork, idx: u32, handle: &Handle) { return; } + // "No such process" is another version of "route does not exist". + // See . + if matches!(&err, NetlinkError(err) if err.raw_code() == ESRCH) { + return; + } + tracing::warn!(error = std_dyn_err(&err), %route, "Failed to remove route"); }