From 58e6f356aa5bdbab4f439151d3db090f1966bd76 Mon Sep 17 00:00:00 2001 From: Eric Long Date: Sun, 10 Nov 2024 11:22:55 +0800 Subject: [PATCH 1/2] Replace `impl TryStream` with `impl Stream` --- src/addr/get.rs | 4 ++-- src/link/get.rs | 4 ++-- src/neighbour/get.rs | 4 ++-- src/route/get.rs | 4 ++-- src/rule/get.rs | 4 ++-- src/traffic_control/get.rs | 10 +++++----- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/addr/get.rs b/src/addr/get.rs index c64d86d..35f78c8 100644 --- a/src/addr/get.rs +++ b/src/addr/get.rs @@ -2,7 +2,7 @@ use futures::{ future::{self, Either}, - stream::{StreamExt, TryStream, TryStreamExt}, + stream::{Stream, StreamExt, TryStreamExt}, FutureExt, }; use std::net::IpAddr; @@ -34,7 +34,7 @@ impl AddressGetRequest { &mut self.message } - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let AddressGetRequest { mut handle, message, diff --git a/src/link/get.rs b/src/link/get.rs index 8ab9c0f..ec76ef4 100644 --- a/src/link/get.rs +++ b/src/link/get.rs @@ -2,7 +2,7 @@ use futures::{ future::{self, Either}, - stream::{StreamExt, TryStream}, + stream::{Stream, StreamExt}, FutureExt, }; use netlink_packet_core::{NetlinkMessage, NLM_F_DUMP, NLM_F_REQUEST}; @@ -48,7 +48,7 @@ impl LinkGetRequest { } /// Execute the request - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let LinkGetRequest { mut handle, message, diff --git a/src/neighbour/get.rs b/src/neighbour/get.rs index 3966cb2..ff5a1cb 100644 --- a/src/neighbour/get.rs +++ b/src/neighbour/get.rs @@ -2,7 +2,7 @@ use futures::{ future::{self, Either}, - stream::{StreamExt, TryStream}, + stream::{Stream, StreamExt}, FutureExt, }; use netlink_packet_core::{ @@ -41,7 +41,7 @@ impl NeighbourGetRequest { /// Execute the request pub fn execute( self, - ) -> impl TryStream { + ) -> impl Stream> { let NeighbourGetRequest { mut handle, message, diff --git a/src/route/get.rs b/src/route/get.rs index a938532..618b234 100644 --- a/src/route/get.rs +++ b/src/route/get.rs @@ -2,7 +2,7 @@ use futures::{ future::{self, Either}, - stream::{StreamExt, TryStream}, + stream::{Stream, StreamExt}, FutureExt, }; @@ -45,7 +45,7 @@ impl RouteGetRequest { &mut self.message } - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let RouteGetRequest { mut handle, message, diff --git a/src/rule/get.rs b/src/rule/get.rs index ee3d50d..04d5699 100644 --- a/src/rule/get.rs +++ b/src/rule/get.rs @@ -2,7 +2,7 @@ use futures::{ future::{self, Either}, - stream::{StreamExt, TryStream}, + stream::{Stream, StreamExt}, FutureExt, }; use netlink_packet_core::{NetlinkMessage, NLM_F_DUMP, NLM_F_REQUEST}; @@ -37,7 +37,7 @@ impl RuleGetRequest { &mut self.message } - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let RuleGetRequest { mut handle, message, diff --git a/src/traffic_control/get.rs b/src/traffic_control/get.rs index 01cb262..f6c72f3 100644 --- a/src/traffic_control/get.rs +++ b/src/traffic_control/get.rs @@ -2,7 +2,7 @@ use futures::{ future::{self, Either}, - stream::{StreamExt, TryStream}, + stream::{Stream, StreamExt}, FutureExt, }; use netlink_packet_core::{NetlinkMessage, NLM_F_DUMP, NLM_F_REQUEST}; @@ -27,7 +27,7 @@ impl QDiscGetRequest { } /// Execute the request - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let QDiscGetRequest { mut handle, message, @@ -73,7 +73,7 @@ impl TrafficClassGetRequest { } /// Execute the request - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let TrafficClassGetRequest { mut handle, message, @@ -107,7 +107,7 @@ impl TrafficFilterGetRequest { } /// Execute the request - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let TrafficFilterGetRequest { mut handle, message, @@ -148,7 +148,7 @@ impl TrafficChainGetRequest { } /// Execute the request - pub fn execute(self) -> impl TryStream { + pub fn execute(self) -> impl Stream> { let TrafficChainGetRequest { mut handle, message, From e4193d363c96d48436162f44141bcd82d80939b7 Mon Sep 17 00:00:00 2001 From: Eric Long Date: Sun, 10 Nov 2024 11:18:45 +0800 Subject: [PATCH 2/2] RouteGetRequest: specify NLM_F_DUMP only when no destination address specified We can have the behaviour of `ip route get` now. Co-Developed-By: Nevo Hed --- src/route/get.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/route/get.rs b/src/route/get.rs index 618b234..c817e81 100644 --- a/src/route/get.rs +++ b/src/route/get.rs @@ -8,7 +8,8 @@ use futures::{ use netlink_packet_core::{NetlinkMessage, NLM_F_DUMP, NLM_F_REQUEST}; use netlink_packet_route::{ - route::RouteMessage, AddressFamily, RouteNetlinkMessage, + route::{RouteAttribute, RouteMessage}, + AddressFamily, RouteNetlinkMessage, }; use crate::{try_rtnl, Error, Handle}; @@ -51,9 +52,18 @@ impl RouteGetRequest { message, } = self; + let has_dest = message + .attributes + .iter() + .any(|attr| matches!(attr, RouteAttribute::Destination(_))); + let mut req = NetlinkMessage::from(RouteNetlinkMessage::GetRoute(message)); - req.header.flags = NLM_F_REQUEST | NLM_F_DUMP; + req.header.flags = NLM_F_REQUEST; + + if !has_dest { + req.header.flags |= NLM_F_DUMP; + } match handle.request(req) { Ok(response) => Either::Left(response.map(move |msg| {