On Mon, Aug 2, 2021 at 11:00 AM Gregory Etelson wrote: > > UDP protocol reserves 0 checksum value for special purposes. > Other protocols, like IPv4, TCP and SCTP must calculate checksum value > in software or offload checksum calculation to hardware. > > If IPv4 TX checksum offload was off and header checksum was set to 0, > testpmd csum engine did not calculate checksum value for IPv4, TCP and > SCTP. > > The patch always calculates IPv4, TCP and SCTP TX checksums if it is > not offloaded. > > Fixes: b2a9e4a855d0 ("app/testpmd: fix Tx checksum calculation for tunnel") > > Signed-off-by: Gregory Etelson I think this fixes Bug 768? If yes, please add the tag "Bugzilla ID: 768" to the commit. > --- > app/test-pmd/csumonly.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c > index bd5ad64a57..607c889359 100644 > --- a/app/test-pmd/csumonly.c > +++ b/app/test-pmd/csumonly.c > @@ -487,7 +487,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info, > } else { > if (tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) { > ol_flags |= PKT_TX_IP_CKSUM; > - } else if (ipv4_hdr->hdr_checksum != 0) { > + } else { > ipv4_hdr->hdr_checksum = 0; > ipv4_hdr->hdr_checksum = > rte_ipv4_cksum(ipv4_hdr); > @@ -519,7 +519,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info, > ol_flags |= PKT_TX_TCP_SEG; > else if (tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM) { > ol_flags |= PKT_TX_TCP_CKSUM; > - } else if (tcp_hdr->cksum != 0) { > + } else { > tcp_hdr->cksum = 0; > tcp_hdr->cksum = > get_udptcp_checksum(l3_hdr, tcp_hdr, > @@ -535,7 +535,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info, > if ((tx_offloads & DEV_TX_OFFLOAD_SCTP_CKSUM) && > ((ipv4_hdr->total_length & 0x3) == 0)) { > ol_flags |= PKT_TX_SCTP_CKSUM; > - } else if (sctp_hdr->cksum != 0) { > + } else { > sctp_hdr->cksum = 0; > /* XXX implement CRC32c, example available in > * RFC3309 */ > -- > 2.32.0 >