netlink_packet_route/rtnl/tc/nlas/
stats_queue.rs1use crate::{
4 traits::{Emitable, Parseable},
5 DecodeError,
6};
7
8#[derive(Debug, PartialEq, Eq, Clone, Copy)]
10pub struct StatsQueue {
11 pub qlen: u32,
13 pub backlog: u32,
15 pub drops: u32,
17 pub requeues: u32,
19 pub overlimits: u32,
21}
22
23pub const STATS_QUEUE_LEN: usize = 20;
24
25buffer!(StatsQueueBuffer( STATS_QUEUE_LEN) {
26 qlen: (u32, 0..4),
27 backlog: (u32, 4..8),
28 drops: (u32, 8..12),
29 requeues: (u32, 12..16),
30 overlimits: (u32, 16..20),
31});
32
33impl<T: AsRef<[u8]>> Parseable<StatsQueueBuffer<T>> for StatsQueue {
34 fn parse(buf: &StatsQueueBuffer<T>) -> Result<Self, DecodeError> {
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 StatsQueue {
46 fn buffer_len(&self) -> usize {
47 STATS_QUEUE_LEN
48 }
49
50 fn emit(&self, buffer: &mut [u8]) {
51 let mut buffer = StatsQueueBuffer::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}