refactor(netlink): Migrate qdisc functions
This commit is contained in:
2 files changed
+39
-26
No files matched your search
+36
-23
@@ -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,
|
|
||||||
None,
|
|
||||||
NlPayload::Payload(tc_msg),
|
NlPayload::Payload(tc_msg),
|
||||||
);
|
)
|
||||||
|
.map_err(|e| NetlinkError::NlQdiscError(e))?;
|
||||||
|
|
||||||
|
for msg in recv {
|
||||||
|
let _ = msg?;
|
||||||
|
}
|
||||||
|
|
||||||
socket.send(nlhdr)?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in new issue
Block a user