On Thu, 9 Aug 2018 11:16:02 -0400 Eelco Chaudron <echau...@redhat.com> wrote:
> > +static void print_tcstats_basic_hw(struct rtattr **tbs, char *prefix) > +{ > + struct gnet_stats_basic bs = {0}; If not present don't print it rather than printing zero. > + struct gnet_stats_basic bs_hw = {0}; This initialization is unnecessary since you always overwrite it. > + > + 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]) { > + 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, "\n%s", prefix); Please use the magic string _SL_ to allow supporting single line output mode. > + 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, "\n%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); > +}