Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions libc-test/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2610,6 +2610,7 @@ fn test_freebsd(target: &str) {
"netinet/sctp.h",
"netinet/tcp.h",
"netinet/udp.h",
"netinet6/in6_var.h",
"poll.h",
"pthread.h",
"pthread_np.h",
Expand Down Expand Up @@ -3173,6 +3174,7 @@ fn test_freebsd(target: &str) {
("if_data", "__ifi_epoch") => true,
("if_data", "__ifi_lastchange") => true,
("ifreq", "ifr_ifru") => true,
("in6_ifreq", "ifr_ifru") => true,
("ifconf", "ifc_ifcu") => true,

// anonymous struct
Expand Down
14 changes: 14 additions & 0 deletions libc-test/semver/apple.txt
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,19 @@ IFF_RUNNING
IFF_SIMPLEX
IFF_UP
IMAXBEL
IN6_IFF_ANYCAST
IN6_IFF_AUTOCONF
IN6_IFF_CLAT46
IN6_IFF_DEPRECATED
IN6_IFF_DETACHED
IN6_IFF_DUPLICATED
IN6_IFF_DYNAMIC
IN6_IFF_NODAD
IN6_IFF_NOPFX
IN6_IFF_OPTIMISTIC
IN6_IFF_SECURED
IN6_IFF_TEMPORARY
IN6_IFF_TENTATIVE
INIT_PROCESS
IOV_MAX
IPC_CREAT
Expand Down Expand Up @@ -1362,6 +1375,7 @@ SIOCGETVLAN
SIOCGHIWAT
SIOCGIF6LOWPAN
SIOCGIFADDR
SIOCGIFAFLAG_IN6
SIOCGIFALTMTU
SIOCGIFASYNCMAP
SIOCGIFBOND
Expand Down
20 changes: 20 additions & 0 deletions libc-test/semver/freebsd.txt
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,15 @@ IFF_SIMPLEX
IFF_STATICARP
IFF_UP
IMAXBEL
IN6_IFF_ANYCAST
IN6_IFF_AUTOCONF
IN6_IFF_DEPRECATED
IN6_IFF_DETACHED
IN6_IFF_DUPLICATED
IN6_IFF_NODAD
IN6_IFF_PREFER_SOURCE
IN6_IFF_TEMPORARY
IN6_IFF_TENTATIVE
INIT_PROCESS
IOV_MAX
IPC_CREAT
Expand Down Expand Up @@ -1458,6 +1467,7 @@ SIGLWP
SIGSTKSZ
SIGTHR
SIOCGIFADDR
SIOCGIFAFLAG_IN6
SLIPDISC
SOCKCREDSIZE
SOCK_CLOEXEC
Expand Down Expand Up @@ -1741,9 +1751,14 @@ XU_NGROUPS
YESEXPR
YESSTR
_CS_PATH
_IO
_IOFBF
_IOLBF
_IONBF
_IOR
_IOW
_IOWINT
_IOWR
_PC_ACL_EXTENDED
_PC_ACL_NFS4
_PC_ACL_PATH_MAX
Expand Down Expand Up @@ -1870,6 +1885,7 @@ _SC_XOPEN_VERSION
_SC_XOPEN_XCU_VERSION
_UUID_NODE_LEN
__c_anonymous_cr_pid
__c_anonymous_ifr_ifru6
__cap_rights_clear
__cap_rights_get
__cap_rights_init
Expand Down Expand Up @@ -2051,6 +2067,7 @@ glob_t
globfree
hexdump
humanize_number
icmp6_ifstat
iconv
iconv_close
iconv_open
Expand All @@ -2062,6 +2079,9 @@ if_nameindex
ifaddrs
ifconf
ifreq
in6_addrlifetime
in6_ifreq
in6_ifstat
in6_pktinfo
initgroups
input_absinfo
Expand Down
2 changes: 2 additions & 0 deletions src/new/apple/xnu/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,6 @@ pub(crate) mod machine {

pub(crate) mod net;

pub(crate) mod netinet6;

pub(crate) mod sys;
22 changes: 22 additions & 0 deletions src/new/apple/xnu/netinet6/in6_var.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//! Header: `netinet6/in6_var.h`
//!
//! <https://github.com/apple-oss-distributions/xnu/blob/main/bsd/netinet6/in6_var.h>

use crate::prelude::*;
use crate::sys::ioccom::*;

pub const IN6_IFF_ANYCAST: c_int = 0x0001;
pub const IN6_IFF_TENTATIVE: c_int = 0x0002;
pub const IN6_IFF_DUPLICATED: c_int = 0x0004;
pub const IN6_IFF_DETACHED: c_int = 0x0008;
pub const IN6_IFF_DEPRECATED: c_int = 0x0010;
pub const IN6_IFF_NODAD: c_int = 0x0020;
pub const IN6_IFF_AUTOCONF: c_int = 0x0040;
pub const IN6_IFF_TEMPORARY: c_int = 0x0080;
pub const IN6_IFF_DYNAMIC: c_int = 0x0100;
pub const IN6_IFF_OPTIMISTIC: c_int = 0x0200;
pub const IN6_IFF_SECURED: c_int = 0x0400;
pub const IN6_IFF_CLAT46: c_int = 0x1000;
pub const IN6_IFF_NOPFX: c_int = 0x8000;

pub const SIOCGIFAFLAG_IN6: c_ulong = _IOWR::<crate::in6_ifreq>('i' as c_ulong, 73);
5 changes: 5 additions & 0 deletions src/new/apple/xnu/netinet6/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
//! Directory: `netinet6/`
//!
//! <https://github.com/apple-oss-distributions/xnu/tree/main/bsd/netinet6>

pub(crate) mod in6_var;
1 change: 1 addition & 0 deletions src/new/freebsd/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
//! * Symbol map: <https://github.com/freebsd/freebsd-src/blob/main/lib/libc/gen/Symbol.map>

pub(crate) mod net;
pub(crate) mod netinet6;
pub(crate) mod sys;
pub(crate) mod unistd;
107 changes: 107 additions & 0 deletions src/new/freebsd/netinet6/in6_var.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
//! Header: `netinet6/in6_var.h`
//!
//! https://github.com/freebsd/freebsd-src/blob/main/sys/netinet6/in6_var.h

use crate::prelude::*;
use crate::sys::ioccom::*;

s! {
pub struct in6_addrlifetime {
pub ia6t_expire: crate::time_t,
pub ia6t_preferred: crate::time_t,
pub ia6t_vltime: u32,
pub ia6t_pltime: u32,
}

pub struct in6_ifstat {
pub ifs6_in_receive: u64,
pub ifs6_in_hdrerr: u64,
pub ifs6_in_toobig: u64,
pub ifs6_in_noroute: u64,
pub ifs6_in_addrerr: u64,
pub ifs6_in_protounknown: u64,
pub ifs6_in_truncated: u64,
pub ifs6_in_discard: u64,
pub ifs6_in_deliver: u64,
pub ifs6_out_forward: u64,
pub ifs6_out_request: u64,
pub ifs6_out_discard: u64,
pub ifs6_out_fragok: u64,
pub ifs6_out_fragfail: u64,
pub ifs6_out_fragcreat: u64,
pub ifs6_reass_reqd: u64,
pub ifs6_reass_ok: u64,
pub ifs6_reass_fail: u64,
pub ifs6_in_mcast: u64,
pub ifs6_out_mcast: u64,
}

pub struct icmp6_ifstat {
pub ifs6_in_msg: u64,
pub ifs6_in_error: u64,
pub ifs6_in_dstunreach: u64,
pub ifs6_in_adminprohib: u64,
pub ifs6_in_timeexceed: u64,
pub ifs6_in_paramprob: u64,
pub ifs6_in_pkttoobig: u64,
pub ifs6_in_echo: u64,
pub ifs6_in_echoreply: u64,
pub ifs6_in_routersolicit: u64,
pub ifs6_in_routeradvert: u64,
pub ifs6_in_neighborsolicit: u64,
pub ifs6_in_neighboradvert: u64,
pub ifs6_in_redirect: u64,
pub ifs6_in_mldquery: u64,
pub ifs6_in_mldreport: u64,
pub ifs6_in_mlddone: u64,
pub ifs6_out_msg: u64,
pub ifs6_out_error: u64,
pub ifs6_out_dstunreach: u64,
pub ifs6_out_adminprohib: u64,
pub ifs6_out_timeexceed: u64,
pub ifs6_out_paramprob: u64,
pub ifs6_out_pkttoobig: u64,
pub ifs6_out_echo: u64,
pub ifs6_out_echoreply: u64,
pub ifs6_out_routersolicit: u64,
pub ifs6_out_routeradvert: u64,
pub ifs6_out_neighborsolicit: u64,
pub ifs6_out_neighboradvert: u64,
pub ifs6_out_redirect: u64,
pub ifs6_out_mldquery: u64,
pub ifs6_out_mldreport: u64,
pub ifs6_out_mlddone: u64,
}
}

s_no_extra_traits! {
pub struct in6_ifreq {
pub ifr_name: [c_char; crate::IFNAMSIZ],
pub ifr_ifru: __c_anonymous_ifr_ifru6,
}

pub union __c_anonymous_ifr_ifru6 {
pub ifru_addr: crate::sockaddr_in6,
pub ifru_dstaddr: crate::sockaddr_in6,
pub ifru_flags: c_int,
pub ifru_flags6: c_int,
pub ifru_metric: c_int,
pub ifru_data: crate::caddr_t,
pub ifru_lifetime: in6_addrlifetime,
pub ifru_stat: in6_ifstat,
pub ifru_icmp6stat: icmp6_ifstat,
pub ifru_scope_id: [u32; 16],
}
}

pub const IN6_IFF_ANYCAST: c_int = 0x01;
pub const IN6_IFF_TENTATIVE: c_int = 0x02;
pub const IN6_IFF_DUPLICATED: c_int = 0x04;
pub const IN6_IFF_DETACHED: c_int = 0x08;
pub const IN6_IFF_DEPRECATED: c_int = 0x10;
pub const IN6_IFF_NODAD: c_int = 0x20;
pub const IN6_IFF_AUTOCONF: c_int = 0x40;
pub const IN6_IFF_TEMPORARY: c_int = 0x80;
pub const IN6_IFF_PREFER_SOURCE: c_int = 0x0100;

pub const SIOCGIFAFLAG_IN6: c_ulong = _IOWR::<crate::in6_ifreq>('i' as c_ulong, 73);
5 changes: 5 additions & 0 deletions src/new/freebsd/netinet6/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
//! Directory: `netinet6/`
//!
//! https://github.com/freebsd/freebsd-src/tree/main/sys/netinet6

pub(crate) mod in6_var;
49 changes: 49 additions & 0 deletions src/new/freebsd/sys/ioccom.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
//! Header: `sys/ioccom.h`
//!
//! https://github.com/freebsd/freebsd-src/blob/main/sys/sys/ioccom.h

use crate::prelude::*;

const IOCPARM_SHIFT: c_ulong = 13;
const IOCPARM_MASK: c_ulong = (1 << IOCPARM_SHIFT) - 1;

const IOCPARM_MAX: c_ulong = 1 << IOCPARM_SHIFT;

pub(crate) const IOC_VOID: c_ulong = 0x20000000;
pub(crate) const IOC_OUT: c_ulong = 0x40000000;
pub(crate) const IOC_IN: c_ulong = 0x80000000;
pub(crate) const IOC_INOUT: c_ulong = IOC_IN | IOC_OUT;
pub(crate) const IOC_DIRMASK: c_ulong = IOC_VOID | IOC_OUT | IOC_IN;

pub(crate) const fn _IOC(inout: c_ulong, group: c_ulong, num: c_ulong, len: c_ulong) -> c_ulong {
debug_assert!(inout <= IOC_DIRMASK);
debug_assert!(group <= 0xff);
debug_assert!(num <= 0xff);
debug_assert!(len <= IOCPARM_MAX);

inout | ((len & IOCPARM_MASK) << 16) | (group << 8) | num
}

pub const fn _IO(g: c_ulong, n: c_ulong) -> c_ulong {
_IOC(IOC_VOID, g, n, 0)
}

/// Build an ioctl number for an ioctl that passes an `int` by value.
pub const fn _IOWINT(g: c_ulong, n: c_ulong) -> c_ulong {
_IOC(IOC_VOID, g, n, mem::size_of::<c_int>() as c_ulong)
}

/// Build an ioctl number for an read-only ioctl.
pub const fn _IOR<T>(g: c_ulong, n: c_ulong) -> c_ulong {
_IOC(IOC_OUT, g, n, mem::size_of::<T>() as c_ulong)
}

/// Build an ioctl number for an write-only ioctl.
pub const fn _IOW<T>(g: c_ulong, n: c_ulong) -> c_ulong {
_IOC(IOC_IN, g, n, mem::size_of::<T>() as c_ulong)
}

/// Build an ioctl number for a read-write ioctl.
pub const fn _IOWR<T>(g: c_ulong, n: c_ulong) -> c_ulong {
_IOC(IOC_INOUT, g, n, mem::size_of::<T>() as c_ulong)
}
1 change: 1 addition & 0 deletions src/new/freebsd/sys/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
//! https://github.com/freebsd/freebsd-src/tree/main/sys/sys'

pub(crate) mod file;
pub(crate) mod ioccom;
pub(crate) mod socket;
3 changes: 3 additions & 0 deletions src/new/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ cfg_if! {
pub use net::route::*;
} else if #[cfg(target_vendor = "apple")] {
pub use net::bpf::*;
pub use netinet6::in6_var::*;
pub use pthread_::introspection::*;
pub use pthread_::pthread_spis::*;
pub use pthread_::spawn::*;
Expand Down Expand Up @@ -226,7 +227,9 @@ cfg_if! {
pub use net::if_::*;
} else if #[cfg(target_os = "freebsd")] {
pub use net::dlt::*;
pub use netinet6::in6_var::*;
pub use sys::file::*;
pub use sys::ioccom::*;
pub use sys::socket::*;
}
}
Expand Down