Avoid marking non IPv4 packet with checksum good. Avoid requesting TCP segmentation for non TCP traffic.
Don't ask for TCP checksum offload along TCP segmentation (the latter implies the former). Fixes: 5d11c47d3ebe ("userspace: Enable IP checksum offloading by default.") Fixes: 0edfe05e4256 ("netdev-dummy: Add support and test for TSO.") Signed-off-by: David Marchand <david.march...@redhat.com> --- lib/netdev-dummy.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index e8bbf8d514..9eea50c1c7 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -1131,15 +1131,30 @@ netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch, netdev->rxq_stats[rxq_->queue_id].bytes += dp_packet_size(packet); netdev->custom_stats[0].value++; netdev->custom_stats[1].value++; - if (netdev->ol_ip_csum_set_good) { - /* The netdev hardware sets the flag when the packet has good csum. */ - dp_packet_ol_set_ip_csum_good(packet); - } - if (userspace_tso_enabled() && netdev->ol_tso_segsz) { - dp_packet_set_tso_segsz(packet, netdev->ol_tso_segsz); - dp_packet_hwol_set_tcp_seg(packet); - dp_packet_hwol_set_csum_tcp(packet); + if (dp_packet_l3(packet)) { + const struct ip_header *ip_hdr; + uint8_t proto = 0; + + ip_hdr = dp_packet_at(packet, packet->l3_ofs, sizeof *ip_hdr); + if (ip_hdr && IP_VER(ip_hdr->ip_ihl_ver) == 4) { + if (netdev->ol_ip_csum_set_good) { + dp_packet_ol_set_ip_csum_good(packet); + } + proto = ip_hdr->ip_proto; + } else if (ip_hdr && IP_VER(ip_hdr->ip_ihl_ver) == 6) { + const struct ovs_16aligned_ip6_hdr *ip6_hdr; + + ip6_hdr = dp_packet_at(packet, packet->l3_ofs, sizeof *ip6_hdr); + if (ip6_hdr) { + proto = ip6_hdr->ip6_nxt; + } + } + + if (proto == IPPROTO_TCP && netdev->ol_tso_segsz) { + dp_packet_set_tso_segsz(packet, netdev->ol_tso_segsz); + dp_packet_hwol_set_tcp_seg(packet); + } } ovs_mutex_unlock(&netdev->mutex); -- 2.48.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev