Add support for drop action for steering rules
Subsystems (2)
cover Add support for drop action for steering rules
Hi Doug,
This patch set introduces support for drop steering rule feature.
The application can configure a steering rule to drop all the packets that match this rule.
In order to create a drop steering rule, the user has to add the drop flow specification as part of the other flow specifications, otherwise the packet will be forwarded to the destination QP.
Thanks,
Slava and Leon.
Slava Shwartsman (2):
IB/core: Introduce drop flow specification
IB/mlx5: Add drop flow steering rule support
drivers/infiniband/core/uverbs.h | 1 + drivers/infiniband/core/uverbs_cmd.c | 7 +++++++ drivers/infiniband/hw/mlx5/main.c | 28 +++++++++++++++++++++++----- include/rdma/ib_verbs.h | 7 +++++++ include/uapi/rdma/ib_user_verbs.h | 11 +++++++++++ 5 files changed, 49 insertions(+), 5 deletions(-)
--
2.12.0
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170403101352.5692-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 1/2 IB/core: Introduce drop flow specification
From: Slava Shwartsman <slavash-VPRAkNaXOzVWk0Htik3J/[email protected]>
This flow steering specification identifies flow for drop by the HW. If user create a flow only with the drop specification,
then all the packets that hit this flow will be dropped, otherwise the HW will drop only the packets that match the other L2/L3/L4 specifications.
--- drivers/infiniband/core/uverbs.h | 1 + drivers/infiniband/core/uverbs_cmd.c | 7 +++++++ include/rdma/ib_verbs.h | 7 +++++++ include/uapi/rdma/ib_user_verbs.h | 11 +++++++++++ 4 files changed, 26 insertions(+)
drivers/infiniband/core/uverbs.h +1 -0
@@ -229,6 +229,7 @@ struct ib_uverbs_flow_spec {struct ib_uverbs_flow_spec_tcp_udp tcp_udp;struct ib_uverbs_flow_spec_ipv6 ipv6;struct ib_uverbs_flow_spec_action_tag flow_tag; +struct ib_uverbs_flow_spec_action_drop drop; }; };
drivers/infiniband/core/uverbs_cmd.c +7 -0
@@ -3227,6 +3227,13 @@ static int kern_spec_to_ib_spec_action(struct ib_uverbs_flow_spec *kern_spec, ib_spec->flow_tag.size =sizeof (struct ib_flow_spec_action_tag ); ib_spec->flow_tag.tag_id = kern_spec->flow_tag.tag_id;break ; +case IB_FLOW_SPEC_ACTION_DROP : +if (kern_spec->drop.size != +sizeof (struct ib_uverbs_flow_spec_action_drop )) +return -EINVAL ; + + ib_spec->drop.size =sizeof (struct ib_flow_spec_action_drop ); +break ;default :return -EINVAL ; }
include/rdma/ib_verbs.h +7 -0
@@ -1662,6 +1662,7 @@ enum ib_flow_spec_type {IB_FLOW_SPEC_INNER =0x100 ,/* Actions */ IB_FLOW_SPEC_ACTION_TAG =0x1000 , + IB_FLOW_SPEC_ACTION_DROP = 0x1001, };#define IB_FLOW_SPEC_LAYER_MASK 0xF0#define IB_FLOW_SPEC_SUPPORT_LAYERS 8
@@ -1790,6 +1791,11 @@ struct ib_flow_spec_action_tag {u32 tag_id; }; +struct ib_flow_spec_action_drop { +enum ib_flow_spec_type type; +u16 size; +}; + union ib_flow_spec { struct { u32 type;
@@ -1802,6 +1808,7 @@ union ib_flow_spec {struct ib_flow_spec_ipv6 ipv6;struct ib_flow_spec_tunnel tunnel;struct ib_flow_spec_action_tag flow_tag; +struct ib_flow_spec_action_drop drop; };struct ib_flow_attr {
include/uapi/rdma/ib_user_verbs.h +11 -0
@@ -947,6 +947,17 @@ struct ib_uverbs_flow_spec_action_tag {__u32 reserved1; }; +struct ib_uverbs_flow_spec_action_drop { +union { +struct ib_uverbs_flow_spec_hdr hdr; +struct { +__u32 type; +__u16 size; +__u16 reserved; + }; + }; +}; +struct ib_uverbs_flow_tunnel_filter {__be32 tunnel_id; };
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 2/2 IB/mlx5: Add drop flow steering rule support
In reply to a message not in the archiveFrom: Slava Shwartsman <slavash-VPRAkNaXOzVWk0Htik3J/[email protected]>
A drop rule is described by an action drop and no destination. If a user specified IB_FLOW_SPEC_ACTION_DROP then set the action to MLX5_FLOW_CONTEXT_ACTION_DROP and clear the destination.
--- drivers/infiniband/hw/mlx5/main.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-)
drivers/infiniband/hw/mlx5/main.c +23 -5
@@ -1726,6 +1726,7 @@ static void set_tos(void *outer_c, void *outer_v, u8 mask, u8 val)#define LAST_TCP_UDP_FIELD src_port#define LAST_TUNNEL_FIELD tunnel_id#define LAST_FLOW_TAG_FIELD tag_id +#define LAST_DROP_FIELD size/* Field is the last supported field */ #define FIELDS_NOT_SUPPORTED (filter, field)\
@@ -1736,7 +1737,8 @@ static void set_tos(void *outer_c, void *outer_v, u8 mask, u8 val) sizeof(filter.field))static int parse_flow_attr (u32 *match_c,u32 *match_v, -const union ib_flow_spec *ib_spec,u32 *tag_id) +const union ib_flow_spec *ib_spec, +u32 *tag_id,bool *is_drop) {void *misc_params_c =MLX5_ADDR_OF (fte_match_param, match_c, misc_parameters);
@@ -1937,6 +1939,12 @@ static int parse_flow_attr(u32 *match_c, u32 *match_v, *tag_id = ib_spec->flow_tag.tag_id;break ; +case IB_FLOW_SPEC_ACTION_DROP : +if (FIELDS_NOT_SUPPORTED (ib_spec->drop, +LAST_DROP_FIELD )) +return -EOPNOTSUPP ; + *is_drop = true; +break ;default :return -EINVAL ; }
@@ -2118,10 +2126,13 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev,struct mlx5_ib_flow_handler *handler;struct mlx5_flow_act flow_act = {0 };struct mlx5_flow_spec *spec; +struct mlx5_flow_destination *rule_dst = dst;const void *ib_flow = (const void *)flow_attr +sizeof (*flow_attr);unsigned int spec_index;u32 flow_tag =MLX5_FS_DEFAULT_FLOW_TAG ; +bool is_drop = false;int err =0 ; +int dest_num =1 ;if (!is_valid_attr (flow_attr))return ERR_PTR (-EINVAL );
@@ -2137,7 +2148,8 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev,for (spec_index =0 ; spec_index < flow_attr->num_of_specs; spec_index++) { err =parse_flow_attr (spec->match_criteria, - spec->match_value, ib_flow, &flow_tag); + spec->match_value, + ib_flow, &flow_tag, &is_drop);if (err <0 ) goto free;
@@ -2145,8 +2157,14 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev, } spec->match_criteria_enable =get_match_criteria_enable (spec->match_criteria); - flow_act.action = dst ?MLX5_FLOW_CONTEXT_ACTION_FWD_DEST : -MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO ; +if (is_drop) { + flow_act.action =MLX5_FLOW_CONTEXT_ACTION_DROP ; + rule_dst =NULL ; + dest_num =0 ; + }else { + flow_act.action = dst ?MLX5_FLOW_CONTEXT_ACTION_FWD_DEST : +MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO ; + } if (flow_tag != MLX5_FS_DEFAULT_FLOW_TAG && (flow_attr->type == IB_FLOW_ATTR_ALL_DEFAULT ||
@@ -2159,7 +2177,7 @@ static struct mlx5_ib_flow_handler *create_flow_rule(struct mlx5_ib_dev *dev, flow_act.flow_tag = flow_tag; handler->rule =mlx5_add_flow_rules (ft, spec, &flow_act, - dst,1 ); + rule_dst, dest_num);if (IS_ERR (handler->rule)) { err =PTR_ERR (handler->rule);
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 26 lines · Leon Romanovsky
Hi Doug,
This patch set introduces support for drop steering rule feature.
The application can configure a steering rule to drop all the packets that match this rule.
In order to create a drop steering rule, the user has to add the drop flow
specification as part of the other flow specifications, otherwise the packet
will be forwarded to the destination QP.Thanks,
Slava and Leon.Slava Shwartsman (2):
IB/core: Introduce drop flow specification
IB/mlx5: Add drop flow steering rule supportdrivers/infiniband/core/uverbs.h | 1 +
drivers/infiniband/core/uverbs_cmd.c| 7 +++++++ drivers/infiniband/hw/mlx5/main.c | 28 +++++++++++++++++++++++--- --
include/rdma/ib_verbs.h | 7 +++++++ include/uapi/rdma/ib_user_verbs.h | 11 +++++++++++
Quoted 4 lines
5 files changed, 49 insertions(+), 5 deletions(-)--
2.12.0
Series applied, thanks.
Signature · 9 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html