netlink_packet_route/tc/stats/
basic.rs1use netlink_packet_utils::{
4 traits::{Emitable, Parseable},
5 DecodeError,
6};
7
8#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)]
10#[non_exhaustive]
11pub struct TcStatsBasic {
12 pub bytes: u64,
14 pub packets: u32,
16}
17
18const 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}