netlink_packet_route/link/sriov/
trust.rs

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