From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 79CCBA00C2; Wed, 4 Jan 2023 12:58:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6F6E640697; Wed, 4 Jan 2023 12:58:52 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2057.outbound.protection.outlook.com [40.107.237.57]) by mails.dpdk.org (Postfix) with ESMTP id CF0994067B for ; Wed, 4 Jan 2023 12:58:50 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h1wEEQBEzRjV+/QeRgmmzvWDAhl9MkFRKdblrmcDcV5Ta7oH1iQtTI6jeZNBpnwTSjD6F3g5C9j7MoRpCSoovwaF54adjt3EuKyyZiq4/EJ4OgizAw+/nQTpj1PJyLqt2kzn5JpnVLHxDKtJXDf79pSUF18p6WN5BniAYzuLpAzQz/fEhHj0fVg4i4qqfLGpMY41KtK2afHyXUW7qtM5eFbEbJQUlAMB0ra8hRmCtwhrYKPbf7RZOh9FWQT/Iolgfn6+1/InK4T6Noy1UuAxhsVCRRJVCDjP6UAd6WNstLVo0JffnVDFd40m5/SGwB3TZalyJ2OLtC9r2/PaRirTqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bANIvdR+YUjMv6mo0AQ08+WwukxdyiPTMmTbWlXoMrA=; b=VjKFs/MjOPQItp1Zio6rc3Df0vDZj7QLsByTdOrsHh9sGl0rxNBKQakGQJfMBDiKpfV58LOuma4WadFBgemHrgxghaXID1+s92TSQobCDBUB9By81UrsWaIY439a9IWHXyxLx7OGxNc93Se3qEPTvQV7Uq3/yBQGkSOskU+kY/+Kb8LuBW2ZOrHns8xHJwlpg+SJPKcgffvsliTzySjTBOOiEIK8e5PrMkYfPrWH3CpEaWbLqfHvTzj6mkADBjRIhn9o/Av0mZ9BhB0IvhUvpzXIF3pddaVzzLo5cCEMZX48CgNWzODKlk86iSdWwx9ZSNhjqyQbpUkJWjOpraICEQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bANIvdR+YUjMv6mo0AQ08+WwukxdyiPTMmTbWlXoMrA=; b=Mzu96byr3ftqu3UADoKVcbl2/J1fQc6/5QsrjQENStvV2xq885hgAA+T6YkxsMTNsgHx+e0ywovTF1nk3MbmN5UGG28JwhW3YvXEE/Jyi1UnPqtbHgN46C+PNfOt55Z/LbgZPtVCN7ysRz8O/ZHwMLLI9Bkp1U+jayWOqTlWKMsj147pvuA4sPt8pUvKocomQAREUg86IdREUciqXAOn62KPUJ9ab+nJDv0l7Kqr+TvoSLCBeXHCDoeTH+Ckwcvndhb/slpQdTQRRwzsP0nzvIMT7snCZllh6I+opylFp9PxlYYSy1bhSWL5TQC8ziHxe3xvHsncjFZOlFEtPC5d3g== Received: from BL1PR13CA0017.namprd13.prod.outlook.com (2603:10b6:208:256::22) by MN2PR12MB4423.namprd12.prod.outlook.com (2603:10b6:208:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Wed, 4 Jan 2023 11:58:49 +0000 Received: from BL02EPF0000EE3D.namprd05.prod.outlook.com (2603:10b6:208:256:cafe::73) by BL1PR13CA0017.outlook.office365.com (2603:10b6:208:256::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.14 via Frontend Transport; Wed, 4 Jan 2023 11:58:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BL02EPF0000EE3D.mail.protection.outlook.com (10.167.241.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.10 via Frontend Transport; Wed, 4 Jan 2023 11:58:48 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Wed, 4 Jan 2023 03:58:39 -0800 Received: from rnnvmail203.nvidia.com (10.129.68.9) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Wed, 4 Jan 2023 03:58:39 -0800 Received: from nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36 via Frontend Transport; Wed, 4 Jan 2023 03:58:38 -0800 From: Maayan Kashani To: CC: , , , Viacheslav Ovsiienko Subject: [PATCH] net/mlx5: support ESP item in Verbs interface Date: Wed, 4 Jan 2023 13:58:33 +0200 Message-ID: <20230104115834.230487-1-mkashani@nvidia.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0000EE3D:EE_|MN2PR12MB4423:EE_ X-MS-Office365-Filtering-Correlation-Id: 74204cab-fe70-4f56-4afa-08daee4b0a6b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4UvIS1ikceXrkwhXlFTdRBg349on9Jc4qQCrKJqTO9KA6ly65COI4Opgcwku8Alrcr7zkX8GrCcgppJ+BCINzcboeoT+TJi56bNaTJXgRGJZEzELwWen/sKFJZ8MglyU6nmN8Wx2UWOfgXGz2+IXvqUOQaxvYBtDZeAvWgvrqN4kZjY09/s+I/Ef3En0FDtGCcfz0qIGAyRxzIkWZ7w+VV6EIr+aUTmaaWZ36Kki7d3T7uPvoUTMCt/76eWKocd0D447eN3dnOoRIs5p8v7dqQbBhiY3qKTz/nZSGL8kKRK5fwX2xOkVS5/Ye16dMmkAB2S7GKArDOtn+xRNnRgeNy15V3y5UzmqpfXZ/bIbnQoi6EYkG2OEKvFRrqmlU0aFMLh6XQfCJZ27UJoxEVrQXy4nYMmut2ViDBJ0TL7SRDWJtCP/YRYhof4asO/3DehjBDO4+0YzT9Ci72FXDVWMTDjOkNACfs702hDNFD5ISlsngkWGwYZU933zzfG/L6DOtPB/TUGo8WDQ36ViGQvNZXZqc9XIKQOAnImB2F5NX8CLRVGyWfm6+qSnXfjV15xcdFo6s/p1oBVan8w9Ec5KUCNgkucPCzy11EPFuyJQdT+PhL2E0NcSxcF4pFvFRH732VaMTdK0fidIXc0k2rbTMXmtmjjv+pJEhfGQRXb/oWeY8CWJ57SjAZV5jsFH48xx3vwS38yTWBmjUz9MJa9mWQ== X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230022)(4636009)(396003)(376002)(346002)(39860400002)(136003)(451199015)(36840700001)(46966006)(40470700004)(36756003)(7636003)(2906002)(47076005)(8936002)(5660300002)(41300700001)(82740400003)(83380400001)(36860700001)(40460700003)(356005)(86362001)(426003)(7696005)(6916009)(54906003)(55016003)(70206006)(6666004)(107886003)(6286002)(478600001)(70586007)(40480700001)(82310400005)(4326008)(2616005)(1076003)(316002)(186003)(8676002)(26005)(336012); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2023 11:58:48.9077 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 74204cab-fe70-4f56-4afa-08daee4b0a6b X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0000EE3D.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4423 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org ESP item is not currently supported in Verbs interface. Validate/translate ESP item in Verbs interface. Signed-off-by: Maayan Kashani Acked-by: Matan Azrad --- doc/guides/nics/mlx5.rst | 3 ++ drivers/common/mlx5/linux/meson.build | 2 + drivers/net/mlx5/mlx5_flow_verbs.c | 57 +++++++++++++++++++++++++ drivers/net/mlx5/windows/mlx5_flow_os.c | 9 +++- 4 files changed, 69 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index 51f51259e3..f137f156f9 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -599,6 +599,9 @@ Limitations - The NIC egress flow rules on representor port are not supported. +- When using DV/verbs flow engine (``dv_flow_en`` = 1/0 respectively), Match on SPI field + in ESP header for group 0 needs MLNX_OFED 5.6+. + Statistics ---------- diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build index 7e1575efc8..96a6c6c9be 100644 --- a/drivers/common/mlx5/linux/meson.build +++ b/drivers/common/mlx5/linux/meson.build @@ -81,6 +81,8 @@ has_member_args = [ # [ "MACRO to define if found", "header for the search", # "symbol to search" ] has_sym_args = [ + [ 'HAVE_IBV_FLOW_SPEC_ESP', 'infiniband/verbs.h', + 'IBV_FLOW_SPEC_ESP' ], [ 'HAVE_IBV_RX_HASH_IPSEC_SPI', 'infiniband/verbs.h', 'IBV_RX_HASH_IPSEC_SPI' ], [ 'HAVE_IBV_RELAXED_ORDERING', 'infiniband/verbs.h', diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c index 28ea28bfbe..3facd9c3b9 100644 --- a/drivers/net/mlx5/mlx5_flow_verbs.c +++ b/drivers/net/mlx5/mlx5_flow_verbs.c @@ -24,6 +24,7 @@ #include "mlx5.h" #include "mlx5_flow.h" #include "mlx5_rx.h" +#include "mlx5_flow_os.h" #define VERBS_SPEC_INNER(item_flags) \ (!!((item_flags) & MLX5_FLOW_LAYER_TUNNEL) ? IBV_FLOW_SPEC_INNER : 0) @@ -672,6 +673,42 @@ flow_verbs_translate_item_tcp(struct mlx5_flow *dev_flow, flow_verbs_spec_add(&dev_flow->verbs, &tcp, size); } +/** + * Convert the @p item into a Verbs specification. This function assumes that + * the input is valid and that there is space to insert the requested item + * into the flow. + * + * @param[in, out] dev_flow + * Pointer to dev_flow structure. + * @param[in] item + * Item specification. + * @param[in] item_flags + * Parsed item flags. + */ +#ifdef HAVE_IBV_FLOW_SPEC_ESP +static void +flow_verbs_translate_item_esp(struct mlx5_flow *dev_flow, + const struct rte_flow_item *item, + uint64_t item_flags __rte_unused) +{ + const struct rte_flow_item_esp *spec = item->spec; + const struct rte_flow_item_esp *mask = item->mask; + unsigned int size = sizeof(struct ibv_flow_spec_esp); + struct ibv_flow_spec_esp esp = { + .type = IBV_FLOW_SPEC_ESP | VERBS_SPEC_INNER(item_flags), + .size = size, + }; + + if (!mask) + mask = &rte_flow_item_esp_mask; + if (spec) { + esp.val.spi = spec->hdr.spi & mask->hdr.spi; + esp.mask.spi = mask->hdr.spi; + } + flow_verbs_spec_add(&dev_flow->verbs, &esp, size); +} +#endif + /** * Convert the @p item into a Verbs specification. This function assumes that * the input is valid and that there is space to insert the requested item @@ -1293,6 +1330,14 @@ flow_verbs_validate(struct rte_eth_dev *dev, int ret = 0; switch (items->type) { + case RTE_FLOW_ITEM_TYPE_ESP: + ret = mlx5_flow_os_validate_item_esp(items, item_flags, + next_protocol, + error); + if (ret < 0) + return ret; + last_item = MLX5_FLOW_ITEM_ESP; + break; case RTE_FLOW_ITEM_TYPE_VOID: break; case RTE_FLOW_ITEM_TYPE_ETH: @@ -1879,6 +1924,18 @@ flow_verbs_translate(struct rte_eth_dev *dev, item_flags |= tunnel ? MLX5_FLOW_LAYER_INNER_L4_UDP : MLX5_FLOW_LAYER_OUTER_L4_UDP; break; +#ifdef HAVE_IBV_FLOW_SPEC_ESP + case RTE_FLOW_ITEM_TYPE_ESP: + flow_verbs_translate_item_esp(dev_flow, items, + item_flags); + dev_flow->hash_fields |= + mlx5_flow_hashfields_adjust + (rss_desc, tunnel, + RTE_ETH_RSS_ESP, + IBV_RX_HASH_IPSEC_SPI); + item_flags |= MLX5_FLOW_ITEM_ESP; + break; +#endif case RTE_FLOW_ITEM_TYPE_VXLAN: flow_verbs_translate_item_vxlan(dev_flow, items, item_flags); diff --git a/drivers/net/mlx5/windows/mlx5_flow_os.c b/drivers/net/mlx5/windows/mlx5_flow_os.c index 5013e9f012..b9c767ee14 100644 --- a/drivers/net/mlx5/windows/mlx5_flow_os.c +++ b/drivers/net/mlx5/windows/mlx5_flow_os.c @@ -419,8 +419,8 @@ mlx5_flow_os_set_specific_workspace(struct mlx5_flow_workspace *data) int mlx5_flow_os_validate_item_esp(const struct rte_flow_item *item, - uint64_t item_flags, - uint8_t target_protocol, + uint64_t item_flags __rte_unused, + uint8_t target_protocol __rte_unused, struct rte_flow_error *error) { const struct rte_flow_item_esp *mask = item->mask; @@ -432,6 +432,11 @@ mlx5_flow_os_validate_item_esp(const struct rte_flow_item *item, MLX5_FLOW_LAYER_OUTER_L4; int ret; +#ifndef HAVE_IBV_FLOW_SPEC_ESP + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "ESP item not supported"); +#endif if (!(item_flags & l3m)) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, item, -- 2.21.0