diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-05-03 21:24:41 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-05-03 21:24:41 +0200 |
commit | a938f14317c83085d5465fa8855e1cf7be319739 (patch) | |
tree | c273ec68c648e6279981d036aeb0047e03fda6b7 | |
parent | dd6551578b05c14cbe765ae3ab70b5fbe309fdea (diff) |
add method to change the tcp mss
-rw-r--r-- | src/rule_methods.rs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/rule_methods.rs b/src/rule_methods.rs index 6db9acc..7f3c4c9 100644 --- a/src/rule_methods.rs +++ b/src/rule_methods.rs @@ -7,9 +7,9 @@ use crate::data_type::ip_to_vec; use crate::error::BuilderError; use crate::expr::ct::{ConnTrackState, Conntrack, ConntrackKey}; use crate::expr::{ - Bitwise, Cmp, CmpOp, HighLevelPayload, IPv4HeaderField, IPv6HeaderField, Immediate, Masquerade, - Meta, MetaType, Nat, NatType, NetworkHeaderField, Register, TCPHeaderField, - TransportHeaderField, UDPHeaderField, VerdictKind, + Bitwise, Cmp, CmpOp, ExtHdr, ExtHdrOp, HighLevelPayload, IPv4HeaderField, IPv6HeaderField, + Immediate, Masquerade, Meta, MetaType, Nat, NatType, NetworkHeaderField, Register, + TCPHeaderField, TransportHeaderField, UDPHeaderField, VerdictKind, }; use crate::{ProtocolFamily, Rule}; @@ -247,6 +247,23 @@ impl Rule { }); self } + /// Adds the `ExtHdr` expression to the rule. The packet will have + /// its MSS rewritten. + pub fn set_mss(mut self, mss: u16) -> Self { + self.add_expr(Immediate::new_data( + mss.to_be_bytes().to_vec(), + Register::Reg1, + )); + self.add_expr( + ExtHdr::default() + .with_sreg(Register::Reg1) + .with_typ(2u8) + .with_offset(2u32) + .with_len(2u32) + .with_op(ExtHdrOp::TCPOpt), + ); + self + } } /// Looks up the interface index for a given interface name. |