aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-05-03 21:29:50 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-05-03 21:29:50 +0200
commit55802ab8f947e227c0258eecfec2b78bd7bdedd9 (patch)
treeadc89da66f9e7e03ea563f6fb82beefb9fbfda1f
parenta938f14317c83085d5465fa8855e1cf7be319739 (diff)
add rule method to match syn packets
-rw-r--r--src/rule_methods.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/rule_methods.rs b/src/rule_methods.rs
index 7f3c4c9..cad0709 100644
--- a/src/rule_methods.rs
+++ b/src/rule_methods.rs
@@ -8,9 +8,10 @@ use crate::error::BuilderError;
use crate::expr::ct::{ConnTrackState, Conntrack, ConntrackKey};
use crate::expr::{
Bitwise, Cmp, CmpOp, ExtHdr, ExtHdrOp, HighLevelPayload, IPv4HeaderField, IPv6HeaderField,
- Immediate, Masquerade, Meta, MetaType, Nat, NatType, NetworkHeaderField, Register,
+ Immediate, Masquerade, Meta, MetaType, Nat, NatType, NetworkHeaderField, Payload, Register,
TCPHeaderField, TransportHeaderField, UDPHeaderField, VerdictKind,
};
+use crate::sys::NFT_PAYLOAD_TRANSPORT_HEADER;
use crate::{ProtocolFamily, Rule};
/// Simple protocol description. Note that it does not implement other layer 4 protocols as
@@ -264,6 +265,19 @@ impl Rule {
);
self
}
+ /// Matches TCP packets whose flags include SYN.
+ pub fn syn(mut self) -> Result<Self, BuilderError> {
+ self.add_expr(
+ Payload::default()
+ .with_base(NFT_PAYLOAD_TRANSPORT_HEADER)
+ .with_offset(13u32)
+ .with_len(1u32)
+ .with_dreg(Register::Reg1),
+ );
+ self.add_expr(Bitwise::new(2u8.to_be_bytes(), 0u8.to_be_bytes())?);
+ self.add_expr(Cmp::new(CmpOp::Neq, 0u8.to_be_bytes()));
+ Ok(self)
+ }
}
/// Looks up the interface index for a given interface name.