144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef _LINUX_IF_LINK_H
244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define _LINUX_IF_LINK_H
344d362409d5469aed47d19e7908d19bd194493aThomas Graf
444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/netlink.h>
544d362409d5469aed47d19e7908d19bd194493aThomas Graf
644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* The struct should be in sync with struct net_device_stats */
744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link_stats
844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_packets;		/* total packets received	*/
1044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_packets;		/* total packets transmitted	*/
1144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_bytes;		/* total bytes received 	*/
1244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_bytes;		/* total bytes transmitted	*/
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_errors;		/* bad packets received		*/
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_errors;		/* packet transmit problems	*/
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_dropped;		/* no space in linux buffers	*/
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_dropped;		/* no space available in linux	*/
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	multicast;		/* multicast packets received	*/
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	collisions;
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* detailed rx_errors: */
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_length_errors;
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_over_errors;		/* receiver ring buff overflow	*/
2344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_crc_errors;		/* recved pkt with crc error	*/
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_frame_errors;	/* recv'd frame alignment error */
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_fifo_errors;		/* recv'r fifo overrun		*/
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_missed_errors;	/* receiver missed packet	*/
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* detailed tx_errors */
2944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_aborted_errors;
3044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_carrier_errors;
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_fifo_errors;
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_heartbeat_errors;
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_window_errors;
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* for cslip etc */
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rx_compressed;
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tx_compressed;
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* The struct should be in sync with struct ifmap */
4144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link_ifmap
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
4344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64	mem_start;
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64	mem_end;
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64	base_addr;
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16	irq;
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8	dma;
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8	port;
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf
5144d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_UNSPEC,
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_ADDRESS,
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_BROADCAST,
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_IFNAME,
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_MTU,
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_LINK,
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_QDISC,
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_STATS,
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_COST,
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_COST IFLA_COST
6344d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_PRIORITY,
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_PRIORITY IFLA_PRIORITY
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_MASTER,
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_MASTER IFLA_MASTER
6744d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_WIRELESS,		/* Wireless Extension event - see wireless.h */
6844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_WIRELESS IFLA_WIRELESS
6944d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_PROTINFO,		/* Protocol specific information for a link */
7044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_PROTINFO IFLA_PROTINFO
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_TXQLEN,
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_TXQLEN IFLA_TXQLEN
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_MAP,
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_MAP IFLA_MAP
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_WEIGHT,
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_WEIGHT IFLA_WEIGHT
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_OPERSTATE,
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_LINKMODE,
79a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_LINKINFO,
80a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf#define IFLA_LINKINFO IFLA_LINKINFO
81a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_NET_NS_PID,
8244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__IFLA_MAX
8344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf
8644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_MAX (__IFLA_MAX - 1)
8744d362409d5469aed47d19e7908d19bd194493aThomas Graf
8844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* backwards compatibility for userspace */
8944d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __KERNEL__
9044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf/* ifi_flags.
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf
9644d362409d5469aed47d19e7908d19bd194493aThomas Graf   IFF_* flags.
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf
9844d362409d5469aed47d19e7908d19bd194493aThomas Graf   The only change is:
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf   IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
10044d362409d5469aed47d19e7908d19bd194493aThomas Graf   more not changeable by user. They describe link media
10144d362409d5469aed47d19e7908d19bd194493aThomas Graf   characteristics and set by device driver.
10244d362409d5469aed47d19e7908d19bd194493aThomas Graf
10344d362409d5469aed47d19e7908d19bd194493aThomas Graf   Comments:
10444d362409d5469aed47d19e7908d19bd194493aThomas Graf   - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
10544d362409d5469aed47d19e7908d19bd194493aThomas Graf   - If neither of these three flags are set;
10644d362409d5469aed47d19e7908d19bd194493aThomas Graf     the interface is NBMA.
10744d362409d5469aed47d19e7908d19bd194493aThomas Graf
10844d362409d5469aed47d19e7908d19bd194493aThomas Graf   - IFF_MULTICAST does not mean anything special:
10944d362409d5469aed47d19e7908d19bd194493aThomas Graf   multicasts can be used on all not-NBMA links.
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf   IFF_MULTICAST means that this media uses special encapsulation
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf   for multicast frames. Apparently, all IFF_POINTOPOINT and
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf   IFF_BROADCAST devices are able to use multicasts too.
11344d362409d5469aed47d19e7908d19bd194493aThomas Graf */
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf
11544d362409d5469aed47d19e7908d19bd194493aThomas Graf/* IFLA_LINK.
11644d362409d5469aed47d19e7908d19bd194493aThomas Graf   For usual devices it is equal ifi_index.
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf   If it is a "virtual interface" (f.e. tunnel), ifi_link
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf   can point to real physical interface (f.e. for bandwidth calculations),
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf   or maybe 0, what means, that real media is unknown (usual
12044d362409d5469aed47d19e7908d19bd194493aThomas Graf   for IPIP tunnels, when route to endpoint is allowed to change)
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf */
12244d362409d5469aed47d19e7908d19bd194493aThomas Graf
12344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Subtype attributes for IFLA_PROTINFO */
12444d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
12544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_INET6_UNSPEC,
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_INET6_FLAGS,	/* link flags			*/
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_INET6_CONF,	/* sysctl parameters		*/
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_INET6_STATS,	/* statistics			*/
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_INET6_MCAST,	/* MC things. What of them?	*/
13144d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_INET6_CACHEINFO,	/* time values and max reasm size */
13244d362409d5469aed47d19e7908d19bd194493aThomas Graf	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/
13344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__IFLA_INET6_MAX
13444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
13544d362409d5469aed47d19e7908d19bd194493aThomas Graf
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFLA_INET6_MAX	(__IFLA_INET6_MAX - 1)
13744d362409d5469aed47d19e7908d19bd194493aThomas Graf
13844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct ifla_cacheinfo
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
14044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	max_reasm_len;
14144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	tstamp;		/* ipv6InterfaceTable updated timestamp */
14244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	reachable_time;
14344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	retrans_time;
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
14544d362409d5469aed47d19e7908d19bd194493aThomas Graf
146a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Grafenum
147a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf{
148a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_INFO_UNSPEC,
149a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_INFO_KIND,
150a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_INFO_DATA,
151a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_INFO_XSTATS,
152a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	__IFLA_INFO_MAX,
153a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf};
154a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
155a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf#define IFLA_INFO_MAX	(__IFLA_INFO_MAX - 1)
156a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
157a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf/* VLAN section */
158a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
159a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Grafenum
160a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf{
161a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_VLAN_UNSPEC,
162a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_VLAN_ID,
163a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_VLAN_FLAGS,
164a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_VLAN_EGRESS_QOS,
165a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_VLAN_INGRESS_QOS,
166a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	__IFLA_VLAN_MAX,
167a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf};
168a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
169a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf#define IFLA_VLAN_MAX	(__IFLA_VLAN_MAX - 1)
170a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
171a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Grafstruct ifla_vlan_flags {
172a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	__u32	flags;
173a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	__u32	mask;
174a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf};
175a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
176a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Grafenum
177a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf{
178a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_VLAN_QOS_UNSPEC,
179a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	IFLA_VLAN_QOS_MAPPING,
180a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	__IFLA_VLAN_QOS_MAX
181a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf};
182a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
183a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf#define IFLA_VLAN_QOS_MAX	(__IFLA_VLAN_QOS_MAX - 1)
184a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
185a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Grafstruct ifla_vlan_qos_mapping
186a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf{
187a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	__u32 from;
188a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	__u32 to;
189a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf};
190a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf
19144d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif /* _LINUX_IF_LINK_H */
192