From patchwork Tue Aug 8 10:00:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gregory Etelson X-Patchwork-Id: 129942 X-Patchwork-Delegate: ferruh.yigit@amd.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 D685E4300B; Tue, 8 Aug 2023 12:01:17 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B0E8343247; Tue, 8 Aug 2023 12:01:17 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2078.outbound.protection.outlook.com [40.107.237.78]) by mails.dpdk.org (Postfix) with ESMTP id F13FD40A87 for ; Tue, 8 Aug 2023 12:01:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O61eq8RCsN3tUi2qymdWAsVDC+Oeq3ZIPhxK/l4wZIJsQkQ5w2afiwArzkkhLWdKzJJlUvDVXqAm3aaSP3jW+E/36vqlnzyPgYmWGSmq9bbn493T61+eO/PUbDw1/Zcuhn1KJFKKfIa1Vk38yB0T2VED0j5LjYa0x1gRRYxrnlft6cHn6XHsQ0SghGugPR/y5NHcULYDF11GfwYPsUl1z8TbbVYGWbwhMQMam+TAwDJIdplQOLPCdG+H5NJlR7Bs2PzvzOjDhM++Jnb4C2lOEEAFaVk1pnQ5IrVITew9bTMr5QZYlamHT7K6roGb/+MCDBLZaz/BuhxcYZKGPsIs9w== 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=xum6sl4RXJBnjieEkcPdUcMyphlxyLFFmXcRLm1HV+c=; b=JdHkzAC4EPmIbhlHdJHzABlaZ8wIzZ16zI3ede2aBHKnhf7ajVsj3oPsz8VpUbxm3EHcg/rONdyddLiPs1d2Qjq3PR0MZJTe8y6q84s/f71MKJWax3ExcJz20i0eagcHvgpQhPkBe3YpAkPxqZ3OyYLPo1H2U5+MWGJS0ISpGgpDBYpPR85LUQluYA9SQdxmn9JpstWIX9NuPJjU1rrRyGHf1dl892olTff+863amXv6tQq7tHPTOv6ZrQuOpLmmDbO+s7QbmJhmZzJcU/qkqUoiZ/wy70NIWEZ6WjrO1oan7eIYlJJ5QDtj/xZEOpQG6MK2e1fZvO8TvA3J3AsmZw== 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=xum6sl4RXJBnjieEkcPdUcMyphlxyLFFmXcRLm1HV+c=; b=QaYDfxM9msjnfsPlOmF+Ke+zcv2fSQJ5YR6IDA15o5vpaEmR8rsaXx9UpIKBBJxoS6SofqbPQuY7nFMhW7N0aVK1UBqoUVpQEXUV6QR5LzQB1jWfRlwH6xD8zOk6FDMu6rWuSCUl20gUOclkq3WdQHXC2mN0fdqbFNqqJUOk6bo7HqaFMoaOMcySjTq5hXTI9XQDezrRWSkT3Or7QhKwgYLSpbmZdGWu7Aggv1QiJQUggxxBjNrKAlh9Q516nWNLzeRpxJApSY6w/Sq3cYmNwpTrXbtKBoXdPO4ub7nRMuFCStHrIq6ESpqHQlsmP/4lXVUEIHR+gRywSKA0lJraSw== Received: from PH8PR07CA0016.namprd07.prod.outlook.com (2603:10b6:510:2cd::24) by BN9PR12MB5210.namprd12.prod.outlook.com (2603:10b6:408:11b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27; Tue, 8 Aug 2023 10:01:09 +0000 Received: from SN1PEPF0002529E.namprd05.prod.outlook.com (2603:10b6:510:2cd:cafe::43) by PH8PR07CA0016.outlook.office365.com (2603:10b6:510:2cd::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27 via Frontend Transport; Tue, 8 Aug 2023 10:01:12 +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 SN1PEPF0002529E.mail.protection.outlook.com (10.167.242.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.20 via Frontend Transport; Tue, 8 Aug 2023 10:01:12 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) 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.5; Tue, 8 Aug 2023 03:00:56 -0700 Received: from nvidia.com (10.126.231.35) 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.37; Tue, 8 Aug 2023 03:00:51 -0700 From: Gregory Etelson To: CC: , , , "Ori Kam" , Aman Singh , Yuying Zhang , Matan Azrad , "Viacheslav Ovsiienko" , Suanming Mou , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Subject: [PATCH] ethdev: remove init_color from METER_MARK action Date: Tue, 8 Aug 2023 13:00:36 +0300 Message-ID: <20230808100036.215477-1-getelson@nvidia.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF0002529E:EE_|BN9PR12MB5210:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e08e6a0-80b8-4060-5f17-08db97f6659d X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yiCppdNE91CA7HKHS5Io89TiYzFjV3rTV8fjG5kYJm7G7kvKd1GQOhDOXPpYGvbllPYStUvtonJJO44EYWAbeqGjEunRKShluRInSD9I+f/K2HBEIAwvQRMoH+lTvadFqfRdkYP2cugBrcoM1U4HkLyhCs4eU0EOskoxqCB7qaIvQ6hp7AOGZGnWkGOdbzgYRUqKzyNThoA/W28AEWjbnmEF3aLQW6JhFbOVwe66Og+Uynz56nhWz5meIDbCrJ8o70y6ByGKbp3NTLofghjrgoj8G8VM0v1MxXUJqXqkfBFfRs9t8eWrGiw7XWn6OhxzkvqceQcdFPgvHEyTFSnJm54WmI8WHUrBkdn9FxcH9W0rQKMYIJynW605C6vfdV0Gf85rEIyUc4fkfvqUTaWG5ijtMmxdjoX/MDgvjDfqN1CW+6ZZRr8zd+4UbjS3zw8Qrhb6hcLD6eswdvw33XmVJJOGEganKt+T+APFQX73T09Qo9cuXoG2OCTvziyrJJX3Bf3z8M67BkDrO7PexzC14LcsmF9wO8ADQsFKF0/naqA3znW91ReILKYqW6437WTuIzgtbz2afrN1XAaAdO+yGL8bdCFr71P78qtb0HD3h2EzPZqDWgHvN4EuoZLeX/lhnZzP0EWs2hzqfa9/SQLM6+tth7xD9KZ5urj6RoLibJyqyhUfJpvUjZ13fKjlY2h7/2WXdSGHnoVfLPXdeMV6j7NBuXibmNmdEsHNuXhC2slGj/dFzCjmV6B0z/xG14so 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:(13230028)(4636009)(346002)(136003)(39860400002)(376002)(396003)(1800799003)(186006)(451199021)(82310400008)(40470700004)(46966006)(36840700001)(40480700001)(55016003)(1076003)(26005)(40460700003)(36756003)(54906003)(5660300002)(86362001)(2906002)(4326008)(8676002)(70206006)(316002)(6916009)(8936002)(41300700001)(6666004)(70586007)(7696005)(356005)(82740400003)(7636003)(478600001)(426003)(36860700001)(83380400001)(47076005)(2616005)(16526019)(336012)(6286002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2023 10:01:12.4368 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9e08e6a0-80b8-4060-5f17-08db97f6659d 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: SN1PEPF0002529E.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5210 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 Indirect list API defines 2 types of action update: • Action mutable context is always shared between all flows that referenced indirect actions list handle. Action mutable context can be changed by explicit invocation of indirect handle update function. • Flow mutable context is private to a flow. Flow mutable context can be updated by indirect list handle flow rule configuration. `METER_MARK::init_color` is flow resource. Current flows implementation placed `init_color` in the `rte_flow_action_meter_mark` making it action level resource. The patch removes `init_color` from the `rte_flow_action_meter_mark` structure. API change: The patch removed: • struct rte_flow_action_meter_mark::init_color • struct rte_flow_update_meter_mark::init_color_valid Signed-off-by: Gregory Etelson Acked-by: Ori Kam --- app/test-pmd/cmdline_flow.c | 8 --- app/test-pmd/config.c | 1 - drivers/net/mlx5/mlx5_flow_hw.c | 97 ++++++++++++++------------------- lib/ethdev/rte_flow.h | 6 +- 4 files changed, 43 insertions(+), 69 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 94827bcc4a..54daede7cb 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -575,7 +575,6 @@ enum index { ACTION_METER_POLICY, ACTION_METER_POLICY_ID2PTR, ACTION_METER_COLOR_MODE, - ACTION_METER_INIT_COLOR, ACTION_METER_STATE, ACTION_OF_DEC_NW_TTL, ACTION_OF_POP_VLAN, @@ -2227,7 +2226,6 @@ static const enum index action_meter_mark[] = { ACTION_METER_PROFILE, ACTION_METER_POLICY, ACTION_METER_COLOR_MODE, - ACTION_METER_INIT_COLOR, ACTION_METER_STATE, ACTION_NEXT, ZERO, @@ -6175,12 +6173,6 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY(struct rte_flow_action_meter_mark, color_mode)), .call = parse_vc_conf, }, - [ACTION_METER_INIT_COLOR] = { - .name = "mtr_init_color", - .help = "meter initial color", - .next = NEXT(action_meter_mark, NEXT_ENTRY(ITEM_METER_COLOR_NAME)), - .args = ARGS(ARGS_ENTRY(struct rte_flow_action_meter_mark, init_color)), - }, [ACTION_METER_STATE] = { .name = "mtr_state", .help = "meter state", diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 11f3a22048..415da109dc 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3179,7 +3179,6 @@ port_queue_action_handle_update(portid_t port_id, if (mtr_update.meter_mark.policy) mtr_update.policy_valid = 1; mtr_update.color_mode_valid = 1; - mtr_update.init_color_valid = 1; mtr_update.state_valid = 1; update = &mtr_update; break; diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 5395969eb0..8ddef811ee 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -1344,8 +1344,7 @@ flow_hw_meter_mark_alloc(struct rte_eth_dev *dev, uint32_t queue, aso_mtr->state = (queue == MLX5_HW_INV_QUEUE) ? ASO_METER_WAIT : ASO_METER_WAIT_ASYNC; aso_mtr->offset = mtr_id - 1; - aso_mtr->init_color = (meter_mark->color_mode) ? - meter_mark->init_color : RTE_COLOR_GREEN; + aso_mtr->init_color = fm->color_aware ? RTE_COLORS : RTE_COLOR_GREEN; /* Update ASO flow meter by wqe. */ if (mlx5_aso_meter_update_by_wqe(priv->sh, queue, aso_mtr, &priv->mtr_bulk, user_data, push)) { @@ -1380,9 +1379,6 @@ flow_hw_meter_mark_compile(struct rte_eth_dev *dev, /* Compile METER_MARK action */ acts[aso_mtr_pos].action = pool->action; acts[aso_mtr_pos].aso_meter.offset = aso_mtr->offset; - acts[aso_mtr_pos].aso_meter.init_color = - (enum mlx5dr_action_aso_meter_color) - rte_col_2_mlx5_col(aso_mtr->init_color); *index = aso_mtr->fm.meter_id; return 0; } @@ -2068,9 +2064,6 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue, return -1; rule_act->action = pool->action; rule_act->aso_meter.offset = aso_mtr->offset; - rule_act->aso_meter.init_color = - (enum mlx5dr_action_aso_meter_color) - rte_col_2_mlx5_col(aso_mtr->init_color); break; case MLX5_INDIRECT_ACTION_TYPE_QUOTA: flow_hw_construct_quota(priv, rule_act, idx); @@ -2483,9 +2476,6 @@ flow_hw_actions_construct(struct rte_eth_dev *dev, pool->action; rule_acts[act_data->action_dst].aso_meter.offset = aso_mtr->offset; - rule_acts[act_data->action_dst].aso_meter.init_color = - (enum mlx5dr_action_aso_meter_color) - rte_col_2_mlx5_col(aso_mtr->init_color); break; case RTE_FLOW_ACTION_TYPE_METER_MARK: /* @@ -8659,6 +8649,45 @@ flow_hw_action_handle_create(struct rte_eth_dev *dev, uint32_t queue, return handle; } +static int +mlx5_flow_update_meter_mark(struct rte_eth_dev *dev, uint32_t queue, + const struct rte_flow_update_meter_mark *upd_meter_mark, + uint32_t idx, bool push, + struct mlx5_hw_q_job *job, struct rte_flow_error *error) +{ + struct mlx5_priv *priv = dev->data->dev_private; + struct mlx5_aso_mtr_pool *pool = priv->hws_mpool; + const struct rte_flow_action_meter_mark *meter_mark = &upd_meter_mark->meter_mark; + struct mlx5_aso_mtr *aso_mtr = mlx5_ipool_get(pool->idx_pool, idx); + struct mlx5_flow_meter_info *fm; + + if (!aso_mtr) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "Invalid meter_mark update index"); + fm = &aso_mtr->fm; + if (upd_meter_mark->profile_valid) + fm->profile = (struct mlx5_flow_meter_profile *) + (meter_mark->profile); + if (upd_meter_mark->color_mode_valid) + fm->color_aware = meter_mark->color_mode; + if (upd_meter_mark->state_valid) + fm->is_enable = meter_mark->state; + /* Update ASO flow meter by wqe. */ + if (mlx5_aso_meter_update_by_wqe(priv->sh, queue, + aso_mtr, &priv->mtr_bulk, job, push)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "Unable to update ASO meter WQE"); + /* Wait for ASO object completion. */ + if (queue == MLX5_HW_INV_QUEUE && + mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "Unable to wait for ASO meter CQE"); + return 0; +} + /** * Update shared action. * @@ -8689,15 +8718,9 @@ flow_hw_action_handle_update(struct rte_eth_dev *dev, uint32_t queue, struct rte_flow_error *error) { struct mlx5_priv *priv = dev->data->dev_private; - struct mlx5_aso_mtr_pool *pool = priv->hws_mpool; const struct rte_flow_modify_conntrack *ct_conf = (const struct rte_flow_modify_conntrack *)update; - const struct rte_flow_update_meter_mark *upd_meter_mark = - (const struct rte_flow_update_meter_mark *)update; - const struct rte_flow_action_meter_mark *meter_mark; struct mlx5_hw_q_job *job = NULL; - struct mlx5_aso_mtr *aso_mtr; - struct mlx5_flow_meter_info *fm; uint32_t act_idx = (uint32_t)(uintptr_t)handle; uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET; uint32_t idx = act_idx & ((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1); @@ -8724,44 +8747,8 @@ flow_hw_action_handle_update(struct rte_eth_dev *dev, uint32_t queue, break; case MLX5_INDIRECT_ACTION_TYPE_METER_MARK: aso = true; - meter_mark = &upd_meter_mark->meter_mark; - /* Find ASO object. */ - aso_mtr = mlx5_ipool_get(pool->idx_pool, idx); - if (!aso_mtr) { - ret = -EINVAL; - rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_UNSPECIFIED, - NULL, "Invalid meter_mark update index"); - break; - } - fm = &aso_mtr->fm; - if (upd_meter_mark->profile_valid) - fm->profile = (struct mlx5_flow_meter_profile *) - (meter_mark->profile); - if (upd_meter_mark->color_mode_valid) - fm->color_aware = meter_mark->color_mode; - if (upd_meter_mark->init_color_valid) - aso_mtr->init_color = (meter_mark->color_mode) ? - meter_mark->init_color : RTE_COLOR_GREEN; - if (upd_meter_mark->state_valid) - fm->is_enable = meter_mark->state; - /* Update ASO flow meter by wqe. */ - if (mlx5_aso_meter_update_by_wqe(priv->sh, queue, - aso_mtr, &priv->mtr_bulk, job, push)) { - ret = -EINVAL; - rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_UNSPECIFIED, - NULL, "Unable to update ASO meter WQE"); - break; - } - /* Wait for ASO object completion. */ - if (queue == MLX5_HW_INV_QUEUE && - mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) { - ret = -EINVAL; - rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_UNSPECIFIED, - NULL, "Unable to wait for ASO meter CQE"); - } + ret = mlx5_flow_update_meter_mark(dev, queue, update, idx, push, + job, error); break; case MLX5_INDIRECT_ACTION_TYPE_RSS: ret = flow_dv_action_update(dev, handle, update, error); diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 86ed98c562..b44e6077ad 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -4025,8 +4025,6 @@ struct rte_flow_action_meter_mark { struct rte_flow_meter_policy *policy; /** Metering mode: 0 - Color-Blind, 1 - Color-Aware. */ int color_mode; - /** Initial Color applied to packets in Color-Aware mode. */ - enum rte_color init_color; /** Metering state: 0 - Disabled, 1 - Enabled. */ int state; }; @@ -4045,12 +4043,10 @@ struct rte_flow_update_meter_mark { uint32_t policy_valid:1; /** The color mode will be updated. */ uint32_t color_mode_valid:1; - /** The initial color will be updated. */ - uint32_t init_color_valid:1; /** The meter state will be updated. */ uint32_t state_valid:1; /** Reserved bits for the future usage. */ - uint32_t reserved:27; + uint32_t reserved:28; }; /** From patchwork Thu Aug 10 16:14:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Kozyrev X-Patchwork-Id: 130091 X-Patchwork-Delegate: ferruh.yigit@amd.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 940B64302C; Thu, 10 Aug 2023 18:15:23 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 859774324E; Thu, 10 Aug 2023 18:15:23 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2065.outbound.protection.outlook.com [40.107.237.65]) by mails.dpdk.org (Postfix) with ESMTP id 3E88240691 for ; Thu, 10 Aug 2023 18:15:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C0gYCsjp9c3bh5v8e5AH+eG2mKWvSVWGfOavZBcztrcZy3p1cXnnSgpIqfiTNjgfzPOD9TuiYmKDdG9TjuyGtyyhdUuzsRwchyip4+OyYtl7nqf1lqiZwXvmtZf505/KV3CzppGKVPOWqcl6Dc8+oHga7zA+goYYdOlPdSMp8lruVseUnf1NCNyw7ROPCJ9Ns1SnlBNeZTFOcCBwSumBfxJumbhrCqT+tjMgAjGoe8kWLl2U47Ct+lzUstFfcFoNh7nBFPoBMou6wPNBYPZZUNQmCr0XwRw/PeYcFgKyUDuz15HN5zhK05gIlnk3ZGbfYa6gtGr7idFDebV2S+5/2g== 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=bAKTFc/2TOqZ0K1dpX6tS5+OeIwg0/x51ZhrB8AYgp0=; b=AZRx6ObQPL/uq4bQkrGj1A9Db7spAB4NTquU98Y8q5H4FaexVCPXyncwMhtGf+foketYidku93QqXbXwel9qvbxxkSJmnmLksI59d/sfTqPAw4MUwLC4stm2/scGeXljascH/30IgvlUoC/9auqyfvKSaZnA+nJjb9O35awApmqzQ92Uubua9pissuCpii/4BLBXX6j5DK0j73uC6e5xrGr/vjdrjqXY0HvzZLbE89umTF8gT8LwrBYh22xPC9B+pyrFuvwiF3a2CoICAitwObnTRcjzCAEEneWzgiINLswcCD6T/AJdOOCaaDXhcKRBkMn6ScqX75ZveMKPR0HTLQ== 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=bAKTFc/2TOqZ0K1dpX6tS5+OeIwg0/x51ZhrB8AYgp0=; b=Co2+aT5dqVyrJwFmSBq1t9iz0cUQqb/1KIHd+ZEu3iJhYEJ6ZUApIw+fH1Ef/Cm01z9UBE7uMXDARgGXGYvRVtDFBloCSgwgwCC3b3l903PwCVQkNB3WT376zWESPO02bprQZtvdetfz1uUlSOPZr5adGFNTuKd0lzvPu15i0k2Fk7b4eIsKFE92D6kXh6Q0yppehEldDhtqAvWi/wEMb0Ks4ITcuj9ayx7/z3U7IPaW6fK/sqapn/E0Nhr//aXvwVRBLUNSsBKHfKdOpMbP8I9uTuDA5gwsseZZVS9nQBBKCMRsvSGoDEnCyEcDdEqi6yw7uCWbFY4jXqbazS9/Cw== Received: from PH0PR07CA0061.namprd07.prod.outlook.com (2603:10b6:510:f::6) by BY5PR12MB4193.namprd12.prod.outlook.com (2603:10b6:a03:20c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.30; Thu, 10 Aug 2023 16:15:20 +0000 Received: from SA2PEPF000015CA.namprd03.prod.outlook.com (2603:10b6:510:f:cafe::4e) by PH0PR07CA0061.outlook.office365.com (2603:10b6:510:f::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.30 via Frontend Transport; Thu, 10 Aug 2023 16:15:19 +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 SA2PEPF000015CA.mail.protection.outlook.com (10.167.241.200) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.20 via Frontend Transport; Thu, 10 Aug 2023 16:15:16 +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.5; Thu, 10 Aug 2023 09:15:03 -0700 Received: from pegasus01.mtr.labs.mlnx (10.126.230.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.37; Thu, 10 Aug 2023 09:15:01 -0700 From: Alexander Kozyrev To: CC: , , , Subject: [PATCH] ethdev: add packet type matching item Date: Thu, 10 Aug 2023 19:14:47 +0300 Message-ID: <20230810161447.2108369-1-akozyrev@nvidia.com> X-Mailer: git-send-email 2.18.2 MIME-Version: 1.0 X-Originating-IP: [10.126.230.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: SA2PEPF000015CA:EE_|BY5PR12MB4193:EE_ X-MS-Office365-Filtering-Correlation-Id: 535d58a9-9896-4f60-8a2a-08db99bcfc30 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1z9M3qD1UEPpx4a0W/o3RSwrJ7X56JwfM6wQDj3w1zM3kLz5OJNhXsuJEVyUqHpwe4o1+KRs3ogc9e6dcmz6ZWKBYg8ZBI/Xq4VtvHlrPew4mo3QcTRdNGSZBqNfg9AidKCxy7wycATRFgqN/x24Iprq7nLSMdUB1n+Ax0WsDPnJ4gEIeFR28AljRUxYRdoLB499T5StJzI7qvrLyqMIM8FU3O3Y7/4M0h1Y0vLj8KXJ0tKRkmvuHDgRAJkFCKqSwcI170G0n6K0rqHd50IX1BT0BnmNXZA7yUNrxxDRyllnCd+Zts1+7jKx76nmapPyzfwUPMfm/Uh+qTlusqQMzOe8+1sT5S8M1Uh5Me8ZQd5g7F8nUgw/+4EitQleEy7ANs0cpgkyiafGv0DF9Hzpl2uX2qxj4UF+4kCtW73XLgbM5nbKuqzJmEPd0TAyHERcOIS25FkADUIwdCR+zyuHV+/ZBCQmk3LuUBZrBr/dWLbXpv6da/BjwLeiLf9xRMRxbqHGCUMcaPZ2Jt4FrMjk6iTokrLRckUc/SgxlA5p92aLweKGDvbarOK/tSw2gta2Y6t1Dd1nyI/gRU6THohjGQ4GKp4eLd3QcM2Y4iSxpTNrJO36eRFtzNVSTQn6r+MZvRfQ7pJ9eN3tcXdceA0+ZYPBReo8ONVrwXEUpe+l0Iz1PqCdRBQx9howiH1niGKXR1A+DwNATbFeE06PiU4vjkL9Sq/qdXlM9xOBvlmNSAM= 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:(13230028)(4636009)(376002)(346002)(136003)(39860400002)(396003)(82310400008)(451199021)(1800799006)(186006)(36840700001)(46966006)(40470700004)(426003)(40460700003)(336012)(83380400001)(7636003)(2906002)(16526019)(40480700001)(54906003)(478600001)(86362001)(2616005)(4326008)(36860700001)(5660300002)(6666004)(1076003)(82740400003)(316002)(36756003)(26005)(8676002)(8936002)(41300700001)(70586007)(47076005)(70206006)(356005)(6916009); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2023 16:15:16.5591 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 535d58a9-9896-4f60-8a2a-08db99bcfc30 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: SA2PEPF000015CA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4193 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 Add RTE_FLOW_ITEM_TYPE_PTYPE to allow matching on L2/L3/L4 and tunnel information as defined in mbuf. Signed-off-by: Alexander Kozyrev Acked-by: Ori Kam --- app/test-pmd/cmdline_flow.c | 27 +++++++++++++++++++++ doc/guides/nics/features/default.ini | 1 + doc/guides/prog_guide/rte_flow.rst | 7 ++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 4 +++ lib/ethdev/rte_flow.c | 1 + lib/ethdev/rte_flow.h | 25 +++++++++++++++++++ 6 files changed, 65 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 94827bcc4a..853a6d25e0 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -524,6 +524,8 @@ enum index { ITEM_IB_BTH_PSN, ITEM_IPV6_PUSH_REMOVE_EXT, ITEM_IPV6_PUSH_REMOVE_EXT_TYPE, + ITEM_PTYPE, + ITEM_PTYPE_VALUE, /* Validate/create actions. */ ACTIONS, @@ -1561,6 +1563,7 @@ static const enum index next_item[] = { ITEM_AGGR_AFFINITY, ITEM_TX_QUEUE, ITEM_IB_BTH, + ITEM_PTYPE, END_SET, ZERO, }; @@ -2079,6 +2082,12 @@ static const enum index item_ib_bth[] = { ZERO, }; +static const enum index item_ptype[] = { + ITEM_PTYPE_VALUE, + ITEM_NEXT, + ZERO, +}; + static const enum index next_action[] = { ACTION_END, ACTION_VOID, @@ -5827,6 +5836,21 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_ib_bth, hdr.psn)), }, + [ITEM_PTYPE] = { + .name = "ptype", + .help = "match L2/L3/L4 and tunnel information", + .priv = PRIV_ITEM(PTYPE, + sizeof(struct rte_flow_item_ptype)), + .next = NEXT(item_ptype), + .call = parse_vc, + }, + [ITEM_PTYPE_VALUE] = { + .name = "packet_type", + .help = "packet type as defined in rte_mbuf_ptype", + .next = NEXT(item_ptype, NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ptype, packet_type)), + }, /* Validate/create actions. */ [ACTIONS] = { .name = "actions", @@ -12689,6 +12713,9 @@ flow_item_default_mask(const struct rte_flow_item *item) case RTE_FLOW_ITEM_TYPE_IB_BTH: mask = &rte_flow_item_ib_bth_mask; break; + case RTE_FLOW_ITEM_TYPE_PTYPE: + mask = &rte_flow_item_ptype_mask; + break; default: break; } diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini index 2011e97127..e41a97b3bb 100644 --- a/doc/guides/nics/features/default.ini +++ b/doc/guides/nics/features/default.ini @@ -137,6 +137,7 @@ ppp = pppoed = pppoes = pppoe_proto_id = +ptype = quota = raw = represented_port = diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 5bc998a433..62a6dbb7f9 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1566,6 +1566,13 @@ Matches an InfiniBand base transport header in RoCE packet. - ``hdr``: InfiniBand base transport header definition (``rte_ib.h``). +Item: ``PTYPE`` +^^^^^^^^^^^^^^^ + +Matches the packet type as defined in rte_mbuf_ptype. + +- ``packet_type``: L2/L3/L4 and tunnel information. + Actions ~~~~~~~ diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index a182479ab2..8dc711bfc4 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3805,6 +3805,10 @@ This section lists supported pattern items and their attributes, if any. - ``send_to_kernel``: send packets to kernel. +- ``ptype``: match the packet type (L2/L3/L4 and tunnel information). + + - ``packet_type {unsigned}``: packet type. + Actions list ^^^^^^^^^^^^ diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index 271d854f78..71583bc174 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -166,6 +166,7 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = { MK_FLOW_ITEM(AGGR_AFFINITY, sizeof(struct rte_flow_item_aggr_affinity)), MK_FLOW_ITEM(TX_QUEUE, sizeof(struct rte_flow_item_tx_queue)), MK_FLOW_ITEM(IB_BTH, sizeof(struct rte_flow_item_ib_bth)), + MK_FLOW_ITEM(PTYPE, sizeof(struct rte_flow_item_ptype)), }; /** Generate flow_action[] entry. */ diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 86ed98c562..de941a5867 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -688,6 +688,14 @@ enum rte_flow_item_type { * @see struct rte_flow_item_ib_bth. */ RTE_FLOW_ITEM_TYPE_IB_BTH, + + /** + * Matches the packet type as defined in rte_mbuf_ptype. + * + * See struct rte_flow_item_ptype. + * + */ + RTE_FLOW_ITEM_TYPE_PTYPE, }; /** @@ -2311,6 +2319,23 @@ static const struct rte_flow_item_tx_queue rte_flow_item_tx_queue_mask = { }; #endif +/** + * + * RTE_FLOW_ITEM_TYPE_PTYPE + * + * Matches the packet type as defined in rte_mbuf_ptype. + */ +struct rte_flow_item_ptype { + uint32_t packet_type; /**< L2/L3/L4 and tunnel information. */ +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_PTYPE. */ +#ifndef __cplusplus +static const struct rte_flow_item_ptype rte_flow_item_ptype_mask = { + .packet_type = 0xffffffff, +}; +#endif + /** * Action types. * From patchwork Fri Aug 11 14:07:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bing Zhao X-Patchwork-Id: 130167 X-Patchwork-Delegate: ferruh.yigit@amd.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 B52A943035; Fri, 11 Aug 2023 16:07:36 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9343140F16; Fri, 11 Aug 2023 16:07:36 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2040.outbound.protection.outlook.com [40.107.236.40]) by mails.dpdk.org (Postfix) with ESMTP id A3D9F40E03 for ; Fri, 11 Aug 2023 16:07:34 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YghVKish93qcdSLt0hG0EhyPtPTzfgZG8duWqqldsj1+4D2F4TPBpbQEcf1KFvPIGrVGIRoYF1cJDtKiMt0cS/bolkRegi+zF5SQWFuPyYoL65ogQsv7O37/E2PyXoLwP8QgACmo+RIqACckc2EwwFWw1SA1Dzavh0seoqOGmVBF4sLFuTa8mdlcUiWK4JEKAX5gXjYKPlpPEadF7LCyX2rdXWntJU/2a1CxG81klIqXu/KILiq1s/C61JabqcLLsOEy2iWYePQhbl0HM1YOmzkqU2Y7RybS+e8NavTSuOFZbFsaqWlH9n5gxTMDepxTd97mtdW2B6B24Uz2hNC6/g== 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=CRXEC4ukkJm2hqaRS/nYagVelFAy54MqjRMZxnq3LGg=; b=fDnWMV9ZBgVQVAF7I8n/A0slyrKkE/KJX8oIgp+Ov1Ch/cFUVhHjVdgy9xUowZGUWxgTEgrvtcTjROWgwYimFHzTLl2t0pwE7JWEBpQerjF6T4Q9k7PIpQ/cc5FP4/kuuMEJKi0AKknUAbSS/PLgwv1DOOP1FnggWx5yHRVu++tgwLiPfONbLXh4sLEZhQr7sku8wuoTUEVGR++HQn3PW7oVp7f4fed1G/wShoRUCXFAGMdfSoeYkYElbjASpQ2K6AONh6h7DlZ6N+43iDK/EjPcpMfgW99IGM3g2k4lY2AdunjEWJjy+fSuU3WEtpPd5hfl+6GExuM+g7mppmff9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=monjalon.net 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=CRXEC4ukkJm2hqaRS/nYagVelFAy54MqjRMZxnq3LGg=; b=o/+ZJV70yu0PlZA124W/y/J+y6zPJvSVPgRUZeKupm/2h0R7siyRH9ftA7RpSbgeLklqjzqYU/f5QN2aR55BjRCCDvF0LEBY8+y78T8Ii8gtkus0ahI3wHpi7j6FB+5KApXZaYh5iiDbFRNsATgnt93VSjYkCJ/Gi8SXrH+I4Ren2iYdAockCUmlcE33owpjKJ/9pzGQgGFgyvnCOJtdsrZSqW3yAC+o9EDWRa1GqTIwqDJS0zD28y2w5cmDvwgO+iir3qtoBEyf3dkoPUifLtHZemLYB5IjC9YVWa8HHJELSNXrPGSdiPmJ5UNZ5tVrrqxwom0Y22oGBQJFIGOzJQ== Received: from SA0PR11CA0020.namprd11.prod.outlook.com (2603:10b6:806:d3::25) by CH2PR12MB4280.namprd12.prod.outlook.com (2603:10b6:610:ac::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6678.20; Fri, 11 Aug 2023 14:07:31 +0000 Received: from SA2PEPF000015CD.namprd03.prod.outlook.com (2603:10b6:806:d3:cafe::2b) by SA0PR11CA0020.outlook.office365.com (2603:10b6:806:d3::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.31 via Frontend Transport; Fri, 11 Aug 2023 14:07:31 +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 SA2PEPF000015CD.mail.protection.outlook.com (10.167.241.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.20 via Frontend Transport; Fri, 11 Aug 2023 14:07:31 +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.5; Fri, 11 Aug 2023 07:07:17 -0700 Received: from nvidia.com (10.126.230.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.37; Fri, 11 Aug 2023 07:07:15 -0700 From: Bing Zhao To: , , , CC: Subject: [RFC PATCH] ethdev: introduce NAT64 action Date: Fri, 11 Aug 2023 17:07:01 +0300 Message-ID: <20230811140701.372151-1-bingz@nvidia.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [10.126.230.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: SA2PEPF000015CD:EE_|CH2PR12MB4280:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b04a333-3372-4dd1-1e31-08db9a744db5 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lt9FjsXDqyv+eM6JbRBtS544wP9MU20z1jxf3p7yQWKELvv0+Wbcrvktc+95dFTWqe2+sAvjGLaYLKB9JK0/0Nr03rGPc4oDYR65YgxFFZ+QjO8HgNUeft8M8T352Pr/NWgeFJiqvRAU19dDm45UBzcWvWoYLUiaOWBeXEFZTD6QpkoOXfSZTFkwaRTL7IiYG+SizPBnssLAfKpMjBcksyhAgYnDnfONWbHXIlAgLumR1uHNJhw+e95iLbj2O9Sq2Tp/X4Bb1jbJn1FZFLpg5lplGWNYYo3hquGi+iCVOd00WZuaCD5Wk/9FPoIxcZh4VZo9Z4NRIu3Yqldv0mH1QoO1ZW3W5Zjsv1YPwY/6G3z5MSqUIsB2oFx6ukn5XMzxE83mxQ3GJhyIIsJrni5YAuryMhg9H8yAVmKABANXpLXl0l9MxFDDeF2x3XVI3fiYIED+u72dPgSkwRRem6DVW7yfGVKg22rS3LyeshrO/oW5QC+IL1dGzWbdCN9N8n0qpeOgvPTYZXPo3IOyxXUZD05GhXzWh93fsfe0ekCMHKflyPbGHSHbnXIO2NOkqrAENkhuT6+LNMlVOw2UyFlBvgbBfhC4qnehucXiMq/Ob6iswN8dogyNsHALa8MclyWqyzn/9LMwVqFgGZ9+32ZnnkTXdl6/snB2CrReBi6mCvQjSEl3pEKsoWoMX7pOfgkfrO9+IiEUnlZupkMptdnuEYo4cN/6FD4AisNMHAYrn7jP9g7Un2uYg0adDhlU9c/ZytQEaFQi53o3knFuJaHHO9LQCXr5l8NLea7XRAWgv/w= 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:(13230028)(4636009)(346002)(39860400002)(136003)(376002)(396003)(1800799006)(186006)(451199021)(82310400008)(36840700001)(40470700004)(46966006)(966005)(40460700003)(36756003)(55016003)(86362001)(40480700001)(356005)(82740400003)(7636003)(36860700001)(83380400001)(26005)(1076003)(47076005)(16526019)(2616005)(6286002)(336012)(478600001)(110136005)(426003)(6666004)(7696005)(70206006)(4326008)(316002)(41300700001)(8936002)(8676002)(2906002)(5660300002)(70586007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Aug 2023 14:07:31.1937 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4b04a333-3372-4dd1-1e31-08db9a744db5 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: SA2PEPF000015CD.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4280 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 In order to support the communication between IPv4 and IPv6 nodes in the network, different technologies are used, like dual-stacks, tunneling and NAT64. In some IPv4-only clients, it is hard to deploy new software and hardware to support IPv6. NAT64 is a choice and it will also reduce the unnecessary overhead of the traffic in the network. The NAT64 gateways take the responsibility of the packet headers translation between the IPv6 clouds and IPv4-only clouds. This action should support the offloading of the IP headers' translation. The following fields should be reset correctly in the translation. - Version - Traffic Class / TOS - Flow Label (0 in v4) - Payload Length / Total length - Next Header - Hop Limit / TTL Since there are different mapping and translating modes of the addresses, it will depend on the capabilities of each vendor. The ICMP* and transport layers protocol is out of the scope of NAT64 rte_flow action. Reference links: - https://datatracker.ietf.org/doc/html/rfc6146 - https://datatracker.ietf.org/doc/html/rfc6052 - https://datatracker.ietf.org/doc/html/rfc6145 Signed-off-by: Bing Zhao Acked-by: Ori Kam --- lib/ethdev/rte_flow.c | 1 + lib/ethdev/rte_flow.h | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index 271d854f78..b60a4f6654 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -265,6 +265,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { MK_FLOW_ACTION(IPV6_EXT_REMOVE, sizeof(struct rte_flow_action_ipv6_ext_remove)), MK_FLOW_ACTION(INDIRECT_LIST, sizeof(struct rte_flow_action_indirect_list)), + MK_FLOW_ACTION(NAT64, sizeof(struct rte_flow_action_nat64)), }; int diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 86ed98c562..2002999a35 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -2989,6 +2989,13 @@ enum rte_flow_action_type { * @see struct rte_flow_action_indirect_list */ RTE_FLOW_ACTION_TYPE_INDIRECT_LIST, + + /** + * Support the NAT64 translation. + * + * @see struct rte_flow_action_nat64 + */ + RTE_FLOW_ACTION_TYPE_NAT64, }; /** @@ -4092,6 +4099,26 @@ rte_flow_dynf_metadata_set(struct rte_mbuf *m, uint32_t v) *RTE_FLOW_DYNF_METADATA(m) = v; } +/** + * NAT64 translation type for IP headers. + */ +enum rte_flow_nat64_type { + RTE_FLOW_NAT64_6TO4 = 0, /**< IPv6 to IPv4 headers translation. */ + RTE_FLOW_NAT64_4TO6 = 1, /**< IPv4 to IPv6 headers translation. */ +}; + +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * RTE_FLOW_ACTION_TYPE_NAT64 + * + * Specify the NAT64 translation type. + */ +struct rte_flow_action_nat64 { + enum rte_flow_nat64_type type; +}; + /** * Definition of a single action. * From patchwork Fri Sep 8 03:49:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suanming Mou X-Patchwork-Id: 131249 X-Patchwork-Delegate: ferruh.yigit@amd.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 B00654253D; Fri, 8 Sep 2023 05:50:11 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 903C340285; Fri, 8 Sep 2023 05:50:11 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2066.outbound.protection.outlook.com [40.107.244.66]) by mails.dpdk.org (Postfix) with ESMTP id 3FF6840042 for ; Fri, 8 Sep 2023 05:50:10 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Van3qf9j/iFwJNCWweGY+BBmL6AkWJLTu1SR2L5HWn/zFNucAfaCUi8JsTmlum5sbo1+a4qVYCJtDIv1QAAlSFZI9NolNqcPDIUhhblWgiCQlrVKUp11TSTa99M3nK++bg0yKNjWldTEqXfKW2kXR/bR/6yjdd/NbKkh+PYb1HFjINSV163u2W//LAobipxa2+qPCIDa9VK7JEzojw30Ar6b/NwkjSZtMTf1Pnh3K7Yrpd0Hpqmqk1hjthrWPIagkVM4xEPMXDzz4zqQ0mJKvaPh9m4kYTLpn8nmlNOErGP5tfysoH54IWtIq0QfzvlN3zeVBdYn0t1LGQxztD5sAw== 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=IFJOhsddn7ZXrsvUX1Hdb9NAQ+RAuoK0Pvo/EqMtmVk=; b=ePw6QbfAYZU0RNvsatPqnFfH7zblZ5STxORKA5QoVIN87N7113BQdzPS7mp+XJMGEzdIPCUCj1YN5FAzILdCbW1OmUS6QCXzuw7Dq2+n/GbSfhwVYss6vS4wOx7M8H1xYm7GIFt11CUUk0vqdNRLkkne/vadpl48eXqHT4PcJcl+wxdxjKyE2nY8Y8X/xiV2FJmZlcwhzK2sjB9QMd9iCV2qOddwCchLntUkBSbgTeIhI/9YlMQHL5NiAvSnhouJrTC8lwyLLjAXKDkBfs9J/W1tXw4As/gDXTBggwJe34Bx2rlSEBHyS0e79xl9Pl8uU+qSOzqehG6xpiMAULGYCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=intel.com 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=IFJOhsddn7ZXrsvUX1Hdb9NAQ+RAuoK0Pvo/EqMtmVk=; b=e29+cyCoKoCqES50WtglJX5AjctRWM0qZHPlUqsPcGt0h+G2wnHj4BvSM54r/dhQSOuaoqYfrgBlBtD1SgVQPknJArdXSv093zNgU+5itF7IvFpjU/apKRWY78+KBTy+a3Urbmu9M1LrcmV463PyzrwXKh8+fXupLHkRK37YQVHVszKLmdMxaavpiRfm6qGh6Rl/de83bNdWi5icNEyCV/nvEuPAvMhF2+ubfghnlqHz7e0mxVLLs+pQUAO/FNAG/dDT+UcYt9JcSvhx9DJSyUjsuoPnNzbqk5Ix8fZlnqhz7Yt/iYBrfxJQWwupL8lYT0ENJD3A9Yc517Ui3FiZVQ== Received: from CY5PR17CA0010.namprd17.prod.outlook.com (2603:10b6:930:17::24) by IA0PR12MB8715.namprd12.prod.outlook.com (2603:10b6:208:487::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.33; Fri, 8 Sep 2023 03:50:08 +0000 Received: from CY4PEPF0000E9D0.namprd03.prod.outlook.com (2603:10b6:930:17:cafe::e6) by CY5PR17CA0010.outlook.office365.com (2603:10b6:930:17::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.30 via Frontend Transport; Fri, 8 Sep 2023 03:50:07 +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 CY4PEPF0000E9D0.mail.protection.outlook.com (10.167.241.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.25 via Frontend Transport; Fri, 8 Sep 2023 03:50:07 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) 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.5; Thu, 7 Sep 2023 20:50:01 -0700 Received: from nvidia.com (10.126.230.35) 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.37; Thu, 7 Sep 2023 20:49:57 -0700 From: Suanming Mou To: Ori Kam , Aman Singh , "Yuying Zhang" , Thomas Monjalon , "Ferruh Yigit" , Andrew Rybchenko CC: Subject: [PATCH v2] ethdev: add TCP/IP modify field IDs Date: Fri, 8 Sep 2023 11:49:41 +0800 Message-ID: <20230908034941.66782-1-suanmingm@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230808083741.8193-1-suanmingm@nvidia.com> References: <20230808083741.8193-1-suanmingm@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D0:EE_|IA0PR12MB8715:EE_ X-MS-Office365-Filtering-Correlation-Id: fec96862-9884-477e-f1f4-08dbb01eb196 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vFVhITNw1BqTc7Lv74XfjXCe5/G33COeGqGfOTIjCrRzuVDy0XNTiHWWgdrapTBmoe81DAvv7hqTAbycYWnxYjAbwiefj+rajlD2F/5eWPs0HZn+21kamYb1DFv4eVVtQWKHnSwGFEjcZ/WURuPRTrYCOHfebUP/uAln7xPIX+lLlvV7FVqHd6WNlS5RWUnSr8nV/NLKPN1HXnfL++qRaIFQJ/76o+Ngd7IT7RAQatGnX9v+zPVjrrYtZW5f2Q0bcY4ioxSzZtBNdQMk6XJ+APbJpF/plRfaGTOndEnNixZu4L0B3DYfdmueYz+8eYoD/pbNCe/5WGdbMmQ5e75H+uUrLLugg932W6t9R/TWMK5m/vrAIG7aQY+REoXjb5Ty83JsGEgaOVmaKNBxp+deWD9kM47fBxpZmQ57tLqIbNReOYwouladKRgBYN/4Sg7/z756B2KvpdASV6Y8HQSyQZwV/ADQfKHZJXnRbhNZEykkSN8XEk8hBbVjmHHjwuqxLHT4G1N90IsSAn8dMqsb9G4HgZJzMeEbxB6zOMDVTBWRAhFEF7PFPjxEpSqySMofBkyweQKJXqcxkfFXw3cRQTZjIaPn5sTSLsmn4kknnNwOey2VqtZk7t5S/wfccGBddHC6srep734sjN14LBej5slRfvEDqTBAjTzygpOhOYof1HU6NS1lWSl07LWblh3kB9UvTsI1IJaKK6PxfqPFiPs5o/qpKAZ4O4kwYFmnFk+RNBc/KeyqVNPmNnAuzPnh 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:(13230031)(4636009)(136003)(39860400002)(396003)(346002)(376002)(82310400011)(451199024)(1800799009)(186009)(40470700004)(46966006)(36840700001)(8936002)(8676002)(5660300002)(316002)(2906002)(110136005)(36756003)(70206006)(70586007)(4326008)(478600001)(41300700001)(40460700003)(36860700001)(40480700001)(7696005)(426003)(16526019)(1076003)(336012)(26005)(6286002)(47076005)(55016003)(7636003)(82740400003)(6666004)(356005)(2616005)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2023 03:50:07.6930 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fec96862-9884-477e-f1f4-08dbb01eb196 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: CY4PEPF0000E9D0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8715 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 Currently, get TCP/IP header or data length information from traffic is missing in the modify field IDs. This commit adds the missing TCP data_offset, IPv4 IHL/total_len, IPv6 payload_len to modify filed IDs. This allows users be able to manager more TCP/IP fields. Signed-off-by: Suanming Mou --- v2: fix typo tcp_date_off -> tcp_data_off --- app/test-pmd/cmdline_flow.c | 1 + lib/ethdev/rte_flow.h | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 94827bcc4a..310068ce88 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -937,6 +937,7 @@ static const char *const modify_field_ids[] = { "flex_item", "hash_result", "geneve_opt_type", "geneve_opt_class", "geneve_opt_data", "mpls", + "tcp_data_off", "ipv4_ihl", "ipv4_total_len", "ipv6_payload_len", NULL }; diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 2ebb76dbc0..43ba51da6e 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -3875,6 +3875,10 @@ enum rte_flow_field_id { RTE_FLOW_FIELD_GENEVE_OPT_CLASS,/**< GENEVE option class. */ RTE_FLOW_FIELD_GENEVE_OPT_DATA, /**< GENEVE option data. */ RTE_FLOW_FIELD_MPLS, /**< MPLS header. */ + RTE_FLOW_FIELD_TCP_DATA_OFFSET, /**< TCP data offset. */ + RTE_FLOW_FIELD_IPV4_IHL, /**< IPv4 IHL. */ + RTE_FLOW_FIELD_IPV4_TOTAL_LEN, /**< IPv4 total length. */ + RTE_FLOW_FIELD_IPV6_PAYLOAD_LEN /**< IPv6 payload length. */ }; /** From patchwork Mon Sep 11 07:41:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 131329 X-Patchwork-Delegate: ferruh.yigit@amd.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 28AB94256B; Mon, 11 Sep 2023 09:42:19 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2E2A8402E1; Mon, 11 Sep 2023 09:42:13 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41]) by mails.dpdk.org (Postfix) with ESMTP id 359BC402DA for ; Mon, 11 Sep 2023 09:42:11 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c38ctoJfnYwFiSqqdDZQHGRIS9fvMsBhQZlfG7GL5IpgI361ap5M6ZBfzyHg8x9RyUEhOFBAg9bpJk0l/aJYTRl9KAd4WcLsvQYgX1tp6+vHZKzpqo4Xv474pUbrygAAOqZu44mNdU2a/GlG6/OvB2/FGdPx0XoBIijVCmBls21k8fWDJy2/xNxzmshSbW9MHvcOTcdimGtEhrqkkmS++2cLfq38+GJdEnhot3vkIFV1cx5+C1yksVhF4gzf6mLvTC2OiMgbcQRNtGjJcUPI2EX+VH2JUisY9GdAnsvP/VQkKvrqjGN6jInNfl3Q0DGC3VRbs0yVxME1mlon3gIADQ== 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=vDh4mlYRyt7qUUv11iPl8ibd767Xz3Plv2t1+MY5HL4=; b=PXtsF06yWOqWnlu3zpBPd4GFXD0XQQ2R8rQvbgmMj7qNPlTGliutIDgZ4h5RtWZQAkFrZvTr1hu5yojOjWW7CdiPlTrUsX5T+YZK02GCm6R16b7ZPe4/t9nWsVWNcTwSJIWY8POIDfF0ZJ9bP0ux7zFjenuebvzTVtW4qwyYisQQPBnkOCOhJokTygREKP7Yq3UCuhKPONKFhhub0IIgix/xfR7b/Yj80W1qOSDplawnpdz8QH6cHN9kiNvALpccjUM17HFO5uLUYdb5wKeAo0iivHLjwk6LJU7eprYmCakS+YF5hY5uiNxGV8NYiP9g1JME5dQSTpHmui59f6ksZg== 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=vDh4mlYRyt7qUUv11iPl8ibd767Xz3Plv2t1+MY5HL4=; b=INDsnz3rGNPX9/PpXph8NL/fgUE180GnwuR4lBvVHaK339PLtlVuvVJOYTEJnfPrZtaID5KwabA7/WhklB90TINdmXaqsuRhfNmNkeT+vnHJQOf/7rtC8THvPCChZe4f5lBduPMSDZNzBb/Uu+XzmXpJCPqezkMCHwBhmc+w9gwRqMS1i5qWKRSaegsWqQfw+c4ihPDKv/aejl8AkM28DSX2L8elic0gC7DvH31VqCizYgQDVWhoesJZxFMMIZCMcmjsBnQ5oFKg8DeWzCC4Tm5KjbfmBohgTflK7AX6YaW2WICysSiLsy8UZusrgHZINaoHYI4/S50vSASLVQ5Blw== Received: from SA9PR13CA0049.namprd13.prod.outlook.com (2603:10b6:806:22::24) by LV3PR12MB9165.namprd12.prod.outlook.com (2603:10b6:408:19f::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.31; Mon, 11 Sep 2023 07:42:09 +0000 Received: from SN1PEPF000252A3.namprd05.prod.outlook.com (2603:10b6:806:22:cafe::9f) by SA9PR13CA0049.outlook.office365.com (2603:10b6:806:22::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.14 via Frontend Transport; Mon, 11 Sep 2023 07:42:09 +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 SN1PEPF000252A3.mail.protection.outlook.com (10.167.242.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.16 via Frontend Transport; Mon, 11 Sep 2023 07:42:08 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) 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.5; Mon, 11 Sep 2023 00:41:58 -0700 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Mon, 11 Sep 2023 00:41:58 -0700 Received: from nvidia.com (10.127.8.13) by mail.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.37 via Frontend Transport; Mon, 11 Sep 2023 00:41:56 -0700 From: Michael Baum To: CC: Ori Kam , Aman Singh , "Yuying Zhang" , Ferruh Yigit , "Thomas Monjalon" Subject: [PATCH v2 1/2] ethdev: add random item support Date: Mon, 11 Sep 2023 10:41:48 +0300 Message-ID: <20230911074149.697944-2-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230911074149.697944-1-michaelba@nvidia.com> References: <20230822090505.3242455-1-michaelba@nvidia.com> <20230911074149.697944-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000252A3:EE_|LV3PR12MB9165:EE_ X-MS-Office365-Filtering-Correlation-Id: faacfccf-f8fb-41a6-09d7-08dbb29a9a74 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4dXE8HmQK5Lc97r1sKdOqsm0RjA4ZdxDFwYLXt3bCgckmV08OO/EGjQn4pehxr5S6ixW/zBIrHtekj/E1rg7c8do1hn50YOyQBIYzGQ6d2YyxTIQbrXXw6n70TMVkAnRu1+h/WfZcGdGlcmRybb4ruoC9lXvvgKpeCSWXE6BdE+5uJUqD+EAaypcuWVlqrvuhm/T8z7SwhTWMbFWLWMhzZZ+sMRQ4VBRBPd00zGkSJFJwvs9qBWXWdDJG7fzY0Q0UNCBc6iBm+JsaPLbRq0IQm5NMxl6IOf8RhjJYmt66n7yUYghiiaB5ptpRX7whVmOFE7hl/I/7dVU37pJ6hQ423vuBdnO7rOO++1mhDkalXkGrc+vdcZbyPWhbtnQj6XyFL0wgEfGqyxc9yG0BfQt6gnH7EWi7qeFpi29WYeH/1HQoEJYpuyQoOBfeNeMfb34evCVZxySQYA4XksPMNQuF+2+ZCnfDeKeO2VLl69MHieVMYU8TyMCa4Och29wKOAid0jOOCtp3rz3B5p+iZbuzLtaBndimO3eHzl5ieHQgTwHwy2MzfHX3QIrKFcjVaWHjMtpVFbHGz3Fau4Z2jfWYj3G5qXr+wosQrlMBmRGz5xNTRSTQjNCR+DCqP0XHjvOib8b9E+2bihTCoprYjZrZiamlQC5MpmLmfGZ+Ui/HNKiHhvp5MNhcDJScC6jx62/8TWAfTFNz9PMB6/SJMSbvVTMwfvzCQrMT2/BoTo+7BPp5jJtAKcqUPyZ5b4VKmam 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:(13230031)(4636009)(376002)(346002)(396003)(39860400002)(136003)(451199024)(82310400011)(186009)(1800799009)(46966006)(40470700004)(36840700001)(41300700001)(7636003)(6666004)(7696005)(40460700003)(36756003)(40480700001)(86362001)(82740400003)(55016003)(356005)(47076005)(36860700001)(1076003)(2616005)(6286002)(336012)(2906002)(426003)(83380400001)(478600001)(70586007)(316002)(70206006)(8676002)(8936002)(4326008)(5660300002)(26005)(6916009)(54906003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2023 07:42:08.7810 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: faacfccf-f8fb-41a6-09d7-08dbb29a9a74 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: SN1PEPF000252A3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR12MB9165 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 Add support for a new item type "RTE_FLOW_ITEM_TYPE_RANDOM". This item enables to match on some random value as a part of flow rule. Signed-off-by: Michael Baum --- doc/guides/nics/features/default.ini | 1 + doc/guides/prog_guide/rte_flow.rst | 11 +++++++++ doc/guides/rel_notes/release_23_11.rst | 4 ++++ lib/ethdev/rte_flow.c | 1 + lib/ethdev/rte_flow.h | 33 ++++++++++++++++++++++++++ 5 files changed, 50 insertions(+) diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini index 2011e97127..0a790dafe8 100644 --- a/doc/guides/nics/features/default.ini +++ b/doc/guides/nics/features/default.ini @@ -139,6 +139,7 @@ pppoes = pppoe_proto_id = quota = raw = +random = represented_port = sctp = tag = diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 5bc998a433..5ad699dff7 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1566,6 +1566,17 @@ Matches an InfiniBand base transport header in RoCE packet. - ``hdr``: InfiniBand base transport header definition (``rte_ib.h``). +Item: ``RANDOM`` +^^^^^^^^^^^^^^^^ + +Matches a random value. + +This value is not based on the packet data/headers. +Application shouldn't assume that this value is kept during the life time of +the packet. + +- ``value``: Random value. + Actions ~~~~~~~ diff --git a/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst index 333e1d95a2..bcd71138cb 100644 --- a/doc/guides/rel_notes/release_23_11.rst +++ b/doc/guides/rel_notes/release_23_11.rst @@ -78,6 +78,10 @@ New Features * build: Optional libraries can now be selected with the new ``enable_libs`` build option similarly to the existing ``enable_drivers`` build option. +* **Added flow matching of random value.** + + Added ``RTE_FLOW_ITEM_RANDOM`` to match random value. + Removed Items ------------- diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index 271d854f78..51db3e5aec 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -136,6 +136,7 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = { sizeof(struct rte_flow_item_icmp6_nd_opt_tla_eth)), MK_FLOW_ITEM(MARK, sizeof(struct rte_flow_item_mark)), MK_FLOW_ITEM(META, sizeof(struct rte_flow_item_meta)), + MK_FLOW_ITEM(RANDOM, sizeof(struct rte_flow_item_random)), MK_FLOW_ITEM(TAG, sizeof(struct rte_flow_item_tag)), MK_FLOW_ITEM(GRE_KEY, sizeof(rte_be32_t)), MK_FLOW_ITEM(GRE_OPTION, sizeof(struct rte_flow_item_gre_opt)), diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 2ebb76dbc0..b5228b293c 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -688,6 +688,19 @@ enum rte_flow_item_type { * @see struct rte_flow_item_ib_bth. */ RTE_FLOW_ITEM_TYPE_IB_BTH, + + /** + * [META] + * + * Matches a random value. + * + * This value is not based on the packet data/headers. + * Application shouldn't assume that this value is kept during the life + * time of the packet. + * + * @see struct rte_flow_item_random. + */ + RTE_FLOW_ITEM_TYPE_RANDOM, }; /** @@ -2031,6 +2044,25 @@ static const struct rte_flow_item_ib_bth rte_flow_item_ib_bth_mask = { }; #endif +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * RTE_FLOW_ITEM_TYPE_RANDOM + * + * Matches a random value. + */ +struct rte_flow_item_random { + uint32_t value; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_RANDOM. */ +#ifndef __cplusplus +static const struct rte_flow_item_random rte_flow_item_random_mask = { + .value = UINT32_MAX, +}; +#endif + /** * Matching pattern item definition. * @@ -3875,6 +3907,7 @@ enum rte_flow_field_id { RTE_FLOW_FIELD_GENEVE_OPT_CLASS,/**< GENEVE option class. */ RTE_FLOW_FIELD_GENEVE_OPT_DATA, /**< GENEVE option data. */ RTE_FLOW_FIELD_MPLS, /**< MPLS header. */ + RTE_FLOW_FIELD_RANDOM /**< Random value. */ }; /** From patchwork Mon Sep 11 07:41:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 131330 X-Patchwork-Delegate: ferruh.yigit@amd.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 31C6E4256B; Mon, 11 Sep 2023 09:42:29 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C5F8D402F1; Mon, 11 Sep 2023 09:42:14 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2040.outbound.protection.outlook.com [40.107.236.40]) by mails.dpdk.org (Postfix) with ESMTP id C5E79402E1 for ; Mon, 11 Sep 2023 09:42:12 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N9K1DVU/PBjaqGrYOWad4a4FknFnW71PAwdX5HOGpjBUXAYb3wgV1tsSIcnJTDUv38ZFoqqVVrwLEWDaOJPrtFPIZqMib7wuNb7Z8NWkEp12CP2DPWLXTLkkzbi4ZEl1QcV5AOMO1+GU3dBp0xOHzHmpy/X88sE68Cv0WJwimtY6KJ9xZtrjgSMbDNMN9FH5w46FBLluiingWAFjeR+wDs/bGokDkvzc+wT0LJj5kOTXanVv/4EyvBOeQkxFoLD4L1CVyywI/RQiAyxa42gqDTZo8r7E1utxnVMwkNAzXvFFNv1BBVKwWEf2EUwrfp/vDhkI4IF2XwngO1Weo5ortg== 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=4Qh7CrLu6Uh/HjelxuIhI7/jne8K3mP6M2BrTG2z21Q=; b=GnYlwj1Prv/2mhreAl9xFjYrtaxjwWAKh/NQW3f+5PEKuD9+P6KYQS/xW1mt1zsJEM0oDMkbiSVx6IiZedEzxhrUdbbx7FpApQhLXbpaPYbmKXTgcOTxm/8r1aVD7QobPRtT+ybzmINyltg/8g0X0xRDYzN38MMlsW+9NxsQy/xDgfJqE5OKyiudssbQbO5aVIaOuy6R9Y/eiiy63Y8OHCbL1FP1C/l8uzKN3zUn7THZKNzg4xoxJeATTCdUjJVsT/6LsTHAM3KwikgvFfGlgRRos3uoEdfwqai9odviYwNtF3hwqwFrXIautA+2g89fXYCDytdHt0dcw0UStyXcGw== 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=4Qh7CrLu6Uh/HjelxuIhI7/jne8K3mP6M2BrTG2z21Q=; b=FWeV0EoYT8bY5mXsMJ0OgD9ooCNRF1xiOeTOi8ugQh0w/EoLte+qv4OEUoqeFACQEa2CB64LHOJc32U9lurnwPqBgrViqvHoYMwO2Ml59k0Z9d/x0kFU/xFhQh43/ldaKZ0qrJ/d8PoAnGzQwqNWkCh0PItaQf7LoRuDmIjwU1iEm0QZUBS131FCEvXZ6YXihV4l0I5WwRbyETDpWx7xgdGEYljez1nvUTBrjxoXU+xO43vFJS/k7vFNfQGueAvoitFW5m2jXDf2f9Z+l37y/EPJWlc/K2R8boFOUxKs+VGA1M0Eg7h3MyU9dy4kx7cqbUk991JPcgbdKBMBSs9oXA== Received: from SA9PR13CA0056.namprd13.prod.outlook.com (2603:10b6:806:22::31) by LV8PR12MB9156.namprd12.prod.outlook.com (2603:10b6:408:181::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.31; Mon, 11 Sep 2023 07:42:10 +0000 Received: from SN1PEPF000252A3.namprd05.prod.outlook.com (2603:10b6:806:22:cafe::e1) by SA9PR13CA0056.outlook.office365.com (2603:10b6:806:22::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.16 via Frontend Transport; Mon, 11 Sep 2023 07:42:10 +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 SN1PEPF000252A3.mail.protection.outlook.com (10.167.242.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.16 via Frontend Transport; Mon, 11 Sep 2023 07:42:10 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.5; Mon, 11 Sep 2023 00:42:01 -0700 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Mon, 11 Sep 2023 00:42:00 -0700 Received: from nvidia.com (10.127.8.13) by mail.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.37 via Frontend Transport; Mon, 11 Sep 2023 00:41:58 -0700 From: Michael Baum To: CC: Ori Kam , Aman Singh , "Yuying Zhang" , Ferruh Yigit , "Thomas Monjalon" Subject: [PATCH v2 2/2] app/testpmd: add random item support Date: Mon, 11 Sep 2023 10:41:49 +0300 Message-ID: <20230911074149.697944-3-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230911074149.697944-1-michaelba@nvidia.com> References: <20230822090505.3242455-1-michaelba@nvidia.com> <20230911074149.697944-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000252A3:EE_|LV8PR12MB9156:EE_ X-MS-Office365-Filtering-Correlation-Id: 0914780f-0642-4d52-73c2-08dbb29a9b81 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UiZl55sGHrfo9ieZyGtgRtJWKi2j6Uf+4PzMXU7pz7OQqQ4CIPSPgQuJXQ27N6fbGHCZ7mRv2tKL6/tSXFyfO/M/rmkC8jvGW/SL6P6nSlmus0CV6C/zFKVCmFeMm/1y5SOKZVG7aKM9cSa45yN4rM89p0J5+wINYUUr5xDcYsKqmLIaJAxYkUME8SuBCqrH+VGekg+zdDuQxeNg2X57u8avro5CYqlsiZ7aHSRYYlEOirvmbM8coq9S3U4t5mF21450BgEZi4Cda8ngFfWV30o9HEVgHaCK23MBrTxXrDMbh1Cnr8j7+Mq6KlvlzK8MaNWGE9XU+z/18/nqyVaTKmMiZ7N0eoDAl5u2Zk4l8Exl3HdadsVavIT7eqWJJ/PGMNqK0qfU2wLX2IEGLK+xYPcb9UAso5g3Lcl+AlWHghUpkkNVg0XeqPJUMhcNvuWWdV5dReHuO0xyuHHeaB+SyngoTEuyWIYLyS+Jk6/XFgdL8XXGwtn2LgfvUu/3ujpeQT1c2nJmEAlEJrzMMUZ8Gq5yUeiYlzPe08bxcg0c0v5oIuub297h/lBVM26wAwCZjEz4gwlX8MN5Rwhl5Yuu83f28WzYiz0T55zjhp1GrcPBaiMAMV4RveTteSDFp0Zvhmv6b3tTiyhrbMdpotFYU4Ewff8htMtelZP0hjUG4ETu1VT96n+erMRJJYVQeHE2YNdnPmHjL11sPDxKHgpr09p+DHg6ugmQp5DqPOBMO/qDrypo9WILQ9P/+1JlfXte 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:(13230031)(4636009)(376002)(396003)(346002)(136003)(39860400002)(1800799009)(186009)(82310400011)(451199024)(40470700004)(46966006)(36840700001)(40460700003)(7696005)(41300700001)(70586007)(316002)(36756003)(7636003)(82740400003)(86362001)(2906002)(356005)(478600001)(6916009)(54906003)(70206006)(6666004)(55016003)(83380400001)(26005)(8676002)(8936002)(6286002)(4326008)(1076003)(40480700001)(47076005)(336012)(36860700001)(426003)(2616005)(5660300002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2023 07:42:10.5310 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0914780f-0642-4d52-73c2-08dbb29a9b81 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: SN1PEPF000252A3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9156 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 Add support for random item, usage example: pattern random spec value 0x1 mask value 0x3 / eth / end Flow rule with above pattern matching 25% of the traffic, it hits only when random value suffix is "01" and miss the others ("00", "10", "11"). Signed-off-by: Michael Baum Acked-by: Ori Kam --- app/test-pmd/cmdline_flow.c | 30 ++++++++++++++++++++- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 4 +++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 94827bcc4a..55fb07ec91 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -417,6 +417,8 @@ enum index { ITEM_ICMP6_ND_OPT_TLA_ETH_TLA, ITEM_META, ITEM_META_DATA, + ITEM_RANDOM, + ITEM_RANDOM_VALUE, ITEM_GRE_KEY, ITEM_GRE_KEY_VALUE, ITEM_GRE_OPTION, @@ -936,7 +938,8 @@ static const char *const modify_field_ids[] = { "ipv6_proto", "flex_item", "hash_result", - "geneve_opt_type", "geneve_opt_class", "geneve_opt_data", "mpls", + "geneve_opt_type", "geneve_opt_class", "geneve_opt_data", + "mpls", "random", NULL }; @@ -1535,6 +1538,7 @@ static const enum index next_item[] = { ITEM_ICMP6_ND_OPT_SLA_ETH, ITEM_ICMP6_ND_OPT_TLA_ETH, ITEM_META, + ITEM_RANDOM, ITEM_GRE_KEY, ITEM_GRE_OPTION, ITEM_GTP_PSC, @@ -1842,6 +1846,12 @@ static const enum index item_meta[] = { ZERO, }; +static const enum index item_random[] = { + ITEM_RANDOM_VALUE, + ITEM_NEXT, + ZERO, +}; + static const enum index item_gtp_psc[] = { ITEM_GTP_PSC_QFI, ITEM_GTP_PSC_PDU_T, @@ -5063,6 +5073,21 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY_MASK(struct rte_flow_item_meta, data, "\xff\xff\xff\xff")), }, + [ITEM_RANDOM] = { + .name = "random", + .help = "match random value", + .priv = PRIV_ITEM(RANDOM, sizeof(struct rte_flow_item_random)), + .next = NEXT(item_random), + .call = parse_vc, + }, + [ITEM_RANDOM_VALUE] = { + .name = "value", + .help = "random value", + .next = NEXT(item_random, NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY_MASK(struct rte_flow_item_random, + value, "\xff\xff")), + }, [ITEM_GRE_KEY] = { .name = "gre_key", .help = "match GRE key", @@ -12634,6 +12659,9 @@ flow_item_default_mask(const struct rte_flow_item *item) case RTE_FLOW_ITEM_TYPE_META: mask = &rte_flow_item_meta_mask; break; + case RTE_FLOW_ITEM_TYPE_RANDOM: + mask = &rte_flow_item_random_mask; + break; case RTE_FLOW_ITEM_TYPE_FUZZY: mask = &rte_flow_item_fuzzy_mask; break; diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index a182479ab2..0b27a6fd97 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3724,6 +3724,10 @@ This section lists supported pattern items and their attributes, if any. - ``data {unsigned}``: metadata value. +- ``random``: match application specific random value. + + - ``value {unsigned}``: random value. + - ``gtp_psc``: match GTP PDU extension header with type 0x85. - ``pdu_type {unsigned}``: PDU type. From patchwork Tue Sep 26 11:37:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ori Kam X-Patchwork-Id: 131963 X-Patchwork-Delegate: ferruh.yigit@amd.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 CF56A42642; Tue, 26 Sep 2023 13:39:05 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5CF49402CA; Tue, 26 Sep 2023 13:39:05 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2062.outbound.protection.outlook.com [40.107.223.62]) by mails.dpdk.org (Postfix) with ESMTP id 3E9FD402AA for ; Tue, 26 Sep 2023 13:39:04 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YZDpaHyedCGcSbq4xd4ce4fmvZuztNLnG0BIPXrhWuo/+VBqwNDlw11FDtMRM/92w4K5mz6PQChzZGO+c9/aiDBe7RVknIfSLZjxchtFQQHTygW2Al0jO76JgGAFL/SRBsZz+O1i1IEP/tO0iCP91GiBb+k/+2dzhjj327dD6/XQPwWGpLxZvCjwA8RoR7IQVmJNGiKmekAOLaXfR3FSNkm0IUV6nUCbogHZ8kVTPcVywFOfym1Yd7T4rWfzviAjhWfXTHn17vkFzJ7NqSph84NwcvLX45bOJ2S0GWx+2U7TCu6f8SlVo7HEOGq9Um3SoOTiJCWrOvcjWqvP5M93IA== 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=pyQgQApHZ+g7rE0Lq1OQgpwEo5mrXPaUZ5EhU918jpw=; b=BxPc4TZ5SnLWsXtBj6kqw3yyq2KtuDEUNJstoJMKOMpGHZ03JrtIu+py0sKUXTCANTf8/TQiZmpN9Gsb46eHCHXYNzK0qsrLiEMe23pWo4pST9bfGhDjAofGT8EIknHgmPsTwmeb+raL0nute5HgK/iCJMBgF5tDJ1UBIuQ6VorDX6xEm7LYdq3p5kDorhWgDufipq2Z2tXCmzv57mNoa1WzvffJ2lGXuUuGGcSXMW5au4fGhfSvXvC9WhprQTbRUr1nKlUXj5S5NWsOl5hqmRqgADbWhArq3U+wADYcuRbmsb2u1xMVqLw7OqGHzJ0YkdHW0ZeCf7Kn4yWAVlfXAQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=intel.com 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=pyQgQApHZ+g7rE0Lq1OQgpwEo5mrXPaUZ5EhU918jpw=; b=LwYTxxhTOrWmpEfQPn8q/9blABbdPc0lfuG4adtV6r7iyu33G1x1qZjbQThD192MNjSlGvJG9+9NCI/FdSA9qSOpS7qhTXHkl2quNL28J/0bMORkfFvZ3pufQ1wxwE+Kejg0jm2rNzKTavveeivwTDPSNDM3NyOcY4k+8GW8tJ0D2nugugsh2UjXDrcmnN+WeGancuQGNOSI53WPDeYWzeIHku2iW3nTY9hTAnjPcPrOpFbdo5s1YPWq0/kh0WrMtzoWY1bhSll5IIts6DXTmPt7jL5eXj8nfEw59pDByyeNlAeBj78A2ZIhC7dWu/v7yz8IICUXIlgvTdx0n8o/SQ== Received: from MN2PR03CA0023.namprd03.prod.outlook.com (2603:10b6:208:23a::28) by SA1PR12MB8946.namprd12.prod.outlook.com (2603:10b6:806:375::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Tue, 26 Sep 2023 11:39:01 +0000 Received: from BL02EPF0001A106.namprd05.prod.outlook.com (2603:10b6:208:23a:cafe::94) by MN2PR03CA0023.outlook.office365.com (2603:10b6:208:23a::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.35 via Frontend Transport; Tue, 26 Sep 2023 11:39:01 +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 BL02EPF0001A106.mail.protection.outlook.com (10.167.241.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.14 via Frontend Transport; Tue, 26 Sep 2023 11:39:01 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) 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.41; Tue, 26 Sep 2023 04:38:45 -0700 Received: from nvidia.com (10.126.231.35) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Tue, 26 Sep 2023 04:38:42 -0700 From: Ori Kam To: , Aman Singh , Yuying Zhang , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko CC: , , Subject: [PATCH] ethdev: add calculate hash function Date: Tue, 26 Sep 2023 14:37:52 +0300 Message-ID: <20230926113753.28765-1-orika@nvidia.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail202.nvidia.com (10.129.68.7) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A106:EE_|SA1PR12MB8946:EE_ X-MS-Office365-Filtering-Correlation-Id: 7027c355-19e6-4191-8c8f-08dbbe852de9 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VVVzsx6QHc31+5xa77CS2s+4jYOIZzl6xqQQLUm2KwGas2N7HogidUl2n+QipRfJKdlDdccOuctbPDdlYmnWIKxPBaLkbYU5BrhrBK+fchqPKcICRMmap6FaGSERR+aArYue84JqIaIspi/2iQgnJazDTC7tDpxtTlAxPrgY4uqgatyp/DI0W+mwQK0HvKWGELUFdeBshEhsaGQcECZ99BSv1/dclssXLfLTMjUyJsX38qxbqDbaYCWafYnooWsHdJzFUWObiJWLxYNSqYVqgwFMjmp5AlD5Ax5aj57QhtmCBsQlN9X+8si0asoSR5MnRciA+Ua4+ryEL1P1RXzZuDFiRG+jaP5PUl6QuYKA8Fa3YhoPmRdqZA5tKClrNwrztPNBe+cMGPyuhkL1lPPI2vtU6HCa4bvmAeGr97LqdJluZSs4O43UhNPboPIPavGH4mC5XeAAUGQgeduGeUqUfjG4LNFCs+yKjFbdOTKIZ3TiAQbIs9kyfn3sU8fvRMEJEAKhPXKPB10ktKiN27fXpTvs9DIgOLV/hanDhQ6VsmYEjPB1R8MnCdliFMXRGb39phVOhn1ATwIILo3VGwTb6wBfI1DWiWg4cggZX0SBTUR0xyd2lhAjtLyXul/L5b13FSCF+lcSC646vPr2xfCQCB56oVxBs9g/4USoHoaCVuExsKeSNEdbUR+tB0i+6lHTXmEUIpB8PUZtIFu+BmAKXry4v3Gq6vUO6FYzUjnn3Ld7wGJxPSbzs9qBYkVXn2B6xrqT1GT3D+hNY+e48GO46Q== 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:(13230031)(4636009)(39860400002)(136003)(346002)(396003)(376002)(230922051799003)(82310400011)(186009)(1800799009)(451199024)(36840700001)(46966006)(40470700004)(36756003)(86362001)(30864003)(40480700001)(55016003)(5660300002)(7696005)(2906002)(2616005)(70586007)(70206006)(110136005)(41300700001)(478600001)(54906003)(316002)(6666004)(966005)(47076005)(40460700003)(426003)(83380400001)(4326008)(356005)(36860700001)(7636003)(8676002)(8936002)(82740400003)(16526019)(107886003)(336012)(1076003)(6286002)(26005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2023 11:39:01.1234 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7027c355-19e6-4191-8c8f-08dbbe852de9 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: BL02EPF0001A106.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8946 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 rte_flow supports insert by index table[1]. Using the above table, the application can create rules that are based on hash. For example application can create the following logic in order to create load balancing: 1. Create insert by index table with 2 rules, that hashes based on dmac 2. Insert to index 0 a rule that sends the traffic to port A. 3. Insert to index 1 a rule that sends the traffic to port B. Let's also assume that before this table, there is a 5 tuple match table that jumps to the above table. So each packet that matches one of the 5 tuple rules is RSSed to port A or B, based on dmac hash. The issue arises when there is a miss on the 5 tuple table, which resulted due to the packet being the first packet of this flow, or fragmented packet or any other reason. In this case, the application must calculate what would be the hash calculated by the HW so it can send the packet to the correct port. This new API allows applications to calculate the hash value of a given packet for a given table. [1] - http://patches.dpdk.org/project/dpdk/patch/20230208030624.78465-2-akozyrev@nvidia.com/ Signed-off-by: Ori Kam Acked-by: Dariusz Sosnowski --- app/test-pmd/cmdline_flow.c | 86 +++++++++++++++++++++++++++++++++++- app/test-pmd/config.c | 54 ++++++++++++++++++++++ app/test-pmd/testpmd.h | 2 + lib/ethdev/rte_flow.c | 21 +++++++++ lib/ethdev/rte_flow.h | 32 ++++++++++++++ lib/ethdev/rte_flow_driver.h | 5 +++ lib/ethdev/version.map | 1 + 7 files changed, 200 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 94827bcc4a..e1e4bb49fa 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -101,6 +101,7 @@ enum index { QUEUE, PUSH, PULL, + HASH, /* Flex arguments */ FLEX_ITEM_INIT, @@ -206,6 +207,11 @@ enum index { TABLE_PATTERN_TEMPLATE, TABLE_ACTIONS_TEMPLATE, + /* Hash calculation arguments. */ + HASH_CALC_TABLE, + HASH_CALC_PATTERN_INDEX, + HASH_CALC_PATTERN, + /* Tunnel arguments. */ TUNNEL_CREATE, TUNNEL_CREATE_TYPE, @@ -2678,6 +2684,9 @@ static int parse_push(struct context *, const struct token *, static int parse_pull(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); +static int parse_hash(struct context *, const struct token *, + const char *, unsigned int, + void *, unsigned int); static int parse_tunnel(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -3035,7 +3044,8 @@ static const struct token token_list[] = { FLEX, QUEUE, PUSH, - PULL)), + PULL, + HASH)), .call = parse_init, }, /* Top-level command. */ @@ -3680,6 +3690,33 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY(struct buffer, queue)), }, /* Top-level command. */ + [HASH] = { + .name = "hash", + .help = "calculate hash for a given pattern in a given template table", + .next = NEXT(NEXT_ENTRY(HASH_CALC_TABLE), NEXT_ENTRY(COMMON_PORT_ID)), + .args = ARGS(ARGS_ENTRY(struct buffer, port)), + .call = parse_hash, + }, + /* Sub-level commands. */ + [HASH_CALC_TABLE] = { + .name = "template_table", + .help = "specify table id", + .next = NEXT(NEXT_ENTRY(HASH_CALC_PATTERN_INDEX), + NEXT_ENTRY(COMMON_TABLE_ID)), + .args = ARGS(ARGS_ENTRY(struct buffer, + args.vc.table_id)), + .call = parse_hash, + }, + [HASH_CALC_PATTERN_INDEX] = { + .name = "pattern_template", + .help = "specify pattern template id", + .next = NEXT(NEXT_ENTRY(ITEM_PATTERN), + NEXT_ENTRY(COMMON_UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct buffer, + args.vc.pat_templ_id)), + .call = parse_hash, + }, + /* Top-level command. */ [INDIRECT_ACTION] = { .name = "indirect_action", .type = "{command} {port_id} [{arg} [...]]", @@ -10449,6 +10486,48 @@ parse_pull(struct context *ctx, const struct token *token, return len; } +/** Parse tokens for hash calculation commands. */ +static int +parse_hash(struct context *ctx, const struct token *token, + const char *str, unsigned int len, + void *buf, unsigned int size) +{ + struct buffer *out = buf; + + /* Token name must match. */ + if (parse_default(ctx, token, str, len, NULL, 0) < 0) + return -1; + /* Nothing else to do if there is no buffer. */ + if (!out) + return len; + if (!out->command) { + if (ctx->curr != HASH) + return -1; + if (sizeof(*out) > size) + return -1; + out->command = ctx->curr; + ctx->objdata = 0; + ctx->object = out; + ctx->objmask = NULL; + out->args.vc.data = (uint8_t *)out + size; + return len; + } + switch (ctx->curr) { + case HASH_CALC_TABLE: + case HASH_CALC_PATTERN_INDEX: + return len; + case ITEM_PATTERN: + out->args.vc.pattern = + (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1), + sizeof(double)); + ctx->object = out->args.vc.pattern; + ctx->objmask = NULL; + return len; + default: + return -1; + } +} + static int parse_flex(struct context *ctx, const struct token *token, const char *str, unsigned int len, @@ -12351,6 +12430,11 @@ cmd_flow_parsed(const struct buffer *in) case PULL: port_queue_flow_pull(in->port, in->queue); break; + case HASH: + port_flow_hash_calc(in->port, in->args.vc.table_id, + in->args.vc.pat_templ_id, + in->args.vc.pattern); + break; case QUEUE_AGED: port_queue_flow_aged(in->port, in->queue, in->args.aged.destroy); diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 11f3a22048..c244f1a071 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -3301,6 +3302,59 @@ port_queue_flow_push(portid_t port_id, queueid_t queue_id) return ret; } +/** Calculate the hash result for a given pattern in a given table. */ +int +port_flow_hash_calc(portid_t port_id, uint32_t table_id, + uint8_t pattern_template_index, const struct rte_flow_item pattern[]) +{ + uint32_t hash; + bool found; + struct port_table *pt; + struct rte_port *port; + struct rte_flow_error error; + int ret = 0; + + if (port_id_is_invalid(port_id, ENABLED_WARN) || + port_id == (portid_t)RTE_PORT_ALL) + return -EINVAL; + port = &ports[port_id]; + + found = false; + pt = port->table_list; + while (pt) { + if (table_id == pt->id) { + found = true; + break; + } + pt = pt->next; + } + if (!found) { + printf("Table #%u is invalid\n", table_id); + return -EINVAL; + } + + memset(&error, 0x55, sizeof(error)); + ret = rte_flow_calc_table_hash(port_id, pt->table, pattern, + pattern_template_index, &hash, &error); + if (ret < 0) { + printf("Failed to calculate hash "); + switch (abs(ret)) { + case ENODEV: + printf("no such device\n"); + break; + case ENOTSUP: + printf("device doesn't support this operation\n"); + break; + default: + printf("\n"); + break; + } + return ret; + } + printf("Hash results 0x%x\n", hash); + return 0; +} + /** Pull queue operation results from the queue. */ static int port_queue_aged_flow_destroy(portid_t port_id, queueid_t queue_id, diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index f1df6a8faf..4637a47c06 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -1009,6 +1009,8 @@ port_queue_action_handle_query_update(portid_t port_id, const struct rte_flow_action *action); int port_queue_flow_push(portid_t port_id, queueid_t queue_id); int port_queue_flow_pull(portid_t port_id, queueid_t queue_id); +int port_flow_hash_calc(portid_t port_id, uint32_t table_id, + uint8_t pattern_template_index, const struct rte_flow_item pattern[]); void port_queue_flow_aged(portid_t port_id, uint32_t queue_id, uint8_t destroy); int port_flow_validate(portid_t port_id, const struct rte_flow_attr *attr, diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index 271d854f78..5f7dcdfdad 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -2431,3 +2431,24 @@ rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_ ret); return ret; } + +int +rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table *table, + const struct rte_flow_item pattern[], uint8_t pattern_template_index, + uint32_t *hash, struct rte_flow_error *error) +{ + int ret; + struct rte_eth_dev *dev; + const struct rte_flow_ops *ops; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + ops = rte_flow_ops_get(port_id, error); + if (!ops || !ops->flow_calc_table_hash) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + "action_list async query_update not supported"); + dev = &rte_eth_devices[port_id]; + ret = ops->flow_calc_table_hash(dev, table, pattern, pattern_template_index, + hash, error); + return flow_err(port_id, ret, error); +} diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 23addb4382..b8c28394a1 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -6624,6 +6624,38 @@ rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_ void *user_data, struct rte_flow_error *error); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Calculate the hash for a given pattern in a given table as + * calculated by the HW. + * + * @param port_id + * Port identifier of Ethernet device. + * @param table + * The table the SW wishes to simulate. + * @param pattern + * The values to be used in the hash calculation. + * @param pattern_template_index + * The pattern index in the table to be used for the calculation. + * @param hash + * Used to return the calculated hash. + * @param error + * Perform verbose error reporting if not NULL. + * PMDs initialize this structure in case of error only. + * + * @return + * - (0) if success. + * - (-ENODEV) if *port_id* invalid. + * - (-ENOTSUP) if underlying device does not support this functionality. + */ +__rte_experimental +int +rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table *table, + const struct rte_flow_item pattern[], uint8_t pattern_template_index, + uint32_t *hash, struct rte_flow_error *error); + #ifdef __cplusplus } #endif diff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h index f9fb01b8a2..aa8635b1a8 100644 --- a/lib/ethdev/rte_flow_driver.h +++ b/lib/ethdev/rte_flow_driver.h @@ -358,6 +358,11 @@ struct rte_flow_ops { const void **update, void **query, enum rte_flow_query_update_mode mode, void *user_data, struct rte_flow_error *error); + /** @see rte_flow_calc_table_hash() */ + int (*flow_calc_table_hash) + (struct rte_eth_dev *dev, const struct rte_flow_template_table *table, + const struct rte_flow_item pattern[], uint8_t pattern_template_index, + uint32_t *hash, struct rte_flow_error *error); }; /** diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index b965d6aa52..1496d8caa6 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map @@ -312,6 +312,7 @@ EXPERIMENTAL { rte_flow_async_action_list_handle_query_update; rte_flow_async_actions_update; rte_flow_restore_info_dynflag; + rte_flow_calc_table_hash; }; INTERNAL { From patchwork Mon Oct 9 16:24:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Kozyrev X-Patchwork-Id: 132438 X-Patchwork-Delegate: ferruh.yigit@amd.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 B1BBC4233F; Mon, 9 Oct 2023 18:25:10 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9F7584068E; Mon, 9 Oct 2023 18:25:10 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2046.outbound.protection.outlook.com [40.107.220.46]) by mails.dpdk.org (Postfix) with ESMTP id F1799402A3 for ; Mon, 9 Oct 2023 18:25:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HdFG4nn7og1GzsJxS+xPNZA8zenXRwLhcbIpmwI//X4h/ER5EW4DqEcF/jj2jtzU5ubKAm2ah8sDYQCpw7KccvG1RCnDDt7u1Qpvq+263kQYVt5041REu79VYVolKjNXK5JITWao7p1c2kDizOGYn3/rNB+mWn4dMeRI7sBq5gvROr8g3szDuu+9PvwRVQGpdut3+hrG48Vf+Fe3ksketYZwMVVfn0kuJMF23gMdVcIT3vKOkn3eMNR8fx6p83h+KRulgHcbvTqAaajCWI7+Nm2fZ5/V1+pDcTUk2eWKCtyPZLSPPnWA8lmZYiBnF7e8Pi5Xbg1oBuSqs8fL0uciUg== 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=XWdIqdHchV6YNoq0VsN63qxHAnVY3EADl16h06S5FSE=; b=XQE/PvbgibpLe+atYmu3m0JJA6/xLJcXZu4a+/yiZOxHIIXVI9WtzYd3K0N/IwyTGKhd69rvtiwhTgSxv+vLSCesGEbRaSI3cEBZ0+rNP25qIUmINE6foWDqwqeXk5bjPYuSEv19pIvoiSeyyQdOTCfKFAgYUj2xvbKpB6TZz8TBlXvD1KAgfzWyABDwbTKpKtRVf83aeABKDtjpyKKX5Eykkr/jWgBm8em4M0+uMRVtDgAYNaYgzkEHJjwG7CaCRj4HuEm9kDvVcKqXL6Jsomk/dcEGM1LCBmlEh3ubpKGbIeMn0Ol+4nM8UL74OMjUvcExIbuJSKqbqbzZW/DPXw== 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=XWdIqdHchV6YNoq0VsN63qxHAnVY3EADl16h06S5FSE=; b=dkojhNhQ/uJZtxC/fi0RdljWagqlSxK4RQO0Ns4iWTVhOVFbc2lHDfg9VxZaoYMVR7qMlS1T/KTg0iVxLEH2b0VLFde+YuGdDQ1XfKp0He/j554LOGMHlOTsHJo3eJ6AOmCluBX3AZm37CNU5Ka0kBB+HQmGUBTgA9IEZVTnoiUuy6hvYNlp5S5Du0hywb3nMBUdoKfQ+1hxTkYtg6yGcUK23EJpIGme3JWHsfeiccCIcpsmyy725ZuYyvFSXzDbLHkxSKlvpj3dSlwEAo3D9OwuqefLEJkugx2fb3br76JiFnjj4dmH/RlyJdJpu9vNHf1UsauWoT20QZL+D5Zi/Q== Received: from CY5PR15CA0079.namprd15.prod.outlook.com (2603:10b6:930:18::15) by SA1PR12MB8120.namprd12.prod.outlook.com (2603:10b6:806:331::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.38; Mon, 9 Oct 2023 16:25:06 +0000 Received: from CY4PEPF0000FCC4.namprd03.prod.outlook.com (2603:10b6:930:18:cafe::d8) by CY5PR15CA0079.outlook.office365.com (2603:10b6:930:18::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.36 via Frontend Transport; Mon, 9 Oct 2023 16:25:06 +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 CY4PEPF0000FCC4.mail.protection.outlook.com (10.167.242.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.22 via Frontend Transport; Mon, 9 Oct 2023 16:25:06 +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.41; Mon, 9 Oct 2023 09:25:00 -0700 Received: from pegasus01.mtr.labs.mlnx (10.126.230.35) 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.41; Mon, 9 Oct 2023 09:24:58 -0700 From: Alexander Kozyrev To: CC: , , , , Subject: [PATCH v3] ethdev: add packet type matching item Date: Mon, 9 Oct 2023 19:24:44 +0300 Message-ID: <20231009162444.3998178-1-akozyrev@nvidia.com> X-Mailer: git-send-email 2.18.2 In-Reply-To: <20231009160850.3997269-1-akozyrev@nvidia.com> References: <20231009160850.3997269-1-akozyrev@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000FCC4:EE_|SA1PR12MB8120:EE_ X-MS-Office365-Filtering-Correlation-Id: bc26358b-d330-4d28-4c84-08dbc8e44ca8 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: spGrHkkq2HIMoaIfYhNRHJ5HitecW6vjp/PfLM5mZdUamthgTM1gFAwYAHwGqLN46IlKm9TfAUQtXlaBoA4Xmdj9CzBxbe7Wx6iFXlZVKqguk/Ga0R5pHWdB2/ctuTdFR6nXbhFBQ3mGiOyuYWTPNpb1wGonaaMcb9IzWWwYaBpAIzdlTCW7ZQOpJxZyH+IPBy7y5x1PVBLLbP8iSzIXfho7d7I5v9cSNE7xY8GLMKHKi0W7EsSGsEI11rDzYID8+XpZCnm1c8cDfY6lxpi5p+xBMTO87XNtw2EIT2gQWjKUxqDRV3oOt3oHDFBMYh09CxKJM/xuHE4B1Vby6flKYhrY0XSZIXyoeE+Ds6MoMos/h2CwxnF49bkoT2JEkWa7MBYUkpcISM2Wo3SON1jtilChvCvc4Tz+gEbbbiLt5CyIghrQ+YlZrHyGislzq8jnvNIy0mUhOZselj01Yda2LIcAOv7yrEqembAPpW9RUJOga7iohacHsvGyJXoTfuqUEms0R1cFv7hE4JPX60rMfyjXLpcT2hXTh+bpfDP0I4IZ/A1htK+a/ckd3on0rxWew4tHwcq5qqjIs8eisUts27pwqB87BrTe5o8eUwBuf/ZmphaoAe8cqA+9WbxLHp2i5eSfTV6jngvcthjjpmOccFCq6DQN1RxlxAupUgDheZYjyU3tIIsQFTbhhteLT+dlLf6993cKCxhJ9AZOFvkNX8Bztc1AcEKFcCzPfw1cW10= 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:(13230031)(4636009)(346002)(396003)(376002)(39860400002)(136003)(230922051799003)(1800799009)(186009)(82310400011)(451199024)(64100799003)(40470700004)(36840700001)(46966006)(40460700003)(82740400003)(2616005)(83380400001)(5660300002)(4326008)(47076005)(54906003)(6916009)(70586007)(6666004)(1076003)(16526019)(316002)(26005)(478600001)(70206006)(8936002)(426003)(336012)(41300700001)(86362001)(2906002)(356005)(7636003)(40480700001)(36756003)(36860700001)(8676002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Oct 2023 16:25:06.6160 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bc26358b-d330-4d28-4c84-08dbc8e44ca8 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: CY4PEPF0000FCC4.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8120 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 Add RTE_FLOW_ITEM_TYPE_PTYPE to allow matching on L2/L3/L4 and tunnel information as defined in mbuf. To match on RTE_PTYPE_L4_TCP and RTE_PTYPE_INNER_L4_UDP: flow pattern_template 0 create pattern_template_id 1 ingress template ptype packet_type mask 0x0f000f00 / end flow queue 0 create 0 template_table 1 pattern_template 0 actions_template 0 pattern ptype packet_type is 0x02000100 / end actions queue index 1 / end Signed-off-by: Alexander Kozyrev Acked-by: Ori Kam --- app/test-pmd/cmdline_flow.c | 28 +++++++++++++++++++++ doc/guides/nics/features/default.ini | 1 + doc/guides/prog_guide/rte_flow.rst | 7 ++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 4 +++ lib/ethdev/rte_flow.c | 1 + lib/ethdev/rte_flow.h | 25 ++++++++++++++++++ 6 files changed, 66 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 2b1d9b70ee..02874c4597 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -534,6 +534,8 @@ enum index { ITEM_IB_BTH_PSN, ITEM_IPV6_PUSH_REMOVE_EXT, ITEM_IPV6_PUSH_REMOVE_EXT_TYPE, + ITEM_PTYPE, + ITEM_PTYPE_VALUE, /* Validate/create actions. */ ACTIONS, @@ -1579,6 +1581,7 @@ static const enum index next_item[] = { ITEM_AGGR_AFFINITY, ITEM_TX_QUEUE, ITEM_IB_BTH, + ITEM_PTYPE, END_SET, ZERO, }; @@ -2099,6 +2102,12 @@ static const enum index item_ib_bth[] = { ZERO, }; +static const enum index item_ptype[] = { + ITEM_PTYPE_VALUE, + ITEM_NEXT, + ZERO, +}; + static const enum index next_action[] = { ACTION_END, ACTION_VOID, @@ -5906,6 +5915,22 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_ib_bth, hdr.psn)), }, + [ITEM_PTYPE] = { + .name = "ptype", + .help = "match L2/L3/L4 and tunnel information", + .priv = PRIV_ITEM(PTYPE, + sizeof(struct rte_flow_item_ptype)), + .next = NEXT(item_ptype), + .call = parse_vc, + }, + [ITEM_PTYPE_VALUE] = { + .name = "packet_type", + .help = "packet type as defined in rte_mbuf_ptype", + .next = NEXT(item_ptype, NEXT_ENTRY(COMMON_UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ptype, packet_type)), + }, + /* Validate/create actions. */ [ACTIONS] = { .name = "actions", @@ -12820,6 +12845,9 @@ flow_item_default_mask(const struct rte_flow_item *item) case RTE_FLOW_ITEM_TYPE_IB_BTH: mask = &rte_flow_item_ib_bth_mask; break; + case RTE_FLOW_ITEM_TYPE_PTYPE: + mask = &rte_flow_item_ptype_mask; + break; default: break; } diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini index 2011e97127..e41a97b3bb 100644 --- a/doc/guides/nics/features/default.ini +++ b/doc/guides/nics/features/default.ini @@ -137,6 +137,7 @@ ppp = pppoed = pppoes = pppoe_proto_id = +ptype = quota = raw = represented_port = diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 860e42025f..b65b25d443 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1566,6 +1566,13 @@ Matches an InfiniBand base transport header in RoCE packet. - ``hdr``: InfiniBand base transport header definition (``rte_ib.h``). +Item: ``PTYPE`` +^^^^^^^^^^^^^^^ + +Matches the packet type as defined in rte_mbuf_ptype. + +- ``packet_type``: L2/L3/L4 and tunnel information. + Actions ~~~~~~~ diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index e6d218caaa..07bac9a311 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3808,6 +3808,10 @@ This section lists supported pattern items and their attributes, if any. - ``send_to_kernel``: send packets to kernel. +- ``ptype``: match the packet type (L2/L3/L4 and tunnel information). + + - ``packet_type {unsigned}``: packet type. + Actions list ^^^^^^^^^^^^ diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index c9d23da702..ba8bf27090 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -167,6 +167,7 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = { MK_FLOW_ITEM(AGGR_AFFINITY, sizeof(struct rte_flow_item_aggr_affinity)), MK_FLOW_ITEM(TX_QUEUE, sizeof(struct rte_flow_item_tx_queue)), MK_FLOW_ITEM(IB_BTH, sizeof(struct rte_flow_item_ib_bth)), + MK_FLOW_ITEM(PTYPE, sizeof(struct rte_flow_item_ptype)), }; /** Generate flow_action[] entry. */ diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index e576b15e3d..b79bb9968b 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -694,6 +694,14 @@ enum rte_flow_item_type { * @see struct rte_flow_item_ib_bth. */ RTE_FLOW_ITEM_TYPE_IB_BTH, + + /** + * Matches the packet type as defined in rte_mbuf_ptype. + * + * See struct rte_flow_item_ptype. + * + */ + RTE_FLOW_ITEM_TYPE_PTYPE, }; /** @@ -2309,6 +2317,23 @@ static const struct rte_flow_item_tx_queue rte_flow_item_tx_queue_mask = { }; #endif +/** + * + * RTE_FLOW_ITEM_TYPE_PTYPE + * + * Matches the packet type as defined in rte_mbuf_ptype. + */ +struct rte_flow_item_ptype { + uint32_t packet_type; /**< L2/L3/L4 and tunnel information. */ +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_PTYPE. */ +#ifndef __cplusplus +static const struct rte_flow_item_ptype rte_flow_item_ptype_mask = { + .packet_type = 0xffffffff, +}; +#endif + /** * Action types. * From patchwork Tue Oct 10 14:24:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ori Kam X-Patchwork-Id: 132462 X-Patchwork-Delegate: ferruh.yigit@amd.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 2BB794234D; Tue, 10 Oct 2023 16:25:02 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A89C2402C2; Tue, 10 Oct 2023 16:25:01 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2087.outbound.protection.outlook.com [40.107.212.87]) by mails.dpdk.org (Postfix) with ESMTP id EDCDD40297 for ; Tue, 10 Oct 2023 16:24:59 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XSb21Szu3gxZpsfcU5yNVDB13xesXdvjvg38t4FU8vu84Puhb9eVuZUb9QwRoX2/w6tho659/ukPtvu5zCqOFWAceFGnT0VDmwlv+iAi+Ae5g2JT5muQ8J4oZJakU+zZUJEfZqxrb+Wid70mpWynKeAoEBf5Ms8rciCaHwkP2hJHAE1f0YQkaCiuyD10Ef8GKMPuEkv+pQ3I9KjhL3zGUhzmfJ6OICg9xCOBzo3gYLXI6BPMc3V5EnZHvrKfdW/+eRTtddroIfUA75ZxIuE9b4ulWXi2WjO6UOKCRH7h/gfwzbSkknwGTgVIGXVqLpZ/5/xkbt9W99moJNayHLnmlg== 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=Yh2OfMxHNe0PtMkYRGNmJG02UBOff+psiO3iY0aZyDk=; b=aQMAuUfVr+jg7xcuL4Qz3yQtgYI9VtlPov983u6NUXJNMLurleqO9KpAaVF1J0AfSdotJ62QypHOvhM7BiggY/zhB1iaU6TFbLATHmfrAVxRo2YUWnxYvIXluzK8r1AJmWm5wCwxLSerAgF1l1IPkirktSWcjjHvK6SnOnz4GisTsmGpgR+id4rHiG2jZsG4ZBfyDiXGNEnAQm0ruwHlGqapp+NhgLXVC2gCUtuUbWyb48cEltaUNT+A7ikjcWw6SfZNFHrDG2X2GdYxe/t92xFpxo2w6RKgiIbBQBBowp6TtVdw3FjiNf6G6ZWKZmqLkRRQ9aLgo5g5HBkQHuwpCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=intel.com 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=Yh2OfMxHNe0PtMkYRGNmJG02UBOff+psiO3iY0aZyDk=; b=PWuXXGrA01nkbyGtcwxdR6G7AlDfeuulK9cjV8zHWEM4nu0DcqSDEHtJ94jKDog8Su1jiYRKf7uIi3DcCotLHBjFOB86/O8zCyt3ODrFtSL2oK1q0nL72NjeyIc+oBI8Dp3NS7pbc3k9RwO5qXpM+FGFehwZu7yXFr1npn1k74lse6IlWDIC2lQcGGUKbqAnAwfiVW/t3UCDpkamdlHjOqBGcQG2vModydNY+jLCDm/4wF6pQQG5H8U8C4ca+L/lYgzF04lPFwQo1qh8FR0BOf/K3puG/wgqzdZfVnySXiH3FVq2bdl2ZuLABN5TqrpV4jlNJRrTMZ7ZtzIiXBlWvw== Received: from BYAPR08CA0039.namprd08.prod.outlook.com (2603:10b6:a03:117::16) by CO6PR12MB5474.namprd12.prod.outlook.com (2603:10b6:303:139::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.38; Tue, 10 Oct 2023 14:24:57 +0000 Received: from SN1PEPF0002BA4E.namprd03.prod.outlook.com (2603:10b6:a03:117:cafe::ef) by BYAPR08CA0039.outlook.office365.com (2603:10b6:a03:117::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.27 via Frontend Transport; Tue, 10 Oct 2023 14:24:57 +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 SN1PEPF0002BA4E.mail.protection.outlook.com (10.167.242.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.22 via Frontend Transport; Tue, 10 Oct 2023 14:24:56 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) 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.41; Tue, 10 Oct 2023 07:24:25 -0700 Received: from nvidia.com (10.126.230.35) 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.41; Tue, 10 Oct 2023 07:24:21 -0700 From: Ori Kam To: , Aman Singh , Yuying Zhang , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko CC: , , Subject: [PATCH v2] ethdev: add calculate hash function Date: Tue, 10 Oct 2023 17:24:01 +0300 Message-ID: <20231010142401.27289-1-orika@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230926113753.28765-1-orika@nvidia.com> References: <20230926113753.28765-1-orika@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF0002BA4E:EE_|CO6PR12MB5474:EE_ X-MS-Office365-Filtering-Correlation-Id: d1d4a61c-f055-48db-661b-08dbc99cadca X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: B0bdG4hSk3I71JaL916qAwGTtNjxjXdlTP8+b+L1U1/Diw9usiLMP5eJP65FGK8q743UlbQME5qsEokHCtWaqGATc15KC6ivZCv3MpViWgCCOy1cFSh605yuI+fVfgImHU5GyNxUxTUBXE0/nO0zj3Q9WQ5/j4Cf4eYR3T7Ju4UvJxv0pvv+EawFLOk5nnzC1ZkF2LEvM7ufDacKCZzViZPT0gOGfS5Krni8Qark/7v3Q9n+azJY/jD6fpqJ8eHfbA68DrspFHsRz3Bb25DPJdRSQFsIZcLRfvUlHTG6S9ZKThgMLq+C7jco7sJhsNOFRgCIe+rSl6sf9ESi0T2iaVNf7khHTgkp1fQCAW0eO5iZlUrb0QpVWzGPw6pcGWv9y/aJALirogvbj2O3g+Pr2e3GrozDQI2oAmYtvFclT4t1Jv716KYj992lasHlS6LGUUjDFifOPWboBYinp0Bm4Po/OGvIslGIaW+YB4K8pG+TA/wv3M692UfWxXnIEWZhpzvIvFxdP0K3NV8brTIgHWhcqfjRuJbBz3hEDz96PNcWYlmZSbmN17cc3zItf/3rjixl5rKfxaQfFL2ZQ3ph+niViyc9B9TjNHNl0YqpdM5HSGSU7cEcXlyfgR9jSABxfv9l2ffBVpVfsn3d9Xm9TtH/AE/CSKnsgfGj9iaQkqsvFqJkcccOhvDWZ6OSNb7XS3UUdA1KakCRpA6eVERrMoG/vpKou4GRL1T7KQqBQchgm245CLVL+XiEnbhEvDXqBrtAsrNjos9TjGLc3srSxw== 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:(13230031)(4636009)(39860400002)(396003)(346002)(376002)(136003)(230922051799003)(82310400011)(64100799003)(451199024)(1800799009)(186009)(46966006)(40470700004)(36840700001)(110136005)(316002)(70206006)(54906003)(966005)(41300700001)(5660300002)(8936002)(4326008)(70586007)(8676002)(30864003)(40460700003)(36860700001)(1076003)(107886003)(2616005)(86362001)(83380400001)(7636003)(7696005)(2906002)(40480700001)(82740400003)(356005)(55016003)(36756003)(6666004)(336012)(6286002)(16526019)(426003)(26005)(478600001)(47076005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Oct 2023 14:24:56.9454 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d1d4a61c-f055-48db-661b-08dbc99cadca 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: SN1PEPF0002BA4E.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5474 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 rte_flow supports insert by index table[1]. Using the above table, the application can create rules that are based on hash. For example application can create the following logic in order to create load balancing: 1. Create insert by index table with 2 rules, that hashes based on dmac 2. Insert to index 0 a rule that sends the traffic to port A. 3. Insert to index 1 a rule that sends the traffic to port B. Let's also assume that before this table, there is a 5 tuple match table that jumps to the above table. So each packet that matches one of the 5 tuple rules is RSSed to port A or B, based on dmac hash. The issue arises when there is a miss on the 5 tuple table, which resulted due to the packet being the first packet of this flow, or fragmented packet or any other reason. In this case, the application must calculate what would be the hash calculated by the HW so it can send the packet to the correct port. This new API allows applications to calculate the hash value of a given packet for a given table. [1] - http://patches.dpdk.org/project/dpdk/patch/20230208030624.78465-2-akozyrev@nvidia.com/ Signed-off-by: Ori Kam --- v2: add rst documentations --- app/test-pmd/cmdline_flow.c | 86 ++++++++++++++++++++- app/test-pmd/config.c | 54 +++++++++++++ app/test-pmd/testpmd.h | 2 + doc/guides/prog_guide/rte_flow.rst | 17 ++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 22 ++++++ lib/ethdev/rte_flow.c | 21 +++++ lib/ethdev/rte_flow.h | 32 ++++++++ lib/ethdev/rte_flow_driver.h | 5 ++ lib/ethdev/version.map | 1 + 9 files changed, 239 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 12809f1042..dd66429554 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -102,6 +102,7 @@ enum index { QUEUE, PUSH, PULL, + HASH, /* Flex arguments */ FLEX_ITEM_INIT, @@ -214,6 +215,11 @@ enum index { GROUP_TRANSFER, GROUP_SET_MISS_ACTIONS, + /* Hash calculation arguments. */ + HASH_CALC_TABLE, + HASH_CALC_PATTERN_INDEX, + HASH_CALC_PATTERN, + /* Tunnel arguments. */ TUNNEL_CREATE, TUNNEL_CREATE_TYPE, @@ -2708,6 +2714,9 @@ static int parse_pull(struct context *, const struct token *, static int parse_group(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); +static int parse_hash(struct context *, const struct token *, + const char *, unsigned int, + void *, unsigned int); static int parse_tunnel(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -3066,7 +3075,8 @@ static const struct token token_list[] = { FLEX, QUEUE, PUSH, - PULL)), + PULL, + HASH)), .call = parse_init, }, /* Top-level command. */ @@ -3751,6 +3761,33 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY(struct buffer, queue)), }, /* Top-level command. */ + [HASH] = { + .name = "hash", + .help = "calculate hash for a given pattern in a given template table", + .next = NEXT(NEXT_ENTRY(HASH_CALC_TABLE), NEXT_ENTRY(COMMON_PORT_ID)), + .args = ARGS(ARGS_ENTRY(struct buffer, port)), + .call = parse_hash, + }, + /* Sub-level commands. */ + [HASH_CALC_TABLE] = { + .name = "template_table", + .help = "specify table id", + .next = NEXT(NEXT_ENTRY(HASH_CALC_PATTERN_INDEX), + NEXT_ENTRY(COMMON_TABLE_ID)), + .args = ARGS(ARGS_ENTRY(struct buffer, + args.vc.table_id)), + .call = parse_hash, + }, + [HASH_CALC_PATTERN_INDEX] = { + .name = "pattern_template", + .help = "specify pattern template id", + .next = NEXT(NEXT_ENTRY(ITEM_PATTERN), + NEXT_ENTRY(COMMON_UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct buffer, + args.vc.pat_templ_id)), + .call = parse_hash, + }, + /* Top-level command. */ [INDIRECT_ACTION] = { .name = "indirect_action", .type = "{command} {port_id} [{arg} [...]]", @@ -10544,6 +10581,48 @@ parse_pull(struct context *ctx, const struct token *token, return len; } +/** Parse tokens for hash calculation commands. */ +static int +parse_hash(struct context *ctx, const struct token *token, + const char *str, unsigned int len, + void *buf, unsigned int size) +{ + struct buffer *out = buf; + + /* Token name must match. */ + if (parse_default(ctx, token, str, len, NULL, 0) < 0) + return -1; + /* Nothing else to do if there is no buffer. */ + if (!out) + return len; + if (!out->command) { + if (ctx->curr != HASH) + return -1; + if (sizeof(*out) > size) + return -1; + out->command = ctx->curr; + ctx->objdata = 0; + ctx->object = out; + ctx->objmask = NULL; + out->args.vc.data = (uint8_t *)out + size; + return len; + } + switch (ctx->curr) { + case HASH_CALC_TABLE: + case HASH_CALC_PATTERN_INDEX: + return len; + case ITEM_PATTERN: + out->args.vc.pattern = + (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1), + sizeof(double)); + ctx->object = out->args.vc.pattern; + ctx->objmask = NULL; + return len; + default: + return -1; + } +} + static int parse_group(struct context *ctx, const struct token *token, const char *str, unsigned int len, @@ -12498,6 +12577,11 @@ cmd_flow_parsed(const struct buffer *in) case PULL: port_queue_flow_pull(in->port, in->queue); break; + case HASH: + port_flow_hash_calc(in->port, in->args.vc.table_id, + in->args.vc.pat_templ_id, + in->args.vc.pattern); + break; case QUEUE_AGED: port_queue_flow_aged(in->port, in->queue, in->args.aged.destroy); diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 709864bb44..35586e0ad2 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -3301,6 +3302,59 @@ port_queue_flow_push(portid_t port_id, queueid_t queue_id) return ret; } +/** Calculate the hash result for a given pattern in a given table. */ +int +port_flow_hash_calc(portid_t port_id, uint32_t table_id, + uint8_t pattern_template_index, const struct rte_flow_item pattern[]) +{ + uint32_t hash; + bool found; + struct port_table *pt; + struct rte_port *port; + struct rte_flow_error error; + int ret = 0; + + if (port_id_is_invalid(port_id, ENABLED_WARN) || + port_id == (portid_t)RTE_PORT_ALL) + return -EINVAL; + port = &ports[port_id]; + + found = false; + pt = port->table_list; + while (pt) { + if (table_id == pt->id) { + found = true; + break; + } + pt = pt->next; + } + if (!found) { + printf("Table #%u is invalid\n", table_id); + return -EINVAL; + } + + memset(&error, 0x55, sizeof(error)); + ret = rte_flow_calc_table_hash(port_id, pt->table, pattern, + pattern_template_index, &hash, &error); + if (ret < 0) { + printf("Failed to calculate hash "); + switch (abs(ret)) { + case ENODEV: + printf("no such device\n"); + break; + case ENOTSUP: + printf("device doesn't support this operation\n"); + break; + default: + printf("\n"); + break; + } + return ret; + } + printf("Hash results 0x%x\n", hash); + return 0; +} + /** Pull queue operation results from the queue. */ static int port_queue_aged_flow_destroy(portid_t port_id, queueid_t queue_id, diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index e236845a81..dec333a8fa 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -1014,6 +1014,8 @@ port_queue_action_handle_query_update(portid_t port_id, const struct rte_flow_action *action); int port_queue_flow_push(portid_t port_id, queueid_t queue_id); int port_queue_flow_pull(portid_t port_id, queueid_t queue_id); +int port_flow_hash_calc(portid_t port_id, uint32_t table_id, + uint8_t pattern_template_index, const struct rte_flow_item pattern[]); void port_queue_flow_aged(portid_t port_id, uint32_t queue_id, uint8_t destroy); int port_flow_validate(portid_t port_id, const struct rte_flow_attr *attr, diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 860e42025f..a11eb2977a 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -4173,6 +4173,23 @@ User data may be provided during a flow creation/destruction in order to distinguish between multiple operations. User data is returned as part of the result to provide a method to detect which operation is completed. +Calculate hash +~~~~~~~~~~~~~~ + +Calculating hash of a packet in SW as it would be calculated in HW. + +The application can use this function to calculate the hash of a given packet +as it would be calculated in the HW. + +.. code-block:: c + + int + rte_flow_calc_table_hash(uint16_t port_id, + const struct rte_flow_template_table *table, + const struct rte_flow_item pattern[], + uint8_t pattern_template_index, + uint32_t *hash, struct rte_flow_error *error); + .. _flow_isolated_mode: Flow isolated mode diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index e6d218caaa..1006239d86 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3276,6 +3276,28 @@ The usual error message is shown when operations results cannot be pulled:: Caught error type [...] ([...]): [...] +Calculating hash +~~~~~~~~~~~~~~~~ + +``flow hash`` calculates the hash for a given pattern. +It is bound to ``rte_flow_calc_table_hash()``:: + + flow hash {port_id} template_table {table_id} + pattern_template {pattern_template_index} + actions_template {actions_template_index} + pattern {item} [/ {item} [...]] / end + +If successful, it will show the calculated hash result as seen below:: + + Hash results 0x[...] + +Otherwise, it will show an error message of the form:: + + Caught error type [...] ([...]): [...] + +This command uses the same pattern items as ``flow create``, +their format is described in `Creating flow rules`_. + Creating a tunnel stub for offload ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index c9d23da702..6917fbd262 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -2454,3 +2454,24 @@ rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_ ret); return ret; } + +int +rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table *table, + const struct rte_flow_item pattern[], uint8_t pattern_template_index, + uint32_t *hash, struct rte_flow_error *error) +{ + int ret; + struct rte_eth_dev *dev; + const struct rte_flow_ops *ops; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + ops = rte_flow_ops_get(port_id, error); + if (!ops || !ops->flow_calc_table_hash) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + "action_list async query_update not supported"); + dev = &rte_eth_devices[port_id]; + ret = ops->flow_calc_table_hash(dev, table, pattern, pattern_template_index, + hash, error); + return flow_err(port_id, ret, error); +} diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index e576b15e3d..00e472b65b 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -6717,6 +6717,38 @@ rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_ void *user_data, struct rte_flow_error *error); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Calculate the hash for a given pattern in a given table as + * calculated by the HW. + * + * @param port_id + * Port identifier of Ethernet device. + * @param table + * The table the SW wishes to simulate. + * @param pattern + * The values to be used in the hash calculation. + * @param pattern_template_index + * The pattern index in the table to be used for the calculation. + * @param hash + * Used to return the calculated hash. + * @param error + * Perform verbose error reporting if not NULL. + * PMDs initialize this structure in case of error only. + * + * @return + * - (0) if success. + * - (-ENODEV) if *port_id* invalid. + * - (-ENOTSUP) if underlying device does not support this functionality. + */ +__rte_experimental +int +rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table *table, + const struct rte_flow_item pattern[], uint8_t pattern_template_index, + uint32_t *hash, struct rte_flow_error *error); + #ifdef __cplusplus } #endif diff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h index 3ced086c47..f35f659503 100644 --- a/lib/ethdev/rte_flow_driver.h +++ b/lib/ethdev/rte_flow_driver.h @@ -365,6 +365,11 @@ struct rte_flow_ops { const void **update, void **query, enum rte_flow_query_update_mode mode, void *user_data, struct rte_flow_error *error); + /** @see rte_flow_calc_table_hash() */ + int (*flow_calc_table_hash) + (struct rte_eth_dev *dev, const struct rte_flow_template_table *table, + const struct rte_flow_item pattern[], uint8_t pattern_template_index, + uint32_t *hash, struct rte_flow_error *error); }; /** diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index 1e51478405..919ba5b8e6 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map @@ -316,6 +316,7 @@ EXPERIMENTAL { # added in 23.11 rte_eth_recycle_rx_queue_info_get; rte_flow_group_set_miss_actions; + rte_flow_calc_table_hash; }; INTERNAL {