sysctl/
ctl_flags.rs
1use super::consts::*;
4
5bitflags! {
7 pub struct CtlFlags : libc::c_uint {
8 const RD = CTLFLAG_RD;
10
11 const WR = CTLFLAG_WR;
13
14 const RW = Self::RD.bits() | Self::WR.bits();
15
16 const DORMANT = CTLFLAG_DORMANT;
18
19 const ANYBODY = CTLFLAG_ANYBODY;
21
22 const SECURE = CTLFLAG_SECURE;
24
25 const PRISON = CTLFLAG_PRISON;
27
28 const DYN = CTLFLAG_DYN;
30
31 const SKIP = CTLFLAG_DORMANT;
33
34 const SECURE_MASK = 0x00F00000;
36
37 const TUN = CTLFLAG_TUN;
39
40 const RDTUN = Self::RD.bits() | Self::TUN.bits();
42
43 const RWTUN = Self::RW.bits() | Self::TUN.bits();
45
46 const MPSAFE = CTLFLAG_MPSAFE;
48
49 const VNET = CTLFLAG_VNET;
51
52 const DYING = CTLFLAG_DYING;
54
55 const CAPRD = CTLFLAG_CAPRD;
57
58 const CAPWR = CTLFLAG_CAPWR;
60
61 const STATS = CTLFLAG_STATS;
63
64 const NOFETCH = CTLFLAG_NOFETCH;
66
67 const CAPRW = Self::CAPRD.bits() | Self::CAPWR.bits();
69 }
70}
71
72#[cfg(test)]
73mod tests {
74 use crate::Sysctl;
75
76 #[test]
77 fn ctl_flags() {
78 #[cfg(any(target_os = "freebsd", target_os = "macos", target_os = "ios", target_os = "tvos", target_os = "visionos"))]
80 let ctl: crate::Ctl = crate::Ctl::new("kern.ostype").unwrap();
81 #[cfg(any(target_os = "android", target_os = "linux"))]
82 let ctl: crate::Ctl = crate::Ctl::new("kernel.ostype").unwrap();
83
84 let flags: crate::CtlFlags = ctl.flags().unwrap();
85
86 assert_eq!(flags.bits() & crate::CTLFLAG_RD, crate::CTLFLAG_RD);
87 assert_eq!(flags.bits() & crate::CTLFLAG_WR, 0);
88 }
89}