patches for DPDK stable branches
 help / color / mirror / Atom feed
  • * [dpdk-stable] [PATCH v3 2/2] net/mlx5: fix flow director mask
           [not found] ` <cover.1523632978.git.nelio.laranjeiro@6wind.com>
           [not found]   ` <cover.1523543393.git.nelio.laranjeiro@6wind.com>
    @ 2018-04-17  9:01   ` Nelio Laranjeiro
      1 sibling, 0 replies; 3+ messages in thread
    From: Nelio Laranjeiro @ 2018-04-17  9:01 UTC (permalink / raw)
      To: dev, Yongseok Koh; +Cc: Adrien Mazarguil, stable
    
    During the transition to resurrect flow director on top of rte_flow, mask
    handling was removed by mistake.
    
    Fixes: 4c3e9bcdd52e ("net/mlx5: support flow director")
    Cc: stable@dpdk.org
    
    Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
    Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
    ---
     drivers/net/mlx5/mlx5_flow.c | 56 ++++++++++++++++++++++++++++++------
     1 file changed, 48 insertions(+), 8 deletions(-)
    
    diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
    index acaa5f318..7e3bdcc66 100644
    --- a/drivers/net/mlx5/mlx5_flow.c
    +++ b/drivers/net/mlx5/mlx5_flow.c
    @@ -442,10 +442,18 @@ struct mlx5_fdir {
     		struct rte_flow_item_ipv4 ipv4;
     		struct rte_flow_item_ipv6 ipv6;
     	} l3;
    +	union {
    +		struct rte_flow_item_ipv4 ipv4;
    +		struct rte_flow_item_ipv6 ipv6;
    +	} l3_mask;
     	union {
     		struct rte_flow_item_udp udp;
     		struct rte_flow_item_tcp tcp;
     	} l4;
    +	union {
    +		struct rte_flow_item_udp udp;
    +		struct rte_flow_item_tcp tcp;
    +	} l4_mask;
     	struct rte_flow_action_queue queue;
     };
     
    @@ -2661,6 +2669,8 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev,
     {
     	struct priv *priv = dev->data->dev_private;
     	const struct rte_eth_fdir_input *input = &fdir_filter->input;
    +	const struct rte_eth_fdir_masks *mask =
    +		&dev->data->dev_conf.fdir_conf.mask;
     
     	/* Validate queue number. */
     	if (fdir_filter->action.rx_queue >= priv->rxqs_n) {
    @@ -2707,29 +2717,43 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev,
     			.type_of_service = input->flow.ip4_flow.tos,
     			.next_proto_id = input->flow.ip4_flow.proto,
     		};
    +		attributes->l3_mask.ipv4.hdr = (struct ipv4_hdr){
    +			.src_addr = mask->ipv4_mask.src_ip,
    +			.dst_addr = mask->ipv4_mask.dst_ip,
    +			.time_to_live = mask->ipv4_mask.ttl,
    +			.type_of_service = mask->ipv4_mask.tos,
    +			.next_proto_id = mask->ipv4_mask.proto,
    +		};
     		attributes->items[1] = (struct rte_flow_item){
     			.type = RTE_FLOW_ITEM_TYPE_IPV4,
     			.spec = &attributes->l3,
    -			.mask = &attributes->l3,
    +			.mask = &attributes->l3_mask,
     		};
     		break;
     	case RTE_ETH_FLOW_NONFRAG_IPV6_UDP:
     	case RTE_ETH_FLOW_NONFRAG_IPV6_TCP:
     	case RTE_ETH_FLOW_NONFRAG_IPV6_OTHER:
     		attributes->l3.ipv6.hdr = (struct ipv6_hdr){
    -			.hop_limits = input->flow.udp6_flow.ip.hop_limits,
    -			.proto = input->flow.udp6_flow.ip.proto,
    +			.hop_limits = input->flow.ipv6_flow.hop_limits,
    +			.proto = input->flow.ipv6_flow.proto,
     		};
    +
     		memcpy(attributes->l3.ipv6.hdr.src_addr,
     		       input->flow.ipv6_flow.src_ip,
     		       RTE_DIM(attributes->l3.ipv6.hdr.src_addr));
     		memcpy(attributes->l3.ipv6.hdr.dst_addr,
     		       input->flow.ipv6_flow.dst_ip,
     		       RTE_DIM(attributes->l3.ipv6.hdr.src_addr));
    +		memcpy(attributes->l3_mask.ipv6.hdr.src_addr,
    +		       mask->ipv6_mask.src_ip,
    +		       RTE_DIM(attributes->l3_mask.ipv6.hdr.src_addr));
    +		memcpy(attributes->l3_mask.ipv6.hdr.dst_addr,
    +		       mask->ipv6_mask.dst_ip,
    +		       RTE_DIM(attributes->l3_mask.ipv6.hdr.src_addr));
     		attributes->items[1] = (struct rte_flow_item){
     			.type = RTE_FLOW_ITEM_TYPE_IPV6,
     			.spec = &attributes->l3,
    -			.mask = &attributes->l3,
    +			.mask = &attributes->l3_mask,
     		};
     		break;
     	default:
    @@ -2745,10 +2769,14 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev,
     			.src_port = input->flow.udp4_flow.src_port,
     			.dst_port = input->flow.udp4_flow.dst_port,
     		};
    +		attributes->l4_mask.udp.hdr = (struct udp_hdr){
    +			.src_port = mask->src_port_mask,
    +			.dst_port = mask->dst_port_mask,
    +		};
     		attributes->items[2] = (struct rte_flow_item){
     			.type = RTE_FLOW_ITEM_TYPE_UDP,
     			.spec = &attributes->l4,
    -			.mask = &attributes->l4,
    +			.mask = &attributes->l4_mask,
     		};
     		break;
     	case RTE_ETH_FLOW_NONFRAG_IPV4_TCP:
    @@ -2756,10 +2784,14 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev,
     			.src_port = input->flow.tcp4_flow.src_port,
     			.dst_port = input->flow.tcp4_flow.dst_port,
     		};
    +		attributes->l4_mask.tcp.hdr = (struct tcp_hdr){
    +			.src_port = mask->src_port_mask,
    +			.dst_port = mask->dst_port_mask,
    +		};
     		attributes->items[2] = (struct rte_flow_item){
     			.type = RTE_FLOW_ITEM_TYPE_TCP,
     			.spec = &attributes->l4,
    -			.mask = &attributes->l4,
    +			.mask = &attributes->l4_mask,
     		};
     		break;
     	case RTE_ETH_FLOW_NONFRAG_IPV6_UDP:
    @@ -2767,10 +2799,14 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev,
     			.src_port = input->flow.udp6_flow.src_port,
     			.dst_port = input->flow.udp6_flow.dst_port,
     		};
    +		attributes->l4_mask.udp.hdr = (struct udp_hdr){
    +			.src_port = mask->src_port_mask,
    +			.dst_port = mask->dst_port_mask,
    +		};
     		attributes->items[2] = (struct rte_flow_item){
     			.type = RTE_FLOW_ITEM_TYPE_UDP,
     			.spec = &attributes->l4,
    -			.mask = &attributes->l4,
    +			.mask = &attributes->l4_mask,
     		};
     		break;
     	case RTE_ETH_FLOW_NONFRAG_IPV6_TCP:
    @@ -2778,10 +2814,14 @@ mlx5_fdir_filter_convert(struct rte_eth_dev *dev,
     			.src_port = input->flow.tcp6_flow.src_port,
     			.dst_port = input->flow.tcp6_flow.dst_port,
     		};
    +		attributes->l4_mask.tcp.hdr = (struct tcp_hdr){
    +			.src_port = mask->src_port_mask,
    +			.dst_port = mask->dst_port_mask,
    +		};
     		attributes->items[2] = (struct rte_flow_item){
     			.type = RTE_FLOW_ITEM_TYPE_TCP,
     			.spec = &attributes->l4,
    -			.mask = &attributes->l4,
    +			.mask = &attributes->l4_mask,
     		};
     		break;
     	case RTE_ETH_FLOW_NONFRAG_IPV4_OTHER:
    -- 
    2.17.0
    
    ^ permalink raw reply	[flat|nested] 3+ messages in thread

  • end of thread, other threads:[~2018-04-17  9:01 UTC | newest]
    
    Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
    -- links below jump to the message on this page --
         [not found] <cover.1523888984.git.nelio.laranjeiro@6wind.com>
         [not found] ` <cover.1523632978.git.nelio.laranjeiro@6wind.com>
         [not found]   ` <cover.1523543393.git.nelio.laranjeiro@6wind.com>
    2018-04-12 14:31     ` [dpdk-stable] [PATCH 2/2] net/mlx5: fix flow director mask Nelio Laranjeiro
    2018-04-13 15:28     ` [dpdk-stable] [PATCH v2 " Nelio Laranjeiro
    2018-04-17  9:01   ` [dpdk-stable] [PATCH v3 " Nelio Laranjeiro
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).