1#ifndef _UAPI_LINUX_IF_LINK_H
2#define _UAPI_LINUX_IF_LINK_H
3
4#include <linux/types.h>
5#include <linux/netlink.h>
6
7/* This struct should be in sync with struct rtnl_link_stats64 */
8struct rtnl_link_stats {
9	__u32	rx_packets;		/* total packets received	*/
10	__u32	tx_packets;		/* total packets transmitted	*/
11	__u32	rx_bytes;		/* total bytes received 	*/
12	__u32	tx_bytes;		/* total bytes transmitted	*/
13	__u32	rx_errors;		/* bad packets received		*/
14	__u32	tx_errors;		/* packet transmit problems	*/
15	__u32	rx_dropped;		/* no space in linux buffers	*/
16	__u32	tx_dropped;		/* no space available in linux	*/
17	__u32	multicast;		/* multicast packets received	*/
18	__u32	collisions;
19
20	/* detailed rx_errors: */
21	__u32	rx_length_errors;
22	__u32	rx_over_errors;		/* receiver ring buff overflow	*/
23	__u32	rx_crc_errors;		/* recved pkt with crc error	*/
24	__u32	rx_frame_errors;	/* recv'd frame alignment error */
25	__u32	rx_fifo_errors;		/* recv'r fifo overrun		*/
26	__u32	rx_missed_errors;	/* receiver missed packet	*/
27
28	/* detailed tx_errors */
29	__u32	tx_aborted_errors;
30	__u32	tx_carrier_errors;
31	__u32	tx_fifo_errors;
32	__u32	tx_heartbeat_errors;
33	__u32	tx_window_errors;
34
35	/* for cslip etc */
36	__u32	rx_compressed;
37	__u32	tx_compressed;
38};
39
40/* The main device statistics structure */
41struct rtnl_link_stats64 {
42	__u64	rx_packets;		/* total packets received	*/
43	__u64	tx_packets;		/* total packets transmitted	*/
44	__u64	rx_bytes;		/* total bytes received 	*/
45	__u64	tx_bytes;		/* total bytes transmitted	*/
46	__u64	rx_errors;		/* bad packets received		*/
47	__u64	tx_errors;		/* packet transmit problems	*/
48	__u64	rx_dropped;		/* no space in linux buffers	*/
49	__u64	tx_dropped;		/* no space available in linux	*/
50	__u64	multicast;		/* multicast packets received	*/
51	__u64	collisions;
52
53	/* detailed rx_errors: */
54	__u64	rx_length_errors;
55	__u64	rx_over_errors;		/* receiver ring buff overflow	*/
56	__u64	rx_crc_errors;		/* recved pkt with crc error	*/
57	__u64	rx_frame_errors;	/* recv'd frame alignment error */
58	__u64	rx_fifo_errors;		/* recv'r fifo overrun		*/
59	__u64	rx_missed_errors;	/* receiver missed packet	*/
60
61	/* detailed tx_errors */
62	__u64	tx_aborted_errors;
63	__u64	tx_carrier_errors;
64	__u64	tx_fifo_errors;
65	__u64	tx_heartbeat_errors;
66	__u64	tx_window_errors;
67
68	/* for cslip etc */
69	__u64	rx_compressed;
70	__u64	tx_compressed;
71};
72
73/* The struct should be in sync with struct ifmap */
74struct rtnl_link_ifmap {
75	__u64	mem_start;
76	__u64	mem_end;
77	__u64	base_addr;
78	__u16	irq;
79	__u8	dma;
80	__u8	port;
81};
82
83/*
84 * IFLA_AF_SPEC
85 *   Contains nested attributes for address family specific attributes.
86 *   Each address family may create a attribute with the address family
87 *   number as type and create its own attribute structure in it.
88 *
89 *   Example:
90 *   [IFLA_AF_SPEC] = {
91 *       [AF_INET] = {
92 *           [IFLA_INET_CONF] = ...,
93 *       },
94 *       [AF_INET6] = {
95 *           [IFLA_INET6_FLAGS] = ...,
96 *           [IFLA_INET6_CONF] = ...,
97 *       }
98 *   }
99 */
100
101enum {
102	IFLA_UNSPEC,
103	IFLA_ADDRESS,
104	IFLA_BROADCAST,
105	IFLA_IFNAME,
106	IFLA_MTU,
107	IFLA_LINK,
108	IFLA_QDISC,
109	IFLA_STATS,
110	IFLA_COST,
111#define IFLA_COST IFLA_COST
112	IFLA_PRIORITY,
113#define IFLA_PRIORITY IFLA_PRIORITY
114	IFLA_MASTER,
115#define IFLA_MASTER IFLA_MASTER
116	IFLA_WIRELESS,		/* Wireless Extension event - see wireless.h */
117#define IFLA_WIRELESS IFLA_WIRELESS
118	IFLA_PROTINFO,		/* Protocol specific information for a link */
119#define IFLA_PROTINFO IFLA_PROTINFO
120	IFLA_TXQLEN,
121#define IFLA_TXQLEN IFLA_TXQLEN
122	IFLA_MAP,
123#define IFLA_MAP IFLA_MAP
124	IFLA_WEIGHT,
125#define IFLA_WEIGHT IFLA_WEIGHT
126	IFLA_OPERSTATE,
127	IFLA_LINKMODE,
128	IFLA_LINKINFO,
129#define IFLA_LINKINFO IFLA_LINKINFO
130	IFLA_NET_NS_PID,
131	IFLA_IFALIAS,
132	IFLA_NUM_VF,		/* Number of VFs if device is SR-IOV PF */
133	IFLA_VFINFO_LIST,
134	IFLA_STATS64,
135	IFLA_VF_PORTS,
136	IFLA_PORT_SELF,
137	IFLA_AF_SPEC,
138	IFLA_GROUP,		/* Group the device belongs to */
139	IFLA_NET_NS_FD,
140	IFLA_EXT_MASK,		/* Extended info mask, VFs, etc */
141	IFLA_PROMISCUITY,	/* Promiscuity count: > 0 means acts PROMISC */
142#define IFLA_PROMISCUITY IFLA_PROMISCUITY
143	IFLA_NUM_TX_QUEUES,
144	IFLA_NUM_RX_QUEUES,
145	IFLA_CARRIER,
146	IFLA_PHYS_PORT_ID,
147	__IFLA_MAX
148};
149
150
151#define IFLA_MAX (__IFLA_MAX - 1)
152
153/* backwards compatibility for userspace */
154#ifndef __KERNEL__
155#define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
156#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
157#endif
158
159enum {
160	IFLA_INET_UNSPEC,
161	IFLA_INET_CONF,
162	__IFLA_INET_MAX,
163};
164
165#define IFLA_INET_MAX (__IFLA_INET_MAX - 1)
166
167/* ifi_flags.
168
169   IFF_* flags.
170
171   The only change is:
172   IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
173   more not changeable by user. They describe link media
174   characteristics and set by device driver.
175
176   Comments:
177   - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
178   - If neither of these three flags are set;
179     the interface is NBMA.
180
181   - IFF_MULTICAST does not mean anything special:
182   multicasts can be used on all not-NBMA links.
183   IFF_MULTICAST means that this media uses special encapsulation
184   for multicast frames. Apparently, all IFF_POINTOPOINT and
185   IFF_BROADCAST devices are able to use multicasts too.
186 */
187
188/* IFLA_LINK.
189   For usual devices it is equal ifi_index.
190   If it is a "virtual interface" (f.e. tunnel), ifi_link
191   can point to real physical interface (f.e. for bandwidth calculations),
192   or maybe 0, what means, that real media is unknown (usual
193   for IPIP tunnels, when route to endpoint is allowed to change)
194 */
195
196/* Subtype attributes for IFLA_PROTINFO */
197enum {
198	IFLA_INET6_UNSPEC,
199	IFLA_INET6_FLAGS,	/* link flags			*/
200	IFLA_INET6_CONF,	/* sysctl parameters		*/
201	IFLA_INET6_STATS,	/* statistics			*/
202	IFLA_INET6_MCAST,	/* MC things. What of them?	*/
203	IFLA_INET6_CACHEINFO,	/* time values and max reasm size */
204	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/
205	IFLA_INET6_TOKEN,	/* device token			*/
206	__IFLA_INET6_MAX
207};
208
209#define IFLA_INET6_MAX	(__IFLA_INET6_MAX - 1)
210
211enum {
212	BRIDGE_MODE_UNSPEC,
213	BRIDGE_MODE_HAIRPIN,
214};
215
216enum {
217	IFLA_BRPORT_UNSPEC,
218	IFLA_BRPORT_STATE,	/* Spanning tree state     */
219	IFLA_BRPORT_PRIORITY,	/* "             priority  */
220	IFLA_BRPORT_COST,	/* "             cost      */
221	IFLA_BRPORT_MODE,	/* mode (hairpin)          */
222	IFLA_BRPORT_GUARD,	/* bpdu guard              */
223	IFLA_BRPORT_PROTECT,	/* root port protection    */
224	IFLA_BRPORT_FAST_LEAVE,	/* multicast fast leave    */
225	IFLA_BRPORT_LEARNING,	/* mac learning */
226	IFLA_BRPORT_UNICAST_FLOOD, /* flood unicast traffic */
227	__IFLA_BRPORT_MAX
228};
229#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
230
231struct ifla_cacheinfo {
232	__u32	max_reasm_len;
233	__u32	tstamp;		/* ipv6InterfaceTable updated timestamp */
234	__u32	reachable_time;
235	__u32	retrans_time;
236};
237
238enum {
239	IFLA_INFO_UNSPEC,
240	IFLA_INFO_KIND,
241	IFLA_INFO_DATA,
242	IFLA_INFO_XSTATS,
243	IFLA_INFO_SLAVE_KIND,
244	IFLA_INFO_SLAVE_DATA,
245	__IFLA_INFO_MAX,
246};
247
248#define IFLA_INFO_MAX	(__IFLA_INFO_MAX - 1)
249
250/* VLAN section */
251
252enum {
253	IFLA_VLAN_UNSPEC,
254	IFLA_VLAN_ID,
255	IFLA_VLAN_FLAGS,
256	IFLA_VLAN_EGRESS_QOS,
257	IFLA_VLAN_INGRESS_QOS,
258	IFLA_VLAN_PROTOCOL,
259	__IFLA_VLAN_MAX,
260};
261
262#define IFLA_VLAN_MAX	(__IFLA_VLAN_MAX - 1)
263
264struct ifla_vlan_flags {
265	__u32	flags;
266	__u32	mask;
267};
268
269enum {
270	IFLA_VLAN_QOS_UNSPEC,
271	IFLA_VLAN_QOS_MAPPING,
272	__IFLA_VLAN_QOS_MAX
273};
274
275#define IFLA_VLAN_QOS_MAX	(__IFLA_VLAN_QOS_MAX - 1)
276
277struct ifla_vlan_qos_mapping {
278	__u32 from;
279	__u32 to;
280};
281
282/* MACVLAN section */
283enum {
284	IFLA_MACVLAN_UNSPEC,
285	IFLA_MACVLAN_MODE,
286	IFLA_MACVLAN_FLAGS,
287	__IFLA_MACVLAN_MAX,
288};
289
290#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
291
292enum macvlan_mode {
293	MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
294	MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */
295	MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */
296	MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */
297};
298
299#define MACVLAN_FLAG_NOPROMISC	1
300
301/* VXLAN section */
302enum {
303	IFLA_VXLAN_UNSPEC,
304	IFLA_VXLAN_ID,
305	IFLA_VXLAN_GROUP,	/* group or remote address */
306	IFLA_VXLAN_LINK,
307	IFLA_VXLAN_LOCAL,
308	IFLA_VXLAN_TTL,
309	IFLA_VXLAN_TOS,
310	IFLA_VXLAN_LEARNING,
311	IFLA_VXLAN_AGEING,
312	IFLA_VXLAN_LIMIT,
313	IFLA_VXLAN_PORT_RANGE,	/* source port */
314	IFLA_VXLAN_PROXY,
315	IFLA_VXLAN_RSC,
316	IFLA_VXLAN_L2MISS,
317	IFLA_VXLAN_L3MISS,
318	IFLA_VXLAN_PORT,	/* destination port */
319	IFLA_VXLAN_GROUP6,
320	IFLA_VXLAN_LOCAL6,
321	__IFLA_VXLAN_MAX
322};
323#define IFLA_VXLAN_MAX	(__IFLA_VXLAN_MAX - 1)
324
325struct ifla_vxlan_port_range {
326	__be16	low;
327	__be16	high;
328};
329
330/* Bonding section */
331
332enum {
333	IFLA_BOND_UNSPEC,
334	IFLA_BOND_MODE,
335	IFLA_BOND_ACTIVE_SLAVE,
336	IFLA_BOND_MIIMON,
337	IFLA_BOND_UPDELAY,
338	IFLA_BOND_DOWNDELAY,
339	IFLA_BOND_USE_CARRIER,
340	IFLA_BOND_ARP_INTERVAL,
341	IFLA_BOND_ARP_IP_TARGET,
342	IFLA_BOND_ARP_VALIDATE,
343	IFLA_BOND_ARP_ALL_TARGETS,
344	IFLA_BOND_PRIMARY,
345	IFLA_BOND_PRIMARY_RESELECT,
346	IFLA_BOND_FAIL_OVER_MAC,
347	IFLA_BOND_XMIT_HASH_POLICY,
348	IFLA_BOND_RESEND_IGMP,
349	IFLA_BOND_NUM_PEER_NOTIF,
350	IFLA_BOND_ALL_SLAVES_ACTIVE,
351	IFLA_BOND_MIN_LINKS,
352	IFLA_BOND_LP_INTERVAL,
353	IFLA_BOND_PACKETS_PER_SLAVE,
354	IFLA_BOND_AD_LACP_RATE,
355	IFLA_BOND_AD_SELECT,
356	IFLA_BOND_AD_INFO,
357	__IFLA_BOND_MAX,
358};
359
360#define IFLA_BOND_MAX	(__IFLA_BOND_MAX - 1)
361
362enum {
363	IFLA_BOND_AD_INFO_UNSPEC,
364	IFLA_BOND_AD_INFO_AGGREGATOR,
365	IFLA_BOND_AD_INFO_NUM_PORTS,
366	IFLA_BOND_AD_INFO_ACTOR_KEY,
367	IFLA_BOND_AD_INFO_PARTNER_KEY,
368	IFLA_BOND_AD_INFO_PARTNER_MAC,
369	__IFLA_BOND_AD_INFO_MAX,
370};
371
372#define IFLA_BOND_AD_INFO_MAX	(__IFLA_BOND_AD_INFO_MAX - 1)
373
374enum {
375	IFLA_BOND_SLAVE_UNSPEC,
376	IFLA_BOND_SLAVE_STATE,
377	IFLA_BOND_SLAVE_MII_STATUS,
378	IFLA_BOND_SLAVE_LINK_FAILURE_COUNT,
379	IFLA_BOND_SLAVE_PERM_HWADDR,
380	IFLA_BOND_SLAVE_QUEUE_ID,
381	IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
382	__IFLA_BOND_SLAVE_MAX,
383};
384
385#define IFLA_BOND_SLAVE_MAX	(__IFLA_BOND_SLAVE_MAX - 1)
386
387/* SR-IOV virtual function management section */
388
389enum {
390	IFLA_VF_INFO_UNSPEC,
391	IFLA_VF_INFO,
392	__IFLA_VF_INFO_MAX,
393};
394
395#define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
396
397enum {
398	IFLA_VF_UNSPEC,
399	IFLA_VF_MAC,		/* Hardware queue specific attributes */
400	IFLA_VF_VLAN,
401	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */
402	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */
403	IFLA_VF_LINK_STATE,	/* link state enable/disable/auto switch */
404	__IFLA_VF_MAX,
405};
406
407#define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
408
409struct ifla_vf_mac {
410	__u32 vf;
411	__u8 mac[32]; /* MAX_ADDR_LEN */
412};
413
414struct ifla_vf_vlan {
415	__u32 vf;
416	__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
417	__u32 qos;
418};
419
420struct ifla_vf_tx_rate {
421	__u32 vf;
422	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
423};
424
425struct ifla_vf_spoofchk {
426	__u32 vf;
427	__u32 setting;
428};
429
430enum {
431	IFLA_VF_LINK_STATE_AUTO,	/* link state of the uplink */
432	IFLA_VF_LINK_STATE_ENABLE,	/* link always up */
433	IFLA_VF_LINK_STATE_DISABLE,	/* link always down */
434	__IFLA_VF_LINK_STATE_MAX,
435};
436
437struct ifla_vf_link_state {
438	__u32 vf;
439	__u32 link_state;
440};
441
442/* VF ports management section
443 *
444 *	Nested layout of set/get msg is:
445 *
446 *		[IFLA_NUM_VF]
447 *		[IFLA_VF_PORTS]
448 *			[IFLA_VF_PORT]
449 *				[IFLA_PORT_*], ...
450 *			[IFLA_VF_PORT]
451 *				[IFLA_PORT_*], ...
452 *			...
453 *		[IFLA_PORT_SELF]
454 *			[IFLA_PORT_*], ...
455 */
456
457enum {
458	IFLA_VF_PORT_UNSPEC,
459	IFLA_VF_PORT,			/* nest */
460	__IFLA_VF_PORT_MAX,
461};
462
463#define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1)
464
465enum {
466	IFLA_PORT_UNSPEC,
467	IFLA_PORT_VF,			/* __u32 */
468	IFLA_PORT_PROFILE,		/* string */
469	IFLA_PORT_VSI_TYPE,		/* 802.1Qbg (pre-)standard VDP */
470	IFLA_PORT_INSTANCE_UUID,	/* binary UUID */
471	IFLA_PORT_HOST_UUID,		/* binary UUID */
472	IFLA_PORT_REQUEST,		/* __u8 */
473	IFLA_PORT_RESPONSE,		/* __u16, output only */
474	__IFLA_PORT_MAX,
475};
476
477#define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1)
478
479#define PORT_PROFILE_MAX	40
480#define PORT_UUID_MAX		16
481#define PORT_SELF_VF		-1
482
483enum {
484	PORT_REQUEST_PREASSOCIATE = 0,
485	PORT_REQUEST_PREASSOCIATE_RR,
486	PORT_REQUEST_ASSOCIATE,
487	PORT_REQUEST_DISASSOCIATE,
488};
489
490enum {
491	PORT_VDP_RESPONSE_SUCCESS = 0,
492	PORT_VDP_RESPONSE_INVALID_FORMAT,
493	PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
494	PORT_VDP_RESPONSE_UNUSED_VTID,
495	PORT_VDP_RESPONSE_VTID_VIOLATION,
496	PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
497	PORT_VDP_RESPONSE_OUT_OF_SYNC,
498	/* 0x08-0xFF reserved for future VDP use */
499	PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
500	PORT_PROFILE_RESPONSE_INPROGRESS,
501	PORT_PROFILE_RESPONSE_INVALID,
502	PORT_PROFILE_RESPONSE_BADSTATE,
503	PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
504	PORT_PROFILE_RESPONSE_ERROR,
505};
506
507struct ifla_port_vsi {
508	__u8 vsi_mgr_id;
509	__u8 vsi_type_id[3];
510	__u8 vsi_type_version;
511	__u8 pad[3];
512};
513
514
515/* IPoIB section */
516
517enum {
518	IFLA_IPOIB_UNSPEC,
519	IFLA_IPOIB_PKEY,
520	IFLA_IPOIB_MODE,
521	IFLA_IPOIB_UMCAST,
522	__IFLA_IPOIB_MAX
523};
524
525enum {
526	IPOIB_MODE_DATAGRAM  = 0, /* using unreliable datagram QPs */
527	IPOIB_MODE_CONNECTED = 1, /* using connected QPs */
528};
529
530#define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1)
531
532
533/* HSR section */
534
535enum {
536	IFLA_HSR_UNSPEC,
537	IFLA_HSR_SLAVE1,
538	IFLA_HSR_SLAVE2,
539	IFLA_HSR_MULTICAST_SPEC,	/* Last byte of supervision addr */
540	IFLA_HSR_SUPERVISION_ADDR,	/* Supervision frame multicast addr */
541	IFLA_HSR_SEQ_NR,
542	__IFLA_HSR_MAX,
543};
544
545#define IFLA_HSR_MAX (__IFLA_HSR_MAX - 1)
546
547#endif /* _UAPI_LINUX_IF_LINK_H */
548