From 93afedade5c6c1bd71a5cc0364f0f1b3339deda3 Mon Sep 17 00:00:00 2001 From: Red Bear OS Date: Wed, 8 Jul 2026 19:24:43 +0300 Subject: [PATCH] relibc: extend getsockopt to handle IPPROTO_IP and IPPROTO_IPV6 Previously only SOL_SOCKET and IPPROTO_TCP levels were handled by the socket scheme. Now IPPROTO_IP and IPPROTO_IPV6 levels also forward to the socket scheme via SocketCall::GetSockOpt, removing the ENOSYS fallthrough for these common socket option levels. Cross-referenced with Linux 7.1 net/ipv4/ip_sockglue.c and net/ipv6/ipv6_sockglue.c which implement IP/UDP/ICMP level getsockopt handlers. --- src/platform/redox/socket.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/platform/redox/socket.rs b/src/platform/redox/socket.rs index d0fbe9d010..87ecff53a8 100644 --- a/src/platform/redox/socket.rs +++ b/src/platform/redox/socket.rs @@ -789,6 +789,22 @@ impl PalSocket for Sys { } return Ok(()); } + crate::header::netinet_in::IPPROTO_IP as c_int + | crate::header::netinet_in::IPPROTO_IPV6 as c_int => { + let metadata = [SocketCall::GetSockOpt as u64, option_name as u64]; + let payload = + unsafe { slice::from_raw_parts_mut(option_value as *mut u8, option_len) }; + let call_flags = CallFlags::empty(); + unsafe { + *option_len_ptr = redox_rt::sys::sys_call_ro( + socket as usize, + payload, + CallFlags::empty(), + &metadata, + )? as socklen_t; + } + return Ok(()); + } _ => (), }