From: Leon Romanovsky <leon@kernel.org>
To: Doug Ledford <dledford@redhat.com>, Jason Gunthorpe <jgg@mellanox.com>
Cc: Leon Romanovsky <leonro@mellanox.com>,
RDMA mailing list <linux-rdma@vger.kernel.org>,
Guy Levi <guyle@mellanox.com>, Mark Bloch <markb@mellanox.com>,
Or Gerlitz <ogerlitz@mellanox.com>,
Saeed Mahameed <saeedm@mellanox.com>,
linux-netdev <netdev@vger.kernel.org>
Subject: [PATCH rdma-next 17/27] RDMA/mlx5: Add new flow action verb, packet reformat
Date: Sun, 29 Jul 2018 15:58:55 +0300 [thread overview]
Message-ID: <20180729125905.31989-18-leon@kernel.org> (raw)
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>
From: Mark Bloch <markb@mellanox.com>
For now, only add L2_TUNNEL_TO_L2 option, for example this can be used
to decap VXLAN packets.
Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
drivers/infiniband/hw/mlx5/flow.c | 76 ++++++++++++++++++++++++++++++-
drivers/infiniband/hw/mlx5/mlx5_ib.h | 1 +
include/uapi/rdma/mlx5_user_ioctl_cmds.h | 7 +++
include/uapi/rdma/mlx5_user_ioctl_verbs.h | 4 ++
4 files changed, 87 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/hw/mlx5/flow.c b/drivers/infiniband/hw/mlx5/flow.c
index d0325e468801..0fea98cb7d42 100644
--- a/drivers/infiniband/hw/mlx5/flow.c
+++ b/drivers/infiniband/hw/mlx5/flow.c
@@ -202,6 +202,8 @@ void mlx5_ib_destroy_flow_action_raw(struct mlx5_ib_flow_action *maction)
mlx5_modify_header_dealloc(maction->flow_action_raw.dev->mdev,
maction->flow_action_raw.action_id);
break;
+ case MLX5_IB_FLOW_ACTION_DECAP:
+ break;
default:
WARN_ON(true);
break;
@@ -284,6 +286,64 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER)(struc
return 0;
}
+static bool mlx5_ib_flow_action_packet_reformat_valid(struct mlx5_ib_dev *ibdev,
+ u8 packet_reformat_type,
+ u8 ft_type)
+{
+ switch (packet_reformat_type) {
+ case MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2:
+ if (ft_type == MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX)
+ return MLX5_CAP_FLOWTABLE_NIC_RX(ibdev->mdev, decap);
+ break;
+ default:
+ break;
+ }
+
+ return false;
+}
+
+static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT)(struct ib_device *ib_dev,
+ struct ib_uverbs_file *file,
+ struct uverbs_attr_bundle *attrs)
+{
+ struct ib_uobject *uobj = uverbs_attr_get_uobject(attrs,
+ MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_HANDLE);
+ struct mlx5_ib_dev *mdev = to_mdev(uobj->context->device);
+ enum mlx5_ib_uapi_flow_action_packet_reformat_type dv_prt;
+ enum mlx5_ib_uapi_flow_table_type ft_type;
+ struct mlx5_ib_flow_action *maction;
+ int ret;
+
+ ret = uverbs_get_const(&ft_type, attrs,
+ MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_FT_TYPE);
+ if (ret)
+ return -EINVAL;
+
+ ret = uverbs_get_const(&dv_prt, attrs,
+ MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_TYPE);
+ if (ret)
+ return -EINVAL;
+
+ if (!mlx5_ib_flow_action_packet_reformat_valid(mdev, dv_prt, ft_type))
+ return -EOPNOTSUPP;
+
+ maction = kzalloc(sizeof(*maction), GFP_KERNEL);
+ if (!maction)
+ return -ENOMEM;
+
+ if (dv_prt ==
+ MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2) {
+ maction->flow_action_raw.sub_type =
+ MLX5_IB_FLOW_ACTION_DECAP;
+ maction->flow_action_raw.dev = mdev;
+ }
+
+ uverbs_flow_action_fill_action(&maction->ib_action, uobj,
+ uobj->context->device,
+ IB_FLOW_ACTION_UNSPECIFIED);
+ return 0;
+}
+
DECLARE_UVERBS_NAMED_METHOD(
MLX5_IB_METHOD_CREATE_FLOW,
UVERBS_ATTR_IDR(MLX5_IB_ATTR_CREATE_FLOW_HANDLE,
@@ -332,9 +392,23 @@ DECLARE_UVERBS_NAMED_METHOD(
enum mlx5_ib_uapi_flow_table_type,
UA_MANDATORY));
+DECLARE_UVERBS_NAMED_METHOD(
+ MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT,
+ UVERBS_ATTR_IDR(MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_HANDLE,
+ UVERBS_OBJECT_FLOW_ACTION,
+ UVERBS_ACCESS_NEW,
+ UA_MANDATORY),
+ UVERBS_ATTR_CONST_IN(MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_TYPE,
+ enum mlx5_ib_uapi_flow_action_packet_reformat_type,
+ UA_MANDATORY),
+ UVERBS_ATTR_CONST_IN(MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_FT_TYPE,
+ enum mlx5_ib_uapi_flow_table_type,
+ UA_MANDATORY));
+
ADD_UVERBS_METHODS(mlx5_ib_flow_actions,
UVERBS_OBJECT_FLOW_ACTION,
- &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER));
+ &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER),
+ &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT));
DECLARE_UVERBS_NAMED_METHOD(
MLX5_IB_METHOD_FLOW_MATCHER_CREATE,
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index b5dd68114588..856cb389c821 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -153,6 +153,7 @@ struct mlx5_ib_pd {
enum {
MLX5_IB_FLOW_ACTION_MODIFY_HEADER,
+ MLX5_IB_FLOW_ACTION_DECAP,
};
#define MLX5_IB_FLOW_MCAST_PRIO (MLX5_BY_PASS_NUM_PRIOS - 1)
diff --git a/include/uapi/rdma/mlx5_user_ioctl_cmds.h b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
index 9c83e13c0e89..40db7fca3d0b 100644
--- a/include/uapi/rdma/mlx5_user_ioctl_cmds.h
+++ b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -168,6 +168,7 @@ enum mlx5_ib_flow_methods {
enum mlx5_ib_flow_action_methods {
MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER = (1U << UVERBS_ID_NS_SHIFT),
+ MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT,
};
enum mlx5_ib_create_flow_action_create_modify_header_attrs {
@@ -176,4 +177,10 @@ enum mlx5_ib_create_flow_action_create_modify_header_attrs {
MLX5_IB_ATTR_CREATE_MODIFY_HEADER_FT_TYPE,
};
+enum mlx5_ib_create_flow_action_create_packet_reformat_attrs {
+ MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+ MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_TYPE,
+ MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_FT_TYPE,
+};
+
#endif
diff --git a/include/uapi/rdma/mlx5_user_ioctl_verbs.h b/include/uapi/rdma/mlx5_user_ioctl_verbs.h
index ceb6d0d8529a..b5fda0fcd484 100644
--- a/include/uapi/rdma/mlx5_user_ioctl_verbs.h
+++ b/include/uapi/rdma/mlx5_user_ioctl_verbs.h
@@ -44,5 +44,9 @@ enum mlx5_ib_uapi_flow_table_type {
MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX = 0x1,
};
+enum mlx5_ib_uapi_flow_action_packet_reformat_type {
+ MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 = 0x0,
+};
+
#endif
--
2.14.4
next prev parent reply other threads:[~2018-07-29 12:58 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-29 12:58 [PATCH rdma-next 00/27] Flow actions to mutate packets Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 01/27] net/mlx5: Cleanup flow namespace getter switch logic Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 02/27] net/mlx5: Add proper NIC TX steering flow tables support Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 03/27] net/mlx5: Export modify header alloc/dealloc functions Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 04/27] net/mlx5: Add support for more namespaces when allocating modify header Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 05/27] net/mlx5: Break encap/decap into two separated flow table creation flags Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 06/27] net/mlx5: Move header encap type to IFC header file Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 07/27] {net, RDMA}/mlx5: Rename encap to reformat packet Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 08/27] net/mlx5: Expose new packet reformat capabilities Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 09/27] net/mlx5: Pass a namespace for packet reformat ID allocation Leon Romanovsky
2018-07-29 12:58 ` [PATCH mlx5-next 10/27] net/mlx5: Export packet reformat alloc/dealloc functions Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 11/27] RDMA/mlx5: Add NIC TX steering support Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 12/27] RDMA/uverbs: Add UVERBS_ATTR_CONST_IN to the specs language Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 13/27] RDMA/mlx5: Add a new flow action verb, modify header Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 14/27] RDMA/mlx5: Enable attaching modify header to steering flows Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 15/27] RDMA/mlx5: Enable decap and packet reformat on flow tables Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 16/27] RDMA/uverbs: Add generic function to fill in flow action object Leon Romanovsky
2018-07-29 12:58 ` Leon Romanovsky [this message]
2018-07-29 12:58 ` [PATCH rdma-next 18/27] RDMA/mlx5: Enable attaching DECAP action to steering flows Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 19/27] RDMA/mlx5: Extend packet reformat verbs Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 20/27] RDMA/mlx5: Enable reformat on NIC RX if supported Leon Romanovsky
2018-07-29 12:58 ` [PATCH rdma-next 21/27] RDMA/mlx5: Enable attaching packet reformat action to steering flows Leon Romanovsky
2018-07-29 12:59 ` [PATCH rdma-next 22/27] IB/uverbs: Add IDRs array attribute type to ioctl() interface Leon Romanovsky
2018-07-29 12:59 ` [PATCH rdma-next 23/27] RDMA/mlx5: Refactor flow action parsing to be more generic Leon Romanovsky
2018-07-29 12:59 ` [PATCH rdma-next 24/27] RDMA/mlx5: Refactor DEVX flow creation Leon Romanovsky
2018-07-29 12:59 ` [PATCH rdma-next 25/27] RDMA/mlx5: Add flow actions support to DEVX create flow Leon Romanovsky
2018-07-29 12:59 ` [PATCH rdma-next 26/27] RDMA/mlx5: Add NIC TX namespace when getting a flow table Leon Romanovsky
2018-07-29 12:59 ` [PATCH rdma-next 27/27] RDMA/mlx5: Allow creating a matcher for a NIC TX " Leon Romanovsky
2018-07-30 17:09 ` [PATCH rdma-next 00/27] Flow actions to mutate packets Jason Gunthorpe
2018-07-30 17:37 ` Mark Bloch
2018-07-31 14:11 ` Leon Romanovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180729125905.31989-18-leon@kernel.org \
--to=leon@kernel.org \
--cc=dledford@redhat.com \
--cc=guyle@mellanox.com \
--cc=jgg@mellanox.com \
--cc=leonro@mellanox.com \
--cc=linux-rdma@vger.kernel.org \
--cc=markb@mellanox.com \
--cc=netdev@vger.kernel.org \
--cc=ogerlitz@mellanox.com \
--cc=saeedm@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.