From 87340814b70d8b7ca9f7eef3a2e9f457f84bc744 Mon Sep 17 00:00:00 2001 From: John Gallagher Date: Thu, 12 Jan 2023 11:51:07 -0500 Subject: [PATCH] Fix byte-swapped flowinfo and scope_id --- src/sys/socket/addr.rs | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/sys/socket/addr.rs b/src/sys/socket/addr.rs index 4e36ca4700..9b60c8f854 100644 --- a/src/sys/socket/addr.rs +++ b/src/sys/socket/addr.rs @@ -1180,10 +1180,10 @@ impl From for SockaddrIn6 { impl From for net::SocketAddrV6 { fn from(addr: SockaddrIn6) -> Self { net::SocketAddrV6::new( - net::Ipv6Addr::from(addr.0.sin6_addr.s6_addr), - u16::from_be(addr.0.sin6_port), - u32::from_be(addr.0.sin6_flowinfo), - u32::from_be(addr.0.sin6_scope_id), + addr.ip(), + addr.port(), + addr.flowinfo(), + addr.scope_id(), ) } } @@ -2489,8 +2489,16 @@ mod tests { mod sockaddr_in { use super::*; + use std::net::SocketAddrV4; use std::str::FromStr; + #[test] + fn roundtrip_std_socketaddrv4() { + let addr = SocketAddrV4::new("1.2.3.4".parse().unwrap(), 0x0102); + let s = SockaddrIn::from(addr); + assert_eq!(SocketAddrV4::from(s), addr); + } + #[test] fn display() { let s = "127.0.0.1:8080"; @@ -2509,8 +2517,21 @@ mod tests { mod sockaddr_in6 { use super::*; + use std::net::SocketAddrV6; use std::str::FromStr; + #[test] + fn roundtrip_std_socketaddrv6() { + let addr = SocketAddrV6::new( + "1234:5678:90ab:cdef::1111:2222".parse().unwrap(), + 0x0102, + 0x01020304, + 0x01020304, + ); + let s = SockaddrIn6::from(addr); + assert_eq!(SocketAddrV6::from(s), addr); + } + #[test] fn display() { let s = "[1234:5678:90ab:cdef::1111:2222]:8080";