From d0a85c93ab8e71999bf6588de12a5f9890cdab7b Mon Sep 17 00:00:00 2001 From: yihau Date: Wed, 3 Apr 2024 21:34:01 +0800 Subject: [PATCH 1/3] remove InetAddr from streamer/src/recvmmsg.rs --- streamer/src/recvmmsg.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/streamer/src/recvmmsg.rs b/streamer/src/recvmmsg.rs index 72c7d3c51cdba1..65138e3ec6bf89 100644 --- a/streamer/src/recvmmsg.rs +++ b/streamer/src/recvmmsg.rs @@ -1,8 +1,5 @@ //! The `recvmmsg` module provides recvmmsg() API implementation -#[cfg(target_os = "linux")] -#[allow(deprecated)] -use nix::sys::socket::InetAddr; pub use solana_perf::packet::NUM_RCVMMSGS; use { crate::packet::{Meta, Packet}, @@ -12,7 +9,11 @@ use { use { itertools::izip, libc::{iovec, mmsghdr, sockaddr_storage, socklen_t, AF_INET, AF_INET6, MSG_WAITFORONE}, - std::{mem, os::unix::io::AsRawFd}, + std::{ + mem, + net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}, + os::unix::io::AsRawFd, + }, }; #[cfg(not(target_os = "linux"))] @@ -44,21 +45,29 @@ pub fn recv_mmsg(socket: &UdpSocket, packets: &mut [Packet]) -> io::Result Option { +fn cast_socket_addr(addr: &sockaddr_storage, hdr: &mmsghdr) -> Option { use libc::{sa_family_t, sockaddr_in, sockaddr_in6}; const SOCKADDR_IN_SIZE: usize = std::mem::size_of::(); const SOCKADDR_IN6_SIZE: usize = std::mem::size_of::(); if addr.ss_family == AF_INET as sa_family_t && hdr.msg_hdr.msg_namelen == SOCKADDR_IN_SIZE as socklen_t { - let addr = addr as *const _ as *const sockaddr_in; - return Some(unsafe { InetAddr::V4(*addr) }); + let addr = unsafe { &*(addr as *const _ as *const sockaddr_in) }; + return Some(SocketAddr::V4(SocketAddrV4::new( + Ipv4Addr::from(addr.sin_addr.s_addr.to_ne_bytes()), + u16::from_be(addr.sin_port), + ))); } if addr.ss_family == AF_INET6 as sa_family_t && hdr.msg_hdr.msg_namelen == SOCKADDR_IN6_SIZE as socklen_t { - let addr = addr as *const _ as *const sockaddr_in6; - return Some(unsafe { InetAddr::V6(*addr) }); + let addr = unsafe { &*(addr as *const _ as *const sockaddr_in6) }; + return Some(SocketAddr::V6(SocketAddrV6::new( + Ipv6Addr::from(addr.sin6_addr.s6_addr), + u16::from_be(addr.sin6_port), + addr.sin6_flowinfo, + addr.sin6_scope_id, + ))); } error!( "recvmmsg unexpected ss_family:{} msg_namelen:{}", @@ -118,7 +127,7 @@ pub fn recv_mmsg(sock: &UdpSocket, packets: &mut [Packet]) -> io::Result Date: Fri, 5 Apr 2024 00:04:59 +0800 Subject: [PATCH 2/3] remove 'allow deprecated' --- streamer/src/recvmmsg.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/streamer/src/recvmmsg.rs b/streamer/src/recvmmsg.rs index 65138e3ec6bf89..1512cdc8205b42 100644 --- a/streamer/src/recvmmsg.rs +++ b/streamer/src/recvmmsg.rs @@ -44,7 +44,6 @@ pub fn recv_mmsg(socket: &UdpSocket, packets: &mut [Packet]) -> io::Result Option { use libc::{sa_family_t, sockaddr_in, sockaddr_in6}; const SOCKADDR_IN_SIZE: usize = std::mem::size_of::(); From 0d04bf1c92b1ff491855f02a7d78ca895b7508a6 Mon Sep 17 00:00:00 2001 From: yihau Date: Fri, 5 Apr 2024 01:18:51 +0800 Subject: [PATCH 3/3] add ref link --- streamer/src/recvmmsg.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/streamer/src/recvmmsg.rs b/streamer/src/recvmmsg.rs index 1512cdc8205b42..b06ab0c43fc6a0 100644 --- a/streamer/src/recvmmsg.rs +++ b/streamer/src/recvmmsg.rs @@ -51,6 +51,7 @@ fn cast_socket_addr(addr: &sockaddr_storage, hdr: &mmsghdr) -> Option Option