From 315bce6cb70cf2b521f454d0d9307b84fd649813 Mon Sep 17 00:00:00 2001 From: arctic-alpaca <67190338+arctic-alpaca@users.noreply.github.com> Date: Mon, 27 Nov 2023 14:29:58 +0100 Subject: [PATCH] Fix mistakes, switch to libc fork --- Cargo.toml | 9 ++++++--- src/backend/libc/net/msghdr.rs | 1 + src/backend/libc/net/read_sockaddr.rs | 4 ++-- src/backend/libc/net/sockopt.rs | 1 - src/backend/libc/net/syscalls.rs | 6 +++--- src/backend/libc/net/write_sockaddr.rs | 1 - src/backend/linux_raw/net/sockopt.rs | 1 - src/backend/linux_raw/net/syscalls.rs | 1 + src/backend/linux_raw/net/write_sockaddr.rs | 1 - src/net/socket.rs | 4 ++-- src/net/sockopt.rs | 5 +---- 11 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 81f5d9ec6..3b417ea0d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,8 @@ once_cell = { version = "1.5.2", optional = true } #linux-raw-sys = { version = "0.4.11", default-features = false, features = ["general", "errno", "ioctl", "no_std", "elf"] } linux-raw-sys = { git = "https://github.com/arctic-alpaca/linux-raw-sys", branch = "v0.4.11", version = "0.4.11", default-features = false, features = ["general", "errno", "ioctl", "no_std", "elf"] } libc_errno = { package = "errno", version = "0.3.1", default-features = false, optional = true } -libc = { version = "0.2.150", default-features = false, features = ["extra_traits"], optional = true } +#libc = { version = "0.2.150", default-features = false, features = ["extra_traits"], optional = true } +libc = { git = "https://github.com/arctic-alpaca/libc", default-features = false, features = ["extra_traits"], optional = true } # Dependencies for platforms where only libc is supported: # @@ -47,7 +48,8 @@ libc = { version = "0.2.150", default-features = false, features = ["extra_trait # backend, so enable its dependencies unconditionally. [target.'cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = "linux", target_endian = "little", any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64")))))))'.dependencies] libc_errno = { package = "errno", version = "0.3.1", default-features = false } -libc = { version = "0.2.150", default-features = false, features = ["extra_traits"] } +#libc = { version = "0.2.150", default-features = false, features = ["extra_traits"] } +libc = { git = "https://github.com/arctic-alpaca/libc", default-features = false, features = ["extra_traits"] } # Additional dependencies for Linux with the libc backend: # @@ -76,7 +78,8 @@ default-features = false [dev-dependencies] tempfile = "3.5.0" -libc = "0.2.150" +#libc = "0.2.150" +libc = {git = "https://github.com/arctic-alpaca/libc"} libc_errno = { package = "errno", version = "0.3.1", default-features = false } serial_test = "2.0.0" memoffset = "0.9.0" diff --git a/src/backend/libc/net/msghdr.rs b/src/backend/libc/net/msghdr.rs index c94fd60b5..d212c65a6 100644 --- a/src/backend/libc/net/msghdr.rs +++ b/src/backend/libc/net/msghdr.rs @@ -129,6 +129,7 @@ pub(crate) fn with_unix_msghdr( } /// Create a message header intended to send with an IPv6 address. +#[cfg(target_os = "linux")] pub(crate) fn with_xdp_msghdr( addr: &SocketAddrXdp, iov: &[IoSlice<'_>], diff --git a/src/backend/libc/net/read_sockaddr.rs b/src/backend/libc/net/read_sockaddr.rs index 03466e613..08939d4f8 100644 --- a/src/backend/libc/net/read_sockaddr.rs +++ b/src/backend/libc/net/read_sockaddr.rs @@ -201,12 +201,12 @@ pub(crate) unsafe fn read_sockaddr( return Err(io::Errno::INVAL); } let decode = &*storage.cast::(); - SocketAddrAny::Xdp(SocketAddrXdp::new( + Ok(SocketAddrAny::Xdp(SocketAddrXdp::new( SockaddrXdpFlags::from_bits_retain(decode.sxdp_flags), u32::from_be(decode.sxdp_ifindex), u32::from_be(decode.sxdp_queue_id), u32::from_be(decode.sxdp_shared_umem_fd), - )) + ))) } _ => Err(io::Errno::INVAL), } diff --git a/src/backend/libc/net/sockopt.rs b/src/backend/libc/net/sockopt.rs index b4bdb7212..5e0b6d3e5 100644 --- a/src/backend/libc/net/sockopt.rs +++ b/src/backend/libc/net/sockopt.rs @@ -71,7 +71,6 @@ use alloc::borrow::ToOwned; target_os = "illumos" ))] use alloc::string::String; -use bitflags::Flags; #[cfg(apple)] use c::TCP_KEEPALIVE as TCP_KEEPIDLE; #[cfg(not(any(apple, target_os = "openbsd", target_os = "haiku", target_os = "nto")))] diff --git a/src/backend/libc/net/syscalls.rs b/src/backend/libc/net/syscalls.rs index eb28b2477..b703715f5 100644 --- a/src/backend/libc/net/syscalls.rs +++ b/src/backend/libc/net/syscalls.rs @@ -149,7 +149,7 @@ pub(crate) fn sendto_unix( } } -#[cfg(not(any(target_os = "redox", target_os = "wasi")))] +#[cfg(target_os = "linux")] pub(crate) fn sendto_xdp( fd: BorrowedFd<'_>, buf: &[u8], @@ -245,8 +245,8 @@ pub(crate) fn bind_xdp(sockfd: BorrowedFd<'_>, addr: &SocketAddrXdp) -> io::Resu unsafe { ret(c::bind( borrowed_fd(sockfd), - as_ptr(&encode_sockaddr_xdp(xdp)).cast(), - size_of::(), + as_ptr(&encode_sockaddr_xdp(addr)).cast(), + size_of::() as c::socklen_t, )) } } diff --git a/src/backend/libc/net/write_sockaddr.rs b/src/backend/libc/net/write_sockaddr.rs index 9b86a83ed..fdc5dbb13 100644 --- a/src/backend/libc/net/write_sockaddr.rs +++ b/src/backend/libc/net/write_sockaddr.rs @@ -9,7 +9,6 @@ use crate::backend::c; #[cfg(target_os = "linux")] use crate::net::xdp::SocketAddrXdp; use crate::net::{SocketAddrAny, SocketAddrV4, SocketAddrV6}; -use bitflags::Flags; use core::mem::size_of; pub(crate) unsafe fn write_sockaddr( diff --git a/src/backend/linux_raw/net/sockopt.rs b/src/backend/linux_raw/net/sockopt.rs index 65f545cb6..9fac64b58 100644 --- a/src/backend/linux_raw/net/sockopt.rs +++ b/src/backend/linux_raw/net/sockopt.rs @@ -24,7 +24,6 @@ use crate::net::{ use alloc::borrow::ToOwned; #[cfg(feature = "alloc")] use alloc::string::String; -use bitflags::Flags; use core::mem::MaybeUninit; use core::time::Duration; use linux_raw_sys::general::{__kernel_old_timeval, __kernel_sock_timeval}; diff --git a/src/backend/linux_raw/net/syscalls.rs b/src/backend/linux_raw/net/syscalls.rs index e320c4ecf..e2e2d3505 100644 --- a/src/backend/linux_raw/net/syscalls.rs +++ b/src/backend/linux_raw/net/syscalls.rs @@ -621,6 +621,7 @@ pub(crate) fn sendto_unix( } } +#[cfg(target_os = "linux")] #[inline] pub(crate) fn sendto_xdp( fd: BorrowedFd<'_>, diff --git a/src/backend/linux_raw/net/write_sockaddr.rs b/src/backend/linux_raw/net/write_sockaddr.rs index df95d84d1..fb6e51edb 100644 --- a/src/backend/linux_raw/net/write_sockaddr.rs +++ b/src/backend/linux_raw/net/write_sockaddr.rs @@ -6,7 +6,6 @@ use crate::backend::c; #[cfg(target_os = "linux")] use crate::net::xdp::SocketAddrXdp; use crate::net::{SocketAddrAny, SocketAddrStorage, SocketAddrUnix, SocketAddrV4, SocketAddrV6}; -use bitflags::Flags; use core::mem::size_of; pub(crate) unsafe fn write_sockaddr( diff --git a/src/net/socket.rs b/src/net/socket.rs index d9f56acbd..d7129c2a6 100644 --- a/src/net/socket.rs +++ b/src/net/socket.rs @@ -3,7 +3,7 @@ use crate::net::{SocketAddr, SocketAddrAny, SocketAddrV4, SocketAddrV6}; use crate::{backend, io}; use backend::fd::{AsFd, BorrowedFd}; -use crate::io::Errno; +#[cfg(target_os = "linux")] use crate::net::xdp::SocketAddrXdp; pub use crate::net::{AddressFamily, Protocol, Shutdown, SocketFlags, SocketType}; #[cfg(unix)] @@ -281,7 +281,7 @@ pub fn bind_unix(sockfd: Fd, addr: &SocketAddrUnix) -> io::Result<()> /// - [Linux] /// /// [Linux]: https://man7.org/linux/man-pages/man2/bind.2.html -#[cfg(unix)] +#[cfg(target_os = "linux")] #[inline] #[doc(alias = "bind")] pub fn bind_xdp(sockfd: Fd, addr: &SocketAddrXdp) -> io::Result<()> { diff --git a/src/net/sockopt.rs b/src/net/sockopt.rs index 27d074509..2e437bb64 100644 --- a/src/net/sockopt.rs +++ b/src/net/sockopt.rs @@ -143,9 +143,8 @@ #![doc(alias = "getsockopt")] #![doc(alias = "setsockopt")] -use crate::net::xdp::{XdpMmapOffsets, XdpUmemReg}; #[cfg(target_os = "linux")] -use crate::net::xdp::{XdpOptionsFlags, XdpStatistics}; +use crate::net::xdp::{XdpMmapOffsets, XdpOptionsFlags, XdpStatistics, XdpUmemReg}; #[cfg(not(any( apple, windows, @@ -185,8 +184,6 @@ use alloc::string::String; use backend::c; use backend::fd::AsFd; use core::time::Duration; -#[cfg(target_os = "linux")] -use linux_raw_sys::xdp::xdp_mmap_offsets; /// Timeout identifier for use with [`set_socket_timeout`] and /// [`get_socket_timeout`].