瀏覽代碼

log and drop ipv6 packets requiring fragmentation

ipv6 -> IPv6

Co-authored-by: Catherine <whitequark@whitequark.org>
Easyoakland 4 月之前
父節點
當前提交
bef9b05009
共有 1 個文件被更改,包括 17 次插入9 次删除
  1. 17 9
      src/iface/interface/mod.rs

+ 17 - 9
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(())
+                    })
+                }
+            }
         }
     }
 }