app/testpmd: enable TCP/IPv4 GRO
[dpdk.git] / app / test-pmd / csumonly.c
index 88cc842..178ad75 100644 (file)
@@ -71,6 +71,7 @@
 #include <rte_prefetch.h>
 #include <rte_string_fns.h>
 #include <rte_flow.h>
+#include <rte_gro.h>
 #include "testpmd.h"
 
 #define IP_DEFTTL  64   /* from RFC 1340. */
@@ -417,7 +418,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)
@@ -583,7 +584,7 @@ pkt_copy_split(const struct rte_mbuf *pkt)
                rc = mbuf_copy_split(pkt, md, seglen, nb_seg);
                if (rc < 0)
                        RTE_LOG(ERR, USER1,
-                               "mbuf_copy_split for %p(len=%u, nb_seg=%hhu) "
+                               "mbuf_copy_split for %p(len=%u, nb_seg=%u) "
                                "into %u segments failed with error code: %d\n",
                                pkt, pkt->pkt_len, pkt->nb_segs, nb_seg, rc);
 
@@ -658,6 +659,10 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                                 nb_pkt_per_burst);
        if (unlikely(nb_rx == 0))
                return;
+       if (unlikely(gro_ports[fs->rx_port].enable))
+               nb_rx = rte_gro_reassemble_burst(pkts_burst,
+                               nb_rx,
+                               &(gro_ports[fs->rx_port].param));
 
 #ifdef RTE_TEST_PMD_RECORD_BURST_STATS
        fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
@@ -756,7 +761,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;
@@ -801,7 +808,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                        char buf[256];
 
                        printf("-----------------\n");
-                       printf("port=%u, mbuf=%p, pkt_len=%u, nb_segs=%hhu:\n",
+                       printf("port=%u, mbuf=%p, pkt_len=%u, nb_segs=%u:\n",
                                fs->rx_port, m, m->pkt_len, m->nb_segs);
                        /* dump rx parsed packet info */
                        rte_get_rx_ol_flag_list(rx_ol_flags, buf, sizeof(buf));
@@ -826,8 +833,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,