From patchwork Tue Feb 7 11:40:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Slava Ovsiienko X-Patchwork-Id: 123244 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5D7C341C2D; Tue, 7 Feb 2023 12:40:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3C8D740E6E; Tue, 7 Feb 2023 12:40:52 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2061.outbound.protection.outlook.com [40.107.237.61]) by mails.dpdk.org (Postfix) with ESMTP id EFCA640042 for ; Tue, 7 Feb 2023 12:40:50 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VMeOwPxJpuSMI9XZKHobCCDG6NrdLQGhfIQT9wYTf2VSClTSsrrHFGTAwxQ6+uhXm3km2+LaJyaRtWTvg6jzdV5vNphD5sddxzfsZ0t9gdnfZI+wmJgCffANZCci9Xq1JZ/OF+hfd8i8eaL/4Fo5PC3HaO2apcIwpgpPAVcvQxNWzLeARjZIHC83Ao77lx9Vaqn5HA0ThQ5Em1DrgQ9KWeEJruet/zqVnspuGGL9bnMs5vPGPqr2mPvAAqAlkfZkilndss8hKzP+Hky+hnaN5fj1moO+VCc8w4KRuRPty6ZoX/T4KJJ/ZNky1vSu0vDT0ccrM/wQyteQv0yQMFTbrQ== 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=nk/LuOiBRTcZu8FEDcVeDtW+g4UpLX4pwnm+aBAFm6g=; b=CLiU0k6KYwSZUNL8TJq6zJYzviuo0c0Onsyp2vpoCnAuEkFX6woKtaXvLBMwlR+a+d9jh2KcTC5OnYc1Jjy9kiLa66u9Z8C+vLwSky9KgVmTI0N1cOoweBkuvn5sLRm8yHoheOhWJf1w4njAuLDl9S+w1uVX7bk9biUMuewIBCZDT98Dhpu3s2QiQvT93+Yy/hF6PSK49iNR63KwB/zyl5bqy0vKcb/KLRYAFDbZuR/0bF0Rph4UO671pQNoWhLoRHBwCbzyGAX2qM2TjzUX99M4RTyT80Jw/ISJ3MHFNajJygCJAeHfxdv+qBEizpIZF66P9M/WqZx189z3J8OwiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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=nk/LuOiBRTcZu8FEDcVeDtW+g4UpLX4pwnm+aBAFm6g=; b=KsPXIc8OxDP/Rv4Gv68+/d4Z1f1t1TGChluSLohNGgM/qEyzmAleLAyJBo2N3arY7FSty2vgMC3BSy3/2459do+JQHL66Rn+WBZcQL+GIffFb/q4xGzlciTU+Jrhyzd43QdWk+/+bAeGgdJ6WczXMZyT/l8MAnAfWJfSyCo8Ih4ByVygSe70p+JkLO341SDx/ajtn7raSXp86AFQRrETeQyPYgGOi/E0uewEFktNI0di/DiwSf6xh9PnLdVePx0GTOsEpHPhWy1Iu0CLjW4cD7qTFZWZa8o+5eiwJ9l42EQ1qEf4ZMMeokgY7iKjr+y1od9KfGBCWCDb8sXsxXk4KA== Received: from MW4PR03CA0264.namprd03.prod.outlook.com (2603:10b6:303:b4::29) by DM4PR12MB6040.namprd12.prod.outlook.com (2603:10b6:8:af::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.36; Tue, 7 Feb 2023 11:40:49 +0000 Received: from CO1NAM11FT042.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b4:cafe::f1) by MW4PR03CA0264.outlook.office365.com (2603:10b6:303:b4::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.36 via Frontend Transport; Tue, 7 Feb 2023 11:40:48 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1NAM11FT042.mail.protection.outlook.com (10.13.174.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.25 via Frontend Transport; Tue, 7 Feb 2023 11:40:48 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Tue, 7 Feb 2023 03:40:38 -0800 Received: from nvidia.com (10.126.231.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Tue, 7 Feb 2023 03:40:36 -0800 From: Viacheslav Ovsiienko To: CC: , , , "Hamdan Igbaria" Subject: [PATCH v2] net/mlx5/hws: support match on ESP item Date: Tue, 7 Feb 2023 13:40:21 +0200 Message-ID: <20230207114021.22022-1-viacheslavo@nvidia.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20230206095550.24572-1-viacheslavo@nvidia.com> References: <20230206095550.24572-1-viacheslavo@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.231.37] X-ClientProxiedBy: rnnvmail203.nvidia.com (10.129.68.9) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT042:EE_|DM4PR12MB6040:EE_ X-MS-Office365-Filtering-Correlation-Id: 48f24f8d-4f7f-4a51-4538-08db09002842 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0ZVZs46I31a8gvCkXDV2DyNjWhQpxDiMFfPG6ApXtdBm3hCVL3yOqAePsudHOJX81HlMb06nYpa0tCAWnj5kfgGeVX4KJh2Zf9EQT5q09qMwuGGKFAac5wdcWFg+5Exh171g82Zeywn8zf3/sshBgWVizZWm6cqS/cpnLtlmjy/fqP+xjvOfDDLgbP2dPJYE+9QSQTfLPPgreaUtFGV03w+mFBBfXWGLnV32pGl0s9oAePWQmxrcXLbjZTEYB5LoplLwM4oRuKlSGX7ydsp8qYdLemu6qugY8xRAxzLBYRae33GggMTKdbqfmrsWYaVgJw9rAmvAhNn6XDx4AMr1LfDle7PRgbz0RiuWudU2cvdPBww9/7E/sub+I+Cxs4jy92iCzQjnjEoM8mafvax/gezz2vWO6Khg4/OvasrdzdCeKkRSZz+lOSHD03TRbvPfqVToiqKUwooAwwco86wcFVWjNCMOXWWc/qF+/IJ+5yRUr3HQLbvE4ek9doBeT6QHVjtQfjj3hMYxBXozDrGLVzh72DmFG5It+vTt8nhZmTsQM++uFBD6LqtqASKzBFns6z8SSSDk6RIxkV4C4rxVeqFAXy7PYsVPUEd9djPhGtEZAZgf4TLlKnqEu3+EzhIDJ+e7shBjw8Cs/aQCkNOT2L5xQyIFs/nFPd44Qfc/a6evQzD/GIMaCrzMt0BmXYRL44m4ATQJ8Fp0Dr81tEp/Dg== X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230025)(4636009)(376002)(39860400002)(136003)(346002)(396003)(451199018)(40470700004)(46966006)(36840700001)(36756003)(86362001)(82740400003)(7636003)(36860700001)(356005)(41300700001)(8676002)(8936002)(5660300002)(6916009)(4326008)(54906003)(70586007)(70206006)(316002)(82310400005)(40480700001)(2906002)(40460700003)(55016003)(426003)(47076005)(2616005)(336012)(83380400001)(478600001)(7696005)(6666004)(186003)(26005)(16526019)(6286002)(107886003)(1076003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Feb 2023 11:40:48.2201 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 48f24f8d-4f7f-4a51-4538-08db09002842 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT042.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6040 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 From: Hamdan Igbaria Add the support to match on SPI and sequence number fields of ESP header. The match on ESP header in hardware steering is supported only if firmware reports the device supports IPsec offload. Signed-off-by: Hamdan Igbaria Acked-by: Viacheslav Ovsiienko --- drivers/common/mlx5/mlx5_prm.h | 3 ++- drivers/net/mlx5/hws/mlx5dr_cmd.c | 3 +++ drivers/net/mlx5/hws/mlx5dr_cmd.h | 1 + drivers/net/mlx5/hws/mlx5dr_definer.c | 38 ++++++++++++++++++++++++++- drivers/net/mlx5/hws/mlx5dr_definer.h | 2 ++ drivers/net/mlx5/mlx5_flow_hw.c | 1 + 6 files changed, 46 insertions(+), 2 deletions(-) diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 9294f65e24..0ee4b575d4 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -1695,7 +1695,8 @@ struct mlx5_ifc_cmd_hca_cap_bits { u8 reserved_at_460[0x8]; u8 aes_xts[0x1]; u8 crypto[0x1]; - u8 reserved_at_46a[0x6]; + u8 ipsec_offload[0x1]; + u8 reserved_at_46b[0x5]; u8 max_num_eqs[0x10]; u8 reserved_at_480[0x3]; u8 log_max_l2_table[0x5]; diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.c b/drivers/net/mlx5/hws/mlx5dr_cmd.c index 32378673cf..c60da381b2 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.c +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.c @@ -850,6 +850,9 @@ int mlx5dr_cmd_query_caps(struct ibv_context *ctx, caps->sq_ts_format = MLX5_GET(query_hca_cap_out, out, capability.cmd_hca_cap.sq_ts_format); + caps->ipsec_offload = MLX5_GET(query_hca_cap_out, out, + capability.cmd_hca_cap.ipsec_offload); + MLX5_SET(query_hca_cap_in, in, op_mod, MLX5_GET_HCA_CAP_OP_MOD_GENERAL_DEVICE_2 | MLX5_HCA_CAP_OPMOD_GET_CUR); diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.h b/drivers/net/mlx5/hws/mlx5dr_cmd.h index 468557ba16..af779e4bcd 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.h +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.h @@ -188,6 +188,7 @@ struct mlx5dr_cmd_query_caps { bool cross_vhca_resources; uint32_t shared_vhca_id; char fw_ver[64]; + bool ipsec_offload; }; int mlx5dr_cmd_destroy_obj(struct mlx5dr_devx_obj *devx_obj); diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c index 6b98eb8c96..ab65409629 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.c +++ b/drivers/net/mlx5/hws/mlx5dr_definer.c @@ -162,7 +162,9 @@ struct mlx5dr_definer_conv_data { X(SET_BE32, gre_opt_key, v->key.key, rte_flow_item_gre_opt) \ X(SET_BE32, gre_opt_seq, v->sequence.sequence, rte_flow_item_gre_opt) \ X(SET_BE16, gre_opt_checksum, v->checksum_rsvd.checksum, rte_flow_item_gre_opt) \ - X(SET, meter_color, rte_col_2_mlx5_col(v->color), rte_flow_item_meter_color) + X(SET, meter_color, rte_col_2_mlx5_col(v->color), rte_flow_item_meter_color) \ + X(SET_BE32, ipsec_spi, v->hdr.spi, rte_flow_item_esp) \ + X(SET_BE32, ipsec_sequence_number, v->hdr.seq, rte_flow_item_esp) /* Item set function format */ #define X(set_type, func_name, value, item_type) \ @@ -1465,6 +1467,36 @@ mlx5dr_definer_conv_item_meter_color(struct mlx5dr_definer_conv_data *cd, return 0; } +static int +mlx5dr_definer_conv_item_esp(struct mlx5dr_definer_conv_data *cd, + struct rte_flow_item *item, + int item_idx) +{ + const struct rte_flow_item_esp *m = item->mask; + struct mlx5dr_definer_fc *fc; + + if (!cd->caps->ipsec_offload) { + rte_errno = ENOTSUP; + return rte_errno; + } + + if (!m) + return 0; + if (m->hdr.spi) { + fc = &cd->fc[MLX5DR_DEFINER_FNAME_ESP_SPI]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_ipsec_spi_set; + DR_CALC_SET_HDR(fc, ipsec, spi); + } + if (m->hdr.seq) { + fc = &cd->fc[MLX5DR_DEFINER_FNAME_ESP_SEQUENCE_NUMBER]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_ipsec_sequence_number_set; + DR_CALC_SET_HDR(fc, ipsec, sequence_number); + } + return 0; +} + static int mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, struct mlx5dr_match_template *mt, @@ -1581,6 +1613,10 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, ret = mlx5dr_definer_conv_item_meter_color(&cd, items, i); item_flags |= MLX5_FLOW_ITEM_METER_COLOR; break; + case RTE_FLOW_ITEM_TYPE_ESP: + ret = mlx5dr_definer_conv_item_esp(&cd, items, i); + item_flags |= MLX5_FLOW_ITEM_ESP; + break; default: DR_LOG(ERR, "Unsupported item type %d", items->type); rte_errno = ENOTSUP; diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.h b/drivers/net/mlx5/hws/mlx5dr_definer.h index d52c6b0627..d0ecbe9325 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.h +++ b/drivers/net/mlx5/hws/mlx5dr_definer.h @@ -106,6 +106,8 @@ enum mlx5dr_definer_fname { MLX5DR_DEFINER_FNAME_INTEGRITY_I, MLX5DR_DEFINER_FNAME_ICMP_DW1, MLX5DR_DEFINER_FNAME_ICMP_DW2, + MLX5DR_DEFINER_FNAME_ESP_SPI, + MLX5DR_DEFINER_FNAME_ESP_SEQUENCE_NUMBER, MLX5DR_DEFINER_FNAME_MAX, }; diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 20c71ff7f0..ce9e0219e1 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -4732,6 +4732,7 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, case RTE_FLOW_ITEM_TYPE_ICMP: case RTE_FLOW_ITEM_TYPE_ICMP6: case RTE_FLOW_ITEM_TYPE_CONNTRACK: + case RTE_FLOW_ITEM_TYPE_ESP: break; case RTE_FLOW_ITEM_TYPE_INTEGRITY: /*