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