aboutsummaryrefslogtreecommitdiff
path: root/src/expr/meta.rs
diff options
context:
space:
mode:
authorSimon THOBY <git@nightmared.fr>2022-12-03 22:53:23 +0100
committerSimon THOBY <git@nightmared.fr>2022-12-05 22:40:01 +0100
commitedb440a952320ea4f021c1d7063ff6d5f2f13818 (patch)
tree5c18e7f1fabdcef8e140920ea75bfd0d0b400bd0 /src/expr/meta.rs
parent4b60b3cd41f5198c47a260ce69abf4c15b60ca92 (diff)
Macros: introduce a macro to simplify enums
Diffstat (limited to 'src/expr/meta.rs')
-rw-r--r--src/expr/meta.rs46
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 {