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)]
19pub enum NetlinkPayload<I> {
20    Done(DoneMessage),
21    Error(ErrorMessage),
22    Noop,
23    Overrun(Vec<u8>),
24    InnerMessage(I),
25}
26
27impl<I> NetlinkPayload<I>
28where
29    I: NetlinkSerializable,
30{
31    pub fn message_type(&self) -> u16 {
32        match self {
33            NetlinkPayload::Done(_) => NLMSG_DONE,
34            NetlinkPayload::Error(_) => NLMSG_ERROR,
35            NetlinkPayload::Noop => NLMSG_NOOP,
36            NetlinkPayload::Overrun(_) => NLMSG_OVERRUN,
37            NetlinkPayload::InnerMessage(message) => message.message_type(),
38        }
39    }
40}