app/testpmd: count outer IP checksum errors
authorLance Richardson <lance.richardson@broadcom.com>
Fri, 29 Jan 2021 22:35:54 +0000 (17:35 -0500)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 23 Feb 2021 18:22:34 +0000 (19:22 +0100)
Count and display outer IP checksum errors in the checksum
forwarder.

Example forwarder stats output:
  RX-packets: 158            RX-dropped: 0             RX-total: 158
  Bad-ipcsum: 48             Bad-l4csum: 48            Bad-outer-l4csum: 6
  Bad-outer-ipcsum: 40
  TX-packets: 0              TX-dropped: 0             TX-total: 0

Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Acked-by: Wisam Jaddo <wisamm@nvidia.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
app/test-pmd/csumonly.c
app/test-pmd/testpmd.c
app/test-pmd/testpmd.h

index d813d4f..37ed415 100644 (file)
@@ -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_EIP_CKSUM_BAD)
+                       rx_bad_outer_ip_csum += 1;
 
                /* step 1: dissect packet, parsing optional vlan, ip4/ip6, vxlan
                 * and inner headers */
@@ -1124,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)) {
index caa711d..1a57324 100644 (file)
@@ -1796,6 +1796,8 @@ fwd_stream_stats_display(streamid_t stream_id)
                       " Rx- bad outer L4 checksum: %-14"PRIu64"\n",
                        fs->rx_bad_ip_csum, fs->rx_bad_l4_csum,
                        fs->rx_bad_outer_l4_csum);
+               printf(" RX- bad outer IP checksum: %-14"PRIu64"\n",
+                       fs->rx_bad_outer_ip_csum);
        } else {
                printf("\n");
        }
@@ -1818,6 +1820,7 @@ fwd_stats_display(void)
                uint64_t rx_bad_ip_csum;
                uint64_t rx_bad_l4_csum;
                uint64_t rx_bad_outer_l4_csum;
+               uint64_t rx_bad_outer_ip_csum;
        } ports_stats[RTE_MAX_ETHPORTS];
        uint64_t total_rx_dropped = 0;
        uint64_t total_tx_dropped = 0;
@@ -1850,6 +1853,8 @@ fwd_stats_display(void)
                ports_stats[fs->rx_port].rx_bad_l4_csum += fs->rx_bad_l4_csum;
                ports_stats[fs->rx_port].rx_bad_outer_l4_csum +=
                                fs->rx_bad_outer_l4_csum;
+               ports_stats[fs->rx_port].rx_bad_outer_ip_csum +=
+                               fs->rx_bad_outer_ip_csum;
 
                if (record_core_cycles)
                        fwd_cycles += fs->core_cycles;
@@ -1881,13 +1886,16 @@ fwd_stats_display(void)
                       "RX-total: %-"PRIu64"\n", stats.ipackets, stats.imissed,
                       stats.ipackets + stats.imissed);
 
-               if (cur_fwd_eng == &csum_fwd_engine)
+               if (cur_fwd_eng == &csum_fwd_engine) {
                        printf("  Bad-ipcsum: %-14"PRIu64
                               " Bad-l4csum: %-14"PRIu64
                               "Bad-outer-l4csum: %-14"PRIu64"\n",
                               ports_stats[pt_id].rx_bad_ip_csum,
                               ports_stats[pt_id].rx_bad_l4_csum,
                               ports_stats[pt_id].rx_bad_outer_l4_csum);
+                       printf("  Bad-outer-ipcsum: %-14"PRIu64"\n",
+                              ports_stats[pt_id].rx_bad_outer_ip_csum);
+               }
                if (stats.ierrors + stats.rx_nombuf > 0) {
                        printf("  RX-error: %-"PRIu64"\n", stats.ierrors);
                        printf("  RX-nombufs: %-14"PRIu64"\n", stats.rx_nombuf);
@@ -1965,6 +1973,7 @@ fwd_stats_reset(void)
                fs->rx_bad_ip_csum = 0;
                fs->rx_bad_l4_csum = 0;
                fs->rx_bad_outer_l4_csum = 0;
+               fs->rx_bad_outer_ip_csum = 0;
 
                memset(&fs->rx_burst_stats, 0, sizeof(fs->rx_burst_stats));
                memset(&fs->tx_burst_stats, 0, sizeof(fs->tx_burst_stats));
index 60ddeb8..911f4c7 100644 (file)
@@ -137,6 +137,8 @@ struct fwd_stream {
        uint64_t rx_bad_l4_csum ; /**< received packets has bad l4 checksum */
        uint64_t rx_bad_outer_l4_csum;
        /**< received packets has bad outer l4 checksum */
+       uint64_t rx_bad_outer_ip_csum;
+       /**< received packets having bad outer ip checksum */
        unsigned int gro_times; /**< GRO operation times */
        uint64_t     core_cycles; /**< used for RX and TX processing */
        struct pkt_burst_stats rx_burst_stats;