From: Bruce Richardson <bruce.richardson@intel.com>
To: "Morten Brørup" <mb@smartsharesystems.com>
Cc: <dev@dpdk.org>, Dengdui Huang <huangdengdui@huawei.com>,
"Vladimir Medvedkin" <medvedkinv@gmail.com>, <techboard@dpdk.org>,
Patrick Robb <probb@iol.unh.edu>,
fengchengwen <fengchengwen@huawei.com>,
<stephen@networkplumber.org>, <jasvinder.singh@intel.com>,
<thomas@monjalon.net>, <aman.deep.singh@intel.com>,
<lihuisong@huawei.com>, <liuyonglong@huawei.com>,
Dean Marx <dmarx@iol.unh.edu>
Subject: Re: [RFC PATCH] doc: clarify VLAN and QinQ stripping behaviour
Date: Mon, 28 Jul 2025 16:11:05 +0100 [thread overview]
Message-ID: <aIeTCX3KbnxIvDJP@bricha3-mobl1.ger.corp.intel.com> (raw)
In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35E9FDCD@smartserver.smartshare.dk>
On Mon, Jul 28, 2025 at 04:51:30PM +0200, Morten Brørup wrote:
> > From: Dean Marx [mailto:dmarx@iol.unh.edu]
> > Sent: Friday, 18 July 2025 15.18
> >
> > On Fri, Jul 18, 2025 at 4:23 AM Bruce Richardson
> > <bruce.richardson@intel.com> wrote:
> > >
> > > On Thu, Jul 17, 2025 at 05:03:13PM -0400, Dean Marx wrote:
> > > > I've created a v1 of a QinQ test suite around the set of test cases
> > > > discussed earlier (which is not set in stone, and I expect it to
> > > > change significantly across many future versions.) The PASS/FAIL
> > > > values can be mostly disregarded in the context of this conversation,
> > > > but I've added logging to explain which packets are sent, and what
> > > > happened upon reception, which I hope will be more informative. After
> > > > running on mlx5/i40e drivers, I got the following results:
> > > >
> > > > test_vlan_strip: QinQ strip OFF and VLAN strip ON
> > > > test_qinq_strip: QinQ strip ON and VLAN strip ON
> > > >
> > > > i40e:
> > > > test_qinq_strip (sent packet: Single VLAN): FAIL
> > > > reason: VLAN tags found in packet when should have been
> > > > stripped: Ether / Dot1Q / 802.1q (0x1c) vlan 1280 / LLC / Raw /
> > > > Padding
> > > > test_qinq_strip (sent packet: Stacked VLAN): FAIL
> > > > reason: Expected one VLAN tag but found 2: Ether / Dot1Q / Dot1Q
> > > > / 802.1q (0x1c) vlan 1280 / LLC / Raw / Padding
> > > > test_qinq_strip (sent packet: Single S-VLAN): FAIL
> > > > reason: VLAN tags found in packet when should have been
> > > > stripped: Ether / Dot1Q / 802.1q (??) vlan ?? / LLC / Raw / Padding
> > > > test_qinq_strip (sent packet: QinQ): FAIL
> > > > reason: VLAN tags found in packet when should have been
> > > > stripped: Ether / Dot1Q / Dot1AD / 802.1q (0x1c) vlan 1280 / LLC / Raw
> > > > / Padding
> > > > test_vlan_strip (sent packet: Single VLAN): PASS
> > > > reason: VLAN tag stripped from packet
> > > > test_vlan_strip (sent packet: Stacked VLAN): PASS
> > > > reason: Received packet had outer VLAN stripped, with inner VLAN
> > intact
> > > > test_vlan_strip (sent packet: Single S-VLAN): PASS
> > > > reason: S-VLAN tag stripped from packet
> > > > test_vlan_strip (sent packet: QinQ): FAIL
> > > > reason: Neither tag stripped
> > > >
> > >
> > > Can you confirm exactly what is being sent in each case for the ethertype
> > > of the VLAN tag? When you say single and stacked VLANs, that is VLANs with
> > > 0x8100 type, correct? Is single S-VLAN a tag with ethertype 0x88a8, and
> > > QinQ packet a packet with one 0x88a8 and one 0x8100? No other type options,
> > > e.g. 0x9100 were checked, right?
> > >
> > > /Bruce
> >
> > That's correct, single VLAN is one 0x8100 tag, stacked is two, single
> > S-VLAN is one 0x88a8, and QinQ is 0x88a8 and 0x8100. No other types
> > were tested in the stripping case
>
>
> Bruce,
>
> It seems the drivers have the ability to set the EtherType of the Outer (and sometimes Inner) tag:
> https://elixir.bootlin.com/dpdk/v25.07/source/lib/ethdev/rte_ethdev.h#L3752
> https://elixir.bootlin.com/dpdk/v25.07/source/drivers/net/intel/e1000/igb_ethdev.c#L2739
> https://elixir.bootlin.com/dpdk/v25.07/source/drivers/net/intel/i40e/i40e_ethdev.c#L4038
>
> -Morten
>
Thanks. Question is, does this help us to clarify the behaviour for these
tags? Based on the fact that the comment for the tag_type says that the
outer is the same as single for vlan types, then should the behaviour be:
* VLAN strip - strip at most one tag as defined by the "outer/single" VLAN
type.
* QinQ strip:
- if outer/single VLAN tag matches the outer tag type, strip it
- if outer tag has been stripped, and inner tag matches the tag type,
strip that also.
- if a single VLAN tag is present, it gets stripped only if it's tag type
matches outer type - it is left alone if it matches the inner type
- if two VLAN tags are present, and the inner tag matches, it is not
stripped if the outer tag does not match/has not been stripped.
Also, should we specify for DPDK what the default tags should be for the
two cases. It seems for the Intel NICs that I tried, that both inner and
outer tags always start with 0x8100. That's probably a good default for
VLAN strip, but for QinQ strip, we probably want hardware to default to
0x88a8 and 0x8100. Alternatively, we could/should mandate that drivers
explicitly set the required tags before starting the port.
/Bruce
next prev parent reply other threads:[~2025-07-28 15:12 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-14 13:30 Bruce Richardson
2025-07-14 15:06 ` Stephen Hemminger
2025-07-14 15:11 ` Bruce Richardson
2025-07-14 16:33 ` Morten Brørup
2025-07-14 16:49 ` Bruce Richardson
2025-07-15 15:04 ` Morten Brørup
2025-07-15 16:20 ` Bruce Richardson
2025-07-14 20:09 ` Dean Marx
2025-07-14 21:41 ` Patrick Robb
2025-07-15 7:47 ` Bruce Richardson
2025-07-15 21:15 ` Patrick Robb
2025-07-16 10:11 ` Bruce Richardson
2025-07-16 19:24 ` Dean Marx
2025-07-16 19:46 ` Bruce Richardson
2025-07-17 17:45 ` Morten Brørup
2025-07-17 21:03 ` Dean Marx
2025-07-18 8:22 ` Bruce Richardson
2025-07-18 13:18 ` Dean Marx
2025-07-28 14:51 ` Morten Brørup
2025-07-28 15:11 ` Bruce Richardson [this message]
2025-07-28 17:48 ` Morten Brørup
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aIeTCX3KbnxIvDJP@bricha3-mobl1.ger.corp.intel.com \
--to=bruce.richardson@intel.com \
--cc=aman.deep.singh@intel.com \
--cc=dev@dpdk.org \
--cc=dmarx@iol.unh.edu \
--cc=fengchengwen@huawei.com \
--cc=huangdengdui@huawei.com \
--cc=jasvinder.singh@intel.com \
--cc=lihuisong@huawei.com \
--cc=liuyonglong@huawei.com \
--cc=mb@smartsharesystems.com \
--cc=medvedkinv@gmail.com \
--cc=probb@iol.unh.edu \
--cc=stephen@networkplumber.org \
--cc=techboard@dpdk.org \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).