From: "Li, Xiaoyun" <xiaoyun.li@intel.com>
To: Gregory Etelson <getelson@nvidia.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>,
Olivier Matz <olivier.matz@6wind.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
"Yigit, Ferruh" <ferruh.yigit@intel.com>,
Thomas Monjalon <thomas@monjalon.net>,
"stable@dpdk.org" <stable@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v2] app/testpmd: fix TX checksum calculation for tunnel
Date: Wed, 28 Jul 2021 01:31:16 +0000 [thread overview]
Message-ID: <DM4PR11MB5534FB3C0F2B542925F2A47999EA9@DM4PR11MB5534.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210727130757.30724-1-getelson@nvidia.com>
Hi
> -----Original Message-----
> From: Gregory Etelson <getelson@nvidia.com>
> Sent: Tuesday, July 27, 2021 21:08
> To: dev@dpdk.org
> Cc: getelson@nvidia.com; Ajit Khaparde <ajit.khaparde@broadcom.com>;
> Olivier Matz <olivier.matz@6wind.com>; Andrew Rybchenko
> <andrew.rybchenko@oktetlabs.ru>; Yigit, Ferruh <ferruh.yigit@intel.com>;
> Thomas Monjalon <thomas@monjalon.net>; stable@dpdk.org; Li, Xiaoyun
> <xiaoyun.li@intel.com>
> Subject: [PATCH v2] app/testpmd: fix TX checksum calculation for tunnel
>
> TX checksum of a tunnelled packet can be calculated for outer headers only or
> for both outer and inner parts. The calculation method is determined by
> application.
> If TX checksum calculation can be offloaded, hardware ignores existing
> checksum value and replaces it with an updated result.
> If TX checksum is calculated by a software, existing value must be zeroed first.
> The testpmd checksum forwarding engine always zeroed inner checksums.
> If inner checksum calculation was offloaded, that header was left with 0
> checksum value.
> Following outer software checksum calculation produced wrong value.
> The patch zeroes inner IPv4 checksum only before software calculation.
>
> Fixes: 51f694dd40f5 ("app/testpmd: rework checksum forward engine")
> Cc: stable@dpdk.org
>
> Signed-off-by: Gregory Etelson <getelson@nvidia.com>
> ---
> v2:
> remove blank line between Fixes and Cc
> explicitly compare with 0 value in `if ()`
> ---
> app/test-pmd/csumonly.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index
> 0161f72175..bd5ad64a57 100644
> --- a/app/test-pmd/csumonly.c
> +++ b/app/test-pmd/csumonly.c
> @@ -480,17 +480,18 @@ process_inner_cksums(void *l3_hdr, const struct
> testpmd_offload_info *info,
>
> if (info->ethertype == _htons(RTE_ETHER_TYPE_IPV4)) {
> ipv4_hdr = l3_hdr;
> - ipv4_hdr->hdr_checksum = 0;
>
> ol_flags |= PKT_TX_IPV4;
> if (info->l4_proto == IPPROTO_TCP && tso_segsz) {
> ol_flags |= PKT_TX_IP_CKSUM;
> } else {
> - if (tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM)
> + if (tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) {
> ol_flags |= PKT_TX_IP_CKSUM;
> - else
> + } else if (ipv4_hdr->hdr_checksum != 0) {
> + ipv4_hdr->hdr_checksum = 0;
> ipv4_hdr->hdr_checksum =
> rte_ipv4_cksum(ipv4_hdr);
> + }
> }
> } else if (info->ethertype == _htons(RTE_ETHER_TYPE_IPV6))
> ol_flags |= PKT_TX_IPV6;
> @@ -501,10 +502,10 @@ process_inner_cksums(void *l3_hdr, const struct
> testpmd_offload_info *info,
> udp_hdr = (struct rte_udp_hdr *)((char *)l3_hdr + info->l3_len);
> /* do not recalculate udp cksum if it was 0 */
> if (udp_hdr->dgram_cksum != 0) {
> - udp_hdr->dgram_cksum = 0;
> - if (tx_offloads & DEV_TX_OFFLOAD_UDP_CKSUM)
> + if (tx_offloads & DEV_TX_OFFLOAD_UDP_CKSUM) {
> ol_flags |= PKT_TX_UDP_CKSUM;
> - else {
> + } else {
else if (udp_hdr->dgram_cksum != 0) { ?
> + udp_hdr->dgram_cksum = 0;
> udp_hdr->dgram_cksum =
> get_udptcp_checksum(l3_hdr, udp_hdr,
> info->ethertype);
> @@ -514,12 +515,12 @@ process_inner_cksums(void *l3_hdr, const struct
> testpmd_offload_info *info,
> ol_flags |= PKT_TX_UDP_SEG;
> } else if (info->l4_proto == IPPROTO_TCP) {
> tcp_hdr = (struct rte_tcp_hdr *)((char *)l3_hdr + info->l3_len);
> - tcp_hdr->cksum = 0;
> if (tso_segsz)
> ol_flags |= PKT_TX_TCP_SEG;
> - else if (tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM)
> + else if (tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM) {
> ol_flags |= PKT_TX_TCP_CKSUM;
> - else {
> + } else if (tcp_hdr->cksum != 0) {
> + tcp_hdr->cksum = 0;
> tcp_hdr->cksum =
> get_udptcp_checksum(l3_hdr, tcp_hdr,
> info->ethertype);
> @@ -529,13 +530,13 @@ process_inner_cksums(void *l3_hdr, const struct
> testpmd_offload_info *info,
> } else if (info->l4_proto == IPPROTO_SCTP) {
> sctp_hdr = (struct rte_sctp_hdr *)
> ((char *)l3_hdr + info->l3_len);
> - sctp_hdr->cksum = 0;
> /* sctp payload must be a multiple of 4 to be
> * offloaded */
> if ((tx_offloads & DEV_TX_OFFLOAD_SCTP_CKSUM) &&
> ((ipv4_hdr->total_length & 0x3) == 0)) {
> ol_flags |= PKT_TX_SCTP_CKSUM;
> - } else {
> + } else if (sctp_hdr->cksum != 0) {
> + sctp_hdr->cksum = 0;
> /* XXX implement CRC32c, example available in
> * RFC3309 */
> }
> --
> 2.32.0
next prev parent reply other threads:[~2021-07-28 1:31 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-19 8:33 [dpdk-dev] [PATCH] " Gregory Etelson
2021-07-21 6:42 ` Ori Kam
2021-07-24 11:37 ` Thomas Monjalon
2021-07-24 12:43 ` Gregory Etelson
2021-07-27 13:07 ` [dpdk-dev] [PATCH v2] " Gregory Etelson
2021-07-28 1:31 ` Li, Xiaoyun [this message]
2021-07-28 3:45 ` Gregory Etelson
2021-07-28 4:09 ` Ajit Khaparde
2021-07-28 5:07 ` Li, Xiaoyun
2021-07-28 14:12 ` Olivier Matz
2021-07-28 16:07 ` Gregory Etelson
2021-07-29 8:25 ` Olivier Matz
2021-07-29 10:31 ` Gregory Etelson
2021-07-29 16:02 ` Olivier Matz
2021-07-29 9:39 ` [dpdk-dev] [PATCH v3] " Gregory Etelson
2021-07-29 16:05 ` Olivier Matz
2021-07-29 17:05 ` Gregory Etelson
2021-07-29 17:01 ` [dpdk-dev] [PATCH v4] " Gregory Etelson
2021-07-30 8:39 ` Olivier Matz
2021-07-30 12:04 ` Thomas Monjalon
2021-08-02 11:21 ` Jiang, YuX
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DM4PR11MB5534FB3C0F2B542925F2A47999EA9@DM4PR11MB5534.namprd11.prod.outlook.com \
--to=xiaoyun.li@intel.com \
--cc=ajit.khaparde@broadcom.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=getelson@nvidia.com \
--cc=olivier.matz@6wind.com \
--cc=stable@dpdk.org \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).