Looks good to me.
Can we rephrase above line "if at-least one of the extension bit is set."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 header extension bits are set.
Acked-by: Aman Singh <aman.deep.singh@intel.com>Cc: stable@dpdk.org Fixes: d8e5e69f3a9b ("app/testpmd: add GTP parsing and Tx checksum offload") Signed-off-by: Gregory Etelson <getelson@nvidia.com>
--- app/test-pmd/csumonly.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index 5274d498ee..f8abcded2b 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -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) {