From db56f525584dfae0e241a96ec37e9cebed772c05 Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Thu, 2 Apr 2026 14:08:43 -0500 Subject: [PATCH 1/9] adds sockaddr_iucv This adds the sockaddr_iucv define in netiucv/iucv. It is primarily used on the s390x platform when linux is running under z/VM, but is present on all the linux systems I've been able to test on. --- libc-test/build.rs | 1 + src/unix/linux_like/mod.rs | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index b9905e046f7b1..a64af015e2fc0 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3776,6 +3776,7 @@ fn test_linux(target: &str) { "netinet/ip.h", "netinet/tcp.h", "netinet/udp.h", + "netiucv/iucv.h", (l4re, "netpacket/packet.h"), "poll.h", "pthread.h", diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index 30bad55e032f8..d63c36d2c9ed2 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -211,6 +211,15 @@ s! { pub sun_path: [c_char; 108], } + pub struct sockaddr_iucv { + pub siucv_family: crate::sa_family_t, + pub siucv_port: crate::in_port_t, + pub siucv_addr: crate::in_addr_t, + pub siucv_nodeid: [c_char; 8], + pub siucv_user_id: [c_char; 8], + pub siucv_name: [c_char; 8], + } + pub struct sockaddr_storage { pub ss_family: sa_family_t, #[cfg(target_pointer_width = "32")] From b02d775f20be16b9e415d3c27a3a4bb0007b6383 Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Thu, 2 Apr 2026 15:19:30 -0500 Subject: [PATCH 2/9] blocks iucv on PPC since it's missing there --- libc-test/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index a64af015e2fc0..299d872f37119 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3776,7 +3776,7 @@ fn test_linux(target: &str) { "netinet/ip.h", "netinet/tcp.h", "netinet/udp.h", - "netiucv/iucv.h", + (!ppc32, "netiucv/iucv.h"), (l4re, "netpacket/packet.h"), "poll.h", "pthread.h", From 02ec3b1ebb61e501a5ac7a2128546116923cac5e Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Thu, 2 Apr 2026 15:48:02 -0500 Subject: [PATCH 3/9] configure for x86 and s390x only --- libc-test/build.rs | 2 +- src/unix/linux_like/mod.rs | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 299d872f37119..753318d768660 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3776,7 +3776,7 @@ fn test_linux(target: &str) { "netinet/ip.h", "netinet/tcp.h", "netinet/udp.h", - (!ppc32, "netiucv/iucv.h"), + (x86_64 || s390x, "netiucv/iucv.h"), (l4re, "netpacket/packet.h"), "poll.h", "pthread.h", diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index d63c36d2c9ed2..2007433336128 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -211,15 +211,6 @@ s! { pub sun_path: [c_char; 108], } - pub struct sockaddr_iucv { - pub siucv_family: crate::sa_family_t, - pub siucv_port: crate::in_port_t, - pub siucv_addr: crate::in_addr_t, - pub siucv_nodeid: [c_char; 8], - pub siucv_user_id: [c_char; 8], - pub siucv_name: [c_char; 8], - } - pub struct sockaddr_storage { pub ss_family: sa_family_t, #[cfg(target_pointer_width = "32")] @@ -244,6 +235,21 @@ s! { } } +cfg_if! { + if #[cfg(any(target_arch = "x86_64", target_arch = "s390x"))] { + s! { + pub struct sockaddr_iucv { + pub siucv_family: crate::sa_family_t, + pub siucv_port: crate::in_port_t, + pub siucv_addr: crate::in_addr_t, + pub siucv_nodeid: [c_char; 8], + pub siucv_user_id: [c_char; 8], + pub siucv_name: [c_char; 8], + } + } + } +} + cfg_if! { if #[cfg(not(any(target_os = "emscripten", target_os = "l4re")))] { s! { From f113e57c32a65bd48ba30044852144f9831a089a Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Thu, 2 Apr 2026 16:00:10 -0500 Subject: [PATCH 4/9] further restrict from musl --- libc-test/build.rs | 2 +- src/unix/linux_like/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 753318d768660..f19f630ddd4a8 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3776,7 +3776,7 @@ fn test_linux(target: &str) { "netinet/ip.h", "netinet/tcp.h", "netinet/udp.h", - (x86_64 || s390x, "netiucv/iucv.h"), + (!musl && (x86_64 || s390x), "netiucv/iucv.h"), (l4re, "netpacket/packet.h"), "poll.h", "pthread.h", diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index 2007433336128..d0294d7ab44f8 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -236,7 +236,7 @@ s! { } cfg_if! { - if #[cfg(any(target_arch = "x86_64", target_arch = "s390x"))] { + if #[cfg(all(any(target_arch = "x86_64", target_arch = "s390x"), not(target_env = "musl")))] { s! { pub struct sockaddr_iucv { pub siucv_family: crate::sa_family_t, From c57a28df2e2c692731325d809f7365b64217d5b1 Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Thu, 2 Apr 2026 17:03:14 -0500 Subject: [PATCH 5/9] fixes style --- src/unix/linux_like/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index d0294d7ab44f8..a961835f2b53c 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -236,7 +236,10 @@ s! { } cfg_if! { - if #[cfg(all(any(target_arch = "x86_64", target_arch = "s390x"), not(target_env = "musl")))] { + if #[cfg(all( + any(target_arch = "x86_64", target_arch = "s390x"), + not(target_env = "musl") + ))] { s! { pub struct sockaddr_iucv { pub siucv_family: crate::sa_family_t, From 5a9c3ed897f233d253016f4cb42cb838c79540c0 Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Thu, 2 Apr 2026 17:12:49 -0500 Subject: [PATCH 6/9] further restricts android --- src/unix/linux_like/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index a961835f2b53c..f50325bda39d1 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -238,7 +238,7 @@ s! { cfg_if! { if #[cfg(all( any(target_arch = "x86_64", target_arch = "s390x"), - not(target_env = "musl") + not(any(target_env = "musl", target_os = "android")) ))] { s! { pub struct sockaddr_iucv { From 2f539154cc670f2c85d96a73ec66e4a4cdd7151e Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Sat, 4 Apr 2026 16:24:51 -0500 Subject: [PATCH 7/9] moves sockaddr_iucv into linux_like/linux/gnu --- libc-test/build.rs | 2 +- src/unix/linux_like/linux/gnu/mod.rs | 12 ++++++++++++ src/unix/linux_like/mod.rs | 18 ------------------ 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index f19f630ddd4a8..854cc29f48505 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3776,7 +3776,6 @@ fn test_linux(target: &str) { "netinet/ip.h", "netinet/tcp.h", "netinet/udp.h", - (!musl && (x86_64 || s390x), "netiucv/iucv.h"), (l4re, "netpacket/packet.h"), "poll.h", "pthread.h", @@ -3914,6 +3913,7 @@ fn test_linux(target: &str) { "linux/netfilter_ipv6.h", "linux/netfilter_ipv6/ip6_tables.h", "linux/netlink.h", + (gnu, "linux/netiucv/iucv.h") "linux/nsfs.h", "linux/openat2.h", // FIXME(linux): some items require Linux >= 5.6: diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index 926825c2e747e..ddc982b71ad11 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -298,6 +298,18 @@ s! { __state: crate::mbstate_t, } + + // net/iucv/iucv.h + + pub struct sockaddr_iucv { + pub siucv_family: crate::sa_family_t, + pub siucv_port: crate::in_port_t, + pub siucv_addr: crate::in_addr_t, + pub siucv_nodeid: [c_char; 8], + pub siucv_user_id: [c_char; 8], + pub siucv_name: [c_char; 8], + } + // linux x32 compatibility // See https://sourceware.org/bugzilla/show_bug.cgi?id=16437 #[derive(Default)] diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index f50325bda39d1..30bad55e032f8 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -235,24 +235,6 @@ s! { } } -cfg_if! { - if #[cfg(all( - any(target_arch = "x86_64", target_arch = "s390x"), - not(any(target_env = "musl", target_os = "android")) - ))] { - s! { - pub struct sockaddr_iucv { - pub siucv_family: crate::sa_family_t, - pub siucv_port: crate::in_port_t, - pub siucv_addr: crate::in_addr_t, - pub siucv_nodeid: [c_char; 8], - pub siucv_user_id: [c_char; 8], - pub siucv_name: [c_char; 8], - } - } - } -} - cfg_if! { if #[cfg(not(any(target_os = "emscripten", target_os = "l4re")))] { s! { From 84da29771508b3797cbd6caa9fd64d1674869565 Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Sat, 4 Apr 2026 16:34:56 -0500 Subject: [PATCH 8/9] misunderstood the build.rs file, fixed --- libc-test/build.rs | 2 +- src/unix/linux_like/linux/gnu/mod.rs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 854cc29f48505..167d857794853 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3776,6 +3776,7 @@ fn test_linux(target: &str) { "netinet/ip.h", "netinet/tcp.h", "netinet/udp.h", + (gnu, "netiucv/iucv.h"), (l4re, "netpacket/packet.h"), "poll.h", "pthread.h", @@ -3913,7 +3914,6 @@ fn test_linux(target: &str) { "linux/netfilter_ipv6.h", "linux/netfilter_ipv6/ip6_tables.h", "linux/netlink.h", - (gnu, "linux/netiucv/iucv.h") "linux/nsfs.h", "linux/openat2.h", // FIXME(linux): some items require Linux >= 5.6: diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index ddc982b71ad11..db3cbd4c89704 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -298,7 +298,6 @@ s! { __state: crate::mbstate_t, } - // net/iucv/iucv.h pub struct sockaddr_iucv { From 0e70b7236dd7457decc9ccbaba5e3962cc2f45fe Mon Sep 17 00:00:00 2001 From: Clayton Slaughter Date: Wed, 15 Apr 2026 14:23:09 -0500 Subject: [PATCH 9/9] moves sockaddr_iucv into ../linux/gno/b64 --- src/unix/linux_like/linux/gnu/b64/mod.rs | 11 +++++++++++ src/unix/linux_like/linux/gnu/mod.rs | 11 ----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/unix/linux_like/linux/gnu/b64/mod.rs b/src/unix/linux_like/linux/gnu/b64/mod.rs index 3d442a6d8129d..73564c8c0823b 100644 --- a/src/unix/linux_like/linux/gnu/b64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mod.rs @@ -98,6 +98,17 @@ s! { __glibc_reserved4: Padding, } + // net/iucv/iucv.h + + pub struct sockaddr_iucv { + pub siucv_family: crate::sa_family_t, + pub siucv_port: crate::in_port_t, + pub siucv_addr: crate::in_addr_t, + pub siucv_nodeid: [c_char; 8], + pub siucv_user_id: [c_char; 8], + pub siucv_name: [c_char; 8], + } + pub struct timex { pub modes: c_uint, #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))] diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index db3cbd4c89704..926825c2e747e 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -298,17 +298,6 @@ s! { __state: crate::mbstate_t, } - // net/iucv/iucv.h - - pub struct sockaddr_iucv { - pub siucv_family: crate::sa_family_t, - pub siucv_port: crate::in_port_t, - pub siucv_addr: crate::in_addr_t, - pub siucv_nodeid: [c_char; 8], - pub siucv_user_id: [c_char; 8], - pub siucv_name: [c_char; 8], - } - // linux x32 compatibility // See https://sourceware.org/bugzilla/show_bug.cgi?id=16437 #[derive(Default)]