1 //! Adapt the Linux API to resemble a POSIX-style libc API.
2 //!
3 //! The linux_raw backend doesn't use actual libc; this just defines certain
4 //! types that are convenient to have defined.
5 
6 #![allow(unused_imports)]
7 #![allow(non_camel_case_types)]
8 
9 pub(crate) type size_t = usize;
10 pub(crate) use linux_raw_sys::ctypes::*;
11 pub(crate) use linux_raw_sys::errno::EINVAL;
12 pub(crate) use linux_raw_sys::ioctl::{FIONBIO, FIONREAD};
13 // Import the kernel's `uid_t` and `gid_t` if they're 32-bit.
14 #[cfg(not(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86")))]
15 pub(crate) use linux_raw_sys::general::{__kernel_gid_t as gid_t, __kernel_uid_t as uid_t};
16 pub(crate) use linux_raw_sys::general::{
17     __kernel_pid_t as pid_t, __kernel_time64_t as time_t, __kernel_timespec as timespec, iovec,
18     O_CLOEXEC, O_NOCTTY, O_NONBLOCK, O_RDWR,
19 };
20 
21 #[cfg(feature = "event")]
22 #[cfg(test)]
23 pub(crate) use linux_raw_sys::general::epoll_event;
24 
25 #[cfg(any(
26     feature = "fs",
27     all(
28         not(feature = "use-libc-auxv"),
29         not(feature = "use-explicitly-provided-auxv"),
30         any(
31             feature = "param",
32             feature = "process",
33             feature = "runtime",
34             feature = "time",
35             target_arch = "x86",
36         )
37     )
38 ))]
39 pub(crate) use linux_raw_sys::general::{
40     AT_FDCWD, NFS_SUPER_MAGIC, O_LARGEFILE, PROC_SUPER_MAGIC, UTIME_NOW, UTIME_OMIT, XATTR_CREATE,
41     XATTR_REPLACE,
42 };
43 
44 pub(crate) use linux_raw_sys::ioctl::{BLKPBSZGET, BLKSSZGET, FICLONE};
45 #[cfg(target_pointer_width = "32")]
46 pub(crate) use linux_raw_sys::ioctl::{FS_IOC32_GETFLAGS, FS_IOC32_SETFLAGS};
47 #[cfg(target_pointer_width = "64")]
48 pub(crate) use linux_raw_sys::ioctl::{FS_IOC_GETFLAGS, FS_IOC_SETFLAGS};
49 
50 #[cfg(feature = "io_uring")]
51 pub(crate) use linux_raw_sys::{general::open_how, io_uring::*};
52 
53 #[cfg(feature = "net")]
54 pub(crate) use linux_raw_sys::{
55     cmsg_macros::*,
56     general::{O_CLOEXEC as SOCK_CLOEXEC, O_NONBLOCK as SOCK_NONBLOCK},
57     if_ether::*,
58     net::{
59         linger, msghdr, sockaddr, sockaddr_in, sockaddr_in6, sockaddr_un, socklen_t, AF_DECnet,
60         __kernel_sa_family_t as sa_family_t, __kernel_sockaddr_storage as sockaddr_storage,
61         cmsghdr, in6_addr, in_addr, ip_mreq, ip_mreq_source, ip_mreqn, ipv6_mreq, AF_APPLETALK,
62         AF_ASH, AF_ATMPVC, AF_ATMSVC, AF_AX25, AF_BLUETOOTH, AF_BRIDGE, AF_CAN, AF_ECONET,
63         AF_IEEE802154, AF_INET, AF_INET6, AF_IPX, AF_IRDA, AF_ISDN, AF_IUCV, AF_KEY, AF_LLC,
64         AF_NETBEUI, AF_NETLINK, AF_NETROM, AF_PACKET, AF_PHONET, AF_PPPOX, AF_RDS, AF_ROSE,
65         AF_RXRPC, AF_SECURITY, AF_SNA, AF_TIPC, AF_UNIX, AF_UNSPEC, AF_WANPIPE, AF_X25, AF_XDP,
66         IP6T_SO_ORIGINAL_DST, IPPROTO_FRAGMENT, IPPROTO_ICMPV6, IPPROTO_MH, IPPROTO_ROUTING,
67         IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP, IPV6_FREEBIND, IPV6_MULTICAST_HOPS,
68         IPV6_MULTICAST_LOOP, IPV6_RECVTCLASS, IPV6_TCLASS, IPV6_UNICAST_HOPS, IPV6_V6ONLY,
69         IP_ADD_MEMBERSHIP, IP_ADD_SOURCE_MEMBERSHIP, IP_DROP_MEMBERSHIP, IP_DROP_SOURCE_MEMBERSHIP,
70         IP_FREEBIND, IP_MULTICAST_LOOP, IP_MULTICAST_TTL, IP_RECVTOS, IP_TOS, IP_TTL,
71         MSG_CMSG_CLOEXEC, MSG_CONFIRM, MSG_DONTROUTE, MSG_DONTWAIT, MSG_EOR, MSG_ERRQUEUE,
72         MSG_MORE, MSG_NOSIGNAL, MSG_OOB, MSG_PEEK, MSG_TRUNC, MSG_WAITALL, SCM_CREDENTIALS,
73         SCM_RIGHTS, SHUT_RD, SHUT_RDWR, SHUT_WR, SOCK_DGRAM, SOCK_RAW, SOCK_RDM, SOCK_SEQPACKET,
74         SOCK_STREAM, SOL_SOCKET, SOL_XDP, SO_ACCEPTCONN, SO_BROADCAST, SO_COOKIE, SO_DOMAIN,
75         SO_ERROR, SO_INCOMING_CPU, SO_KEEPALIVE, SO_LINGER, SO_OOBINLINE, SO_ORIGINAL_DST,
76         SO_PASSCRED, SO_PROTOCOL, SO_RCVBUF, SO_RCVTIMEO_NEW, SO_RCVTIMEO_NEW as SO_RCVTIMEO,
77         SO_RCVTIMEO_OLD, SO_REUSEADDR, SO_REUSEPORT, SO_SNDBUF, SO_SNDTIMEO_NEW,
78         SO_SNDTIMEO_NEW as SO_SNDTIMEO, SO_SNDTIMEO_OLD, SO_TYPE, TCP_CONGESTION, TCP_CORK,
79         TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_NODELAY, TCP_QUICKACK,
80         TCP_THIN_LINEAR_TIMEOUTS, TCP_USER_TIMEOUT,
81     },
82     netlink::*,
83     xdp::{
84         sockaddr_xdp, xdp_desc, xdp_mmap_offsets, xdp_mmap_offsets_v1, xdp_options,
85         xdp_ring_offset, xdp_ring_offset_v1, xdp_statistics, xdp_statistics_v1, xdp_umem_reg,
86         xdp_umem_reg_v1, XDP_COPY, XDP_MMAP_OFFSETS, XDP_OPTIONS, XDP_OPTIONS_ZEROCOPY,
87         XDP_PGOFF_RX_RING, XDP_PGOFF_TX_RING, XDP_PKT_CONTD, XDP_RING_NEED_WAKEUP, XDP_RX_RING,
88         XDP_SHARED_UMEM, XDP_STATISTICS, XDP_TX_RING, XDP_UMEM_COMPLETION_RING, XDP_UMEM_FILL_RING,
89         XDP_UMEM_PGOFF_COMPLETION_RING, XDP_UMEM_PGOFF_FILL_RING, XDP_UMEM_REG,
90         XDP_UMEM_UNALIGNED_CHUNK_FLAG, XDP_USE_NEED_WAKEUP, XDP_USE_SG, XDP_ZEROCOPY,
91         XSK_UNALIGNED_BUF_ADDR_MASK, XSK_UNALIGNED_BUF_OFFSET_SHIFT,
92     },
93 };
94 
95 // Cast away bindgen's `enum` type to make these consistent with the other
96 // `setsockopt`/`getsockopt` level values.
97 #[cfg(feature = "net")]
98 pub(crate) const IPPROTO_IP: u32 = linux_raw_sys::net::IPPROTO_IP as _;
99 #[cfg(feature = "net")]
100 pub(crate) const IPPROTO_ICMP: u32 = linux_raw_sys::net::IPPROTO_ICMP as _;
101 #[cfg(feature = "net")]
102 pub(crate) const IPPROTO_IGMP: u32 = linux_raw_sys::net::IPPROTO_IGMP as _;
103 #[cfg(feature = "net")]
104 pub(crate) const IPPROTO_IPIP: u32 = linux_raw_sys::net::IPPROTO_IPIP as _;
105 #[cfg(feature = "net")]
106 pub(crate) const IPPROTO_TCP: u32 = linux_raw_sys::net::IPPROTO_TCP as _;
107 #[cfg(feature = "net")]
108 pub(crate) const IPPROTO_EGP: u32 = linux_raw_sys::net::IPPROTO_EGP as _;
109 #[cfg(feature = "net")]
110 pub(crate) const IPPROTO_PUP: u32 = linux_raw_sys::net::IPPROTO_PUP as _;
111 #[cfg(feature = "net")]
112 pub(crate) const IPPROTO_UDP: u32 = linux_raw_sys::net::IPPROTO_UDP as _;
113 #[cfg(feature = "net")]
114 pub(crate) const IPPROTO_IDP: u32 = linux_raw_sys::net::IPPROTO_IDP as _;
115 #[cfg(feature = "net")]
116 pub(crate) const IPPROTO_TP: u32 = linux_raw_sys::net::IPPROTO_TP as _;
117 #[cfg(feature = "net")]
118 pub(crate) const IPPROTO_DCCP: u32 = linux_raw_sys::net::IPPROTO_DCCP as _;
119 #[cfg(feature = "net")]
120 pub(crate) const IPPROTO_IPV6: u32 = linux_raw_sys::net::IPPROTO_IPV6 as _;
121 #[cfg(feature = "net")]
122 pub(crate) const IPPROTO_RSVP: u32 = linux_raw_sys::net::IPPROTO_RSVP as _;
123 #[cfg(feature = "net")]
124 pub(crate) const IPPROTO_GRE: u32 = linux_raw_sys::net::IPPROTO_GRE as _;
125 #[cfg(feature = "net")]
126 pub(crate) const IPPROTO_ESP: u32 = linux_raw_sys::net::IPPROTO_ESP as _;
127 #[cfg(feature = "net")]
128 pub(crate) const IPPROTO_AH: u32 = linux_raw_sys::net::IPPROTO_AH as _;
129 #[cfg(feature = "net")]
130 pub(crate) const IPPROTO_MTP: u32 = linux_raw_sys::net::IPPROTO_MTP as _;
131 #[cfg(feature = "net")]
132 pub(crate) const IPPROTO_BEETPH: u32 = linux_raw_sys::net::IPPROTO_BEETPH as _;
133 #[cfg(feature = "net")]
134 pub(crate) const IPPROTO_ENCAP: u32 = linux_raw_sys::net::IPPROTO_ENCAP as _;
135 #[cfg(feature = "net")]
136 pub(crate) const IPPROTO_PIM: u32 = linux_raw_sys::net::IPPROTO_PIM as _;
137 #[cfg(feature = "net")]
138 pub(crate) const IPPROTO_COMP: u32 = linux_raw_sys::net::IPPROTO_COMP as _;
139 #[cfg(feature = "net")]
140 pub(crate) const IPPROTO_SCTP: u32 = linux_raw_sys::net::IPPROTO_SCTP as _;
141 #[cfg(feature = "net")]
142 pub(crate) const IPPROTO_UDPLITE: u32 = linux_raw_sys::net::IPPROTO_UDPLITE as _;
143 #[cfg(feature = "net")]
144 pub(crate) const IPPROTO_MPLS: u32 = linux_raw_sys::net::IPPROTO_MPLS as _;
145 #[cfg(feature = "net")]
146 pub(crate) const IPPROTO_ETHERNET: u32 = linux_raw_sys::net::IPPROTO_ETHERNET as _;
147 #[cfg(feature = "net")]
148 pub(crate) const IPPROTO_RAW: u32 = linux_raw_sys::net::IPPROTO_RAW as _;
149 #[cfg(feature = "net")]
150 pub(crate) const IPPROTO_MPTCP: u32 = linux_raw_sys::net::IPPROTO_MPTCP as _;
151 
152 #[cfg(any(feature = "process", feature = "runtime"))]
153 pub(crate) use linux_raw_sys::general::siginfo_t;
154 
155 #[cfg(any(feature = "process", feature = "runtime"))]
156 pub(crate) const EXIT_SUCCESS: c_int = 0;
157 #[cfg(any(feature = "process", feature = "runtime"))]
158 pub(crate) const EXIT_FAILURE: c_int = 1;
159 #[cfg(feature = "process")]
160 pub(crate) const EXIT_SIGNALED_SIGABRT: c_int = 128 + linux_raw_sys::general::SIGABRT as c_int;
161 #[cfg(feature = "runtime")]
162 pub(crate) const CLONE_CHILD_SETTID: c_int = linux_raw_sys::general::CLONE_CHILD_SETTID as c_int;
163 
164 #[cfg(feature = "process")]
165 pub(crate) use linux_raw_sys::{
166     general::{
167         CLD_CONTINUED, CLD_DUMPED, CLD_EXITED, CLD_KILLED, CLD_STOPPED, CLD_TRAPPED,
168         O_NONBLOCK as PIDFD_NONBLOCK, P_ALL, P_PGID, P_PID, P_PIDFD,
169     },
170     ioctl::TIOCSCTTY,
171 };
172 
173 #[cfg(feature = "pty")]
174 pub(crate) use linux_raw_sys::ioctl::TIOCGPTPEER;
175 
176 #[cfg(feature = "termios")]
177 pub(crate) use linux_raw_sys::{
178     general::{
179         cc_t, speed_t, tcflag_t, termios, termios2, winsize, B0, B1000000, B110, B115200, B1152000,
180         B1200, B134, B150, B1500000, B1800, B19200, B200, B2000000, B230400, B2400, B2500000, B300,
181         B3000000, B3500000, B38400, B4000000, B460800, B4800, B50, B500000, B57600, B576000, B600,
182         B75, B921600, B9600, BOTHER, BRKINT, BS0, BS1, BSDLY, CBAUD, CBAUDEX, CIBAUD, CLOCAL,
183         CMSPAR, CR0, CR1, CR2, CR3, CRDLY, CREAD, CRTSCTS, CS5, CS6, CS7, CS8, CSIZE, CSTOPB, ECHO,
184         ECHOCTL, ECHOE, ECHOK, ECHOKE, ECHONL, ECHOPRT, EXTA, EXTB, EXTPROC, FF0, FF1, FFDLY,
185         FLUSHO, HUPCL, IBSHIFT, ICANON, ICRNL, IEXTEN, IGNBRK, IGNCR, IGNPAR, IMAXBEL, INLCR,
186         INPCK, ISIG, ISTRIP, IUCLC, IUTF8, IXANY, IXOFF, IXON, NCCS, NL0, NL1, NLDLY, NOFLSH,
187         OCRNL, OFDEL, OFILL, OLCUC, ONLCR, ONLRET, ONOCR, OPOST, PARENB, PARMRK, PARODD, PENDIN,
188         TAB0, TAB1, TAB2, TAB3, TABDLY, TCIFLUSH, TCIOFF, TCIOFLUSH, TCION, TCOFLUSH, TCOOFF,
189         TCOON, TCSADRAIN, TCSAFLUSH, TCSANOW, TOSTOP, VDISCARD, VEOF, VEOL, VEOL2, VERASE, VINTR,
190         VKILL, VLNEXT, VMIN, VQUIT, VREPRINT, VSTART, VSTOP, VSUSP, VSWTC, VT0, VT1, VTDLY, VTIME,
191         VWERASE, XCASE, XTABS,
192     },
193     ioctl::{TCGETS2, TCSETS2, TCSETSF2, TCSETSW2, TIOCEXCL, TIOCNXCL},
194 };
195 
196 // On MIPS, `TCSANOW` et al have `TCSETS` added to them, so we need it to
197 // subtract it out.
198 #[cfg(all(
199     feature = "termios",
200     any(
201         target_arch = "mips",
202         target_arch = "mips32r6",
203         target_arch = "mips64",
204         target_arch = "mips64r6"
205     )
206 ))]
207 pub(crate) use linux_raw_sys::ioctl::TCSETS;
208 
209 // Define our own `uid_t` and `gid_t` if the kernel's versions are not 32-bit.
210 #[cfg(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86"))]
211 pub(crate) type uid_t = u32;
212 #[cfg(any(target_arch = "arm", target_arch = "sparc", target_arch = "x86"))]
213 pub(crate) type gid_t = u32;
214 
215 // Bindgen infers `u32` for many of these macro types which meant to be
216 // used with `c_int` in the C APIs, so cast them to `c_int`.
217 
218 // Convert the signal constants from `u32` to `c_int`.
219 pub(crate) const SIGHUP: c_int = linux_raw_sys::general::SIGHUP as _;
220 pub(crate) const SIGINT: c_int = linux_raw_sys::general::SIGINT as _;
221 pub(crate) const SIGQUIT: c_int = linux_raw_sys::general::SIGQUIT as _;
222 pub(crate) const SIGILL: c_int = linux_raw_sys::general::SIGILL as _;
223 pub(crate) const SIGTRAP: c_int = linux_raw_sys::general::SIGTRAP as _;
224 pub(crate) const SIGABRT: c_int = linux_raw_sys::general::SIGABRT as _;
225 pub(crate) const SIGBUS: c_int = linux_raw_sys::general::SIGBUS as _;
226 pub(crate) const SIGFPE: c_int = linux_raw_sys::general::SIGFPE as _;
227 pub(crate) const SIGKILL: c_int = linux_raw_sys::general::SIGKILL as _;
228 pub(crate) const SIGUSR1: c_int = linux_raw_sys::general::SIGUSR1 as _;
229 pub(crate) const SIGSEGV: c_int = linux_raw_sys::general::SIGSEGV as _;
230 pub(crate) const SIGUSR2: c_int = linux_raw_sys::general::SIGUSR2 as _;
231 pub(crate) const SIGPIPE: c_int = linux_raw_sys::general::SIGPIPE as _;
232 pub(crate) const SIGALRM: c_int = linux_raw_sys::general::SIGALRM as _;
233 pub(crate) const SIGTERM: c_int = linux_raw_sys::general::SIGTERM as _;
234 #[cfg(not(any(
235     target_arch = "mips",
236     target_arch = "mips32r6",
237     target_arch = "mips64",
238     target_arch = "mips64r6",
239     target_arch = "sparc",
240     target_arch = "sparc64"
241 )))]
242 pub(crate) const SIGSTKFLT: c_int = linux_raw_sys::general::SIGSTKFLT as _;
243 pub(crate) const SIGCHLD: c_int = linux_raw_sys::general::SIGCHLD as _;
244 pub(crate) const SIGCONT: c_int = linux_raw_sys::general::SIGCONT as _;
245 pub(crate) const SIGSTOP: c_int = linux_raw_sys::general::SIGSTOP as _;
246 pub(crate) const SIGTSTP: c_int = linux_raw_sys::general::SIGTSTP as _;
247 pub(crate) const SIGTTIN: c_int = linux_raw_sys::general::SIGTTIN as _;
248 pub(crate) const SIGTTOU: c_int = linux_raw_sys::general::SIGTTOU as _;
249 pub(crate) const SIGURG: c_int = linux_raw_sys::general::SIGURG as _;
250 pub(crate) const SIGXCPU: c_int = linux_raw_sys::general::SIGXCPU as _;
251 pub(crate) const SIGXFSZ: c_int = linux_raw_sys::general::SIGXFSZ as _;
252 pub(crate) const SIGVTALRM: c_int = linux_raw_sys::general::SIGVTALRM as _;
253 pub(crate) const SIGPROF: c_int = linux_raw_sys::general::SIGPROF as _;
254 pub(crate) const SIGWINCH: c_int = linux_raw_sys::general::SIGWINCH as _;
255 pub(crate) const SIGIO: c_int = linux_raw_sys::general::SIGIO as _;
256 pub(crate) const SIGPWR: c_int = linux_raw_sys::general::SIGPWR as _;
257 pub(crate) const SIGSYS: c_int = linux_raw_sys::general::SIGSYS as _;
258 #[cfg(any(
259     target_arch = "mips",
260     target_arch = "mips32r6",
261     target_arch = "mips64",
262     target_arch = "mips64r6",
263     target_arch = "sparc",
264     target_arch = "sparc64"
265 ))]
266 pub(crate) const SIGEMT: c_int = linux_raw_sys::general::SIGEMT as _;
267 
268 #[cfg(feature = "stdio")]
269 pub(crate) const STDIN_FILENO: c_int = linux_raw_sys::general::STDIN_FILENO as _;
270 #[cfg(feature = "stdio")]
271 pub(crate) const STDOUT_FILENO: c_int = linux_raw_sys::general::STDOUT_FILENO as _;
272 #[cfg(feature = "stdio")]
273 pub(crate) const STDERR_FILENO: c_int = linux_raw_sys::general::STDERR_FILENO as _;
274 
275 pub(crate) const PIPE_BUF: usize = linux_raw_sys::general::PIPE_BUF as _;
276 
277 pub(crate) const CLOCK_MONOTONIC: c_int = linux_raw_sys::general::CLOCK_MONOTONIC as _;
278 pub(crate) const CLOCK_REALTIME: c_int = linux_raw_sys::general::CLOCK_REALTIME as _;
279 pub(crate) const CLOCK_MONOTONIC_RAW: c_int = linux_raw_sys::general::CLOCK_MONOTONIC_RAW as _;
280 pub(crate) const CLOCK_MONOTONIC_COARSE: c_int =
281     linux_raw_sys::general::CLOCK_MONOTONIC_COARSE as _;
282 pub(crate) const CLOCK_REALTIME_COARSE: c_int = linux_raw_sys::general::CLOCK_REALTIME_COARSE as _;
283 pub(crate) const CLOCK_THREAD_CPUTIME_ID: c_int =
284     linux_raw_sys::general::CLOCK_THREAD_CPUTIME_ID as _;
285 pub(crate) const CLOCK_PROCESS_CPUTIME_ID: c_int =
286     linux_raw_sys::general::CLOCK_PROCESS_CPUTIME_ID as _;
287 #[cfg(any(feature = "thread", feature = "time", target_arch = "x86"))]
288 pub(crate) const CLOCK_BOOTTIME: c_int = linux_raw_sys::general::CLOCK_BOOTTIME as _;
289 #[cfg(any(feature = "thread", feature = "time", target_arch = "x86"))]
290 pub(crate) const CLOCK_BOOTTIME_ALARM: c_int = linux_raw_sys::general::CLOCK_BOOTTIME_ALARM as _;
291 #[cfg(any(feature = "thread", feature = "time", target_arch = "x86"))]
292 pub(crate) const CLOCK_TAI: c_int = linux_raw_sys::general::CLOCK_TAI as _;
293 #[cfg(any(feature = "thread", feature = "time", target_arch = "x86"))]
294 pub(crate) const CLOCK_REALTIME_ALARM: c_int = linux_raw_sys::general::CLOCK_REALTIME_ALARM as _;
295 
296 #[cfg(feature = "system")]
297 mod reboot_symbols {
298     use super::c_int;
299 
300     pub(crate) const LINUX_REBOOT_MAGIC1: c_int = linux_raw_sys::general::LINUX_REBOOT_MAGIC1 as _;
301     pub(crate) const LINUX_REBOOT_MAGIC2: c_int = linux_raw_sys::general::LINUX_REBOOT_MAGIC2 as _;
302 
303     pub(crate) const LINUX_REBOOT_CMD_RESTART: c_int =
304         linux_raw_sys::general::LINUX_REBOOT_CMD_RESTART as _;
305     pub(crate) const LINUX_REBOOT_CMD_HALT: c_int =
306         linux_raw_sys::general::LINUX_REBOOT_CMD_HALT as _;
307     pub(crate) const LINUX_REBOOT_CMD_CAD_ON: c_int =
308         linux_raw_sys::general::LINUX_REBOOT_CMD_CAD_ON as _;
309     pub(crate) const LINUX_REBOOT_CMD_CAD_OFF: c_int =
310         linux_raw_sys::general::LINUX_REBOOT_CMD_CAD_OFF as _;
311     pub(crate) const LINUX_REBOOT_CMD_POWER_OFF: c_int =
312         linux_raw_sys::general::LINUX_REBOOT_CMD_POWER_OFF as _;
313     pub(crate) const LINUX_REBOOT_CMD_SW_SUSPEND: c_int =
314         linux_raw_sys::general::LINUX_REBOOT_CMD_SW_SUSPEND as _;
315     pub(crate) const LINUX_REBOOT_CMD_KEXEC: c_int =
316         linux_raw_sys::general::LINUX_REBOOT_CMD_KEXEC as _;
317 }
318 #[cfg(feature = "system")]
319 pub(crate) use reboot_symbols::*;
320