On Thu, Dec 11, 2025 at 03:58:15PM +0000, Mandal, Anurag wrote:
>    -----Original Message-----
> 
>    From: Richardson, Bruce <[1][email protected]>
> 
>    Sent: 11 December 2025 20:11
> 
>    To: Mandal, Anurag <[2][email protected]>
> 
>    Cc: [3][email protected]; [4][email protected]
> 
>    Subject: Re: [PATCH] net/i40e: fix QinQ stripping
> 
> 
>    On Sat, Dec 06, 2025 at 06:43:11PM +0000, Anurag Mandal wrote:
> 
>    > Outer VLAN strip gets disabled when inner VLAN stripping is
> 
>    > enabled/disabled after enabling outer VLAN stripping.
> 
>    > This happens because the respective register is overridden by the vsi
> 
>    > params update of inner VLAN stripping.
> 
>    >
> 
>    > This patch fixes the issue by re-enabling outer VLAN stripping after
> 
>    > modification of inner VLAN stripping.
> 
>    >
> 
>    > Fixes: c52ff36686a4 ("net/i40e: enable QinQ stripping")
> 
>    > Cc: [5][email protected]
> 
>    >
> 
>    > Signed-off-by: Anurag Mandal <[6][email protected]>
> 
>    > ---
> 
>    >  drivers/net/intel/i40e/i40e_ethdev.c | 10 ++++++++++
> 
>    >  1 file changed, 10 insertions(+)
> 
>    >
> 
>    > diff --git a/drivers/net/intel/i40e/i40e_ethdev.c
> 
>    > b/drivers/net/intel/i40e/i40e_ethdev.c
> 
>    > index b8ce79061b..c8153f3351 100644
> 
>    > --- a/drivers/net/intel/i40e/i40e_ethdev.c
> 
>    > +++ b/drivers/net/intel/i40e/i40e_ethdev.c
> 
>    > @@ -4150,6 +4150,16 @@ i40e_vlan_offload_set(struct rte_eth_dev *dev,
>    int mask)
> 
>    >
>    i40e_vsi_config_vlan_stripping(vsi, TRUE);
> 
>    >                           else
> 
>    >
>    i40e_vsi_config_vlan_stripping(vsi, FALSE);
> 
>    > +
> 
>    > +                       /* When VLAN strip is enabled/disabled
> 
>    > +                       * after enabling outer VLAN stripping,
> 
>    > +                       * outer VLAN stripping gets disabled
> 
>    > +                       * as the register gets overridden by
> 
>    > +                       * VLAN's strip vsi param update.
> 
>    > +                       * Hence, re-enable outer VLAN stripping.
> 
>    > +                       */
> 
>    > +                       if (rxmode->offloads &
>    RTE_ETH_RX_OFFLOAD_QINQ_STRIP)
> 
>    > +
>    i40e_vsi_config_outer_vlan_stripping(vsi, TRUE);
> 
>    >            }
> 
>    >
> 
>    >Hi,
> 
> 
>    >to help me test this patch, can you provide a set of instructions as
>    to how to demonstrate the issue with
> 
>    >i40e and how to verify the fix?
> 
>    Hi Bruce,
> 
> 
>    Thank you for your queries. PFB my response.
>    Traffic: To observe the issue, one needs QinQ traffic with outer VLAN
>    802.1ad (0x88A8)/802.1Q(0x8100) and inner VLAN 802.1Q(0x8100).
> 
> 
>    Instructions :Assuming outer VLAN id as 201, inner vlan can be any
>    other.
>    a. set promisc 0 off
> 
>    b. vlan set extend on 0
> 
>    c. vlan set filter on 0
> 
>    d. vlan set outer tpid 0x88a8 0
> 
>    e. vlan set inner tpid 0x8100 0
> 
>    f.  vlan set qinq_strip on 0
>    g. vlan set strip on 0
> 
>    h.rx_vlan add 201 0
> 
>    i. set fwd macswap
> 
>    j. set verbose 8
> 
>    k. start
> 
> 
>    Objective: To get both outer and inner VLANs stripped from the incoming
>    double tagged traffic.
> 
>    Issue:
> 
>    When outer VLAN strip (qinq_strip) is enabled first[point f) and
>    afterwards, inner vlan strip is enabled[point g], QinQ stripping fails.
>    In verbose o/p we can see incoming packets will still have either
>    type=0x88a8 or 0x8100 VLAN tag present which is the outer VLAN tag.
> 
> 
>    Verifying Fix:
>    No change in instruction order. Verbose o/p will show type=0x0800 in
>    incoming order indicating both VLAN tags are removed.
>    P.S: If traffic type is 0x8100+0x8100, then points d and e are Not
>    needed as when we set VLAN extend, both outer & inner VLAN TPIDs are
>    set to 802.1Q(0x8100) by default.
> 
>    Also, if inner VLAN strip is enabled first and then outer VLAN strip is
>    set, QinQ stripping happens smoothly and incoming traffic shows
>    type=0x0800.
> 
> 
>    Thank you.
> 
> 
>    Regards,
> 
>    Anurag M
> 
> 
Thanks for the instructions. I've finally got around to testing things and
indeed I see the behaviour you described - sending packet with two 0x8100
tags I don't see them stripped unless I reverse the qinq_strip and vlan
strip commands. This patch makes it work with both orderings.

Tested-by: Bruce Richardson <[email protected]>
Acked-by: Bruce Richardson <[email protected]>

Reply via email to