net/tap: fix rx cksum flags on IP options packets
authorOlivier Matz <olivier.matz@6wind.com>
Tue, 27 Apr 2021 09:40:02 +0000 (11:40 +0200)
committerOlivier Matz <olivier.matz@6wind.com>
Tue, 27 Apr 2021 09:47:50 +0000 (11:47 +0200)
When packet type is IPV4_EXT, the checksum is always marked as good in
the mbuf offload flags.

Since we know the header lengths, we can easily call
rte_ipv4_udptcp_cksum() in this case too.

Fixes: 8ae3023387e9 ("net/tap: add Rx/Tx checksum offload support")
Cc: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
drivers/net/tap/rte_eth_tap.c

index 68baa18..e7b185a 100644 (file)
@@ -350,7 +350,7 @@ tap_verify_csum(struct rte_mbuf *mbuf)
                /* Don't verify checksum for multi-segment packets. */
                if (mbuf->nb_segs > 1)
                        return;
-               if (l3 == RTE_PTYPE_L3_IPV4) {
+               if (l3 == RTE_PTYPE_L3_IPV4 || l3 == RTE_PTYPE_L3_IPV4_EXT) {
                        if (l4 == RTE_PTYPE_L4_UDP) {
                                udp_hdr = (struct rte_udp_hdr *)l4_hdr;
                                if (udp_hdr->dgram_cksum == 0) {
@@ -364,7 +364,7 @@ tap_verify_csum(struct rte_mbuf *mbuf)
                                }
                        }
                        cksum = ~rte_ipv4_udptcp_cksum(l3_hdr, l4_hdr);
-               } else if (l3 == RTE_PTYPE_L3_IPV6) {
+               } else { /* l3 == RTE_PTYPE_L3_IPV6, checked above */
                        cksum = ~rte_ipv6_udptcp_cksum(l3_hdr, l4_hdr);
                }
                mbuf->ol_flags |= cksum ?