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]>

