From 0730ab674cb1854d3d9993600dbe41b8a49348bf Mon Sep 17 00:00:00 2001 From: Adrien Mazarguil Date: Wed, 25 Apr 2018 17:27:58 +0200 Subject: [PATCH] ethdev: fix default VLAN TCI mask in flow API 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 Acked-by: Andrew Rybchenko --- 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 fd317b48c7..c62a80566c 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 b8c594a589..5cdc4f4f53 100644 --- a/doc/guides/rel_notes/release_18_05.rst +++ b/doc/guides/rel_notes/release_18_05.rst @@ -279,7 +279,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 8e50384d09..513734dce1 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.20.1