netlink_packet_route/link/sriov/
guid.rs

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