netlink_packet_route/tc/stats/
basic.rs

1// SPDX-License-Identifier: MIT
2
3use netlink_packet_utils::traits::{Emitable, Parseable};
4use netlink_packet_utils::DecodeError;
5
6/// Byte/Packet throughput statistics
7#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)]
8#[non_exhaustive]
9pub struct TcStatsBasic {
10    /// number of seen bytes
11    pub bytes: u64,
12    /// number of seen packets
13    pub packets: u32,
14}
15
16// real size is 12, but kernel is align to 64bits(8 bytes)
17const STATS_BASIC_LEN: usize = 16;
18
19buffer!(TcStatsBasicBuffer(STATS_BASIC_LEN) {
20    bytes: (u64, 0..8),
21    packets: (u32, 8..12),
22});
23
24impl<T: AsRef<[u8]>> Parseable<TcStatsBasicBuffer<T>> for TcStatsBasic {
25    type Error = ();
26    fn parse(buf: &TcStatsBasicBuffer<T>) -> Result<Self, ()> {
27        Ok(TcStatsBasic { bytes: buf.bytes(), packets: buf.packets() })
28    }
29}
30
31impl Emitable for TcStatsBasic {
32    fn buffer_len(&self) -> usize {
33        STATS_BASIC_LEN
34    }
35
36    fn emit(&self, buffer: &mut [u8]) {
37        let mut buffer = TcStatsBasicBuffer::new(buffer);
38        buffer.set_bytes(self.bytes);
39        buffer.set_packets(self.packets);
40    }
41}