<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-ligatures:standardcontextual;
        mso-fareast-language:EN-US;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-IN" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoPlainText">-----Original Message-----<o:p></o:p></p>
<p class="MsoPlainText">From: Richardson, Bruce <<a href="mailto:bruce.richardson@intel.com">bruce.richardson@intel.com</a>>
<o:p></o:p></p>
<p class="MsoPlainText">Sent: 11 December 2025 20:11<o:p></o:p></p>
<p class="MsoPlainText">To: Mandal, Anurag <<a href="mailto:anurag.mandal@intel.com">anurag.mandal@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">Cc: <a href="mailto:dev@dpdk.org">dev@dpdk.org</a>; <a href="mailto:stable@dpdk.org">
stable@dpdk.org</a><o:p></o:p></p>
<p class="MsoPlainText">Subject: Re: [PATCH] net/i40e: fix QinQ stripping<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">On Sat, Dec 06, 2025 at 06:43:11PM +0000, Anurag Mandal wrote:<o:p></o:p></p>
<p class="MsoPlainText">> Outer VLAN strip gets disabled when inner VLAN stripping is
<o:p></o:p></p>
<p class="MsoPlainText">> enabled/disabled after enabling outer VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> This happens because the respective register is overridden by the vsi
<o:p></o:p></p>
<p class="MsoPlainText">> params update of inner VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> This patch fixes the issue by re-enabling outer VLAN stripping after
<o:p></o:p></p>
<p class="MsoPlainText">> modification of inner VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Fixes: c52ff36686a4 ("net/i40e: enable QinQ stripping")<o:p></o:p></p>
<p class="MsoPlainText">> Cc: <a href="mailto:stable@dpdk.org">stable@dpdk.org</a><o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Signed-off-by: Anurag Mandal <<a href="mailto:anurag.mandal@intel.com">anurag.mandal@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">> ---<o:p></o:p></p>
<p class="MsoPlainText">>  drivers/net/intel/i40e/i40e_ethdev.c | 10 ++++++++++<o:p></o:p></p>
<p class="MsoPlainText">>  1 file changed, 10 insertions(+)<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> diff --git a/drivers/net/intel/i40e/i40e_ethdev.c <o:p>
</o:p></p>
<p class="MsoPlainText">> b/drivers/net/intel/i40e/i40e_ethdev.c<o:p></o:p></p>
<p class="MsoPlainText">> index b8ce79061b..c8153f3351 100644<o:p></o:p></p>
<p class="MsoPlainText">> --- a/drivers/net/intel/i40e/i40e_ethdev.c<o:p></o:p></p>
<p class="MsoPlainText">> +++ b/drivers/net/intel/i40e/i40e_ethdev.c<o:p></o:p></p>
<p class="MsoPlainText">> @@ -4150,6 +4150,16 @@ i40e_vlan_offload_set(struct rte_eth_dev *dev, int mask)<o:p></o:p></p>
<p class="MsoPlainText">>                                         i40e_vsi_config_vlan_stripping(vsi, TRUE);<o:p></o:p></p>
<p class="MsoPlainText">>                           else<o:p></o:p></p>
<p class="MsoPlainText">>                                         i40e_vsi_config_vlan_stripping(vsi, FALSE);<o:p></o:p></p>
<p class="MsoPlainText">> +<o:p></o:p></p>
<p class="MsoPlainText">> +                       /* When VLAN strip is enabled/disabled<o:p></o:p></p>
<p class="MsoPlainText">> +                       * after enabling outer VLAN stripping,<o:p></o:p></p>
<p class="MsoPlainText">> +                       * outer VLAN stripping gets disabled<o:p></o:p></p>
<p class="MsoPlainText">> +                       * as the register gets overridden by<o:p></o:p></p>
<p class="MsoPlainText">> +                       * VLAN's strip vsi param update.<o:p></o:p></p>
<p class="MsoPlainText">> +                       * Hence, re-enable outer VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> +                       */<o:p></o:p></p>
<p class="MsoPlainText">> +                       if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP)<o:p></o:p></p>
<p class="MsoPlainText">> +                                      i40e_vsi_config_outer_vlan_stripping(vsi, TRUE);<o:p></o:p></p>
<p class="MsoPlainText">>            }<o:p></o:p></p>
<p class="MsoPlainText">>  <o:p></o:p></p>
<p class="MsoPlainText">>Hi,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">>to help me test this patch, can you provide a set of instructions as to how to demonstrate the issue with
<o:p></o:p></p>
<p class="MsoPlainText">>i40e and how to verify the fix?<o:p></o:p></p>
<p class="MsoPlainText"><br>
Hi Bruce,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thank you for your queries. PFB my response.<br>
<br>
<b>Traffic:</b> To observe the issue, one needs QinQ traffic with outer VLAN 802.1ad (0x88A8)/802.1Q(0x8100) and inner VLAN 802.1Q(0x8100).<o:p></o:p></p>
<p class="MsoPlainText"><b><o:p> </o:p></b></p>
<p class="MsoPlainText"><b>Instructions</b> :Assuming outer VLAN id as 201, inner vlan can be any other.<br>
a. set promisc 0 off<o:p></o:p></p>
<p class="MsoPlainText">b. vlan set extend on 0<o:p></o:p></p>
<p class="MsoPlainText">c. vlan set filter on 0<o:p></o:p></p>
<p class="MsoPlainText"><i>d. vlan set outer tpid 0x88a8 0<o:p></o:p></i></p>
<p class="MsoPlainText"><i>e. vlan set inner tpid 0x8100 0<o:p></o:p></i></p>
<p class="MsoPlainText"><b>f.  vlan set qinq_strip on 0<br>
g. vlan set strip on 0<o:p></o:p></b></p>
<p class="MsoPlainText">h.rx_vlan add 201 0<o:p></o:p></p>
<p class="MsoPlainText">i. set fwd macswap<o:p></o:p></p>
<p class="MsoPlainText">j. set verbose 8<o:p></o:p></p>
<p class="MsoPlainText">k. start<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><b>Objective:</b> To get both outer and inner VLANs stripped from the incoming double tagged traffic.<br>
<br>
<o:p></o:p></p>
<p class="MsoPlainText"><b>Issue: <o:p></o:p></b></p>
<p class="MsoPlainText">When outer VLAN strip (qinq_strip) is enabled first[<b>point f</b>) and afterwards, inner vlan strip is enabled[point g], QinQ stripping fails.
<br>
In verbose o/p we can see incoming packets will still have either <b>type=0x88a8 or 0x8100</b> VLAN tag present which is the outer VLAN tag.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><b>Verifying Fix:<br>
</b>No change in instruction order. Verbose o/p will show <b>type=0x0800</b> in incoming order indicating both VLAN tags are removed.<br>
<br>
<b>P.S:</b> If traffic type is 0x8100+0x8100, then <b>points d and e</b> are Not needed as when we set VLAN extend, both outer & inner VLAN TPIDs are set to 802.1Q(0x8100) by default.<b><o:p></o:p></b></p>
<p class="MsoPlainText">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.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thank you.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Regards,<o:p></o:p></p>
<p class="MsoPlainText">Anurag M<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">-----Original Message-----<o:p></o:p></p>
<p class="MsoPlainText">From: Richardson, Bruce <<a href="mailto:bruce.richardson@intel.com">bruce.richardson@intel.com</a>>
<o:p></o:p></p>
<p class="MsoPlainText">Sent: 11 December 2025 20:11<o:p></o:p></p>
<p class="MsoPlainText">To: Mandal, Anurag <<a href="mailto:anurag.mandal@intel.com">anurag.mandal@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">Cc: <a href="mailto:dev@dpdk.org">dev@dpdk.org</a>; <a href="mailto:stable@dpdk.org">
stable@dpdk.org</a><o:p></o:p></p>
<p class="MsoPlainText">Subject: Re: [PATCH] net/i40e: fix QinQ stripping<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">On Sat, Dec 06, 2025 at 06:43:11PM +0000, Anurag Mandal wrote:<o:p></o:p></p>
<p class="MsoPlainText">> Outer VLAN strip gets disabled when inner VLAN stripping is
<o:p></o:p></p>
<p class="MsoPlainText">> enabled/disabled after enabling outer VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> This happens because the respective register is overridden by the vsi
<o:p></o:p></p>
<p class="MsoPlainText">> params update of inner VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> This patch fixes the issue by re-enabling outer VLAN stripping after
<o:p></o:p></p>
<p class="MsoPlainText">> modification of inner VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Fixes: c52ff36686a4 ("net/i40e: enable QinQ stripping")<o:p></o:p></p>
<p class="MsoPlainText">> Cc: <a href="mailto:stable@dpdk.org">stable@dpdk.org</a><o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Signed-off-by: Anurag Mandal <<a href="mailto:anurag.mandal@intel.com">anurag.mandal@intel.com</a>><o:p></o:p></p>
<p class="MsoPlainText">> ---<o:p></o:p></p>
<p class="MsoPlainText">>  drivers/net/intel/i40e/i40e_ethdev.c | 10 ++++++++++<o:p></o:p></p>
<p class="MsoPlainText">>  1 file changed, 10 insertions(+)<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> diff --git a/drivers/net/intel/i40e/i40e_ethdev.c <o:p>
</o:p></p>
<p class="MsoPlainText">> b/drivers/net/intel/i40e/i40e_ethdev.c<o:p></o:p></p>
<p class="MsoPlainText">> index b8ce79061b..c8153f3351 100644<o:p></o:p></p>
<p class="MsoPlainText">> --- a/drivers/net/intel/i40e/i40e_ethdev.c<o:p></o:p></p>
<p class="MsoPlainText">> +++ b/drivers/net/intel/i40e/i40e_ethdev.c<o:p></o:p></p>
<p class="MsoPlainText">> @@ -4150,6 +4150,16 @@ i40e_vlan_offload_set(struct rte_eth_dev *dev, int mask)<o:p></o:p></p>
<p class="MsoPlainText">>                                         i40e_vsi_config_vlan_stripping(vsi, TRUE);<o:p></o:p></p>
<p class="MsoPlainText">>                           else<o:p></o:p></p>
<p class="MsoPlainText">>                                         i40e_vsi_config_vlan_stripping(vsi, FALSE);<o:p></o:p></p>
<p class="MsoPlainText">> +<o:p></o:p></p>
<p class="MsoPlainText">> +                       /* When VLAN strip is enabled/disabled<o:p></o:p></p>
<p class="MsoPlainText">> +                       * after enabling outer VLAN stripping,<o:p></o:p></p>
<p class="MsoPlainText">> +                       * outer VLAN stripping gets disabled<o:p></o:p></p>
<p class="MsoPlainText">> +                       * as the register gets overridden by<o:p></o:p></p>
<p class="MsoPlainText">> +                       * VLAN's strip vsi param update.<o:p></o:p></p>
<p class="MsoPlainText">> +                       * Hence, re-enable outer VLAN stripping.<o:p></o:p></p>
<p class="MsoPlainText">> +                       */<o:p></o:p></p>
<p class="MsoPlainText">> +                       if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP)<o:p></o:p></p>
<p class="MsoPlainText">> +                                      i40e_vsi_config_outer_vlan_stripping(vsi, TRUE);<o:p></o:p></p>
<p class="MsoPlainText">>            }<o:p></o:p></p>
<p class="MsoPlainText">>  <o:p></o:p></p>
<p class="MsoPlainText">Hi,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">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?<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thanks,<o:p></o:p></p>
<p class="MsoPlainText">/Bruce<o:p></o:p></p>
</div>
</body>
</html>