netlink_packet_core/
payload.rs

1// SPDX-License-Identifier: MIT
2
3use std::fmt::Debug;
4
5use crate::{DoneMessage, ErrorMessage, NetlinkSerializable};
6
7/// The message is ignored.
8pub const NLMSG_NOOP: u16 = 1;
9/// The message signals an error and the payload contains a nlmsgerr structure.
10/// This can be looked at as a NACK and typically it is from FEC to CPC.
11pub const NLMSG_ERROR: u16 = 2;
12/// The message terminates a multipart message.
13/// Data lost
14pub const NLMSG_DONE: u16 = 3;
15pub const NLMSG_OVERRUN: u16 = 4;
16pub const NLMSG_ALIGNTO: u16 = 4;
17
18#[derive(Debug, PartialEq, Eq, Clone)]
19#[non_exhaustive]
20pub enum NetlinkPayload<I> {
21    Done(DoneMessage),
22    Error(ErrorMessage),
23    Noop,
24    Overrun(Vec<u8>),
25    InnerMessage(I),
26}
27
28impl<I> NetlinkPayload<I>
29where
30    I: NetlinkSerializable,
31{
32    pub fn message_type(&self) -> u16 {
33        match self {
34            NetlinkPayload::Done(_) => NLMSG_DONE,
35            NetlinkPayload::Error(_) => NLMSG_ERROR,
36            NetlinkPayload::Noop => NLMSG_NOOP,
37            NetlinkPayload::Overrun(_) => NLMSG_OVERRUN,
38            NetlinkPayload::InnerMessage(message) => message.message_type(),
39        }
40    }
41}