aboutsummaryrefslogtreecommitdiff
path: root/src/expr/byteorder.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/expr/byteorder.rs')
-rw-r--r--src/expr/byteorder.rs40
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"
+ }
+}