diff options
Diffstat (limited to 'src/expr/byteorder.rs')
-rw-r--r-- | src/expr/byteorder.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/expr/byteorder.rs b/src/expr/byteorder.rs new file mode 100644 index 0000000..e45bc92 --- /dev/null +++ b/src/expr/byteorder.rs @@ -0,0 +1,40 @@ +use rustables_macros::{nfnetlink_enum, nfnetlink_struct}; + +use crate::sys::{ + NFTA_BYTEORDER_DREG, NFTA_BYTEORDER_LEN, NFTA_BYTEORDER_OP, NFTA_BYTEORDER_SIZE, + NFTA_BYTEORDER_SREG, NFT_BYTEORDER_HTON, NFT_BYTEORDER_NTOH, +}; + +use super::{Expression, Register}; + +/// Byteorder operation. +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +#[nfnetlink_enum(u32, nested = true)] +pub enum ByteorderOp { + /// Network to host byte order. + NtoH = NFT_BYTEORDER_NTOH, + /// Host to network byte order. + HtoN = NFT_BYTEORDER_HTON, +} + +/// Ensures a register is of the correct byte order. +#[derive(Default, Debug, Clone, PartialEq, Eq)] +#[nfnetlink_struct(nested = true)] +pub struct Byteorder { + #[field(NFTA_BYTEORDER_SREG)] + sreg: Register, + #[field(NFTA_BYTEORDER_DREG)] + dreg: Register, + #[field(NFTA_BYTEORDER_OP)] + op: ByteorderOp, + #[field(NFTA_BYTEORDER_LEN)] + len: u32, + #[field(NFTA_BYTEORDER_SIZE)] + siz: u32, +} + +impl Expression for Byteorder { + fn get_name() -> &'static str { + "byteorder" + } +} |