xref: /linux/include/linux/if_link.h (revision f2ee442115c9b6219083c019939a9cc0c9abb2f8)
1 #ifndef _LINUX_IF_LINK_H
2 #define _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 */
8 struct 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 */
41 struct 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 */
74 struct 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 
101 enum {
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_MAX
141 };
142 
143 
144 #define IFLA_MAX (__IFLA_MAX - 1)
145 
146 /* backwards compatibility for userspace */
147 #ifndef __KERNEL__
148 #define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
149 #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
150 #endif
151 
152 enum {
153 	IFLA_INET_UNSPEC,
154 	IFLA_INET_CONF,
155 	__IFLA_INET_MAX,
156 };
157 
158 #define IFLA_INET_MAX (__IFLA_INET_MAX - 1)
159 
160 /* ifi_flags.
161 
162    IFF_* flags.
163 
164    The only change is:
165    IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
166    more not changeable by user. They describe link media
167    characteristics and set by device driver.
168 
169    Comments:
170    - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
171    - If neither of these three flags are set;
172      the interface is NBMA.
173 
174    - IFF_MULTICAST does not mean anything special:
175    multicasts can be used on all not-NBMA links.
176    IFF_MULTICAST means that this media uses special encapsulation
177    for multicast frames. Apparently, all IFF_POINTOPOINT and
178    IFF_BROADCAST devices are able to use multicasts too.
179  */
180 
181 /* IFLA_LINK.
182    For usual devices it is equal ifi_index.
183    If it is a "virtual interface" (f.e. tunnel), ifi_link
184    can point to real physical interface (f.e. for bandwidth calculations),
185    or maybe 0, what means, that real media is unknown (usual
186    for IPIP tunnels, when route to endpoint is allowed to change)
187  */
188 
189 /* Subtype attributes for IFLA_PROTINFO */
190 enum {
191 	IFLA_INET6_UNSPEC,
192 	IFLA_INET6_FLAGS,	/* link flags			*/
193 	IFLA_INET6_CONF,	/* sysctl parameters		*/
194 	IFLA_INET6_STATS,	/* statistics			*/
195 	IFLA_INET6_MCAST,	/* MC things. What of them?	*/
196 	IFLA_INET6_CACHEINFO,	/* time values and max reasm size */
197 	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/
198 	__IFLA_INET6_MAX
199 };
200 
201 #define IFLA_INET6_MAX	(__IFLA_INET6_MAX - 1)
202 
203 struct ifla_cacheinfo {
204 	__u32	max_reasm_len;
205 	__u32	tstamp;		/* ipv6InterfaceTable updated timestamp */
206 	__u32	reachable_time;
207 	__u32	retrans_time;
208 };
209 
210 enum {
211 	IFLA_INFO_UNSPEC,
212 	IFLA_INFO_KIND,
213 	IFLA_INFO_DATA,
214 	IFLA_INFO_XSTATS,
215 	__IFLA_INFO_MAX,
216 };
217 
218 #define IFLA_INFO_MAX	(__IFLA_INFO_MAX - 1)
219 
220 /* VLAN section */
221 
222 enum {
223 	IFLA_VLAN_UNSPEC,
224 	IFLA_VLAN_ID,
225 	IFLA_VLAN_FLAGS,
226 	IFLA_VLAN_EGRESS_QOS,
227 	IFLA_VLAN_INGRESS_QOS,
228 	__IFLA_VLAN_MAX,
229 };
230 
231 #define IFLA_VLAN_MAX	(__IFLA_VLAN_MAX - 1)
232 
233 struct ifla_vlan_flags {
234 	__u32	flags;
235 	__u32	mask;
236 };
237 
238 enum {
239 	IFLA_VLAN_QOS_UNSPEC,
240 	IFLA_VLAN_QOS_MAPPING,
241 	__IFLA_VLAN_QOS_MAX
242 };
243 
244 #define IFLA_VLAN_QOS_MAX	(__IFLA_VLAN_QOS_MAX - 1)
245 
246 struct ifla_vlan_qos_mapping {
247 	__u32 from;
248 	__u32 to;
249 };
250 
251 /* MACVLAN section */
252 enum {
253 	IFLA_MACVLAN_UNSPEC,
254 	IFLA_MACVLAN_MODE,
255 	__IFLA_MACVLAN_MAX,
256 };
257 
258 #define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
259 
260 enum macvlan_mode {
261 	MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
262 	MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */
263 	MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */
264 	MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */
265 };
266 
267 /* SR-IOV virtual function management section */
268 
269 enum {
270 	IFLA_VF_INFO_UNSPEC,
271 	IFLA_VF_INFO,
272 	__IFLA_VF_INFO_MAX,
273 };
274 
275 #define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
276 
277 enum {
278 	IFLA_VF_UNSPEC,
279 	IFLA_VF_MAC,		/* Hardware queue specific attributes */
280 	IFLA_VF_VLAN,
281 	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */
282 	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */
283 	__IFLA_VF_MAX,
284 };
285 
286 #define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
287 
288 struct ifla_vf_mac {
289 	__u32 vf;
290 	__u8 mac[32]; /* MAX_ADDR_LEN */
291 };
292 
293 struct ifla_vf_vlan {
294 	__u32 vf;
295 	__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
296 	__u32 qos;
297 };
298 
299 struct ifla_vf_tx_rate {
300 	__u32 vf;
301 	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
302 };
303 
304 struct ifla_vf_spoofchk {
305 	__u32 vf;
306 	__u32 setting;
307 };
308 #ifdef __KERNEL__
309 
310 /* We don't want this structure exposed to user space */
311 struct ifla_vf_info {
312 	__u32 vf;
313 	__u8 mac[32];
314 	__u32 vlan;
315 	__u32 qos;
316 	__u32 tx_rate;
317 	__u32 spoofchk;
318 };
319 #endif
320 
321 /* VF ports management section
322  *
323  *	Nested layout of set/get msg is:
324  *
325  *		[IFLA_NUM_VF]
326  *		[IFLA_VF_PORTS]
327  *			[IFLA_VF_PORT]
328  *				[IFLA_PORT_*], ...
329  *			[IFLA_VF_PORT]
330  *				[IFLA_PORT_*], ...
331  *			...
332  *		[IFLA_PORT_SELF]
333  *			[IFLA_PORT_*], ...
334  */
335 
336 enum {
337 	IFLA_VF_PORT_UNSPEC,
338 	IFLA_VF_PORT,			/* nest */
339 	__IFLA_VF_PORT_MAX,
340 };
341 
342 #define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1)
343 
344 enum {
345 	IFLA_PORT_UNSPEC,
346 	IFLA_PORT_VF,			/* __u32 */
347 	IFLA_PORT_PROFILE,		/* string */
348 	IFLA_PORT_VSI_TYPE,		/* 802.1Qbg (pre-)standard VDP */
349 	IFLA_PORT_INSTANCE_UUID,	/* binary UUID */
350 	IFLA_PORT_HOST_UUID,		/* binary UUID */
351 	IFLA_PORT_REQUEST,		/* __u8 */
352 	IFLA_PORT_RESPONSE,		/* __u16, output only */
353 	__IFLA_PORT_MAX,
354 };
355 
356 #define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1)
357 
358 #define PORT_PROFILE_MAX	40
359 #define PORT_UUID_MAX		16
360 #define PORT_SELF_VF		-1
361 
362 enum {
363 	PORT_REQUEST_PREASSOCIATE = 0,
364 	PORT_REQUEST_PREASSOCIATE_RR,
365 	PORT_REQUEST_ASSOCIATE,
366 	PORT_REQUEST_DISASSOCIATE,
367 };
368 
369 enum {
370 	PORT_VDP_RESPONSE_SUCCESS = 0,
371 	PORT_VDP_RESPONSE_INVALID_FORMAT,
372 	PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
373 	PORT_VDP_RESPONSE_UNUSED_VTID,
374 	PORT_VDP_RESPONSE_VTID_VIOLATION,
375 	PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
376 	PORT_VDP_RESPONSE_OUT_OF_SYNC,
377 	/* 0x08-0xFF reserved for future VDP use */
378 	PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
379 	PORT_PROFILE_RESPONSE_INPROGRESS,
380 	PORT_PROFILE_RESPONSE_INVALID,
381 	PORT_PROFILE_RESPONSE_BADSTATE,
382 	PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
383 	PORT_PROFILE_RESPONSE_ERROR,
384 };
385 
386 struct ifla_port_vsi {
387 	__u8 vsi_mgr_id;
388 	__u8 vsi_type_id[3];
389 	__u8 vsi_type_version;
390 	__u8 pad[3];
391 };
392 
393 #endif /* _LINUX_IF_LINK_H */
394