Skip to content

Commit 7b60ad5

Browse files
devnexentgross35
authored andcommitted
adding in6_ifreq to apple.
close rust-lang#3611 (backport <rust-lang#3617>) (cherry picked from commit 01955ae)
1 parent 155c38c commit 7b60ad5

File tree

3 files changed

+170
-0
lines changed

3 files changed

+170
-0
lines changed

libc-test/build.rs

+2
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ fn test_apple(target: &str) {
232232
"netinet/ip.h",
233233
"netinet/tcp.h",
234234
"netinet/udp.h",
235+
"netinet6/in6_var.h",
235236
"os/clock.h",
236237
"os/lock.h",
237238
"os/signpost.h",
@@ -401,6 +402,7 @@ fn test_apple(target: &str) {
401402
("__darwin_arm_neon_state64", "__v") => true,
402403

403404
("ifreq", "ifr_ifru") => true,
405+
("in6_ifreq", "ifr_ifru") => true,
404406
("ifkpi", "ifk_data") => true,
405407
("ifconf", "ifc_ifcu") => true,
406408
// FIXME: this field has been incorporated into a resized `rmx_filler` array.

libc-test/semver/apple.txt

+5
Original file line numberDiff line numberDiff line change
@@ -2003,6 +2003,7 @@ globfree
20032003
host_cpu_load_info
20042004
host_cpu_load_info_data_t
20052005
host_cpu_load_info_t
2006+
icmp6_ifstat
20062007
iconv
20072008
iconv_close
20082009
iconv_open
@@ -2018,6 +2019,9 @@ ifconf
20182019
ifkpi
20192020
ifreq
20202021
image_offset
2022+
in6_addrlifetime
2023+
in6_ifreq
2024+
in6_ifstat
20212025
in6_pktinfo
20222026
in_pktinfo
20232027
initgroups
@@ -2338,6 +2342,7 @@ timeval32
23382342
timex
23392343
truncate
23402344
ttyname_r
2345+
u_quad_t
23412346
ucontext_t
23422347
unmount
23432348
useconds_t

src/unix/bsd/apple/mod.rs

+163
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;
@@ -1233,6 +1235,78 @@ s! {
12331235
pub iffmid_id: u32,
12341236
pub iffmid_str: [::c_char; 1],
12351237
}
1238+
1239+
pub struct in6_addrlifetime {
1240+
pub ia6t_expire: time_t,
1241+
pub ia6t_preferred: time_t,
1242+
pub ia6t_vltime: u32,
1243+
pub ia6t_pltime: u32,
1244+
}
1245+
1246+
pub struct in6_ifstat {
1247+
pub ifs6_in_receive: ::u_quad_t,
1248+
pub ifs6_in_hdrerr: ::u_quad_t,
1249+
pub ifs6_in_toobig: ::u_quad_t,
1250+
pub ifs6_in_noroute: ::u_quad_t,
1251+
pub ifs6_in_addrerr: ::u_quad_t,
1252+
pub ifs6_in_protounknown: ::u_quad_t,
1253+
pub ifs6_in_truncated: ::u_quad_t,
1254+
pub ifs6_in_discard: ::u_quad_t,
1255+
pub ifs6_in_deliver: ::u_quad_t,
1256+
pub ifs6_out_forward: ::u_quad_t,
1257+
pub ifs6_out_request: ::u_quad_t,
1258+
pub ifs6_out_discard: ::u_quad_t,
1259+
pub ifs6_out_fragok: ::u_quad_t,
1260+
pub ifs6_out_fragfail: ::u_quad_t,
1261+
pub ifs6_out_fragcreat: ::u_quad_t,
1262+
pub ifs6_reass_reqd: ::u_quad_t,
1263+
pub ifs6_reass_ok: ::u_quad_t,
1264+
pub ifs6_atmfrag_rcvd: ::u_quad_t,
1265+
pub ifs6_reass_fail: ::u_quad_t,
1266+
pub ifs6_in_mcast: ::u_quad_t,
1267+
pub ifs6_out_mcast: ::u_quad_t,
1268+
pub ifs6_cantfoward_icmp6: ::u_quad_t,
1269+
pub ifs6_addr_expiry_cnt: ::u_quad_t,
1270+
pub ifs6_pfx_expiry_cnt: ::u_quad_t,
1271+
pub ifs6_defrtr_expiry_cnt: ::u_quad_t,
1272+
}
1273+
1274+
pub struct icmp6_ifstat {
1275+
pub ifs6_in_msg: ::u_quad_t,
1276+
pub ifs6_in_error: ::u_quad_t,
1277+
pub ifs6_in_dstunreach: ::u_quad_t,
1278+
pub ifs6_in_adminprohib: ::u_quad_t,
1279+
pub ifs6_in_timeexceed: ::u_quad_t,
1280+
pub ifs6_in_paramprob: ::u_quad_t,
1281+
pub ifs6_in_pkttoobig: ::u_quad_t,
1282+
pub ifs6_in_echo: ::u_quad_t,
1283+
pub ifs6_in_echoreply: ::u_quad_t,
1284+
pub ifs6_in_routersolicit: ::u_quad_t,
1285+
pub ifs6_in_routeradvert: ::u_quad_t,
1286+
pub ifs6_in_neighborsolicit: ::u_quad_t,
1287+
pub ifs6_in_neighboradvert: ::u_quad_t,
1288+
pub ifs6_in_redirect: ::u_quad_t,
1289+
pub ifs6_in_mldquery: ::u_quad_t,
1290+
pub ifs6_in_mldreport: ::u_quad_t,
1291+
pub ifs6_in_mlddone: ::u_quad_t,
1292+
pub ifs6_out_msg: ::u_quad_t,
1293+
pub ifs6_out_error: ::u_quad_t,
1294+
pub ifs6_out_dstunreach: ::u_quad_t,
1295+
pub ifs6_out_adminprohib: ::u_quad_t,
1296+
pub ifs6_out_timeexceed: ::u_quad_t,
1297+
pub ifs6_out_paramprob: ::u_quad_t,
1298+
pub ifs6_out_pkttoobig: ::u_quad_t,
1299+
pub ifs6_out_echo: ::u_quad_t,
1300+
pub ifs6_out_echoreply: ::u_quad_t,
1301+
pub ifs6_out_routersolicit: ::u_quad_t,
1302+
pub ifs6_out_routeradvert: ::u_quad_t,
1303+
pub ifs6_out_neighborsolicit: ::u_quad_t,
1304+
pub ifs6_out_neighboradvert: ::u_quad_t,
1305+
pub ifs6_out_redirect: ::u_quad_t,
1306+
pub ifs6_out_mldquery: ::u_quad_t,
1307+
pub ifs6_out_mldreport: ::u_quad_t,
1308+
pub ifs6_out_mlddone: ::u_quad_t,
1309+
}
12361310
}
12371311

12381312
s_no_extra_traits! {
@@ -1576,6 +1650,25 @@ s_no_extra_traits! {
15761650
pub ifcu_buf: *mut ::c_char,
15771651
pub ifcu_req: *mut ifreq,
15781652
}
1653+
1654+
pub union __c_anonymous_ifr_ifru6 {
1655+
pub ifru_addr: ::sockaddr_in6,
1656+
pub ifru_dstaddr: ::sockaddr_in6,
1657+
pub ifru_flags: ::c_int,
1658+
pub ifru_flags6: ::c_int,
1659+
pub ifru_metrics: ::c_int,
1660+
pub ifru_intval: ::c_int,
1661+
pub ifru_data: *mut ::c_char,
1662+
pub ifru_lifetime: in6_addrlifetime,
1663+
pub ifru_stat: in6_ifstat,
1664+
pub ifru_icmp6stat: icmp6_ifstat,
1665+
pub ifru_scope_id: [u32; SCOPE6_ID_MAX],
1666+
}
1667+
1668+
pub struct in6_ifreq {
1669+
pub ifr_name: [::c_char; ::IFNAMSIZ],
1670+
pub ifr_ifru: __c_anonymous_ifr_ifru6,
1671+
}
15791672
}
15801673

15811674
impl siginfo_t {
@@ -3151,6 +3244,74 @@ cfg_if! {
31513244
unsafe { self.ifcu_req.hash(state) };
31523245
}
31533246
}
3247+
3248+
impl PartialEq for __c_anonymous_ifr_ifru6 {
3249+
fn eq(&self, other: &__c_anonymous_ifr_ifru6) -> bool {
3250+
unsafe {
3251+
self.ifru_addr == other.ifru_addr
3252+
&& self.ifru_dstaddr == other.ifru_dstaddr
3253+
&& self.ifru_flags == other.ifru_flags
3254+
&& self.ifru_flags6 == other.ifru_flags6
3255+
&& self.ifru_metrics == other.ifru_metrics
3256+
&& self.ifru_intval == other.ifru_intval
3257+
&& self.ifru_data == other.ifru_data
3258+
&& self.ifru_scope_id
3259+
.iter()
3260+
.zip(other.ifru_scope_id.iter())
3261+
.all(|(a,b)| a == b)
3262+
}
3263+
}
3264+
}
3265+
3266+
impl Eq for __c_anonymous_ifr_ifru6 {}
3267+
3268+
impl ::fmt::Debug for __c_anonymous_ifr_ifru6 {
3269+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
3270+
f.debug_struct("__c_anonymous_ifr_ifru6")
3271+
.field("ifru_addr", unsafe { &self.ifru_addr })
3272+
.field("ifru_dstaddr", unsafe { &self.ifru_dstaddr })
3273+
.field("ifru_flags", unsafe { &self.ifru_flags })
3274+
.field("ifru_flags6", unsafe { &self.ifru_flags6 })
3275+
.field("ifru_metrics", unsafe { &self.ifru_metrics })
3276+
.field("ifru_intval", unsafe { &self.ifru_intval })
3277+
.field("ifru_data", unsafe { &self.ifru_data })
3278+
.field("ifru_scope_id", unsafe { &self.ifru_scope_id })
3279+
.finish()
3280+
}
3281+
}
3282+
3283+
impl ::hash::Hash for __c_anonymous_ifr_ifru6 {
3284+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
3285+
unsafe {
3286+
self.ifru_addr.hash(state);
3287+
self.ifru_dstaddr.hash(state);
3288+
self.ifru_flags.hash(state);
3289+
self.ifru_flags6.hash(state);
3290+
self.ifru_metrics.hash(state);
3291+
self.ifru_intval.hash(state);
3292+
self.ifru_data.hash(state);
3293+
self.ifru_scope_id.hash(state);
3294+
}
3295+
}
3296+
}
3297+
3298+
impl PartialEq for in6_ifreq {
3299+
fn eq(&self, other: &in6_ifreq) -> bool {
3300+
self.ifr_name == other.ifr_name
3301+
&& self.ifr_ifru == other.ifr_ifru
3302+
}
3303+
}
3304+
3305+
impl Eq for in6_ifreq {}
3306+
3307+
impl ::fmt::Debug for in6_ifreq {
3308+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
3309+
f.debug_struct("in6_ifreq")
3310+
.field("ifr_name", &self.ifr_name)
3311+
.field("ifr_ifru", &self.ifr_ifru)
3312+
.finish()
3313+
}
3314+
}
31543315
}
31553316
}
31563317

@@ -4340,6 +4501,8 @@ pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
43404501
pub const IFF_ALTPHYS: ::c_int = IFF_LINK2; // use alternate physical connection
43414502
pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast
43424503

4504+
pub const SCOPE6_ID_MAX: ::size_t = 16;
4505+
43434506
pub const SHUT_RD: ::c_int = 0;
43444507
pub const SHUT_WR: ::c_int = 1;
43454508
pub const SHUT_RDWR: ::c_int = 2;

0 commit comments

Comments
 (0)