netlink_packet_route/tc/stats/
queue.rs
1use netlink_packet_utils::traits::{Emitable, Parseable};
4use netlink_packet_utils::DecodeError;
5
6#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)]
8#[non_exhaustive]
9pub struct TcStatsQueue {
10 pub qlen: u32,
12 pub backlog: u32,
14 pub drops: u32,
16 pub requeues: u32,
18 pub overlimits: u32,
20}
21
22const STATS_QUEUE_LEN: usize = 20;
23
24buffer!(TcStatsQueueBuffer( STATS_QUEUE_LEN) {
25 qlen: (u32, 0..4),
26 backlog: (u32, 4..8),
27 drops: (u32, 8..12),
28 requeues: (u32, 12..16),
29 overlimits: (u32, 16..20),
30});
31
32impl<T: AsRef<[u8]>> Parseable<TcStatsQueueBuffer<T>> for TcStatsQueue {
33 type Error = ();
34 fn parse(buf: &TcStatsQueueBuffer<T>) -> Result<Self, ()> {
35 Ok(Self {
36 qlen: buf.qlen(),
37 backlog: buf.backlog(),
38 drops: buf.drops(),
39 requeues: buf.requeues(),
40 overlimits: buf.overlimits(),
41 })
42 }
43}
44
45impl Emitable for TcStatsQueue {
46 fn buffer_len(&self) -> usize {
47 STATS_QUEUE_LEN
48 }
49
50 fn emit(&self, buffer: &mut [u8]) {
51 let mut buffer = TcStatsQueueBuffer::new(buffer);
52 buffer.set_qlen(self.qlen);
53 buffer.set_backlog(self.backlog);
54 buffer.set_drops(self.drops);
55 buffer.set_requeues(self.requeues);
56 buffer.set_overlimits(self.overlimits);
57 }
58}