From 6d58797223f37975640bb963d5f76f7d445272be Mon Sep 17 00:00:00 2001 From: Easyoakland <97992568+Easyoakland@users.noreply.github.com> Date: Mon, 27 Jan 2025 18:55:21 -0700 Subject: [PATCH] log and drop ipv6 packets requiring fragmentation --- src/iface/interface/mod.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/iface/interface/mod.rs b/src/iface/interface/mod.rs index 4a2458ab6..24102fae0 100644 --- a/src/iface/interface/mod.rs +++ b/src/iface/interface/mod.rs @@ -1299,16 +1299,24 @@ impl InterfaceInner { } // We don't support IPv6 fragmentation yet. #[cfg(feature = "proto-ipv6")] - IpRepr::Ipv6(_) => tx_token.consume(total_len, |mut tx_buffer| { - #[cfg(feature = "medium-ethernet")] - if matches!(self.caps.medium, Medium::Ethernet) { - emit_ethernet(&ip_repr, tx_buffer)?; - tx_buffer = &mut tx_buffer[EthernetFrame::<&[u8]>::header_len()..]; - } + IpRepr::Ipv6(_) => { + // Check if we need to fragment it. + if total_ip_len > self.caps.ip_mtu() { + net_debug!("ipv6 fragmentation support is unimplemented. Dropping."); + Ok(()) + } else { + tx_token.consume(total_len, |mut tx_buffer| { + #[cfg(feature = "medium-ethernet")] + if matches!(self.caps.medium, Medium::Ethernet) { + emit_ethernet(&ip_repr, tx_buffer)?; + tx_buffer = &mut tx_buffer[EthernetFrame::<&[u8]>::header_len()..]; + } - emit_ip(&ip_repr, tx_buffer); - Ok(()) - }), + emit_ip(&ip_repr, tx_buffer); + Ok(()) + }) + } + } } } }