aboutsummaryrefslogtreecommitdiff
path: root/nftnl/src/expr/immediate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'nftnl/src/expr/immediate.rs')
-rw-r--r--nftnl/src/expr/immediate.rs104
1 files changed, 3 insertions, 101 deletions
diff --git a/nftnl/src/expr/immediate.rs b/nftnl/src/expr/immediate.rs
index 0e89abc..f0e0c2c 100644
--- a/nftnl/src/expr/immediate.rs
+++ b/nftnl/src/expr/immediate.rs
@@ -1,7 +1,7 @@
-use super::Expression;
+use super::{Expression, Rule};
use libc;
use nftnl_sys::{self as sys, libc::{c_char, c_void}};
-use std::{ffi::{CStr, CString}, mem::size_of_val};
+use std::mem::size_of_val;
/// An immediate expression. Used to set immediate data.
/// Verdicts are handled separately by [Verdict].
@@ -11,7 +11,7 @@ pub struct Immediate<T> {
}
impl<T> Expression for Immediate<T> {
- fn to_expr(&self) -> *mut sys::nftnl_expr {
+ fn to_expr(&self, _rule: &Rule) -> *mut sys::nftnl_expr {
unsafe {
let expr = try_alloc!(sys::nftnl_expr_alloc(
b"immediate\0" as *const _ as *const c_char
@@ -41,101 +41,3 @@ macro_rules! nft_expr_immediate {
$crate::expr::Immediate { data: $value }
};
}
-
-/// A verdict expression. In the background actually an "Immediate" expression in nftnl terms,
-/// but here it's simplified to only represent a verdict.
-#[derive(Debug, Clone, Eq, PartialEq, Hash)]
-pub enum Verdict {
- /// Silently drop the packet.
- Drop,
- /// Accept the packet and let it pass.
- Accept,
- Queue,
- Continue,
- Break,
- Jump {
- chain: CString,
- },
- Goto {
- chain: CString,
- },
- Return,
-}
-
-impl Verdict {
- fn verdict_const(&self) -> i32 {
- match *self {
- Verdict::Drop => libc::NF_DROP,
- Verdict::Accept => libc::NF_ACCEPT,
- Verdict::Queue => libc::NF_QUEUE,
- Verdict::Continue => libc::NFT_CONTINUE,
- Verdict::Break => libc::NFT_BREAK,
- Verdict::Jump { .. } => libc::NFT_JUMP,
- Verdict::Goto { .. } => libc::NFT_GOTO,
- Verdict::Return => libc::NFT_RETURN,
- }
- }
-
- fn chain(&self) -> Option<&CStr> {
- match *self {
- Verdict::Jump { ref chain } => Some(chain.as_c_str()),
- Verdict::Goto { ref chain } => Some(chain.as_c_str()),
- _ => None,
- }
- }
-}
-
-impl Expression for Verdict {
- fn to_expr(&self) -> *mut sys::nftnl_expr {
- unsafe {
- let expr = try_alloc!(sys::nftnl_expr_alloc(
- b"immediate\0" as *const _ as *const c_char
- ));
-
- sys::nftnl_expr_set_u32(
- expr,
- sys::NFTNL_EXPR_IMM_DREG as u16,
- libc::NFT_REG_VERDICT as u32,
- );
-
- if let Some(chain) = self.chain() {
- sys::nftnl_expr_set_str(expr, sys::NFTNL_EXPR_IMM_CHAIN as u16, chain.as_ptr());
- }
- sys::nftnl_expr_set_u32(
- expr,
- sys::NFTNL_EXPR_IMM_VERDICT as u16,
- self.verdict_const() as u32,
- );
-
- expr
- }
- }
-}
-
-#[macro_export]
-macro_rules! nft_expr_verdict {
- (drop) => {
- $crate::expr::Verdict::Drop
- };
- (accept) => {
- $crate::expr::Verdict::Accept
- };
- (queue) => {
- $crate::expr::Verdict::Queue
- };
- (continue) => {
- $crate::expr::Verdict::Continue
- };
- (break) => {
- $crate::expr::Verdict::Break
- };
- (jump $chain:expr) => {
- $crate::expr::Verdict::Jump { chain: $chain }
- };
- (goto $chain:expr) => {
- $crate::expr::Verdict::Goto { chain: $chain }
- };
- (return) => {
- $crate::expr::Verdict::Return
- };
-}