refactor(netlink): Migrate qdisc functions

This commit is contained in:
Nils Andreas Svee committed 2026-02-21 00:22:57 +07:00
1 parent 121e8cda40
commit 55feeafc90
2 files changed
+39 -26

No files matched your search

+36 -23
View File
@@ -250,41 +250,54 @@ impl Netlink {
}
pub fn set_qdisc_rate(qdisc: Qdisc, bandwidth_kbit: u64) -> Result<(), NetlinkError> {
let mut socket = NlSocketHandle::connect(NlFamily::Route, None, &[])?;
let (socket, _) = NlRouter::connect(NlFamily::Route, None, Groups::empty()).unwrap();
let bandwidth = bandwidth_kbit * 1000 / 8;
let mut attrs = RtBuffer::new();
let attr_type = Rtattr::new(None, Tca::Kind, "cake")?;
let mut attr_options = Rtattr::new(None, Tca::Options, Buffer::from(Vec::new()))?;
attr_options.add_nested_attribute(&Rtattr::new(
None,
TcaCake::BaseRate64 as u16,
bandwidth,
)?)?;
let attr_type = RtattrBuilder::default()
.rta_type(Tca::Kind)
.rta_payload("cake")
.build()
.unwrap();
let attr_options = RtattrBuilder::default()
.rta_type(Tca::Options)
.rta_payload(Buffer::from(Vec::new()))
.build()
.unwrap()
.nest(
&RtattrBuilder::default()
.rta_type(TcaCake::BaseRate64 as u16)
.rta_payload(bandwidth)
.build()
.unwrap(),
)?;
attrs.push(attr_type);
attrs.push(attr_options);
let tc_msg = Tcmsg::new(
u8::from(RtAddrFamily::Unspecified),
qdisc.ifindex,
0,
qdisc.parent,
0,
attrs,
);
let tc_msg = TcmsgBuilder::default()
.tcm_family(u8::from(RtAddrFamily::Unspecified))
.tcm_ifindex(qdisc.ifindex)
.tcm_handle(0)
.tcm_parent(qdisc.parent)
.tcm_info(0)
.rtattrs(attrs)
.build()
.unwrap();
let nlhdr = Nlmsghdr::new(
None,
let recv = socket
.send::<_, _, Rtm, Tcmsg>(
Rtm::Newqdisc,
NlmFFlags::new(&[NlmF::Request, NlmF::Ack]),
None,
None,
NlmF::REQUEST | NlmF::ACK,
NlPayload::Payload(tc_msg),
);
)
.map_err(|e| NetlinkError::NlQdiscError(e))?;
for msg in recv {
let _ = msg?;
}
socket.send(nlhdr)?;
Ok(())
}
}
+3 -3
View File
@@ -30,9 +30,9 @@ impl PingListener for PingerICMPTimestampListener {
let time_now = Time::new(ClockId::Realtime);
let time_since_midnight = time_now.get_time_since_midnight();
let originate_timestamp = reply.originate_timestamp.to_ne();
let receive_timestamp = reply.receive_timestamp.to_ne();
let transmit_timestamp = reply.transmit_timestamp.to_ne();
let originate_timestamp = reply.originate_timestamp;
let receive_timestamp = reply.receive_timestamp;
let transmit_timestamp = reply.transmit_timestamp;
let rtt: i64 = time_since_midnight - originate_timestamp as i64;
let dl_time: i64 = time_since_midnight - transmit_timestamp as i64;