aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-03-21 21:25:44 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-03-21 21:25:44 +0100
commitb18f9b75cba7a03429fb586dcf5e4ba0949e3b57 (patch)
tree820bbcd233f45cc76d1c6095c31fa965aea4c0a1
parente6b6175b27180c87335a6ded5a8b4603c7a168b2 (diff)
add support for masquerading
-rw-r--r--src/expr/immediate.rs1
-rw-r--r--src/expr/verdict.rs1
-rw-r--r--src/rule_methods.rs6
3 files changed, 8 insertions, 0 deletions
diff --git a/src/expr/immediate.rs b/src/expr/immediate.rs
index 2fd9bd5..47c9478 100644
--- a/src/expr/immediate.rs
+++ b/src/expr/immediate.rs
@@ -32,6 +32,7 @@ impl Immediate {
VerdictKind::Jump { .. } => VerdictType::Jump,
VerdictKind::Goto { .. } => VerdictType::Goto,
VerdictKind::Return => VerdictType::Return,
+ VerdictKind::Masquerade => VerdictType::Goto,
};
let mut data = Verdict::default().with_code(code);
if let VerdictKind::Jump { chain } | VerdictKind::Goto { chain } = kind {
diff --git a/src/expr/verdict.rs b/src/expr/verdict.rs
index c42ad32..609c21d 100644
--- a/src/expr/verdict.rs
+++ b/src/expr/verdict.rs
@@ -47,4 +47,5 @@ pub enum VerdictKind {
chain: String,
},
Return,
+ Masquerade,
}
diff --git a/src/rule_methods.rs b/src/rule_methods.rs
index 4ee3a16..161c2a4 100644
--- a/src/rule_methods.rs
+++ b/src/rule_methods.rs
@@ -218,6 +218,12 @@ impl Rule {
self.add_expr(Immediate::new_verdict(VerdictKind::Drop));
self
}
+ /// Adds the `Masquerade` verdict to the rule. The packet will have its
+ /// source address rewritten.
+ pub fn masquerade(mut self) -> Self {
+ self.add_expr(Immediate::new_verdict(VerdictKind::Masquerade));
+ self
+ }
}
/// Looks up the interface index for a given interface name.