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
+41 -28

No files matched your search

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