netlink_packet_route/tc/stats/
basic.rs

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