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    Flags = libc::IFA_FLAGS,
245}
246
247/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
248/// `rta_type`.
249/// Values are routing message attributes. Used with
250/// [`Rtmsg`][crate::rtnl::Rtmsg].
251#[neli_enum(serialized_type = "libc::c_ushort")]
252pub enum Rta {
253    Unspec = libc::RTA_UNSPEC,
254    Dst = libc::RTA_DST,
255    Src = libc::RTA_SRC,
256    Iif = libc::RTA_IIF,
257    Oif = libc::RTA_OIF,
258    Gateway = libc::RTA_GATEWAY,
259    Priority = libc::RTA_PRIORITY,
260    Prefsrc = libc::RTA_PREFSRC,
261    Metrics = libc::RTA_METRICS,
262    Multipath = libc::RTA_MULTIPATH,
263    Protoinfo = libc::RTA_PROTOINFO, // no longer used in Linux
264    Flow = libc::RTA_FLOW,
265    Cacheinfo = libc::RTA_CACHEINFO,
266    Session = libc::RTA_SESSION, // no longer used in Linux
267    MpAlgo = libc::RTA_MP_ALGO,  // no longer used in Linux
268    Table = libc::RTA_TABLE,
269    Mark = libc::RTA_MARK,
270    MfcStats = libc::RTA_MFC_STATS,
271    #[cfg(target_env = "gnu")]
272    Via = libc::RTA_VIA,
273    #[cfg(target_env = "gnu")]
274    Newdst = libc::RTA_NEWDST,
275    #[cfg(target_env = "gnu")]
276    Pref = libc::RTA_PREF,
277    #[cfg(target_env = "gnu")]
278    EncapType = libc::RTA_ENCAP_TYPE,
279    #[cfg(target_env = "gnu")]
280    Encap = libc::RTA_ENCAP,
281    #[cfg(target_env = "gnu")]
282    Expires = libc::RTA_EXPIRES,
283    #[cfg(target_env = "gnu")]
284    Pad = libc::RTA_PAD,
285    #[cfg(target_env = "gnu")]
286    Uid = libc::RTA_UID,
287    #[cfg(target_env = "gnu")]
288    TtlPropagate = libc::RTA_TTL_PROPAGATE,
289}
290
291/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
292/// `rta_type`.
293/// Values specify queuing discipline attributes. Used with
294/// [`Tcmsg`][crate::rtnl::Tcmsg].
295#[neli_enum(serialized_type = "libc::c_ushort")]
296pub enum Tca {
297    Unspec = libc::TCA_UNSPEC,
298    Kind = libc::TCA_KIND,
299    Options = libc::TCA_OPTIONS,
300    Stats = libc::TCA_STATS,
301    Xstats = libc::TCA_XSTATS,
302    Rate = libc::TCA_RATE,
303    Fcnt = libc::TCA_FCNT,
304    Stats2 = libc::TCA_STATS2,
305    Stab = libc::TCA_STAB,
306}
307
308/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
309/// `rta_type`.
310/// Values specify neighbor table attributes
311#[neli_enum(serialized_type = "libc::c_ushort")]
312pub enum Nda {
313    Unspec = libc::NDA_UNSPEC,
314    Dst = libc::NDA_DST,
315    Lladdr = libc::NDA_LLADDR,
316    Cacheinfo = libc::NDA_CACHEINFO,
317    Probes = libc::NDA_PROBES,
318    Vlan = libc::NDA_VLAN,
319    Port = libc::NDA_PORT,
320    Vni = libc::NDA_VNI,
321    Ifindex = libc::NDA_IFINDEX,
322    #[cfg(target_env = "gnu")]
323    Master = libc::NDA_MASTER,
324    #[cfg(target_env = "gnu")]
325    LinkNetnsid = libc::NDA_LINK_NETNSID,
326    #[cfg(target_env = "gnu")]
327    SrcVni = libc::NDA_SRC_VNI,
328}
329
330/// Interface types
331#[neli_enum(serialized_type = "libc::c_ushort")]
332pub enum Arphrd {
333    Netrom = libc::ARPHRD_NETROM,
334    Ether = libc::ARPHRD_ETHER,
335    Eether = libc::ARPHRD_EETHER,
336    AX25 = libc::ARPHRD_AX25,
337    Pronet = libc::ARPHRD_PRONET,
338    Chaos = libc::ARPHRD_CHAOS,
339    Ieee802 = libc::ARPHRD_IEEE802,
340    Arcnet = libc::ARPHRD_ARCNET,
341    Appletlk = libc::ARPHRD_APPLETLK,
342    Dlci = libc::ARPHRD_DLCI,
343    Atm = libc::ARPHRD_APPLETLK,
344    Metricom = libc::ARPHRD_METRICOM,
345    Ieee1394 = libc::ARPHRD_IEEE1394,
346    Eui64 = libc::ARPHRD_EUI64,
347    Infiniband = libc::ARPHRD_INFINIBAND,
348
349    Loopback = libc::ARPHRD_LOOPBACK,
350
351    // Possibly more types here - need to look into ARP more
352    Void = libc::ARPHRD_VOID,
353    None = libc::ARPHRD_NONE,
354}
355
356/// Values for `ifi_flags` in
357/// [`Ifinfomsg`][crate::rtnl::Ifinfomsg].
358#[neli_enum(serialized_type = "libc::c_uint")]
359pub enum Iff {
360    Up = libc::IFF_UP as libc::c_uint,
361    Broadcast = libc::IFF_BROADCAST as libc::c_uint,
362    Debug = libc::IFF_DEBUG as libc::c_uint,
363    Loopback = libc::IFF_LOOPBACK as libc::c_uint,
364    Pointopoint = libc::IFF_POINTOPOINT as libc::c_uint,
365    Running = libc::IFF_RUNNING as libc::c_uint,
366    Noarp = libc::IFF_NOARP as libc::c_uint,
367    Promisc = libc::IFF_PROMISC as libc::c_uint,
368    Notrailers = libc::IFF_NOTRAILERS as libc::c_uint,
369    Allmulti = libc::IFF_ALLMULTI as libc::c_uint,
370    Master = libc::IFF_MASTER as libc::c_uint,
371    Slave = libc::IFF_SLAVE as libc::c_uint,
372    Multicast = libc::IFF_MULTICAST as libc::c_uint,
373    Portsel = libc::IFF_PORTSEL as libc::c_uint,
374    Automedia = libc::IFF_AUTOMEDIA as libc::c_uint,
375    Dynamic = libc::IFF_DYNAMIC as libc::c_uint,
376    LowerUp = libc::IFF_LOWER_UP as libc::c_uint,
377    Dormant = libc::IFF_DORMANT as libc::c_uint,
378    Echo = libc::IFF_ECHO as libc::c_uint,
379    // Possibly more types here - need to look into private flags for interfaces
380}
381
382impl_flags!(
383    #[allow(missing_docs)]
384    pub IffFlags, Iff, libc::c_uint
385);
386
387impl_flags!(
388    #[allow(missing_docs)]
389    pub IfaFFlags, IfaF, libc::c_uchar
390);
391
392impl_flags!(
393    #[allow(missing_docs)]
394    pub RtmFFlags, RtmF, libc::c_uint
395);
396impl_flags!(
397    #[allow(missing_docs)]
398    pub NudFlags, Nud, u16
399);
400impl_flags!(
401    #[allow(missing_docs)]
402    pub NtfFlags, Ntf, u8
403);
404
405/// rtnetlink-related values for `nl_type` in
406/// [`Nlmsghdr`][crate::nl::Nlmsghdr].
407#[neli_enum(serialized_type = "u16")]
408pub enum Rtm {
409    Newlink = libc::RTM_NEWLINK,
410    Dellink = libc::RTM_DELLINK,
411    Getlink = libc::RTM_GETLINK,
412    Setlink = libc::RTM_SETLINK,
413    Newaddr = libc::RTM_NEWADDR,
414    Deladdr = libc::RTM_DELADDR,
415    Getaddr = libc::RTM_GETADDR,
416    Newroute = libc::RTM_NEWROUTE,
417    Delroute = libc::RTM_DELROUTE,
418    Getroute = libc::RTM_GETROUTE,
419    Newneigh = libc::RTM_NEWNEIGH,
420    Delneigh = libc::RTM_DELNEIGH,
421    Getneigh = libc::RTM_GETNEIGH,
422    Newrule = libc::RTM_NEWRULE,
423    Delrule = libc::RTM_DELRULE,
424    Getrule = libc::RTM_GETRULE,
425    Newqdisc = libc::RTM_NEWQDISC,
426    Delqdisc = libc::RTM_DELQDISC,
427    Getqdisc = libc::RTM_GETQDISC,
428    Newtclass = libc::RTM_NEWTCLASS,
429    Deltclass = libc::RTM_DELTCLASS,
430    Gettclass = libc::RTM_GETTCLASS,
431    Newtfilter = libc::RTM_NEWTFILTER,
432    Deltfilter = libc::RTM_DELTFILTER,
433    Gettfilter = libc::RTM_GETTFILTER,
434    Newaction = libc::RTM_NEWACTION,
435    Delaction = libc::RTM_DELACTION,
436    Getaction = libc::RTM_GETACTION,
437    Newprefix = libc::RTM_NEWPREFIX,
438    Getmulticast = libc::RTM_GETMULTICAST,
439    Getanycast = libc::RTM_GETANYCAST,
440    Newneightbl = libc::RTM_NEWNEIGHTBL,
441    Getneightbl = libc::RTM_GETNEIGHTBL,
442    Setneightbl = libc::RTM_SETNEIGHTBL,
443    Newnduseropt = libc::RTM_NEWNDUSEROPT,
444    Newaddrlabel = libc::RTM_NEWADDRLABEL,
445    Deladdrlabel = libc::RTM_DELADDRLABEL,
446    Getaddrlabel = libc::RTM_GETADDRLABEL,
447    Getdcb = libc::RTM_GETDCB,
448    Setdcb = libc::RTM_SETDCB,
449    Newnetconf = libc::RTM_NEWNETCONF,
450    Getnetconf = libc::RTM_GETNETCONF,
451    Newmdb = libc::RTM_NEWMDB,
452    Delmdb = libc::RTM_DELMDB,
453    Getmdb = libc::RTM_GETMDB,
454    Newnsid = libc::RTM_NEWNSID,
455    Delnsid = libc::RTM_DELNSID,
456    Getnsid = libc::RTM_GETNSID,
457}