xref: /linux-6.15/tools/include/uapi/linux/if_link.h (revision b9ed315d)
1dc2b9f19SEric Leblond /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2dc2b9f19SEric Leblond #ifndef _UAPI_LINUX_IF_LINK_H
3dc2b9f19SEric Leblond #define _UAPI_LINUX_IF_LINK_H
4dc2b9f19SEric Leblond 
5dc2b9f19SEric Leblond #include <linux/types.h>
6dc2b9f19SEric Leblond #include <linux/netlink.h>
7dc2b9f19SEric Leblond 
8dc2b9f19SEric Leblond /* This struct should be in sync with struct rtnl_link_stats64 */
9dc2b9f19SEric Leblond struct rtnl_link_stats {
10710d5835SEric Dumazet 	__u32	rx_packets;
11710d5835SEric Dumazet 	__u32	tx_packets;
12710d5835SEric Dumazet 	__u32	rx_bytes;
13710d5835SEric Dumazet 	__u32	tx_bytes;
14710d5835SEric Dumazet 	__u32	rx_errors;
15710d5835SEric Dumazet 	__u32	tx_errors;
16710d5835SEric Dumazet 	__u32	rx_dropped;
17710d5835SEric Dumazet 	__u32	tx_dropped;
18710d5835SEric Dumazet 	__u32	multicast;
19dc2b9f19SEric Leblond 	__u32	collisions;
20dc2b9f19SEric Leblond 	/* detailed rx_errors: */
21dc2b9f19SEric Leblond 	__u32	rx_length_errors;
22710d5835SEric Dumazet 	__u32	rx_over_errors;
23710d5835SEric Dumazet 	__u32	rx_crc_errors;
24710d5835SEric Dumazet 	__u32	rx_frame_errors;
25710d5835SEric Dumazet 	__u32	rx_fifo_errors;
26710d5835SEric Dumazet 	__u32	rx_missed_errors;
27dc2b9f19SEric Leblond 
28dc2b9f19SEric Leblond 	/* detailed tx_errors */
29dc2b9f19SEric Leblond 	__u32	tx_aborted_errors;
30dc2b9f19SEric Leblond 	__u32	tx_carrier_errors;
31dc2b9f19SEric Leblond 	__u32	tx_fifo_errors;
32dc2b9f19SEric Leblond 	__u32	tx_heartbeat_errors;
33dc2b9f19SEric Leblond 	__u32	tx_window_errors;
34dc2b9f19SEric Leblond 
35dc2b9f19SEric Leblond 	/* for cslip etc */
36dc2b9f19SEric Leblond 	__u32	rx_compressed;
37dc2b9f19SEric Leblond 	__u32	tx_compressed;
38dc2b9f19SEric Leblond 
39710d5835SEric Dumazet 	__u32	rx_nohandler;
40dc2b9f19SEric Leblond };
41dc2b9f19SEric Leblond 
42710d5835SEric Dumazet /**
43710d5835SEric Dumazet  * struct rtnl_link_stats64 - The main device statistics structure.
44710d5835SEric Dumazet  *
45710d5835SEric Dumazet  * @rx_packets: Number of good packets received by the interface.
46710d5835SEric Dumazet  *   For hardware interfaces counts all good packets received from the device
47710d5835SEric Dumazet  *   by the host, including packets which host had to drop at various stages
48710d5835SEric Dumazet  *   of processing (even in the driver).
49710d5835SEric Dumazet  *
50710d5835SEric Dumazet  * @tx_packets: Number of packets successfully transmitted.
51710d5835SEric Dumazet  *   For hardware interfaces counts packets which host was able to successfully
52710d5835SEric Dumazet  *   hand over to the device, which does not necessarily mean that packets
53710d5835SEric Dumazet  *   had been successfully transmitted out of the device, only that device
54710d5835SEric Dumazet  *   acknowledged it copied them out of host memory.
55710d5835SEric Dumazet  *
56710d5835SEric Dumazet  * @rx_bytes: Number of good received bytes, corresponding to @rx_packets.
57710d5835SEric Dumazet  *
58710d5835SEric Dumazet  *   For IEEE 802.3 devices should count the length of Ethernet Frames
59710d5835SEric Dumazet  *   excluding the FCS.
60710d5835SEric Dumazet  *
61710d5835SEric Dumazet  * @tx_bytes: Number of good transmitted bytes, corresponding to @tx_packets.
62710d5835SEric Dumazet  *
63710d5835SEric Dumazet  *   For IEEE 802.3 devices should count the length of Ethernet Frames
64710d5835SEric Dumazet  *   excluding the FCS.
65710d5835SEric Dumazet  *
66710d5835SEric Dumazet  * @rx_errors: Total number of bad packets received on this network device.
67710d5835SEric Dumazet  *   This counter must include events counted by @rx_length_errors,
68710d5835SEric Dumazet  *   @rx_crc_errors, @rx_frame_errors and other errors not otherwise
69710d5835SEric Dumazet  *   counted.
70710d5835SEric Dumazet  *
71710d5835SEric Dumazet  * @tx_errors: Total number of transmit problems.
72710d5835SEric Dumazet  *   This counter must include events counter by @tx_aborted_errors,
73710d5835SEric Dumazet  *   @tx_carrier_errors, @tx_fifo_errors, @tx_heartbeat_errors,
74710d5835SEric Dumazet  *   @tx_window_errors and other errors not otherwise counted.
75710d5835SEric Dumazet  *
76710d5835SEric Dumazet  * @rx_dropped: Number of packets received but not processed,
77710d5835SEric Dumazet  *   e.g. due to lack of resources or unsupported protocol.
78710d5835SEric Dumazet  *   For hardware interfaces this counter may include packets discarded
79710d5835SEric Dumazet  *   due to L2 address filtering but should not include packets dropped
80710d5835SEric Dumazet  *   by the device due to buffer exhaustion which are counted separately in
81710d5835SEric Dumazet  *   @rx_missed_errors (since procfs folds those two counters together).
82710d5835SEric Dumazet  *
83710d5835SEric Dumazet  * @tx_dropped: Number of packets dropped on their way to transmission,
84710d5835SEric Dumazet  *   e.g. due to lack of resources.
85710d5835SEric Dumazet  *
86710d5835SEric Dumazet  * @multicast: Multicast packets received.
87710d5835SEric Dumazet  *   For hardware interfaces this statistic is commonly calculated
88710d5835SEric Dumazet  *   at the device level (unlike @rx_packets) and therefore may include
89710d5835SEric Dumazet  *   packets which did not reach the host.
90710d5835SEric Dumazet  *
91710d5835SEric Dumazet  *   For IEEE 802.3 devices this counter may be equivalent to:
92710d5835SEric Dumazet  *
93710d5835SEric Dumazet  *    - 30.3.1.1.21 aMulticastFramesReceivedOK
94710d5835SEric Dumazet  *
95710d5835SEric Dumazet  * @collisions: Number of collisions during packet transmissions.
96710d5835SEric Dumazet  *
97710d5835SEric Dumazet  * @rx_length_errors: Number of packets dropped due to invalid length.
98710d5835SEric Dumazet  *   Part of aggregate "frame" errors in `/proc/net/dev`.
99710d5835SEric Dumazet  *
100710d5835SEric Dumazet  *   For IEEE 802.3 devices this counter should be equivalent to a sum
101710d5835SEric Dumazet  *   of the following attributes:
102710d5835SEric Dumazet  *
103710d5835SEric Dumazet  *    - 30.3.1.1.23 aInRangeLengthErrors
104710d5835SEric Dumazet  *    - 30.3.1.1.24 aOutOfRangeLengthField
105710d5835SEric Dumazet  *    - 30.3.1.1.25 aFrameTooLongErrors
106710d5835SEric Dumazet  *
107710d5835SEric Dumazet  * @rx_over_errors: Receiver FIFO overflow event counter.
108710d5835SEric Dumazet  *
109710d5835SEric Dumazet  *   Historically the count of overflow events. Such events may be
110710d5835SEric Dumazet  *   reported in the receive descriptors or via interrupts, and may
111710d5835SEric Dumazet  *   not correspond one-to-one with dropped packets.
112710d5835SEric Dumazet  *
113710d5835SEric Dumazet  *   The recommended interpretation for high speed interfaces is -
114710d5835SEric Dumazet  *   number of packets dropped because they did not fit into buffers
115710d5835SEric Dumazet  *   provided by the host, e.g. packets larger than MTU or next buffer
116710d5835SEric Dumazet  *   in the ring was not available for a scatter transfer.
117710d5835SEric Dumazet  *
118710d5835SEric Dumazet  *   Part of aggregate "frame" errors in `/proc/net/dev`.
119710d5835SEric Dumazet  *
120710d5835SEric Dumazet  *   This statistics was historically used interchangeably with
121710d5835SEric Dumazet  *   @rx_fifo_errors.
122710d5835SEric Dumazet  *
123710d5835SEric Dumazet  *   This statistic corresponds to hardware events and is not commonly used
124710d5835SEric Dumazet  *   on software devices.
125710d5835SEric Dumazet  *
126710d5835SEric Dumazet  * @rx_crc_errors: Number of packets received with a CRC error.
127710d5835SEric Dumazet  *   Part of aggregate "frame" errors in `/proc/net/dev`.
128710d5835SEric Dumazet  *
129710d5835SEric Dumazet  *   For IEEE 802.3 devices this counter must be equivalent to:
130710d5835SEric Dumazet  *
131710d5835SEric Dumazet  *    - 30.3.1.1.6 aFrameCheckSequenceErrors
132710d5835SEric Dumazet  *
133710d5835SEric Dumazet  * @rx_frame_errors: Receiver frame alignment errors.
134710d5835SEric Dumazet  *   Part of aggregate "frame" errors in `/proc/net/dev`.
135710d5835SEric Dumazet  *
136710d5835SEric Dumazet  *   For IEEE 802.3 devices this counter should be equivalent to:
137710d5835SEric Dumazet  *
138710d5835SEric Dumazet  *    - 30.3.1.1.7 aAlignmentErrors
139710d5835SEric Dumazet  *
140710d5835SEric Dumazet  * @rx_fifo_errors: Receiver FIFO error counter.
141710d5835SEric Dumazet  *
142710d5835SEric Dumazet  *   Historically the count of overflow events. Those events may be
143710d5835SEric Dumazet  *   reported in the receive descriptors or via interrupts, and may
144710d5835SEric Dumazet  *   not correspond one-to-one with dropped packets.
145710d5835SEric Dumazet  *
146710d5835SEric Dumazet  *   This statistics was used interchangeably with @rx_over_errors.
147710d5835SEric Dumazet  *   Not recommended for use in drivers for high speed interfaces.
148710d5835SEric Dumazet  *
149710d5835SEric Dumazet  *   This statistic is used on software devices, e.g. to count software
150710d5835SEric Dumazet  *   packet queue overflow (can) or sequencing errors (GRE).
151710d5835SEric Dumazet  *
152710d5835SEric Dumazet  * @rx_missed_errors: Count of packets missed by the host.
153710d5835SEric Dumazet  *   Folded into the "drop" counter in `/proc/net/dev`.
154710d5835SEric Dumazet  *
155710d5835SEric Dumazet  *   Counts number of packets dropped by the device due to lack
156710d5835SEric Dumazet  *   of buffer space. This usually indicates that the host interface
157710d5835SEric Dumazet  *   is slower than the network interface, or host is not keeping up
158710d5835SEric Dumazet  *   with the receive packet rate.
159710d5835SEric Dumazet  *
160710d5835SEric Dumazet  *   This statistic corresponds to hardware events and is not used
161710d5835SEric Dumazet  *   on software devices.
162710d5835SEric Dumazet  *
163710d5835SEric Dumazet  * @tx_aborted_errors:
164710d5835SEric Dumazet  *   Part of aggregate "carrier" errors in `/proc/net/dev`.
165710d5835SEric Dumazet  *   For IEEE 802.3 devices capable of half-duplex operation this counter
166710d5835SEric Dumazet  *   must be equivalent to:
167710d5835SEric Dumazet  *
168710d5835SEric Dumazet  *    - 30.3.1.1.11 aFramesAbortedDueToXSColls
169710d5835SEric Dumazet  *
170710d5835SEric Dumazet  *   High speed interfaces may use this counter as a general device
171710d5835SEric Dumazet  *   discard counter.
172710d5835SEric Dumazet  *
173710d5835SEric Dumazet  * @tx_carrier_errors: Number of frame transmission errors due to loss
174710d5835SEric Dumazet  *   of carrier during transmission.
175710d5835SEric Dumazet  *   Part of aggregate "carrier" errors in `/proc/net/dev`.
176710d5835SEric Dumazet  *
177710d5835SEric Dumazet  *   For IEEE 802.3 devices this counter must be equivalent to:
178710d5835SEric Dumazet  *
179710d5835SEric Dumazet  *    - 30.3.1.1.13 aCarrierSenseErrors
180710d5835SEric Dumazet  *
181710d5835SEric Dumazet  * @tx_fifo_errors: Number of frame transmission errors due to device
182710d5835SEric Dumazet  *   FIFO underrun / underflow. This condition occurs when the device
183710d5835SEric Dumazet  *   begins transmission of a frame but is unable to deliver the
184710d5835SEric Dumazet  *   entire frame to the transmitter in time for transmission.
185710d5835SEric Dumazet  *   Part of aggregate "carrier" errors in `/proc/net/dev`.
186710d5835SEric Dumazet  *
187710d5835SEric Dumazet  * @tx_heartbeat_errors: Number of Heartbeat / SQE Test errors for
188710d5835SEric Dumazet  *   old half-duplex Ethernet.
189710d5835SEric Dumazet  *   Part of aggregate "carrier" errors in `/proc/net/dev`.
190710d5835SEric Dumazet  *
191710d5835SEric Dumazet  *   For IEEE 802.3 devices possibly equivalent to:
192710d5835SEric Dumazet  *
193710d5835SEric Dumazet  *    - 30.3.2.1.4 aSQETestErrors
194710d5835SEric Dumazet  *
195710d5835SEric Dumazet  * @tx_window_errors: Number of frame transmission errors due
196710d5835SEric Dumazet  *   to late collisions (for Ethernet - after the first 64B of transmission).
197710d5835SEric Dumazet  *   Part of aggregate "carrier" errors in `/proc/net/dev`.
198710d5835SEric Dumazet  *
199710d5835SEric Dumazet  *   For IEEE 802.3 devices this counter must be equivalent to:
200710d5835SEric Dumazet  *
201710d5835SEric Dumazet  *    - 30.3.1.1.10 aLateCollisions
202710d5835SEric Dumazet  *
203710d5835SEric Dumazet  * @rx_compressed: Number of correctly received compressed packets.
204710d5835SEric Dumazet  *   This counters is only meaningful for interfaces which support
205710d5835SEric Dumazet  *   packet compression (e.g. CSLIP, PPP).
206710d5835SEric Dumazet  *
207710d5835SEric Dumazet  * @tx_compressed: Number of transmitted compressed packets.
208710d5835SEric Dumazet  *   This counters is only meaningful for interfaces which support
209710d5835SEric Dumazet  *   packet compression (e.g. CSLIP, PPP).
210710d5835SEric Dumazet  *
211710d5835SEric Dumazet  * @rx_nohandler: Number of packets received on the interface
212710d5835SEric Dumazet  *   but dropped by the networking stack because the device is
213710d5835SEric Dumazet  *   not designated to receive packets (e.g. backup link in a bond).
2145c1b994dSDaniel Borkmann  *
2155c1b994dSDaniel Borkmann  * @rx_otherhost_dropped: Number of packets dropped due to mismatch
2165c1b994dSDaniel Borkmann  *   in destination MAC address.
217710d5835SEric Dumazet  */
218dc2b9f19SEric Leblond struct rtnl_link_stats64 {
219710d5835SEric Dumazet 	__u64	rx_packets;
220710d5835SEric Dumazet 	__u64	tx_packets;
221710d5835SEric Dumazet 	__u64	rx_bytes;
222710d5835SEric Dumazet 	__u64	tx_bytes;
223710d5835SEric Dumazet 	__u64	rx_errors;
224710d5835SEric Dumazet 	__u64	tx_errors;
225710d5835SEric Dumazet 	__u64	rx_dropped;
226710d5835SEric Dumazet 	__u64	tx_dropped;
227710d5835SEric Dumazet 	__u64	multicast;
228dc2b9f19SEric Leblond 	__u64	collisions;
229dc2b9f19SEric Leblond 
230dc2b9f19SEric Leblond 	/* detailed rx_errors: */
231dc2b9f19SEric Leblond 	__u64	rx_length_errors;
232710d5835SEric Dumazet 	__u64	rx_over_errors;
233710d5835SEric Dumazet 	__u64	rx_crc_errors;
234710d5835SEric Dumazet 	__u64	rx_frame_errors;
235710d5835SEric Dumazet 	__u64	rx_fifo_errors;
236710d5835SEric Dumazet 	__u64	rx_missed_errors;
237dc2b9f19SEric Leblond 
238dc2b9f19SEric Leblond 	/* detailed tx_errors */
239dc2b9f19SEric Leblond 	__u64	tx_aborted_errors;
240dc2b9f19SEric Leblond 	__u64	tx_carrier_errors;
241dc2b9f19SEric Leblond 	__u64	tx_fifo_errors;
242dc2b9f19SEric Leblond 	__u64	tx_heartbeat_errors;
243dc2b9f19SEric Leblond 	__u64	tx_window_errors;
244dc2b9f19SEric Leblond 
245dc2b9f19SEric Leblond 	/* for cslip etc */
246dc2b9f19SEric Leblond 	__u64	rx_compressed;
247dc2b9f19SEric Leblond 	__u64	tx_compressed;
248710d5835SEric Dumazet 	__u64	rx_nohandler;
2495c1b994dSDaniel Borkmann 
2505c1b994dSDaniel Borkmann 	__u64	rx_otherhost_dropped;
2515c1b994dSDaniel Borkmann };
2525c1b994dSDaniel Borkmann 
2535c1b994dSDaniel Borkmann /* Subset of link stats useful for in-HW collection. Meaning of the fields is as
2545c1b994dSDaniel Borkmann  * for struct rtnl_link_stats64.
2555c1b994dSDaniel Borkmann  */
2565c1b994dSDaniel Borkmann struct rtnl_hw_stats64 {
2575c1b994dSDaniel Borkmann 	__u64	rx_packets;
2585c1b994dSDaniel Borkmann 	__u64	tx_packets;
2595c1b994dSDaniel Borkmann 	__u64	rx_bytes;
2605c1b994dSDaniel Borkmann 	__u64	tx_bytes;
2615c1b994dSDaniel Borkmann 	__u64	rx_errors;
2625c1b994dSDaniel Borkmann 	__u64	tx_errors;
2635c1b994dSDaniel Borkmann 	__u64	rx_dropped;
2645c1b994dSDaniel Borkmann 	__u64	tx_dropped;
2655c1b994dSDaniel Borkmann 	__u64	multicast;
266dc2b9f19SEric Leblond };
267dc2b9f19SEric Leblond 
268dc2b9f19SEric Leblond /* The struct should be in sync with struct ifmap */
269dc2b9f19SEric Leblond struct rtnl_link_ifmap {
270dc2b9f19SEric Leblond 	__u64	mem_start;
271dc2b9f19SEric Leblond 	__u64	mem_end;
272dc2b9f19SEric Leblond 	__u64	base_addr;
273dc2b9f19SEric Leblond 	__u16	irq;
274dc2b9f19SEric Leblond 	__u8	dma;
275dc2b9f19SEric Leblond 	__u8	port;
276dc2b9f19SEric Leblond };
277dc2b9f19SEric Leblond 
278dc2b9f19SEric Leblond /*
279dc2b9f19SEric Leblond  * IFLA_AF_SPEC
280dc2b9f19SEric Leblond  *   Contains nested attributes for address family specific attributes.
281dc2b9f19SEric Leblond  *   Each address family may create a attribute with the address family
282dc2b9f19SEric Leblond  *   number as type and create its own attribute structure in it.
283dc2b9f19SEric Leblond  *
284dc2b9f19SEric Leblond  *   Example:
285dc2b9f19SEric Leblond  *   [IFLA_AF_SPEC] = {
286dc2b9f19SEric Leblond  *       [AF_INET] = {
287dc2b9f19SEric Leblond  *           [IFLA_INET_CONF] = ...,
288dc2b9f19SEric Leblond  *       },
289dc2b9f19SEric Leblond  *       [AF_INET6] = {
290dc2b9f19SEric Leblond  *           [IFLA_INET6_FLAGS] = ...,
291dc2b9f19SEric Leblond  *           [IFLA_INET6_CONF] = ...,
292dc2b9f19SEric Leblond  *       }
293dc2b9f19SEric Leblond  *   }
294dc2b9f19SEric Leblond  */
295dc2b9f19SEric Leblond 
296dc2b9f19SEric Leblond enum {
297dc2b9f19SEric Leblond 	IFLA_UNSPEC,
298dc2b9f19SEric Leblond 	IFLA_ADDRESS,
299dc2b9f19SEric Leblond 	IFLA_BROADCAST,
300dc2b9f19SEric Leblond 	IFLA_IFNAME,
301dc2b9f19SEric Leblond 	IFLA_MTU,
302dc2b9f19SEric Leblond 	IFLA_LINK,
303dc2b9f19SEric Leblond 	IFLA_QDISC,
304dc2b9f19SEric Leblond 	IFLA_STATS,
305dc2b9f19SEric Leblond 	IFLA_COST,
306dc2b9f19SEric Leblond #define IFLA_COST IFLA_COST
307dc2b9f19SEric Leblond 	IFLA_PRIORITY,
308dc2b9f19SEric Leblond #define IFLA_PRIORITY IFLA_PRIORITY
309dc2b9f19SEric Leblond 	IFLA_MASTER,
310dc2b9f19SEric Leblond #define IFLA_MASTER IFLA_MASTER
311dc2b9f19SEric Leblond 	IFLA_WIRELESS,		/* Wireless Extension event - see wireless.h */
312dc2b9f19SEric Leblond #define IFLA_WIRELESS IFLA_WIRELESS
313dc2b9f19SEric Leblond 	IFLA_PROTINFO,		/* Protocol specific information for a link */
314dc2b9f19SEric Leblond #define IFLA_PROTINFO IFLA_PROTINFO
315dc2b9f19SEric Leblond 	IFLA_TXQLEN,
316dc2b9f19SEric Leblond #define IFLA_TXQLEN IFLA_TXQLEN
317dc2b9f19SEric Leblond 	IFLA_MAP,
318dc2b9f19SEric Leblond #define IFLA_MAP IFLA_MAP
319dc2b9f19SEric Leblond 	IFLA_WEIGHT,
320dc2b9f19SEric Leblond #define IFLA_WEIGHT IFLA_WEIGHT
321dc2b9f19SEric Leblond 	IFLA_OPERSTATE,
322dc2b9f19SEric Leblond 	IFLA_LINKMODE,
323dc2b9f19SEric Leblond 	IFLA_LINKINFO,
324dc2b9f19SEric Leblond #define IFLA_LINKINFO IFLA_LINKINFO
325dc2b9f19SEric Leblond 	IFLA_NET_NS_PID,
326dc2b9f19SEric Leblond 	IFLA_IFALIAS,
327dc2b9f19SEric Leblond 	IFLA_NUM_VF,		/* Number of VFs if device is SR-IOV PF */
328dc2b9f19SEric Leblond 	IFLA_VFINFO_LIST,
329dc2b9f19SEric Leblond 	IFLA_STATS64,
330dc2b9f19SEric Leblond 	IFLA_VF_PORTS,
331dc2b9f19SEric Leblond 	IFLA_PORT_SELF,
332dc2b9f19SEric Leblond 	IFLA_AF_SPEC,
333dc2b9f19SEric Leblond 	IFLA_GROUP,		/* Group the device belongs to */
334dc2b9f19SEric Leblond 	IFLA_NET_NS_FD,
335dc2b9f19SEric Leblond 	IFLA_EXT_MASK,		/* Extended info mask, VFs, etc */
336dc2b9f19SEric Leblond 	IFLA_PROMISCUITY,	/* Promiscuity count: > 0 means acts PROMISC */
337dc2b9f19SEric Leblond #define IFLA_PROMISCUITY IFLA_PROMISCUITY
338dc2b9f19SEric Leblond 	IFLA_NUM_TX_QUEUES,
339dc2b9f19SEric Leblond 	IFLA_NUM_RX_QUEUES,
340dc2b9f19SEric Leblond 	IFLA_CARRIER,
341dc2b9f19SEric Leblond 	IFLA_PHYS_PORT_ID,
342dc2b9f19SEric Leblond 	IFLA_CARRIER_CHANGES,
343dc2b9f19SEric Leblond 	IFLA_PHYS_SWITCH_ID,
344dc2b9f19SEric Leblond 	IFLA_LINK_NETNSID,
345dc2b9f19SEric Leblond 	IFLA_PHYS_PORT_NAME,
346dc2b9f19SEric Leblond 	IFLA_PROTO_DOWN,
347dc2b9f19SEric Leblond 	IFLA_GSO_MAX_SEGS,
348dc2b9f19SEric Leblond 	IFLA_GSO_MAX_SIZE,
349dc2b9f19SEric Leblond 	IFLA_PAD,
350dc2b9f19SEric Leblond 	IFLA_XDP,
351dc2b9f19SEric Leblond 	IFLA_EVENT,
352dc2b9f19SEric Leblond 	IFLA_NEW_NETNSID,
353dc2b9f19SEric Leblond 	IFLA_IF_NETNSID,
35419d8f1adSChristian Brauner 	IFLA_TARGET_NETNSID = IFLA_IF_NETNSID, /* new alias */
355dc2b9f19SEric Leblond 	IFLA_CARRIER_UP_COUNT,
356dc2b9f19SEric Leblond 	IFLA_CARRIER_DOWN_COUNT,
357f091f1d6SIngo Molnar 	IFLA_NEW_IFINDEX,
3585db48a8dSArnaldo Carvalho de Melo 	IFLA_MIN_MTU,
3595db48a8dSArnaldo Carvalho de Melo 	IFLA_MAX_MTU,
360bc3f2956SAndrii Nakryiko 	IFLA_PROP_LIST,
361bc3f2956SAndrii Nakryiko 	IFLA_ALT_IFNAME, /* Alternative ifname */
362533420a4SAndrii Nakryiko 	IFLA_PERM_ADDRESS,
363710d5835SEric Dumazet 	IFLA_PROTO_DOWN_REASON,
364710d5835SEric Dumazet 
365710d5835SEric Dumazet 	/* device (sysfs) name as parent, used instead
366710d5835SEric Dumazet 	 * of IFLA_LINK where there's no parent netdev
367710d5835SEric Dumazet 	 */
368710d5835SEric Dumazet 	IFLA_PARENT_DEV_NAME,
369710d5835SEric Dumazet 	IFLA_PARENT_DEV_BUS_NAME,
370eac1b93cSCoco Li 	IFLA_GRO_MAX_SIZE,
37189527be8SEric Dumazet 	IFLA_TSO_MAX_SIZE,
37289527be8SEric Dumazet 	IFLA_TSO_MAX_SEGS,
3735c1b994dSDaniel Borkmann 	IFLA_ALLMULTI,		/* Allmulti count: > 0 means acts ALLMULTI */
374710d5835SEric Dumazet 
3755c1b994dSDaniel Borkmann 	IFLA_DEVLINK_PORT,
3765c1b994dSDaniel Borkmann 
3775c1b994dSDaniel Borkmann 	IFLA_GSO_IPV4_MAX_SIZE,
3785c1b994dSDaniel Borkmann 	IFLA_GRO_IPV4_MAX_SIZE,
3795c1b994dSDaniel Borkmann 	IFLA_DPLL_PIN,
380f858cc9eSEric Dumazet 	IFLA_MAX_PACING_OFFLOAD_HORIZON,
381dc2b9f19SEric Leblond 	__IFLA_MAX
382dc2b9f19SEric Leblond };
383dc2b9f19SEric Leblond 
384dc2b9f19SEric Leblond 
385dc2b9f19SEric Leblond #define IFLA_MAX (__IFLA_MAX - 1)
386dc2b9f19SEric Leblond 
387710d5835SEric Dumazet enum {
388710d5835SEric Dumazet 	IFLA_PROTO_DOWN_REASON_UNSPEC,
389710d5835SEric Dumazet 	IFLA_PROTO_DOWN_REASON_MASK,	/* u32, mask for reason bits */
390710d5835SEric Dumazet 	IFLA_PROTO_DOWN_REASON_VALUE,   /* u32, reason bit value */
391710d5835SEric Dumazet 
392710d5835SEric Dumazet 	__IFLA_PROTO_DOWN_REASON_CNT,
393710d5835SEric Dumazet 	IFLA_PROTO_DOWN_REASON_MAX = __IFLA_PROTO_DOWN_REASON_CNT - 1
394710d5835SEric Dumazet };
395710d5835SEric Dumazet 
396dc2b9f19SEric Leblond /* backwards compatibility for userspace */
397dc2b9f19SEric Leblond #ifndef __KERNEL__
398dc2b9f19SEric Leblond #define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
399dc2b9f19SEric Leblond #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
400dc2b9f19SEric Leblond #endif
401dc2b9f19SEric Leblond 
402dc2b9f19SEric Leblond enum {
403dc2b9f19SEric Leblond 	IFLA_INET_UNSPEC,
404dc2b9f19SEric Leblond 	IFLA_INET_CONF,
405dc2b9f19SEric Leblond 	__IFLA_INET_MAX,
406dc2b9f19SEric Leblond };
407dc2b9f19SEric Leblond 
408dc2b9f19SEric Leblond #define IFLA_INET_MAX (__IFLA_INET_MAX - 1)
409dc2b9f19SEric Leblond 
410dc2b9f19SEric Leblond /* ifi_flags.
411dc2b9f19SEric Leblond 
412dc2b9f19SEric Leblond    IFF_* flags.
413dc2b9f19SEric Leblond 
414dc2b9f19SEric Leblond    The only change is:
415dc2b9f19SEric Leblond    IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
416dc2b9f19SEric Leblond    more not changeable by user. They describe link media
417dc2b9f19SEric Leblond    characteristics and set by device driver.
418dc2b9f19SEric Leblond 
419dc2b9f19SEric Leblond    Comments:
420dc2b9f19SEric Leblond    - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
421dc2b9f19SEric Leblond    - If neither of these three flags are set;
422dc2b9f19SEric Leblond      the interface is NBMA.
423dc2b9f19SEric Leblond 
424dc2b9f19SEric Leblond    - IFF_MULTICAST does not mean anything special:
425dc2b9f19SEric Leblond    multicasts can be used on all not-NBMA links.
426dc2b9f19SEric Leblond    IFF_MULTICAST means that this media uses special encapsulation
427dc2b9f19SEric Leblond    for multicast frames. Apparently, all IFF_POINTOPOINT and
428dc2b9f19SEric Leblond    IFF_BROADCAST devices are able to use multicasts too.
429dc2b9f19SEric Leblond  */
430dc2b9f19SEric Leblond 
431dc2b9f19SEric Leblond /* IFLA_LINK.
432dc2b9f19SEric Leblond    For usual devices it is equal ifi_index.
433dc2b9f19SEric Leblond    If it is a "virtual interface" (f.e. tunnel), ifi_link
434dc2b9f19SEric Leblond    can point to real physical interface (f.e. for bandwidth calculations),
435dc2b9f19SEric Leblond    or maybe 0, what means, that real media is unknown (usual
436dc2b9f19SEric Leblond    for IPIP tunnels, when route to endpoint is allowed to change)
437dc2b9f19SEric Leblond  */
438dc2b9f19SEric Leblond 
439dc2b9f19SEric Leblond /* Subtype attributes for IFLA_PROTINFO */
440dc2b9f19SEric Leblond enum {
441dc2b9f19SEric Leblond 	IFLA_INET6_UNSPEC,
442dc2b9f19SEric Leblond 	IFLA_INET6_FLAGS,	/* link flags			*/
443dc2b9f19SEric Leblond 	IFLA_INET6_CONF,	/* sysctl parameters		*/
444dc2b9f19SEric Leblond 	IFLA_INET6_STATS,	/* statistics			*/
445dc2b9f19SEric Leblond 	IFLA_INET6_MCAST,	/* MC things. What of them?	*/
446dc2b9f19SEric Leblond 	IFLA_INET6_CACHEINFO,	/* time values and max reasm size */
447dc2b9f19SEric Leblond 	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/
448dc2b9f19SEric Leblond 	IFLA_INET6_TOKEN,	/* device token			*/
449dc2b9f19SEric Leblond 	IFLA_INET6_ADDR_GEN_MODE, /* implicit address generator mode */
45049b99da2SRocco Yue 	IFLA_INET6_RA_MTU,	/* mtu carried in the RA message */
451dc2b9f19SEric Leblond 	__IFLA_INET6_MAX
452dc2b9f19SEric Leblond };
453dc2b9f19SEric Leblond 
454dc2b9f19SEric Leblond #define IFLA_INET6_MAX	(__IFLA_INET6_MAX - 1)
455dc2b9f19SEric Leblond 
456dc2b9f19SEric Leblond enum in6_addr_gen_mode {
457dc2b9f19SEric Leblond 	IN6_ADDR_GEN_MODE_EUI64,
458dc2b9f19SEric Leblond 	IN6_ADDR_GEN_MODE_NONE,
459dc2b9f19SEric Leblond 	IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
460dc2b9f19SEric Leblond 	IN6_ADDR_GEN_MODE_RANDOM,
461dc2b9f19SEric Leblond };
462dc2b9f19SEric Leblond 
463dc2b9f19SEric Leblond /* Bridge section */
464dc2b9f19SEric Leblond 
46510752583SDaniel Borkmann /**
46610752583SDaniel Borkmann  * DOC: Bridge enum definition
46710752583SDaniel Borkmann  *
46810752583SDaniel Borkmann  * Please *note* that the timer values in the following section are expected
46910752583SDaniel Borkmann  * in clock_t format, which is seconds multiplied by USER_HZ (generally
47010752583SDaniel Borkmann  * defined as 100).
47110752583SDaniel Borkmann  *
47210752583SDaniel Borkmann  * @IFLA_BR_FORWARD_DELAY
47310752583SDaniel Borkmann  *   The bridge forwarding delay is the time spent in LISTENING state
47410752583SDaniel Borkmann  *   (before moving to LEARNING) and in LEARNING state (before moving
47510752583SDaniel Borkmann  *   to FORWARDING). Only relevant if STP is enabled.
47610752583SDaniel Borkmann  *
47710752583SDaniel Borkmann  *   The valid values are between (2 * USER_HZ) and (30 * USER_HZ).
47810752583SDaniel Borkmann  *   The default value is (15 * USER_HZ).
47910752583SDaniel Borkmann  *
48010752583SDaniel Borkmann  * @IFLA_BR_HELLO_TIME
48110752583SDaniel Borkmann  *   The time between hello packets sent by the bridge, when it is a root
48210752583SDaniel Borkmann  *   bridge or a designated bridge. Only relevant if STP is enabled.
48310752583SDaniel Borkmann  *
48410752583SDaniel Borkmann  *   The valid values are between (1 * USER_HZ) and (10 * USER_HZ).
48510752583SDaniel Borkmann  *   The default value is (2 * USER_HZ).
48610752583SDaniel Borkmann  *
48710752583SDaniel Borkmann  * @IFLA_BR_MAX_AGE
48810752583SDaniel Borkmann  *   The hello packet timeout is the time until another bridge in the
48910752583SDaniel Borkmann  *   spanning tree is assumed to be dead, after reception of its last hello
49010752583SDaniel Borkmann  *   message. Only relevant if STP is enabled.
49110752583SDaniel Borkmann  *
49210752583SDaniel Borkmann  *   The valid values are between (6 * USER_HZ) and (40 * USER_HZ).
49310752583SDaniel Borkmann  *   The default value is (20 * USER_HZ).
49410752583SDaniel Borkmann  *
49510752583SDaniel Borkmann  * @IFLA_BR_AGEING_TIME
49610752583SDaniel Borkmann  *   Configure the bridge's FDB entries aging time. It is the time a MAC
49710752583SDaniel Borkmann  *   address will be kept in the FDB after a packet has been received from
49810752583SDaniel Borkmann  *   that address. After this time has passed, entries are cleaned up.
49910752583SDaniel Borkmann  *   Allow values outside the 802.1 standard specification for special cases:
50010752583SDaniel Borkmann  *
50110752583SDaniel Borkmann  *     * 0 - entry never ages (all permanent)
50210752583SDaniel Borkmann  *     * 1 - entry disappears (no persistence)
50310752583SDaniel Borkmann  *
50410752583SDaniel Borkmann  *   The default value is (300 * USER_HZ).
50510752583SDaniel Borkmann  *
50610752583SDaniel Borkmann  * @IFLA_BR_STP_STATE
50710752583SDaniel Borkmann  *   Turn spanning tree protocol on (*IFLA_BR_STP_STATE* > 0) or off
50810752583SDaniel Borkmann  *   (*IFLA_BR_STP_STATE* == 0) for this bridge.
50910752583SDaniel Borkmann  *
51010752583SDaniel Borkmann  *   The default value is 0 (disabled).
51110752583SDaniel Borkmann  *
51210752583SDaniel Borkmann  * @IFLA_BR_PRIORITY
51310752583SDaniel Borkmann  *   Set this bridge's spanning tree priority, used during STP root bridge
51410752583SDaniel Borkmann  *   election.
51510752583SDaniel Borkmann  *
51610752583SDaniel Borkmann  *   The valid values are between 0 and 65535.
51710752583SDaniel Borkmann  *
51810752583SDaniel Borkmann  * @IFLA_BR_VLAN_FILTERING
51910752583SDaniel Borkmann  *   Turn VLAN filtering on (*IFLA_BR_VLAN_FILTERING* > 0) or off
52010752583SDaniel Borkmann  *   (*IFLA_BR_VLAN_FILTERING* == 0). When disabled, the bridge will not
52110752583SDaniel Borkmann  *   consider the VLAN tag when handling packets.
52210752583SDaniel Borkmann  *
52310752583SDaniel Borkmann  *   The default value is 0 (disabled).
52410752583SDaniel Borkmann  *
52510752583SDaniel Borkmann  * @IFLA_BR_VLAN_PROTOCOL
52610752583SDaniel Borkmann  *   Set the protocol used for VLAN filtering.
52710752583SDaniel Borkmann  *
52810752583SDaniel Borkmann  *   The valid values are 0x8100(802.1Q) or 0x88A8(802.1AD). The default value
52910752583SDaniel Borkmann  *   is 0x8100(802.1Q).
53010752583SDaniel Borkmann  *
53110752583SDaniel Borkmann  * @IFLA_BR_GROUP_FWD_MASK
53210752583SDaniel Borkmann  *   The group forwarding mask. This is the bitmask that is applied to
53310752583SDaniel Borkmann  *   decide whether to forward incoming frames destined to link-local
53410752583SDaniel Borkmann  *   addresses (of the form 01:80:C2:00:00:0X).
53510752583SDaniel Borkmann  *
53610752583SDaniel Borkmann  *   The default value is 0, which means the bridge does not forward any
53710752583SDaniel Borkmann  *   link-local frames coming on this port.
53810752583SDaniel Borkmann  *
53910752583SDaniel Borkmann  * @IFLA_BR_ROOT_ID
54010752583SDaniel Borkmann  *   The bridge root id, read only.
54110752583SDaniel Borkmann  *
54210752583SDaniel Borkmann  * @IFLA_BR_BRIDGE_ID
54310752583SDaniel Borkmann  *   The bridge id, read only.
54410752583SDaniel Borkmann  *
54510752583SDaniel Borkmann  * @IFLA_BR_ROOT_PORT
54610752583SDaniel Borkmann  *   The bridge root port, read only.
54710752583SDaniel Borkmann  *
54810752583SDaniel Borkmann  * @IFLA_BR_ROOT_PATH_COST
54910752583SDaniel Borkmann  *   The bridge root path cost, read only.
55010752583SDaniel Borkmann  *
55110752583SDaniel Borkmann  * @IFLA_BR_TOPOLOGY_CHANGE
55210752583SDaniel Borkmann  *   The bridge topology change, read only.
55310752583SDaniel Borkmann  *
55410752583SDaniel Borkmann  * @IFLA_BR_TOPOLOGY_CHANGE_DETECTED
55510752583SDaniel Borkmann  *   The bridge topology change detected, read only.
55610752583SDaniel Borkmann  *
55710752583SDaniel Borkmann  * @IFLA_BR_HELLO_TIMER
55810752583SDaniel Borkmann  *   The bridge hello timer, read only.
55910752583SDaniel Borkmann  *
56010752583SDaniel Borkmann  * @IFLA_BR_TCN_TIMER
56110752583SDaniel Borkmann  *   The bridge tcn timer, read only.
56210752583SDaniel Borkmann  *
56310752583SDaniel Borkmann  * @IFLA_BR_TOPOLOGY_CHANGE_TIMER
56410752583SDaniel Borkmann  *   The bridge topology change timer, read only.
56510752583SDaniel Borkmann  *
56610752583SDaniel Borkmann  * @IFLA_BR_GC_TIMER
56710752583SDaniel Borkmann  *   The bridge gc timer, read only.
56810752583SDaniel Borkmann  *
56910752583SDaniel Borkmann  * @IFLA_BR_GROUP_ADDR
57010752583SDaniel Borkmann  *   Set the MAC address of the multicast group this bridge uses for STP.
57110752583SDaniel Borkmann  *   The address must be a link-local address in standard Ethernet MAC address
57210752583SDaniel Borkmann  *   format. It is an address of the form 01:80:C2:00:00:0X, with X in [0, 4..f].
57310752583SDaniel Borkmann  *
57410752583SDaniel Borkmann  *   The default value is 0.
57510752583SDaniel Borkmann  *
57610752583SDaniel Borkmann  * @IFLA_BR_FDB_FLUSH
57710752583SDaniel Borkmann  *   Flush bridge's fdb dynamic entries.
57810752583SDaniel Borkmann  *
57910752583SDaniel Borkmann  * @IFLA_BR_MCAST_ROUTER
58010752583SDaniel Borkmann  *   Set bridge's multicast router if IGMP snooping is enabled.
58110752583SDaniel Borkmann  *   The valid values are:
58210752583SDaniel Borkmann  *
58310752583SDaniel Borkmann  *     * 0 - disabled.
58410752583SDaniel Borkmann  *     * 1 - automatic (queried).
58510752583SDaniel Borkmann  *     * 2 - permanently enabled.
58610752583SDaniel Borkmann  *
58710752583SDaniel Borkmann  *   The default value is 1.
58810752583SDaniel Borkmann  *
58910752583SDaniel Borkmann  * @IFLA_BR_MCAST_SNOOPING
59010752583SDaniel Borkmann  *   Turn multicast snooping on (*IFLA_BR_MCAST_SNOOPING* > 0) or off
59110752583SDaniel Borkmann  *   (*IFLA_BR_MCAST_SNOOPING* == 0).
59210752583SDaniel Borkmann  *
59310752583SDaniel Borkmann  *   The default value is 1.
59410752583SDaniel Borkmann  *
59510752583SDaniel Borkmann  * @IFLA_BR_MCAST_QUERY_USE_IFADDR
59610752583SDaniel Borkmann  *   If enabled use the bridge's own IP address as source address for IGMP
59710752583SDaniel Borkmann  *   queries (*IFLA_BR_MCAST_QUERY_USE_IFADDR* > 0) or the default of 0.0.0.0
59810752583SDaniel Borkmann  *   (*IFLA_BR_MCAST_QUERY_USE_IFADDR* == 0).
59910752583SDaniel Borkmann  *
60010752583SDaniel Borkmann  *   The default value is 0 (disabled).
60110752583SDaniel Borkmann  *
60210752583SDaniel Borkmann  * @IFLA_BR_MCAST_QUERIER
60310752583SDaniel Borkmann  *   Enable (*IFLA_BR_MULTICAST_QUERIER* > 0) or disable
60410752583SDaniel Borkmann  *   (*IFLA_BR_MULTICAST_QUERIER* == 0) IGMP querier, ie sending of multicast
60510752583SDaniel Borkmann  *   queries by the bridge.
60610752583SDaniel Borkmann  *
60710752583SDaniel Borkmann  *   The default value is 0 (disabled).
60810752583SDaniel Borkmann  *
60910752583SDaniel Borkmann  * @IFLA_BR_MCAST_HASH_ELASTICITY
61010752583SDaniel Borkmann  *   Set multicast database hash elasticity, It is the maximum chain length in
61110752583SDaniel Borkmann  *   the multicast hash table. This attribute is *deprecated* and the value
61210752583SDaniel Borkmann  *   is always 16.
61310752583SDaniel Borkmann  *
61410752583SDaniel Borkmann  * @IFLA_BR_MCAST_HASH_MAX
61510752583SDaniel Borkmann  *   Set maximum size of the multicast hash table
61610752583SDaniel Borkmann  *
61710752583SDaniel Borkmann  *   The default value is 4096, the value must be a power of 2.
61810752583SDaniel Borkmann  *
61910752583SDaniel Borkmann  * @IFLA_BR_MCAST_LAST_MEMBER_CNT
62010752583SDaniel Borkmann  *   The Last Member Query Count is the number of Group-Specific Queries
62110752583SDaniel Borkmann  *   sent before the router assumes there are no local members. The Last
62210752583SDaniel Borkmann  *   Member Query Count is also the number of Group-and-Source-Specific
62310752583SDaniel Borkmann  *   Queries sent before the router assumes there are no listeners for a
62410752583SDaniel Borkmann  *   particular source.
62510752583SDaniel Borkmann  *
62610752583SDaniel Borkmann  *   The default value is 2.
62710752583SDaniel Borkmann  *
62810752583SDaniel Borkmann  * @IFLA_BR_MCAST_STARTUP_QUERY_CNT
62910752583SDaniel Borkmann  *   The Startup Query Count is the number of Queries sent out on startup,
63010752583SDaniel Borkmann  *   separated by the Startup Query Interval.
63110752583SDaniel Borkmann  *
63210752583SDaniel Borkmann  *   The default value is 2.
63310752583SDaniel Borkmann  *
63410752583SDaniel Borkmann  * @IFLA_BR_MCAST_LAST_MEMBER_INTVL
63510752583SDaniel Borkmann  *   The Last Member Query Interval is the Max Response Time inserted into
63610752583SDaniel Borkmann  *   Group-Specific Queries sent in response to Leave Group messages, and
63710752583SDaniel Borkmann  *   is also the amount of time between Group-Specific Query messages.
63810752583SDaniel Borkmann  *
63910752583SDaniel Borkmann  *   The default value is (1 * USER_HZ).
64010752583SDaniel Borkmann  *
64110752583SDaniel Borkmann  * @IFLA_BR_MCAST_MEMBERSHIP_INTVL
64210752583SDaniel Borkmann  *   The interval after which the bridge will leave a group, if no membership
64310752583SDaniel Borkmann  *   reports for this group are received.
64410752583SDaniel Borkmann  *
64510752583SDaniel Borkmann  *   The default value is (260 * USER_HZ).
64610752583SDaniel Borkmann  *
64710752583SDaniel Borkmann  * @IFLA_BR_MCAST_QUERIER_INTVL
64810752583SDaniel Borkmann  *   The interval between queries sent by other routers. if no queries are
64910752583SDaniel Borkmann  *   seen after this delay has passed, the bridge will start to send its own
65010752583SDaniel Borkmann  *   queries (as if *IFLA_BR_MCAST_QUERIER_INTVL* was enabled).
65110752583SDaniel Borkmann  *
65210752583SDaniel Borkmann  *   The default value is (255 * USER_HZ).
65310752583SDaniel Borkmann  *
65410752583SDaniel Borkmann  * @IFLA_BR_MCAST_QUERY_INTVL
65510752583SDaniel Borkmann  *   The Query Interval is the interval between General Queries sent by
65610752583SDaniel Borkmann  *   the Querier.
65710752583SDaniel Borkmann  *
65810752583SDaniel Borkmann  *   The default value is (125 * USER_HZ). The minimum value is (1 * USER_HZ).
65910752583SDaniel Borkmann  *
66010752583SDaniel Borkmann  * @IFLA_BR_MCAST_QUERY_RESPONSE_INTVL
66110752583SDaniel Borkmann  *   The Max Response Time used to calculate the Max Resp Code inserted
66210752583SDaniel Borkmann  *   into the periodic General Queries.
66310752583SDaniel Borkmann  *
66410752583SDaniel Borkmann  *   The default value is (10 * USER_HZ).
66510752583SDaniel Borkmann  *
66610752583SDaniel Borkmann  * @IFLA_BR_MCAST_STARTUP_QUERY_INTVL
66710752583SDaniel Borkmann  *   The interval between queries in the startup phase.
66810752583SDaniel Borkmann  *
66910752583SDaniel Borkmann  *   The default value is (125 * USER_HZ) / 4. The minimum value is (1 * USER_HZ).
67010752583SDaniel Borkmann  *
67110752583SDaniel Borkmann  * @IFLA_BR_NF_CALL_IPTABLES
67210752583SDaniel Borkmann  *   Enable (*NF_CALL_IPTABLES* > 0) or disable (*NF_CALL_IPTABLES* == 0)
67310752583SDaniel Borkmann  *   iptables hooks on the bridge.
67410752583SDaniel Borkmann  *
67510752583SDaniel Borkmann  *   The default value is 0 (disabled).
67610752583SDaniel Borkmann  *
67710752583SDaniel Borkmann  * @IFLA_BR_NF_CALL_IP6TABLES
67810752583SDaniel Borkmann  *   Enable (*NF_CALL_IP6TABLES* > 0) or disable (*NF_CALL_IP6TABLES* == 0)
67910752583SDaniel Borkmann  *   ip6tables hooks on the bridge.
68010752583SDaniel Borkmann  *
68110752583SDaniel Borkmann  *   The default value is 0 (disabled).
68210752583SDaniel Borkmann  *
68310752583SDaniel Borkmann  * @IFLA_BR_NF_CALL_ARPTABLES
68410752583SDaniel Borkmann  *   Enable (*NF_CALL_ARPTABLES* > 0) or disable (*NF_CALL_ARPTABLES* == 0)
68510752583SDaniel Borkmann  *   arptables hooks on the bridge.
68610752583SDaniel Borkmann  *
68710752583SDaniel Borkmann  *   The default value is 0 (disabled).
68810752583SDaniel Borkmann  *
68910752583SDaniel Borkmann  * @IFLA_BR_VLAN_DEFAULT_PVID
69010752583SDaniel Borkmann  *   VLAN ID applied to untagged and priority-tagged incoming packets.
69110752583SDaniel Borkmann  *
69210752583SDaniel Borkmann  *   The default value is 1. Setting to the special value 0 makes all ports of
69310752583SDaniel Borkmann  *   this bridge not have a PVID by default, which means that they will
69410752583SDaniel Borkmann  *   not accept VLAN-untagged traffic.
69510752583SDaniel Borkmann  *
69610752583SDaniel Borkmann  * @IFLA_BR_PAD
69710752583SDaniel Borkmann  *   Bridge attribute padding type for netlink message.
69810752583SDaniel Borkmann  *
69910752583SDaniel Borkmann  * @IFLA_BR_VLAN_STATS_ENABLED
70010752583SDaniel Borkmann  *   Enable (*IFLA_BR_VLAN_STATS_ENABLED* == 1) or disable
70110752583SDaniel Borkmann  *   (*IFLA_BR_VLAN_STATS_ENABLED* == 0) per-VLAN stats accounting.
70210752583SDaniel Borkmann  *
70310752583SDaniel Borkmann  *   The default value is 0 (disabled).
70410752583SDaniel Borkmann  *
70510752583SDaniel Borkmann  * @IFLA_BR_MCAST_STATS_ENABLED
70610752583SDaniel Borkmann  *   Enable (*IFLA_BR_MCAST_STATS_ENABLED* > 0) or disable
70710752583SDaniel Borkmann  *   (*IFLA_BR_MCAST_STATS_ENABLED* == 0) multicast (IGMP/MLD) stats
70810752583SDaniel Borkmann  *   accounting.
70910752583SDaniel Borkmann  *
71010752583SDaniel Borkmann  *   The default value is 0 (disabled).
71110752583SDaniel Borkmann  *
71210752583SDaniel Borkmann  * @IFLA_BR_MCAST_IGMP_VERSION
71310752583SDaniel Borkmann  *   Set the IGMP version.
71410752583SDaniel Borkmann  *
71510752583SDaniel Borkmann  *   The valid values are 2 and 3. The default value is 2.
71610752583SDaniel Borkmann  *
71710752583SDaniel Borkmann  * @IFLA_BR_MCAST_MLD_VERSION
71810752583SDaniel Borkmann  *   Set the MLD version.
71910752583SDaniel Borkmann  *
72010752583SDaniel Borkmann  *   The valid values are 1 and 2. The default value is 1.
72110752583SDaniel Borkmann  *
72210752583SDaniel Borkmann  * @IFLA_BR_VLAN_STATS_PER_PORT
72310752583SDaniel Borkmann  *   Enable (*IFLA_BR_VLAN_STATS_PER_PORT* == 1) or disable
72410752583SDaniel Borkmann  *   (*IFLA_BR_VLAN_STATS_PER_PORT* == 0) per-VLAN per-port stats accounting.
72510752583SDaniel Borkmann  *   Can be changed only when there are no port VLANs configured.
72610752583SDaniel Borkmann  *
72710752583SDaniel Borkmann  *   The default value is 0 (disabled).
72810752583SDaniel Borkmann  *
72910752583SDaniel Borkmann  * @IFLA_BR_MULTI_BOOLOPT
73010752583SDaniel Borkmann  *   The multi_boolopt is used to control new boolean options to avoid adding
73110752583SDaniel Borkmann  *   new netlink attributes. You can look at ``enum br_boolopt_id`` for those
73210752583SDaniel Borkmann  *   options.
73310752583SDaniel Borkmann  *
73410752583SDaniel Borkmann  * @IFLA_BR_MCAST_QUERIER_STATE
73510752583SDaniel Borkmann  *   Bridge mcast querier states, read only.
73610752583SDaniel Borkmann  *
73710752583SDaniel Borkmann  * @IFLA_BR_FDB_N_LEARNED
73810752583SDaniel Borkmann  *   The number of dynamically learned FDB entries for the current bridge,
73910752583SDaniel Borkmann  *   read only.
74010752583SDaniel Borkmann  *
74110752583SDaniel Borkmann  * @IFLA_BR_FDB_MAX_LEARNED
74210752583SDaniel Borkmann  *   Set the number of max dynamically learned FDB entries for the current
74310752583SDaniel Borkmann  *   bridge.
74410752583SDaniel Borkmann  */
745dc2b9f19SEric Leblond enum {
746dc2b9f19SEric Leblond 	IFLA_BR_UNSPEC,
747dc2b9f19SEric Leblond 	IFLA_BR_FORWARD_DELAY,
748dc2b9f19SEric Leblond 	IFLA_BR_HELLO_TIME,
749dc2b9f19SEric Leblond 	IFLA_BR_MAX_AGE,
750dc2b9f19SEric Leblond 	IFLA_BR_AGEING_TIME,
751dc2b9f19SEric Leblond 	IFLA_BR_STP_STATE,
752dc2b9f19SEric Leblond 	IFLA_BR_PRIORITY,
753dc2b9f19SEric Leblond 	IFLA_BR_VLAN_FILTERING,
754dc2b9f19SEric Leblond 	IFLA_BR_VLAN_PROTOCOL,
755dc2b9f19SEric Leblond 	IFLA_BR_GROUP_FWD_MASK,
756dc2b9f19SEric Leblond 	IFLA_BR_ROOT_ID,
757dc2b9f19SEric Leblond 	IFLA_BR_BRIDGE_ID,
758dc2b9f19SEric Leblond 	IFLA_BR_ROOT_PORT,
759dc2b9f19SEric Leblond 	IFLA_BR_ROOT_PATH_COST,
760dc2b9f19SEric Leblond 	IFLA_BR_TOPOLOGY_CHANGE,
761dc2b9f19SEric Leblond 	IFLA_BR_TOPOLOGY_CHANGE_DETECTED,
762dc2b9f19SEric Leblond 	IFLA_BR_HELLO_TIMER,
763dc2b9f19SEric Leblond 	IFLA_BR_TCN_TIMER,
764dc2b9f19SEric Leblond 	IFLA_BR_TOPOLOGY_CHANGE_TIMER,
765dc2b9f19SEric Leblond 	IFLA_BR_GC_TIMER,
766dc2b9f19SEric Leblond 	IFLA_BR_GROUP_ADDR,
767dc2b9f19SEric Leblond 	IFLA_BR_FDB_FLUSH,
768dc2b9f19SEric Leblond 	IFLA_BR_MCAST_ROUTER,
769dc2b9f19SEric Leblond 	IFLA_BR_MCAST_SNOOPING,
770dc2b9f19SEric Leblond 	IFLA_BR_MCAST_QUERY_USE_IFADDR,
771dc2b9f19SEric Leblond 	IFLA_BR_MCAST_QUERIER,
772dc2b9f19SEric Leblond 	IFLA_BR_MCAST_HASH_ELASTICITY,
773dc2b9f19SEric Leblond 	IFLA_BR_MCAST_HASH_MAX,
774dc2b9f19SEric Leblond 	IFLA_BR_MCAST_LAST_MEMBER_CNT,
775dc2b9f19SEric Leblond 	IFLA_BR_MCAST_STARTUP_QUERY_CNT,
776dc2b9f19SEric Leblond 	IFLA_BR_MCAST_LAST_MEMBER_INTVL,
777dc2b9f19SEric Leblond 	IFLA_BR_MCAST_MEMBERSHIP_INTVL,
778dc2b9f19SEric Leblond 	IFLA_BR_MCAST_QUERIER_INTVL,
779dc2b9f19SEric Leblond 	IFLA_BR_MCAST_QUERY_INTVL,
780dc2b9f19SEric Leblond 	IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
781dc2b9f19SEric Leblond 	IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
782dc2b9f19SEric Leblond 	IFLA_BR_NF_CALL_IPTABLES,
783dc2b9f19SEric Leblond 	IFLA_BR_NF_CALL_IP6TABLES,
784dc2b9f19SEric Leblond 	IFLA_BR_NF_CALL_ARPTABLES,
785dc2b9f19SEric Leblond 	IFLA_BR_VLAN_DEFAULT_PVID,
786dc2b9f19SEric Leblond 	IFLA_BR_PAD,
787dc2b9f19SEric Leblond 	IFLA_BR_VLAN_STATS_ENABLED,
788dc2b9f19SEric Leblond 	IFLA_BR_MCAST_STATS_ENABLED,
789dc2b9f19SEric Leblond 	IFLA_BR_MCAST_IGMP_VERSION,
790dc2b9f19SEric Leblond 	IFLA_BR_MCAST_MLD_VERSION,
79176b0b801SArnaldo Carvalho de Melo 	IFLA_BR_VLAN_STATS_PER_PORT,
792498c203dSArnaldo Carvalho de Melo 	IFLA_BR_MULTI_BOOLOPT,
793710d5835SEric Dumazet 	IFLA_BR_MCAST_QUERIER_STATE,
79410752583SDaniel Borkmann 	IFLA_BR_FDB_N_LEARNED,
79510752583SDaniel Borkmann 	IFLA_BR_FDB_MAX_LEARNED,
796dc2b9f19SEric Leblond 	__IFLA_BR_MAX,
797dc2b9f19SEric Leblond };
798dc2b9f19SEric Leblond 
799dc2b9f19SEric Leblond #define IFLA_BR_MAX	(__IFLA_BR_MAX - 1)
800dc2b9f19SEric Leblond 
801dc2b9f19SEric Leblond struct ifla_bridge_id {
802dc2b9f19SEric Leblond 	__u8	prio[2];
803dc2b9f19SEric Leblond 	__u8	addr[6]; /* ETH_ALEN */
804dc2b9f19SEric Leblond };
805dc2b9f19SEric Leblond 
80610752583SDaniel Borkmann /**
80710752583SDaniel Borkmann  * DOC: Bridge mode enum definition
80810752583SDaniel Borkmann  *
80910752583SDaniel Borkmann  * @BRIDGE_MODE_HAIRPIN
81010752583SDaniel Borkmann  *   Controls whether traffic may be sent back out of the port on which it
81110752583SDaniel Borkmann  *   was received. This option is also called reflective relay mode, and is
81210752583SDaniel Borkmann  *   used to support basic VEPA (Virtual Ethernet Port Aggregator)
81310752583SDaniel Borkmann  *   capabilities. By default, this flag is turned off and the bridge will
81410752583SDaniel Borkmann  *   not forward traffic back out of the receiving port.
81510752583SDaniel Borkmann  */
816dc2b9f19SEric Leblond enum {
817dc2b9f19SEric Leblond 	BRIDGE_MODE_UNSPEC,
818dc2b9f19SEric Leblond 	BRIDGE_MODE_HAIRPIN,
819dc2b9f19SEric Leblond };
820dc2b9f19SEric Leblond 
82110752583SDaniel Borkmann /**
82210752583SDaniel Borkmann  * DOC: Bridge port enum definition
82310752583SDaniel Borkmann  *
82410752583SDaniel Borkmann  * @IFLA_BRPORT_STATE
82510752583SDaniel Borkmann  *   The operation state of the port. Here are the valid values.
82610752583SDaniel Borkmann  *
82710752583SDaniel Borkmann  *     * 0 - port is in STP *DISABLED* state. Make this port completely
82810752583SDaniel Borkmann  *       inactive for STP. This is also called BPDU filter and could be used
82910752583SDaniel Borkmann  *       to disable STP on an untrusted port, like a leaf virtual device.
83010752583SDaniel Borkmann  *       The traffic forwarding is also stopped on this port.
83110752583SDaniel Borkmann  *     * 1 - port is in STP *LISTENING* state. Only valid if STP is enabled
83210752583SDaniel Borkmann  *       on the bridge. In this state the port listens for STP BPDUs and
83310752583SDaniel Borkmann  *       drops all other traffic frames.
83410752583SDaniel Borkmann  *     * 2 - port is in STP *LEARNING* state. Only valid if STP is enabled on
83510752583SDaniel Borkmann  *       the bridge. In this state the port will accept traffic only for the
83610752583SDaniel Borkmann  *       purpose of updating MAC address tables.
83710752583SDaniel Borkmann  *     * 3 - port is in STP *FORWARDING* state. Port is fully active.
83810752583SDaniel Borkmann  *     * 4 - port is in STP *BLOCKING* state. Only valid if STP is enabled on
83910752583SDaniel Borkmann  *       the bridge. This state is used during the STP election process.
84010752583SDaniel Borkmann  *       In this state, port will only process STP BPDUs.
84110752583SDaniel Borkmann  *
84210752583SDaniel Borkmann  * @IFLA_BRPORT_PRIORITY
84310752583SDaniel Borkmann  *   The STP port priority. The valid values are between 0 and 255.
84410752583SDaniel Borkmann  *
84510752583SDaniel Borkmann  * @IFLA_BRPORT_COST
84610752583SDaniel Borkmann  *   The STP path cost of the port. The valid values are between 1 and 65535.
84710752583SDaniel Borkmann  *
84810752583SDaniel Borkmann  * @IFLA_BRPORT_MODE
84910752583SDaniel Borkmann  *   Set the bridge port mode. See *BRIDGE_MODE_HAIRPIN* for more details.
85010752583SDaniel Borkmann  *
85110752583SDaniel Borkmann  * @IFLA_BRPORT_GUARD
85210752583SDaniel Borkmann  *   Controls whether STP BPDUs will be processed by the bridge port. By
85310752583SDaniel Borkmann  *   default, the flag is turned off to allow BPDU processing. Turning this
85410752583SDaniel Borkmann  *   flag on will disable the bridge port if a STP BPDU packet is received.
85510752583SDaniel Borkmann  *
85610752583SDaniel Borkmann  *   If the bridge has Spanning Tree enabled, hostile devices on the network
85710752583SDaniel Borkmann  *   may send BPDU on a port and cause network failure. Setting *guard on*
85810752583SDaniel Borkmann  *   will detect and stop this by disabling the port. The port will be
85910752583SDaniel Borkmann  *   restarted if the link is brought down, or removed and reattached.
86010752583SDaniel Borkmann  *
86110752583SDaniel Borkmann  * @IFLA_BRPORT_PROTECT
86210752583SDaniel Borkmann  *   Controls whether a given port is allowed to become a root port or not.
86310752583SDaniel Borkmann  *   Only used when STP is enabled on the bridge. By default the flag is off.
86410752583SDaniel Borkmann  *
86510752583SDaniel Borkmann  *   This feature is also called root port guard. If BPDU is received from a
86610752583SDaniel Borkmann  *   leaf (edge) port, it should not be elected as root port. This could
86710752583SDaniel Borkmann  *   be used if using STP on a bridge and the downstream bridges are not fully
86810752583SDaniel Borkmann  *   trusted; this prevents a hostile guest from rerouting traffic.
86910752583SDaniel Borkmann  *
87010752583SDaniel Borkmann  * @IFLA_BRPORT_FAST_LEAVE
87110752583SDaniel Borkmann  *   This flag allows the bridge to immediately stop multicast traffic
87210752583SDaniel Borkmann  *   forwarding on a port that receives an IGMP Leave message. It is only used
87310752583SDaniel Borkmann  *   when IGMP snooping is enabled on the bridge. By default the flag is off.
87410752583SDaniel Borkmann  *
87510752583SDaniel Borkmann  * @IFLA_BRPORT_LEARNING
87610752583SDaniel Borkmann  *   Controls whether a given port will learn *source* MAC addresses from
87710752583SDaniel Borkmann  *   received traffic or not. Also controls whether dynamic FDB entries
87810752583SDaniel Borkmann  *   (which can also be added by software) will be refreshed by incoming
87910752583SDaniel Borkmann  *   traffic. By default this flag is on.
88010752583SDaniel Borkmann  *
88110752583SDaniel Borkmann  * @IFLA_BRPORT_UNICAST_FLOOD
88210752583SDaniel Borkmann  *   Controls whether unicast traffic for which there is no FDB entry will
88310752583SDaniel Borkmann  *   be flooded towards this port. By default this flag is on.
88410752583SDaniel Borkmann  *
88510752583SDaniel Borkmann  * @IFLA_BRPORT_PROXYARP
88610752583SDaniel Borkmann  *   Enable proxy ARP on this port.
88710752583SDaniel Borkmann  *
88810752583SDaniel Borkmann  * @IFLA_BRPORT_LEARNING_SYNC
88910752583SDaniel Borkmann  *   Controls whether a given port will sync MAC addresses learned on device
89010752583SDaniel Borkmann  *   port to bridge FDB.
89110752583SDaniel Borkmann  *
89210752583SDaniel Borkmann  * @IFLA_BRPORT_PROXYARP_WIFI
89310752583SDaniel Borkmann  *   Enable proxy ARP on this port which meets extended requirements by
89410752583SDaniel Borkmann  *   IEEE 802.11 and Hotspot 2.0 specifications.
89510752583SDaniel Borkmann  *
89610752583SDaniel Borkmann  * @IFLA_BRPORT_ROOT_ID
89710752583SDaniel Borkmann  *
89810752583SDaniel Borkmann  * @IFLA_BRPORT_BRIDGE_ID
89910752583SDaniel Borkmann  *
90010752583SDaniel Borkmann  * @IFLA_BRPORT_DESIGNATED_PORT
90110752583SDaniel Borkmann  *
90210752583SDaniel Borkmann  * @IFLA_BRPORT_DESIGNATED_COST
90310752583SDaniel Borkmann  *
90410752583SDaniel Borkmann  * @IFLA_BRPORT_ID
90510752583SDaniel Borkmann  *
90610752583SDaniel Borkmann  * @IFLA_BRPORT_NO
90710752583SDaniel Borkmann  *
90810752583SDaniel Borkmann  * @IFLA_BRPORT_TOPOLOGY_CHANGE_ACK
90910752583SDaniel Borkmann  *
91010752583SDaniel Borkmann  * @IFLA_BRPORT_CONFIG_PENDING
91110752583SDaniel Borkmann  *
91210752583SDaniel Borkmann  * @IFLA_BRPORT_MESSAGE_AGE_TIMER
91310752583SDaniel Borkmann  *
91410752583SDaniel Borkmann  * @IFLA_BRPORT_FORWARD_DELAY_TIMER
91510752583SDaniel Borkmann  *
91610752583SDaniel Borkmann  * @IFLA_BRPORT_HOLD_TIMER
91710752583SDaniel Borkmann  *
91810752583SDaniel Borkmann  * @IFLA_BRPORT_FLUSH
91910752583SDaniel Borkmann  *   Flush bridge ports' fdb dynamic entries.
92010752583SDaniel Borkmann  *
92110752583SDaniel Borkmann  * @IFLA_BRPORT_MULTICAST_ROUTER
92210752583SDaniel Borkmann  *   Configure the port's multicast router presence. A port with
92310752583SDaniel Borkmann  *   a multicast router will receive all multicast traffic.
92410752583SDaniel Borkmann  *   The valid values are:
92510752583SDaniel Borkmann  *
92610752583SDaniel Borkmann  *     * 0 disable multicast routers on this port
92710752583SDaniel Borkmann  *     * 1 let the system detect the presence of routers (default)
92810752583SDaniel Borkmann  *     * 2 permanently enable multicast traffic forwarding on this port
92910752583SDaniel Borkmann  *     * 3 enable multicast routers temporarily on this port, not depending
93010752583SDaniel Borkmann  *         on incoming queries.
93110752583SDaniel Borkmann  *
93210752583SDaniel Borkmann  * @IFLA_BRPORT_PAD
93310752583SDaniel Borkmann  *
93410752583SDaniel Borkmann  * @IFLA_BRPORT_MCAST_FLOOD
93510752583SDaniel Borkmann  *   Controls whether a given port will flood multicast traffic for which
93610752583SDaniel Borkmann  *   there is no MDB entry. By default this flag is on.
93710752583SDaniel Borkmann  *
93810752583SDaniel Borkmann  * @IFLA_BRPORT_MCAST_TO_UCAST
93910752583SDaniel Borkmann  *   Controls whether a given port will replicate packets using unicast
94010752583SDaniel Borkmann  *   instead of multicast. By default this flag is off.
94110752583SDaniel Borkmann  *
94210752583SDaniel Borkmann  *   This is done by copying the packet per host and changing the multicast
94310752583SDaniel Borkmann  *   destination MAC to a unicast one accordingly.
94410752583SDaniel Borkmann  *
94510752583SDaniel Borkmann  *   *mcast_to_unicast* works on top of the multicast snooping feature of the
94610752583SDaniel Borkmann  *   bridge. Which means unicast copies are only delivered to hosts which
94710752583SDaniel Borkmann  *   are interested in unicast and signaled this via IGMP/MLD reports previously.
94810752583SDaniel Borkmann  *
94910752583SDaniel Borkmann  *   This feature is intended for interface types which have a more reliable
95010752583SDaniel Borkmann  *   and/or efficient way to deliver unicast packets than broadcast ones
95110752583SDaniel Borkmann  *   (e.g. WiFi).
95210752583SDaniel Borkmann  *
95310752583SDaniel Borkmann  *   However, it should only be enabled on interfaces where no IGMPv2/MLDv1
95410752583SDaniel Borkmann  *   report suppression takes place. IGMP/MLD report suppression issue is
95510752583SDaniel Borkmann  *   usually overcome by the network daemon (supplicant) enabling AP isolation
95610752583SDaniel Borkmann  *   and by that separating all STAs.
95710752583SDaniel Borkmann  *
95810752583SDaniel Borkmann  *   Delivery of STA-to-STA IP multicast is made possible again by enabling
95910752583SDaniel Borkmann  *   and utilizing the bridge hairpin mode, which considers the incoming port
96010752583SDaniel Borkmann  *   as a potential outgoing port, too (see *BRIDGE_MODE_HAIRPIN* option).
96110752583SDaniel Borkmann  *   Hairpin mode is performed after multicast snooping, therefore leading
96210752583SDaniel Borkmann  *   to only deliver reports to STAs running a multicast router.
96310752583SDaniel Borkmann  *
96410752583SDaniel Borkmann  * @IFLA_BRPORT_VLAN_TUNNEL
96510752583SDaniel Borkmann  *   Controls whether vlan to tunnel mapping is enabled on the port.
96610752583SDaniel Borkmann  *   By default this flag is off.
96710752583SDaniel Borkmann  *
96810752583SDaniel Borkmann  * @IFLA_BRPORT_BCAST_FLOOD
96910752583SDaniel Borkmann  *   Controls flooding of broadcast traffic on the given port. By default
97010752583SDaniel Borkmann  *   this flag is on.
97110752583SDaniel Borkmann  *
97210752583SDaniel Borkmann  * @IFLA_BRPORT_GROUP_FWD_MASK
97310752583SDaniel Borkmann  *   Set the group forward mask. This is a bitmask that is applied to
97410752583SDaniel Borkmann  *   decide whether to forward incoming frames destined to link-local
97510752583SDaniel Borkmann  *   addresses. The addresses of the form are 01:80:C2:00:00:0X (defaults
97610752583SDaniel Borkmann  *   to 0, which means the bridge does not forward any link-local frames
97710752583SDaniel Borkmann  *   coming on this port).
97810752583SDaniel Borkmann  *
97910752583SDaniel Borkmann  * @IFLA_BRPORT_NEIGH_SUPPRESS
98010752583SDaniel Borkmann  *   Controls whether neighbor discovery (arp and nd) proxy and suppression
98110752583SDaniel Borkmann  *   is enabled on the port. By default this flag is off.
98210752583SDaniel Borkmann  *
98310752583SDaniel Borkmann  * @IFLA_BRPORT_ISOLATED
98410752583SDaniel Borkmann  *   Controls whether a given port will be isolated, which means it will be
98510752583SDaniel Borkmann  *   able to communicate with non-isolated ports only. By default this
98610752583SDaniel Borkmann  *   flag is off.
98710752583SDaniel Borkmann  *
98810752583SDaniel Borkmann  * @IFLA_BRPORT_BACKUP_PORT
98910752583SDaniel Borkmann  *   Set a backup port. If the port loses carrier all traffic will be
99010752583SDaniel Borkmann  *   redirected to the configured backup port. Set the value to 0 to disable
99110752583SDaniel Borkmann  *   it.
99210752583SDaniel Borkmann  *
99310752583SDaniel Borkmann  * @IFLA_BRPORT_MRP_RING_OPEN
99410752583SDaniel Borkmann  *
99510752583SDaniel Borkmann  * @IFLA_BRPORT_MRP_IN_OPEN
99610752583SDaniel Borkmann  *
99710752583SDaniel Borkmann  * @IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT
99810752583SDaniel Borkmann  *   The number of per-port EHT hosts limit. The default value is 512.
99910752583SDaniel Borkmann  *   Setting to 0 is not allowed.
100010752583SDaniel Borkmann  *
100110752583SDaniel Borkmann  * @IFLA_BRPORT_MCAST_EHT_HOSTS_CNT
100210752583SDaniel Borkmann  *   The current number of tracked hosts, read only.
100310752583SDaniel Borkmann  *
100410752583SDaniel Borkmann  * @IFLA_BRPORT_LOCKED
100510752583SDaniel Borkmann  *   Controls whether a port will be locked, meaning that hosts behind the
100610752583SDaniel Borkmann  *   port will not be able to communicate through the port unless an FDB
100710752583SDaniel Borkmann  *   entry with the unit's MAC address is in the FDB. The common use case is
100810752583SDaniel Borkmann  *   that hosts are allowed access through authentication with the IEEE 802.1X
100910752583SDaniel Borkmann  *   protocol or based on whitelists. By default this flag is off.
101010752583SDaniel Borkmann  *
101110752583SDaniel Borkmann  *   Please note that secure 802.1X deployments should always use the
101210752583SDaniel Borkmann  *   *BR_BOOLOPT_NO_LL_LEARN* flag, to not permit the bridge to populate its
101310752583SDaniel Borkmann  *   FDB based on link-local (EAPOL) traffic received on the port.
101410752583SDaniel Borkmann  *
101510752583SDaniel Borkmann  * @IFLA_BRPORT_MAB
101610752583SDaniel Borkmann  *   Controls whether a port will use MAC Authentication Bypass (MAB), a
101710752583SDaniel Borkmann  *   technique through which select MAC addresses may be allowed on a locked
101810752583SDaniel Borkmann  *   port, without using 802.1X authentication. Packets with an unknown source
101910752583SDaniel Borkmann  *   MAC address generates a "locked" FDB entry on the incoming bridge port.
102010752583SDaniel Borkmann  *   The common use case is for user space to react to these bridge FDB
102110752583SDaniel Borkmann  *   notifications and optionally replace the locked FDB entry with a normal
102210752583SDaniel Borkmann  *   one, allowing traffic to pass for whitelisted MAC addresses.
102310752583SDaniel Borkmann  *
102410752583SDaniel Borkmann  *   Setting this flag also requires *IFLA_BRPORT_LOCKED* and
102510752583SDaniel Borkmann  *   *IFLA_BRPORT_LEARNING*. *IFLA_BRPORT_LOCKED* ensures that unauthorized
102610752583SDaniel Borkmann  *   data packets are dropped, and *IFLA_BRPORT_LEARNING* allows the dynamic
102710752583SDaniel Borkmann  *   FDB entries installed by user space (as replacements for the locked FDB
102810752583SDaniel Borkmann  *   entries) to be refreshed and/or aged out.
102910752583SDaniel Borkmann  *
103010752583SDaniel Borkmann  * @IFLA_BRPORT_MCAST_N_GROUPS
103110752583SDaniel Borkmann  *
103210752583SDaniel Borkmann  * @IFLA_BRPORT_MCAST_MAX_GROUPS
103310752583SDaniel Borkmann  *   Sets the maximum number of MDB entries that can be registered for a
103410752583SDaniel Borkmann  *   given port. Attempts to register more MDB entries at the port than this
103510752583SDaniel Borkmann  *   limit allows will be rejected, whether they are done through netlink
103610752583SDaniel Borkmann  *   (e.g. the bridge tool), or IGMP or MLD membership reports. Setting a
103710752583SDaniel Borkmann  *   limit of 0 disables the limit. The default value is 0.
103810752583SDaniel Borkmann  *
103910752583SDaniel Borkmann  * @IFLA_BRPORT_NEIGH_VLAN_SUPPRESS
104010752583SDaniel Borkmann  *   Controls whether neighbor discovery (arp and nd) proxy and suppression is
104110752583SDaniel Borkmann  *   enabled for a given port. By default this flag is off.
104210752583SDaniel Borkmann  *
104310752583SDaniel Borkmann  *   Note that this option only takes effect when *IFLA_BRPORT_NEIGH_SUPPRESS*
104410752583SDaniel Borkmann  *   is enabled for a given port.
104510752583SDaniel Borkmann  *
104610752583SDaniel Borkmann  * @IFLA_BRPORT_BACKUP_NHID
104710752583SDaniel Borkmann  *   The FDB nexthop object ID to attach to packets being redirected to a
104810752583SDaniel Borkmann  *   backup port that has VLAN tunnel mapping enabled (via the
104910752583SDaniel Borkmann  *   *IFLA_BRPORT_VLAN_TUNNEL* option). Setting a value of 0 (default) has
105010752583SDaniel Borkmann  *   the effect of not attaching any ID.
105110752583SDaniel Borkmann  */
1052dc2b9f19SEric Leblond enum {
1053dc2b9f19SEric Leblond 	IFLA_BRPORT_UNSPEC,
1054dc2b9f19SEric Leblond 	IFLA_BRPORT_STATE,	/* Spanning tree state     */
1055dc2b9f19SEric Leblond 	IFLA_BRPORT_PRIORITY,	/* "             priority  */
1056dc2b9f19SEric Leblond 	IFLA_BRPORT_COST,	/* "             cost      */
1057dc2b9f19SEric Leblond 	IFLA_BRPORT_MODE,	/* mode (hairpin)          */
1058dc2b9f19SEric Leblond 	IFLA_BRPORT_GUARD,	/* bpdu guard              */
1059dc2b9f19SEric Leblond 	IFLA_BRPORT_PROTECT,	/* root port protection    */
1060dc2b9f19SEric Leblond 	IFLA_BRPORT_FAST_LEAVE,	/* multicast fast leave    */
1061dc2b9f19SEric Leblond 	IFLA_BRPORT_LEARNING,	/* mac learning */
1062dc2b9f19SEric Leblond 	IFLA_BRPORT_UNICAST_FLOOD, /* flood unicast traffic */
1063dc2b9f19SEric Leblond 	IFLA_BRPORT_PROXYARP,	/* proxy ARP */
1064dc2b9f19SEric Leblond 	IFLA_BRPORT_LEARNING_SYNC, /* mac learning sync from device */
1065dc2b9f19SEric Leblond 	IFLA_BRPORT_PROXYARP_WIFI, /* proxy ARP for Wi-Fi */
1066dc2b9f19SEric Leblond 	IFLA_BRPORT_ROOT_ID,	/* designated root */
1067dc2b9f19SEric Leblond 	IFLA_BRPORT_BRIDGE_ID,	/* designated bridge */
1068dc2b9f19SEric Leblond 	IFLA_BRPORT_DESIGNATED_PORT,
1069dc2b9f19SEric Leblond 	IFLA_BRPORT_DESIGNATED_COST,
1070dc2b9f19SEric Leblond 	IFLA_BRPORT_ID,
1071dc2b9f19SEric Leblond 	IFLA_BRPORT_NO,
1072dc2b9f19SEric Leblond 	IFLA_BRPORT_TOPOLOGY_CHANGE_ACK,
1073dc2b9f19SEric Leblond 	IFLA_BRPORT_CONFIG_PENDING,
1074dc2b9f19SEric Leblond 	IFLA_BRPORT_MESSAGE_AGE_TIMER,
1075dc2b9f19SEric Leblond 	IFLA_BRPORT_FORWARD_DELAY_TIMER,
1076dc2b9f19SEric Leblond 	IFLA_BRPORT_HOLD_TIMER,
1077dc2b9f19SEric Leblond 	IFLA_BRPORT_FLUSH,
1078dc2b9f19SEric Leblond 	IFLA_BRPORT_MULTICAST_ROUTER,
1079dc2b9f19SEric Leblond 	IFLA_BRPORT_PAD,
1080dc2b9f19SEric Leblond 	IFLA_BRPORT_MCAST_FLOOD,
1081dc2b9f19SEric Leblond 	IFLA_BRPORT_MCAST_TO_UCAST,
1082dc2b9f19SEric Leblond 	IFLA_BRPORT_VLAN_TUNNEL,
1083dc2b9f19SEric Leblond 	IFLA_BRPORT_BCAST_FLOOD,
1084dc2b9f19SEric Leblond 	IFLA_BRPORT_GROUP_FWD_MASK,
1085dc2b9f19SEric Leblond 	IFLA_BRPORT_NEIGH_SUPPRESS,
1086bb9a33cbSArnaldo Carvalho de Melo 	IFLA_BRPORT_ISOLATED,
10875db48a8dSArnaldo Carvalho de Melo 	IFLA_BRPORT_BACKUP_PORT,
10883e54442cSHoratiu Vultur 	IFLA_BRPORT_MRP_RING_OPEN,
1089ffb3adbaSHoratiu Vultur 	IFLA_BRPORT_MRP_IN_OPEN,
1090710d5835SEric Dumazet 	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT,
1091710d5835SEric Dumazet 	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT,
10925c1b994dSDaniel Borkmann 	IFLA_BRPORT_LOCKED,
10935c1b994dSDaniel Borkmann 	IFLA_BRPORT_MAB,
10945c1b994dSDaniel Borkmann 	IFLA_BRPORT_MCAST_N_GROUPS,
10955c1b994dSDaniel Borkmann 	IFLA_BRPORT_MCAST_MAX_GROUPS,
10965c1b994dSDaniel Borkmann 	IFLA_BRPORT_NEIGH_VLAN_SUPPRESS,
10975c1b994dSDaniel Borkmann 	IFLA_BRPORT_BACKUP_NHID,
1098dc2b9f19SEric Leblond 	__IFLA_BRPORT_MAX
1099dc2b9f19SEric Leblond };
1100dc2b9f19SEric Leblond #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
1101dc2b9f19SEric Leblond 
1102dc2b9f19SEric Leblond struct ifla_cacheinfo {
1103dc2b9f19SEric Leblond 	__u32	max_reasm_len;
1104dc2b9f19SEric Leblond 	__u32	tstamp;		/* ipv6InterfaceTable updated timestamp */
1105dc2b9f19SEric Leblond 	__u32	reachable_time;
1106dc2b9f19SEric Leblond 	__u32	retrans_time;
1107dc2b9f19SEric Leblond };
1108dc2b9f19SEric Leblond 
1109dc2b9f19SEric Leblond enum {
1110dc2b9f19SEric Leblond 	IFLA_INFO_UNSPEC,
1111dc2b9f19SEric Leblond 	IFLA_INFO_KIND,
1112dc2b9f19SEric Leblond 	IFLA_INFO_DATA,
1113dc2b9f19SEric Leblond 	IFLA_INFO_XSTATS,
1114dc2b9f19SEric Leblond 	IFLA_INFO_SLAVE_KIND,
1115dc2b9f19SEric Leblond 	IFLA_INFO_SLAVE_DATA,
1116dc2b9f19SEric Leblond 	__IFLA_INFO_MAX,
1117dc2b9f19SEric Leblond };
1118dc2b9f19SEric Leblond 
1119dc2b9f19SEric Leblond #define IFLA_INFO_MAX	(__IFLA_INFO_MAX - 1)
1120dc2b9f19SEric Leblond 
1121dc2b9f19SEric Leblond /* VLAN section */
1122dc2b9f19SEric Leblond 
1123dc2b9f19SEric Leblond enum {
1124dc2b9f19SEric Leblond 	IFLA_VLAN_UNSPEC,
1125dc2b9f19SEric Leblond 	IFLA_VLAN_ID,
1126dc2b9f19SEric Leblond 	IFLA_VLAN_FLAGS,
1127dc2b9f19SEric Leblond 	IFLA_VLAN_EGRESS_QOS,
1128dc2b9f19SEric Leblond 	IFLA_VLAN_INGRESS_QOS,
1129dc2b9f19SEric Leblond 	IFLA_VLAN_PROTOCOL,
1130dc2b9f19SEric Leblond 	__IFLA_VLAN_MAX,
1131dc2b9f19SEric Leblond };
1132dc2b9f19SEric Leblond 
1133dc2b9f19SEric Leblond #define IFLA_VLAN_MAX	(__IFLA_VLAN_MAX - 1)
1134dc2b9f19SEric Leblond 
1135dc2b9f19SEric Leblond struct ifla_vlan_flags {
1136dc2b9f19SEric Leblond 	__u32	flags;
1137dc2b9f19SEric Leblond 	__u32	mask;
1138dc2b9f19SEric Leblond };
1139dc2b9f19SEric Leblond 
1140dc2b9f19SEric Leblond enum {
1141dc2b9f19SEric Leblond 	IFLA_VLAN_QOS_UNSPEC,
1142dc2b9f19SEric Leblond 	IFLA_VLAN_QOS_MAPPING,
1143dc2b9f19SEric Leblond 	__IFLA_VLAN_QOS_MAX
1144dc2b9f19SEric Leblond };
1145dc2b9f19SEric Leblond 
1146dc2b9f19SEric Leblond #define IFLA_VLAN_QOS_MAX	(__IFLA_VLAN_QOS_MAX - 1)
1147dc2b9f19SEric Leblond 
1148dc2b9f19SEric Leblond struct ifla_vlan_qos_mapping {
1149dc2b9f19SEric Leblond 	__u32 from;
1150dc2b9f19SEric Leblond 	__u32 to;
1151dc2b9f19SEric Leblond };
1152dc2b9f19SEric Leblond 
1153dc2b9f19SEric Leblond /* MACVLAN section */
1154dc2b9f19SEric Leblond enum {
1155dc2b9f19SEric Leblond 	IFLA_MACVLAN_UNSPEC,
1156dc2b9f19SEric Leblond 	IFLA_MACVLAN_MODE,
1157dc2b9f19SEric Leblond 	IFLA_MACVLAN_FLAGS,
1158dc2b9f19SEric Leblond 	IFLA_MACVLAN_MACADDR_MODE,
1159dc2b9f19SEric Leblond 	IFLA_MACVLAN_MACADDR,
1160dc2b9f19SEric Leblond 	IFLA_MACVLAN_MACADDR_DATA,
1161dc2b9f19SEric Leblond 	IFLA_MACVLAN_MACADDR_COUNT,
1162d4bff72cSThomas Karlsson 	IFLA_MACVLAN_BC_QUEUE_LEN,
1163d4bff72cSThomas Karlsson 	IFLA_MACVLAN_BC_QUEUE_LEN_USED,
1164954d1fa1SHerbert Xu 	IFLA_MACVLAN_BC_CUTOFF,
1165dc2b9f19SEric Leblond 	__IFLA_MACVLAN_MAX,
1166dc2b9f19SEric Leblond };
1167dc2b9f19SEric Leblond 
1168dc2b9f19SEric Leblond #define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
1169dc2b9f19SEric Leblond 
1170dc2b9f19SEric Leblond enum macvlan_mode {
1171dc2b9f19SEric Leblond 	MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
1172dc2b9f19SEric Leblond 	MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */
1173dc2b9f19SEric Leblond 	MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */
1174dc2b9f19SEric Leblond 	MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */
1175dc2b9f19SEric Leblond 	MACVLAN_MODE_SOURCE  = 16,/* use source MAC address list to assign */
1176dc2b9f19SEric Leblond };
1177dc2b9f19SEric Leblond 
1178dc2b9f19SEric Leblond enum macvlan_macaddr_mode {
1179dc2b9f19SEric Leblond 	MACVLAN_MACADDR_ADD,
1180dc2b9f19SEric Leblond 	MACVLAN_MACADDR_DEL,
1181dc2b9f19SEric Leblond 	MACVLAN_MACADDR_FLUSH,
1182dc2b9f19SEric Leblond 	MACVLAN_MACADDR_SET,
1183dc2b9f19SEric Leblond };
1184dc2b9f19SEric Leblond 
1185dc2b9f19SEric Leblond #define MACVLAN_FLAG_NOPROMISC	1
1186710d5835SEric Dumazet #define MACVLAN_FLAG_NODST	2 /* skip dst macvlan if matching src macvlan */
1187dc2b9f19SEric Leblond 
1188dc2b9f19SEric Leblond /* VRF section */
1189dc2b9f19SEric Leblond enum {
1190dc2b9f19SEric Leblond 	IFLA_VRF_UNSPEC,
1191dc2b9f19SEric Leblond 	IFLA_VRF_TABLE,
1192dc2b9f19SEric Leblond 	__IFLA_VRF_MAX
1193dc2b9f19SEric Leblond };
1194dc2b9f19SEric Leblond 
1195dc2b9f19SEric Leblond #define IFLA_VRF_MAX (__IFLA_VRF_MAX - 1)
1196dc2b9f19SEric Leblond 
1197dc2b9f19SEric Leblond enum {
1198dc2b9f19SEric Leblond 	IFLA_VRF_PORT_UNSPEC,
1199dc2b9f19SEric Leblond 	IFLA_VRF_PORT_TABLE,
1200dc2b9f19SEric Leblond 	__IFLA_VRF_PORT_MAX
1201dc2b9f19SEric Leblond };
1202dc2b9f19SEric Leblond 
1203dc2b9f19SEric Leblond #define IFLA_VRF_PORT_MAX (__IFLA_VRF_PORT_MAX - 1)
1204dc2b9f19SEric Leblond 
1205dc2b9f19SEric Leblond /* MACSEC section */
1206dc2b9f19SEric Leblond enum {
1207dc2b9f19SEric Leblond 	IFLA_MACSEC_UNSPEC,
1208dc2b9f19SEric Leblond 	IFLA_MACSEC_SCI,
1209dc2b9f19SEric Leblond 	IFLA_MACSEC_PORT,
1210dc2b9f19SEric Leblond 	IFLA_MACSEC_ICV_LEN,
1211dc2b9f19SEric Leblond 	IFLA_MACSEC_CIPHER_SUITE,
1212dc2b9f19SEric Leblond 	IFLA_MACSEC_WINDOW,
1213dc2b9f19SEric Leblond 	IFLA_MACSEC_ENCODING_SA,
1214dc2b9f19SEric Leblond 	IFLA_MACSEC_ENCRYPT,
1215dc2b9f19SEric Leblond 	IFLA_MACSEC_PROTECT,
1216dc2b9f19SEric Leblond 	IFLA_MACSEC_INC_SCI,
1217dc2b9f19SEric Leblond 	IFLA_MACSEC_ES,
1218dc2b9f19SEric Leblond 	IFLA_MACSEC_SCB,
1219dc2b9f19SEric Leblond 	IFLA_MACSEC_REPLAY_PROTECT,
1220dc2b9f19SEric Leblond 	IFLA_MACSEC_VALIDATION,
1221dc2b9f19SEric Leblond 	IFLA_MACSEC_PAD,
1222791bb3fcSMark Starovoytov 	IFLA_MACSEC_OFFLOAD,
1223dc2b9f19SEric Leblond 	__IFLA_MACSEC_MAX,
1224dc2b9f19SEric Leblond };
1225dc2b9f19SEric Leblond 
1226dc2b9f19SEric Leblond #define IFLA_MACSEC_MAX (__IFLA_MACSEC_MAX - 1)
1227dc2b9f19SEric Leblond 
12285db48a8dSArnaldo Carvalho de Melo /* XFRM section */
12295db48a8dSArnaldo Carvalho de Melo enum {
12305db48a8dSArnaldo Carvalho de Melo 	IFLA_XFRM_UNSPEC,
12315db48a8dSArnaldo Carvalho de Melo 	IFLA_XFRM_LINK,
12325db48a8dSArnaldo Carvalho de Melo 	IFLA_XFRM_IF_ID,
12334f4ac4d9SEyal Birger 	IFLA_XFRM_COLLECT_METADATA,
12345db48a8dSArnaldo Carvalho de Melo 	__IFLA_XFRM_MAX
12355db48a8dSArnaldo Carvalho de Melo };
12365db48a8dSArnaldo Carvalho de Melo 
12375db48a8dSArnaldo Carvalho de Melo #define IFLA_XFRM_MAX (__IFLA_XFRM_MAX - 1)
12385db48a8dSArnaldo Carvalho de Melo 
1239dc2b9f19SEric Leblond enum macsec_validation_type {
1240dc2b9f19SEric Leblond 	MACSEC_VALIDATE_DISABLED = 0,
1241dc2b9f19SEric Leblond 	MACSEC_VALIDATE_CHECK = 1,
1242dc2b9f19SEric Leblond 	MACSEC_VALIDATE_STRICT = 2,
1243dc2b9f19SEric Leblond 	__MACSEC_VALIDATE_END,
1244dc2b9f19SEric Leblond 	MACSEC_VALIDATE_MAX = __MACSEC_VALIDATE_END - 1,
1245dc2b9f19SEric Leblond };
1246dc2b9f19SEric Leblond 
124776564261SAntoine Tenart enum macsec_offload {
124876564261SAntoine Tenart 	MACSEC_OFFLOAD_OFF = 0,
124976564261SAntoine Tenart 	MACSEC_OFFLOAD_PHY = 1,
125021114b7fSAntoine Tenart 	MACSEC_OFFLOAD_MAC = 2,
125176564261SAntoine Tenart 	__MACSEC_OFFLOAD_END,
125276564261SAntoine Tenart 	MACSEC_OFFLOAD_MAX = __MACSEC_OFFLOAD_END - 1,
125376564261SAntoine Tenart };
125476564261SAntoine Tenart 
1255dc2b9f19SEric Leblond /* IPVLAN section */
1256dc2b9f19SEric Leblond enum {
1257dc2b9f19SEric Leblond 	IFLA_IPVLAN_UNSPEC,
1258dc2b9f19SEric Leblond 	IFLA_IPVLAN_MODE,
1259dc2b9f19SEric Leblond 	IFLA_IPVLAN_FLAGS,
1260dc2b9f19SEric Leblond 	__IFLA_IPVLAN_MAX
1261dc2b9f19SEric Leblond };
1262dc2b9f19SEric Leblond 
1263dc2b9f19SEric Leblond #define IFLA_IPVLAN_MAX (__IFLA_IPVLAN_MAX - 1)
1264dc2b9f19SEric Leblond 
1265dc2b9f19SEric Leblond enum ipvlan_mode {
1266dc2b9f19SEric Leblond 	IPVLAN_MODE_L2 = 0,
1267dc2b9f19SEric Leblond 	IPVLAN_MODE_L3,
1268dc2b9f19SEric Leblond 	IPVLAN_MODE_L3S,
1269dc2b9f19SEric Leblond 	IPVLAN_MODE_MAX
1270dc2b9f19SEric Leblond };
1271dc2b9f19SEric Leblond 
1272dc2b9f19SEric Leblond #define IPVLAN_F_PRIVATE	0x01
1273dc2b9f19SEric Leblond #define IPVLAN_F_VEPA		0x02
1274dc2b9f19SEric Leblond 
12755c1b994dSDaniel Borkmann /* Tunnel RTM header */
12765c1b994dSDaniel Borkmann struct tunnel_msg {
12775c1b994dSDaniel Borkmann 	__u8 family;
12785c1b994dSDaniel Borkmann 	__u8 flags;
12795c1b994dSDaniel Borkmann 	__u16 reserved2;
12805c1b994dSDaniel Borkmann 	__u32 ifindex;
12815c1b994dSDaniel Borkmann };
12825c1b994dSDaniel Borkmann 
12835c1b994dSDaniel Borkmann /* netkit section */
12845c1b994dSDaniel Borkmann enum netkit_action {
12855c1b994dSDaniel Borkmann 	NETKIT_NEXT	= -1,
12865c1b994dSDaniel Borkmann 	NETKIT_PASS	= 0,
12875c1b994dSDaniel Borkmann 	NETKIT_DROP	= 2,
12885c1b994dSDaniel Borkmann 	NETKIT_REDIRECT	= 7,
12895c1b994dSDaniel Borkmann };
12905c1b994dSDaniel Borkmann 
12915c1b994dSDaniel Borkmann enum netkit_mode {
12925c1b994dSDaniel Borkmann 	NETKIT_L2,
12935c1b994dSDaniel Borkmann 	NETKIT_L3,
12945c1b994dSDaniel Borkmann };
12955c1b994dSDaniel Borkmann 
129610752583SDaniel Borkmann /* NETKIT_SCRUB_NONE leaves clearing skb->{mark,priority} up to
129710752583SDaniel Borkmann  * the BPF program if attached. This also means the latter can
129810752583SDaniel Borkmann  * consume the two fields if they were populated earlier.
129910752583SDaniel Borkmann  *
130010752583SDaniel Borkmann  * NETKIT_SCRUB_DEFAULT zeroes skb->{mark,priority} fields before
130110752583SDaniel Borkmann  * invoking the attached BPF program when the peer device resides
130210752583SDaniel Borkmann  * in a different network namespace. This is the default behavior.
130310752583SDaniel Borkmann  */
130410752583SDaniel Borkmann enum netkit_scrub {
130510752583SDaniel Borkmann 	NETKIT_SCRUB_NONE,
130610752583SDaniel Borkmann 	NETKIT_SCRUB_DEFAULT,
130710752583SDaniel Borkmann };
130810752583SDaniel Borkmann 
13095c1b994dSDaniel Borkmann enum {
13105c1b994dSDaniel Borkmann 	IFLA_NETKIT_UNSPEC,
13115c1b994dSDaniel Borkmann 	IFLA_NETKIT_PEER_INFO,
13125c1b994dSDaniel Borkmann 	IFLA_NETKIT_PRIMARY,
13135c1b994dSDaniel Borkmann 	IFLA_NETKIT_POLICY,
13145c1b994dSDaniel Borkmann 	IFLA_NETKIT_PEER_POLICY,
13155c1b994dSDaniel Borkmann 	IFLA_NETKIT_MODE,
131610752583SDaniel Borkmann 	IFLA_NETKIT_SCRUB,
131710752583SDaniel Borkmann 	IFLA_NETKIT_PEER_SCRUB,
1318*b9ed315dSDaniel Borkmann 	IFLA_NETKIT_HEADROOM,
1319*b9ed315dSDaniel Borkmann 	IFLA_NETKIT_TAILROOM,
13205c1b994dSDaniel Borkmann 	__IFLA_NETKIT_MAX,
13215c1b994dSDaniel Borkmann };
13225c1b994dSDaniel Borkmann #define IFLA_NETKIT_MAX	(__IFLA_NETKIT_MAX - 1)
13235c1b994dSDaniel Borkmann 
1324dc2b9f19SEric Leblond /* VXLAN section */
13255c1b994dSDaniel Borkmann 
13265c1b994dSDaniel Borkmann /* include statistics in the dump */
13275c1b994dSDaniel Borkmann #define TUNNEL_MSG_FLAG_STATS	0x01
13285c1b994dSDaniel Borkmann 
13295c1b994dSDaniel Borkmann #define TUNNEL_MSG_VALID_USER_FLAGS TUNNEL_MSG_FLAG_STATS
13305c1b994dSDaniel Borkmann 
13315c1b994dSDaniel Borkmann /* Embedded inside VXLAN_VNIFILTER_ENTRY_STATS */
13325c1b994dSDaniel Borkmann enum {
13335c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_UNSPEC,
13345c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_RX_BYTES,
13355c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_RX_PKTS,
13365c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_RX_DROPS,
13375c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_RX_ERRORS,
13385c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_TX_BYTES,
13395c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_TX_PKTS,
13405c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_TX_DROPS,
13415c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_TX_ERRORS,
13425c1b994dSDaniel Borkmann 	VNIFILTER_ENTRY_STATS_PAD,
13435c1b994dSDaniel Borkmann 	__VNIFILTER_ENTRY_STATS_MAX
13445c1b994dSDaniel Borkmann };
13455c1b994dSDaniel Borkmann #define VNIFILTER_ENTRY_STATS_MAX (__VNIFILTER_ENTRY_STATS_MAX - 1)
13465c1b994dSDaniel Borkmann 
13475c1b994dSDaniel Borkmann enum {
13485c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_ENTRY_UNSPEC,
13495c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_ENTRY_START,
13505c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_ENTRY_END,
13515c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_ENTRY_GROUP,
13525c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_ENTRY_GROUP6,
13535c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_ENTRY_STATS,
13545c1b994dSDaniel Borkmann 	__VXLAN_VNIFILTER_ENTRY_MAX
13555c1b994dSDaniel Borkmann };
13565c1b994dSDaniel Borkmann #define VXLAN_VNIFILTER_ENTRY_MAX	(__VXLAN_VNIFILTER_ENTRY_MAX - 1)
13575c1b994dSDaniel Borkmann 
13585c1b994dSDaniel Borkmann enum {
13595c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_UNSPEC,
13605c1b994dSDaniel Borkmann 	VXLAN_VNIFILTER_ENTRY,
13615c1b994dSDaniel Borkmann 	__VXLAN_VNIFILTER_MAX
13625c1b994dSDaniel Borkmann };
13635c1b994dSDaniel Borkmann #define VXLAN_VNIFILTER_MAX	(__VXLAN_VNIFILTER_MAX - 1)
13645c1b994dSDaniel Borkmann 
1365dc2b9f19SEric Leblond enum {
1366dc2b9f19SEric Leblond 	IFLA_VXLAN_UNSPEC,
1367dc2b9f19SEric Leblond 	IFLA_VXLAN_ID,
1368dc2b9f19SEric Leblond 	IFLA_VXLAN_GROUP,	/* group or remote address */
1369dc2b9f19SEric Leblond 	IFLA_VXLAN_LINK,
1370dc2b9f19SEric Leblond 	IFLA_VXLAN_LOCAL,
1371dc2b9f19SEric Leblond 	IFLA_VXLAN_TTL,
1372dc2b9f19SEric Leblond 	IFLA_VXLAN_TOS,
1373dc2b9f19SEric Leblond 	IFLA_VXLAN_LEARNING,
1374dc2b9f19SEric Leblond 	IFLA_VXLAN_AGEING,
1375dc2b9f19SEric Leblond 	IFLA_VXLAN_LIMIT,
1376dc2b9f19SEric Leblond 	IFLA_VXLAN_PORT_RANGE,	/* source port */
1377dc2b9f19SEric Leblond 	IFLA_VXLAN_PROXY,
1378dc2b9f19SEric Leblond 	IFLA_VXLAN_RSC,
1379dc2b9f19SEric Leblond 	IFLA_VXLAN_L2MISS,
1380dc2b9f19SEric Leblond 	IFLA_VXLAN_L3MISS,
1381dc2b9f19SEric Leblond 	IFLA_VXLAN_PORT,	/* destination port */
1382dc2b9f19SEric Leblond 	IFLA_VXLAN_GROUP6,
1383dc2b9f19SEric Leblond 	IFLA_VXLAN_LOCAL6,
1384dc2b9f19SEric Leblond 	IFLA_VXLAN_UDP_CSUM,
1385dc2b9f19SEric Leblond 	IFLA_VXLAN_UDP_ZERO_CSUM6_TX,
1386dc2b9f19SEric Leblond 	IFLA_VXLAN_UDP_ZERO_CSUM6_RX,
1387dc2b9f19SEric Leblond 	IFLA_VXLAN_REMCSUM_TX,
1388dc2b9f19SEric Leblond 	IFLA_VXLAN_REMCSUM_RX,
1389dc2b9f19SEric Leblond 	IFLA_VXLAN_GBP,
1390dc2b9f19SEric Leblond 	IFLA_VXLAN_REMCSUM_NOPARTIAL,
1391dc2b9f19SEric Leblond 	IFLA_VXLAN_COLLECT_METADATA,
1392dc2b9f19SEric Leblond 	IFLA_VXLAN_LABEL,
1393dc2b9f19SEric Leblond 	IFLA_VXLAN_GPE,
1394bb9a33cbSArnaldo Carvalho de Melo 	IFLA_VXLAN_TTL_INHERIT,
1395498c203dSArnaldo Carvalho de Melo 	IFLA_VXLAN_DF,
13965c1b994dSDaniel Borkmann 	IFLA_VXLAN_VNIFILTER, /* only applicable with COLLECT_METADATA mode */
13975c1b994dSDaniel Borkmann 	IFLA_VXLAN_LOCALBYPASS,
139810752583SDaniel Borkmann 	IFLA_VXLAN_LABEL_POLICY, /* IPv6 flow label policy; ifla_vxlan_label_policy */
1399dc2b9f19SEric Leblond 	__IFLA_VXLAN_MAX
1400dc2b9f19SEric Leblond };
1401dc2b9f19SEric Leblond #define IFLA_VXLAN_MAX	(__IFLA_VXLAN_MAX - 1)
1402dc2b9f19SEric Leblond 
1403dc2b9f19SEric Leblond struct ifla_vxlan_port_range {
1404dc2b9f19SEric Leblond 	__be16	low;
1405dc2b9f19SEric Leblond 	__be16	high;
1406dc2b9f19SEric Leblond };
1407dc2b9f19SEric Leblond 
1408498c203dSArnaldo Carvalho de Melo enum ifla_vxlan_df {
1409498c203dSArnaldo Carvalho de Melo 	VXLAN_DF_UNSET = 0,
1410498c203dSArnaldo Carvalho de Melo 	VXLAN_DF_SET,
1411498c203dSArnaldo Carvalho de Melo 	VXLAN_DF_INHERIT,
1412498c203dSArnaldo Carvalho de Melo 	__VXLAN_DF_END,
1413498c203dSArnaldo Carvalho de Melo 	VXLAN_DF_MAX = __VXLAN_DF_END - 1,
1414498c203dSArnaldo Carvalho de Melo };
1415498c203dSArnaldo Carvalho de Melo 
141610752583SDaniel Borkmann enum ifla_vxlan_label_policy {
141710752583SDaniel Borkmann 	VXLAN_LABEL_FIXED = 0,
141810752583SDaniel Borkmann 	VXLAN_LABEL_INHERIT = 1,
141910752583SDaniel Borkmann 	__VXLAN_LABEL_END,
142010752583SDaniel Borkmann 	VXLAN_LABEL_MAX = __VXLAN_LABEL_END - 1,
142110752583SDaniel Borkmann };
142210752583SDaniel Borkmann 
1423dc2b9f19SEric Leblond /* GENEVE section */
1424dc2b9f19SEric Leblond enum {
1425dc2b9f19SEric Leblond 	IFLA_GENEVE_UNSPEC,
1426dc2b9f19SEric Leblond 	IFLA_GENEVE_ID,
1427dc2b9f19SEric Leblond 	IFLA_GENEVE_REMOTE,
1428dc2b9f19SEric Leblond 	IFLA_GENEVE_TTL,
1429dc2b9f19SEric Leblond 	IFLA_GENEVE_TOS,
1430dc2b9f19SEric Leblond 	IFLA_GENEVE_PORT,	/* destination port */
1431dc2b9f19SEric Leblond 	IFLA_GENEVE_COLLECT_METADATA,
1432dc2b9f19SEric Leblond 	IFLA_GENEVE_REMOTE6,
1433dc2b9f19SEric Leblond 	IFLA_GENEVE_UDP_CSUM,
1434dc2b9f19SEric Leblond 	IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
1435dc2b9f19SEric Leblond 	IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
1436dc2b9f19SEric Leblond 	IFLA_GENEVE_LABEL,
143752d0d404SHangbin Liu 	IFLA_GENEVE_TTL_INHERIT,
1438498c203dSArnaldo Carvalho de Melo 	IFLA_GENEVE_DF,
14395c1b994dSDaniel Borkmann 	IFLA_GENEVE_INNER_PROTO_INHERIT,
1440dc2b9f19SEric Leblond 	__IFLA_GENEVE_MAX
1441dc2b9f19SEric Leblond };
1442dc2b9f19SEric Leblond #define IFLA_GENEVE_MAX	(__IFLA_GENEVE_MAX - 1)
1443dc2b9f19SEric Leblond 
1444498c203dSArnaldo Carvalho de Melo enum ifla_geneve_df {
1445498c203dSArnaldo Carvalho de Melo 	GENEVE_DF_UNSET = 0,
1446498c203dSArnaldo Carvalho de Melo 	GENEVE_DF_SET,
1447498c203dSArnaldo Carvalho de Melo 	GENEVE_DF_INHERIT,
1448498c203dSArnaldo Carvalho de Melo 	__GENEVE_DF_END,
1449498c203dSArnaldo Carvalho de Melo 	GENEVE_DF_MAX = __GENEVE_DF_END - 1,
1450498c203dSArnaldo Carvalho de Melo };
1451498c203dSArnaldo Carvalho de Melo 
1452710d5835SEric Dumazet /* Bareudp section  */
1453710d5835SEric Dumazet enum {
1454710d5835SEric Dumazet 	IFLA_BAREUDP_UNSPEC,
1455710d5835SEric Dumazet 	IFLA_BAREUDP_PORT,
1456710d5835SEric Dumazet 	IFLA_BAREUDP_ETHERTYPE,
1457710d5835SEric Dumazet 	IFLA_BAREUDP_SRCPORT_MIN,
1458710d5835SEric Dumazet 	IFLA_BAREUDP_MULTIPROTO_MODE,
1459710d5835SEric Dumazet 	__IFLA_BAREUDP_MAX
1460710d5835SEric Dumazet };
1461710d5835SEric Dumazet 
1462710d5835SEric Dumazet #define IFLA_BAREUDP_MAX (__IFLA_BAREUDP_MAX - 1)
1463710d5835SEric Dumazet 
1464dc2b9f19SEric Leblond /* PPP section */
1465dc2b9f19SEric Leblond enum {
1466dc2b9f19SEric Leblond 	IFLA_PPP_UNSPEC,
1467dc2b9f19SEric Leblond 	IFLA_PPP_DEV_FD,
1468dc2b9f19SEric Leblond 	__IFLA_PPP_MAX
1469dc2b9f19SEric Leblond };
1470dc2b9f19SEric Leblond #define IFLA_PPP_MAX (__IFLA_PPP_MAX - 1)
1471dc2b9f19SEric Leblond 
1472dc2b9f19SEric Leblond /* GTP section */
1473dc2b9f19SEric Leblond 
1474dc2b9f19SEric Leblond enum ifla_gtp_role {
1475dc2b9f19SEric Leblond 	GTP_ROLE_GGSN = 0,
1476dc2b9f19SEric Leblond 	GTP_ROLE_SGSN,
1477dc2b9f19SEric Leblond };
1478dc2b9f19SEric Leblond 
1479dc2b9f19SEric Leblond enum {
1480dc2b9f19SEric Leblond 	IFLA_GTP_UNSPEC,
1481dc2b9f19SEric Leblond 	IFLA_GTP_FD0,
1482dc2b9f19SEric Leblond 	IFLA_GTP_FD1,
1483dc2b9f19SEric Leblond 	IFLA_GTP_PDP_HASHSIZE,
1484dc2b9f19SEric Leblond 	IFLA_GTP_ROLE,
14855c1b994dSDaniel Borkmann 	IFLA_GTP_CREATE_SOCKETS,
14865c1b994dSDaniel Borkmann 	IFLA_GTP_RESTART_COUNT,
148710752583SDaniel Borkmann 	IFLA_GTP_LOCAL,
148810752583SDaniel Borkmann 	IFLA_GTP_LOCAL6,
1489dc2b9f19SEric Leblond 	__IFLA_GTP_MAX,
1490dc2b9f19SEric Leblond };
1491dc2b9f19SEric Leblond #define IFLA_GTP_MAX (__IFLA_GTP_MAX - 1)
1492dc2b9f19SEric Leblond 
1493dc2b9f19SEric Leblond /* Bonding section */
1494dc2b9f19SEric Leblond 
1495dc2b9f19SEric Leblond enum {
1496dc2b9f19SEric Leblond 	IFLA_BOND_UNSPEC,
1497dc2b9f19SEric Leblond 	IFLA_BOND_MODE,
1498dc2b9f19SEric Leblond 	IFLA_BOND_ACTIVE_SLAVE,
1499dc2b9f19SEric Leblond 	IFLA_BOND_MIIMON,
1500dc2b9f19SEric Leblond 	IFLA_BOND_UPDELAY,
1501dc2b9f19SEric Leblond 	IFLA_BOND_DOWNDELAY,
1502dc2b9f19SEric Leblond 	IFLA_BOND_USE_CARRIER,
1503dc2b9f19SEric Leblond 	IFLA_BOND_ARP_INTERVAL,
1504dc2b9f19SEric Leblond 	IFLA_BOND_ARP_IP_TARGET,
1505dc2b9f19SEric Leblond 	IFLA_BOND_ARP_VALIDATE,
1506dc2b9f19SEric Leblond 	IFLA_BOND_ARP_ALL_TARGETS,
1507dc2b9f19SEric Leblond 	IFLA_BOND_PRIMARY,
1508dc2b9f19SEric Leblond 	IFLA_BOND_PRIMARY_RESELECT,
1509dc2b9f19SEric Leblond 	IFLA_BOND_FAIL_OVER_MAC,
1510dc2b9f19SEric Leblond 	IFLA_BOND_XMIT_HASH_POLICY,
1511dc2b9f19SEric Leblond 	IFLA_BOND_RESEND_IGMP,
1512dc2b9f19SEric Leblond 	IFLA_BOND_NUM_PEER_NOTIF,
1513dc2b9f19SEric Leblond 	IFLA_BOND_ALL_SLAVES_ACTIVE,
1514dc2b9f19SEric Leblond 	IFLA_BOND_MIN_LINKS,
1515dc2b9f19SEric Leblond 	IFLA_BOND_LP_INTERVAL,
1516dc2b9f19SEric Leblond 	IFLA_BOND_PACKETS_PER_SLAVE,
1517dc2b9f19SEric Leblond 	IFLA_BOND_AD_LACP_RATE,
1518dc2b9f19SEric Leblond 	IFLA_BOND_AD_SELECT,
1519dc2b9f19SEric Leblond 	IFLA_BOND_AD_INFO,
1520dc2b9f19SEric Leblond 	IFLA_BOND_AD_ACTOR_SYS_PRIO,
1521dc2b9f19SEric Leblond 	IFLA_BOND_AD_USER_PORT_KEY,
1522dc2b9f19SEric Leblond 	IFLA_BOND_AD_ACTOR_SYSTEM,
1523dc2b9f19SEric Leblond 	IFLA_BOND_TLB_DYNAMIC_LB,
152407a4ddecSVincent Bernat 	IFLA_BOND_PEER_NOTIF_DELAY,
15253a755cd8SHangbin Liu 	IFLA_BOND_AD_LACP_ACTIVE,
15265944b5abSHangbin Liu 	IFLA_BOND_MISSED_MAX,
1527129e3c1bSHangbin Liu 	IFLA_BOND_NS_IP6_TARGET,
1528240fd405SAahil Awatramani 	IFLA_BOND_COUPLED_CONTROL,
1529dc2b9f19SEric Leblond 	__IFLA_BOND_MAX,
1530dc2b9f19SEric Leblond };
1531dc2b9f19SEric Leblond 
1532dc2b9f19SEric Leblond #define IFLA_BOND_MAX	(__IFLA_BOND_MAX - 1)
1533dc2b9f19SEric Leblond 
1534dc2b9f19SEric Leblond enum {
1535dc2b9f19SEric Leblond 	IFLA_BOND_AD_INFO_UNSPEC,
1536dc2b9f19SEric Leblond 	IFLA_BOND_AD_INFO_AGGREGATOR,
1537dc2b9f19SEric Leblond 	IFLA_BOND_AD_INFO_NUM_PORTS,
1538dc2b9f19SEric Leblond 	IFLA_BOND_AD_INFO_ACTOR_KEY,
1539dc2b9f19SEric Leblond 	IFLA_BOND_AD_INFO_PARTNER_KEY,
1540dc2b9f19SEric Leblond 	IFLA_BOND_AD_INFO_PARTNER_MAC,
1541dc2b9f19SEric Leblond 	__IFLA_BOND_AD_INFO_MAX,
1542dc2b9f19SEric Leblond };
1543dc2b9f19SEric Leblond 
1544dc2b9f19SEric Leblond #define IFLA_BOND_AD_INFO_MAX	(__IFLA_BOND_AD_INFO_MAX - 1)
1545dc2b9f19SEric Leblond 
1546dc2b9f19SEric Leblond enum {
1547dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_UNSPEC,
1548dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_STATE,
1549dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_MII_STATUS,
1550dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_LINK_FAILURE_COUNT,
1551dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_PERM_HWADDR,
1552dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_QUEUE_ID,
1553dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
1554dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE,
1555dc2b9f19SEric Leblond 	IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE,
15560a2ff7ccSHangbin Liu 	IFLA_BOND_SLAVE_PRIO,
1557dc2b9f19SEric Leblond 	__IFLA_BOND_SLAVE_MAX,
1558dc2b9f19SEric Leblond };
1559dc2b9f19SEric Leblond 
1560dc2b9f19SEric Leblond #define IFLA_BOND_SLAVE_MAX	(__IFLA_BOND_SLAVE_MAX - 1)
1561dc2b9f19SEric Leblond 
1562dc2b9f19SEric Leblond /* SR-IOV virtual function management section */
1563dc2b9f19SEric Leblond 
1564dc2b9f19SEric Leblond enum {
1565dc2b9f19SEric Leblond 	IFLA_VF_INFO_UNSPEC,
1566dc2b9f19SEric Leblond 	IFLA_VF_INFO,
1567dc2b9f19SEric Leblond 	__IFLA_VF_INFO_MAX,
1568dc2b9f19SEric Leblond };
1569dc2b9f19SEric Leblond 
1570dc2b9f19SEric Leblond #define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
1571dc2b9f19SEric Leblond 
1572dc2b9f19SEric Leblond enum {
1573dc2b9f19SEric Leblond 	IFLA_VF_UNSPEC,
1574dc2b9f19SEric Leblond 	IFLA_VF_MAC,		/* Hardware queue specific attributes */
1575dc2b9f19SEric Leblond 	IFLA_VF_VLAN,		/* VLAN ID and QoS */
1576dc2b9f19SEric Leblond 	IFLA_VF_TX_RATE,	/* Max TX Bandwidth Allocation */
1577dc2b9f19SEric Leblond 	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */
1578dc2b9f19SEric Leblond 	IFLA_VF_LINK_STATE,	/* link state enable/disable/auto switch */
1579dc2b9f19SEric Leblond 	IFLA_VF_RATE,		/* Min and Max TX Bandwidth Allocation */
1580dc2b9f19SEric Leblond 	IFLA_VF_RSS_QUERY_EN,	/* RSS Redirection Table and Hash Key query
1581dc2b9f19SEric Leblond 				 * on/off switch
1582dc2b9f19SEric Leblond 				 */
1583dc2b9f19SEric Leblond 	IFLA_VF_STATS,		/* network device statistics */
1584dc2b9f19SEric Leblond 	IFLA_VF_TRUST,		/* Trust VF */
1585dc2b9f19SEric Leblond 	IFLA_VF_IB_NODE_GUID,	/* VF Infiniband node GUID */
1586dc2b9f19SEric Leblond 	IFLA_VF_IB_PORT_GUID,	/* VF Infiniband port GUID */
1587dc2b9f19SEric Leblond 	IFLA_VF_VLAN_LIST,	/* nested list of vlans, option for QinQ */
1588e54599c9SArnaldo Carvalho de Melo 	IFLA_VF_BROADCAST,	/* VF broadcast */
1589dc2b9f19SEric Leblond 	__IFLA_VF_MAX,
1590dc2b9f19SEric Leblond };
1591dc2b9f19SEric Leblond 
1592dc2b9f19SEric Leblond #define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
1593dc2b9f19SEric Leblond 
1594dc2b9f19SEric Leblond struct ifla_vf_mac {
1595dc2b9f19SEric Leblond 	__u32 vf;
1596dc2b9f19SEric Leblond 	__u8 mac[32]; /* MAX_ADDR_LEN */
1597dc2b9f19SEric Leblond };
1598dc2b9f19SEric Leblond 
1599e54599c9SArnaldo Carvalho de Melo struct ifla_vf_broadcast {
1600e54599c9SArnaldo Carvalho de Melo 	__u8 broadcast[32];
1601e54599c9SArnaldo Carvalho de Melo };
1602e54599c9SArnaldo Carvalho de Melo 
1603dc2b9f19SEric Leblond struct ifla_vf_vlan {
1604dc2b9f19SEric Leblond 	__u32 vf;
1605dc2b9f19SEric Leblond 	__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
1606dc2b9f19SEric Leblond 	__u32 qos;
1607dc2b9f19SEric Leblond };
1608dc2b9f19SEric Leblond 
1609dc2b9f19SEric Leblond enum {
1610dc2b9f19SEric Leblond 	IFLA_VF_VLAN_INFO_UNSPEC,
1611dc2b9f19SEric Leblond 	IFLA_VF_VLAN_INFO,	/* VLAN ID, QoS and VLAN protocol */
1612dc2b9f19SEric Leblond 	__IFLA_VF_VLAN_INFO_MAX,
1613dc2b9f19SEric Leblond };
1614dc2b9f19SEric Leblond 
1615dc2b9f19SEric Leblond #define IFLA_VF_VLAN_INFO_MAX (__IFLA_VF_VLAN_INFO_MAX - 1)
1616dc2b9f19SEric Leblond #define MAX_VLAN_LIST_LEN 1
1617dc2b9f19SEric Leblond 
1618dc2b9f19SEric Leblond struct ifla_vf_vlan_info {
1619dc2b9f19SEric Leblond 	__u32 vf;
1620dc2b9f19SEric Leblond 	__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
1621dc2b9f19SEric Leblond 	__u32 qos;
1622dc2b9f19SEric Leblond 	__be16 vlan_proto; /* VLAN protocol either 802.1Q or 802.1ad */
1623dc2b9f19SEric Leblond };
1624dc2b9f19SEric Leblond 
1625dc2b9f19SEric Leblond struct ifla_vf_tx_rate {
1626dc2b9f19SEric Leblond 	__u32 vf;
1627dc2b9f19SEric Leblond 	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
1628dc2b9f19SEric Leblond };
1629dc2b9f19SEric Leblond 
1630dc2b9f19SEric Leblond struct ifla_vf_rate {
1631dc2b9f19SEric Leblond 	__u32 vf;
1632dc2b9f19SEric Leblond 	__u32 min_tx_rate; /* Min Bandwidth in Mbps */
1633dc2b9f19SEric Leblond 	__u32 max_tx_rate; /* Max Bandwidth in Mbps */
1634dc2b9f19SEric Leblond };
1635dc2b9f19SEric Leblond 
1636dc2b9f19SEric Leblond struct ifla_vf_spoofchk {
1637dc2b9f19SEric Leblond 	__u32 vf;
1638dc2b9f19SEric Leblond 	__u32 setting;
1639dc2b9f19SEric Leblond };
1640dc2b9f19SEric Leblond 
1641dc2b9f19SEric Leblond struct ifla_vf_guid {
1642dc2b9f19SEric Leblond 	__u32 vf;
1643dc2b9f19SEric Leblond 	__u64 guid;
1644dc2b9f19SEric Leblond };
1645dc2b9f19SEric Leblond 
1646dc2b9f19SEric Leblond enum {
1647dc2b9f19SEric Leblond 	IFLA_VF_LINK_STATE_AUTO,	/* link state of the uplink */
1648dc2b9f19SEric Leblond 	IFLA_VF_LINK_STATE_ENABLE,	/* link always up */
1649dc2b9f19SEric Leblond 	IFLA_VF_LINK_STATE_DISABLE,	/* link always down */
1650dc2b9f19SEric Leblond 	__IFLA_VF_LINK_STATE_MAX,
1651dc2b9f19SEric Leblond };
1652dc2b9f19SEric Leblond 
1653dc2b9f19SEric Leblond struct ifla_vf_link_state {
1654dc2b9f19SEric Leblond 	__u32 vf;
1655dc2b9f19SEric Leblond 	__u32 link_state;
1656dc2b9f19SEric Leblond };
1657dc2b9f19SEric Leblond 
1658dc2b9f19SEric Leblond struct ifla_vf_rss_query_en {
1659dc2b9f19SEric Leblond 	__u32 vf;
1660dc2b9f19SEric Leblond 	__u32 setting;
1661dc2b9f19SEric Leblond };
1662dc2b9f19SEric Leblond 
1663dc2b9f19SEric Leblond enum {
1664dc2b9f19SEric Leblond 	IFLA_VF_STATS_RX_PACKETS,
1665dc2b9f19SEric Leblond 	IFLA_VF_STATS_TX_PACKETS,
1666dc2b9f19SEric Leblond 	IFLA_VF_STATS_RX_BYTES,
1667dc2b9f19SEric Leblond 	IFLA_VF_STATS_TX_BYTES,
1668dc2b9f19SEric Leblond 	IFLA_VF_STATS_BROADCAST,
1669dc2b9f19SEric Leblond 	IFLA_VF_STATS_MULTICAST,
1670dc2b9f19SEric Leblond 	IFLA_VF_STATS_PAD,
1671dc2b9f19SEric Leblond 	IFLA_VF_STATS_RX_DROPPED,
1672dc2b9f19SEric Leblond 	IFLA_VF_STATS_TX_DROPPED,
1673dc2b9f19SEric Leblond 	__IFLA_VF_STATS_MAX,
1674dc2b9f19SEric Leblond };
1675dc2b9f19SEric Leblond 
1676dc2b9f19SEric Leblond #define IFLA_VF_STATS_MAX (__IFLA_VF_STATS_MAX - 1)
1677dc2b9f19SEric Leblond 
1678dc2b9f19SEric Leblond struct ifla_vf_trust {
1679dc2b9f19SEric Leblond 	__u32 vf;
1680dc2b9f19SEric Leblond 	__u32 setting;
1681dc2b9f19SEric Leblond };
1682dc2b9f19SEric Leblond 
1683dc2b9f19SEric Leblond /* VF ports management section
1684dc2b9f19SEric Leblond  *
1685dc2b9f19SEric Leblond  *	Nested layout of set/get msg is:
1686dc2b9f19SEric Leblond  *
1687dc2b9f19SEric Leblond  *		[IFLA_NUM_VF]
1688dc2b9f19SEric Leblond  *		[IFLA_VF_PORTS]
1689dc2b9f19SEric Leblond  *			[IFLA_VF_PORT]
1690dc2b9f19SEric Leblond  *				[IFLA_PORT_*], ...
1691dc2b9f19SEric Leblond  *			[IFLA_VF_PORT]
1692dc2b9f19SEric Leblond  *				[IFLA_PORT_*], ...
1693dc2b9f19SEric Leblond  *			...
1694dc2b9f19SEric Leblond  *		[IFLA_PORT_SELF]
1695dc2b9f19SEric Leblond  *			[IFLA_PORT_*], ...
1696dc2b9f19SEric Leblond  */
1697dc2b9f19SEric Leblond 
1698dc2b9f19SEric Leblond enum {
1699dc2b9f19SEric Leblond 	IFLA_VF_PORT_UNSPEC,
1700dc2b9f19SEric Leblond 	IFLA_VF_PORT,			/* nest */
1701dc2b9f19SEric Leblond 	__IFLA_VF_PORT_MAX,
1702dc2b9f19SEric Leblond };
1703dc2b9f19SEric Leblond 
1704dc2b9f19SEric Leblond #define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1)
1705dc2b9f19SEric Leblond 
1706dc2b9f19SEric Leblond enum {
1707dc2b9f19SEric Leblond 	IFLA_PORT_UNSPEC,
1708dc2b9f19SEric Leblond 	IFLA_PORT_VF,			/* __u32 */
1709dc2b9f19SEric Leblond 	IFLA_PORT_PROFILE,		/* string */
1710dc2b9f19SEric Leblond 	IFLA_PORT_VSI_TYPE,		/* 802.1Qbg (pre-)standard VDP */
1711dc2b9f19SEric Leblond 	IFLA_PORT_INSTANCE_UUID,	/* binary UUID */
1712dc2b9f19SEric Leblond 	IFLA_PORT_HOST_UUID,		/* binary UUID */
1713dc2b9f19SEric Leblond 	IFLA_PORT_REQUEST,		/* __u8 */
1714dc2b9f19SEric Leblond 	IFLA_PORT_RESPONSE,		/* __u16, output only */
1715dc2b9f19SEric Leblond 	__IFLA_PORT_MAX,
1716dc2b9f19SEric Leblond };
1717dc2b9f19SEric Leblond 
1718dc2b9f19SEric Leblond #define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1)
1719dc2b9f19SEric Leblond 
1720dc2b9f19SEric Leblond #define PORT_PROFILE_MAX	40
1721dc2b9f19SEric Leblond #define PORT_UUID_MAX		16
1722dc2b9f19SEric Leblond #define PORT_SELF_VF		-1
1723dc2b9f19SEric Leblond 
1724dc2b9f19SEric Leblond enum {
1725dc2b9f19SEric Leblond 	PORT_REQUEST_PREASSOCIATE = 0,
1726dc2b9f19SEric Leblond 	PORT_REQUEST_PREASSOCIATE_RR,
1727dc2b9f19SEric Leblond 	PORT_REQUEST_ASSOCIATE,
1728dc2b9f19SEric Leblond 	PORT_REQUEST_DISASSOCIATE,
1729dc2b9f19SEric Leblond };
1730dc2b9f19SEric Leblond 
1731dc2b9f19SEric Leblond enum {
1732dc2b9f19SEric Leblond 	PORT_VDP_RESPONSE_SUCCESS = 0,
1733dc2b9f19SEric Leblond 	PORT_VDP_RESPONSE_INVALID_FORMAT,
1734dc2b9f19SEric Leblond 	PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
1735dc2b9f19SEric Leblond 	PORT_VDP_RESPONSE_UNUSED_VTID,
1736dc2b9f19SEric Leblond 	PORT_VDP_RESPONSE_VTID_VIOLATION,
1737dc2b9f19SEric Leblond 	PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
1738dc2b9f19SEric Leblond 	PORT_VDP_RESPONSE_OUT_OF_SYNC,
1739dc2b9f19SEric Leblond 	/* 0x08-0xFF reserved for future VDP use */
1740dc2b9f19SEric Leblond 	PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
1741dc2b9f19SEric Leblond 	PORT_PROFILE_RESPONSE_INPROGRESS,
1742dc2b9f19SEric Leblond 	PORT_PROFILE_RESPONSE_INVALID,
1743dc2b9f19SEric Leblond 	PORT_PROFILE_RESPONSE_BADSTATE,
1744dc2b9f19SEric Leblond 	PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
1745dc2b9f19SEric Leblond 	PORT_PROFILE_RESPONSE_ERROR,
1746dc2b9f19SEric Leblond };
1747dc2b9f19SEric Leblond 
1748dc2b9f19SEric Leblond struct ifla_port_vsi {
1749dc2b9f19SEric Leblond 	__u8 vsi_mgr_id;
1750dc2b9f19SEric Leblond 	__u8 vsi_type_id[3];
1751dc2b9f19SEric Leblond 	__u8 vsi_type_version;
1752dc2b9f19SEric Leblond 	__u8 pad[3];
1753dc2b9f19SEric Leblond };
1754dc2b9f19SEric Leblond 
1755dc2b9f19SEric Leblond 
1756dc2b9f19SEric Leblond /* IPoIB section */
1757dc2b9f19SEric Leblond 
1758dc2b9f19SEric Leblond enum {
1759dc2b9f19SEric Leblond 	IFLA_IPOIB_UNSPEC,
1760dc2b9f19SEric Leblond 	IFLA_IPOIB_PKEY,
1761dc2b9f19SEric Leblond 	IFLA_IPOIB_MODE,
1762dc2b9f19SEric Leblond 	IFLA_IPOIB_UMCAST,
1763dc2b9f19SEric Leblond 	__IFLA_IPOIB_MAX
1764dc2b9f19SEric Leblond };
1765dc2b9f19SEric Leblond 
1766dc2b9f19SEric Leblond enum {
1767dc2b9f19SEric Leblond 	IPOIB_MODE_DATAGRAM  = 0, /* using unreliable datagram QPs */
1768dc2b9f19SEric Leblond 	IPOIB_MODE_CONNECTED = 1, /* using connected QPs */
1769dc2b9f19SEric Leblond };
1770dc2b9f19SEric Leblond 
1771dc2b9f19SEric Leblond #define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1)
1772dc2b9f19SEric Leblond 
1773dc2b9f19SEric Leblond 
1774710d5835SEric Dumazet /* HSR/PRP section, both uses same interface */
1775710d5835SEric Dumazet 
1776710d5835SEric Dumazet /* Different redundancy protocols for hsr device */
1777710d5835SEric Dumazet enum {
1778710d5835SEric Dumazet 	HSR_PROTOCOL_HSR,
1779710d5835SEric Dumazet 	HSR_PROTOCOL_PRP,
1780710d5835SEric Dumazet 	HSR_PROTOCOL_MAX,
1781710d5835SEric Dumazet };
1782dc2b9f19SEric Leblond 
1783dc2b9f19SEric Leblond enum {
1784dc2b9f19SEric Leblond 	IFLA_HSR_UNSPEC,
1785dc2b9f19SEric Leblond 	IFLA_HSR_SLAVE1,
1786dc2b9f19SEric Leblond 	IFLA_HSR_SLAVE2,
1787dc2b9f19SEric Leblond 	IFLA_HSR_MULTICAST_SPEC,	/* Last byte of supervision addr */
1788dc2b9f19SEric Leblond 	IFLA_HSR_SUPERVISION_ADDR,	/* Supervision frame multicast addr */
1789dc2b9f19SEric Leblond 	IFLA_HSR_SEQ_NR,
1790dc2b9f19SEric Leblond 	IFLA_HSR_VERSION,		/* HSR version */
1791710d5835SEric Dumazet 	IFLA_HSR_PROTOCOL,		/* Indicate different protocol than
1792710d5835SEric Dumazet 					 * HSR. For example PRP.
1793710d5835SEric Dumazet 					 */
179410752583SDaniel Borkmann 	IFLA_HSR_INTERLINK,		/* HSR interlink network device */
1795dc2b9f19SEric Leblond 	__IFLA_HSR_MAX,
1796dc2b9f19SEric Leblond };
1797dc2b9f19SEric Leblond 
1798dc2b9f19SEric Leblond #define IFLA_HSR_MAX (__IFLA_HSR_MAX - 1)
1799dc2b9f19SEric Leblond 
1800dc2b9f19SEric Leblond /* STATS section */
1801dc2b9f19SEric Leblond 
1802dc2b9f19SEric Leblond struct if_stats_msg {
1803dc2b9f19SEric Leblond 	__u8  family;
1804dc2b9f19SEric Leblond 	__u8  pad1;
1805dc2b9f19SEric Leblond 	__u16 pad2;
1806dc2b9f19SEric Leblond 	__u32 ifindex;
1807dc2b9f19SEric Leblond 	__u32 filter_mask;
1808dc2b9f19SEric Leblond };
1809dc2b9f19SEric Leblond 
1810dc2b9f19SEric Leblond /* A stats attribute can be netdev specific or a global stat.
1811dc2b9f19SEric Leblond  * For netdev stats, lets use the prefix IFLA_STATS_LINK_*
1812dc2b9f19SEric Leblond  */
1813dc2b9f19SEric Leblond enum {
1814dc2b9f19SEric Leblond 	IFLA_STATS_UNSPEC, /* also used as 64bit pad attribute */
1815dc2b9f19SEric Leblond 	IFLA_STATS_LINK_64,
1816dc2b9f19SEric Leblond 	IFLA_STATS_LINK_XSTATS,
1817dc2b9f19SEric Leblond 	IFLA_STATS_LINK_XSTATS_SLAVE,
1818dc2b9f19SEric Leblond 	IFLA_STATS_LINK_OFFLOAD_XSTATS,
1819dc2b9f19SEric Leblond 	IFLA_STATS_AF_SPEC,
1820dc2b9f19SEric Leblond 	__IFLA_STATS_MAX,
1821dc2b9f19SEric Leblond };
1822dc2b9f19SEric Leblond 
1823dc2b9f19SEric Leblond #define IFLA_STATS_MAX (__IFLA_STATS_MAX - 1)
1824dc2b9f19SEric Leblond 
1825dc2b9f19SEric Leblond #define IFLA_STATS_FILTER_BIT(ATTR)	(1 << (ATTR - 1))
1826dc2b9f19SEric Leblond 
18275c1b994dSDaniel Borkmann enum {
18285c1b994dSDaniel Borkmann 	IFLA_STATS_GETSET_UNSPEC,
18295c1b994dSDaniel Borkmann 	IFLA_STATS_GET_FILTERS, /* Nest of IFLA_STATS_LINK_xxx, each a u32 with
18305c1b994dSDaniel Borkmann 				 * a filter mask for the corresponding group.
18315c1b994dSDaniel Borkmann 				 */
18325c1b994dSDaniel Borkmann 	IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS, /* 0 or 1 as u8 */
18335c1b994dSDaniel Borkmann 	__IFLA_STATS_GETSET_MAX,
18345c1b994dSDaniel Borkmann };
18355c1b994dSDaniel Borkmann 
18365c1b994dSDaniel Borkmann #define IFLA_STATS_GETSET_MAX (__IFLA_STATS_GETSET_MAX - 1)
18375c1b994dSDaniel Borkmann 
1838dc2b9f19SEric Leblond /* These are embedded into IFLA_STATS_LINK_XSTATS:
1839dc2b9f19SEric Leblond  * [IFLA_STATS_LINK_XSTATS]
1840dc2b9f19SEric Leblond  * -> [LINK_XSTATS_TYPE_xxx]
1841dc2b9f19SEric Leblond  *    -> [rtnl link type specific attributes]
1842dc2b9f19SEric Leblond  */
1843dc2b9f19SEric Leblond enum {
1844dc2b9f19SEric Leblond 	LINK_XSTATS_TYPE_UNSPEC,
1845dc2b9f19SEric Leblond 	LINK_XSTATS_TYPE_BRIDGE,
1846d9312064SAndrii Nakryiko 	LINK_XSTATS_TYPE_BOND,
1847dc2b9f19SEric Leblond 	__LINK_XSTATS_TYPE_MAX
1848dc2b9f19SEric Leblond };
1849dc2b9f19SEric Leblond #define LINK_XSTATS_TYPE_MAX (__LINK_XSTATS_TYPE_MAX - 1)
1850dc2b9f19SEric Leblond 
1851dc2b9f19SEric Leblond /* These are stats embedded into IFLA_STATS_LINK_OFFLOAD_XSTATS */
1852dc2b9f19SEric Leblond enum {
1853dc2b9f19SEric Leblond 	IFLA_OFFLOAD_XSTATS_UNSPEC,
1854dc2b9f19SEric Leblond 	IFLA_OFFLOAD_XSTATS_CPU_HIT, /* struct rtnl_link_stats64 */
18555c1b994dSDaniel Borkmann 	IFLA_OFFLOAD_XSTATS_HW_S_INFO,	/* HW stats info. A nest */
18565c1b994dSDaniel Borkmann 	IFLA_OFFLOAD_XSTATS_L3_STATS,	/* struct rtnl_hw_stats64 */
1857dc2b9f19SEric Leblond 	__IFLA_OFFLOAD_XSTATS_MAX
1858dc2b9f19SEric Leblond };
1859dc2b9f19SEric Leblond #define IFLA_OFFLOAD_XSTATS_MAX (__IFLA_OFFLOAD_XSTATS_MAX - 1)
1860dc2b9f19SEric Leblond 
18615c1b994dSDaniel Borkmann enum {
18625c1b994dSDaniel Borkmann 	IFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC,
18635c1b994dSDaniel Borkmann 	IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST,		/* u8 */
18645c1b994dSDaniel Borkmann 	IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED,		/* u8 */
18655c1b994dSDaniel Borkmann 	__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX,
18665c1b994dSDaniel Borkmann };
18675c1b994dSDaniel Borkmann #define IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX \
18685c1b994dSDaniel Borkmann 	(__IFLA_OFFLOAD_XSTATS_HW_S_INFO_MAX - 1)
18695c1b994dSDaniel Borkmann 
1870dc2b9f19SEric Leblond /* XDP section */
1871dc2b9f19SEric Leblond 
1872dc2b9f19SEric Leblond #define XDP_FLAGS_UPDATE_IF_NOEXIST	(1U << 0)
1873dc2b9f19SEric Leblond #define XDP_FLAGS_SKB_MODE		(1U << 1)
1874dc2b9f19SEric Leblond #define XDP_FLAGS_DRV_MODE		(1U << 2)
1875dc2b9f19SEric Leblond #define XDP_FLAGS_HW_MODE		(1U << 3)
187650a3e678SToke Høiland-Jørgensen #define XDP_FLAGS_REPLACE		(1U << 4)
1877dc2b9f19SEric Leblond #define XDP_FLAGS_MODES			(XDP_FLAGS_SKB_MODE | \
1878dc2b9f19SEric Leblond 					 XDP_FLAGS_DRV_MODE | \
1879dc2b9f19SEric Leblond 					 XDP_FLAGS_HW_MODE)
1880dc2b9f19SEric Leblond #define XDP_FLAGS_MASK			(XDP_FLAGS_UPDATE_IF_NOEXIST | \
188150a3e678SToke Høiland-Jørgensen 					 XDP_FLAGS_MODES | XDP_FLAGS_REPLACE)
1882dc2b9f19SEric Leblond 
1883dc2b9f19SEric Leblond /* These are stored into IFLA_XDP_ATTACHED on dump. */
1884dc2b9f19SEric Leblond enum {
1885dc2b9f19SEric Leblond 	XDP_ATTACHED_NONE = 0,
1886dc2b9f19SEric Leblond 	XDP_ATTACHED_DRV,
1887dc2b9f19SEric Leblond 	XDP_ATTACHED_SKB,
1888dc2b9f19SEric Leblond 	XDP_ATTACHED_HW,
18895db48a8dSArnaldo Carvalho de Melo 	XDP_ATTACHED_MULTI,
1890dc2b9f19SEric Leblond };
1891dc2b9f19SEric Leblond 
1892dc2b9f19SEric Leblond enum {
1893dc2b9f19SEric Leblond 	IFLA_XDP_UNSPEC,
1894dc2b9f19SEric Leblond 	IFLA_XDP_FD,
1895dc2b9f19SEric Leblond 	IFLA_XDP_ATTACHED,
1896dc2b9f19SEric Leblond 	IFLA_XDP_FLAGS,
1897dc2b9f19SEric Leblond 	IFLA_XDP_PROG_ID,
18985db48a8dSArnaldo Carvalho de Melo 	IFLA_XDP_DRV_PROG_ID,
18995db48a8dSArnaldo Carvalho de Melo 	IFLA_XDP_SKB_PROG_ID,
19005db48a8dSArnaldo Carvalho de Melo 	IFLA_XDP_HW_PROG_ID,
190150a3e678SToke Høiland-Jørgensen 	IFLA_XDP_EXPECTED_FD,
1902dc2b9f19SEric Leblond 	__IFLA_XDP_MAX,
1903dc2b9f19SEric Leblond };
1904dc2b9f19SEric Leblond 
1905dc2b9f19SEric Leblond #define IFLA_XDP_MAX (__IFLA_XDP_MAX - 1)
1906dc2b9f19SEric Leblond 
1907dc2b9f19SEric Leblond enum {
1908dc2b9f19SEric Leblond 	IFLA_EVENT_NONE,
1909dc2b9f19SEric Leblond 	IFLA_EVENT_REBOOT,		/* internal reset / reboot */
1910dc2b9f19SEric Leblond 	IFLA_EVENT_FEATURES,		/* change in offload features */
1911dc2b9f19SEric Leblond 	IFLA_EVENT_BONDING_FAILOVER,	/* change in active slave */
1912dc2b9f19SEric Leblond 	IFLA_EVENT_NOTIFY_PEERS,	/* re-sent grat. arp/ndisc */
1913dc2b9f19SEric Leblond 	IFLA_EVENT_IGMP_RESEND,		/* re-sent IGMP JOIN */
1914dc2b9f19SEric Leblond 	IFLA_EVENT_BONDING_OPTIONS,	/* change in bonding options */
1915dc2b9f19SEric Leblond };
1916dc2b9f19SEric Leblond 
1917e2f73a18SIngo Molnar /* tun section */
1918e2f73a18SIngo Molnar 
1919e2f73a18SIngo Molnar enum {
1920e2f73a18SIngo Molnar 	IFLA_TUN_UNSPEC,
1921e2f73a18SIngo Molnar 	IFLA_TUN_OWNER,
1922e2f73a18SIngo Molnar 	IFLA_TUN_GROUP,
1923e2f73a18SIngo Molnar 	IFLA_TUN_TYPE,
1924e2f73a18SIngo Molnar 	IFLA_TUN_PI,
1925e2f73a18SIngo Molnar 	IFLA_TUN_VNET_HDR,
1926e2f73a18SIngo Molnar 	IFLA_TUN_PERSIST,
1927e2f73a18SIngo Molnar 	IFLA_TUN_MULTI_QUEUE,
1928e2f73a18SIngo Molnar 	IFLA_TUN_NUM_QUEUES,
1929e2f73a18SIngo Molnar 	IFLA_TUN_NUM_DISABLED_QUEUES,
1930e2f73a18SIngo Molnar 	__IFLA_TUN_MAX,
1931e2f73a18SIngo Molnar };
1932e2f73a18SIngo Molnar 
1933e2f73a18SIngo Molnar #define IFLA_TUN_MAX (__IFLA_TUN_MAX - 1)
1934e2f73a18SIngo Molnar 
1935e2f73a18SIngo Molnar /* rmnet section */
1936e2f73a18SIngo Molnar 
1937e2f73a18SIngo Molnar #define RMNET_FLAGS_INGRESS_DEAGGREGATION         (1U << 0)
1938e2f73a18SIngo Molnar #define RMNET_FLAGS_INGRESS_MAP_COMMANDS          (1U << 1)
1939e2f73a18SIngo Molnar #define RMNET_FLAGS_INGRESS_MAP_CKSUMV4           (1U << 2)
1940e2f73a18SIngo Molnar #define RMNET_FLAGS_EGRESS_MAP_CKSUMV4            (1U << 3)
1941710d5835SEric Dumazet #define RMNET_FLAGS_INGRESS_MAP_CKSUMV5           (1U << 4)
1942710d5835SEric Dumazet #define RMNET_FLAGS_EGRESS_MAP_CKSUMV5            (1U << 5)
1943e2f73a18SIngo Molnar 
1944e2f73a18SIngo Molnar enum {
1945e2f73a18SIngo Molnar 	IFLA_RMNET_UNSPEC,
1946e2f73a18SIngo Molnar 	IFLA_RMNET_MUX_ID,
1947e2f73a18SIngo Molnar 	IFLA_RMNET_FLAGS,
1948e2f73a18SIngo Molnar 	__IFLA_RMNET_MAX,
1949e2f73a18SIngo Molnar };
1950e2f73a18SIngo Molnar 
1951e2f73a18SIngo Molnar #define IFLA_RMNET_MAX	(__IFLA_RMNET_MAX - 1)
1952e2f73a18SIngo Molnar 
1953e2f73a18SIngo Molnar struct ifla_rmnet_flags {
1954e2f73a18SIngo Molnar 	__u32	flags;
1955e2f73a18SIngo Molnar 	__u32	mask;
1956e2f73a18SIngo Molnar };
1957e2f73a18SIngo Molnar 
1958710d5835SEric Dumazet /* MCTP section */
1959710d5835SEric Dumazet 
1960710d5835SEric Dumazet enum {
1961710d5835SEric Dumazet 	IFLA_MCTP_UNSPEC,
1962710d5835SEric Dumazet 	IFLA_MCTP_NET,
1963710d5835SEric Dumazet 	__IFLA_MCTP_MAX,
1964710d5835SEric Dumazet };
1965710d5835SEric Dumazet 
1966710d5835SEric Dumazet #define IFLA_MCTP_MAX (__IFLA_MCTP_MAX - 1)
1967710d5835SEric Dumazet 
19685c1b994dSDaniel Borkmann /* DSA section */
19695c1b994dSDaniel Borkmann 
19705c1b994dSDaniel Borkmann enum {
19715c1b994dSDaniel Borkmann 	IFLA_DSA_UNSPEC,
197210752583SDaniel Borkmann 	IFLA_DSA_CONDUIT,
197310752583SDaniel Borkmann 	/* Deprecated, use IFLA_DSA_CONDUIT instead */
197410752583SDaniel Borkmann 	IFLA_DSA_MASTER = IFLA_DSA_CONDUIT,
19755c1b994dSDaniel Borkmann 	__IFLA_DSA_MAX,
19765c1b994dSDaniel Borkmann };
19775c1b994dSDaniel Borkmann 
19785c1b994dSDaniel Borkmann #define IFLA_DSA_MAX	(__IFLA_DSA_MAX - 1)
19795c1b994dSDaniel Borkmann 
1980dc2b9f19SEric Leblond #endif /* _UAPI_LINUX_IF_LINK_H */
1981