net/mlx5: fix VLAN inner ethernet type on E-Switch

Message ID 1542822278-15153-1-git-send-email-viacheslavo@mellanox.com (mailing list archive)
State Accepted, archived
Delegated to: Shahaf Shuler
Headers
Series net/mlx5: fix VLAN inner ethernet type on E-Switch |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS

Commit Message

Slava Ovsiienko Nov. 21, 2018, 5:44 p.m. UTC
  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>
---
 drivers/net/mlx5/mlx5_flow_tcf.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
  

Comments

Shahaf Shuler Nov. 22, 2018, 11:42 a.m. UTC | #1
Wednesday, November 21, 2018 7:45 PM, Viacheslav Ovsiienko:
> Subject: [dpdk-dev] [PATCH] net/mlx5: fix VLAN inner ethernet type on E-
> Switch
> 
> 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
> https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fpatc
> hes.dpdk.org%2Fpatch%2F47781&amp;data=02%7C01%7Cshahafs%40mellan
> ox.com%7C6cdd88ebb5494ed2809908d64fd90b8f%7Ca652971c7d2e4d9ba6a4
> d149256f461b%7C0%7C0%7C636784190968004901&amp;sdata=y%2BjABP0X3
> Z%2FQ70nemjj%2FzBaFkJ8ndpK%2BO1VmIH5BGPE%3D&amp;reserved=0
> 
> Fixes: 251e8d02cf37 ("net/mlx5: add VXLAN to flow translate routine")
> 
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>

Applied to next-net-mlx, thanks.

Ferruh, please let me know if you think it can be added to 18.11, it is relatively small, local, yet important fix. 

> ---
>  drivers/net/mlx5/mlx5_flow_tcf.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/mlx5/mlx5_flow_tcf.c
> b/drivers/net/mlx5/mlx5_flow_tcf.c
> index 22a866d..fb284c3 100644
> --- a/drivers/net/mlx5/mlx5_flow_tcf.c
> +++ b/drivers/net/mlx5/mlx5_flow_tcf.c
> @@ -3260,7 +3260,8 @@ struct pedit_parser {
>  			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 ?
> @@ -3317,14 +3318,14 @@ struct pedit_parser {
>  			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)
> --
> 1.8.3.1
  

Patch

diff --git a/drivers/net/mlx5/mlx5_flow_tcf.c b/drivers/net/mlx5/mlx5_flow_tcf.c
index 22a866d..fb284c3 100644
--- a/drivers/net/mlx5/mlx5_flow_tcf.c
+++ b/drivers/net/mlx5/mlx5_flow_tcf.c
@@ -3260,7 +3260,8 @@  struct pedit_parser {
 			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 ?
@@ -3317,14 +3318,14 @@  struct pedit_parser {
 			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)