[dpdk-dev] [PATCH v6 11/16] ethdev: fix default VLAN TCI mask in flow API

Adrien Mazarguil adrien.mazarguil at 6wind.com
Wed Apr 25 17:27:58 CEST 2018


VLAN TCI is a 16-bit field broken down as PCP (3b), DEI (1b) and VID (12b).

The default mask used by PMDs for the VLAN pattern when one isn't provided
by the application comprises the entire TCI, which is problematic because
most devices only support VID matching.

This forces applications to always provide a mask limited to the VID part
in order to successfully apply a flow rule with a VLAN pattern item.
Moreover, applications rarely want to match PCP and DEI intentionally.

Given the above and since VID is what is commonly referred to when talking
about VLAN, this commit excludes PCP and DEI from the default mask.

Fixes: 6de5c0f1302c ("ethdev: define default item masks in flow API")

Signed-off-by: Adrien Mazarguil <adrien.mazarguil at 6wind.com>
Acked-by: Andrew Rybchenko <arybchenko at solarflare.com>
Cc: Ferruh Yigit <ferruh.yigit at intel.com>
Cc: Thomas Monjalon <thomas at monjalon.net>
Cc: Wenzhuo Lu <wenzhuo.lu at intel.com>
Cc: Jingjing Wu <jingjing.wu at intel.com>
Cc: Ajit Khaparde <ajit.khaparde at broadcom.com>
Cc: Somnath Kotur <somnath.kotur at broadcom.com>
Cc: John Daley <johndale at cisco.com>
Cc: Hyong Youb Kim <hyonkim at cisco.com>
Cc: Beilei Xing <beilei.xing at intel.com>
Cc: Qi Zhang <qi.z.zhang at intel.com>
Cc: Konstantin Ananyev <konstantin.ananyev at intel.com>
Cc: Nelio Laranjeiro <nelio.laranjeiro at 6wind.com>
Cc: Yongseok Koh <yskoh at mellanox.com>
Cc: Tomasz Duszynski <tdu at semihalf.com>
Cc: Dmitri Epshtein <dima at marvell.com>
Cc: Natalie Samsonov <nsamsono at marvell.com>
Cc: Jianbo Liu <jianbo.liu at arm.com>
Cc: Andrew Rybchenko <arybchenko at solarflare.com>
Cc: Pascal Mazon <pascal.mazon at 6wind.com>

---

v6 changes:

- Reworded patch title as a "fix" (not candidate for backports) since it
  addresses a flaw in the original API definition.
- Updated API changes section in release notes.

v3 changes:

These changes were previously mistakenly made part of the previous patch
("ethdev: refine TPID handling in flow API") from which they were split
following Andrew's rightful comment [1].

[1] http://dpdk.org/ml/archives/dev/2018-April/095870.html
---
 doc/guides/prog_guide/rte_flow.rst     | 2 +-
 doc/guides/rel_notes/release_18_05.rst | 3 ++-
 lib/librte_ether/rte_flow.h            | 2 +-
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index fd317b48c..c62a80566 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -806,7 +806,7 @@ preceding pattern item.
 
 - ``tci``: tag control information.
 - ``inner_type``: inner EtherType or TPID.
-- Default ``mask`` matches TCI only.
+- Default ``mask`` matches the VID part of TCI only (lower 12 bits).
 
 Item: ``IPV4``
 ^^^^^^^^^^^^^^
diff --git a/doc/guides/rel_notes/release_18_05.rst b/doc/guides/rel_notes/release_18_05.rst
index a980a23ae..9aca8b4c8 100644
--- a/doc/guides/rel_notes/release_18_05.rst
+++ b/doc/guides/rel_notes/release_18_05.rst
@@ -264,7 +264,8 @@ API Changes
     (``func`` for RSS hash function to apply and ``level`` for the
     encapsulation level).
   * The VLAN pattern item (``struct rte_flow_item_vlan``) was modified to
-    include inner EtherType instead of outer TPID.
+    include inner EtherType instead of outer TPID. Its default mask was also
+    modified to cover the VID part (lower 12 bits) of TCI only.
 
 
 ABI Changes
diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h
index 8e50384d0..513734dce 100644
--- a/lib/librte_ether/rte_flow.h
+++ b/lib/librte_ether/rte_flow.h
@@ -493,7 +493,7 @@ struct rte_flow_item_vlan {
 /** Default mask for RTE_FLOW_ITEM_TYPE_VLAN. */
 #ifndef __cplusplus
 static const struct rte_flow_item_vlan rte_flow_item_vlan_mask = {
-	.tci = RTE_BE16(0xffff),
+	.tci = RTE_BE16(0x0fff),
 	.inner_type = RTE_BE16(0x0000),
 };
 #endif
-- 
2.11.0


More information about the dev mailing list