From ec95a39eb3e9abd31983e4dcd44fe58a5d9fdc81 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Tue, 10 Jun 2025 10:33:59 +0300 Subject: [PATCH 1/5] libc-test/build.rs: add netinet/in_pcb.h to the list of FreeBSD headers --- libc-test/build.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index 23eef46d3e61..3aca08d07746 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -2444,6 +2444,8 @@ fn test_freebsd(target: &str) { "sys/sem.h", "sys/shm.h", "sys/socket.h", + "sys/socketvar.h", + "netinet/in_pcb.h", // must be after sys/socketvar.h "sys/stat.h", "sys/statvfs.h", "sys/sysctl.h", From 876783b443de384554d3e3f1d1a83e29c3159998 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Thu, 22 May 2025 14:22:35 +0300 Subject: [PATCH 2/5] FreeBSD: add xinpgen and related types definitions --- src/unix/bsd/freebsdlike/freebsd/mod.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index aeda128febfa..62d4feb73c7d 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -11,6 +11,9 @@ pub type fixpt_t = __fixpt_t; pub type __lwpid_t = i32; pub type lwpid_t = __lwpid_t; pub type blksize_t = i32; +pub type ksize_t = u64; +pub type inp_gen_t = u64; +pub type so_gen_t = u64; pub type clockid_t = c_int; pub type sem_t = _sem; pub type timer_t = *mut __c_anonymous__timer; @@ -1720,6 +1723,15 @@ s_no_extra_traits! { pub uc_flags: c_int, __spare__: [c_int; 4], } + + pub struct xinpgen { + pub xig_len: ksize_t, + pub xig_count: u32, + _xig_spare32: u32, + pub xig_gen: inp_gen_t, + pub xig_sogen: so_gen_t, + _xig_spare64: [u64; 4], + } } cfg_if! { From 921599e1dcd4d2435e69b8abd5812a3144f5d845 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Wed, 21 May 2025 08:03:07 +0300 Subject: [PATCH 3/5] FreeBSD: add in_conninfo definition --- src/unix/bsd/freebsdlike/freebsd/mod.rs | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index 62d4feb73c7d..09f7f49a9a4b 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -1732,6 +1732,31 @@ s_no_extra_traits! { pub xig_sogen: so_gen_t, _xig_spare64: [u64; 4], } + + pub struct in_addr_4in6 { + _ia46_pad32: [u32; 3], + pub ia46_addr4: crate::in_addr, + } + + pub union in_dependaddr { + pub id46_addr: crate::in_addr_4in6, + pub id6_addr: crate::in6_addr, + } + + pub struct in_endpoints { + pub ie_fport: u16, + pub ie_lport: u16, + pub ie_dependfaddr: crate::in_dependaddr, + pub ie_dependladdr: crate::in_dependaddr, + pub ie6_zoneid: u32, + } + + pub struct in_conninfo { + pub inc_flags: u8, + pub inc_len: u8, + pub inc_fibnum: u16, + pub inc_ie: crate::in_endpoints, + } } cfg_if! { @@ -4602,6 +4627,10 @@ pub const RB_POWERCYCLE: c_int = 0x400000; pub const RB_PROBE: c_int = 0x10000000; pub const RB_MULTIPLE: c_int = 0x20000000; +// netinet/in_pcb.h +pub const INC_ISIPV6: c_uchar = 0x01; +pub const INC_IPV6MINMTU: c_uchar = 0x02; + // sys/time.h pub const CLOCK_BOOTTIME: crate::clockid_t = crate::CLOCK_UPTIME; pub const CLOCK_REALTIME_COARSE: crate::clockid_t = crate::CLOCK_REALTIME_FAST; From 0d6118dd34a353ffdf0efa03a205275550fd7587 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Wed, 21 May 2025 08:03:29 +0300 Subject: [PATCH 4/5] FreeBSD: add xktls_session definition --- src/unix/bsd/freebsdlike/freebsd/mod.rs | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index 09f7f49a9a4b..b5cfc15e237f 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -1757,6 +1757,38 @@ s_no_extra_traits! { pub inc_fibnum: u16, pub inc_ie: crate::in_endpoints, } + + pub struct xktls_session_onedir { + pub gennum: u64, + _rsrv1: [u64; 8], + _rsrv2: [u32; 8], + pub iv: [u8; 32], + pub cipher_algorithm: i32, + pub auth_algorithm: i32, + pub cipher_key_len: u16, + pub iv_len: u16, + pub auth_key_len: u16, + pub max_frame_len: u16, + pub tls_vmajor: u8, + pub tls_vminor: u8, + pub tls_hlen: u8, + pub tls_tlen: u8, + pub tls_bs: u8, + pub flags: u8, + pub drv_st_len: u16, + pub ifnet: [u8; 16], + } + + pub struct xktls_session { + pub tsz: u32, + pub fsz: u32, + pub inp_gencnt: u64, + pub so_pcb: kvaddr_t, + pub coninf: crate::in_conninfo, + pub rx_vlan_id: c_ushort, + pub rcv: crate::xktls_session_onedir, + pub snd: crate::xktls_session_onedir, + } } cfg_if! { From 087c5dee762c03543b0ad5ad626f9b3962f2fdca Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Tue, 10 Jun 2025 10:55:55 +0300 Subject: [PATCH 5/5] FreeBSD: skip checking of xktls_session* structs on FreeBSD 14.x and older --- libc-test/build.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index 3aca08d07746..8ee8a279a883 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -2848,6 +2848,10 @@ fn test_freebsd(target: &str) { // `splice` introduced in FreeBSD 14.2 "splice" if Some(14) > freebsd_ver => true, + // Those are introduced in FreeBSD 15. + "xktls_session_onedir" | "xktls_session" + if Some(15) > freebsd_ver => true, + _ => false, } });