1use num_enum::{IntoPrimitive, TryFromPrimitive};
2
3use crate::{bindings, const_conversions};
4
5#[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 const fn alias(existing_member: Self, expected_value: u64) -> Self {
164 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}