Skip to content

Commit 710b228

Browse files
committed
Add icmp6_filter macros
This allows the icmp6_filter struct's fields to become private.
1 parent a96955a commit 710b228

1 file changed

Lines changed: 42 additions & 2 deletions

File tree

src/unix/mod.rs

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,9 @@ s! {
282282

283283
pub struct icmp6_filter {
284284
#[cfg(not(target_os = "solaris"))]
285-
pub icmp6_filt: [u32; 8],
285+
icmp6_filt: [u32; 8],
286286
#[cfg(target_os = "solaris")]
287-
pub __icmp6_filt: [u32; 8],
287+
__icmp6_filt: [u32; 8],
288288
}
289289

290290
#[cfg_attr(
@@ -453,6 +453,46 @@ s_no_extra_traits! {
453453
}
454454
}
455455

456+
f! {
457+
pub fn ICMP6_FILTER_SETPASSALL(filt: &mut icmp6_filter) -> () {
458+
#[cfg(not(target_os = "solaris"))]
459+
for i in &mut filt.icmp6_filt {
460+
*i = u32::MAX;
461+
}
462+
#[cfg(target_os = "solaris")]
463+
for i in &mut filt.__icmp6_filt {
464+
*i = u32::MAX;
465+
}
466+
}
467+
468+
pub fn ICMP6_FILTER_SETBLOCKALL(filt: &mut icmp6_filter) -> () {
469+
#[cfg(not(target_os = "solaris"))]
470+
for i in &mut filt.icmp6_filt {
471+
*i = 0;
472+
}
473+
#[cfg(target_os = "solaris")]
474+
for i in &mut filt.__icmp6_filt {
475+
*i = 0;
476+
}
477+
}
478+
479+
pub fn ICMP6_FILTER_SETPASS(msg: u8, filt: &mut icmp6_filter) -> () {
480+
#[cfg(not(target_os = "solaris"))]
481+
let filt = &mut filt.icmp6_filt;
482+
#[cfg(target_os = "solaris")]
483+
let filt = &mut filt.__icmp6_filt;
484+
filt[(msg >> 5) as usize] |= 1 << (msg & 31);
485+
}
486+
487+
pub fn ICMP6_FILTER_SETBLOCK(msg: u8, filt: &mut icmp6_filter) -> () {
488+
#[cfg(not(target_os = "solaris"))]
489+
let filt = &mut filt.icmp6_filt;
490+
#[cfg(target_os = "solaris")]
491+
let filt = &mut filt.__icmp6_filt;
492+
filt[(msg >> 5) as usize] &= !(1 << (msg & 31));
493+
}
494+
}
495+
456496
cfg_if! {
457497
if #[cfg(feature = "extra_traits")] {
458498
impl PartialEq for sigval {

0 commit comments

Comments
 (0)