Skip to content

Commit 79fcddc

Browse files
committed
adding in6_ifreq to apple.
close rust-lang#3611
1 parent a0f5b4b commit 79fcddc

File tree

3 files changed

+162
-0
lines changed

3 files changed

+162
-0
lines changed

libc-test/build.rs

+3
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ fn test_apple(target: &str) {
218218
"netinet/ip.h",
219219
"netinet/tcp.h",
220220
"netinet/udp.h",
221+
"netinet6/in6.h",
222+
"netinet6/in6_var.h",
221223
"os/lock.h",
222224
"os/signpost.h",
223225
"poll.h",
@@ -356,6 +358,7 @@ fn test_apple(target: &str) {
356358
// MAXPATHLEN is too big for auto-derive traits on arrays.
357359
("vnode_info_path", "vip_path") => true,
358360
("ifreq", "ifr_ifru") => true,
361+
("in6_ifreq", "ifr_ifru") => true,
359362
("ifkpi", "ifk_data") => true,
360363
("ifconf", "ifc_ifcu") => true,
361364
_ => false,

libc-test/semver/apple.txt

+5
Original file line numberDiff line numberDiff line change
@@ -1858,6 +1858,7 @@ getxattr
18581858
glob
18591859
glob_t
18601860
globfree
1861+
icmp6_stat
18611862
iconv_t
18621863
id_t
18631864
idtype_t
@@ -1871,6 +1872,9 @@ ifkpi
18711872
ifreq
18721873
image_offset
18731874
in6_pktinfo
1875+
in6_addrlifetime
1876+
in6_ifreq
1877+
in6_ifstat
18741878
in_pktinfo
18751879
initgroups
18761880
integer_t
@@ -2154,6 +2158,7 @@ timeval32
21542158
timex
21552159
truncate
21562160
ttyname_r
2161+
u_quad_t
21572162
ucontext_t
21582163
unmount
21592164
useconds_t

src/unix/bsd/apple/mod.rs

+154
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,65 @@ 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_lifetime == other.ifru_lifetime
3129+
&& self.ifru_stat == other.ifru_stat
3130+
&& self.ifru_icmp6stat == other.ifru_icmp6stat
3131+
&& self.ifru_scope_id
3132+
.iter()
3133+
.zip(other.ifru_scope_id.iter())
3134+
.all(|(a,b)| a == b)
3135+
}
3136+
}
3137+
}
3138+
3139+
impl Eq for __c_anonymous_ifr_ifru6 {}
3140+
3141+
impl ::fmt::Debug for __c_anonymous_ifr_ifru6 {
3142+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
3143+
f.debug_struct("__c_anonymous_ifr_ifru6")
3144+
.field("ifru_addr", unsafe { &self.ifru_addr })
3145+
.field("ifru_dstaddr", unsafe { &self.ifru_dstaddr })
3146+
.field("ifru_flags", unsafe { &self.ifru_flags })
3147+
.field("ifru_flags6", unsafe { &self.ifru_flags6 })
3148+
.field("ifru_metrics", unsafe { &self.ifru_metrics })
3149+
.field("ifru_intval", unsafe { &self.ifru_intval })
3150+
.field("ifru_data", unsafe { &self.ifru_data })
3151+
.field("ifru_lifetime", unsafe { &self.ifru_lifetime })
3152+
.field("ifru_stat", unsafe { &self.ifru_stat })
3153+
.field("ifru_icmp6stat", unsafe { &self.ifru_icmp6stat })
3154+
.field("ifru_scope_id", unsafe { &self.ifru_scope_id })
3155+
.finish()
3156+
}
3157+
}
3158+
3159+
impl ::hash::Hash for __c_anonymous_ifr_ifru6 {
3160+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
3161+
unsafe {
3162+
self.ifru_addr.hash(state);
3163+
self.ifru_dstaddr.hash(state);
3164+
self.ifru_flags.hash(state);
3165+
self.ifru_flags6.hash(state);
3166+
self.ifru_metrics.hash(state);
3167+
self.ifru_intval.hash(state);
3168+
self.ifru_data.hash(state);
3169+
self.ifru_lifetime.hash(state);
3170+
self.ifru_stat.hash(state);
3171+
self.ifru_icmp6stat.hash(state);
3172+
self.ifru_scope_id.hash(state);
3173+
}
3174+
}
3175+
}
30243176
}
30253177
}
30263178

@@ -4064,6 +4216,8 @@ pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
40644216
pub const IFF_ALTPHYS: ::c_int = IFF_LINK2; // use alternate physical connection
40654217
pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast
40664218

4219+
pub const SCOPE6_ID_MAX: ::size_t = 16;
4220+
40674221
pub const SHUT_RD: ::c_int = 0;
40684222
pub const SHUT_WR: ::c_int = 1;
40694223
pub const SHUT_RDWR: ::c_int = 2;

0 commit comments

Comments
 (0)