fix(netlink): Improves error handling

Refactors error handling for interface and queue discipline operations to provide more informative error messages. This aids in debugging and user experience.
This commit is contained in:
Nils Andreas Svee committed 2026-02-21 23:21:32 +07:00
1 parent 986b649a37
commit 616a3b1c70
1 file changed
+5 -6
+5 -6
View File
@@ -28,8 +28,6 @@ pub enum NetlinkError {
#[error("Error happened while parsing UTF-8 string")] #[error("Error happened while parsing UTF-8 string")]
Utf8Error(#[from] Utf8Error), Utf8Error(#[from] Utf8Error),
#[error("Invalid reply type")]
InvalidReply,
} }
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]
@@ -49,7 +47,8 @@ impl Netlink {
request.encode().push_ifname_bytes(ifname.as_bytes()); request.encode().push_ifname_bytes(ifname.as_bytes());
let mut iter = socket.request(&request)?; let mut iter = socket.request(&request)?;
let (header, _) = iter.recv_one()?; let (header, _) = iter.recv_one()
.map_err(|_| NetlinkError::InterfaceNotFound(ifname.to_string()))?;
Ok(header.ifi_index()) Ok(header.ifi_index())
} }
@@ -75,7 +74,7 @@ impl Netlink {
Err(NetlinkError::NoInterfaceStatsFound(ifname.to_string())) Err(NetlinkError::NoInterfaceStatsFound(ifname.to_string()))
} }
pub fn qdisc_from_ifindex(ifindex: i32) -> Result<Qdisc, NetlinkError> { pub fn qdisc_from_ifindex(ifindex: i32, ifname: &str) -> Result<Qdisc, NetlinkError> {
let mut socket = NetlinkSocket::new(); let mut socket = NetlinkSocket::new();
let header = tc::PushTcmsg::new(); let header = tc::PushTcmsg::new();
let request = tc::Request::new().op_getqdisc_dump_request(&header); let request = tc::Request::new().op_getqdisc_dump_request(&header);
@@ -104,12 +103,12 @@ impl Netlink {
} }
} }
Err(NetlinkError::NoQdiscFound(ifindex.to_string())) Err(NetlinkError::NoQdiscFound(ifname.to_string()))
} }
pub fn qdisc_from_ifname(ifname: &str) -> Result<Qdisc, NetlinkError> { pub fn qdisc_from_ifname(ifname: &str) -> Result<Qdisc, NetlinkError> {
let ifindex = Netlink::find_interface(ifname)?; let ifindex = Netlink::find_interface(ifname)?;
Netlink::qdisc_from_ifindex(ifindex) Netlink::qdisc_from_ifindex(ifindex, ifname)
} }
pub fn set_qdisc_rate(qdisc: Qdisc, bandwidth_kbit: u64) -> Result<(), NetlinkError> { pub fn set_qdisc_rate(qdisc: Qdisc, bandwidth_kbit: u64) -> Result<(), NetlinkError> {