aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-05-02 19:48:19 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-05-02 19:48:19 +0200
commitebf1fe712fa11f5fe810817b8542afc4250f6788 (patch)
tree113b5abe24a0b33c2aa7f914228b32f09cbec987
parentdc8b17410cec050ea62f65056b455644e5253126 (diff)
choose clamped mss correctly: minimum of original mss and mtu - 400.1.3
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--src/main.rs6
3 files changed, 6 insertions, 4 deletions
diff --git a/Cargo.lock b/Cargo.lock
index e27dea2..87c6a4b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -940,7 +940,7 @@ dependencies = [
[[package]]
name = "rsdsl_pppoe"
-version = "0.1.2"
+version = "0.1.3"
dependencies = [
"byteorder",
"etherparse",
diff --git a/Cargo.toml b/Cargo.toml
index 341d8e4..fddb082 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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);