netlink_packet_route/link/
stats64.rs1use netlink_packet_core::{DecodeError, Emitable, Parseable};
4
5pub(crate) const LINK_STATS64_LEN: usize = 200;
6
7buffer!(Stats64Buffer(LINK_STATS64_LEN) {
8 rx_packets: (u64, 0..8),
9 tx_packets: (u64, 8..16),
10 rx_bytes: (u64, 16..24),
11 tx_bytes: (u64, 24..32),
12 rx_errors: (u64, 32..40),
13 tx_errors: (u64, 40..48),
14 rx_dropped: (u64, 48..56),
15 tx_dropped: (u64, 56..64),
16 multicast: (u64, 64..72),
17 collisions: (u64, 72..80),
18 rx_length_errors: (u64, 80..88),
19 rx_over_errors: (u64, 88..96),
20 rx_crc_errors: (u64, 96..104),
21 rx_frame_errors: (u64, 104..112),
22 rx_fifo_errors: (u64, 112..120),
23 rx_missed_errors: (u64, 120..128),
24 tx_aborted_errors: (u64, 128..136),
25 tx_carrier_errors: (u64, 136..144),
26 tx_fifo_errors: (u64, 144..152),
27 tx_heartbeat_errors: (u64, 152..160),
28 tx_window_errors: (u64, 160..168),
29 rx_compressed: (u64, 168..176),
30 tx_compressed: (u64, 176..184),
31 rx_nohandler: (u64, 184..192),
32 rx_otherhost_dropped: (u64, 192..200),
33});
34
35#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
36#[non_exhaustive]
37pub struct Stats64 {
38 pub rx_packets: u64,
40 pub tx_packets: u64,
42 pub rx_bytes: u64,
44 pub tx_bytes: u64,
46 pub rx_errors: u64,
48 pub tx_errors: u64,
50 pub rx_dropped: u64,
52 pub tx_dropped: u64,
54 pub multicast: u64,
56 pub collisions: u64,
57
58 pub rx_length_errors: u64,
60 pub rx_over_errors: u64,
62 pub rx_crc_errors: u64,
64 pub rx_frame_errors: u64,
66 pub rx_fifo_errors: u64,
68 pub rx_missed_errors: u64,
70
71 pub tx_aborted_errors: u64,
73 pub tx_carrier_errors: u64,
74 pub tx_fifo_errors: u64,
75 pub tx_heartbeat_errors: u64,
76 pub tx_window_errors: u64,
77
78 pub rx_compressed: u64,
80 pub tx_compressed: u64,
81
82 pub rx_nohandler: u64,
84
85 pub rx_otherhost_dropped: u64,
86}
87
88impl<T: AsRef<[u8]>> Parseable<Stats64Buffer<T>> for Stats64 {
89 fn parse(buf: &Stats64Buffer<T>) -> Result<Self, DecodeError> {
90 Ok(Self {
91 rx_packets: buf.rx_packets(),
92 tx_packets: buf.tx_packets(),
93 rx_bytes: buf.rx_bytes(),
94 tx_bytes: buf.tx_bytes(),
95 rx_errors: buf.rx_errors(),
96 tx_errors: buf.tx_errors(),
97 rx_dropped: buf.rx_dropped(),
98 tx_dropped: buf.tx_dropped(),
99 multicast: buf.multicast(),
100 collisions: buf.collisions(),
101 rx_length_errors: buf.rx_length_errors(),
102 rx_over_errors: buf.rx_over_errors(),
103 rx_crc_errors: buf.rx_crc_errors(),
104 rx_frame_errors: buf.rx_frame_errors(),
105 rx_fifo_errors: buf.rx_fifo_errors(),
106 rx_missed_errors: buf.rx_missed_errors(),
107 tx_aborted_errors: buf.tx_aborted_errors(),
108 tx_carrier_errors: buf.tx_carrier_errors(),
109 tx_fifo_errors: buf.tx_fifo_errors(),
110 tx_heartbeat_errors: buf.tx_heartbeat_errors(),
111 tx_window_errors: buf.tx_window_errors(),
112 rx_compressed: buf.rx_compressed(),
113 tx_compressed: buf.tx_compressed(),
114 rx_nohandler: buf.rx_nohandler(),
115 rx_otherhost_dropped: buf.rx_otherhost_dropped(),
116 })
117 }
118}
119
120impl Emitable for Stats64 {
121 fn buffer_len(&self) -> usize {
122 LINK_STATS64_LEN
123 }
124
125 fn emit(&self, buffer: &mut [u8]) {
126 let mut buffer = Stats64Buffer::new(buffer);
127 buffer.set_rx_packets(self.rx_packets);
128 buffer.set_tx_packets(self.tx_packets);
129 buffer.set_rx_bytes(self.rx_bytes);
130 buffer.set_tx_bytes(self.tx_bytes);
131 buffer.set_rx_errors(self.rx_errors);
132 buffer.set_tx_errors(self.tx_errors);
133 buffer.set_rx_dropped(self.rx_dropped);
134 buffer.set_tx_dropped(self.tx_dropped);
135 buffer.set_multicast(self.multicast);
136 buffer.set_collisions(self.collisions);
137 buffer.set_rx_length_errors(self.rx_length_errors);
138 buffer.set_rx_over_errors(self.rx_over_errors);
139 buffer.set_rx_crc_errors(self.rx_crc_errors);
140 buffer.set_rx_frame_errors(self.rx_frame_errors);
141 buffer.set_rx_fifo_errors(self.rx_fifo_errors);
142 buffer.set_rx_missed_errors(self.rx_missed_errors);
143 buffer.set_tx_aborted_errors(self.tx_aborted_errors);
144 buffer.set_tx_carrier_errors(self.tx_carrier_errors);
145 buffer.set_tx_fifo_errors(self.tx_fifo_errors);
146 buffer.set_tx_heartbeat_errors(self.tx_heartbeat_errors);
147 buffer.set_tx_window_errors(self.tx_window_errors);
148 buffer.set_rx_compressed(self.rx_compressed);
149 buffer.set_tx_compressed(self.tx_compressed);
150 buffer.set_rx_nohandler(self.rx_nohandler);
151 buffer.set_rx_otherhost_dropped(self.rx_otherhost_dropped);
152 }
153}