app/testpmd: fix IPv6 tunnel checksum
authorJeff Guo <jia.guo@intel.com>
Wed, 5 Apr 2017 04:48:43 +0000 (12:48 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 10 Apr 2017 20:50:01 +0000 (22:50 +0200)
When ipv6 packet is tunnel packet, "PKT_TX_OUTER_IPV6" flag must
be set, to let prepare the correct mbuf meta data for tx forward.

Fixes: 2b76648872c9 ("net/e1000: add Tx preparation")
Cc: stable@dpdk.org
Signed-off-by: Jeff Guo <jia.guo@intel.com>
app/test-pmd/csumonly.c

index 5eaff9b..66fc9a0 100644 (file)
@@ -417,7 +417,7 @@ process_outer_cksums(void *outer_l3_hdr, struct testpmd_offload_info *info,
                        ol_flags |= PKT_TX_OUTER_IP_CKSUM;
                else
                        ipv4_hdr->hdr_checksum = rte_ipv4_cksum(ipv4_hdr);
-       } else if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM)
+       } else
                ol_flags |= PKT_TX_OUTER_IPV6;
 
        if (info->outer_l4_proto != IPPROTO_UDP)
@@ -756,7 +756,9 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
 
                if (info.is_tunnel == 1) {
                        if (info.tunnel_tso_segsz ||
-                           testpmd_ol_flags & TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM) {
+                           (testpmd_ol_flags &
+                           TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM) ||
+                           (tx_ol_flags & PKT_TX_OUTER_IPV6)) {
                                m->outer_l2_len = info.outer_l2_len;
                                m->outer_l3_len = info.outer_l3_len;
                                m->l2_len = info.l2_len;
@@ -826,8 +828,9 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                                        "m->l4_len=%d\n",
                                        m->l2_len, m->l3_len, m->l4_len);
                        if (info.is_tunnel == 1) {
-                               if (testpmd_ol_flags &
-                                   TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM)
+                               if ((testpmd_ol_flags &
+                                   TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM) ||
+                                   (tx_ol_flags & PKT_TX_OUTER_IPV6))
                                        printf("tx: m->outer_l2_len=%d "
                                                "m->outer_l3_len=%d\n",
                                                m->outer_l2_len,