Skip to content

Commit dc77d30

Browse files
authored
Merge pull request #3617 from devnexen/macos_in6_freq
adding in6_ifreq to apple.
2 parents 7d7151c + 01955ae commit dc77d30

File tree

3 files changed

+169
-0
lines changed

3 files changed

+169
-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
@@ -1861,6 +1861,7 @@ getxattr
18611861
glob
18621862
glob_t
18631863
globfree
1864+
icmp6_ifstat
18641865
iconv_t
18651866
id_t
18661867
idtype_t
@@ -1874,6 +1875,9 @@ ifkpi
18741875
ifreq
18751876
image_offset
18761877
in6_pktinfo
1878+
in6_addrlifetime
1879+
in6_ifreq
1880+
in6_ifstat
18771881
in_pktinfo
18781882
initgroups
18791883
integer_t
@@ -2157,6 +2161,7 @@ timeval32
21572161
timex
21582162
truncate
21592163
ttyname_r
2164+
u_quad_t
21602165
ucontext_t
21612166
unmount
21622167
useconds_t

src/unix/bsd/apple/mod.rs

+162
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;
@@ -1136,6 +1138,77 @@ s! {
11361138
pub tcpi_rxoutoforderbytes: u64,
11371139
pub tcpi_rxretransmitpackets: u64,
11381140
}
1141+
1142+
pub struct in6_addrlifetime {
1143+
pub ia6t_expire: time_t,
1144+
pub ia6t_preferred: time_t,
1145+
pub ia6t_vltime: u32,
1146+
pub ia6t_pltime: u32,
1147+
}
1148+
1149+
pub struct in6_ifstat {
1150+
pub ifs6_in_receive: ::u_quad_t,
1151+
pub ifs6_in_hdrerr: ::u_quad_t,
1152+
pub ifs6_in_toobig: ::u_quad_t,
1153+
pub ifs6_in_noroute: ::u_quad_t,
1154+
pub ifs6_in_addrerr: ::u_quad_t,
1155+
pub ifs6_in_protounknown: ::u_quad_t,
1156+
pub ifs6_in_truncated: ::u_quad_t,
1157+
pub ifs6_in_discard: ::u_quad_t,
1158+
pub ifs6_in_deliver: ::u_quad_t,
1159+
pub ifs6_out_forward: ::u_quad_t,
1160+
pub ifs6_out_request: ::u_quad_t,
1161+
pub ifs6_out_discard: ::u_quad_t,
1162+
pub ifs6_out_fragok: ::u_quad_t,
1163+
pub ifs6_out_fragfail: ::u_quad_t,
1164+
pub ifs6_out_fragcreat: ::u_quad_t,
1165+
pub ifs6_reass_reqd: ::u_quad_t,
1166+
pub ifs6_reass_ok: ::u_quad_t,
1167+
pub ifs6_atmfrag_rcvd: ::u_quad_t,
1168+
pub ifs6_reass_fail: ::u_quad_t,
1169+
pub ifs6_in_mcast: ::u_quad_t,
1170+
pub ifs6_out_mcast: ::u_quad_t,
1171+
pub ifs6_cantfoward_icmp6: ::u_quad_t,
1172+
pub ifs6_addr_expiry_cnt: ::u_quad_t,
1173+
pub ifs6_pfx_expiry_cnt: ::u_quad_t,
1174+
pub ifs6_defrtr_expiry_cnt: ::u_quad_t,
1175+
}
1176+
pub struct icmp6_ifstat {
1177+
pub ifs6_in_msg: ::u_quad_t,
1178+
pub ifs6_in_error: ::u_quad_t,
1179+
pub ifs6_in_dstunreach: ::u_quad_t,
1180+
pub ifs6_in_adminprohib: ::u_quad_t,
1181+
pub ifs6_in_timeexceed: ::u_quad_t,
1182+
pub ifs6_in_paramprob: ::u_quad_t,
1183+
pub ifs6_in_pkttoobig: ::u_quad_t,
1184+
pub ifs6_in_echo: ::u_quad_t,
1185+
pub ifs6_in_echoreply: ::u_quad_t,
1186+
pub ifs6_in_routersolicit: ::u_quad_t,
1187+
pub ifs6_in_routeradvert: ::u_quad_t,
1188+
pub ifs6_in_neighborsolicit: ::u_quad_t,
1189+
pub ifs6_in_neighboradvert: ::u_quad_t,
1190+
pub ifs6_in_redirect: ::u_quad_t,
1191+
pub ifs6_in_mldquery: ::u_quad_t,
1192+
pub ifs6_in_mldreport: ::u_quad_t,
1193+
pub ifs6_in_mlddone: ::u_quad_t,
1194+
pub ifs6_out_msg: ::u_quad_t,
1195+
pub ifs6_out_error: ::u_quad_t,
1196+
pub ifs6_out_dstunreach: ::u_quad_t,
1197+
pub ifs6_out_adminprohib: ::u_quad_t,
1198+
pub ifs6_out_timeexceed: ::u_quad_t,
1199+
pub ifs6_out_paramprob: ::u_quad_t,
1200+
pub ifs6_out_pkttoobig: ::u_quad_t,
1201+
pub ifs6_out_echo: ::u_quad_t,
1202+
pub ifs6_out_echoreply: ::u_quad_t,
1203+
pub ifs6_out_routersolicit: ::u_quad_t,
1204+
pub ifs6_out_routeradvert: ::u_quad_t,
1205+
pub ifs6_out_neighborsolicit: ::u_quad_t,
1206+
pub ifs6_out_neighboradvert: ::u_quad_t,
1207+
pub ifs6_out_redirect: ::u_quad_t,
1208+
pub ifs6_out_mldquery: ::u_quad_t,
1209+
pub ifs6_out_mldreport: ::u_quad_t,
1210+
pub ifs6_out_mlddone: ::u_quad_t,
1211+
}
11391212
}
11401213

11411214
s_no_extra_traits! {
@@ -1473,6 +1546,25 @@ s_no_extra_traits! {
14731546
pub ifcu_buf: *mut ::c_char,
14741547
pub ifcu_req: *mut ifreq,
14751548
}
1549+
1550+
pub union __c_anonymous_ifr_ifru6 {
1551+
pub ifru_addr: ::sockaddr_in6,
1552+
pub ifru_dstaddr: ::sockaddr_in6,
1553+
pub ifru_flags: ::c_int,
1554+
pub ifru_flags6: ::c_int,
1555+
pub ifru_metrics: ::c_int,
1556+
pub ifru_intval: ::c_int,
1557+
pub ifru_data: *mut ::c_char,
1558+
pub ifru_lifetime: in6_addrlifetime,
1559+
pub ifru_stat: in6_ifstat,
1560+
pub ifru_icmp6stat: icmp6_ifstat,
1561+
pub ifru_scope_id: [u32; SCOPE6_ID_MAX],
1562+
}
1563+
1564+
pub struct in6_ifreq {
1565+
pub ifr_name: [::c_char; ::IFNAMSIZ],
1566+
pub ifr_ifru: __c_anonymous_ifr_ifru6,
1567+
}
14761568
}
14771569

14781570
impl siginfo_t {
@@ -3021,6 +3113,74 @@ cfg_if! {
30213113
unsafe { self.ifcu_req.hash(state) };
30223114
}
30233115
}
3116+
3117+
impl PartialEq for __c_anonymous_ifr_ifru6 {
3118+
fn eq(&self, other: &__c_anonymous_ifr_ifru6) -> bool {
3119+
unsafe {
3120+
self.ifru_addr == other.ifru_addr
3121+
&& self.ifru_dstaddr == other.ifru_dstaddr
3122+
&& self.ifru_flags == other.ifru_flags
3123+
&& self.ifru_flags6 == other.ifru_flags6
3124+
&& self.ifru_metrics == other.ifru_metrics
3125+
&& self.ifru_intval == other.ifru_intval
3126+
&& self.ifru_data == other.ifru_data
3127+
&& self.ifru_scope_id
3128+
.iter()
3129+
.zip(other.ifru_scope_id.iter())
3130+
.all(|(a,b)| a == b)
3131+
}
3132+
}
3133+
}
3134+
3135+
impl Eq for __c_anonymous_ifr_ifru6 {}
3136+
3137+
impl ::fmt::Debug for __c_anonymous_ifr_ifru6 {
3138+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
3139+
f.debug_struct("__c_anonymous_ifr_ifru6")
3140+
.field("ifru_addr", unsafe { &self.ifru_addr })
3141+
.field("ifru_dstaddr", unsafe { &self.ifru_dstaddr })
3142+
.field("ifru_flags", unsafe { &self.ifru_flags })
3143+
.field("ifru_flags6", unsafe { &self.ifru_flags6 })
3144+
.field("ifru_metrics", unsafe { &self.ifru_metrics })
3145+
.field("ifru_intval", unsafe { &self.ifru_intval })
3146+
.field("ifru_data", unsafe { &self.ifru_data })
3147+
.field("ifru_scope_id", unsafe { &self.ifru_scope_id })
3148+
.finish()
3149+
}
3150+
}
3151+
3152+
impl ::hash::Hash for __c_anonymous_ifr_ifru6 {
3153+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
3154+
unsafe {
3155+
self.ifru_addr.hash(state);
3156+
self.ifru_dstaddr.hash(state);
3157+
self.ifru_flags.hash(state);
3158+
self.ifru_flags6.hash(state);
3159+
self.ifru_metrics.hash(state);
3160+
self.ifru_intval.hash(state);
3161+
self.ifru_data.hash(state);
3162+
self.ifru_scope_id.hash(state);
3163+
}
3164+
}
3165+
}
3166+
3167+
impl PartialEq for in6_ifreq {
3168+
fn eq(&self, other: &in6_ifreq) -> bool {
3169+
self.ifr_name == other.ifr_name
3170+
&& self.ifr_ifru == other.ifr_ifru
3171+
}
3172+
}
3173+
3174+
impl Eq for in6_ifreq {}
3175+
3176+
impl ::fmt::Debug for in6_ifreq {
3177+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
3178+
f.debug_struct("in6_ifreq")
3179+
.field("ifr_name", &self.ifr_name)
3180+
.field("ifr_ifru", &self.ifr_ifru)
3181+
.finish()
3182+
}
3183+
}
30243184
}
30253185
}
30263186

@@ -4085,6 +4245,8 @@ pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
40854245
pub const IFF_ALTPHYS: ::c_int = IFF_LINK2; // use alternate physical connection
40864246
pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast
40874247

4248+
pub const SCOPE6_ID_MAX: ::size_t = 16;
4249+
40884250
pub const SHUT_RD: ::c_int = 0;
40894251
pub const SHUT_WR: ::c_int = 1;
40904252
pub const SHUT_RDWR: ::c_int = 2;

0 commit comments

Comments
 (0)