userfaultfd_sys/
lib.rs

1//! System bindings to `userfaultfd`.
2//!
3//! The minimum supported Linux kernel version is 4.11, but additional features from 4.14+ are
4//! available by using the `linux4_14` Cargo feature.
5
6#![allow(non_upper_case_globals)]
7#![allow(non_camel_case_types)]
8#![allow(non_snake_case)]
9
10use cfg_if::cfg_if;
11
12mod linux4_11;
13#[cfg(feature = "linux4_14")]
14mod linux4_14;
15#[cfg(feature = "linux5_7")]
16mod linux5_7;
17
18#[cfg(feature = "linux5_13")]
19mod linux5_13;
20
21cfg_if! {
22    if #[cfg(feature = "linux5_13")] {
23        pub use crate::linux5_13::*;
24    } else if #[cfg(feature = "linux5_7")] {
25        pub use crate::linux5_7::*;
26    } else if #[cfg(feature = "linux4_14")] {
27        pub use crate::linux4_14::*;
28    } else {
29        pub use crate::linux4_11::*;
30    }
31}
32
33include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
34
35#[cfg(test)]
36mod const_tests {
37    use super::*;
38
39    extern "C" {
40        static _const_UFFD_API_FEATURES: u64;
41        static _const_UFFD_API_RANGE_IOCTLS: u64;
42        static _const_UFFD_API_RANGE_IOCTLS_BASIC: u64;
43    }
44
45    #[test]
46    fn consts_correct() {
47        unsafe {
48            assert_eq!(
49                UFFD_API_FEATURES & _const_UFFD_API_FEATURES,
50                UFFD_API_FEATURES,
51                "UFFD_API_FEATURES"
52            );
53            assert_eq!(
54                UFFD_API_RANGE_IOCTLS & _const_UFFD_API_RANGE_IOCTLS,
55                UFFD_API_RANGE_IOCTLS,
56                "UFFD_API_RANGE_IOCTLS"
57            );
58            assert_eq!(
59                UFFD_API_RANGE_IOCTLS_BASIC & _const_UFFD_API_RANGE_IOCTLS_BASIC,
60                UFFD_API_RANGE_IOCTLS_BASIC,
61                "UFFD_API_RANGE_IOCTLS_BASIC"
62            );
63        }
64    }
65}