net/ice: clean input set macro definition
[dpdk.git] / app / test-pmd / csumonly.c
index 8f2f840..6b4df33 100644 (file)
@@ -105,7 +105,7 @@ parse_ipv4(struct rte_ipv4_hdr *ipv4_hdr, struct testpmd_offload_info *info)
 {
        struct rte_tcp_hdr *tcp_hdr;
 
-       info->l3_len = (ipv4_hdr->version_ihl & 0x0f) * 4;
+       info->l3_len = rte_ipv4_hdr_len(ipv4_hdr);
        info->l4_proto = ipv4_hdr->next_proto_id;
 
        /* only fill l4_len for TCP, it's useful for TSO */
@@ -814,6 +814,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
        uint32_t rx_bad_ip_csum;
        uint32_t rx_bad_l4_csum;
        uint32_t rx_bad_outer_l4_csum;
+       uint32_t rx_bad_outer_ip_csum;
        struct testpmd_offload_info info;
        uint16_t nb_segments = 0;
        int ret;
@@ -833,6 +834,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
        rx_bad_ip_csum = 0;
        rx_bad_l4_csum = 0;
        rx_bad_outer_l4_csum = 0;
+       rx_bad_outer_ip_csum = 0;
        gro_enable = gro_ports[fs->rx_port].enable;
 
        txp = &ports[fs->tx_port];
@@ -862,6 +864,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                        rx_bad_l4_csum += 1;
                if (rx_ol_flags & PKT_RX_OUTER_L4_CKSUM_BAD)
                        rx_bad_outer_l4_csum += 1;
+               if (rx_ol_flags & PKT_RX_OUTER_IP_CKSUM_BAD)
+                       rx_bad_outer_ip_csum += 1;
 
                /* step 1: dissect packet, parsing optional vlan, ip4/ip6, vxlan
                 * and inner headers */
@@ -1080,9 +1084,17 @@ tunnel_update:
                        ret = rte_gso_segment(pkts_burst[i], gso_ctx,
                                        &gso_segments[nb_segments],
                                        GSO_MAX_PKT_BURST - nb_segments);
-                       if (ret >= 0)
+                       if (ret >= 1) {
+                               /* pkts_burst[i] can be freed safely here. */
+                               rte_pktmbuf_free(pkts_burst[i]);
                                nb_segments += ret;
-                       else {
+                       } else if (ret == 0) {
+                               /* 0 means it can be transmitted directly
+                                * without gso.
+                                */
+                               gso_segments[nb_segments] = pkts_burst[i];
+                               nb_segments += 1;
+                       } else {
                                TESTPMD_LOG(DEBUG, "Unable to segment packet");
                                rte_pktmbuf_free(pkts_burst[i]);
                        }
@@ -1116,6 +1128,7 @@ tunnel_update:
        fs->rx_bad_ip_csum += rx_bad_ip_csum;
        fs->rx_bad_l4_csum += rx_bad_l4_csum;
        fs->rx_bad_outer_l4_csum += rx_bad_outer_l4_csum;
+       fs->rx_bad_outer_ip_csum += rx_bad_outer_ip_csum;
 
        inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_rx)) {