Merge pull request #2843 from zhaojizhuang/fixroute

agent: Do not fail when trying to adding existing routes
This commit is contained in:
Bin Liu 2021-10-18 15:52:29 +08:00 committed by GitHub
commit 1cb38ecbe7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,6 +6,7 @@
use anyhow::{anyhow, Context, Result}; use anyhow::{anyhow, Context, Result};
use futures::{future, StreamExt, TryStreamExt}; use futures::{future, StreamExt, TryStreamExt};
use ipnetwork::{IpNetwork, Ipv4Network, Ipv6Network}; use ipnetwork::{IpNetwork, Ipv4Network, Ipv6Network};
use nix::errno::Errno;
use protobuf::RepeatedField; use protobuf::RepeatedField;
use protocols::types::{ARPNeighbor, IPAddress, IPFamily, Interface, Route}; use protocols::types::{ARPNeighbor, IPAddress, IPFamily, Interface, Route};
use rtnetlink::{new_connection, packet, IpVersion}; use rtnetlink::{new_connection, packet, IpVersion};
@ -363,14 +364,17 @@ impl Handle {
request = request.gateway(ip); request = request.gateway(ip);
} }
request.execute().await.with_context(|| { if let Err(rtnetlink::Error::NetlinkError(message)) = request.execute().await {
format!( if Errno::from_i32(message.code.abs()) != Errno::EEXIST {
"Failed to add IP v6 route (src: {}, dst: {}, gtw: {})", return Err(anyhow!(
route.get_source(), "Failed to add IP v6 route (src: {}, dst: {}, gtw: {},Err: {})",
route.get_dest(), route.get_source(),
route.get_gateway() route.get_dest(),
) route.get_gateway(),
})?; message
));
}
}
} else { } else {
let dest_addr = if !route.dest.is_empty() { let dest_addr = if !route.dest.is_empty() {
Ipv4Network::from_str(&route.dest)? Ipv4Network::from_str(&route.dest)?
@ -401,7 +405,17 @@ impl Handle {
request = request.gateway(ip); request = request.gateway(ip);
} }
request.execute().await?; if let Err(rtnetlink::Error::NetlinkError(message)) = request.execute().await {
if Errno::from_i32(message.code.abs()) != Errno::EEXIST {
return Err(anyhow!(
"Failed to add IP v4 route (src: {}, dst: {}, gtw: {},Err: {})",
route.get_source(),
route.get_dest(),
route.get_gateway(),
message
));
}
}
} }
} }