]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip: Add violation counters to VF statisctics
authorEran Ben Elisha <eranbe@mellanox.com>
Sun, 22 Jul 2018 10:31:12 +0000 (13:31 +0300)
committerDavid Ahern <dsahern@gmail.com>
Wed, 25 Jul 2018 16:59:36 +0000 (09:59 -0700)
Extend VFs statistics by receive and transmit violation counters.

Example: "ip -s link show dev enp5s0f0"

6: enp5s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 24:8a:07:a5:28:f0 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       2
    TX: bytes  packets  errors  dropped carrier collsns
    1406       17       0       0       0       0
    vf 0 MAC 00:00:ca:fe:ca:fe, vlan 5, spoof checking off, link-state auto, trust off, query_rss off
    RX: bytes  packets  mcast   bcast   dropped
    1666       29       14         32      0
    TX: bytes  packets   dropped
    2880       44       2412

Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
ip/ipaddress.c

index 5009bfe6d2e3a20753e045a0bb0974728542bed8..ddb8bf876e104b4d30b775ab2197efe7eebb1f7e 100644 (file)
@@ -562,6 +562,9 @@ static void print_vf_stats64(FILE *fp, struct rtattr *vfstats)
                           rta_getattr_u64(vf[IFLA_VF_STATS_MULTICAST]));
                print_u64(PRINT_JSON, "broadcast", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_BROADCAST]));
+               if (vf[IFLA_VF_STATS_RX_DROPPED])
+                       print_u64(PRINT_JSON, "dropped", NULL,
+                                 rta_getattr_u64(vf[IFLA_VF_STATS_RX_DROPPED]));
                close_json_object();
 
                /* TX stats */
@@ -570,26 +573,39 @@ static void print_vf_stats64(FILE *fp, struct rtattr *vfstats)
                           rta_getattr_u64(vf[IFLA_VF_STATS_TX_BYTES]));
                print_u64(PRINT_JSON, "tx_packets", NULL,
                           rta_getattr_u64(vf[IFLA_VF_STATS_TX_PACKETS]));
+               if (vf[IFLA_VF_STATS_TX_DROPPED])
+                       print_u64(PRINT_JSON, "dropped", NULL,
+                                 rta_getattr_u64(vf[IFLA_VF_STATS_TX_DROPPED]));
                close_json_object();
                close_json_object();
        } else {
                /* RX stats */
                fprintf(fp, "%s", _SL_);
-               fprintf(fp, "    RX: bytes  packets  mcast   bcast %s", _SL_);
+               fprintf(fp, "    RX: bytes  packets  mcast   bcast ");
+               if (vf[IFLA_VF_STATS_RX_DROPPED])
+                       fprintf(fp, "  dropped ");
+               fprintf(fp, "%s", _SL_);
                fprintf(fp, "    ");
 
                print_num(fp, 10, rta_getattr_u64(vf[IFLA_VF_STATS_RX_BYTES]));
                print_num(fp, 8, rta_getattr_u64(vf[IFLA_VF_STATS_RX_PACKETS]));
                print_num(fp, 7, rta_getattr_u64(vf[IFLA_VF_STATS_MULTICAST]));
                print_num(fp, 7, rta_getattr_u64(vf[IFLA_VF_STATS_BROADCAST]));
+               if (vf[IFLA_VF_STATS_RX_DROPPED])
+                       print_num(fp, 8, rta_getattr_u64(vf[IFLA_VF_STATS_RX_DROPPED]));
 
                /* TX stats */
                fprintf(fp, "%s", _SL_);
-               fprintf(fp, "    TX: bytes  packets %s", _SL_);
+               fprintf(fp, "    TX: bytes  packets ");
+               if (vf[IFLA_VF_STATS_TX_DROPPED])
+                       fprintf(fp, "  dropped ");
+               fprintf(fp, "%s", _SL_);
                fprintf(fp, "    ");
 
                print_num(fp, 10, rta_getattr_u64(vf[IFLA_VF_STATS_TX_BYTES]));
                print_num(fp, 8, rta_getattr_u64(vf[IFLA_VF_STATS_TX_PACKETS]));
+               if (vf[IFLA_VF_STATS_TX_DROPPED])
+                       print_num(fp, 8, rta_getattr_u64(vf[IFLA_VF_STATS_TX_DROPPED]));
        }
 }