netlink_packet_route/link/sriov/
tx_rate.rs

1// SPDX-License-Identifier: MIT
2
3use netlink_packet_core::{DecodeError, Emitable, Parseable};
4
5const VF_INFO_TX_RATE_LEN: usize = 8;
6
7#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
8#[non_exhaustive]
9pub struct VfInfoTxRate {
10    pub vf_id: u32,
11    pub rate: u32,
12}
13
14impl VfInfoTxRate {
15    pub fn new(vf_id: u32, rate: u32) -> Self {
16        Self { vf_id, rate }
17    }
18}
19
20buffer!(VfInfoTxRateBuffer(VF_INFO_TX_RATE_LEN) {
21    vf_id: (u32, 0..4),
22    rate: (u32, 4..8),
23});
24
25impl<T: AsRef<[u8]> + ?Sized> Parseable<VfInfoTxRateBuffer<&T>>
26    for VfInfoTxRate
27{
28    fn parse(buf: &VfInfoTxRateBuffer<&T>) -> Result<Self, DecodeError> {
29        Ok(Self {
30            vf_id: buf.vf_id(),
31            rate: buf.rate(),
32        })
33    }
34}
35
36impl Emitable for VfInfoTxRate {
37    fn buffer_len(&self) -> usize {
38        VF_INFO_TX_RATE_LEN
39    }
40
41    fn emit(&self, buffer: &mut [u8]) {
42        let mut buffer = VfInfoTxRateBuffer::new(buffer);
43        buffer.set_vf_id(self.vf_id);
44        buffer.set_rate(self.rate);
45    }
46}