netlink_packet_route/rtnl/
constants.rs

1// SPDX-License-Identifier: MIT
2
3pub use netlink_packet_core::constants::*;
4
5pub const RTM_BASE: u16 = 16;
6pub const RTM_NEWLINK: u16 = 16;
7pub const RTM_DELLINK: u16 = 17;
8pub const RTM_GETLINK: u16 = 18;
9pub const RTM_SETLINK: u16 = 19;
10pub const RTM_NEWADDR: u16 = 20;
11pub const RTM_DELADDR: u16 = 21;
12pub const RTM_GETADDR: u16 = 22;
13pub const RTM_NEWROUTE: u16 = 24;
14pub const RTM_DELROUTE: u16 = 25;
15pub const RTM_GETROUTE: u16 = 26;
16pub const RTM_NEWNEIGH: u16 = 28;
17pub const RTM_DELNEIGH: u16 = 29;
18pub const RTM_GETNEIGH: u16 = 30;
19pub const RTM_NEWRULE: u16 = 32;
20pub const RTM_DELRULE: u16 = 33;
21pub const RTM_GETRULE: u16 = 34;
22pub const RTM_NEWQDISC: u16 = 36;
23pub const RTM_DELQDISC: u16 = 37;
24pub const RTM_GETQDISC: u16 = 38;
25pub const RTM_NEWTCLASS: u16 = 40;
26pub const RTM_DELTCLASS: u16 = 41;
27pub const RTM_GETTCLASS: u16 = 42;
28pub const RTM_NEWTFILTER: u16 = 44;
29pub const RTM_DELTFILTER: u16 = 45;
30pub const RTM_GETTFILTER: u16 = 46;
31pub const RTM_NEWACTION: u16 = 48;
32pub const RTM_DELACTION: u16 = 49;
33pub const RTM_GETACTION: u16 = 50;
34pub const RTM_NEWPREFIX: u16 = 52;
35pub const RTM_GETMULTICAST: u16 = 58;
36pub const RTM_GETANYCAST: u16 = 62;
37pub const RTM_NEWNEIGHTBL: u16 = 64;
38pub const RTM_GETNEIGHTBL: u16 = 66;
39pub const RTM_SETNEIGHTBL: u16 = 67;
40pub const RTM_NEWNDUSEROPT: u16 = 68;
41pub const RTM_NEWADDRLABEL: u16 = 72;
42pub const RTM_DELADDRLABEL: u16 = 73;
43pub const RTM_GETADDRLABEL: u16 = 74;
44pub const RTM_GETDCB: u16 = 78;
45pub const RTM_SETDCB: u16 = 79;
46pub const RTM_NEWNETCONF: u16 = 80;
47pub const RTM_DELNETCONF: u16 = 81;
48pub const RTM_GETNETCONF: u16 = 82;
49pub const RTM_NEWMDB: u16 = 84;
50pub const RTM_DELMDB: u16 = 85;
51pub const RTM_GETMDB: u16 = 86;
52pub const RTM_NEWNSID: u16 = 88;
53pub const RTM_DELNSID: u16 = 89;
54pub const RTM_GETNSID: u16 = 90;
55pub const RTM_NEWSTATS: u16 = 92;
56pub const RTM_GETSTATS: u16 = 94;
57pub const RTM_NEWCACHEREPORT: u16 = 96;
58pub const RTM_NEWCHAIN: u16 = 100;
59pub const RTM_DELCHAIN: u16 = 101;
60pub const RTM_GETCHAIN: u16 = 102;
61pub const RTM_NEWLINKPROP: u16 = 108;
62pub const RTM_DELLINKPROP: u16 = 109;
63
64/// Unknown route
65pub const RTN_UNSPEC: u8 = 0;
66/// A gateway or direct route
67pub const RTN_UNICAST: u8 = 1;
68/// A local interface route
69pub const RTN_LOCAL: u8 = 2;
70/// A local broadcast route (sent as a broadcast)
71pub const RTN_BROADCAST: u8 = 3;
72/// A local broadcast route (sent as a unicast)
73pub const RTN_ANYCAST: u8 = 4;
74/// A multicast route
75pub const RTN_MULTICAST: u8 = 5;
76/// A packet dropping route
77pub const RTN_BLACKHOLE: u8 = 6;
78/// An unreachable destination
79pub const RTN_UNREACHABLE: u8 = 7;
80/// A packet rejection route
81pub const RTN_PROHIBIT: u8 = 8;
82/// Continue routing lookup in another table
83pub const RTN_THROW: u8 = 9;
84/// A network address translation rule
85pub const RTN_NAT: u8 = 10;
86/// Refer to an external resolver (not implemented)
87pub const RTN_XRESOLVE: u8 = 11;
88
89/// Unknown
90pub const RTPROT_UNSPEC: u8 = 0;
91/// Route was learnt by an ICMP redirect
92pub const RTPROT_REDIRECT: u8 = 1;
93/// Route was learnt by the kernel
94pub const RTPROT_KERNEL: u8 = 2;
95/// Route was learnt during boot
96pub const RTPROT_BOOT: u8 = 3;
97/// Route was set statically
98pub const RTPROT_STATIC: u8 = 4;
99pub const RTPROT_GATED: u8 = 8;
100pub const RTPROT_RA: u8 = 9;
101pub const RTPROT_MRT: u8 = 10;
102pub const RTPROT_ZEBRA: u8 = 11;
103pub const RTPROT_BIRD: u8 = 12;
104pub const RTPROT_DNROUTED: u8 = 13;
105pub const RTPROT_XORP: u8 = 14;
106pub const RTPROT_NTK: u8 = 15;
107pub const RTPROT_DHCP: u8 = 16;
108pub const RTPROT_MROUTED: u8 = 17;
109pub const RTPROT_BABEL: u8 = 42;
110
111/// The destination is globally valid.
112pub const RT_SCOPE_UNIVERSE: u8 = 0;
113/// (IPv6 only) the destination is site local, i.e. it is valid inside this site.  This is for interior
114/// routes in the local autonomous system
115pub const RT_SCOPE_SITE: u8 = 200;
116/// The destination is link local
117pub const RT_SCOPE_LINK: u8 = 253;
118/// The destination is valid only on this host
119pub const RT_SCOPE_HOST: u8 = 254;
120/// Destination doesn't exist
121pub const RT_SCOPE_NOWHERE: u8 = 255;
122
123/// An unspecified routing table
124pub const RT_TABLE_UNSPEC: u8 = 0;
125
126/// A route table introduced for compatibility with old software which do not support table IDs
127/// greater than 255. See commit `709772e6e065` in the kernel:
128///
129/// ```no_rust
130/// commit 709772e6e06564ed94ba740de70185ac3d792773
131/// Author: Krzysztof Piotr Oledzki <ole@ans.pl>
132/// Date:   Tue Jun 10 15:44:49 2008 -0700
133///
134///     net: Fix routing tables with id > 255 for legacy software
135///
136///     Most legacy software do not like tables > 255 as rtm_table is u8
137///     so tb_id is sent &0xff and it is possible to mismatch for example
138///     table 510 with table 254 (main).
139///
140///     This patch introduces RT_TABLE_COMPAT=252 so the code uses it if
141///     tb_id > 255. It makes such old applications happy, new
142///     ones are still able to use RTA_TABLE to get a proper table id.
143///
144///     Signed-off-by: Krzysztof Piotr Oledzki <ole@ans.pl>
145///     Acked-by: Patrick McHardy <kaber@trash.net>
146///     Signed-off-by: David S. Miller <davem@davemloft.net>
147/// ```
148pub const RT_TABLE_COMPAT: u8 = 252;
149
150/// The default routing table.
151///
152/// The default table is empty and has little use. It has been kept when the current incarnation of
153/// advanced routing has been introduced in Linux 2.1.68 after a first tentative using "classes" in
154/// Linux 2.1.15.
155/// # Source
156///
157/// This documentation is taken from [Vincent Bernat's excellent
158/// blog](https://vincent.bernat.ch/en/blog/2017-ipv4-route-lookup-linux#builtin-tables)
159pub const RT_TABLE_DEFAULT: u8 = 253;
160
161/// The main routing table.
162///
163/// By default, apart from the local ones which are added to the local table, routes that are added
164/// to this table.
165pub const RT_TABLE_MAIN: u8 = 254;
166
167/// The local table.
168///
169/// This table is populated automatically by the kernel when addresses are configured.
170///
171/// On a machine that has `192.168.44.211/24` configured on `wlp58s0`, `iproute2` shows the following routes in the local table:
172///
173/// ```no_rust
174/// $ ip route show table local
175///
176/// broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
177/// local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
178/// local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
179/// broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
180///
181/// broadcast 192.168.44.0 dev wlp58s0 proto kernel scope link src 192.168.44.211
182/// local 192.168.44.211 dev wlp58s0 proto kernel scope host src 192.168.44.211
183/// broadcast 192.168.44.255 dev wlp58s0 proto kernel scope link src 192.168.44.211
184/// ```
185///
186/// When the IP address `192.168.44.211` was configured on the `wlp58s0` interface, the kernel
187/// automatically added the appropriate routes:
188///
189/// - a route for `192.168.44.211` for local unicast delivery to the IP address
190/// - a route for `192.168.44.255` for broadcast delivery to the broadcast address
191/// - a route for `192.168.44.0` for broadcast delivery to the network address
192///
193/// When `127.0.0.1` was configured on the loopback interface, the same kind of routes were added to
194/// the local table. However, a loopback address receives a special treatment and the kernel also
195/// adds the whole subnet to the local table.
196///
197/// Note that this is similar for IPv6:
198///
199/// ```no_rust
200/// $ ip -6 route show table local
201/// local ::1 dev lo proto kernel metric 0 pref medium
202/// local fe80::7de1:4914:99b7:aa28 dev wlp58s0 proto kernel metric 0 pref medium
203/// ff00::/8 dev wlp58s0 metric 256 pref medium
204/// ```
205///
206/// # Source
207///
208/// This documentation is adapted from [Vincent Bernat's excellent
209/// blog](https://vincent.bernat.ch/en/blog/2017-ipv4-route-lookup-linux#builtin-tables)
210pub const RT_TABLE_LOCAL: u8 = 255;
211
212/// If the route changes, notify the user via rtnetlink
213pub const RTM_F_NOTIFY: u32 = 256;
214/// This route is cloned. Cloned routes are routes coming from the cache instead of the FIB. For
215/// IPv4, the cache was removed in Linux 3.6 (see [IPv4 route lookup on Linux] for more information
216/// about IPv4 routing)
217///
218/// [IPv4 route lookup on Linux]: https://vincent.bernat.ch/en/blog/2017-ipv4-route-lookup-linux
219pub const RTM_F_CLONED: u32 = 512;
220/// Multipath equalizer (not yet implemented)
221pub const RTM_F_EQUALIZE: u32 = 1024;
222/// Prefix addresses
223pub const RTM_F_PREFIX: u32 = 2048;
224/// Show the table from which the lookup result comes. Note that before commit `c36ba6603a11`, Linux
225/// would always hardcode [`RouteMessageHeader.table`] (known as `rtmsg.rtm_table` in the kernel) to
226/// `RT_TABLE_MAIN`.
227///
228/// [`RouteMessageHeader.table`]: ../struct.RouteMessageHeader.html#structfield.table
229pub const RTM_F_LOOKUP_TABLE: u32 = 4096;
230/// Return the full FIB lookup match (see commit `b61798130f1be5bff08712308126c2d7ebe390ef`)
231pub const RTM_F_FIB_MATCH: u32 = 8192;
232
233pub const AF_UNSPEC: u16 = libc::AF_UNSPEC as u16;
234pub const AF_UNIX: u16 = libc::AF_UNIX as u16;
235// pub const AF_LOCAL: u16 = libc::AF_LOCAL as u16;
236pub const AF_INET: u16 = libc::AF_INET as u16;
237pub const AF_AX25: u16 = libc::AF_AX25 as u16;
238pub const AF_IPX: u16 = libc::AF_IPX as u16;
239pub const AF_APPLETALK: u16 = libc::AF_APPLETALK as u16;
240pub const AF_NETROM: u16 = libc::AF_NETROM as u16;
241pub const AF_BRIDGE: u16 = libc::AF_BRIDGE as u16;
242pub const AF_ATMPVC: u16 = libc::AF_ATMPVC as u16;
243pub const AF_X25: u16 = libc::AF_X25 as u16;
244pub const AF_INET6: u16 = libc::AF_INET6 as u16;
245pub const AF_ROSE: u16 = libc::AF_ROSE as u16;
246pub const AF_DECNET: u16 = libc::AF_DECnet as u16;
247pub const AF_NETBEUI: u16 = libc::AF_NETBEUI as u16;
248pub const AF_SECURITY: u16 = libc::AF_SECURITY as u16;
249pub const AF_KEY: u16 = libc::AF_KEY as u16;
250pub const AF_NETLINK: u16 = libc::AF_NETLINK as u16;
251// pub const AF_ROUTE: u16 = libc::AF_ROUTE as u16;
252pub const AF_PACKET: u16 = libc::AF_PACKET as u16;
253pub const AF_ASH: u16 = libc::AF_ASH as u16;
254pub const AF_ECONET: u16 = libc::AF_ECONET as u16;
255pub const AF_ATMSVC: u16 = libc::AF_ATMSVC as u16;
256pub const AF_RDS: u16 = libc::AF_RDS as u16;
257pub const AF_SNA: u16 = libc::AF_SNA as u16;
258pub const AF_IRDA: u16 = libc::AF_IRDA as u16;
259pub const AF_PPPOX: u16 = libc::AF_PPPOX as u16;
260pub const AF_WANPIPE: u16 = libc::AF_WANPIPE as u16;
261pub const AF_LLC: u16 = libc::AF_LLC as u16;
262pub const AF_CAN: u16 = libc::AF_CAN as u16;
263pub const AF_TIPC: u16 = libc::AF_TIPC as u16;
264pub const AF_BLUETOOTH: u16 = libc::AF_BLUETOOTH as u16;
265pub const AF_IUCV: u16 = libc::AF_IUCV as u16;
266pub const AF_RXRPC: u16 = libc::AF_RXRPC as u16;
267pub const AF_ISDN: u16 = libc::AF_ISDN as u16;
268pub const AF_PHONET: u16 = libc::AF_PHONET as u16;
269pub const AF_IEEE802154: u16 = libc::AF_IEEE802154 as u16;
270pub const AF_CAIF: u16 = libc::AF_CAIF as u16;
271pub const AF_ALG: u16 = libc::AF_ALG as u16;
272
273pub const NETNSA_NONE: u16 = 0;
274pub const NETNSA_NSID: u16 = 1;
275pub const NETNSA_PID: u16 = 2;
276pub const NETNSA_FD: u16 = 3;
277pub const NETNSA_NSID_NOT_ASSIGNED: i32 = -1;
278
279/// Neighbour cache entry state: the neighbour has not (yet) been resolved
280pub const NUD_INCOMPLETE: u16 = 1;
281/// Neighbour cache entry state: the neighbour entry is valid until its lifetime expires
282pub const NUD_REACHABLE: u16 = 2;
283/// Neighbour cache entry state: the neighbour entry is valid but suspicious
284pub const NUD_STALE: u16 = 4;
285/// Neighbour cache entry state: the validation of this entry is currently delayed
286pub const NUD_DELAY: u16 = 8;
287/// Neighbour cache entry state: the neighbour entry is being probed
288pub const NUD_PROBE: u16 = 16;
289/// Neighbour cache entry state: the validation of this entry has failed
290pub const NUD_FAILED: u16 = 32;
291/// Neighbour cache entry state: entry is valid and the kernel will not try to validate or refresh
292/// it.
293pub const NUD_NOARP: u16 = 64;
294/// Neighbour cache entry state: entry is valid forever and can only be removed explicitly from
295/// userspace.
296pub const NUD_PERMANENT: u16 = 128;
297/// Neighbour cache entry state: pseudo state for fresh entries or before deleting entries
298pub const NUD_NONE: u16 = 0;
299
300// Neighbour cache entry flags
301pub const NTF_USE: u8 = 1;
302pub const NTF_SELF: u8 = 2;
303pub const NTF_MASTER: u8 = 4;
304pub const NTF_PROXY: u8 = 8;
305pub const NTF_EXT_LEARNED: u8 = 16;
306pub const NTF_OFFLOADED: u8 = 32;
307pub const NTF_ROUTER: u8 = 128;
308
309pub const TCA_UNSPEC: u16 = 0;
310pub const TCA_KIND: u16 = 1;
311pub const TCA_OPTIONS: u16 = 2;
312pub const TCA_STATS: u16 = 3;
313pub const TCA_XSTATS: u16 = 4;
314pub const TCA_RATE: u16 = 5;
315pub const TCA_FCNT: u16 = 6;
316pub const TCA_STATS2: u16 = 7;
317pub const TCA_STAB: u16 = 8;
318pub const TCA_PAD: u16 = 9;
319pub const TCA_DUMP_INVISIBLE: u16 = 10;
320pub const TCA_CHAIN: u16 = 11;
321pub const TCA_HW_OFFLOAD: u16 = 12;
322pub const TCA_INGRESS_BLOCK: u16 = 13;
323pub const TCA_EGRESS_BLOCK: u16 = 14;
324pub const TCA_STATS_UNSPEC: u16 = 0;
325pub const TCA_STATS_BASIC: u16 = 1;
326pub const TCA_STATS_RATE_EST: u16 = 2;
327pub const TCA_STATS_QUEUE: u16 = 3;
328pub const TCA_STATS_APP: u16 = 4;
329pub const TCA_STATS_RATE_EST64: u16 = 5;
330pub const TCA_STATS_PAD: u16 = 6;
331pub const TCA_STATS_BASIC_HW: u16 = 7;
332
333pub const NDTA_UNSPEC: u16 = 0;
334pub const NDTA_NAME: u16 = 1;
335pub const NDTA_THRESH1: u16 = 2;
336pub const NDTA_THRESH2: u16 = 3;
337pub const NDTA_THRESH3: u16 = 4;
338pub const NDTA_CONFIG: u16 = 5;
339pub const NDTA_PARMS: u16 = 6;
340pub const NDTA_STATS: u16 = 7;
341pub const NDTA_GC_INTERVAL: u16 = 8;
342pub const NDTA_PAD: u16 = 9;
343
344pub const RTA_UNSPEC: u16 = 0;
345pub const RTA_DST: u16 = 1;
346pub const RTA_SRC: u16 = 2;
347pub const RTA_IIF: u16 = 3;
348pub const RTA_OIF: u16 = 4;
349pub const RTA_GATEWAY: u16 = 5;
350pub const RTA_PRIORITY: u16 = 6;
351pub const RTA_PREFSRC: u16 = 7;
352pub const RTA_METRICS: u16 = 8;
353pub const RTA_MULTIPATH: u16 = 9;
354pub const RTA_PROTOINFO: u16 = 10;
355pub const RTA_FLOW: u16 = 11;
356pub const RTA_CACHEINFO: u16 = 12;
357pub const RTA_SESSION: u16 = 13;
358pub const RTA_MP_ALGO: u16 = 14;
359pub const RTA_TABLE: u16 = 15;
360pub const RTA_MARK: u16 = 16;
361pub const RTA_MFC_STATS: u16 = 17;
362pub const RTA_VIA: u16 = 18;
363pub const RTA_NEWDST: u16 = 19;
364pub const RTA_PREF: u16 = 20;
365pub const RTA_ENCAP_TYPE: u16 = 21;
366pub const RTA_ENCAP: u16 = 22;
367pub const RTA_EXPIRES: u16 = 23;
368pub const RTA_PAD: u16 = 24;
369pub const RTA_UID: u16 = 25;
370pub const RTA_TTL_PROPAGATE: u16 = 26;
371
372pub const RTAX_UNSPEC: u16 = 0;
373pub const RTAX_LOCK: u16 = 1;
374pub const RTAX_MTU: u16 = 2;
375pub const RTAX_WINDOW: u16 = 3;
376pub const RTAX_RTT: u16 = 4;
377pub const RTAX_RTTVAR: u16 = 5;
378pub const RTAX_SSTHRESH: u16 = 6;
379pub const RTAX_CWND: u16 = 7;
380pub const RTAX_ADVMSS: u16 = 8;
381pub const RTAX_REORDERING: u16 = 9;
382pub const RTAX_HOPLIMIT: u16 = 10;
383pub const RTAX_INITCWND: u16 = 11;
384pub const RTAX_FEATURES: u16 = 12;
385pub const RTAX_RTO_MIN: u16 = 13;
386pub const RTAX_INITRWND: u16 = 14;
387pub const RTAX_QUICKACK: u16 = 15;
388pub const RTAX_CC_ALGO: u16 = 16;
389pub const RTAX_FASTOPEN_NO_COOKIE: u16 = 17;
390
391pub const IFLA_INFO_UNSPEC: u16 = 0;
392pub const IFLA_INFO_KIND: u16 = 1;
393pub const IFLA_INFO_DATA: u16 = 2;
394pub const IFLA_INFO_XSTATS: u16 = 3;
395pub const IFLA_INFO_SLAVE_KIND: u16 = 4;
396pub const IFLA_INFO_SLAVE_DATA: u16 = 5;
397// Bridge flags
398pub const IFLA_BRIDGE_FLAGS: u16 = 0;
399pub const BRIDGE_FLAGS_MASTER: u16 = 1; /* Bridge command to/from master */
400pub const BRIDGE_FLAGS_SELF: u16 = 2; /* Bridge command to/from lowerdev */
401
402pub const IFLA_BRIDGE_VLAN_INFO: u16 = 2;
403pub const BRIDGE_VLAN_INFO_MASTER: u16 = 1;
404pub const BRIDGE_VLAN_INFO_PVID: u16 = 4;
405pub const BRIDGE_VLAN_INFO_UNTAGGED: u16 = 8;
406pub const BRIDGE_VLAN_INFO_RANGE_BEGIN: u16 = 16;
407pub const BRIDGE_VLAN_INFO_RANGE_END: u16 = 32;
408
409pub const IFLA_BR_UNSPEC: u16 = 0;
410pub const IFLA_BR_FORWARD_DELAY: u16 = 1;
411pub const IFLA_BR_HELLO_TIME: u16 = 2;
412pub const IFLA_BR_MAX_AGE: u16 = 3;
413pub const IFLA_BR_AGEING_TIME: u16 = 4;
414pub const IFLA_BR_STP_STATE: u16 = 5;
415pub const IFLA_BR_PRIORITY: u16 = 6;
416pub const IFLA_BR_VLAN_FILTERING: u16 = 7;
417pub const IFLA_BR_VLAN_PROTOCOL: u16 = 8;
418pub const IFLA_BR_GROUP_FWD_MASK: u16 = 9;
419pub const IFLA_BR_ROOT_ID: u16 = 10;
420pub const IFLA_BR_BRIDGE_ID: u16 = 11;
421pub const IFLA_BR_ROOT_PORT: u16 = 12;
422pub const IFLA_BR_ROOT_PATH_COST: u16 = 13;
423pub const IFLA_BR_TOPOLOGY_CHANGE: u16 = 14;
424pub const IFLA_BR_TOPOLOGY_CHANGE_DETECTED: u16 = 15;
425pub const IFLA_BR_HELLO_TIMER: u16 = 16;
426pub const IFLA_BR_TCN_TIMER: u16 = 17;
427pub const IFLA_BR_TOPOLOGY_CHANGE_TIMER: u16 = 18;
428pub const IFLA_BR_GC_TIMER: u16 = 19;
429pub const IFLA_BR_GROUP_ADDR: u16 = 20;
430pub const IFLA_BR_FDB_FLUSH: u16 = 21;
431pub const IFLA_BR_MCAST_ROUTER: u16 = 22;
432pub const IFLA_BR_MCAST_SNOOPING: u16 = 23;
433pub const IFLA_BR_MCAST_QUERY_USE_IFADDR: u16 = 24;
434pub const IFLA_BR_MCAST_QUERIER: u16 = 25;
435pub const IFLA_BR_MCAST_HASH_ELASTICITY: u16 = 26;
436pub const IFLA_BR_MCAST_HASH_MAX: u16 = 27;
437pub const IFLA_BR_MCAST_LAST_MEMBER_CNT: u16 = 28;
438pub const IFLA_BR_MCAST_STARTUP_QUERY_CNT: u16 = 29;
439pub const IFLA_BR_MCAST_LAST_MEMBER_INTVL: u16 = 30;
440pub const IFLA_BR_MCAST_MEMBERSHIP_INTVL: u16 = 31;
441pub const IFLA_BR_MCAST_QUERIER_INTVL: u16 = 32;
442pub const IFLA_BR_MCAST_QUERY_INTVL: u16 = 33;
443pub const IFLA_BR_MCAST_QUERY_RESPONSE_INTVL: u16 = 34;
444pub const IFLA_BR_MCAST_STARTUP_QUERY_INTVL: u16 = 35;
445pub const IFLA_BR_NF_CALL_IPTABLES: u16 = 36;
446pub const IFLA_BR_NF_CALL_IP6TABLES: u16 = 37;
447pub const IFLA_BR_NF_CALL_ARPTABLES: u16 = 38;
448pub const IFLA_BR_VLAN_DEFAULT_PVID: u16 = 39;
449pub const IFLA_BR_PAD: u16 = 40;
450pub const IFLA_BR_VLAN_STATS_ENABLED: u16 = 41;
451pub const IFLA_BR_MCAST_STATS_ENABLED: u16 = 42;
452pub const IFLA_BR_MCAST_IGMP_VERSION: u16 = 43;
453pub const IFLA_BR_MCAST_MLD_VERSION: u16 = 44;
454pub const IFLA_BR_VLAN_STATS_PER_PORT: u16 = 45;
455pub const IFLA_BR_MULTI_BOOLOPT: u16 = 46;
456pub const IFLA_MACVLAN_UNSPEC: u16 = 0;
457pub const IFLA_MACVLAN_MODE: u16 = 1;
458pub const IFLA_MACVLAN_FLAGS: u16 = 2;
459pub const IFLA_MACVLAN_MACADDR_MODE: u16 = 3;
460pub const IFLA_MACVLAN_MACADDR: u16 = 4;
461pub const IFLA_MACVLAN_MACADDR_DATA: u16 = 5;
462pub const IFLA_MACVLAN_MACADDR_COUNT: u16 = 6;
463pub const IFLA_VLAN_UNSPEC: u16 = 0;
464pub const IFLA_VLAN_ID: u16 = 1;
465pub const IFLA_VLAN_FLAGS: u16 = 2;
466pub const IFLA_VLAN_EGRESS_QOS: u16 = 3;
467pub const IFLA_VLAN_INGRESS_QOS: u16 = 4;
468pub const IFLA_VLAN_PROTOCOL: u16 = 5;
469pub const IFLA_VRF_UNSPEC: u16 = 0;
470pub const IFLA_VRF_TABLE: u16 = 1;
471pub const IFLA_IPVLAN_UNSPEC: u16 = 0;
472pub const IFLA_IPVLAN_MODE: u16 = 1;
473pub const IFLA_IPVLAN_FLAGS: u16 = 2;
474pub const IFLA_IPOIB_UNSPEC: u16 = 0;
475pub const IFLA_IPOIB_PKEY: u16 = 1;
476pub const IFLA_IPOIB_MODE: u16 = 2;
477pub const IFLA_IPOIB_UMCAST: u16 = 3;
478pub const VETH_INFO_UNSPEC: u16 = 0;
479pub const VETH_INFO_PEER: u16 = 1;
480
481pub const ARPHRD_NETROM: u16 = 0;
482pub const ARPHRD_ETHER: u16 = 1;
483pub const ARPHRD_EETHER: u16 = 2;
484pub const ARPHRD_AX25: u16 = 3;
485pub const ARPHRD_PRONET: u16 = 4;
486pub const ARPHRD_CHAOS: u16 = 5;
487pub const ARPHRD_IEEE802: u16 = 6;
488pub const ARPHRD_ARCNET: u16 = 7;
489pub const ARPHRD_APPLETLK: u16 = 8;
490pub const ARPHRD_DLCI: u16 = 15;
491pub const ARPHRD_ATM: u16 = 19;
492pub const ARPHRD_METRICOM: u16 = 23;
493pub const ARPHRD_IEEE1394: u16 = 24;
494pub const ARPHRD_EUI64: u16 = 27;
495pub const ARPHRD_INFINIBAND: u16 = 32;
496pub const ARPHRD_SLIP: u16 = 256;
497pub const ARPHRD_CSLIP: u16 = 257;
498pub const ARPHRD_SLIP6: u16 = 258;
499pub const ARPHRD_CSLIP6: u16 = 259;
500pub const ARPHRD_RSRVD: u16 = 260;
501pub const ARPHRD_ADAPT: u16 = 264;
502pub const ARPHRD_ROSE: u16 = 270;
503pub const ARPHRD_X25: u16 = 271;
504pub const ARPHRD_HWX25: u16 = 272;
505pub const ARPHRD_CAN: u16 = 280;
506pub const ARPHRD_PPP: u16 = 512;
507pub const ARPHRD_CISCO: u16 = 513;
508pub const ARPHRD_HDLC: u16 = 513;
509pub const ARPHRD_LAPB: u16 = 516;
510pub const ARPHRD_DDCMP: u16 = 517;
511pub const ARPHRD_RAWHDLC: u16 = 518;
512pub const ARPHRD_RAWIP: u16 = 519;
513pub const ARPHRD_TUNNEL: u16 = 768;
514pub const ARPHRD_TUNNEL6: u16 = 769;
515pub const ARPHRD_FRAD: u16 = 770;
516pub const ARPHRD_SKIP: u16 = 771;
517pub const ARPHRD_LOOPBACK: u16 = 772;
518pub const ARPHRD_LOCALTLK: u16 = 773;
519pub const ARPHRD_FDDI: u16 = 774;
520pub const ARPHRD_BIF: u16 = 775;
521pub const ARPHRD_SIT: u16 = 776;
522pub const ARPHRD_IPDDP: u16 = 777;
523pub const ARPHRD_IPGRE: u16 = 778;
524pub const ARPHRD_PIMREG: u16 = 779;
525pub const ARPHRD_HIPPI: u16 = 780;
526pub const ARPHRD_ASH: u16 = 781;
527pub const ARPHRD_ECONET: u16 = 782;
528pub const ARPHRD_IRDA: u16 = 783;
529pub const ARPHRD_FCPP: u16 = 784;
530pub const ARPHRD_FCAL: u16 = 785;
531pub const ARPHRD_FCPL: u16 = 786;
532pub const ARPHRD_FCFABRIC: u16 = 787;
533pub const ARPHRD_IEEE802_TR: u16 = 800;
534pub const ARPHRD_IEEE80211: u16 = 801;
535pub const ARPHRD_IEEE80211_PRISM: u16 = 802;
536pub const ARPHRD_IEEE80211_RADIOTAP: u16 = 803;
537pub const ARPHRD_IEEE802154: u16 = 804;
538pub const ARPHRD_IEEE802154_MONITOR: u16 = 805;
539pub const ARPHRD_PHONET: u16 = 820;
540pub const ARPHRD_PHONET_PIPE: u16 = 821;
541pub const ARPHRD_CAIF: u16 = 822;
542pub const ARPHRD_IP6GRE: u16 = 823;
543pub const ARPHRD_NETLINK: u16 = 824;
544pub const ARPHRD_6LOWPAN: u16 = 825;
545pub const ARPHRD_VSOCKMON: u16 = 826;
546pub const ARPHRD_VOID: u16 = 65535;
547pub const ARPHRD_NONE: u16 = 65534;
548
549pub const IFA_UNSPEC: u16 = 0;
550pub const IFA_ADDRESS: u16 = 1;
551pub const IFA_LOCAL: u16 = 2;
552pub const IFA_LABEL: u16 = 3;
553pub const IFA_BROADCAST: u16 = 4;
554pub const IFA_ANYCAST: u16 = 5;
555pub const IFA_CACHEINFO: u16 = 6;
556pub const IFA_MULTICAST: u16 = 7;
557pub const IFA_FLAGS: u16 = 8;
558
559pub const IFLA_UNSPEC: u16 = 0;
560pub const IFLA_ADDRESS: u16 = 1;
561pub const IFLA_BROADCAST: u16 = 2;
562pub const IFLA_IFNAME: u16 = 3;
563pub const IFLA_MTU: u16 = 4;
564pub const IFLA_LINK: u16 = 5;
565pub const IFLA_QDISC: u16 = 6;
566pub const IFLA_STATS: u16 = 7;
567pub const IFLA_COST: u16 = 8;
568pub const IFLA_PRIORITY: u16 = 9;
569pub const IFLA_MASTER: u16 = 10;
570pub const IFLA_WIRELESS: u16 = 11;
571pub const IFLA_PROTINFO: u16 = 12;
572pub const IFLA_TXQLEN: u16 = 13;
573pub const IFLA_MAP: u16 = 14;
574pub const IFLA_WEIGHT: u16 = 15;
575pub const IFLA_OPERSTATE: u16 = 16;
576pub const IFLA_LINKMODE: u16 = 17;
577pub const IFLA_LINKINFO: u16 = 18;
578pub const IFLA_NET_NS_PID: u16 = 19;
579pub const IFLA_IFALIAS: u16 = 20;
580pub const IFLA_NUM_VF: u16 = 21;
581pub const IFLA_VFINFO_LIST: u16 = 22;
582pub const IFLA_STATS64: u16 = 23;
583pub const IFLA_VF_PORTS: u16 = 24;
584pub const IFLA_PORT_SELF: u16 = 25;
585pub const IFLA_AF_SPEC: u16 = 26;
586pub const IFLA_GROUP: u16 = 27;
587pub const IFLA_NET_NS_FD: u16 = 28;
588pub const IFLA_EXT_MASK: u16 = 29;
589pub const IFLA_PROMISCUITY: u16 = 30;
590pub const IFLA_NUM_TX_QUEUES: u16 = 31;
591pub const IFLA_NUM_RX_QUEUES: u16 = 32;
592pub const IFLA_CARRIER: u16 = 33;
593pub const IFLA_PHYS_PORT_ID: u16 = 34;
594pub const IFLA_CARRIER_CHANGES: u16 = 35;
595pub const IFLA_PHYS_SWITCH_ID: u16 = 36;
596pub const IFLA_LINK_NETNSID: u16 = 37;
597pub const IFLA_PHYS_PORT_NAME: u16 = 38;
598pub const IFLA_PROTO_DOWN: u16 = 39;
599pub const IFLA_GSO_MAX_SEGS: u16 = 40;
600pub const IFLA_GSO_MAX_SIZE: u16 = 41;
601pub const IFLA_PAD: u16 = 42;
602pub const IFLA_XDP: u16 = 43;
603pub const IFLA_EVENT: u16 = 44;
604pub const IFLA_NEW_NETNSID: u16 = 45;
605pub const IFLA_IF_NETNSID: u16 = 46;
606pub const IFLA_CARRIER_UP_COUNT: u16 = 47;
607pub const IFLA_CARRIER_DOWN_COUNT: u16 = 48;
608pub const IFLA_NEW_IFINDEX: u16 = 49;
609pub const IFLA_MIN_MTU: u16 = 50;
610pub const IFLA_MAX_MTU: u16 = 51;
611pub const IFLA_PROP_LIST: u16 = 52;
612pub const IFLA_ALT_IFNAME: u16 = 53;
613pub const IFLA_PERM_ADDRESS: u16 = 54;
614pub const IFLA_PROTO_DOWN_REASON: u16 = 55;
615pub const IFLA_INET_UNSPEC: u16 = 0;
616pub const IFLA_INET_CONF: u16 = 1;
617pub const IFLA_INET6_UNSPEC: u16 = 0;
618pub const IFLA_INET6_FLAGS: u16 = 1;
619pub const IFLA_INET6_CONF: u16 = 2;
620pub const IFLA_INET6_STATS: u16 = 3;
621// pub const IFLA_INET6_MCAST: u16 = 4;
622pub const IFLA_INET6_CACHEINFO: u16 = 5;
623pub const IFLA_INET6_ICMP6STATS: u16 = 6;
624pub const IFLA_INET6_TOKEN: u16 = 7;
625pub const IFLA_INET6_ADDR_GEN_MODE: u16 = 8;
626
627/// Link is up (administratively).
628pub const IFF_UP: u32 = libc::IFF_UP as u32;
629/// Link is up and carrier is OK (RFC2863 OPER_UP)
630pub const IFF_RUNNING: u32 = libc::IFF_RUNNING as u32;
631/// Link layer is operational
632pub const IFF_LOWER_UP: u32 = libc::IFF_LOWER_UP as u32;
633/// Driver signals IFF_DORMANT
634pub const IFF_DORMANT: u32 = libc::IFF_DORMANT as u32;
635/// Link supports broadcasting
636pub const IFF_BROADCAST: u32 = libc::IFF_BROADCAST as u32;
637/// Link supports multicasting
638pub const IFF_MULTICAST: u32 = libc::IFF_MULTICAST as u32;
639/// Link supports multicast routing
640pub const IFF_ALLMULTI: u32 = libc::IFF_ALLMULTI as u32;
641/// Tell driver to do debugging (currently unused)
642pub const IFF_DEBUG: u32 = libc::IFF_DEBUG as u32;
643/// Link loopback network
644pub const IFF_LOOPBACK: u32 = libc::IFF_LOOPBACK as u32;
645/// u32erface is point-to-point link
646pub const IFF_POINTOPOINT: u32 = libc::IFF_POINTOPOINT as u32;
647/// ARP is not supported
648pub const IFF_NOARP: u32 = libc::IFF_NOARP as u32;
649/// Receive all packets.
650pub const IFF_PROMISC: u32 = libc::IFF_PROMISC as u32;
651/// Master of a load balancer (bonding)
652pub const IFF_MASTER: u32 = libc::IFF_MASTER as u32;
653/// Slave of a load balancer
654pub const IFF_SLAVE: u32 = libc::IFF_SLAVE as u32;
655/// Link selects port automatically (only used by ARM ethernet)
656pub const IFF_PORTSEL: u32 = libc::IFF_PORTSEL as u32;
657/// Driver supports setting media type (only used by ARM ethernet)
658pub const IFF_AUTOMEDIA: u32 = libc::IFF_AUTOMEDIA as u32;
659// /// Echo sent packets (testing feature, CAN only)
660// pub const IFF_ECHO: u32 = libc::IFF_ECHO as u32;
661// /// Dialup device with changing addresses (unused, BSD compatibility)
662// pub const IFF_DYNAMIC: u32 = libc::IFF_DYNAMIC as u32;
663// /// Avoid use of trailers (unused, BSD compatibility)
664// pub const IFF_NOTRAILERS: u32 = libc::IFF_NOTRAILERS as u32;
665
666pub const IF_OPER_UNKNOWN: u8 = 0;
667pub const IF_OPER_NOTPRESENT: u8 = 1;
668pub const IF_OPER_DOWN: u8 = 2;
669pub const IF_OPER_LOWERLAYERDOWN: u8 = 3;
670pub const IF_OPER_TESTING: u8 = 4;
671pub const IF_OPER_DORMANT: u8 = 5;
672pub const IF_OPER_UP: u8 = 6;
673
674/// Neighbour cache entry type: unknown type
675pub const NDA_UNSPEC: u16 = 0;
676/// Neighbour cache entry type: entry for a network layer destination
677/// address
678pub const NDA_DST: u16 = 1;
679/// Neighbour cache entry type: entry for a link layer destination
680/// address
681pub const NDA_LLADDR: u16 = 2;
682/// Neighbour cache entry type: entry for cache statistics
683pub const NDA_CACHEINFO: u16 = 3;
684pub const NDA_PROBES: u16 = 4;
685pub const NDA_VLAN: u16 = 5;
686pub const NDA_PORT: u16 = 6;
687pub const NDA_VNI: u16 = 7;
688pub const NDA_IFINDEX: u16 = 8;
689pub const NDA_MASTER: u16 = 9;
690pub const NDA_LINK_NETNSID: u16 = 10;
691pub const NDA_SRC_VNI: u16 = 11;
692
693/// see `https://github.com/torvalds/linux/blob/master/include/uapi/linux/fib_rules.h`
694
695pub const FR_ACT_UNSPEC: u8 = 0;
696/// Pass to fixed table
697pub const FR_ACT_TO_TBL: u8 = 1;
698/// Jump to another rule
699pub const FR_ACT_GOTO: u8 = 2;
700/// No operation
701pub const FR_ACT_NOP: u8 = 3;
702pub const FR_ACT_RES3: u8 = 4;
703pub const FR_ACT_RES4: u8 = 5;
704/// Drop without notification
705pub const FR_ACT_BLACKHOLE: u8 = 6;
706/// Drop with `ENETUNREACH`
707pub const FR_ACT_UNREACHABLE: u8 = 7;
708/// Drop with `EACCES`
709pub const FR_ACT_PROHIBIT: u8 = 8;
710
711pub const FRA_UNSPEC: u16 = 0;
712/// Destination address
713pub const FRA_DST: u16 = 1;
714/// Source address
715pub const FRA_SRC: u16 = 2;
716/// Interface name
717pub const FRA_IIFNAME: u16 = 3;
718/// Target to jump to
719pub const FRA_GOTO: u16 = 4;
720
721pub const FRA_UNUSED2: u16 = 5;
722
723/// priority/preference
724pub const FRA_PRIORITY: u16 = 6;
725
726pub const FRA_UNUSED3: u16 = 7;
727pub const FRA_UNUSED4: u16 = 8;
728pub const FRA_UNUSED5: u16 = 9;
729
730/// mark
731pub const FRA_FWMARK: u16 = 10;
732/// flow/class id
733pub const FRA_FLOW: u16 = 11;
734pub const FRA_TUN_ID: u16 = 12;
735pub const FRA_SUPPRESS_IFGROUP: u16 = 13;
736pub const FRA_SUPPRESS_PREFIXLEN: u16 = 14;
737/// Extended table id
738pub const FRA_TABLE: u16 = 15;
739/// mask for netfilter mark
740pub const FRA_FWMASK: u16 = 16;
741pub const FRA_OIFNAME: u16 = 17;
742pub const FRA_PAD: u16 = 18;
743/// iif or oif is l3mdev goto its table
744pub const FRA_L3MDEV: u16 = 19;
745/// UID range
746pub const FRA_UID_RANGE: u16 = 20;
747/// Originator of the rule
748pub const FRA_PROTOCOL: u16 = 21;
749/// IP protocol
750pub const FRA_IP_PROTO: u16 = 22;
751/// Source port
752pub const FRA_SPORT_RANGE: u16 = 23;
753/// Destination port
754pub const FRA_DPORT_RANGE: u16 = 24;
755
756pub const FIB_RULE_PERMANENT: u32 = 1;
757pub const FIB_RULE_INVERT: u32 = 2;
758pub const FIB_RULE_UNRESOLVED: u32 = 4;
759pub const FIB_RULE_IIF_DETACHED: u32 = 8;
760pub const FIB_RULE_DEV_DETACHED: u32 = FIB_RULE_IIF_DETACHED;
761pub const FIB_RULE_OIF_DETACHED: u32 = 10;
762/// try to find source address in routing lookups
763pub const FIB_RULE_FIND_SADDR: u32 = 10000;
764
765// pub const MACVLAN_FLAG_NOPROMISC: int = 1;
766// pub const IPVLAN_F_PRIVATE: int = 1;
767// pub const IPVLAN_F_VEPA: int = 2;
768// pub const MAX_VLAN_LIST_LEN: int = 1;
769// pub const PORT_PROFILE_MAX: int = 40;
770// pub const PORT_UUID_MAX: int = 16;
771// pub const PORT_SELF_VF: int = -1;
772// pub const XDP_FLAGS_UPDATE_IF_NOEXIST: int = 1;
773// pub const XDP_FLAGS_SKB_MODE: int = 2;
774// pub const XDP_FLAGS_DRV_MODE: int = 4;
775// pub const XDP_FLAGS_HW_MODE: int = 8;
776// pub const XDP_FLAGS_MODES: int = 14;
777// pub const XDP_FLAGS_MASK: int = 15;
778
779pub const IFA_F_SECONDARY: u32 = 1;
780pub const IFA_F_TEMPORARY: u32 = 1;
781pub const IFA_F_NODAD: u32 = 2;
782pub const IFA_F_OPTIMISTIC: u32 = 4;
783pub const IFA_F_DADFAILED: u32 = 8;
784pub const IFA_F_HOMEADDRESS: u32 = 16;
785pub const IFA_F_DEPRECATED: u32 = 32;
786pub const IFA_F_TENTATIVE: u32 = 64;
787pub const IFA_F_PERMANENT: u32 = 128;
788pub const IFA_F_MANAGETEMPADDR: u32 = 256;
789pub const IFA_F_NOPREFIXROUTE: u32 = 512;
790pub const IFA_F_MCAUTOJOIN: u32 = 1024;
791pub const IFA_F_STABLE_PRIVACY: u32 = 2048;
792
793// pub const RTNL_FAMILY_IPMR: int = 128;
794// pub const RTNL_FAMILY_IP6MR: int = 129;
795// pub const RTNL_FAMILY_MAX: int = 129;
796// pub const RTA_ALIGNTO: int = 4;
797//
798pub const RTNH_F_DEAD: u8 = 1;
799pub const RTNH_F_PERVASIVE: u8 = 2;
800pub const RTNH_F_ONLINK: u8 = 4;
801pub const RTNH_F_OFFLOAD: u8 = 8;
802pub const RTNH_F_LINKDOWN: u8 = 16;
803pub const RTNH_F_UNRESOLVED: u8 = 32;
804// pub const RTNH_COMPARE_MASK: int = 25;
805// pub const RTNH_ALIGNTO: int = 4;
806// pub const RTNETLINK_HAVE_PEERINFO: int = 1;
807// pub const RTAX_FEATURE_ECN: int = 1;
808// pub const RTAX_FEATURE_SACK: int = 2;
809// pub const RTAX_FEATURE_TIMESTAMP: int = 4;
810// pub const RTAX_FEATURE_ALLFRAG: int = 8;
811// pub const RTAX_FEATURE_MASK: int = 15;
812pub const TCM_IFINDEX_MAGIC_BLOCK: u32 = 0xffff_ffff;
813// pub const TCA_FLAG_LARGE_DUMP_ON: int = 1;
814
815pub const RTEXT_FILTER_VF: u32 = 1;
816pub const RTEXT_FILTER_BRVLAN: u32 = 2;
817pub const RTEXT_FILTER_BRVLAN_COMPRESSED: u32 = 4;
818pub const RTEXT_FILTER_SKIP_STATS: u32 = 8;
819
820// pub const ARPOP_REQUEST: int = 1;
821// pub const ARPOP_REPLY: int = 2;
822//
823// pub const IN6_ADDR_GEN_MODE_EUI64: int = 0;
824// pub const IN6_ADDR_GEN_MODE_NONE: int = 1;
825// pub const IN6_ADDR_GEN_MODE_STABLE_PRIVACY: int = 2;
826// pub const IN6_ADDR_GEN_MODE_RANDOM: int = 3;
827//
828// pub const BRIDGE_MODE_UNSPEC: int = 0;
829// pub const BRIDGE_MODE_HAIRPIN: int = 1;
830//
831// pub const IFLA_BRPORT_UNSPEC: int = 0;
832// pub const IFLA_BRPORT_STATE: int = 1;
833// pub const IFLA_BRPORT_PRIORITY: int = 2;
834// pub const IFLA_BRPORT_COST: int = 3;
835// pub const IFLA_BRPORT_MODE: int = 4;
836// pub const IFLA_BRPORT_GUARD: int = 5;
837// pub const IFLA_BRPORT_PROTECT: int = 6;
838// pub const IFLA_BRPORT_FAST_LEAVE: int = 7;
839// pub const IFLA_BRPORT_LEARNING: int = 8;
840// pub const IFLA_BRPORT_UNICAST_FLOOD: int = 9;
841// pub const IFLA_BRPORT_PROXYARP: int = 10;
842// pub const IFLA_BRPORT_LEARNING_SYNC: int = 11;
843// pub const IFLA_BRPORT_PROXYARP_WIFI: int = 12;
844// pub const IFLA_BRPORT_ROOT_ID: int = 13;
845// pub const IFLA_BRPORT_BRIDGE_ID: int = 14;
846// pub const IFLA_BRPORT_DESIGNATED_PORT: int = 15;
847// pub const IFLA_BRPORT_DESIGNATED_COST: int = 16;
848// pub const IFLA_BRPORT_ID: int = 17;
849// pub const IFLA_BRPORT_NO: int = 18;
850// pub const IFLA_BRPORT_TOPOLOGY_CHANGE_ACK: int = 19;
851// pub const IFLA_BRPORT_CONFIG_PENDING: int = 20;
852// pub const IFLA_BRPORT_MESSAGE_AGE_TIMER: int = 21;
853// pub const IFLA_BRPORT_FORWARD_DELAY_TIMER: int = 22;
854// pub const IFLA_BRPORT_HOLD_TIMER: int = 23;
855// pub const IFLA_BRPORT_FLUSH: int = 24;
856// pub const IFLA_BRPORT_MULTICAST_ROUTER: int = 25;
857// pub const IFLA_BRPORT_PAD: int = 26;
858// pub const IFLA_BRPORT_MCAST_FLOOD: int = 27;
859// pub const IFLA_BRPORT_MCAST_TO_UCAST: int = 28;
860// pub const IFLA_BRPORT_VLAN_TUNNEL: int = 29;
861// pub const IFLA_BRPORT_BCAST_FLOOD: int = 30;
862// pub const IFLA_BRPORT_GROUP_FWD_MASK: int = 31;
863// pub const IFLA_BRPORT_NEIGH_SUPPRESS: int = 32;
864//
865// pub const IFLA_VLAN_QOS_UNSPEC: int = 0;
866// pub const IFLA_VLAN_QOS_MAPPING: int = 1;
867//
868// pub const IFLA_MACVLAN_UNSPEC: int = 0;
869// pub const IFLA_MACVLAN_MODE: int = 1;
870// pub const IFLA_MACVLAN_FLAGS: int = 2;
871// pub const IFLA_MACVLAN_MACADDR_MODE: int = 3;
872// pub const IFLA_MACVLAN_MACADDR: int = 4;
873// pub const IFLA_MACVLAN_MACADDR_DATA: int = 5;
874// pub const IFLA_MACVLAN_MACADDR_COUNT: int = 6;
875//
876// Available MACVLAN MODES
877pub const MACVLAN_MODE_PRIVATE: u32 = 1;
878pub const MACVLAN_MODE_VEPA: u32 = 2;
879pub const MACVLAN_MODE_BRIDGE: u32 = 4;
880pub const MACVLAN_MODE_PASSTHRU: u32 = 8;
881pub const MACVLAN_MODE_SOURCE: u32 = 16;
882//
883// pub const MACVLAN_MACADDR_ADD: int = 0;
884// pub const MACVLAN_MACADDR_DEL: int = 1;
885// pub const MACVLAN_MACADDR_FLUSH: int = 2;
886// pub const MACVLAN_MACADDR_SET: int = 3;
887//
888// pub const IFLA_VRF_UNSPEC: int = 0;
889// pub const IFLA_VRF_TABLE: int = 1;
890//
891// pub const IFLA_VRF_PORT_UNSPEC: int = 0;
892// pub const IFLA_VRF_PORT_TABLE: int = 1;
893//
894// pub const IFLA_MACSEC_UNSPEC: int = 0;
895// pub const IFLA_MACSEC_SCI: int = 1;
896// pub const IFLA_MACSEC_PORT: int = 2;
897// pub const IFLA_MACSEC_ICV_LEN: int = 3;
898// pub const IFLA_MACSEC_CIPHER_SUITE: int = 4;
899// pub const IFLA_MACSEC_WINDOW: int = 5;
900// pub const IFLA_MACSEC_ENCODING_SA: int = 6;
901// pub const IFLA_MACSEC_ENCRYPT: int = 7;
902// pub const IFLA_MACSEC_PROTECT: int = 8;
903// pub const IFLA_MACSEC_INC_SCI: int = 9;
904// pub const IFLA_MACSEC_ES: int = 10;
905// pub const IFLA_MACSEC_SCB: int = 11;
906// pub const IFLA_MACSEC_REPLAY_PROTECT: int = 12;
907// pub const IFLA_MACSEC_VALIDATION: int = 13;
908// pub const IFLA_MACSEC_PAD: int = 14;
909//
910// pub const MACSEC_VALIDATE_DISABLED: int = 0;
911// pub const MACSEC_VALIDATE_CHECK: int = 1;
912// pub const MACSEC_VALIDATE_STRICT: int = 2;
913// pub const MACSEC_VALIDATE_MAX: int = 2;
914//
915// pub const IFLA_IPVLAN_UNSPEC: int = 0;
916// pub const IFLA_IPVLAN_MODE: int = 1;
917// pub const IFLA_IPVLAN_FLAGS: int = 2;
918//
919// pub const IPVLAN_MODE_L2: int = 0;
920// pub const IPVLAN_MODE_L3: int = 1;
921// pub const IPVLAN_MODE_L3S: int = 2;
922// pub const IPVLAN_MODE_MAX: int = 3;
923//
924// FROM https://elixir.bootlin.com/linux/v5.9.8/source/include/uapi/linux/if_link.h#L531
925pub const IFLA_VXLAN_UNSPEC: u16 = 0;
926pub const IFLA_VXLAN_ID: u16 = 1;
927pub const IFLA_VXLAN_GROUP: u16 = 2;
928pub const IFLA_VXLAN_LINK: u16 = 3;
929pub const IFLA_VXLAN_LOCAL: u16 = 4;
930pub const IFLA_VXLAN_TTL: u16 = 5;
931pub const IFLA_VXLAN_TOS: u16 = 6;
932pub const IFLA_VXLAN_LEARNING: u16 = 7;
933pub const IFLA_VXLAN_AGEING: u16 = 8;
934pub const IFLA_VXLAN_LIMIT: u16 = 9;
935pub const IFLA_VXLAN_PORT_RANGE: u16 = 10;
936pub const IFLA_VXLAN_PROXY: u16 = 11;
937pub const IFLA_VXLAN_RSC: u16 = 12;
938pub const IFLA_VXLAN_L2MISS: u16 = 13;
939pub const IFLA_VXLAN_L3MISS: u16 = 14;
940pub const IFLA_VXLAN_PORT: u16 = 15;
941pub const IFLA_VXLAN_GROUP6: u16 = 16;
942pub const IFLA_VXLAN_LOCAL6: u16 = 17;
943pub const IFLA_VXLAN_UDP_CSUM: u16 = 18;
944pub const IFLA_VXLAN_UDP_ZERO_CSUM6_TX: u16 = 19;
945pub const IFLA_VXLAN_UDP_ZERO_CSUM6_RX: u16 = 20;
946pub const IFLA_VXLAN_REMCSUM_TX: u16 = 21;
947pub const IFLA_VXLAN_REMCSUM_RX: u16 = 22;
948pub const IFLA_VXLAN_GBP: u16 = 23;
949pub const IFLA_VXLAN_REMCSUM_NOPARTIAL: u16 = 24;
950pub const IFLA_VXLAN_COLLECT_METADATA: u16 = 25;
951pub const IFLA_VXLAN_LABEL: u16 = 26;
952pub const IFLA_VXLAN_GPE: u16 = 27;
953pub const IFLA_VXLAN_TTL_INHERIT: u16 = 28;
954pub const IFLA_VXLAN_DF: u16 = 29;
955pub const __IFLA_VXLAN_MAX: u16 = 30;
956//
957// pub const IFLA_GENEVE_UNSPEC: int = 0;
958// pub const IFLA_GENEVE_ID: int = 1;
959// pub const IFLA_GENEVE_REMOTE: int = 2;
960// pub const IFLA_GENEVE_TTL: int = 3;
961// pub const IFLA_GENEVE_TOS: int = 4;
962// pub const IFLA_GENEVE_PORT: int = 5;
963// pub const IFLA_GENEVE_COLLECT_METADATA: int = 6;
964// pub const IFLA_GENEVE_REMOTE6: int = 7;
965// pub const IFLA_GENEVE_UDP_CSUM: int = 8;
966// pub const IFLA_GENEVE_UDP_ZERO_CSUM6_TX: int = 9;
967// pub const IFLA_GENEVE_UDP_ZERO_CSUM6_RX: int = 10;
968// pub const IFLA_GENEVE_LABEL: int = 11;
969//
970// pub const IFLA_PPP_UNSPEC: int = 0;
971// pub const IFLA_PPP_DEV_FD: int = 1;
972//
973// pub const GTP_ROLE_GGSN: int = 0;
974// pub const GTP_ROLE_SGSN: int = 1;
975//
976// pub const IFLA_GTP_UNSPEC: int = 0;
977// pub const IFLA_GTP_FD0: int = 1;
978// pub const IFLA_GTP_FD1: int = 2;
979// pub const IFLA_GTP_PDP_HASHSIZE: int = 3;
980// pub const IFLA_GTP_ROLE: int = 4;
981//
982// pub const IFLA_BOND_UNSPEC: int = 0;
983// pub const IFLA_BOND_MODE: int = 1;
984// pub const IFLA_BOND_ACTIVE_SLAVE: int = 2;
985// pub const IFLA_BOND_MIIMON: int = 3;
986// pub const IFLA_BOND_UPDELAY: int = 4;
987// pub const IFLA_BOND_DOWNDELAY: int = 5;
988// pub const IFLA_BOND_USE_CARRIER: int = 6;
989// pub const IFLA_BOND_ARP_INTERVAL: int = 7;
990// pub const IFLA_BOND_ARP_IP_TARGET: int = 8;
991// pub const IFLA_BOND_ARP_VALIDATE: int = 9;
992// pub const IFLA_BOND_ARP_ALL_TARGETS: int = 10;
993// pub const IFLA_BOND_PRIMARY: int = 11;
994// pub const IFLA_BOND_PRIMARY_RESELECT: int = 12;
995// pub const IFLA_BOND_FAIL_OVER_MAC: int = 13;
996// pub const IFLA_BOND_XMIT_HASH_POLICY: int = 14;
997// pub const IFLA_BOND_RESEND_IGMP: int = 15;
998// pub const IFLA_BOND_NUM_PEER_NOTIF: int = 16;
999// pub const IFLA_BOND_ALL_SLAVES_ACTIVE: int = 17;
1000// pub const IFLA_BOND_MIN_LINKS: int = 18;
1001// pub const IFLA_BOND_LP_INTERVAL: int = 19;
1002// pub const IFLA_BOND_PACKETS_PER_SLAVE: int = 20;
1003// pub const IFLA_BOND_AD_LACP_RATE: int = 21;
1004// pub const IFLA_BOND_AD_SELECT: int = 22;
1005// pub const IFLA_BOND_AD_INFO: int = 23;
1006// pub const IFLA_BOND_AD_ACTOR_SYS_PRIO: int = 24;
1007// pub const IFLA_BOND_AD_USER_PORT_KEY: int = 25;
1008// pub const IFLA_BOND_AD_ACTOR_SYSTEM: int = 26;
1009// pub const IFLA_BOND_TLB_DYNAMIC_LB: int = 27;
1010//
1011// pub const IFLA_BOND_AD_INFO_UNSPEC: int = 0;
1012// pub const IFLA_BOND_AD_INFO_AGGREGATOR: int = 1;
1013// pub const IFLA_BOND_AD_INFO_NUM_PORTS: int = 2;
1014// pub const IFLA_BOND_AD_INFO_ACTOR_KEY: int = 3;
1015// pub const IFLA_BOND_AD_INFO_PARTNER_KEY: int = 4;
1016// pub const IFLA_BOND_AD_INFO_PARTNER_MAC: int = 5;
1017//
1018// pub const IFLA_BOND_SLAVE_UNSPEC: int = 0;
1019// pub const IFLA_BOND_SLAVE_STATE: int = 1;
1020// pub const IFLA_BOND_SLAVE_MII_STATUS: int = 2;
1021// pub const IFLA_BOND_SLAVE_LINK_FAILURE_COUNT: int = 3;
1022// pub const IFLA_BOND_SLAVE_PERM_HWADDR: int = 4;
1023// pub const IFLA_BOND_SLAVE_QUEUE_ID: int = 5;
1024// pub const IFLA_BOND_SLAVE_AD_AGGREGATOR_ID: int = 6;
1025// pub const IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE: int = 7;
1026// pub const IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE: int = 8;
1027//
1028// pub const IFLA_VF_INFO_UNSPEC: int = 0;
1029// pub const IFLA_VF_INFO: int = 1;
1030//
1031// pub const IFLA_VF_UNSPEC: int = 0;
1032// pub const IFLA_VF_MAC: int = 1;
1033// pub const IFLA_VF_VLAN: int = 2;
1034// pub const IFLA_VF_TX_RATE: int = 3;
1035// pub const IFLA_VF_SPOOFCHK: int = 4;
1036// pub const IFLA_VF_LINK_STATE: int = 5;
1037// pub const IFLA_VF_RATE: int = 6;
1038// pub const IFLA_VF_RSS_QUERY_EN: int = 7;
1039// pub const IFLA_VF_STATS: int = 8;
1040// pub const IFLA_VF_TRUST: int = 9;
1041// pub const IFLA_VF_IB_NODE_GUID: int = 10;
1042// pub const IFLA_VF_IB_PORT_GUID: int = 11;
1043// pub const IFLA_VF_VLAN_LIST: int = 12;
1044//
1045// pub const IFLA_VF_VLAN_INFO_UNSPEC: int = 0;
1046// pub const IFLA_VF_VLAN_INFO: int = 1;
1047//
1048// pub const NDUSEROPT_UNSPEC: int = 0;
1049// pub const NDUSEROPT_SRCADDR: int = 1;
1050//
1051pub const RTNLGRP_NONE: u32 = 0;
1052pub const RTNLGRP_LINK: u32 = 1;
1053pub const RTNLGRP_NOTIFY: u32 = 2;
1054pub const RTNLGRP_NEIGH: u32 = 3;
1055pub const RTNLGRP_TC: u32 = 4;
1056pub const RTNLGRP_IPV4_IFADDR: u32 = 5;
1057pub const RTNLGRP_IPV4_MROUTE: u32 = 6;
1058pub const RTNLGRP_IPV4_ROUTE: u32 = 7;
1059pub const RTNLGRP_IPV4_RULE: u32 = 8;
1060pub const RTNLGRP_IPV6_IFADDR: u32 = 9;
1061pub const RTNLGRP_IPV6_MROUTE: u32 = 10;
1062pub const RTNLGRP_IPV6_ROUTE: u32 = 11;
1063pub const RTNLGRP_IPV6_IFINFO: u32 = 12;
1064pub const RTNLGRP_DECNET_IFADDR: u32 = 13;
1065pub const RTNLGRP_NOP2: u32 = 14;
1066pub const RTNLGRP_DECNET_ROUTE: u32 = 15;
1067pub const RTNLGRP_DECNET_RULE: u32 = 16;
1068pub const RTNLGRP_NOP4: u32 = 17;
1069pub const RTNLGRP_IPV6_PREFIX: u32 = 18;
1070pub const RTNLGRP_IPV6_RULE: u32 = 19;
1071pub const RTNLGRP_ND_USEROPT: u32 = 20;
1072pub const RTNLGRP_PHONET_IFADDR: u32 = 21;
1073pub const RTNLGRP_PHONET_ROUTE: u32 = 22;
1074pub const RTNLGRP_DCB: u32 = 23;
1075pub const RTNLGRP_IPV4_NETCONF: u32 = 24;
1076pub const RTNLGRP_IPV6_NETCONF: u32 = 25;
1077pub const RTNLGRP_MDB: u32 = 26;
1078pub const RTNLGRP_MPLS_ROUTE: u32 = 27;
1079pub const RTNLGRP_NSID: u32 = 28;
1080pub const RTNLGRP_MPLS_NETCONF: u32 = 29;
1081pub const RTNLGRP_IPV4_MROUTE_R: u32 = 30;
1082pub const RTNLGRP_IPV6_MROUTE_R: u32 = 31;
1083//
1084// pub const IFLA_VF_LINK_STATE_AUTO: int = 0;
1085// pub const IFLA_VF_LINK_STATE_ENABLE: int = 1;
1086// pub const IFLA_VF_LINK_STATE_DISABLE: int = 2;
1087//
1088// pub const IFLA_VF_STATS_RX_PACKETS: int = 0;
1089// pub const IFLA_VF_STATS_TX_PACKETS: int = 1;
1090// pub const IFLA_VF_STATS_RX_BYTES: int = 2;
1091// pub const IFLA_VF_STATS_TX_BYTES: int = 3;
1092// pub const IFLA_VF_STATS_BROADCAST: int = 4;
1093// pub const IFLA_VF_STATS_MULTICAST: int = 5;
1094// pub const IFLA_VF_STATS_PAD: int = 6;
1095// pub const IFLA_VF_STATS_RX_DROPPED: int = 7;
1096// pub const IFLA_VF_STATS_TX_DROPPED: int = 8;
1097//
1098// pub const IFLA_VF_PORT_UNSPEC: int = 0;
1099// pub const IFLA_VF_PORT: int = 1;
1100//
1101// pub const IFLA_PORT_UNSPEC: int = 0;
1102// pub const IFLA_PORT_VF: int = 1;
1103// pub const IFLA_PORT_PROFILE: int = 2;
1104// pub const IFLA_PORT_VSI_TYPE: int = 3;
1105// pub const IFLA_PORT_INSTANCE_UUID: int = 4;
1106// pub const IFLA_PORT_HOST_UUID: int = 5;
1107// pub const IFLA_PORT_REQUEST: int = 6;
1108// pub const IFLA_PORT_RESPONSE: int = 7;
1109//
1110// pub const PORT_REQUEST_PREASSOCIATE: int = 0;
1111// pub const PORT_REQUEST_PREASSOCIATE_RR: int = 1;
1112// pub const PORT_REQUEST_ASSOCIATE: int = 2;
1113// pub const PORT_REQUEST_DISASSOCIATE: int = 3;
1114//
1115// pub const PORT_VDP_RESPONSE_SUCCESS: int = 0;
1116// pub const PORT_VDP_RESPONSE_INVALID_FORMAT: int = 1;
1117// pub const PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES: int = 2;
1118// pub const PORT_VDP_RESPONSE_UNUSED_VTID: int = 3;
1119// pub const PORT_VDP_RESPONSE_VTID_VIOLATION: int = 4;
1120// pub const PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION: int = 5;
1121// pub const PORT_VDP_RESPONSE_OUT_OF_SYNC: int = 6;
1122// pub const PORT_PROFILE_RESPONSE_SUCCESS: int = 256;
1123// pub const PORT_PROFILE_RESPONSE_INPROGRESS: int = 257;
1124// pub const PORT_PROFILE_RESPONSE_INVALID: int = 258;
1125// pub const PORT_PROFILE_RESPONSE_BADSTATE: int = 259;
1126// pub const PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES: int = 260;
1127// pub const PORT_PROFILE_RESPONSE_ERROR: int = 261;
1128//
1129// pub const IFLA_IPOIB_UNSPEC: int = 0;
1130// pub const IFLA_IPOIB_PKEY: int = 1;
1131// pub const IFLA_IPOIB_MODE: int = 2;
1132// pub const IFLA_IPOIB_UMCAST: int = 3;
1133//
1134// pub const IPOIB_MODE_DATAGRAM: int = 0;
1135// pub const IPOIB_MODE_CONNECTED: int = 1;
1136//
1137// pub const IFLA_HSR_UNSPEC: int = 0;
1138// pub const IFLA_HSR_SLAVE1: int = 1;
1139// pub const IFLA_HSR_SLAVE2: int = 2;
1140// pub const IFLA_HSR_MULTICAST_SPEC: int = 3;
1141// pub const IFLA_HSR_SUPERVISION_ADDR: int = 4;
1142// pub const IFLA_HSR_SEQ_NR: int = 5;
1143// pub const IFLA_HSR_VERSION: int = 6;
1144//
1145// pub const IFLA_STATS_UNSPEC: int = 0;
1146// pub const IFLA_STATS_LINK_64: int = 1;
1147// pub const IFLA_STATS_LINK_XSTATS: int = 2;
1148// pub const IFLA_STATS_LINK_XSTATS_SLAVE: int = 3;
1149// pub const IFLA_STATS_LINK_OFFLOAD_XSTATS: int = 4;
1150// pub const IFLA_STATS_AF_SPEC: int = 5;
1151//
1152// pub const LINK_XSTATS_TYPE_UNSPEC: int = 0;
1153// pub const LINK_XSTATS_TYPE_BRIDGE: int = 1;
1154//
1155// pub const IFLA_OFFLOAD_XSTATS_UNSPEC: int = 0;
1156// pub const IFLA_OFFLOAD_XSTATS_CPU_HIT: int = 1;
1157//
1158// pub const XDP_ATTACHED_NONE: int = 0;
1159// pub const XDP_ATTACHED_DRV: int = 1;
1160// pub const XDP_ATTACHED_SKB: int = 2;
1161// pub const XDP_ATTACHED_HW: int = 3;
1162
1163pub const IFLA_XDP_UNSPEC: u32 = 0;
1164pub const IFLA_XDP_FD: u32 = 1;
1165pub const IFLA_XDP_ATTACHED: u32 = 2;
1166pub const IFLA_XDP_FLAGS: u32 = 3;
1167pub const IFLA_XDP_PROG_ID: u32 = 4;
1168
1169// pub const IFLA_EVENT_NONE: int = 0;
1170// pub const IFLA_EVENT_REBOOT: int = 1;
1171// pub const IFLA_EVENT_FEATURES: int = 2;
1172// pub const IFLA_EVENT_BONDING_FAILOVER: int = 3;
1173// pub const IFLA_EVENT_NOTIFY_PEERS: int = 4;
1174// pub const IFLA_EVENT_IGMP_RESEND: int = 5;
1175// pub const IFLA_EVENT_BONDING_OPTIONS: int = 6;
1176//
1177// pub const NDTPA_UNSPEC: int = 0;
1178// pub const NDTPA_IFINDEX: int = 1;
1179// pub const NDTPA_REFCNT: int = 2;
1180// pub const NDTPA_REACHABLE_TIME: int = 3;
1181// pub const NDTPA_BASE_REACHABLE_TIME: int = 4;
1182// pub const NDTPA_RETRANS_TIME: int = 5;
1183// pub const NDTPA_GC_STALETIME: int = 6;
1184// pub const NDTPA_DELAY_PROBE_TIME: int = 7;
1185// pub const NDTPA_QUEUE_LEN: int = 8;
1186// pub const NDTPA_APP_PROBES: int = 9;
1187// pub const NDTPA_UCAST_PROBES: int = 10;
1188// pub const NDTPA_MCAST_PROBES: int = 11;
1189// pub const NDTPA_ANYCAST_DELAY: int = 12;
1190// pub const NDTPA_PROXY_DELAY: int = 13;
1191// pub const NDTPA_PROXY_QLEN: int = 14;
1192// pub const NDTPA_LOCKTIME: int = 15;
1193// pub const NDTPA_QUEUE_LENBYTES: int = 16;
1194// pub const NDTPA_MCAST_REPROBES: int = 17;
1195// pub const NDTPA_PAD: int = 18;
1196//
1197// #[allow(overflowing_literals)]
1198// pub const RT_TABLE_MAX: int = 0xffff_ffff;
1199//
1200// pub const PREFIX_UNSPEC: int = 0;
1201// pub const PREFIX_ADDRESS: int = 1;
1202// pub const PREFIX_CACHEINFO: int = 2;
1203
1204pub const LWTUNNEL_ENCAP_NONE: u16 = 0;
1205pub const LWTUNNEL_ENCAP_MPLS: u16 = 1;
1206pub const LWTUNNEL_ENCAP_IP: u16 = 2;
1207pub const LWTUNNEL_ENCAP_ILA: u16 = 3;
1208pub const LWTUNNEL_ENCAP_IP6: u16 = 4;
1209pub const LWTUNNEL_ENCAP_SEG6: u16 = 5;
1210pub const LWTUNNEL_ENCAP_BPF: u16 = 6;
1211pub const LWTUNNEL_ENCAP_SEG6_LOCAL: u16 = 7;
1212pub const LWTUNNEL_ENCAP_RPL: u16 = 8;
1213
1214pub const MPLS_IPTUNNEL_UNSPEC: u16 = 0;
1215pub const MPLS_IPTUNNEL_DST: u16 = 1;
1216pub const MPLS_IPTUNNEL_TTL: u16 = 2;