![Williams, Mitch A](/assets/img/avatar_default.png)
Add SR-IOV VF management methods to IFLA_LINKINFO. This allows userspace to use rtnetlink to configure VF network devices. Signed-off-by: Mitch Williams <mitch.a.williams@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
230 lines
5.4 KiB
C
230 lines
5.4 KiB
C
#ifndef _LINUX_IF_LINK_H
|
|
#define _LINUX_IF_LINK_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/netlink.h>
|
|
|
|
/* The struct should be in sync with struct net_device_stats */
|
|
struct rtnl_link_stats {
|
|
__u32 rx_packets; /* total packets received */
|
|
__u32 tx_packets; /* total packets transmitted */
|
|
__u32 rx_bytes; /* total bytes received */
|
|
__u32 tx_bytes; /* total bytes transmitted */
|
|
__u32 rx_errors; /* bad packets received */
|
|
__u32 tx_errors; /* packet transmit problems */
|
|
__u32 rx_dropped; /* no space in linux buffers */
|
|
__u32 tx_dropped; /* no space available in linux */
|
|
__u32 multicast; /* multicast packets received */
|
|
__u32 collisions;
|
|
|
|
/* detailed rx_errors: */
|
|
__u32 rx_length_errors;
|
|
__u32 rx_over_errors; /* receiver ring buff overflow */
|
|
__u32 rx_crc_errors; /* recved pkt with crc error */
|
|
__u32 rx_frame_errors; /* recv'd frame alignment error */
|
|
__u32 rx_fifo_errors; /* recv'r fifo overrun */
|
|
__u32 rx_missed_errors; /* receiver missed packet */
|
|
|
|
/* detailed tx_errors */
|
|
__u32 tx_aborted_errors;
|
|
__u32 tx_carrier_errors;
|
|
__u32 tx_fifo_errors;
|
|
__u32 tx_heartbeat_errors;
|
|
__u32 tx_window_errors;
|
|
|
|
/* for cslip etc */
|
|
__u32 rx_compressed;
|
|
__u32 tx_compressed;
|
|
};
|
|
|
|
/* The struct should be in sync with struct ifmap */
|
|
struct rtnl_link_ifmap {
|
|
__u64 mem_start;
|
|
__u64 mem_end;
|
|
__u64 base_addr;
|
|
__u16 irq;
|
|
__u8 dma;
|
|
__u8 port;
|
|
};
|
|
|
|
enum {
|
|
IFLA_UNSPEC,
|
|
IFLA_ADDRESS,
|
|
IFLA_BROADCAST,
|
|
IFLA_IFNAME,
|
|
IFLA_MTU,
|
|
IFLA_LINK,
|
|
IFLA_QDISC,
|
|
IFLA_STATS,
|
|
IFLA_COST,
|
|
#define IFLA_COST IFLA_COST
|
|
IFLA_PRIORITY,
|
|
#define IFLA_PRIORITY IFLA_PRIORITY
|
|
IFLA_MASTER,
|
|
#define IFLA_MASTER IFLA_MASTER
|
|
IFLA_WIRELESS, /* Wireless Extension event - see wireless.h */
|
|
#define IFLA_WIRELESS IFLA_WIRELESS
|
|
IFLA_PROTINFO, /* Protocol specific information for a link */
|
|
#define IFLA_PROTINFO IFLA_PROTINFO
|
|
IFLA_TXQLEN,
|
|
#define IFLA_TXQLEN IFLA_TXQLEN
|
|
IFLA_MAP,
|
|
#define IFLA_MAP IFLA_MAP
|
|
IFLA_WEIGHT,
|
|
#define IFLA_WEIGHT IFLA_WEIGHT
|
|
IFLA_OPERSTATE,
|
|
IFLA_LINKMODE,
|
|
IFLA_LINKINFO,
|
|
#define IFLA_LINKINFO IFLA_LINKINFO
|
|
IFLA_NET_NS_PID,
|
|
IFLA_IFALIAS,
|
|
IFLA_NUM_VF, /* Number of VFs if device is SR-IOV PF */
|
|
IFLA_VF_MAC, /* Hardware queue specific attributes */
|
|
IFLA_VF_VLAN,
|
|
IFLA_VF_TX_RATE, /* TX Bandwidth Allocation */
|
|
IFLA_VFINFO,
|
|
__IFLA_MAX
|
|
};
|
|
|
|
|
|
#define IFLA_MAX (__IFLA_MAX - 1)
|
|
|
|
/* backwards compatibility for userspace */
|
|
#ifndef __KERNEL__
|
|
#define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
|
|
#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
|
|
#endif
|
|
|
|
/* ifi_flags.
|
|
|
|
IFF_* flags.
|
|
|
|
The only change is:
|
|
IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
|
|
more not changeable by user. They describe link media
|
|
characteristics and set by device driver.
|
|
|
|
Comments:
|
|
- Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
|
|
- If neither of these three flags are set;
|
|
the interface is NBMA.
|
|
|
|
- IFF_MULTICAST does not mean anything special:
|
|
multicasts can be used on all not-NBMA links.
|
|
IFF_MULTICAST means that this media uses special encapsulation
|
|
for multicast frames. Apparently, all IFF_POINTOPOINT and
|
|
IFF_BROADCAST devices are able to use multicasts too.
|
|
*/
|
|
|
|
/* IFLA_LINK.
|
|
For usual devices it is equal ifi_index.
|
|
If it is a "virtual interface" (f.e. tunnel), ifi_link
|
|
can point to real physical interface (f.e. for bandwidth calculations),
|
|
or maybe 0, what means, that real media is unknown (usual
|
|
for IPIP tunnels, when route to endpoint is allowed to change)
|
|
*/
|
|
|
|
/* Subtype attributes for IFLA_PROTINFO */
|
|
enum {
|
|
IFLA_INET6_UNSPEC,
|
|
IFLA_INET6_FLAGS, /* link flags */
|
|
IFLA_INET6_CONF, /* sysctl parameters */
|
|
IFLA_INET6_STATS, /* statistics */
|
|
IFLA_INET6_MCAST, /* MC things. What of them? */
|
|
IFLA_INET6_CACHEINFO, /* time values and max reasm size */
|
|
IFLA_INET6_ICMP6STATS, /* statistics (icmpv6) */
|
|
__IFLA_INET6_MAX
|
|
};
|
|
|
|
#define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1)
|
|
|
|
struct ifla_cacheinfo {
|
|
__u32 max_reasm_len;
|
|
__u32 tstamp; /* ipv6InterfaceTable updated timestamp */
|
|
__u32 reachable_time;
|
|
__u32 retrans_time;
|
|
};
|
|
|
|
enum {
|
|
IFLA_INFO_UNSPEC,
|
|
IFLA_INFO_KIND,
|
|
IFLA_INFO_DATA,
|
|
IFLA_INFO_XSTATS,
|
|
__IFLA_INFO_MAX,
|
|
};
|
|
|
|
#define IFLA_INFO_MAX (__IFLA_INFO_MAX - 1)
|
|
|
|
/* VLAN section */
|
|
|
|
enum {
|
|
IFLA_VLAN_UNSPEC,
|
|
IFLA_VLAN_ID,
|
|
IFLA_VLAN_FLAGS,
|
|
IFLA_VLAN_EGRESS_QOS,
|
|
IFLA_VLAN_INGRESS_QOS,
|
|
__IFLA_VLAN_MAX,
|
|
};
|
|
|
|
#define IFLA_VLAN_MAX (__IFLA_VLAN_MAX - 1)
|
|
|
|
struct ifla_vlan_flags {
|
|
__u32 flags;
|
|
__u32 mask;
|
|
};
|
|
|
|
enum {
|
|
IFLA_VLAN_QOS_UNSPEC,
|
|
IFLA_VLAN_QOS_MAPPING,
|
|
__IFLA_VLAN_QOS_MAX
|
|
};
|
|
|
|
#define IFLA_VLAN_QOS_MAX (__IFLA_VLAN_QOS_MAX - 1)
|
|
|
|
struct ifla_vlan_qos_mapping {
|
|
__u32 from;
|
|
__u32 to;
|
|
};
|
|
|
|
/* MACVLAN section */
|
|
enum {
|
|
IFLA_MACVLAN_UNSPEC,
|
|
IFLA_MACVLAN_MODE,
|
|
__IFLA_MACVLAN_MAX,
|
|
};
|
|
|
|
#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
|
|
|
|
enum macvlan_mode {
|
|
MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
|
|
MACVLAN_MODE_VEPA = 2, /* talk to other ports through ext bridge */
|
|
MACVLAN_MODE_BRIDGE = 4, /* talk to bridge ports directly */
|
|
};
|
|
|
|
/* SR-IOV virtual function managment section */
|
|
|
|
struct ifla_vf_mac {
|
|
__u32 vf;
|
|
__u8 mac[32]; /* MAX_ADDR_LEN */
|
|
};
|
|
|
|
struct ifla_vf_vlan {
|
|
__u32 vf;
|
|
__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
|
|
__u32 qos;
|
|
};
|
|
|
|
struct ifla_vf_tx_rate {
|
|
__u32 vf;
|
|
__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
|
|
};
|
|
|
|
struct ifla_vf_info {
|
|
__u32 vf;
|
|
__u8 mac[32];
|
|
__u32 vlan;
|
|
__u32 qos;
|
|
__u32 tx_rate;
|
|
};
|
|
#endif /* _LINUX_IF_LINK_H */
|