Skip to content

Commit 8a22bc7

Browse files
committedMay 1, 2024
adding in6_ifreq to apple.
close #3611
1 parent 57a165b commit 8a22bc7

File tree

3 files changed

+155
-0
lines changed

3 files changed

+155
-0
lines changed
 

‎libc-test/build.rs

+2
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ fn test_apple(target: &str) {
213213
"netinet/ip.h",
214214
"netinet/tcp.h",
215215
"netinet/udp.h",
216+
"netinet6/in6_var.h",
216217
"os/lock.h",
217218
"os/signpost.h",
218219
"poll.h",
@@ -351,6 +352,7 @@ fn test_apple(target: &str) {
351352
// MAXPATHLEN is too big for auto-derive traits on arrays.
352353
("vnode_info_path", "vip_path") => true,
353354
("ifreq", "ifr_ifru") => true,
355+
("in6_ifreq", "ifr_ifru") => true,
354356
("ifkpi", "ifk_data") => true,
355357
("ifconf", "ifc_ifcu") => true,
356358
_ => false,

‎libc-test/semver/apple.txt

+5
Original file line numberDiff line numberDiff line change
@@ -1860,6 +1860,7 @@ getxattr
18601860
glob
18611861
glob_t
18621862
globfree
1863+
icmp6_ifstat
18631864
iconv_t
18641865
id_t
18651866
idtype_t
@@ -1873,6 +1874,9 @@ ifkpi
18731874
ifreq
18741875
image_offset
18751876
in6_pktinfo
1877+
in6_addrlifetime
1878+
in6_ifreq
1879+
in6_ifstat
18761880
in_pktinfo
18771881
initgroups
18781882
integer_t
@@ -2156,6 +2160,7 @@ timeval32
21562160
timex
21572161
truncate
21582162
ttyname_r
2163+
u_quad_t
21592164
ucontext_t
21602165
unmount
21612166
useconds_t

‎src/unix/bsd/apple/mod.rs

+148
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ pub type rusage_info_t = *mut ::c_void;
3737
pub type vm_offset_t = ::uintptr_t;
3838
pub type vm_size_t = ::uintptr_t;
3939
pub type vm_address_t = vm_offset_t;
40+
pub type quad_t = i64;
41+
pub type u_quad_t = u64;
4042

4143
pub type posix_spawnattr_t = *mut ::c_void;
4244
pub type posix_spawn_file_actions_t = *mut ::c_void;
@@ -1473,6 +1475,97 @@ s_no_extra_traits! {
14731475
pub ifcu_buf: *mut ::c_char,
14741476
pub ifcu_req: *mut ifreq,
14751477
}
1478+
1479+
pub struct in6_addrlifetime {
1480+
pub ia6t_expire: time_t,
1481+
pub ia6t_preferred: time_t,
1482+
pub ia6t_vltime: u32,
1483+
pub ia6t_pltime: u32,
1484+
}
1485+
1486+
pub struct in6_ifstat {
1487+
pub ifs6_in_receive: ::u_quad_t,
1488+
pub ifs6_in_hdrerr: ::u_quad_t,
1489+
pub ifs6_in_toobig: ::u_quad_t,
1490+
pub ifs6_in_noroute: ::u_quad_t,
1491+
pub ifs6_in_addrerr: ::u_quad_t,
1492+
pub ifs6_in_protounknown: ::u_quad_t,
1493+
pub ifs6_in_truncated: ::u_quad_t,
1494+
pub ifs6_in_discard: ::u_quad_t,
1495+
pub ifs6_in_deliver: ::u_quad_t,
1496+
pub ifs6_out_forward: ::u_quad_t,
1497+
pub ifs6_out_request: ::u_quad_t,
1498+
pub ifs6_out_discard: ::u_quad_t,
1499+
pub ifs6_out_fragok: ::u_quad_t,
1500+
pub ifs6_out_fragfail: ::u_quad_t,
1501+
pub ifs6_out_fragcreat: ::u_quad_t,
1502+
pub ifs6_reass_reqd: ::u_quad_t,
1503+
pub ifs6_reass_ok: ::u_quad_t,
1504+
pub ifs6_atmfrag_rcvd: ::u_quad_t,
1505+
pub ifs6_reass_fail: ::u_quad_t,
1506+
pub ifs6_in_mcast: ::u_quad_t,
1507+
pub ifs6_out_mcast: ::u_quad_t,
1508+
pub ifs6_cantfoward_icmp6: ::u_quad_t,
1509+
pub ifs6_addr_expiry_cnt: ::u_quad_t,
1510+
pub ifs6_pfx_expiry_cnt: ::u_quad_t,
1511+
pub ifs6_defrtr_expiry_cnt: ::u_quad_t,
1512+
}
1513+
1514+
pub struct icmp6_ifstat {
1515+
pub ifs6_in_msg: ::u_quad_t,
1516+
pub ifs6_in_error: ::u_quad_t,
1517+
pub ifs6_in_dstunreach: ::u_quad_t,
1518+
pub ifs6_in_adminprohib: ::u_quad_t,
1519+
pub ifs6_in_timeexceed: ::u_quad_t,
1520+
pub ifs6_in_paramprob: ::u_quad_t,
1521+
pub ifs6_in_pkttoobig: ::u_quad_t,
1522+
pub ifs6_in_echo: ::u_quad_t,
1523+
pub ifs6_in_echoreply: ::u_quad_t,
1524+
pub ifs6_in_routersolicit: ::u_quad_t,
1525+
pub ifs6_in_routeradvert: ::u_quad_t,
1526+
pub ifs6_in_neighborsolicit: ::u_quad_t,
1527+
pub ifs6_in_neighboradvert: ::u_quad_t,
1528+
pub ifs6_in_redirect: ::u_quad_t,
1529+
pub ifs6_in_mldquery: ::u_quad_t,
1530+
pub ifs6_in_mldreport: ::u_quad_t,
1531+
pub ifs6_in_mlddone: ::u_quad_t,
1532+
pub ifs6_out_msg: ::u_quad_t,
1533+
pub ifs6_out_error: ::u_quad_t,
1534+
pub ifs6_out_dstunreach: ::u_quad_t,
1535+
pub ifs6_out_adminprohib: ::u_quad_t,
1536+
pub ifs6_out_timeexceed: ::u_quad_t,
1537+
pub ifs6_out_paramprob: ::u_quad_t,
1538+
pub ifs6_out_pkttoobig: ::u_quad_t,
1539+
pub ifs6_out_echo: ::u_quad_t,
1540+
pub ifs6_out_echoreply: ::u_quad_t,
1541+
pub ifs6_out_routersolicit: ::u_quad_t,
1542+
pub ifs6_out_routeradvert: ::u_quad_t,
1543+
pub ifs6_out_neighborsolicit: ::u_quad_t,
1544+
pub ifs6_out_neighboradvert: ::u_quad_t,
1545+
pub ifs6_out_redirect: ::u_quad_t,
1546+
pub ifs6_out_mldquery: ::u_quad_t,
1547+
pub ifs6_out_mldreport: ::u_quad_t,
1548+
pub ifs6_out_mlddone: ::u_quad_t,
1549+
}
1550+
1551+
pub union __c_anonymous_ifr_ifru6 {
1552+
pub ifru_addr: ::sockaddr_in6,
1553+
pub ifru_dstaddr: ::sockaddr_in6,
1554+
pub ifru_flags: ::c_int,
1555+
pub ifru_flags6: ::c_int,
1556+
pub ifru_metrics: ::c_int,
1557+
pub ifru_intval: ::c_int,
1558+
pub ifru_data: *mut ::c_char,
1559+
pub ifru_lifetime: in6_addrlifetime,
1560+
pub ifru_stat: in6_ifstat,
1561+
pub ifru_icmp6stat: icmp6_ifstat,
1562+
pub ifru_scope_id: [u32; SCOPE6_ID_MAX],
1563+
}
1564+
1565+
pub struct in6_ifreq {
1566+
pub ifr_name: [::c_char; ::IFNAMSIZ],
1567+
pub ifr_ifru: __c_anonymous_ifr_ifru6,
1568+
}
14761569
}
14771570

14781571
impl siginfo_t {
@@ -3021,6 +3114,59 @@ cfg_if! {
30213114
unsafe { self.ifcu_req.hash(state) };
30223115
}
30233116
}
3117+
3118+
impl PartialEq for __c_anonymous_ifr_ifru6 {
3119+
fn eq(&self, other: &__c_anonymous_ifr_ifru6) -> bool {
3120+
unsafe {
3121+
self.ifru_addr == other.ifru_addr
3122+
&& self.ifru_dstaddr == other.ifru_dstaddr
3123+
&& self.ifru_flags == other.ifru_flags
3124+
&& self.ifru_flags6 == other.ifru_flags6
3125+
&& self.ifru_metrics == other.ifru_metrics
3126+
&& self.ifru_intval == other.ifru_intval
3127+
&& self.ifru_data == other.ifru_data
3128+
&& self.ifru_stat == other.ifru_stat
3129+
&& self.ifru_scope_id
3130+
.iter()
3131+
.zip(other.ifru_scope_id.iter())
3132+
.all(|(a,b)| a == b)
3133+
}
3134+
}
3135+
}
3136+
3137+
impl Eq for __c_anonymous_ifr_ifru6 {}
3138+
3139+
impl ::fmt::Debug for __c_anonymous_ifr_ifru6 {
3140+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
3141+
f.debug_struct("__c_anonymous_ifr_ifru6")
3142+
.field("ifru_addr", unsafe { &self.ifru_addr })
3143+
.field("ifru_dstaddr", unsafe { &self.ifru_dstaddr })
3144+
.field("ifru_flags", unsafe { &self.ifru_flags })
3145+
.field("ifru_flags6", unsafe { &self.ifru_flags6 })
3146+
.field("ifru_metrics", unsafe { &self.ifru_metrics })
3147+
.field("ifru_intval", unsafe { &self.ifru_intval })
3148+
.field("ifru_data", unsafe { &self.ifru_data })
3149+
.field("ifru_stat", unsafe { &self.ifru_stat })
3150+
.field("ifru_scope_id", unsafe { &self.ifru_scope_id })
3151+
.finish()
3152+
}
3153+
}
3154+
3155+
impl ::hash::Hash for __c_anonymous_ifr_ifru6 {
3156+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
3157+
unsafe {
3158+
self.ifru_addr.hash(state);
3159+
self.ifru_dstaddr.hash(state);
3160+
self.ifru_flags.hash(state);
3161+
self.ifru_flags6.hash(state);
3162+
self.ifru_metrics.hash(state);
3163+
self.ifru_intval.hash(state);
3164+
self.ifru_data.hash(state);
3165+
self.ifru_stat.hash(state);
3166+
self.ifru_scope_id.hash(state);
3167+
}
3168+
}
3169+
}
30243170
}
30253171
}
30263172

@@ -4084,6 +4230,8 @@ pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
40844230
pub const IFF_ALTPHYS: ::c_int = IFF_LINK2; // use alternate physical connection
40854231
pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast
40864232

4233+
pub const SCOPE6_ID_MAX: ::size_t = 16;
4234+
40874235
pub const SHUT_RD: ::c_int = 0;
40884236
pub const SHUT_WR: ::c_int = 1;
40894237
pub const SHUT_RDWR: ::c_int = 2;

0 commit comments

Comments
 (0)