linux_api/
ioctls.rs

1use num_enum::{IntoPrimitive, TryFromPrimitive};
2
3use crate::{bindings, const_conversions};
4
5/// ioctl requests
6///
7/// While the `ioctl` syscall takes the request as an `unsigned long`, which is
8/// 64-bits on x86-64, the constants are specifically documented as being
9/// 32-bits, so we use an underlying representation of 32-bits.
10#[derive(Debug, Copy, Clone, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
11#[repr(u32)]
12#[allow(non_camel_case_types)]
13pub enum IoctlRequest {
14    TCGETS = bindings::LINUX_TCGETS,
15    TCSETS = bindings::LINUX_TCSETS,
16    TCSETSW = bindings::LINUX_TCSETSW,
17    TCSETSF = bindings::LINUX_TCSETSF,
18    TCGETA = bindings::LINUX_TCGETA,
19    TCSETA = bindings::LINUX_TCSETA,
20    TCSETAW = bindings::LINUX_TCSETAW,
21    TCSETAF = bindings::LINUX_TCSETAF,
22    TCSBRK = bindings::LINUX_TCSBRK,
23    TCXONC = bindings::LINUX_TCXONC,
24    TCFLSH = bindings::LINUX_TCFLSH,
25    TIOCEXCL = bindings::LINUX_TIOCEXCL,
26    TIOCNXCL = bindings::LINUX_TIOCNXCL,
27    TIOCSCTTY = bindings::LINUX_TIOCSCTTY,
28    TIOCGPGRP = bindings::LINUX_TIOCGPGRP,
29    TIOCSPGRP = bindings::LINUX_TIOCSPGRP,
30    TIOCOUTQ = bindings::LINUX_TIOCOUTQ,
31    TIOCSTI = bindings::LINUX_TIOCSTI,
32    TIOCGWINSZ = bindings::LINUX_TIOCGWINSZ,
33    TIOCSWINSZ = bindings::LINUX_TIOCSWINSZ,
34    TIOCMGET = bindings::LINUX_TIOCMGET,
35    TIOCMBIS = bindings::LINUX_TIOCMBIS,
36    TIOCMBIC = bindings::LINUX_TIOCMBIC,
37    TIOCMSET = bindings::LINUX_TIOCMSET,
38    TIOCGSOFTCAR = bindings::LINUX_TIOCGSOFTCAR,
39    TIOCSSOFTCAR = bindings::LINUX_TIOCSSOFTCAR,
40    FIONREAD = bindings::LINUX_FIONREAD,
41    TIOCLINUX = bindings::LINUX_TIOCLINUX,
42    TIOCCONS = bindings::LINUX_TIOCCONS,
43    TIOCGSERIAL = bindings::LINUX_TIOCGSERIAL,
44    TIOCSSERIAL = bindings::LINUX_TIOCSSERIAL,
45    TIOCPKT = bindings::LINUX_TIOCPKT,
46    FIONBIO = bindings::LINUX_FIONBIO,
47    TIOCNOTTY = bindings::LINUX_TIOCNOTTY,
48    TIOCSETD = bindings::LINUX_TIOCSETD,
49    TIOCGETD = bindings::LINUX_TIOCGETD,
50    TCSBRKP = bindings::LINUX_TCSBRKP,
51    TIOCSBRK = bindings::LINUX_TIOCSBRK,
52    TIOCCBRK = bindings::LINUX_TIOCCBRK,
53    TIOCGSID = bindings::LINUX_TIOCGSID,
54    TIOCGRS485 = bindings::LINUX_TIOCGRS485,
55    TIOCSRS485 = bindings::LINUX_TIOCSRS485,
56    TCGETX = bindings::LINUX_TCGETX,
57    TCSETX = bindings::LINUX_TCSETX,
58    TCSETXF = bindings::LINUX_TCSETXF,
59    TCSETXW = bindings::LINUX_TCSETXW,
60    TIOCVHANGUP = bindings::LINUX_TIOCVHANGUP,
61    FIONCLEX = bindings::LINUX_FIONCLEX,
62    FIOCLEX = bindings::LINUX_FIOCLEX,
63    FIOASYNC = bindings::LINUX_FIOASYNC,
64    TIOCSERCONFIG = bindings::LINUX_TIOCSERCONFIG,
65    TIOCSERGWILD = bindings::LINUX_TIOCSERGWILD,
66    TIOCSERSWILD = bindings::LINUX_TIOCSERSWILD,
67    TIOCGLCKTRMIOS = bindings::LINUX_TIOCGLCKTRMIOS,
68    TIOCSLCKTRMIOS = bindings::LINUX_TIOCSLCKTRMIOS,
69    TIOCSERGSTRUCT = bindings::LINUX_TIOCSERGSTRUCT,
70    TIOCSERGETLSR = bindings::LINUX_TIOCSERGETLSR,
71    TIOCSERGETMULTI = bindings::LINUX_TIOCSERGETMULTI,
72    TIOCSERSETMULTI = bindings::LINUX_TIOCSERSETMULTI,
73    TIOCMIWAIT = bindings::LINUX_TIOCMIWAIT,
74    TIOCGICOUNT = bindings::LINUX_TIOCGICOUNT,
75    FIOQSIZE = bindings::LINUX_FIOQSIZE,
76    FIOSETOWN = bindings::LINUX_FIOSETOWN,
77    SIOCSPGRP = bindings::LINUX_SIOCSPGRP,
78    FIOGETOWN = bindings::LINUX_FIOGETOWN,
79    SIOCGPGRP = bindings::LINUX_SIOCGPGRP,
80    SIOCATMARK = bindings::LINUX_SIOCATMARK,
81    SOCK_IOC_TYPE = bindings::LINUX_SOCK_IOC_TYPE,
82    EPOLL_IOC_TYPE = bindings::LINUX_EPOLL_IOC_TYPE,
83    SIOCGSTAMP = bindings::LINUX_SIOCGSTAMP,
84    SIOCGSTAMPNS = bindings::LINUX_SIOCGSTAMPNS,
85    SIOCADDRT = bindings::LINUX_SIOCADDRT,
86    SIOCDELRT = bindings::LINUX_SIOCDELRT,
87    SIOCRTMSG = bindings::LINUX_SIOCRTMSG,
88    SIOCGIFNAME = bindings::LINUX_SIOCGIFNAME,
89    SIOCSIFLINK = bindings::LINUX_SIOCSIFLINK,
90    SIOCGIFCONF = bindings::LINUX_SIOCGIFCONF,
91    SIOCGIFFLAGS = bindings::LINUX_SIOCGIFFLAGS,
92    SIOCSIFFLAGS = bindings::LINUX_SIOCSIFFLAGS,
93    SIOCGIFADDR = bindings::LINUX_SIOCGIFADDR,
94    SIOCSIFADDR = bindings::LINUX_SIOCSIFADDR,
95    SIOCGIFDSTADDR = bindings::LINUX_SIOCGIFDSTADDR,
96    SIOCSIFDSTADDR = bindings::LINUX_SIOCSIFDSTADDR,
97    SIOCGIFBRDADDR = bindings::LINUX_SIOCGIFBRDADDR,
98    SIOCSIFBRDADDR = bindings::LINUX_SIOCSIFBRDADDR,
99    SIOCGIFNETMASK = bindings::LINUX_SIOCGIFNETMASK,
100    SIOCSIFNETMASK = bindings::LINUX_SIOCSIFNETMASK,
101    SIOCGIFMETRIC = bindings::LINUX_SIOCGIFMETRIC,
102    SIOCSIFMETRIC = bindings::LINUX_SIOCSIFMETRIC,
103    SIOCGIFMEM = bindings::LINUX_SIOCGIFMEM,
104    SIOCSIFMEM = bindings::LINUX_SIOCSIFMEM,
105    SIOCGIFMTU = bindings::LINUX_SIOCGIFMTU,
106    SIOCSIFMTU = bindings::LINUX_SIOCSIFMTU,
107    SIOCSIFNAME = bindings::LINUX_SIOCSIFNAME,
108    SIOCSIFHWADDR = bindings::LINUX_SIOCSIFHWADDR,
109    SIOCGIFENCAP = bindings::LINUX_SIOCGIFENCAP,
110    SIOCSIFENCAP = bindings::LINUX_SIOCSIFENCAP,
111    SIOCGIFHWADDR = bindings::LINUX_SIOCGIFHWADDR,
112    SIOCGIFSLAVE = bindings::LINUX_SIOCGIFSLAVE,
113    SIOCSIFSLAVE = bindings::LINUX_SIOCSIFSLAVE,
114    SIOCADDMULTI = bindings::LINUX_SIOCADDMULTI,
115    SIOCDELMULTI = bindings::LINUX_SIOCDELMULTI,
116    SIOCGIFINDEX = bindings::LINUX_SIOCGIFINDEX,
117    SIOCSIFPFLAGS = bindings::LINUX_SIOCSIFPFLAGS,
118    SIOCGIFPFLAGS = bindings::LINUX_SIOCGIFPFLAGS,
119    SIOCDIFADDR = bindings::LINUX_SIOCDIFADDR,
120    SIOCSIFHWBROADCAST = bindings::LINUX_SIOCSIFHWBROADCAST,
121    SIOCGIFCOUNT = bindings::LINUX_SIOCGIFCOUNT,
122    SIOCGIFBR = bindings::LINUX_SIOCGIFBR,
123    SIOCSIFBR = bindings::LINUX_SIOCSIFBR,
124    SIOCGIFTXQLEN = bindings::LINUX_SIOCGIFTXQLEN,
125    SIOCSIFTXQLEN = bindings::LINUX_SIOCSIFTXQLEN,
126    SIOCETHTOOL = bindings::LINUX_SIOCETHTOOL,
127    SIOCGMIIPHY = bindings::LINUX_SIOCGMIIPHY,
128    SIOCGMIIREG = bindings::LINUX_SIOCGMIIREG,
129    SIOCSMIIREG = bindings::LINUX_SIOCSMIIREG,
130    SIOCWANDEV = bindings::LINUX_SIOCWANDEV,
131    SIOCOUTQNSD = bindings::LINUX_SIOCOUTQNSD,
132    SIOCGSKNS = bindings::LINUX_SIOCGSKNS,
133    SIOCDARP = bindings::LINUX_SIOCDARP,
134    SIOCGARP = bindings::LINUX_SIOCGARP,
135    SIOCSARP = bindings::LINUX_SIOCSARP,
136    SIOCDRARP = bindings::LINUX_SIOCDRARP,
137    SIOCGRARP = bindings::LINUX_SIOCGRARP,
138    SIOCSRARP = bindings::LINUX_SIOCSRARP,
139    SIOCGIFMAP = bindings::LINUX_SIOCGIFMAP,
140    SIOCSIFMAP = bindings::LINUX_SIOCSIFMAP,
141    SIOCADDDLCI = bindings::LINUX_SIOCADDDLCI,
142    SIOCDELDLCI = bindings::LINUX_SIOCDELDLCI,
143    SIOCGIFVLAN = bindings::LINUX_SIOCGIFVLAN,
144    SIOCSIFVLAN = bindings::LINUX_SIOCSIFVLAN,
145    SIOCBONDENSLAVE = bindings::LINUX_SIOCBONDENSLAVE,
146    SIOCBONDRELEASE = bindings::LINUX_SIOCBONDRELEASE,
147    SIOCBONDSETHWADDR = bindings::LINUX_SIOCBONDSETHWADDR,
148    SIOCBONDSLAVEINFOQUERY = bindings::LINUX_SIOCBONDSLAVEINFOQUERY,
149    SIOCBONDINFOQUERY = bindings::LINUX_SIOCBONDINFOQUERY,
150    SIOCBONDCHANGEACTIVE = bindings::LINUX_SIOCBONDCHANGEACTIVE,
151    SIOCBRADDBR = bindings::LINUX_SIOCBRADDBR,
152    SIOCBRDELBR = bindings::LINUX_SIOCBRDELBR,
153    SIOCBRADDIF = bindings::LINUX_SIOCBRADDIF,
154    SIOCBRDELIF = bindings::LINUX_SIOCBRDELIF,
155    SIOCSHWTSTAMP = bindings::LINUX_SIOCSHWTSTAMP,
156    SIOCGHWTSTAMP = bindings::LINUX_SIOCGHWTSTAMP,
157    SIOCDEVPRIVATE = bindings::LINUX_SIOCDEVPRIVATE,
158    SIOCPROTOPRIVATE = bindings::LINUX_SIOCPROTOPRIVATE,
159}
160
161impl IoctlRequest {
162    /// Used below for generating checked const aliases.
163    const fn alias(existing_member: Self, expected_value: u64) -> Self {
164        // We can't use `u64::from` here, in a const context, so we use `as`.
165        assert!(existing_member as u64 == expected_value);
166        existing_member
167    }
168    pub const TIOCINQ: Self = Self::alias(
169        Self::FIONREAD,
170        const_conversions::u64_from_u32(bindings::LINUX_TIOCINQ),
171    );
172    pub const SIOGIFINDEX: Self = Self::alias(
173        Self::SIOCGIFINDEX,
174        const_conversions::u64_from_u32(bindings::LINUX_SIOGIFINDEX),
175    );
176}