diff options
author | Simon THOBY <git@nightmared.fr> | 2022-12-03 22:53:23 +0100 |
---|---|---|
committer | Simon THOBY <git@nightmared.fr> | 2022-12-05 22:40:01 +0100 |
commit | edb440a952320ea4f021c1d7063ff6d5f2f13818 (patch) | |
tree | 5c18e7f1fabdcef8e140920ea75bfd0d0b400bd0 /src/expr/meta.rs | |
parent | 4b60b3cd41f5198c47a260ce69abf4c15b60ca92 (diff) |
Macros: introduce a macro to simplify enums
Diffstat (limited to 'src/expr/meta.rs')
-rw-r--r-- | src/expr/meta.rs | 46 |
1 files changed, 3 insertions, 43 deletions
diff --git a/src/expr/meta.rs b/src/expr/meta.rs index c4c1adb..79016bd 100644 --- a/src/expr/meta.rs +++ b/src/expr/meta.rs @@ -1,15 +1,11 @@ -use rustables_macros::nfnetlink_struct; +use rustables_macros::{nfnetlink_enum, nfnetlink_struct}; use super::{Expression, Register}; -use crate::{ - nlmsg::{NfNetlinkAttribute, NfNetlinkDeserializable}, - parser::DecodeError, - sys, -}; +use crate::sys; /// A meta expression refers to meta data associated with a packet. #[derive(Debug, Copy, Clone, Eq, PartialEq)] -#[repr(u32)] +#[nfnetlink_enum(u32)] #[non_exhaustive] pub enum MetaType { /// Packet ethertype protocol (skb->protocol), invalid in OUTPUT. @@ -42,42 +38,6 @@ pub enum MetaType { PRandom = sys::NFT_META_PRANDOM, } -impl NfNetlinkAttribute for MetaType { - fn get_size(&self) -> usize { - (*self as u32).get_size() - } - - unsafe fn write_payload(&self, addr: *mut u8) { - (*self as u32).write_payload(addr); - } -} - -impl NfNetlinkDeserializable for MetaType { - fn deserialize(buf: &[u8]) -> Result<(Self, &[u8]), DecodeError> { - let (v, remaining_data) = u32::deserialize(buf)?; - Ok(( - match v { - sys::NFT_META_PROTOCOL => Self::Protocol, - sys::NFT_META_MARK => Self::Mark, - sys::NFT_META_IIF => Self::Iif, - sys::NFT_META_OIF => Self::Oif, - sys::NFT_META_IIFNAME => Self::IifName, - sys::NFT_META_OIFNAME => Self::OifName, - sys::NFT_META_IFTYPE => Self::IifType, - sys::NFT_META_OIFTYPE => Self::OifType, - sys::NFT_META_SKUID => Self::SkUid, - sys::NFT_META_SKGID => Self::SkGid, - sys::NFT_META_NFPROTO => Self::NfProto, - sys::NFT_META_L4PROTO => Self::L4Proto, - sys::NFT_META_CGROUP => Self::Cgroup, - sys::NFT_META_PRANDOM => Self::PRandom, - value => return Err(DecodeError::UnknownMetaType(value)), - }, - remaining_data, - )) - } -} - #[derive(Clone, PartialEq, Eq, Default, Debug)] #[nfnetlink_struct] pub struct Meta { |