neli/consts/
rtnl.rs

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