[v2] app/testpmd: fix GTP header parsing in csum FWD engine
Checks
Commit Message
GTP header can be followed by an optional 32 bits extension.
GTP notifies about the extension presence through the E, S or PN
header bits.
Csum GTP header parser did not check the extension bits value.
The patch updates GTP header length if at-least one of the
extension bits is set.
Cc: stable@dpdk.org
Fixes: d8e5e69f3a9b ("app/testpmd: add GTP parsing and Tx checksum offload")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Aman Singh <aman.deep.singh@intel.com>
---
v2: Update the patch comment.
---
app/test-pmd/csumonly.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
Comments
13/03/2022 10:01, Gregory Etelson:
> GTP header can be followed by an optional 32 bits extension.
> GTP notifies about the extension presence through the E, S or PN
> header bits.
>
> Csum GTP header parser did not check the extension bits value.
>
> The patch updates GTP header length if at-least one of the
> extension bits is set.
>
> Cc: stable@dpdk.org
>
> Fixes: d8e5e69f3a9b ("app/testpmd: add GTP parsing and Tx checksum offload")
> Signed-off-by: Gregory Etelson <getelson@nvidia.com>
> Acked-by: Aman Singh <aman.deep.singh@intel.com>
It should be "Fixes" line, "Cc" line, blank line, and "Signed-off/Ack" lines.
Applied, thanks.
@@ -223,15 +223,14 @@ parse_gtp(struct rte_udp_hdr *udp_hdr,
gtp_hdr = (struct rte_gtp_hdr *)((char *)udp_hdr +
sizeof(struct rte_udp_hdr));
-
+ if (gtp_hdr->e || gtp_hdr->s || gtp_hdr->pn)
+ gtp_len += sizeof(struct rte_gtp_hdr_ext_word);
/*
* Check message type. If message type is 0xff, it is
* a GTP data packet. If not, it is a GTP control packet
*/
if (gtp_hdr->msg_type == 0xff) {
- ip_ver = *(uint8_t *)((char *)udp_hdr +
- sizeof(struct rte_udp_hdr) +
- sizeof(struct rte_gtp_hdr));
+ ip_ver = *(uint8_t *)((char *)gtp_hdr + gtp_len);
ip_ver = (ip_ver) & 0xf0;
if (ip_ver == RTE_GTP_TYPE_IPV4) {