mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2026-01-04 21:07:27 +00:00
tc_util: Add support for showing TCA_STATS_BASIC_HW statistics
Add support for showing hardware specific counters to easy
troubleshooting hardware offload.
$ tc -s filter show dev enp3s0np0 parent ffff:
filter protocol ip pref 1 flower chain 0
filter protocol ip pref 1 flower chain 0 handle 0x1
eth_type ipv4
dst_ip 2.0.0.0
src_ip 1.0.0.0
ip_flags nofrag
in_hw
action order 1: mirred (Egress Redirect to device eth1) stolen
index 1 ref 1 bind 1 installed 0 sec used 0 sec
Action statistics:
Sent 534884742 bytes 8915697 pkt (dropped 0, overlimits 0 requeues 0)
Sent software 187542 bytes 4077 pkt
Sent hardware 534697200 bytes 8911620 pkt
backlog 0b 0p requeues 0
cookie 89173e6a44447001becfd486bda17e29
Signed-off-by: Eelco Chaudron <echaudro@redhat.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
56155d4df8
commit
5ac138324e
41
tc/tc_util.c
41
tc/tc_util.c
@ -754,6 +754,44 @@ void print_tm(FILE *f, const struct tcf_t *tm)
|
||||
}
|
||||
}
|
||||
|
||||
static void print_tcstats_basic_hw(struct rtattr **tbs, char *prefix)
|
||||
{
|
||||
struct gnet_stats_basic bs_hw;
|
||||
|
||||
if (!tbs[TCA_STATS_BASIC_HW])
|
||||
return;
|
||||
|
||||
memcpy(&bs_hw, RTA_DATA(tbs[TCA_STATS_BASIC_HW]),
|
||||
MIN(RTA_PAYLOAD(tbs[TCA_STATS_BASIC_HW]), sizeof(bs_hw)));
|
||||
|
||||
if (bs_hw.bytes == 0 && bs_hw.packets == 0)
|
||||
return;
|
||||
|
||||
if (tbs[TCA_STATS_BASIC]) {
|
||||
struct gnet_stats_basic bs;
|
||||
|
||||
memcpy(&bs, RTA_DATA(tbs[TCA_STATS_BASIC]),
|
||||
MIN(RTA_PAYLOAD(tbs[TCA_STATS_BASIC]),
|
||||
sizeof(bs)));
|
||||
|
||||
if (bs.bytes >= bs_hw.bytes && bs.packets >= bs_hw.packets) {
|
||||
print_string(PRINT_FP, NULL, "%s", _SL_);
|
||||
print_string(PRINT_FP, NULL, "%s", prefix);
|
||||
print_lluint(PRINT_ANY, "sw_bytes",
|
||||
"Sent software %llu bytes",
|
||||
bs.bytes - bs_hw.bytes);
|
||||
print_uint(PRINT_ANY, "sw_packets", " %u pkt",
|
||||
bs.packets - bs_hw.packets);
|
||||
}
|
||||
}
|
||||
|
||||
print_string(PRINT_FP, NULL, "%s", _SL_);
|
||||
print_string(PRINT_FP, NULL, "%s", prefix);
|
||||
print_lluint(PRINT_ANY, "hw_bytes", "Sent hardware %llu bytes",
|
||||
bs_hw.bytes);
|
||||
print_uint(PRINT_ANY, "hw_packets", " %u pkt", bs_hw.packets);
|
||||
}
|
||||
|
||||
void print_tcstats2_attr(FILE *fp, struct rtattr *rta, char *prefix, struct rtattr **xstats)
|
||||
{
|
||||
SPRINT_BUF(b1);
|
||||
@ -780,6 +818,9 @@ void print_tcstats2_attr(FILE *fp, struct rtattr *rta, char *prefix, struct rtat
|
||||
print_uint(PRINT_ANY, "requeues", " requeues %u) ", q.requeues);
|
||||
}
|
||||
|
||||
if (tbs[TCA_STATS_BASIC_HW])
|
||||
print_tcstats_basic_hw(tbs, prefix);
|
||||
|
||||
if (tbs[TCA_STATS_RATE_EST64]) {
|
||||
struct gnet_stats_rate_est64 re = {0};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user