[21.05] app/testpmd: count outer IP checksum errors

Message ID 20210129223554.103012-1-lance.richardson@broadcom.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series [21.05] app/testpmd: count outer IP checksum errors |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-testing warning Testing issues

Commit Message

Lance Richardson Jan. 29, 2021, 10:35 p.m. UTC
  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 Kumar Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Kalesh Anakkur Purayil <kalesh-anakkur.purayil@broadcom.com>
---
 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(-)
  

Comments

Wisam Monther Jan. 31, 2021, 11:53 a.m. UTC | #1
Hi,

> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Lance Richardson
> Sent: Saturday, January 30, 2021 12:36 AM
> To: Wenzhuo Lu <wenzhuo.lu@intel.com>; Xiaoyun Li
> <xiaoyun.li@intel.com>; Bernard Iremonger
> <bernard.iremonger@intel.com>
> Cc: dev@dpdk.org; Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>;
> Kalesh Anakkur Purayil <kalesh-anakkur.purayil@broadcom.com>
> Subject: [dpdk-dev] [PATCH 21.05] app/testpmd: count outer IP checksum
> errors
> 
> 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 Kumar Khaparde <ajit.khaparde@broadcom.com>
> Reviewed-by: Kalesh Anakkur Purayil <kalesh-
> anakkur.purayil@broadcom.com>
> ---
>  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

Acked-by: Wisam Jaddo <wisamm@nvidia.com>

BRs,
Wisam Jaddo
  
Ferruh Yigit Feb. 23, 2021, 6:35 p.m. UTC | #2
On 1/31/2021 11:53 AM, Wisam Monther wrote:
> Hi,
> 
>> -----Original Message-----
>> From: dev <dev-bounces@dpdk.org> On Behalf Of Lance Richardson
>> Sent: Saturday, January 30, 2021 12:36 AM
>> To: Wenzhuo Lu <wenzhuo.lu@intel.com>; Xiaoyun Li
>> <xiaoyun.li@intel.com>; Bernard Iremonger
>> <bernard.iremonger@intel.com>
>> Cc: dev@dpdk.org; Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>;
>> Kalesh Anakkur Purayil <kalesh-anakkur.purayil@broadcom.com>
>> Subject: [dpdk-dev] [PATCH 21.05] app/testpmd: count outer IP checksum
>> errors
>>
>> 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 Kumar Khaparde <ajit.khaparde@broadcom.com>
>> Reviewed-by: Kalesh Anakkur Purayil <kalesh-
>> anakkur.purayil@broadcom.com>
> 
> Acked-by: Wisam Jaddo <wisamm@nvidia.com>
> 

Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Applied to dpdk-next-net/main, thanks.



'PKT_RX_EIP_CKSUM_BAD' is documented in mbuf header as:
"/** External IP header checksum error. */"

I think	'External' wording is confusing, as well as 'EIP' abbreviation, what do 
you think to create another macro alias to existing one, and mark the old one as 
deprecated?
  
Ajit Khaparde Feb. 23, 2021, 6:39 p.m. UTC | #3
On Tue, Feb 23, 2021 at 10:36 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>
> On 1/31/2021 11:53 AM, Wisam Monther wrote:
> > Hi,
> >
> >> -----Original Message-----
> >> From: dev <dev-bounces@dpdk.org> On Behalf Of Lance Richardson
> >> Sent: Saturday, January 30, 2021 12:36 AM
> >> To: Wenzhuo Lu <wenzhuo.lu@intel.com>; Xiaoyun Li
> >> <xiaoyun.li@intel.com>; Bernard Iremonger
> >> <bernard.iremonger@intel.com>
> >> Cc: dev@dpdk.org; Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>;
> >> Kalesh Anakkur Purayil <kalesh-anakkur.purayil@broadcom.com>
> >> Subject: [dpdk-dev] [PATCH 21.05] app/testpmd: count outer IP checksum
> >> errors
> >>
> >> 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 Kumar Khaparde <ajit.khaparde@broadcom.com>
> >> Reviewed-by: Kalesh Anakkur Purayil <kalesh-
> >> anakkur.purayil@broadcom.com>
> >
> > Acked-by: Wisam Jaddo <wisamm@nvidia.com>
> >
>
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Applied to dpdk-next-net/main, thanks.
>
>
>
> 'PKT_RX_EIP_CKSUM_BAD' is documented in mbuf header as:
> "/** External IP header checksum error. */"
>
> I think 'External' wording is confusing, as well as 'EIP' abbreviation, what do
> you think to create another macro alias to existing one, and mark the old one as
> deprecated?
+1

>
  
Thomas Monjalon Feb. 23, 2021, 8:25 p.m. UTC | #4
23/02/2021 19:39, Ajit Khaparde:
> On Tue, Feb 23, 2021 at 10:36 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> >
> > On 1/31/2021 11:53 AM, Wisam Monther wrote:
> > > Hi,
> > >
> > >> -----Original Message-----
> > >> From: dev <dev-bounces@dpdk.org> On Behalf Of Lance Richardson
> > >> Sent: Saturday, January 30, 2021 12:36 AM
> > >> To: Wenzhuo Lu <wenzhuo.lu@intel.com>; Xiaoyun Li
> > >> <xiaoyun.li@intel.com>; Bernard Iremonger
> > >> <bernard.iremonger@intel.com>
> > >> Cc: dev@dpdk.org; Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>;
> > >> Kalesh Anakkur Purayil <kalesh-anakkur.purayil@broadcom.com>
> > >> Subject: [dpdk-dev] [PATCH 21.05] app/testpmd: count outer IP checksum
> > >> errors
> > >>
> > >> 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 Kumar Khaparde <ajit.khaparde@broadcom.com>
> > >> Reviewed-by: Kalesh Anakkur Purayil <kalesh-
> > >> anakkur.purayil@broadcom.com>
> > >
> > > Acked-by: Wisam Jaddo <wisamm@nvidia.com>
> > >
> >
> > Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
> > Applied to dpdk-next-net/main, thanks.
> >
> >
> >
> > 'PKT_RX_EIP_CKSUM_BAD' is documented in mbuf header as:
> > "/** External IP header checksum error. */"
> >
> > I think 'External' wording is confusing, as well as 'EIP' abbreviation, what do
> > you think to create another macro alias to existing one, and mark the old one as
> > deprecated?
> +1

+1
  
Ferruh Yigit Feb. 24, 2021, 10:12 a.m. UTC | #5
On 2/23/2021 8:25 PM, Thomas Monjalon wrote:
> 23/02/2021 19:39, Ajit Khaparde:
>> On Tue, Feb 23, 2021 at 10:36 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>>
>>> On 1/31/2021 11:53 AM, Wisam Monther wrote:
>>>> Hi,
>>>>
>>>>> -----Original Message-----
>>>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Lance Richardson
>>>>> Sent: Saturday, January 30, 2021 12:36 AM
>>>>> To: Wenzhuo Lu <wenzhuo.lu@intel.com>; Xiaoyun Li
>>>>> <xiaoyun.li@intel.com>; Bernard Iremonger
>>>>> <bernard.iremonger@intel.com>
>>>>> Cc: dev@dpdk.org; Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>;
>>>>> Kalesh Anakkur Purayil <kalesh-anakkur.purayil@broadcom.com>
>>>>> Subject: [dpdk-dev] [PATCH 21.05] app/testpmd: count outer IP checksum
>>>>> errors
>>>>>
>>>>> 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 Kumar Khaparde <ajit.khaparde@broadcom.com>
>>>>> Reviewed-by: Kalesh Anakkur Purayil <kalesh-
>>>>> anakkur.purayil@broadcom.com>
>>>>
>>>> Acked-by: Wisam Jaddo <wisamm@nvidia.com>
>>>>
>>>
>>> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>> Applied to dpdk-next-net/main, thanks.
>>>
>>>
>>>
>>> 'PKT_RX_EIP_CKSUM_BAD' is documented in mbuf header as:
>>> "/** External IP header checksum error. */"
>>>
>>> I think 'External' wording is confusing, as well as 'EIP' abbreviation, what do
>>> you think to create another macro alias to existing one, and mark the old one as
>>> deprecated?
>> +1
> 
> +1
> 

Lance, can you spare some time to make the above mentioned patch?
  
Lance Richardson Feb. 24, 2021, 3:16 p.m. UTC | #6
> Lance, can you spare some time to make the above mentioned patch?

Sure. Are you looking for something like the changes below, or also including
a search and replace of the deprecated macro name with the new one?

- /** External IP header checksum error. */
+/**
+ * Deprecated.
+ * This flag has been renamed, use PKT_RX_OUTER_IP_CKSUM_BAD instead.
+ */
+#define PKT_RX_EIP_CKSUM_BAD (1ULL << 5)
+
+/**
+ * This flag is set when the outermost IP header checksum is detected as
+ * wrong by the hardware.
+ */
 #define PKT_RX_OUTER_IP_CKSUM_BAD (1ULL << 5)

 /**
  
Ferruh Yigit Feb. 24, 2021, 3:38 p.m. UTC | #7
On 2/24/2021 3:16 PM, Lance Richardson wrote:
>> Lance, can you spare some time to make the above mentioned patch?
> 
> Sure. Are you looking for something like the changes below, or also including
> a search and replace of the deprecated macro name with the new one?
> 

Thank you.
Yes below looks good, and I think we should have the search & replace of the old 
macro usage, the latest upstream code shouldn't have the deprecated macro.

> - /** External IP header checksum error. */
> +/**
> + * Deprecated.
> + * This flag has been renamed, use PKT_RX_OUTER_IP_CKSUM_BAD instead.
> + */
> +#define PKT_RX_EIP_CKSUM_BAD (1ULL << 5)
> +
> +/**
> + * This flag is set when the outermost IP header checksum is detected as
> + * wrong by the hardware.
> + */
>   #define PKT_RX_OUTER_IP_CKSUM_BAD (1ULL << 5)
> 
>   /**
>
  

Patch

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;