diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-05-02 19:48:19 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-05-02 19:48:19 +0200 |
commit | ebf1fe712fa11f5fe810817b8542afc4250f6788 (patch) | |
tree | 113b5abe24a0b33c2aa7f914228b32f09cbec987 | |
parent | dc8b17410cec050ea62f65056b455644e5253126 (diff) |
choose clamped mss correctly: minimum of original mss and mtu - 400.1.3
-rw-r--r-- | Cargo.lock | 2 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/main.rs | 6 |
3 files changed, 6 insertions, 4 deletions
@@ -940,7 +940,7 @@ dependencies = [ [[package]] name = "rsdsl_pppoe" -version = "0.1.2" +version = "0.1.3" dependencies = [ "byteorder", "etherparse", @@ -1,6 +1,6 @@ [package] name = "rsdsl_pppoe" -version = "0.1.2" +version = "0.1.3" authors = ["HimbeerserverDE <himbeerserverde@gmail.com>"] license = "MIT" edition = "2021" diff --git a/src/main.rs b/src/main.rs index 1be7d5f..d062d5d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use rsdsl_pppoe::client::Client; use rsdsl_pppoe::config::Config; use rsdsl_pppoe::error::{Error, Result}; +use std::cmp::min; use std::fs::File; use std::sync::mpsc; use std::sync::{Arc, Mutex}; @@ -15,6 +16,7 @@ use rsdsl_netlinkd::link; use tun_tap::{Iface, Mode}; const IPPROTO_TCP: u8 = 0x06; +const MAX_MSS: u16 = 1452; fn prepend<T>(v: Vec<T>, s: &[T]) -> Vec<T> where @@ -40,8 +42,8 @@ fn clamp_mss_if_needed(buf: &mut [u8]) -> Result<()> { for opt in tcp_header.options_iterator() { match opt { Ok(mut opt) => { - if let TcpOptionElement::MaximumSegmentSize(_) = opt { - opt = TcpOptionElement::MaximumSegmentSize(1492); + if let TcpOptionElement::MaximumSegmentSize(mss) = opt { + opt = TcpOptionElement::MaximumSegmentSize(min(mss, MAX_MSS)); } opts.push(opt); |