1faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#ifndef _LINUX_IF_LINK_H
2faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define _LINUX_IF_LINK_H
3faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
4faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#include <linux/types.h>
5faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#include <linux/netlink.h>
6faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
76cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt/* This struct should be in sync with struct rtnl_link_stats64 */
86cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct rtnl_link_stats {
9faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_packets;		/* total packets received	*/
10faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_packets;		/* total packets transmitted	*/
11faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_bytes;		/* total bytes received 	*/
12faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_bytes;		/* total bytes transmitted	*/
13faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_errors;		/* bad packets received		*/
14faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_errors;		/* packet transmit problems	*/
15faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_dropped;		/* no space in linux buffers	*/
16faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_dropped;		/* no space available in linux	*/
17faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	multicast;		/* multicast packets received	*/
18faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	collisions;
19faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
20faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	/* detailed rx_errors: */
21faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_length_errors;
22faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_over_errors;		/* receiver ring buff overflow	*/
23faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_crc_errors;		/* recved pkt with crc error	*/
24faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_frame_errors;	/* recv'd frame alignment error */
25faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_fifo_errors;		/* recv'r fifo overrun		*/
26faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_missed_errors;	/* receiver missed packet	*/
27faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
28faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	/* detailed tx_errors */
29faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_aborted_errors;
30faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_carrier_errors;
31faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_fifo_errors;
32faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_heartbeat_errors;
33faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_window_errors;
34faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
35faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	/* for cslip etc */
36faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	rx_compressed;
37faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tx_compressed;
38faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
39faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
406cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt/* The main device statistics structure */
416cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct rtnl_link_stats64 {
426cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_packets;		/* total packets received	*/
436cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_packets;		/* total packets transmitted	*/
446cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_bytes;		/* total bytes received 	*/
456cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_bytes;		/* total bytes transmitted	*/
466cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_errors;		/* bad packets received		*/
476cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_errors;		/* packet transmit problems	*/
486cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_dropped;		/* no space in linux buffers	*/
496cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_dropped;		/* no space available in linux	*/
506cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	multicast;		/* multicast packets received	*/
516cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	collisions;
526cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
536cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	/* detailed rx_errors: */
546cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_length_errors;
556cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_over_errors;		/* receiver ring buff overflow	*/
566cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_crc_errors;		/* recved pkt with crc error	*/
576cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_frame_errors;	/* recv'd frame alignment error */
586cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_fifo_errors;		/* recv'r fifo overrun		*/
596cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_missed_errors;	/* receiver missed packet	*/
606cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
616cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	/* detailed tx_errors */
626cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_aborted_errors;
636cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_carrier_errors;
646cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_fifo_errors;
656cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_heartbeat_errors;
666cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_window_errors;
676cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
686cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	/* for cslip etc */
696cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	rx_compressed;
706cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u64	tx_compressed;
716cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
726cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
73faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat/* The struct should be in sync with struct ifmap */
746cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct rtnl_link_ifmap {
75faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u64	mem_start;
76faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u64	mem_end;
77faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u64	base_addr;
78faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u16	irq;
79faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u8	dma;
80faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u8	port;
81faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
82faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
836cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
84faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_UNSPEC,
85faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_ADDRESS,
86faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_BROADCAST,
87faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_IFNAME,
88faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_MTU,
89faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_LINK,
90faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_QDISC,
91faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_STATS,
92faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_COST,
93faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_COST IFLA_COST
94faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_PRIORITY,
95faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_PRIORITY IFLA_PRIORITY
96faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_MASTER,
97faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_MASTER IFLA_MASTER
98faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_WIRELESS,		/* Wireless Extension event - see wireless.h */
99faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_WIRELESS IFLA_WIRELESS
100faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_PROTINFO,		/* Protocol specific information for a link */
101faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_PROTINFO IFLA_PROTINFO
102faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_TXQLEN,
103faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_TXQLEN IFLA_TXQLEN
104faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_MAP,
105faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_MAP IFLA_MAP
106faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_WEIGHT,
107faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_WEIGHT IFLA_WEIGHT
108faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_OPERSTATE,
109faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_LINKMODE,
110faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_LINKINFO,
111faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_LINKINFO IFLA_LINKINFO
112faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_NET_NS_PID,
113faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_IFALIAS,
1146cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_NUM_VF,		/* Number of VFs if device is SR-IOV PF */
1156cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VFINFO_LIST,
1166cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_STATS64,
1176cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_PORTS,
1186cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_SELF,
119faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__IFLA_MAX
120faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
121faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
122faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
123faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_MAX (__IFLA_MAX - 1)
124faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
125faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat/* backwards compatibility for userspace */
126faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#ifndef __KERNEL__
127faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
128faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
129faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#endif
130faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
131faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat/* ifi_flags.
132faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
133faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   IFF_* flags.
134faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
135faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   The only change is:
136faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
137faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   more not changeable by user. They describe link media
138faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   characteristics and set by device driver.
139faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
140faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   Comments:
141faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
142faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   - If neither of these three flags are set;
143faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat     the interface is NBMA.
144faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
145faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   - IFF_MULTICAST does not mean anything special:
146faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   multicasts can be used on all not-NBMA links.
147faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   IFF_MULTICAST means that this media uses special encapsulation
148faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   for multicast frames. Apparently, all IFF_POINTOPOINT and
149faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   IFF_BROADCAST devices are able to use multicasts too.
150faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat */
151faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
152faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat/* IFLA_LINK.
153faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   For usual devices it is equal ifi_index.
154faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   If it is a "virtual interface" (f.e. tunnel), ifi_link
155faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   can point to real physical interface (f.e. for bandwidth calculations),
156faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   or maybe 0, what means, that real media is unknown (usual
157faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat   for IPIP tunnels, when route to endpoint is allowed to change)
158faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat */
159faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
160faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat/* Subtype attributes for IFLA_PROTINFO */
1616cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
162faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INET6_UNSPEC,
163faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INET6_FLAGS,	/* link flags			*/
164faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INET6_CONF,	/* sysctl parameters		*/
165faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INET6_STATS,	/* statistics			*/
166faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INET6_MCAST,	/* MC things. What of them?	*/
167faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INET6_CACHEINFO,	/* time values and max reasm size */
168faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/
169faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__IFLA_INET6_MAX
170faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
171faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
172faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_INET6_MAX	(__IFLA_INET6_MAX - 1)
173faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
1746cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct ifla_cacheinfo {
175faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	max_reasm_len;
176faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	tstamp;		/* ipv6InterfaceTable updated timestamp */
177faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	reachable_time;
178faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	retrans_time;
179faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
180faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
1816cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
182faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INFO_UNSPEC,
183faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INFO_KIND,
184faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INFO_DATA,
185faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_INFO_XSTATS,
186faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__IFLA_INFO_MAX,
187faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
188faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
189faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_INFO_MAX	(__IFLA_INFO_MAX - 1)
190faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
191faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat/* VLAN section */
192faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
1936cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
194faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_VLAN_UNSPEC,
195faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_VLAN_ID,
196faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_VLAN_FLAGS,
197faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_VLAN_EGRESS_QOS,
198faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_VLAN_INGRESS_QOS,
199faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__IFLA_VLAN_MAX,
200faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
201faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
202faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_VLAN_MAX	(__IFLA_VLAN_MAX - 1)
203faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
204faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehatstruct ifla_vlan_flags {
205faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	flags;
206faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32	mask;
207faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
208faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
2096cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
210faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_VLAN_QOS_UNSPEC,
211faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	IFLA_VLAN_QOS_MAPPING,
212faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__IFLA_VLAN_QOS_MAX
213faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
214faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
215faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#define IFLA_VLAN_QOS_MAX	(__IFLA_VLAN_QOS_MAX - 1)
216faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
2176cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct ifla_vlan_qos_mapping {
218faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32 from;
219faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat	__u32 to;
220faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat};
221faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat
2226cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt/* MACVLAN section */
2236cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
2246cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_MACVLAN_UNSPEC,
2256cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_MACVLAN_MODE,
2266cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__IFLA_MACVLAN_MAX,
2276cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2286cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2296cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
2306cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2316cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum macvlan_mode {
2326cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
2336cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */
2346cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */
2356cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2366cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2376cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt/* SR-IOV virtual function management section */
2386cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2396cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
2406cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_INFO_UNSPEC,
2416cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_INFO,
2426cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__IFLA_VF_INFO_MAX,
2436cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2446cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2456cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
2466cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2476cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
2486cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_UNSPEC,
2496cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_MAC,		/* Hardware queue specific attributes */
2506cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_VLAN,
2516cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */
2526cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__IFLA_VF_MAX,
2536cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2546cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2556cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
2566cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2576cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct ifla_vf_mac {
2586cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 vf;
2596cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u8 mac[32]; /* MAX_ADDR_LEN */
2606cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2616cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2626cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct ifla_vf_vlan {
2636cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 vf;
2646cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
2656cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 qos;
2666cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2676cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2686cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct ifla_vf_tx_rate {
2696cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 vf;
2706cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
2716cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2726cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2736cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct ifla_vf_info {
2746cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 vf;
2756cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u8 mac[32];
2766cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 vlan;
2776cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 qos;
2786cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u32 tx_rate;
2796cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
2806cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2816cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt/* VF ports management section
2826cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *
2836cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *	Nested layout of set/get msg is:
2846cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *
2856cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *		[IFLA_NUM_VF]
2866cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *		[IFLA_VF_PORTS]
2876cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *			[IFLA_VF_PORT]
2886cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *				[IFLA_PORT_*], ...
2896cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *			[IFLA_VF_PORT]
2906cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *				[IFLA_PORT_*], ...
2916cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *			...
2926cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *		[IFLA_PORT_SELF]
2936cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt *			[IFLA_PORT_*], ...
2946cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt */
2956cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
2966cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
2976cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_PORT_UNSPEC,
2986cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_VF_PORT,			/* nest */
2996cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__IFLA_VF_PORT_MAX,
3006cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
3016cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
3026cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1)
3036cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
3046cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
3056cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_UNSPEC,
3066cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_VF,			/* __u32 */
3076cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_PROFILE,		/* string */
3086cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_VSI_TYPE,		/* 802.1Qbg (pre-)standard VDP */
3096cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_INSTANCE_UUID,	/* binary UUID */
3106cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_HOST_UUID,		/* binary UUID */
3116cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_REQUEST,		/* __u8 */
3126cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	IFLA_PORT_RESPONSE,		/* __u16, output only */
3136cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__IFLA_PORT_MAX,
3146cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
3156cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
3166cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1)
3176cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
3186cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define PORT_PROFILE_MAX	40
3196cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define PORT_UUID_MAX		16
3206cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt#define PORT_SELF_VF		-1
3216cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
3226cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
3236cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_REQUEST_PREASSOCIATE = 0,
3246cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_REQUEST_PREASSOCIATE_RR,
3256cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_REQUEST_ASSOCIATE,
3266cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_REQUEST_DISASSOCIATE,
3276cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
3286cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
3296cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtenum {
3306cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_VDP_RESPONSE_SUCCESS = 0,
3316cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_VDP_RESPONSE_INVALID_FORMAT,
3326cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
3336cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_VDP_RESPONSE_UNUSED_VTID,
3346cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_VDP_RESPONSE_VTID_VIOLATION,
3356cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
3366cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_VDP_RESPONSE_OUT_OF_SYNC,
3376cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	/* 0x08-0xFF reserved for future VDP use */
3386cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
3396cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_PROFILE_RESPONSE_INPROGRESS,
3406cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_PROFILE_RESPONSE_INVALID,
3416cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_PROFILE_RESPONSE_BADSTATE,
3426cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
3436cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	PORT_PROFILE_RESPONSE_ERROR,
3446cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
3456cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
3466cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidtstruct ifla_port_vsi {
3476cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u8 vsi_mgr_id;
3486cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u8 vsi_type_id[3];
3496cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u8 vsi_type_version;
3506cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt	__u8 pad[3];
3516cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt};
3526cc0d5c38d97a1f3f8144227a4e8ec18c2353690Dmitry Shmidt
353faeff4e8918c60eb0840f42f0d34efa7fe69db9aSan Mehat#endif /* _LINUX_IF_LINK_H */
354