[dpdk-dev] net/mlx5: fix ipv6 flow pattern item

Message ID c40dcba6d5f7289aa0942be5c27d5ed82797da58.1493108760.git.nelio.laranjeiro@6wind.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Nélio Laranjeiro April 25, 2017, 8:27 a.m. UTC
  Only masked bits must be set in Verbs specification for a rule to be valid.

Fixes: 2097d0d1e2cc ("net/mlx5: support basic flow items and actions")

Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
---
 drivers/net/mlx5/mlx5_flow.c | 6 ++++++
 1 file changed, 6 insertions(+)
  

Comments

Ferruh Yigit April 25, 2017, 10:45 a.m. UTC | #1
On 4/25/2017 9:27 AM, Nelio Laranjeiro wrote:
> Only masked bits must be set in Verbs specification for a rule to be valid.
> 
> Fixes: 2097d0d1e2cc ("net/mlx5: support basic flow items and actions")
> 
> Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 1784e64..cd3e5da 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -778,6 +778,7 @@  mlx5_flow_create_ipv6(const struct rte_flow_item *item,
 	struct mlx5_flow *flow = (struct mlx5_flow *)data;
 	struct ibv_exp_flow_spec_ipv6_ext *ipv6;
 	unsigned int ipv6_size = sizeof(struct ibv_exp_flow_spec_ipv6_ext);
+	unsigned int i;
 
 	++flow->ibv_attr->num_of_specs;
 	flow->ibv_attr->priority = 1;
@@ -803,6 +804,11 @@  mlx5_flow_create_ipv6(const struct rte_flow_item *item,
 	ipv6->mask.flow_label = mask->hdr.vtc_flow;
 	ipv6->mask.next_hdr = mask->hdr.proto;
 	ipv6->mask.hop_limit = mask->hdr.hop_limits;
+	/* Remove unwanted bits from values. */
+	for (i = 0; i < RTE_DIM(ipv6->val.src_ip); ++i) {
+		ipv6->val.src_ip[i] &= ipv6->mask.src_ip[i];
+		ipv6->val.dst_ip[i] &= ipv6->mask.dst_ip[i];
+	}
 	ipv6->val.flow_label &= ipv6->mask.flow_label;
 	ipv6->val.next_hdr &= ipv6->mask.next_hdr;
 	ipv6->val.hop_limit &= ipv6->mask.hop_limit;