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 Reviewed-by: Ajit Kumar Khaparde Reviewed-by: Kalesh Anakkur Purayil --- app/test-pmd/csumonly.c | 5 +++++ app/test-pmd/testpmd.c | 11 ++++++++++- app/test-pmd/testpmd.h | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index d813d4fae0..37ed415cee 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -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 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) 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)) { diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index c256e719ae..67f60745a0 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1805,6 +1805,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"); } @@ -1827,6 +1829,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; @@ -1859,6 +1862,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; @@ -1890,13 +1895,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); @@ -1974,6 +1982,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)); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 5f23162107..a034dae227 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -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; -- 2.25.1