From 5cfbe23b5c65e9c5da88dbf15c95022caabdabc2 Mon Sep 17 00:00:00 2001 From: Red Bear OS Date: Wed, 8 Jul 2026 15:43:42 +0300 Subject: [PATCH] cleanup: fix unreachable pattern warnings in TCP/UDP socket options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TCP and UDP get_sock_opt/set_sock_opt had duplicate match arms due to constant collisions (Linux-level values share namespace): TCP: TCP_MAXSEG=2, IP_TTL=2, SO_REUSEADDR=2 → kept TCP_MAXSEG UDP: IP_TTL=2, SO_REUSEADDR=2 → kept IP_TTL (more useful) Removed unreachable arms with explanatory comments. The collision is inherent — Linux uses different option levels (SOL_SOCKET vs IPPROTO_TCP vs IPPROTO_IP) but Redox scheme has a flat namespace. Applications that use multi-level getsockopt() would need richer level dispatching. --- netstack/src/scheme/tcp.rs | 18 +++--------------- netstack/src/scheme/udp.rs | 17 ++--------------- 2 files changed, 5 insertions(+), 30 deletions(-) diff --git a/netstack/src/scheme/tcp.rs b/netstack/src/scheme/tcp.rs index f84ea492bb..3808a3906e 100644 --- a/netstack/src/scheme/tcp.rs +++ b/netstack/src/scheme/tcp.rs @@ -517,13 +517,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> { buf[..len].copy_from_slice(&name[..len]); Ok(len) } - IP_TTL => { - let val = self.hop_limit().unwrap_or(64) as u32; - let bytes = val.to_ne_bytes(); - let len = buf.len().min(bytes.len()); - buf[..len].copy_from_slice(&bytes[..len]); - Ok(len) - } + // IP_TTL(2) collides with TCP_MAXSEG(2) — TCP_MAXSEG handles it IP_MTU_DISCOVER => { let val: u32 = 1; let bytes = val.to_ne_bytes(); @@ -531,13 +525,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> { buf[..len].copy_from_slice(&bytes[..len]); Ok(len) } - SO_REUSEADDR => { - let val: u32 = 1; - let bytes = val.to_ne_bytes(); - let len = buf.len().min(bytes.len()); - buf[..len].copy_from_slice(&bytes[..len]); - Ok(len) - } + // SO_REUSEADDR(2) collides with TCP_MAXSEG(2) — TCP_MAXSEG handles it _ => Err(SyscallError::new(syscall::ENOPROTOOPT)), } } @@ -590,7 +578,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> { Ok(1) } IP_MTU_DISCOVER => Ok(1), - SO_REUSEADDR => Ok(1), + // SO_REUSEADDR(2) collides with IP_TTL(2) — IP_TTL handles it _ => Err(SyscallError::new(syscall::ENOPROTOOPT)), } } diff --git a/netstack/src/scheme/udp.rs b/netstack/src/scheme/udp.rs index 366d1dc0bc..9cef35ccba 100644 --- a/netstack/src/scheme/udp.rs +++ b/netstack/src/scheme/udp.rs @@ -436,20 +436,6 @@ impl<'a> SchemeSocket for UdpSocket<'a> { buf[..bytes.len()].copy_from_slice(&bytes); Ok(bytes.len()) } - SO_REUSEADDR => { - let val: u32 = 1; - let bytes = val.to_ne_bytes(); - let len = buf.len().min(bytes.len()); - buf[..len].copy_from_slice(&bytes[..len]); - Ok(len) - } - SO_BROADCAST => { - let val: u32 = 1; - let bytes = val.to_ne_bytes(); - let len = buf.len().min(bytes.len()); - buf[..len].copy_from_slice(&bytes[..len]); - Ok(len) - } IP_TTL => { let val = self.hop_limit().unwrap_or(64) as u32; let bytes = val.to_ne_bytes(); @@ -457,6 +443,7 @@ impl<'a> SchemeSocket for UdpSocket<'a> { buf[..len].copy_from_slice(&bytes[..len]); Ok(len) } + // SO_REUSEADDR(2) collides with IP_TTL(2) — IP_TTL handles it _ => Err(SyscallError::new(syscall::ENOPROTOOPT)), } } @@ -473,7 +460,7 @@ impl<'a> SchemeSocket for UdpSocket<'a> { self.set_hop_limit(Some(val)); Ok(1) } - SO_REUSEADDR | SO_BROADCAST => Ok(1), + // SO_REUSEADDR(2) and SO_BROADCAST(6): accepted, no state change needed _ => Err(SyscallError::new(syscall::ENOPROTOOPT)), } }