netlink_packet_route/tc/stats/
basic.rs

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