netlink_packet_route/link/sriov/
vlan.rs

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