net/mlx5: fix matching for UDP tunnels with verbs

Message ID 20200505094218.29666-1-rasland@mellanox.com (mailing list archive)
State Superseded, archived
Delegated to: Raslan Darawsheh
Headers
Series net/mlx5: fix matching for UDP tunnels with verbs |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/travis-robot warning Travis build: failed
ci/Intel-compilation fail Compilation issues

Commit Message

Raslan Darawsheh May 5, 2020, 9:42 a.m. UTC
  When creating flow rule with zero specs it will cause
matching all UDP packets like following:
 eth / ipv4 / udp / vxlan / end
Such rule will match all udp packets.

This change the behavior to match the dv flow engine
which will automatically set the match on relative
outer UDP port if the user didn't specify any.

Fixes: 84c406e74524 ("net/mlx5: add flow translate function")
Cc: stable@dpdk.org

Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
---
 drivers/net/mlx5/mlx5_flow_verbs.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
  

Comments

Slava Ovsiienko May 5, 2020, 11:37 a.m. UTC | #1
> -----Original Message-----
> From: Raslan Darawsheh <rasland@mellanox.com>
> Sent: Tuesday, May 5, 2020 12:42
> To: Slava Ovsiienko <viacheslavo@mellanox.com>; Matan Azrad
> <matan@mellanox.com>
> Cc: dev@dpdk.org; Ori Kam <orika@mellanox.com>; stable@dpdk.org
> Subject: [PATCH] net/mlx5: fix matching for UDP tunnels with verbs
> 
> When creating flow rule with zero specs it will cause matching all UDP
> packets like following:
>  eth / ipv4 / udp / vxlan / end
> Such rule will match all udp packets.
> 
> This change the behavior to match the dv flow engine which will
> automatically set the match on relative outer UDP port if the user didn't
> specify any.
> 
> Fixes: 84c406e74524 ("net/mlx5: add flow translate function")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>

> ---
>  drivers/net/mlx5/mlx5_flow_verbs.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c
> b/drivers/net/mlx5/mlx5_flow_verbs.c
> index 7efd97f54..9094fb70b 100644
> --- a/drivers/net/mlx5/mlx5_flow_verbs.c
> +++ b/drivers/net/mlx5/mlx5_flow_verbs.c
> @@ -680,6 +680,26 @@ flow_verbs_translate_item_udp(struct mlx5_flow
> *dev_flow,
>  		udp.val.src_port &= udp.mask.src_port;
>  		udp.val.dst_port &= udp.mask.dst_port;
>  	}
> +
> +	if ((item + 1) != NULL && !(udp.val.dst_port & udp.mask.dst_port)) {
> +		switch((item + 1)->type) {
> +			case RTE_FLOW_ITEM_TYPE_VXLAN:
> +				udp.val.dst_port =
> htons(MLX5_UDP_PORT_VXLAN);
> +				udp.mask.dst_port = 0xffff;
> +				break;
> +			case RTE_FLOW_ITEM_TYPE_VXLAN_GPE:
> +				udp.val.dst_port =
> htons(MLX5_UDP_PORT_VXLAN_GPE);
> +				udp.mask.dst_port = 0xffff;
> +				break;
> +			case RTE_FLOW_ITEM_TYPE_MPLS:
> +				udp.val.dst_port =
> htons(MLX5_UDP_PORT_MPLS);
> +				udp.mask.dst_port = 0xffff;
> +				break;
> +			default:
> +				break;
> +		}
> +	}
> +
>  	flow_verbs_spec_add(&dev_flow->verbs, &udp, size);  }
> 
> --
> 2.26.0
  

Patch

diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c
index 7efd97f54..9094fb70b 100644
--- a/drivers/net/mlx5/mlx5_flow_verbs.c
+++ b/drivers/net/mlx5/mlx5_flow_verbs.c
@@ -680,6 +680,26 @@  flow_verbs_translate_item_udp(struct mlx5_flow *dev_flow,
 		udp.val.src_port &= udp.mask.src_port;
 		udp.val.dst_port &= udp.mask.dst_port;
 	}
+
+	if ((item + 1) != NULL && !(udp.val.dst_port & udp.mask.dst_port)) {
+		switch((item + 1)->type) {
+			case RTE_FLOW_ITEM_TYPE_VXLAN:
+				udp.val.dst_port = htons(MLX5_UDP_PORT_VXLAN);
+				udp.mask.dst_port = 0xffff;
+				break;
+			case RTE_FLOW_ITEM_TYPE_VXLAN_GPE:
+				udp.val.dst_port = htons(MLX5_UDP_PORT_VXLAN_GPE);
+				udp.mask.dst_port = 0xffff;
+				break;
+			case RTE_FLOW_ITEM_TYPE_MPLS:
+				udp.val.dst_port = htons(MLX5_UDP_PORT_MPLS);
+				udp.mask.dst_port = 0xffff;
+				break;
+			default:
+				break;
+		}
+	}
+
 	flow_verbs_spec_add(&dev_flow->verbs, &udp, size);
 }