]> git.droids-corp.org - dpdk.git/commitdiff
net/mlx5: fix VLAN inner ethernet type on E-Switch
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>
Wed, 21 Nov 2018 17:44:38 +0000 (17:44 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 22 Nov 2018 15:17:31 +0000 (16:17 +0100)
The TCA_FLOWER_KEY_VLAN_ETH_TYPE should be specified for the E-Switch
Flows with VLAN and L3 pattern items in the Netlink messages. The patch
adds missing flower key to the messages. This patch partially reverts to
the code smashed by http://patches.dpdk.org/patch/47781

Fixes: 251e8d02cf37 ("net/mlx5: add VXLAN to flow translate routine")
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
Acked-by: Shahaf Shuler <shahafs@mellanox.com>
drivers/net/mlx5/mlx5_flow_tcf.c

index 2f6b7d637163b382979a5843ee4828e6dea84a5d..26f27c6be2ecaedf66e5c2fe218a1a0a69a3096e 100644 (file)
@@ -3246,7 +3246,8 @@ flow_tcf_translate(struct rte_eth_dev *dev, struct mlx5_flow *dev_flow,
                        assert(mask.ipv4);
                        spec.ipv4 = items->spec;
                        if (!decap.vxlan) {
-                               if (!eth_type_set && !vlan_eth_type_set)
+                               if (!eth_type_set ||
+                                   (!vlan_eth_type_set && vlan_present))
                                        mnl_attr_put_u16
                                                (nlh,
                                                 vlan_present ?
@@ -3303,14 +3304,14 @@ flow_tcf_translate(struct rte_eth_dev *dev, struct mlx5_flow *dev_flow,
                        assert(mask.ipv6);
                        spec.ipv6 = items->spec;
                        if (!decap.vxlan) {
-                               if (!eth_type_set || !vlan_eth_type_set) {
+                               if (!eth_type_set ||
+                                   (!vlan_eth_type_set && vlan_present))
                                        mnl_attr_put_u16
                                                (nlh,
                                                 vlan_present ?
                                                 TCA_FLOWER_KEY_VLAN_ETH_TYPE :
                                                 TCA_FLOWER_KEY_ETH_TYPE,
                                                 RTE_BE16(ETH_P_IPV6));
-                               }
                                eth_type_set = 1;
                                vlan_eth_type_set = 1;
                                if (mask.ipv6 == &flow_tcf_mask_empty.ipv6)