Kernel exports 64bit packet counters for qdisc/class stats in linux-5.5
Tested:
$ tc -s -d qd sh dev eth1 | grep pkt
Sent
4041158922097 bytes
46393862190 pkt (dropped 0, overlimits 0 requeues 2072)
Sent
501362903764 bytes
5762621697 pkt (dropped 0, overlimits 0 requeues 247)
Sent
533282357858 bytes
6128246542 pkt (dropped 0, overlimits 0 requeues 329)
Sent
515878280709 bytes
5875638916 pkt (dropped 0, overlimits 0 requeues 267)
Sent
516221011694 bytes
5933395197 pkt (dropped 0, overlimits 0 requeues 258)
Sent
513175109761 bytes
5898402114 pkt (dropped 0, overlimits 0 requeues 231)
Sent
480207942964 bytes
5519535407 pkt (dropped 0, overlimits 0 requeues 229)
Sent
483111196765 bytes
5552917950 pkt (dropped 0, overlimits 0 requeues 240)
Sent
497920120322 bytes
5723104387 pkt (dropped 0, overlimits 0 requeues 271)
$ tc -s -d cl sh dev eth1 | grep pkt
Sent
513196316238 bytes
5898645862 pkt (dropped 0, overlimits 0 requeues 231)
Sent
533304444981 bytes
6128500406 pkt (dropped 0, overlimits 0 requeues 329)
Sent
480227709687 bytes
5519762597 pkt (dropped 0, overlimits 0 requeues 229)
Sent
501383660279 bytes
5762860276 pkt (dropped 0, overlimits 0 requeues 247)
Sent
483131168192 bytes
5553147506 pkt (dropped 0, overlimits 0 requeues 240)
Sent
515899485505 bytes
5875882649 pkt (dropped 0, overlimits 0 requeues 267)
Sent
497940747031 bytes
5723341475 pkt (dropped 0, overlimits 0 requeues 271)
Sent
516242376893 bytes
5933640774 pkt (dropped 0, overlimits 0 requeues 258)
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
if (tbs[TCA_STATS_BASIC]) {
struct gnet_stats_basic bs = {0};
+ __u64 packets64 = 0;
+
+ if (tbs[TCA_STATS_PKT64])
+ packets64 = rta_getattr_u64(tbs[TCA_STATS_PKT64]);
memcpy(&bs, RTA_DATA(tbs[TCA_STATS_BASIC]), MIN(RTA_PAYLOAD(tbs[TCA_STATS_BASIC]), sizeof(bs)));
print_string(PRINT_FP, NULL, "%s", prefix);
print_lluint(PRINT_ANY, "bytes", "Sent %llu bytes", bs.bytes);
- print_uint(PRINT_ANY, "packets", " %u pkt", bs.packets);
+ if (packets64)
+ print_lluint(PRINT_ANY, "packets", " %llu pkt", packets64);
+ else
+ print_uint(PRINT_ANY, "packets", " %u pkt", bs.packets);
}
if (tbs[TCA_STATS_QUEUE]) {