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 B14E5A0A0F; Mon, 5 Jul 2021 13:41:30 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 72254411E5; Mon, 5 Jul 2021 13:41:21 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02on2079.outbound.protection.outlook.com [40.107.96.79]) by mails.dpdk.org (Postfix) with ESMTP id 96C214003C for ; Mon, 5 Jul 2021 13:41:18 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hzt9KrFogL1HJQIvabP09Puc1KsLEpg1MCqIjZ0JFLVaUylOL0Hpykb4r07wP3qDMV8lCjAiv3zrHmN077lEVSIcNHI78WdFG328ZZpbvtW3hSZwFw1kHWAkxs7N0dTfnf82aYyCz2FO0SHJBlEKn1N58FIMphvrr6C6cHoJEsM0Ihqk4pQuk0m4pTIWmEE4K4o+j+byXcuOi3iJWyUnfq/2yNxIzrjFRL+SOvTkYmMpCe2xoTT4HaaS1LR0N18a1XDE3EAG/5p/rkDMxreysZai9Rs6N6HmT+0cgXqDemXQ6CwU15MmTuGwM6w4+sahxehpNoO9pvf51HPt6YrgYQ== 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-SenderADCheck; bh=RdzSMU0I0wA+Ai9VOd8vrVVNywnG4vys94eG0BADAe4=; b=BTkDPZyW14cvk0T+7L2xBXGCByyuLQa8e+5jFFuSARNq9filBrjqFY2wIvU0vBi4QZe8K5/zNanvGQx9Xq/e1DTl8HFMej5AUpdtov8RKNcpGmtGLB/tgLsDl9ZjCBG+DLhqD0vNdbEEHKuT+TE4nTsN5MSP1Gt46XfmAwnRRvivWhCC9rMqfYc1DG/viG217zUWVUoPdOYzjF9EkCatCVTdJy8ZVNWbS7t+Y09HCWHEMyPfcuuKqvttR5SO4EerhZIX+WdsS/+zqNwOqIJgb0UpfgttrhzhDlYObtf7PDZHOSXWIecILDAaVhQ5ZQoGUB4EqiZ48AA5usz/5oqSMw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=none sp=none 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=RdzSMU0I0wA+Ai9VOd8vrVVNywnG4vys94eG0BADAe4=; b=uizac+ES4ecJMu81mj9VA8bnE4NGjKorV6tQNW9fq9piwSkpu3juzy/t0aBpa3mEbm4hqlPhd9ZLU3C1dXd1bV/PkPvG3ZxKG6oKMo3MvbZndfuP34iXoZhlhErmJjs/7jgIMD8RUSegfNVyFhrO4aYeZsOI6I7r1vabtNIYoxbbQ2TIDhBa1jpHWNOBUHx8KkByF45NszfgclzxTBT9w5lIwTvadR5FdW87FARRfbYlzkIHl7czHnk57JK43vr59SADwC4LcZ6PomQFx24kljaFGdUxr20lRI90mgVuzzfmlyjHEofJw0ET6hzE5wKTfW/Eq9kkzCOk87YTqFd21w== Received: from DM3PR12CA0128.namprd12.prod.outlook.com (2603:10b6:0:51::24) by SA0PR12MB4349.namprd12.prod.outlook.com (2603:10b6:806:98::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Mon, 5 Jul 2021 11:41:17 +0000 Received: from DM6NAM11FT045.eop-nam11.prod.protection.outlook.com (2603:10b6:0:51:cafe::3a) by DM3PR12CA0128.outlook.office365.com (2603:10b6:0:51::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 11:41:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by DM6NAM11FT045.mail.protection.outlook.com (10.13.173.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4287.22 via Frontend Transport; Mon, 5 Jul 2021 11:41:16 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 5 Jul 2021 11:40:53 +0000 From: Gregory Etelson To: CC: , , , Viacheslav Ovsiienko , Shahaf Shuler Date: Mon, 5 Jul 2021 14:40:36 +0300 Message-ID: <20210705114036.4110-3-getelson@nvidia.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210705114036.4110-1-getelson@nvidia.com> References: <20210630070452.14055-1-getelson@nvidia.com> <20210705114036.4110-1-getelson@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0fb42a34-ac59-4337-74a0-08d93fa9ccc7 X-MS-TrafficTypeDiagnostic: SA0PR12MB4349: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: miKAiagqtjOrWFD/J9PejKrNcrJPauuDEvePQwhESMGRz5EeISuhLupX40uDAalrDthxCO9N7AJTOx+r94m7vijY57CXHrWcPBzYd7SoScNo6WgbnwgU+HpMnMUT9yZuyJE71anoPYUMHlUGNl8jy+dzv37SLvxI3ugUxb2IpkYnShrUMCgjP7lKKU3y7tmXyRt+rmph2h63jZJzgm3k/MM4aDyXY86+p3f1+peAr2k2sUBnlvwyRSXzZFCK1NeCdQ2HABXQqV8i2powtgg0pSc7xnPKHfsUJS6hbcffTEBnVIIl8LEeIdf9HFzcembgTiAbRH8k4E2Ewo0y+L+CbzKVdzVHYwaX/64Xsie/hF0hYVZQIHsEf1Ey87lHm3KldCbtmyqDhJxghEwlZKW6S8ty3/5kncTkdcFQpzjADhuzYqxq5U00RmwVQLkqS0dHSsr4c6Y0HjU1tXbKYmlRHmk1bm+1spJ75LY5feXvmptJVnISVBpq6/ZnDoAqcHgLilccqyxbcA4lf6wrxoCh1y6PNZWQRY19oGt4xHphgPQ8Ii/4Q4gu+pioINEFO5U6ZpvjbGNNxXWORvDzH0lEzt74dROGDCWLZyUTQEKbhSO93jDZlzQs7bWWlzzpPmw8QirXDkOOVoxdPlpyr4mIYupS5KgUZs2oPa3WMjDIGV554fO06TqnXg/HN4YRA0UpWd/MKktd0/QaPqNKGx6t2g== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(136003)(396003)(346002)(376002)(39860400002)(36840700001)(46966006)(478600001)(16526019)(54906003)(70586007)(70206006)(356005)(47076005)(6286002)(6916009)(36756003)(7636003)(82740400003)(186003)(86362001)(36860700001)(7696005)(82310400003)(6666004)(55016002)(316002)(26005)(107886003)(2906002)(83380400001)(2616005)(1076003)(8676002)(5660300002)(4326008)(8936002)(426003)(36906005)(336012); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2021 11:41:16.6083 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0fb42a34-ac59-4337-74a0-08d93fa9ccc7 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DM6NAM11FT045.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4349 Subject: [dpdk-dev] [PATCH v2 2/2] net/mlx5: add flow rule match for IPv4 IHL field 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 Sender: "dev" Provide flow rules capability to match on IPv4 IHL field. Minimal HCA firmware version requiredto offload IPv4 IHL is xx_30_2000. Signed-off-by: Gregory Etelson Acked-by: Viacheslav Ovsiienko --- doc/guides/nics/mlx5.rst | 1 + doc/guides/rel_notes/release_21_08.rst | 3 +++ drivers/net/mlx5/mlx5_flow_dv.c | 31 +++++++++++++++++++------- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index eb44a070b1..3cdf0de4e7 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -110,6 +110,7 @@ Features - Flow integrity offload API. - Connection tracking. - Sub-Function representors. +- IPv4 IHL offload. Limitations ----------- diff --git a/doc/guides/rel_notes/release_21_08.rst b/doc/guides/rel_notes/release_21_08.rst index a6ecfdf3ce..9fd3b2c214 100644 --- a/doc/guides/rel_notes/release_21_08.rst +++ b/doc/guides/rel_notes/release_21_08.rst @@ -55,6 +55,9 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Updated Mellanox MLX5 PMD.** + + * Added IPv4 IHL offload support. Removed Items ------------- diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index a04a3c2bb8..a84fb60d10 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -2451,19 +2451,19 @@ flow_dv_validate_item_gtp_psc(const struct rte_flow_item *item, * 0 on success, a negative errno value otherwise and rte_errno is set. */ static int -flow_dv_validate_item_ipv4(const struct rte_flow_item *item, - uint64_t item_flags, - uint64_t last_item, - uint16_t ether_type, - struct rte_flow_error *error) +flow_dv_validate_item_ipv4(struct rte_eth_dev *dev, + const struct rte_flow_item *item, + uint64_t item_flags, uint64_t last_item, + uint16_t ether_type, struct rte_flow_error *error) { int ret; + struct mlx5_priv *priv = dev->data->dev_private; const struct rte_flow_item_ipv4 *spec = item->spec; const struct rte_flow_item_ipv4 *last = item->last; const struct rte_flow_item_ipv4 *mask = item->mask; rte_be16_t fragment_offset_spec = 0; rte_be16_t fragment_offset_last = 0; - const struct rte_flow_item_ipv4 nic_ipv4_mask = { + struct rte_flow_item_ipv4 nic_ipv4_mask = { .hdr = { .src_addr = RTE_BE32(0xffffffff), .dst_addr = RTE_BE32(0xffffffff), @@ -2474,6 +2474,17 @@ flow_dv_validate_item_ipv4(const struct rte_flow_item *item, }, }; + if (mask && (mask->hdr.version_ihl & RTE_IPV4_HDR_IHL_MASK)) { + int tunnel = !!(item_flags & MLX5_FLOW_LAYER_TUNNEL); + bool ihl_cap = !tunnel ? priv->config.hca_attr.outer_ipv4_ihl : + priv->config.hca_attr.inner_ipv4_ihl; + if (!ihl_cap) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM, + item, + "IPV4 ihl offload not supported"); + nic_ipv4_mask.hdr.version_ihl = mask->hdr.version_ihl; + } ret = mlx5_flow_validate_item_ipv4(item, item_flags, last_item, ether_type, &nic_ipv4_mask, MLX5_ITEM_RANGE_ACCEPTED, error); @@ -6771,7 +6782,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, case RTE_FLOW_ITEM_TYPE_IPV4: mlx5_flow_tunnel_ip_check(items, next_protocol, &item_flags, &tunnel); - ret = flow_dv_validate_item_ipv4(items, item_flags, + ret = flow_dv_validate_item_ipv4(dev, items, item_flags, last_item, ether_type, error); if (ret < 0) @@ -8154,7 +8165,7 @@ flow_dv_translate_item_ipv4(void *matcher, void *key, void *headers_v; char *l24_m; char *l24_v; - uint8_t tos; + uint8_t tos, ihl_m, ihl_v; if (inner) { headers_m = MLX5_ADDR_OF(fte_match_param, matcher, @@ -8183,6 +8194,10 @@ flow_dv_translate_item_ipv4(void *matcher, void *key, *(uint32_t *)l24_m = ipv4_m->hdr.src_addr; *(uint32_t *)l24_v = ipv4_m->hdr.src_addr & ipv4_v->hdr.src_addr; tos = ipv4_m->hdr.type_of_service & ipv4_v->hdr.type_of_service; + ihl_m = ipv4_m->hdr.version_ihl & RTE_IPV4_HDR_IHL_MASK; + ihl_v = ipv4_v->hdr.version_ihl & RTE_IPV4_HDR_IHL_MASK; + MLX5_SET(fte_match_set_lyr_2_4, headers_m, ipv4_ihl, ihl_m); + MLX5_SET(fte_match_set_lyr_2_4, headers_v, ipv4_ihl, ihl_m & ihl_v); MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_ecn, ipv4_m->hdr.type_of_service); MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_ecn, tos); -- 2.31.1