net/sfc: cut non VLAN ID bits from TCI
authorAndrew Rybchenko <arybchenko@solarflare.com>
Fri, 29 Jun 2018 15:23:31 +0000 (16:23 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 4 Jul 2018 18:39:15 +0000 (20:39 +0200)
TCI may contain PCP or DEI bits. Matching of these bits is not
supported, but the bits still may be set in specification value and
not covered by mask. So, these bits should be ignored.

Fixes: 894080975e1e ("net/sfc: support VLAN in flow API filters")
Cc: stable@dpdk.org
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Roman Zhukov <roman.zhukov@oktetlabs.ru>
drivers/net/sfc/sfc_flow.c

index 5613d59..1838741 100644 (file)
@@ -371,7 +371,8 @@ sfc_flow_parse_vlan(const struct rte_flow_item *item,
         * the outer tag and the next matches the inner tag.
         */
        if (mask->tci == supp_mask.tci) {
-               vid = rte_bswap16(spec->tci);
+               /* Apply mask to keep VID only */
+               vid = rte_bswap16(spec->tci & mask->tci);
 
                if (!(efx_spec->efs_match_flags &
                      EFX_FILTER_MATCH_OUTER_VID)) {