Commit c5a9f6f0 authored by Eugenia Emantayev's avatar Eugenia Emantayev Committed by Saeed Mahameed

net/core: Add drop counters to VF statistics

Modern hardware can decide to drop packets going to/from a VF.
Add receive and transmit drop counters to be displayed at hypervisor
layer in iproute2 per VF statistics.
Signed-off-by: default avatarEugenia Emantayev <eugenia@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent 43127824
...@@ -13,6 +13,8 @@ struct ifla_vf_stats { ...@@ -13,6 +13,8 @@ struct ifla_vf_stats {
__u64 tx_bytes; __u64 tx_bytes;
__u64 broadcast; __u64 broadcast;
__u64 multicast; __u64 multicast;
__u64 rx_dropped;
__u64 tx_dropped;
}; };
struct ifla_vf_info { struct ifla_vf_info {
......
...@@ -732,6 +732,8 @@ enum { ...@@ -732,6 +732,8 @@ enum {
IFLA_VF_STATS_BROADCAST, IFLA_VF_STATS_BROADCAST,
IFLA_VF_STATS_MULTICAST, IFLA_VF_STATS_MULTICAST,
IFLA_VF_STATS_PAD, IFLA_VF_STATS_PAD,
IFLA_VF_STATS_RX_DROPPED,
IFLA_VF_STATS_TX_DROPPED,
__IFLA_VF_STATS_MAX, __IFLA_VF_STATS_MAX,
}; };
......
...@@ -904,6 +904,10 @@ static inline int rtnl_vfinfo_size(const struct net_device *dev, ...@@ -904,6 +904,10 @@ static inline int rtnl_vfinfo_size(const struct net_device *dev,
nla_total_size_64bit(sizeof(__u64)) + nla_total_size_64bit(sizeof(__u64)) +
/* IFLA_VF_STATS_MULTICAST */ /* IFLA_VF_STATS_MULTICAST */
nla_total_size_64bit(sizeof(__u64)) + nla_total_size_64bit(sizeof(__u64)) +
/* IFLA_VF_STATS_RX_DROPPED */
nla_total_size_64bit(sizeof(__u64)) +
/* IFLA_VF_STATS_TX_DROPPED */
nla_total_size_64bit(sizeof(__u64)) +
nla_total_size(sizeof(struct ifla_vf_trust))); nla_total_size(sizeof(struct ifla_vf_trust)));
return size; return size;
} else } else
...@@ -1258,7 +1262,11 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, ...@@ -1258,7 +1262,11 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
nla_put_u64_64bit(skb, IFLA_VF_STATS_BROADCAST, nla_put_u64_64bit(skb, IFLA_VF_STATS_BROADCAST,
vf_stats.broadcast, IFLA_VF_STATS_PAD) || vf_stats.broadcast, IFLA_VF_STATS_PAD) ||
nla_put_u64_64bit(skb, IFLA_VF_STATS_MULTICAST, nla_put_u64_64bit(skb, IFLA_VF_STATS_MULTICAST,
vf_stats.multicast, IFLA_VF_STATS_PAD)) { vf_stats.multicast, IFLA_VF_STATS_PAD) ||
nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_DROPPED,
vf_stats.rx_dropped, IFLA_VF_STATS_PAD) ||
nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_DROPPED,
vf_stats.tx_dropped, IFLA_VF_STATS_PAD)) {
nla_nest_cancel(skb, vfstats); nla_nest_cancel(skb, vfstats);
goto nla_put_vf_failure; goto nla_put_vf_failure;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment