diff --git a/src/rust/lqos_utils/src/units/down_up.rs b/src/rust/lqos_utils/src/units/down_up.rs index 17a4a3e8..94eb9197 100644 --- a/src/rust/lqos_utils/src/units/down_up.rs +++ b/src/rust/lqos_utils/src/units/down_up.rs @@ -44,6 +44,10 @@ where T: std::cmp::Ord + num_traits::Zero + Copy + num_traits::CheckedSub self.down = self.down.checked_add(&down).unwrap_or(T::zero()); self.up = self.up.checked_add(&up).unwrap_or(T::zero()); } + + pub fn sum(&self) -> T { + self.down + self.up + } } impl Into> for DownUpOrder { diff --git a/src/rust/lqosd/src/throughput_tracker/mod.rs b/src/rust/lqosd/src/throughput_tracker/mod.rs index f520fb45..3a265769 100644 --- a/src/rust/lqosd/src/throughput_tracker/mod.rs +++ b/src/rust/lqosd/src/throughput_tracker/mod.rs @@ -198,7 +198,7 @@ fn retire_check(cycle: u64, recent_cycle: u64) -> bool { cycle < recent_cycle + RETIRE_AFTER_SECONDS } -type TopList = (XdpIpAddress, DownUpOrder,DownUpOrder, f32, TcHandle, String, (u64, u64)); +type TopList = (XdpIpAddress, DownUpOrder,DownUpOrder, f32, TcHandle, String, DownUpOrder); pub fn top_n(start: u32, end: u32) -> BusResponse { let mut full_list: Vec = { @@ -244,7 +244,7 @@ pub fn top_n(start: u32, end: u32) -> BusResponse { packets_per_second: (packets.down, packets.up), median_tcp_rtt: *median_rtt, tc_handle: *tc_handle, - tcp_retransmits: *tcp_retransmits, + tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up), }, ) .collect(); @@ -296,7 +296,7 @@ pub fn worst_n(start: u32, end: u32) -> BusResponse { packets_per_second: (packets.down, packets.up), median_tcp_rtt: *median_rtt, tc_handle: *tc_handle, - tcp_retransmits: *tcp_retransmits, + tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up), }, ) .collect(); @@ -328,8 +328,8 @@ pub fn worst_n_retransmits(start: u32, end: u32) -> BusResponse { .collect() }; full_list.sort_by(|a, b| { - let total_a = a.6 .0 + a.6 .1; - let total_b = b.6 .0 + b.6 .1; + let total_a = a.6.sum(); + let total_b = b.6.sum(); total_b.cmp(&total_a) }); let result = full_list @@ -352,7 +352,7 @@ pub fn worst_n_retransmits(start: u32, end: u32) -> BusResponse { packets_per_second: (packets.down, packets.up), median_tcp_rtt: *median_rtt, tc_handle: *tc_handle, - tcp_retransmits: *tcp_retransmits, + tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up), }, ) .collect(); @@ -405,7 +405,7 @@ pub fn best_n(start: u32, end: u32) -> BusResponse { packets_per_second: (packets.down, packets.up), median_tcp_rtt: *median_rtt, tc_handle: *tc_handle, - tcp_retransmits: *tcp_retransmits, + tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up), }, ) .collect(); diff --git a/src/rust/lqosd/src/throughput_tracker/throughput_entry.rs b/src/rust/lqosd/src/throughput_tracker/throughput_entry.rs index 1c0ca187..93cfb14c 100644 --- a/src/rust/lqosd/src/throughput_tracker/throughput_entry.rs +++ b/src/rust/lqosd/src/throughput_tracker/throughput_entry.rs @@ -18,8 +18,8 @@ pub(crate) struct ThroughputEntry { pub(crate) recent_rtt_data: [RttData; 60], pub(crate) last_fresh_rtt_data_cycle: u64, pub(crate) last_seen: u64, // Last seen in kernel time since boot - pub(crate) tcp_retransmits: (u64, u64), - pub(crate) last_tcp_retransmits: (u64, u64), + pub(crate) tcp_retransmits: DownUpOrder, + pub(crate) last_tcp_retransmits: DownUpOrder, } impl ThroughputEntry { diff --git a/src/rust/lqosd/src/throughput_tracker/tracking_data.rs b/src/rust/lqosd/src/throughput_tracker/tracking_data.rs index 8a7f0a4b..e396c806 100644 --- a/src/rust/lqosd/src/throughput_tracker/tracking_data.rs +++ b/src/rust/lqosd/src/throughput_tracker/tracking_data.rs @@ -147,8 +147,8 @@ impl ThroughputTracker { recent_rtt_data: [RttData::from_nanos(0); 60], last_fresh_rtt_data_cycle: 0, last_seen: 0, - tcp_retransmits: (0, 0), - last_tcp_retransmits: (0, 0), + tcp_retransmits: DownUpOrder::zeroed(), + last_tcp_retransmits: DownUpOrder::zeroed(), }; for c in counts { entry.bytes.checked_add_direct(c.download_bytes, c.upload_bytes); @@ -286,15 +286,15 @@ impl ThroughputTracker { // Merge in the TCP retries // Reset all entries in the tracker to 0 for mut circuit in self.raw_data.iter_mut() { - circuit.tcp_retransmits = (0, 0); + circuit.tcp_retransmits = DownUpOrder::zeroed(); } // Apply the new ones for (local_ip, retries) in tcp_retries { if let Some(mut tracker) = self.raw_data.get_mut(&local_ip) { - tracker.tcp_retransmits.0 = retries[0].saturating_sub(tracker.last_tcp_retransmits.0); - tracker.tcp_retransmits.1 = retries[1].saturating_sub(tracker.last_tcp_retransmits.1); - tracker.last_tcp_retransmits.0 = retries[0]; - tracker.last_tcp_retransmits.1 = retries[1]; + tracker.tcp_retransmits.down = retries[0].saturating_sub(tracker.last_tcp_retransmits.down); + tracker.tcp_retransmits.up = retries[1].saturating_sub(tracker.last_tcp_retransmits.up); + tracker.last_tcp_retransmits.down = retries[0]; + tracker.last_tcp_retransmits.up = retries[1]; } }