Skip to content

Commit ee7cd1b

Browse files
committed
debug: rtnetlink trace
1 parent 3462197 commit ee7cd1b

1 file changed

Lines changed: 22 additions & 11 deletions

File tree

src/kernel/rtnl.rs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use clap::Args;
66
use futures::channel::mpsc::UnboundedReceiver;
77
use futures::{StreamExt, try_join};
88
use libc::{EHOSTUNREACH, ENETUNREACH};
9-
use log::{debug, trace, warn};
9+
use log::{debug, trace};
1010
use rtnetlink::Error::NetlinkError;
1111
use rtnetlink::packet_core::{NetlinkMessage, NetlinkPayload};
1212
use rtnetlink::packet_route::route::{RouteAddress, RouteAttribute, RouteMessage, RouteType, RouteVia};
@@ -24,7 +24,7 @@ use tokio::time::{Interval, interval};
2424
// We allow redirecting to any address by resolving its next hop using `ip route
2525
// get`. This aligns with the RFC draft v4.
2626
//
27-
// Not handling with ECMP for now.
27+
// Not handling ECMP for now.
2828

2929
#[derive(Debug)]
3030
pub struct RtNetlink<K: Kernel> {
@@ -42,7 +42,7 @@ impl<K: Kernel> RtNetlink<K> {
4242
let (conn, handle, msgs) = rtnetlink::new_multicast_connection(&[Ipv4Route, Ipv6Route, Ipv4Rule, Ipv6Rule])?;
4343
let scan_time = args.route_scan_time;
4444
tokio::spawn(conn);
45-
warn!("rtnetlink spawned");
45+
trace!("rtnetlink: spawned");
4646
Ok(Self {
4747
args,
4848
handle,
@@ -179,6 +179,7 @@ impl<K: Kernel> RtNetlink<K> {
179179
pub async fn process(&mut self) -> Result<()> {
180180
use NetlinkPayload::*;
181181
use RouteNetlinkMessage::*;
182+
use RouteType::*;
182183

183184
fn af_to_wildcard(f: AddressFamily) -> IpPrefix {
184185
if f == AddressFamily::Inet {
@@ -207,16 +208,26 @@ impl<K: Kernel> RtNetlink<K> {
207208
}
208209

209210
select! {
210-
_ = self.timer.tick() => { warn!("timer tick"); self.process_all().await }
211+
_ = self.timer.tick() => {
212+
trace!("rtnetlink: timer tick");
213+
self.process_all().await
214+
}
211215
Some((msg, _)) = self.msgs.next() => {
212-
trace!("new rtnetlink msg: {msg:?}");
213216
match msg.payload {
214-
InnerMessage(msg) => match msg {
215-
// TODO: filter out multicast routes
216-
NewRoute(msg) | DelRoute(msg) => self.process_prefix(route_msg_dst_prefix(msg)).await,
217-
NewRule(msg) | DelRule(msg) => self.process_prefix(af_to_wildcard(msg.header.family)).await,
218-
_ => Ok(()),
219-
},
217+
InnerMessage(msg) => {
218+
match msg {
219+
NewRoute(msg) | DelRoute(msg) if !matches!(msg.header.kind, Local | Broadcast | Anycast | Multicast) => {
220+
let prefix = route_msg_dst_prefix(msg);
221+
trace!("rtnetlink: route to {prefix:?} changed");
222+
self.process_prefix(prefix).await
223+
}
224+
NewRule(msg) | DelRule(msg) => {
225+
trace!("rtnetlink: rule changed: {msg:?}");
226+
self.process_prefix(af_to_wildcard(msg.header.family)).await
227+
}
228+
_ => Ok(()),
229+
}
230+
}
220231
_ => Ok(()),
221232
}
222233
}

0 commit comments

Comments
 (0)