From a462062708cfb03db2580d3ecfc5d140b05c7616 Mon Sep 17 00:00:00 2001 From: Michael Baikov Date: Thu, 6 Oct 2022 16:19:05 -0400 Subject: [PATCH 1/3] backport a test to see if timestamps are working in aarch64 --- test/sys/test_socket.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/test/sys/test_socket.rs b/test/sys/test_socket.rs index b4ca279d67..f9de2ea811 100644 --- a/test/sys/test_socket.rs +++ b/test/sys/test_socket.rs @@ -565,6 +565,9 @@ mod recvfrom { None, ) .expect("send socket failed"); + setsockopt(rsock, sockopt::ReceiveTimestampns, &true).unwrap(); + let mut cmsgspace1 = nix::cmsg_space!(nix::sys::time::TimeSpec); + let mut cmsgspace2 = nix::cmsg_space!(nix::sys::time::TimeSpec); let send_thread = thread::spawn(move || { for _ in 0..NUM_MESSAGES_SENT { @@ -582,19 +585,30 @@ mod recvfrom { .map(|buf| [IoSliceMut::new(&mut buf[..])]) .collect(); - for iov in &iovs { - msgs.push_back(RecvMmsgData { - iov, - cmsg_buffer: None, - }) - } + msgs.push_back(RecvMmsgData { + iov: &iovs[0], + cmsg_buffer: Some(&mut cmsgspace1), + }); + msgs.push_back(RecvMmsgData { + iov: &iovs[1], + cmsg_buffer: Some(&mut cmsgspace2), + }); let res: Vec> = recvmmsg(rsock, &mut msgs, MsgFlags::empty(), None) .expect("recvmmsg"); assert_eq!(res.len(), DATA.len()); - for RecvMsg { address, bytes, .. } in res.into_iter() { + for r in res.into_iter() { + let rtime = match r.cmsgs().next() { + Some(ControlMessageOwned::ScmTimestampns(rtime)) => rtime, + Some(_) => panic!("Unexpected control message"), + None => panic!("No control message"), + }; + assert!(rtime.tv_sec() > 10000); + + let RecvMsg { address, bytes, .. } = r; + assert_eq!(AddressFamily::Inet, address.unwrap().family().unwrap()); assert_eq!(DATA.len(), bytes); } From 44b74fc52cdf83d2232682718544743abc564a32 Mon Sep 17 00:00:00 2001 From: Michael Baikov Date: Thu, 6 Oct 2022 18:00:30 -0400 Subject: [PATCH 2/3] derp - rerun --- test/sys/test_socket.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/sys/test_socket.rs b/test/sys/test_socket.rs index f9de2ea811..8e083c7353 100644 --- a/test/sys/test_socket.rs +++ b/test/sys/test_socket.rs @@ -599,6 +599,7 @@ mod recvfrom { .expect("recvmmsg"); assert_eq!(res.len(), DATA.len()); + // one for r in res.into_iter() { let rtime = match r.cmsgs().next() { Some(ControlMessageOwned::ScmTimestampns(rtime)) => rtime, From 481887500dc6f9a03544cfd4aadf7a6fe2d1f664 Mon Sep 17 00:00:00 2001 From: Michael Baikov Date: Sun, 9 Oct 2022 17:15:15 -0400 Subject: [PATCH 3/3] limit recvmmsg test to just linux --- test/sys/test_socket.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/test/sys/test_socket.rs b/test/sys/test_socket.rs index 8e083c7353..c62471deb7 100644 --- a/test/sys/test_socket.rs +++ b/test/sys/test_socket.rs @@ -533,12 +533,7 @@ mod recvfrom { assert_eq!(AddressFamily::Inet, from.unwrap().family().unwrap()); } - #[cfg(any( - target_os = "linux", - target_os = "android", - target_os = "freebsd", - target_os = "netbsd", - ))] + #[cfg(any(target_os = "linux",))] #[test] pub fn udp_recvmmsg() { use nix::sys::socket::{recvmmsg, MsgFlags};