So it looks like the primary reason is the presence of TX checksumming (the TX feature). Both scatter-gather (the "sg" feature) and TX checksumming ("tx") are required for the TSO feature to work:
NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */
NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */
NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */
NETIF_F_HW_CSUM means that a device can checksum all L4 packets in hardware and it cannot be enabled together with NETIF_F_IP_CSUM_BIT or NETIF_F_IPV6_CSUM.
It doesn't look like ICMP packets are ever checksummed in hardware so it makes sense that our ICMP flood tests were passing while TCP & UDP traffic generated by iperf3 was affected by the issue.
The NICs in question are Broadcom Netxtreme:
product: BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller
So it looks like the primary reason is the presence of TX checksumming (the TX feature). Both scatter-gather (the "sg" feature) and TX checksumming ("tx") are required for the TSO feature to work:
https:/ /github. com/torvalds/ linux/blob/ 219d54332a09e8d 8741c1e1982f5ea e56099de85/ net/core/ dev.c#L8620- L8637
When it comes to checksumming it is about L4 packets and there are multiple cases:
https:/ /github. com/torvalds/ linux/blob/ v5.4/include/ linux/netdev_ features. h#L16
NETIF_ F_IP_CSUM_ BIT, /* Can checksum TCP/UDP over IPv4. */ F_HW_CSUM_ BIT, /* Can checksum all the packets. */ F_IPV6_ CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */
NETIF_
NETIF_
NETIF_F_HW_CSUM means that a device can checksum all L4 packets in hardware and it cannot be enabled together with NETIF_F_IP_CSUM_BIT or NETIF_F_IPV6_CSUM.
It doesn't look like ICMP packets are ever checksummed in hardware so it makes sense that our ICMP flood tests were passing while TCP & UDP traffic generated by iperf3 was affected by the issue.
The NICs in question are Broadcom Netxtreme:
product: BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller