netlink_packet_route/link/sriov/
rate.rs1use netlink_packet_core::{DecodeError, Emitable, Parseable};
4
5const VF_INFO_RATE_LEN: usize = 12;
6
7#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
8#[non_exhaustive]
9pub struct VfInfoRate {
10 pub vf_id: u32,
11 pub min_tx_rate: u32,
12 pub max_tx_rate: u32,
13}
14
15impl VfInfoRate {
16 pub fn new(vf_id: u32, min_tx_rate: u32, max_tx_rate: u32) -> Self {
17 Self {
18 vf_id,
19 min_tx_rate,
20 max_tx_rate,
21 }
22 }
23}
24
25buffer!(VfInfoRateBuffer(VF_INFO_RATE_LEN) {
26 vf_id: (u32, 0..4),
27 min_tx_rate: (u32, 4..8),
28 max_tx_rate: (u32, 8..12)
29});
30
31impl<T: AsRef<[u8]> + ?Sized> Parseable<VfInfoRateBuffer<&T>> for VfInfoRate {
32 fn parse(buf: &VfInfoRateBuffer<&T>) -> Result<Self, DecodeError> {
33 Ok(Self {
34 vf_id: buf.vf_id(),
35 min_tx_rate: buf.min_tx_rate(),
36 max_tx_rate: buf.max_tx_rate(),
37 })
38 }
39}
40
41impl Emitable for VfInfoRate {
42 fn buffer_len(&self) -> usize {
43 VF_INFO_RATE_LEN
44 }
45
46 fn emit(&self, buffer: &mut [u8]) {
47 let mut buffer = VfInfoRateBuffer::new(buffer);
48 buffer.set_vf_id(self.vf_id);
49 buffer.set_min_tx_rate(self.min_tx_rate);
50 buffer.set_max_tx_rate(self.max_tx_rate);
51 }
52}