Skip to main content

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    IflaVlan,
95    IflaVlanQos,
96);
97
98/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
99/// `rta_type`.
100/// Values are interface information message attributes. Used with
101/// [`Ifinfomsg`][crate::rtnl::Ifinfomsg].
102#[neli_enum(serialized_type = "libc::c_ushort")]
103pub enum Ifla {
104    Unspec = libc::IFLA_UNSPEC,
105    Address = libc::IFLA_ADDRESS,
106    Broadcast = libc::IFLA_BROADCAST,
107    Ifname = libc::IFLA_IFNAME,
108    Mtu = libc::IFLA_MTU,
109    Link = libc::IFLA_LINK,
110    Qdisc = libc::IFLA_QDISC,
111    Stats = libc::IFLA_STATS,
112    Cost = libc::IFLA_COST,
113    Priority = libc::IFLA_PRIORITY,
114    Master = libc::IFLA_MASTER,
115    Wireless = libc::IFLA_WIRELESS,
116    Protinfo = libc::IFLA_PROTINFO,
117    Txqlen = libc::IFLA_TXQLEN,
118    Map = libc::IFLA_MAP,
119    Weight = libc::IFLA_WEIGHT,
120    Operstate = libc::IFLA_OPERSTATE,
121    Linkmode = libc::IFLA_LINKMODE,
122    Linkinfo = libc::IFLA_LINKINFO,
123    NetNsPid = libc::IFLA_NET_NS_PID,
124    Ifalias = libc::IFLA_IFALIAS,
125    NumVf = libc::IFLA_NUM_VF,
126    VfinfoList = libc::IFLA_VFINFO_LIST,
127    Stats64 = libc::IFLA_STATS64,
128    VfPorts = libc::IFLA_VF_PORTS,
129    PortSelf = libc::IFLA_PORT_SELF,
130    AfSpec = libc::IFLA_AF_SPEC,
131    Group = libc::IFLA_GROUP,
132    NetNsFd = libc::IFLA_NET_NS_FD,
133    ExtMask = libc::IFLA_EXT_MASK,
134    Promiscuity = libc::IFLA_PROMISCUITY,
135    NumTxQueues = libc::IFLA_NUM_TX_QUEUES,
136    NumRxQueues = libc::IFLA_NUM_RX_QUEUES,
137    Carrier = libc::IFLA_CARRIER,
138    PhysPortId = libc::IFLA_PHYS_PORT_ID,
139    CarrierChanges = libc::IFLA_CARRIER_CHANGES,
140    PhysSwitchId = libc::IFLA_PHYS_SWITCH_ID,
141    LinkNetnsid = libc::IFLA_LINK_NETNSID,
142    PhysPortName = libc::IFLA_PHYS_PORT_NAME,
143    ProtoDown = libc::IFLA_PROTO_DOWN,
144    GsoMaxSegs = libc::IFLA_GSO_MAX_SEGS,
145    GsoMaxSize = libc::IFLA_GSO_MAX_SIZE,
146    Pad = libc::IFLA_PAD,
147    Xdp = libc::IFLA_XDP,
148    Event = libc::IFLA_EVENT,
149    NewNetnsid = libc::IFLA_NEW_NETNSID,
150    IfNetnsid = libc::IFLA_IF_NETNSID,
151    CarrierUpCount = libc::IFLA_CARRIER_UP_COUNT,
152    CarrierDownCount = libc::IFLA_CARRIER_DOWN_COUNT,
153    NewIfindex = libc::IFLA_NEW_IFINDEX,
154    MinMtu = libc::IFLA_MIN_MTU,
155    MaxMtu = libc::IFLA_MAX_MTU,
156    PropList = libc::IFLA_PROP_LIST,
157    AltIfname = libc::IFLA_ALT_IFNAME,
158    PermAddress = libc::IFLA_PERM_ADDRESS,
159    ProtoDownReason = libc::IFLA_PROTO_DOWN_REASON,
160}
161
162/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
163/// `rta_type`.
164/// Values are nested attributes to IFLA_LINKMODE.
165#[neli_enum(serialized_type = "libc::c_ushort")]
166pub enum IflaInfo {
167    Unspec = libc::IFLA_INFO_UNSPEC,
168    Kind = libc::IFLA_INFO_KIND,
169    Data = libc::IFLA_INFO_DATA,
170    Xstats = libc::IFLA_INFO_XSTATS,
171    SlaveKind = libc::IFLA_INFO_SLAVE_KIND,
172    SlaveData = libc::IFLA_INFO_SLAVE_DATA,
173}
174
175/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
176/// `rta_type`.
177/// Values are interface information message attributes. Used with
178/// [`Ifinfomsg`][crate::rtnl::Ifinfomsg].
179#[neli_enum(serialized_type = "libc::c_ushort")]
180pub enum IflaVlan {
181    Unspec = 0,
182    Id = 1,
183    Flags = 2,
184    EgressQos = 3,
185    IngressQos = 4,
186    Protocol = 5,
187}
188
189/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
190/// `rta_type`.
191/// Values are interface information message attributes. Used with
192/// [`Ifinfomsg`][crate::rtnl::Ifinfomsg].
193#[neli_enum(serialized_type = "libc::c_ushort")]
194pub enum IflaVlanQos {
195    Unspec = 0,
196    Mapping = 1,
197}
198
199/// rtnetlink-related values for `nl_type` in
200/// [`Nlmsghdr`][crate::nl::Nlmsghdr].
201#[neli_enum(serialized_type = "u16")]
202#[allow(missing_docs)]
203pub enum Rtm {
204    Newlink = libc::RTM_NEWLINK,
205    Dellink = libc::RTM_DELLINK,
206    Getlink = libc::RTM_GETLINK,
207    Setlink = libc::RTM_SETLINK,
208    Newaddr = libc::RTM_NEWADDR,
209    Deladdr = libc::RTM_DELADDR,
210    Getaddr = libc::RTM_GETADDR,
211    Newroute = libc::RTM_NEWROUTE,
212    Delroute = libc::RTM_DELROUTE,
213    Getroute = libc::RTM_GETROUTE,
214    Newneigh = libc::RTM_NEWNEIGH,
215    Delneigh = libc::RTM_DELNEIGH,
216    Getneigh = libc::RTM_GETNEIGH,
217    Newrule = libc::RTM_NEWRULE,
218    Delrule = libc::RTM_DELRULE,
219    Getrule = libc::RTM_GETRULE,
220    Newqdisc = libc::RTM_NEWQDISC,
221    Delqdisc = libc::RTM_DELQDISC,
222    Getqdisc = libc::RTM_GETQDISC,
223    Newtclass = libc::RTM_NEWTCLASS,
224    Deltclass = libc::RTM_DELTCLASS,
225    Gettclass = libc::RTM_GETTCLASS,
226    Newtfilter = libc::RTM_NEWTFILTER,
227    Deltfilter = libc::RTM_DELTFILTER,
228    Gettfilter = libc::RTM_GETTFILTER,
229    Newaction = libc::RTM_NEWACTION,
230    Delaction = libc::RTM_DELACTION,
231    Getaction = libc::RTM_GETACTION,
232    Newprefix = libc::RTM_NEWPREFIX,
233    Getmulticast = libc::RTM_GETMULTICAST,
234    Getanycast = libc::RTM_GETANYCAST,
235    Newneightbl = libc::RTM_NEWNEIGHTBL,
236    Getneightbl = libc::RTM_GETNEIGHTBL,
237    Setneightbl = libc::RTM_SETNEIGHTBL,
238    Newnduseropt = libc::RTM_NEWNDUSEROPT,
239    Newaddrlabel = libc::RTM_NEWADDRLABEL,
240    Deladdrlabel = libc::RTM_DELADDRLABEL,
241    Getaddrlabel = libc::RTM_GETADDRLABEL,
242    Getdcb = libc::RTM_GETDCB,
243    Setdcb = libc::RTM_SETDCB,
244    Newnetconf = libc::RTM_NEWNETCONF,
245    Getnetconf = libc::RTM_GETNETCONF,
246    Newmdb = libc::RTM_NEWMDB,
247    Delmdb = libc::RTM_DELMDB,
248    Getmdb = libc::RTM_GETMDB,
249    Newnsid = libc::RTM_NEWNSID,
250    Delnsid = libc::RTM_DELNSID,
251    Getnsid = libc::RTM_GETNSID,
252}
253
254/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
255/// `rta_type`.
256/// Values are routing message attributes. Used with
257/// [`Rtmsg`][crate::rtnl::Rtmsg].
258#[neli_enum(serialized_type = "libc::c_ushort")]
259pub enum Rta {
260    Unspec = libc::RTA_UNSPEC,
261    Dst = libc::RTA_DST,
262    Src = libc::RTA_SRC,
263    Iif = libc::RTA_IIF,
264    Oif = libc::RTA_OIF,
265    Gateway = libc::RTA_GATEWAY,
266    Priority = libc::RTA_PRIORITY,
267    Prefsrc = libc::RTA_PREFSRC,
268    Metrics = libc::RTA_METRICS,
269    Multipath = libc::RTA_MULTIPATH,
270    Protoinfo = libc::RTA_PROTOINFO, // no longer used in Linux
271    Flow = libc::RTA_FLOW,
272    Cacheinfo = libc::RTA_CACHEINFO,
273    Session = libc::RTA_SESSION, // no longer used in Linux
274    MpAlgo = libc::RTA_MP_ALGO,  // no longer used in Linux
275    Table = libc::RTA_TABLE,
276    Mark = libc::RTA_MARK,
277    MfcStats = libc::RTA_MFC_STATS,
278    #[cfg(target_env = "gnu")]
279    Via = libc::RTA_VIA,
280    #[cfg(target_env = "gnu")]
281    Newdst = libc::RTA_NEWDST,
282    #[cfg(target_env = "gnu")]
283    Pref = libc::RTA_PREF,
284    #[cfg(target_env = "gnu")]
285    EncapType = libc::RTA_ENCAP_TYPE,
286    #[cfg(target_env = "gnu")]
287    Encap = libc::RTA_ENCAP,
288    #[cfg(target_env = "gnu")]
289    Expires = libc::RTA_EXPIRES,
290    #[cfg(target_env = "gnu")]
291    Pad = libc::RTA_PAD,
292    #[cfg(target_env = "gnu")]
293    Uid = libc::RTA_UID,
294    #[cfg(target_env = "gnu")]
295    TtlPropagate = libc::RTA_TTL_PROPAGATE,
296}
297
298/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
299/// `rta_type`.
300/// Values specify queuing discipline attributes. Used with
301/// [`Tcmsg`][crate::rtnl::Tcmsg].
302#[neli_enum(serialized_type = "libc::c_ushort")]
303pub enum Tca {
304    Unspec = libc::TCA_UNSPEC,
305    Kind = libc::TCA_KIND,
306    Options = libc::TCA_OPTIONS,
307    Stats = libc::TCA_STATS,
308    Xstats = libc::TCA_XSTATS,
309    Rate = libc::TCA_RATE,
310    Fcnt = libc::TCA_FCNT,
311    Stats2 = libc::TCA_STATS2,
312    Stab = libc::TCA_STAB,
313}
314
315/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
316/// `rta_type`.
317/// Values specify neighbor table attributes
318#[neli_enum(serialized_type = "libc::c_ushort")]
319pub enum Nda {
320    Unspec = libc::NDA_UNSPEC,
321    Dst = libc::NDA_DST,
322    Lladdr = libc::NDA_LLADDR,
323    Cacheinfo = libc::NDA_CACHEINFO,
324    Probes = libc::NDA_PROBES,
325    Vlan = libc::NDA_VLAN,
326    Port = libc::NDA_PORT,
327    Vni = libc::NDA_VNI,
328    Ifindex = libc::NDA_IFINDEX,
329    #[cfg(target_env = "gnu")]
330    Master = libc::NDA_MASTER,
331    #[cfg(target_env = "gnu")]
332    LinkNetnsid = libc::NDA_LINK_NETNSID,
333    #[cfg(target_env = "gnu")]
334    SrcVni = libc::NDA_SRC_VNI,
335}
336
337/// Interface types
338#[neli_enum(serialized_type = "libc::c_ushort")]
339pub enum Arphrd {
340    Netrom = libc::ARPHRD_NETROM,
341    Ether = libc::ARPHRD_ETHER,
342    Eether = libc::ARPHRD_EETHER,
343    AX25 = libc::ARPHRD_AX25,
344    Pronet = libc::ARPHRD_PRONET,
345    Chaos = libc::ARPHRD_CHAOS,
346    Ieee802 = libc::ARPHRD_IEEE802,
347    Arcnet = libc::ARPHRD_ARCNET,
348    Appletlk = libc::ARPHRD_APPLETLK,
349    Dlci = libc::ARPHRD_DLCI,
350    Atm = libc::ARPHRD_APPLETLK,
351    Metricom = libc::ARPHRD_METRICOM,
352    Ieee1394 = libc::ARPHRD_IEEE1394,
353    Eui64 = libc::ARPHRD_EUI64,
354    Infiniband = libc::ARPHRD_INFINIBAND,
355
356    Loopback = libc::ARPHRD_LOOPBACK,
357
358    // Possibly more types here - need to look into ARP more
359    Void = libc::ARPHRD_VOID,
360    None = libc::ARPHRD_NONE,
361}
362
363/// Enum usable with [`Rtattr`][crate::rtnl::Rtattr] field,
364/// `rta_type`.
365/// Values are interface address message attributes. Used with
366/// [`Ifaddrmsg`][crate::rtnl::Ifaddrmsg].
367#[allow(missing_docs)]
368#[neli_enum(serialized_type = "u16")]
369pub enum Ifa {
370    Unspec = libc::IFA_UNSPEC,
371    Address = libc::IFA_ADDRESS,
372    Local = libc::IFA_LOCAL,
373    Label = libc::IFA_LABEL,
374    Broadcast = libc::IFA_BROADCAST,
375    Anycast = libc::IFA_ANYCAST,
376    Cacheinfo = libc::IFA_CACHEINFO,
377    Multicast = libc::IFA_MULTICAST,
378    Flags = libc::IFA_FLAGS,
379}
380
381impl_flags!(
382    /// Values for `ifi_flags` in
383    /// [`Ifinfomsg`][crate::rtnl::Ifinfomsg].
384    pub Iff: libc::c_uint {
385        UP = libc::IFF_UP as libc::c_uint,
386        BROADCAST = libc::IFF_BROADCAST as libc::c_uint,
387        DEBUG = libc::IFF_DEBUG as libc::c_uint,
388        LOOPBACK = libc::IFF_LOOPBACK as libc::c_uint,
389        POINTOPOINT = libc::IFF_POINTOPOINT as libc::c_uint,
390        RUNNING = libc::IFF_RUNNING as libc::c_uint,
391        NOARP = libc::IFF_NOARP as libc::c_uint,
392        PROMISC = libc::IFF_PROMISC as libc::c_uint,
393        NOTRAILERS = libc::IFF_NOTRAILERS as libc::c_uint,
394        ALLMULTI = libc::IFF_ALLMULTI as libc::c_uint,
395        MASTER = libc::IFF_MASTER as libc::c_uint,
396        SLAVE = libc::IFF_SLAVE as libc::c_uint,
397        MULTICAST = libc::IFF_MULTICAST as libc::c_uint,
398        PORTSEL = libc::IFF_PORTSEL as libc::c_uint,
399        AUTOMEDIA = libc::IFF_AUTOMEDIA as libc::c_uint,
400        DYNAMIC = libc::IFF_DYNAMIC as libc::c_uint,
401        LOWERUP = libc::IFF_LOWER_UP as libc::c_uint,
402        DORMANT = libc::IFF_DORMANT as libc::c_uint,
403        ECHO = libc::IFF_ECHO as libc::c_uint,
404        // Possibly more types here - need to look into private flags for interfaces
405    }
406);
407
408impl_flags!(
409    /// Interface address flags
410    pub IfaF: u8 {
411        SECONDARY = libc::IFA_F_SECONDARY as u8,
412        TEMPORARY = libc::IFA_F_TEMPORARY as u8,
413        NODAD = libc::IFA_F_NODAD as u8,
414        OPTIMISTIC = libc::IFA_F_OPTIMISTIC as u8,
415        DADFAILED = libc::IFA_F_DADFAILED as u8,
416        HOMEADDRESS = libc::IFA_F_HOMEADDRESS as u8,
417        DEPRECATED = libc::IFA_F_DEPRECATED as u8,
418        TENTATIVE = libc::IFA_F_TENTATIVE as u8,
419        PERMANENT = libc::IFA_F_PERMANENT as u8,
420    }
421);
422
423impl_flags!(
424    /// `rtm_flags`
425    /// Flags for rtnetlink messages
426    pub RtmF: libc::c_uint {
427        NOTIFY = libc::RTM_F_NOTIFY,
428        CLONED = libc::RTM_F_CLONED,
429        EQUALIZE = libc::RTM_F_EQUALIZE,
430        PREFIX = libc::RTM_F_PREFIX,
431
432        #[cfg(target_env = "gnu")]
433        LOOKUPTABLE = libc::RTM_F_LOOKUP_TABLE,
434        #[cfg(target_env = "gnu")]
435        FIBMATCH = libc::RTM_F_FIB_MATCH,
436    }
437);
438
439impl_flags!(
440    /// Arp neighbor cache entry states
441    #[allow(missing_docs)]
442    pub Nud: u16 {
443        NONE = libc::NUD_NONE,
444        INCOMPLETE = libc::NUD_INCOMPLETE,
445        REACHABLE = libc::NUD_REACHABLE,
446        STALE = libc::NUD_STALE,
447        DELAY = libc::NUD_DELAY,
448        PROBE = libc::NUD_PROBE,
449        FAILED = libc::NUD_FAILED,
450        NOARP = libc::NUD_NOARP,
451        PERMANENT = libc::NUD_PERMANENT,
452    }
453);
454
455impl_flags!(
456    /// Arp neighbor cache entry flags
457    #[allow(missing_docs)]
458    pub Ntf: u8 {
459        USE = libc::NTF_USE,
460        SELF = libc::NTF_SELF,
461        MASTER = libc::NTF_MASTER,
462        PROXY = libc::NTF_PROXY,
463        #[cfg(target_env = "gnu")]
464        EXT_LEARNED = libc::NTF_EXT_LEARNED,
465        #[cfg(target_env = "gnu")]
466        OFFLOADED = libc::NTF_OFFLOADED,
467        ROUTER = libc::NTF_ROUTER,
468    }
469);
470
471impl_flags!(
472    /// Vlan flags
473    #[allow(missing_docs)]
474    pub VlanFlags: u8 {
475        REORDER_HDR = 0x1,
476        GVRP = 0x2,
477        LOOSE_BINDING = 0x4,
478        MVRP = 0x8,
479        BRIDGE_BINDING = 0x10,
480    }
481);