neli/consts/
rtnl.rs

1use crate as neli;
2
3use neli_proc_macros::neli_enum;
4
5/// Internet address families
6#[neli_enum(serialized_type = "libc::c_uchar")]
7pub enum Af {
8    Inet = libc::AF_INET as libc::c_uchar,
9    Inet6 = libc::AF_INET6 as libc::c_uchar,
10}
11
12/// General address families for sockets
13#[neli_enum(serialized_type = "u8")]
14pub enum RtAddrFamily {
15    Unspecified = libc::AF_UNSPEC as u8,
16    UnixOrLocal = libc::AF_UNIX as u8,
17    Inet = libc::AF_INET as u8,
18    Inet6 = libc::AF_INET6 as u8,
19    Ipx = libc::AF_IPX as u8,
20    Netlink = libc::AF_NETLINK as u8,
21    X25 = libc::AF_X25 as u8,
22    Ax25 = libc::AF_AX25 as u8,
23    Atmpvc = libc::AF_ATMPVC as u8,
24    Appletalk = libc::AF_APPLETALK as u8,
25    Packet = libc::AF_PACKET as u8,
26    Alg = libc::AF_ALG as u8,
27}
28
29/// Interface address flags
30#[neli_enum(serialized_type = "u8")]
31pub enum IfaF {
32    Secondary = libc::IFA_F_SECONDARY as u8,
33    Temporary = libc::IFA_F_TEMPORARY as u8,
34    Nodad = libc::IFA_F_NODAD as u8,
35    Optimistic = libc::IFA_F_OPTIMISTIC as u8,
36    Dadfailed = libc::IFA_F_DADFAILED as u8,
37    Homeaddress = libc::IFA_F_HOMEADDRESS as u8,
38    Deprecated = libc::IFA_F_DEPRECATED as u8,
39    Tentative = libc::IFA_F_TENTATIVE as u8,
40    Permanent = libc::IFA_F_PERMANENT as u8,
41}
42
43/// `rtm_type`
44/// The results of a lookup from a route table
45#[neli_enum(serialized_type = "libc::c_uchar")]
46pub enum Rtn {
47    Unspec = libc::RTN_UNSPEC,
48    Unicast = libc::RTN_UNICAST,
49    Local = libc::RTN_LOCAL,
50    Broadcast = libc::RTN_BROADCAST,
51    Anycast = libc::RTN_ANYCAST,
52    Multicast = libc::RTN_MULTICAST,
53    Blackhole = libc::RTN_BLACKHOLE,
54    Unreachable = libc::RTN_UNREACHABLE,
55    Prohibit = libc::RTN_PROHIBIT,
56    Throw = libc::RTN_THROW,
57    Nat = libc::RTN_NAT,
58    Xresolve = libc::RTN_XRESOLVE,
59}
60
61/// `rtm_protocol`
62/// The origins of routes that are defined in the kernel
63#[neli_enum(serialized_type = "libc::c_uchar")]
64pub enum Rtprot {
65    Unspec = libc::RTPROT_UNSPEC,
66    Redirect = libc::RTPROT_REDIRECT,
67    Kernel = libc::RTPROT_KERNEL,
68    Boot = libc::RTPROT_BOOT,
69    Static = libc::RTPROT_STATIC,
70}
71
72/// `rtm_scope`
73/// The distance between destinations
74#[neli_enum(serialized_type = "libc::c_uchar")]
75pub enum RtScope {
76    Universe = libc::RT_SCOPE_UNIVERSE,
77    Site = libc::RT_SCOPE_SITE,
78    Link = libc::RT_SCOPE_LINK,
79    Host = libc::RT_SCOPE_HOST,
80    Nowhere = libc::RT_SCOPE_NOWHERE,
81}
82
83/// `rt_class_t`
84/// Reserved route table identifiers
85#[neli_enum(serialized_type = "libc::c_uchar")]
86pub enum RtTable {
87    Unspec = libc::RT_TABLE_UNSPEC,
88    Compat = libc::RT_TABLE_COMPAT,
89    Default = libc::RT_TABLE_DEFAULT,
90    Main = libc::RT_TABLE_MAIN,
91    Local = libc::RT_TABLE_LOCAL,
92}
93
94/// `rtm_flags`
95/// Flags for rtnetlink messages
96#[neli_enum(serialized_type = "libc::c_uint")]
97pub enum RtmF {
98    Notify = libc::RTM_F_NOTIFY,
99    Cloned = libc::RTM_F_CLONED,
100    Equalize = libc::RTM_F_EQUALIZE,
101    Prefix = libc::RTM_F_PREFIX,
102
103    #[cfg(target_env = "gnu")]
104    LookupTable = libc::RTM_F_LOOKUP_TABLE,
105    #[cfg(target_env = "gnu")]
106    FibMatch = libc::RTM_F_FIB_MATCH,
107}
108
109/// Arp neighbor cache entry states
110#[neli_enum(serialized_type = "u16")]
111pub enum Nud {
112    None = libc::NUD_NONE,
113    Incomplete = libc::NUD_INCOMPLETE,
114    Reachable = libc::NUD_REACHABLE,
115    Stale = libc::NUD_STALE,
116    Delay = libc::NUD_DELAY,
117    Probe = libc::NUD_PROBE,
118    Failed = libc::NUD_FAILED,
119    Noarp = libc::NUD_NOARP,
120    Permanent = libc::NUD_PERMANENT,
121}
122
123/// Arp neighbor cache entry flags
124#[neli_enum(serialized_type = "u8")]
125pub enum Ntf {
126    Use = libc::NTF_USE,
127    Self_ = libc::NTF_SELF,
128    Master = libc::NTF_MASTER,
129    Proxy = libc::NTF_PROXY,
130    #[cfg(target_env = "gnu")]
131    ExtLearned = libc::NTF_EXT_LEARNED,
132    #[cfg(target_env = "gnu")]
133    Offloaded = libc::NTF_OFFLOADED,
134    Router = libc::NTF_ROUTER,
135}
136
137impl_trait!(
138    /// Marker trait for [`Rtattr`][crate::rtnl::Rtattr] field,
139    /// `rta_type`.
140    pub RtaType,
141    libc::c_ushort,
142    /// Wrapper that is usable for all values in
143    /// [`Rtattr`][crate::rtnl::Rtattr] field, `rta_type`
144    pub RtaTypeWrapper,
145    Ifla,
146    Ifa,
147    Rta,
148    Tca,
149    Nda,
150    IflaInfo
151);
152
153/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
154/// `rta_type`.
155/// Values are interface information message attributes. Used with
156/// [`Ifinfomsg`][crate::rtnl::Ifinfomsg].
157#[neli_enum(serialized_type = "libc::c_ushort")]
158pub enum Ifla {
159    Unspec = libc::IFLA_UNSPEC,
160    Address = libc::IFLA_ADDRESS,
161    Broadcast = libc::IFLA_BROADCAST,
162    Ifname = libc::IFLA_IFNAME,
163    Mtu = libc::IFLA_MTU,
164    Link = libc::IFLA_LINK,
165    Qdisc = libc::IFLA_QDISC,
166    Stats = libc::IFLA_STATS,
167    Cost = libc::IFLA_COST,
168    Priority = libc::IFLA_PRIORITY,
169    Master = libc::IFLA_MASTER,
170    Wireless = libc::IFLA_WIRELESS,
171    Protinfo = libc::IFLA_PROTINFO,
172    Txqlen = libc::IFLA_TXQLEN,
173    Map = libc::IFLA_MAP,
174    Weight = libc::IFLA_WEIGHT,
175    Operstate = libc::IFLA_OPERSTATE,
176    Linkmode = libc::IFLA_LINKMODE,
177    Linkinfo = libc::IFLA_LINKINFO,
178    NetNsPid = libc::IFLA_NET_NS_PID,
179    Ifalias = libc::IFLA_IFALIAS,
180    NumVf = libc::IFLA_NUM_VF,
181    VfinfoList = libc::IFLA_VFINFO_LIST,
182    Stats64 = libc::IFLA_STATS64,
183    VfPorts = libc::IFLA_VF_PORTS,
184    PortSelf = libc::IFLA_PORT_SELF,
185    AfSpec = libc::IFLA_AF_SPEC,
186    Group = libc::IFLA_GROUP,
187    NetNsFd = libc::IFLA_NET_NS_FD,
188    ExtMask = libc::IFLA_EXT_MASK,
189    Promiscuity = libc::IFLA_PROMISCUITY,
190    NumTxQueues = libc::IFLA_NUM_TX_QUEUES,
191    NumRxQueues = libc::IFLA_NUM_RX_QUEUES,
192    Carrier = libc::IFLA_CARRIER,
193    PhysPortId = libc::IFLA_PHYS_PORT_ID,
194    CarrierChanges = libc::IFLA_CARRIER_CHANGES,
195    PhysSwitchId = libc::IFLA_PHYS_SWITCH_ID,
196    LinkNetnsid = libc::IFLA_LINK_NETNSID,
197    PhysPortName = libc::IFLA_PHYS_PORT_NAME,
198    ProtoDown = libc::IFLA_PROTO_DOWN,
199    GsoMaxSegs = libc::IFLA_GSO_MAX_SEGS,
200    GsoMaxSize = libc::IFLA_GSO_MAX_SIZE,
201    Pad = libc::IFLA_PAD,
202    Xdp = libc::IFLA_XDP,
203    Event = libc::IFLA_EVENT,
204    NewNetnsid = libc::IFLA_NEW_NETNSID,
205    IfNetnsid = libc::IFLA_IF_NETNSID,
206    CarrierUpCount = libc::IFLA_CARRIER_UP_COUNT,
207    CarrierDownCount = libc::IFLA_CARRIER_DOWN_COUNT,
208    NewIfindex = libc::IFLA_NEW_IFINDEX,
209    MinMtu = libc::IFLA_MIN_MTU,
210    MaxMtu = libc::IFLA_MAX_MTU,
211    PropList = libc::IFLA_PROP_LIST,
212    AltIfname = libc::IFLA_ALT_IFNAME,
213    PermAddress = libc::IFLA_PERM_ADDRESS,
214    ProtoDownReason = libc::IFLA_PROTO_DOWN_REASON,
215}
216
217/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
218/// `rta_type`.
219/// Values are nested attributes to IFLA_LINKMODE.
220#[neli_enum(serialized_type = "libc::c_ushort")]
221pub enum IflaInfo {
222    Unspec = libc::IFLA_INFO_UNSPEC,
223    Kind = libc::IFLA_INFO_KIND,
224    Data = libc::IFLA_INFO_DATA,
225    Xstats = libc::IFLA_INFO_XSTATS,
226    SlaveKind = libc::IFLA_INFO_SLAVE_KIND,
227    SlaveData = libc::IFLA_INFO_SLAVE_DATA,
228}
229
230/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
231/// `rta_type`.
232/// Values are interface address message attributes. Used with
233/// [`Ifaddrmsg`][crate::rtnl::Ifaddrmsg].
234#[neli_enum(serialized_type = "libc::c_ushort")]
235pub enum Ifa {
236    Unspec = libc::IFA_UNSPEC,
237    Address = libc::IFA_ADDRESS,
238    Local = libc::IFA_LOCAL,
239    Label = libc::IFA_LABEL,
240    Broadcast = libc::IFA_BROADCAST,
241    Anycast = libc::IFA_ANYCAST,
242    Cacheinfo = libc::IFA_CACHEINFO,
243    Multicast = libc::IFA_MULTICAST,
244    #[cfg(target_env = "gnu")]
245    Flags = libc::IFA_FLAGS,
246}
247
248/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
249/// `rta_type`.
250/// Values are routing message attributes. Used with
251/// [`Rtmsg`][crate::rtnl::Rtmsg].
252#[neli_enum(serialized_type = "libc::c_ushort")]
253pub enum Rta {
254    Unspec = libc::RTA_UNSPEC,
255    Dst = libc::RTA_DST,
256    Src = libc::RTA_SRC,
257    Iif = libc::RTA_IIF,
258    Oif = libc::RTA_OIF,
259    Gateway = libc::RTA_GATEWAY,
260    Priority = libc::RTA_PRIORITY,
261    Prefsrc = libc::RTA_PREFSRC,
262    Metrics = libc::RTA_METRICS,
263    Multipath = libc::RTA_MULTIPATH,
264    Protoinfo = libc::RTA_PROTOINFO, // no longer used in Linux
265    Flow = libc::RTA_FLOW,
266    Cacheinfo = libc::RTA_CACHEINFO,
267    Session = libc::RTA_SESSION, // no longer used in Linux
268    MpAlgo = libc::RTA_MP_ALGO,  // no longer used in Linux
269    Table = libc::RTA_TABLE,
270    Mark = libc::RTA_MARK,
271    MfcStats = libc::RTA_MFC_STATS,
272    #[cfg(target_env = "gnu")]
273    Via = libc::RTA_VIA,
274    #[cfg(target_env = "gnu")]
275    Newdst = libc::RTA_NEWDST,
276    #[cfg(target_env = "gnu")]
277    Pref = libc::RTA_PREF,
278    #[cfg(target_env = "gnu")]
279    EncapType = libc::RTA_ENCAP_TYPE,
280    #[cfg(target_env = "gnu")]
281    Encap = libc::RTA_ENCAP,
282    #[cfg(target_env = "gnu")]
283    Expires = libc::RTA_EXPIRES,
284    #[cfg(target_env = "gnu")]
285    Pad = libc::RTA_PAD,
286    #[cfg(target_env = "gnu")]
287    Uid = libc::RTA_UID,
288    #[cfg(target_env = "gnu")]
289    TtlPropagate = libc::RTA_TTL_PROPAGATE,
290}
291
292/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
293/// `rta_type`.
294/// Values specify queuing discipline attributes. Used with
295/// [`Tcmsg`][crate::rtnl::Tcmsg].
296#[neli_enum(serialized_type = "libc::c_ushort")]
297pub enum Tca {
298    Unspec = libc::TCA_UNSPEC,
299    Kind = libc::TCA_KIND,
300    Options = libc::TCA_OPTIONS,
301    Stats = libc::TCA_STATS,
302    Xstats = libc::TCA_XSTATS,
303    Rate = libc::TCA_RATE,
304    Fcnt = libc::TCA_FCNT,
305    Stats2 = libc::TCA_STATS2,
306    Stab = libc::TCA_STAB,
307}
308
309/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
310/// `rta_type`.
311/// Values specify neighbor table attributes
312#[neli_enum(serialized_type = "libc::c_ushort")]
313pub enum Nda {
314    Unspec = libc::NDA_UNSPEC,
315    Dst = libc::NDA_DST,
316    Lladdr = libc::NDA_LLADDR,
317    Cacheinfo = libc::NDA_CACHEINFO,
318    Probes = libc::NDA_PROBES,
319    Vlan = libc::NDA_VLAN,
320    Port = libc::NDA_PORT,
321    Vni = libc::NDA_VNI,
322    Ifindex = libc::NDA_IFINDEX,
323    #[cfg(target_env = "gnu")]
324    Master = libc::NDA_MASTER,
325    #[cfg(target_env = "gnu")]
326    LinkNetnsid = libc::NDA_LINK_NETNSID,
327    #[cfg(target_env = "gnu")]
328    SrcVni = libc::NDA_SRC_VNI,
329}
330
331/// Interface types
332#[neli_enum(serialized_type = "libc::c_ushort")]
333pub enum Arphrd {
334    Netrom = libc::ARPHRD_NETROM,
335    Ether = libc::ARPHRD_ETHER,
336    Eether = libc::ARPHRD_EETHER,
337    AX25 = libc::ARPHRD_AX25,
338    Pronet = libc::ARPHRD_PRONET,
339    Chaos = libc::ARPHRD_CHAOS,
340    Ieee802 = libc::ARPHRD_IEEE802,
341    Arcnet = libc::ARPHRD_ARCNET,
342    Appletlk = libc::ARPHRD_APPLETLK,
343    Dlci = libc::ARPHRD_DLCI,
344    Atm = libc::ARPHRD_APPLETLK,
345    Metricom = libc::ARPHRD_METRICOM,
346    Ieee1394 = libc::ARPHRD_IEEE1394,
347    Eui64 = libc::ARPHRD_EUI64,
348    Infiniband = libc::ARPHRD_INFINIBAND,
349
350    Loopback = libc::ARPHRD_LOOPBACK,
351
352    // Possibly more types here - need to look into ARP more
353    Void = libc::ARPHRD_VOID,
354    None = libc::ARPHRD_NONE,
355}
356
357/// Values for `ifi_flags` in
358/// [`Ifinfomsg`][crate::rtnl::Ifinfomsg].
359#[neli_enum(serialized_type = "libc::c_uint")]
360pub enum Iff {
361    Up = libc::IFF_UP as libc::c_uint,
362    Broadcast = libc::IFF_BROADCAST as libc::c_uint,
363    Debug = libc::IFF_DEBUG as libc::c_uint,
364    Loopback = libc::IFF_LOOPBACK as libc::c_uint,
365    Pointopoint = libc::IFF_POINTOPOINT as libc::c_uint,
366    Running = libc::IFF_RUNNING as libc::c_uint,
367    Noarp = libc::IFF_NOARP as libc::c_uint,
368    Promisc = libc::IFF_PROMISC as libc::c_uint,
369    Notrailers = libc::IFF_NOTRAILERS as libc::c_uint,
370    Allmulti = libc::IFF_ALLMULTI as libc::c_uint,
371    Master = libc::IFF_MASTER as libc::c_uint,
372    Slave = libc::IFF_SLAVE as libc::c_uint,
373    Multicast = libc::IFF_MULTICAST as libc::c_uint,
374    Portsel = libc::IFF_PORTSEL as libc::c_uint,
375    Automedia = libc::IFF_AUTOMEDIA as libc::c_uint,
376    Dynamic = libc::IFF_DYNAMIC as libc::c_uint,
377    LowerUp = libc::IFF_LOWER_UP as libc::c_uint,
378    Dormant = libc::IFF_DORMANT as libc::c_uint,
379    Echo = libc::IFF_ECHO as libc::c_uint,
380    // Possibly more types here - need to look into private flags for interfaces
381}
382
383impl_flags!(
384    #[allow(missing_docs)]
385    pub IffFlags, Iff, libc::c_uint
386);
387
388impl_flags!(
389    #[allow(missing_docs)]
390    pub IfaFFlags, IfaF, libc::c_uchar
391);
392
393impl_flags!(
394    #[allow(missing_docs)]
395    pub RtmFFlags, RtmF, libc::c_uint
396);
397impl_flags!(
398    #[allow(missing_docs)]
399    pub NudFlags, Nud, u16
400);
401impl_flags!(
402    #[allow(missing_docs)]
403    pub NtfFlags, Ntf, u8
404);
405
406/// rtnetlink-related values for `nl_type` in
407/// [`Nlmsghdr`][crate::nl::Nlmsghdr].
408#[neli_enum(serialized_type = "u16")]
409pub enum Rtm {
410    Newlink = libc::RTM_NEWLINK,
411    Dellink = libc::RTM_DELLINK,
412    Getlink = libc::RTM_GETLINK,
413    Setlink = libc::RTM_SETLINK,
414    Newaddr = libc::RTM_NEWADDR,
415    Deladdr = libc::RTM_DELADDR,
416    Getaddr = libc::RTM_GETADDR,
417    Newroute = libc::RTM_NEWROUTE,
418    Delroute = libc::RTM_DELROUTE,
419    Getroute = libc::RTM_GETROUTE,
420    Newneigh = libc::RTM_NEWNEIGH,
421    Delneigh = libc::RTM_DELNEIGH,
422    Getneigh = libc::RTM_GETNEIGH,
423    Newrule = libc::RTM_NEWRULE,
424    Delrule = libc::RTM_DELRULE,
425    Getrule = libc::RTM_GETRULE,
426    Newqdisc = libc::RTM_NEWQDISC,
427    Delqdisc = libc::RTM_DELQDISC,
428    Getqdisc = libc::RTM_GETQDISC,
429    Newtclass = libc::RTM_NEWTCLASS,
430    Deltclass = libc::RTM_DELTCLASS,
431    Gettclass = libc::RTM_GETTCLASS,
432    Newtfilter = libc::RTM_NEWTFILTER,
433    Deltfilter = libc::RTM_DELTFILTER,
434    Gettfilter = libc::RTM_GETTFILTER,
435    Newaction = libc::RTM_NEWACTION,
436    Delaction = libc::RTM_DELACTION,
437    Getaction = libc::RTM_GETACTION,
438    Newprefix = libc::RTM_NEWPREFIX,
439    Getmulticast = libc::RTM_GETMULTICAST,
440    Getanycast = libc::RTM_GETANYCAST,
441    Newneightbl = libc::RTM_NEWNEIGHTBL,
442    Getneightbl = libc::RTM_GETNEIGHTBL,
443    Setneightbl = libc::RTM_SETNEIGHTBL,
444    Newnduseropt = libc::RTM_NEWNDUSEROPT,
445    Newaddrlabel = libc::RTM_NEWADDRLABEL,
446    Deladdrlabel = libc::RTM_DELADDRLABEL,
447    Getaddrlabel = libc::RTM_GETADDRLABEL,
448    Getdcb = libc::RTM_GETDCB,
449    Setdcb = libc::RTM_SETDCB,
450    Newnetconf = libc::RTM_NEWNETCONF,
451    Getnetconf = libc::RTM_GETNETCONF,
452    Newmdb = libc::RTM_NEWMDB,
453    Delmdb = libc::RTM_DELMDB,
454    Getmdb = libc::RTM_GETMDB,
455    Newnsid = libc::RTM_NEWNSID,
456    Delnsid = libc::RTM_DELNSID,
457    Getnsid = libc::RTM_GETNSID,
458}