diff --git a/tools/tools/ifinfo/ifinfo.c b/tools/tools/ifinfo/ifinfo.c --- a/tools/tools/ifinfo/ifinfo.c +++ b/tools/tools/ifinfo/ifinfo.c @@ -149,9 +149,18 @@ return retval; } +static const char *csum_bits[] = {"CSUM_IP", "CSUM_IP_UDP", "CSUM_IP_TCP", + "CSUM_IP_SCTP", "CSUM_IP_TSO", "CSUM_IP_ISCSI", "CSUM_INNER_IP6_UDP", + "CSUM_INNER_IP6_TCP", "CSUM_INNER_IP6_TSO", "CSUM_IP6_UDP", "CSUM_IP6_TCP", + "CSUM_IP6_SCTP", "CSUM_IP6_TSO", "CSUM_IP6_ISCSI", "CSUM_INNER_IP", + "CSUM_INNER_IP_UDP", "CSUM_INNER_IP_TCP", "CSUM_INNER_IP_TSO", + "CSUM_ENCAP_VXLAN", "CSUM_ENCAP_RSVD1"}; + static void printit(const struct ifmibdata *ifmd, const char *dname) { + int i, first; + printf("Interface %.*s", IFNAMSIZ, ifmd->ifmd_name); if (dname != NULL) printf(" (%s)", dname); @@ -182,8 +191,24 @@ printf("\tinput queue drops: %lu\n", ifmd->ifmd_data.ifi_iqdrops); printf("\tpackets for unknown protocol: %lu\n", ifmd->ifmd_data.ifi_noproto); - printf("\tHW offload capabilities: 0x%lx\n", + printf("\tHW offload capabilities: 0x%lx", ifmd->ifmd_data.ifi_hwassist); + first = 1; + for (i = 0; i < (int)(sizeof(csum_bits) / sizeof(char *)); i++) { + if ((ifmd->ifmd_data.ifi_hwassist & (1 << i)) != 0) { + if (first == 1) { + printf("<"); + first = 0; + } else { + printf(","); + } + printf("%s", csum_bits[i]); + } + } + if (first == 0) { + printf(">"); + } + printf("\n"); printf("\tuptime at attach or stat reset: %lu\n", ifmd->ifmd_data.ifi_epoch); #ifdef notdef