[PATCH] net/i40e: fix QinQ stripping
Bruce Richardson
bruce.richardson at intel.com
Mon Jan 12 19:01:50 CET 2026
On Thu, Dec 11, 2025 at 03:58:15PM +0000, Mandal, Anurag wrote:
> -----Original Message-----
>
> From: Richardson, Bruce <[1]bruce.richardson at intel.com>
>
> Sent: 11 December 2025 20:11
>
> To: Mandal, Anurag <[2]anurag.mandal at intel.com>
>
> Cc: [3]dev at dpdk.org; [4]stable at dpdk.org
>
> 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]stable at dpdk.org
>
> >
>
> > Signed-off-by: Anurag Mandal <[6]anurag.mandal at intel.com>
>
> > ---
>
> > 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 <bruce.richardson at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
More information about the dev
mailing list