On Thu, 18 Dec 2025 14:39:32 +0530
Rakesh Kudurumalla <[email protected]> wrote:

> Inner l2 length needs to be updated to include GRE and NVGRE
> headers. Not updating this would cause failures for applications
> which would be expecting l2_len field to be valid for
> inner checksum offload cases.
> 
> Fixes: 76730c7b9b5a ("app/testpmd: use packet type parsing API")
> 
> Signed-off-by: Rakesh Kudurumalla <[email protected]>
> ---
> 
> V2: update innner l2 length based of GRE header flags
> for key, sequence and checksum
> 
>  lib/net/rte_net.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/lib/net/rte_net.c b/lib/net/rte_net.c
> index c70b57fdc0..a24a0db526 100644
> --- a/lib/net/rte_net.c
> +++ b/lib/net/rte_net.c
> @@ -480,6 +480,19 @@ uint32_t rte_net_get_ptype(const struct rte_mbuf *m,
>                       return pkt_type;
>  
>               pkt_type |= ptype_tunnel_without_udp(&proto, m, &off);
> +             if ((pkt_type & RTE_PTYPE_TUNNEL_MASK) == RTE_PTYPE_TUNNEL_GRE 
> ||
> +                 (pkt_type & RTE_PTYPE_TUNNEL_MASK) == 
> RTE_PTYPE_TUNNEL_NVGRE) {
> +                     const struct rte_gre_hdr *gh;
> +
> +                     gh = rte_pktmbuf_read(m, prev_off, sizeof(*gh), NULL);

This looks wrong. rte_pktmbuf_read() is intended to handle non-contiguous data
and you should pass a temporary header buffer for it to use.

Or if you can verify that the header is in first mbuf and does not span
segments, then just use rte_pktmbuf_mtod_offset.

Reply via email to