diff --git a/Cargo.lock b/Cargo.lock index f1d09d3248..e12d606f91 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -472,9 +472,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smoltcp" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a1a996951e50b5971a2c8c0fa05a381480d70a933064245c4a223ddc87ccc97" +checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" dependencies = [ "bitflags 1.3.2", "byteorder 1.5.0", diff --git a/Cargo.toml b/Cargo.toml index 73e9390b05..24da1df44b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ default-features = false features = ["release_max_level_warn"] [dependencies.smoltcp] -version = "0.11.0" +version = "0.12.0" default-features = false features = [ "std", diff --git a/src/smolnetd/link/ethernet.rs b/src/smolnetd/link/ethernet.rs index 58dfab3d13..5f32a479dd 100644 --- a/src/smolnetd/link/ethernet.rs +++ b/src/smolnetd/link/ethernet.rs @@ -137,7 +137,11 @@ impl EthernetLink { return; } - if !source_hardware_addr.is_unicast() || !source_protocol_addr.is_unicast() { + if !source_hardware_addr.is_unicast() + || source_protocol_addr.is_broadcast() + || source_protocol_addr.is_multicast() + || source_protocol_addr.is_unspecified() + { return; } diff --git a/src/smolnetd/router/mod.rs b/src/smolnetd/router/mod.rs index 40a360ecf0..3cfd0a2fea 100644 --- a/src/smolnetd/router/mod.rs +++ b/src/smolnetd/router/mod.rs @@ -178,7 +178,7 @@ pub struct RxToken<'a> { impl<'a> smoltcp::phy::RxToken for RxToken<'a> { fn consume(self, f: F) -> R where - F: FnOnce(&mut [u8]) -> R, + F: FnOnce(&[u8]) -> R, { let ((), buf) = self .rx_buffer diff --git a/src/smolnetd/scheme/netcfg/mod.rs b/src/smolnetd/scheme/netcfg/mod.rs index 95492838ef..846bcddfdb 100644 --- a/src/smolnetd/scheme/netcfg/mod.rs +++ b/src/smolnetd/scheme/netcfg/mod.rs @@ -82,7 +82,7 @@ fn mk_root_node( if cur_value.is_none() { let ip = Ipv4Address::from_str(line.trim()) .map_err(|_| SyscallError::new(syscall::EINVAL))?; - if !ip.is_unicast() { + if ip.is_broadcast() || ip.is_multicast() || ip.is_unspecified() { return Err(SyscallError::new(syscall::EINVAL)); } *cur_value = Some(ip);