From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 44E22A0032;
	Fri,  1 Oct 2021 21:35:05 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 98239411FE;
	Fri,  1 Oct 2021 21:34:51 +0200 (CEST)
Received: from NAM10-DM6-obe.outbound.protection.outlook.com
 (mail-dm6nam10on2077.outbound.protection.outlook.com [40.107.93.77])
 by mails.dpdk.org (Postfix) with ESMTP id C8C4F411DC
 for <dev@dpdk.org>; Fri,  1 Oct 2021 21:34:49 +0200 (CEST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ML3vLBmhKDBXOIcEKKjEshp+FnR0UU19rxPOfypWeTQ9/L0evZICI8+juYjHg57S9QaHoYssRiMGTtLkSRnSWQQ9qhpN1a1I45QwmprTgW1CbXc6xaNCglEqrRiAyIH87iQx/bTBdA6Q3ybW4BqJNPymO8bletTk2Qgaex8VpJuR4oOtZcD4bj19277PxI9KhArrXwn7w+xQ/0zWVxDeIuxvUBiqMf4sOtE00kqRYP41kAodn/htqi2tB/3FwrHCkSxSrUf1yAeb5uBlzbxX0rx2vQ73/rCadCBxl7hnpZW4OI6qhFhwSynUmK8qq/72yiyj0iXy6x4edvk20H2LJQ==
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=+tSKHujJZ17nlCVv2IOpIob9cvqI1kK4PuYm1culmvI=;
 b=StFSvWC/PLgtZ58dOhv/jn/wkyM3Sj8eaM9+yDYX2rNBYQ7Akoj5oKtP6CSDtSmP5CzpU6+4fPJYx1mje6/87Vjch5vqHNDH1a9WuWn7mwb4QSm4E/CRrvPKP0vf6yLT4hW1s/vp09Ag8Yag9k5nuaCdyKqtcG2NF30Fig7eOfw35cUnGz29aaXPUQnshsI3MnlwQM9yn/l5zbXGRWELpSx7Q8KMFYmHIiB4hHnb8d7chbu+/TwabjVig1zcYXJnWclSNUgtF3JOtgpF/i1cWQ44LCgfVQBdNVEYvG5qvHNStf0XRVaj/SeNhEoR6JPjQa03VKmKbE3wohOZY3rpTg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is
 216.228.112.34) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com;
 dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; 
 dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;
 s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+tSKHujJZ17nlCVv2IOpIob9cvqI1kK4PuYm1culmvI=;
 b=QdzYA8Bksa+1JmozMBOgHfXu2QWKQvdX6r9Gk1uZJAbm4I2PD+PMMkJJP2cTrZxwOPHD1Vos0+NlxbjUiNB7CtDR/jR8JsGmgyOJKPTcAUxURTD4yKNu9gkuLx+VQqwrYMCEQnlWFsmw92HbJJsntFixOFaf8IqUu1X53FG/nWX0DvY5A+OO415qVZuY1t9FKS+TD3lWMFOCEJ53fmk8upwLDe466qL2+beoKIunP4nGymesO4zVcjoHmbnKH/x2lzBniICbyGpGZjwvGdmGUmE5VKPeL/zUpbYahchfKLTZqSJm4jZWMEpHu7znK7BEPvv6obqt1iQTlCnDaI3MVw==
Received: from BN6PR13CA0055.namprd13.prod.outlook.com (2603:10b6:404:11::17)
 by DM5PR12MB1338.namprd12.prod.outlook.com (2603:10b6:3:71::19) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.20; Fri, 1 Oct
 2021 19:34:48 +0000
Received: from BN8NAM11FT066.eop-nam11.prod.protection.outlook.com
 (2603:10b6:404:11:cafe::9b) by BN6PR13CA0055.outlook.office365.com
 (2603:10b6:404:11::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.7 via Frontend
 Transport; Fri, 1 Oct 2021 19:34:48 +0000
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34)
 smtp.mailfrom=nvidia.com; monjalon.net; dkim=none (message not signed)
 header.d=none;monjalon.net; dmarc=pass action=none header.from=nvidia.com;
Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates
 216.228.112.34 as permitted sender) receiver=protection.outlook.com;
 client-ip=216.228.112.34; helo=mail.nvidia.com;
Received: from mail.nvidia.com (216.228.112.34) by
 BN8NAM11FT066.mail.protection.outlook.com (10.13.177.138) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.4566.14 via Frontend Transport; Fri, 1 Oct 2021 19:34:47 +0000
Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com
 (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Fri, 1 Oct
 2021 19:34:44 +0000
From: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
To: <dev@dpdk.org>
CC: <rasland@nvidia.com>, <matan@nvidia.com>, <shahafs@nvidia.com>,
 <orika@nvidia.com>, <getelson@nvidia.com>, <thomas@monjalon.net>
Date: Fri, 1 Oct 2021 22:34:03 +0300
Message-ID: <20211001193415.23288-3-viacheslavo@nvidia.com>
X-Mailer: git-send-email 2.18.1
In-Reply-To: <20211001193415.23288-1-viacheslavo@nvidia.com>
References: <20210922180418.20663-1-viacheslavo@nvidia.com>
 <20211001193415.23288-1-viacheslavo@nvidia.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [172.20.187.6]
X-ClientProxiedBy: HQMAIL107.nvidia.com (172.20.187.13) To
 HQMAIL107.nvidia.com (172.20.187.13)
X-EOPAttributedMessage: 0
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 8a6d7633-07bd-4b61-d2f0-08d98512876c
X-MS-TrafficTypeDiagnostic: DM5PR12MB1338:
X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr
X-Microsoft-Antispam-PRVS: <DM5PR12MB13383477294D9FE7221EE0B9DFAB9@DM5PR12MB1338.namprd12.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:1247;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: OsuzWdlI3MKgf7cUyx8kZygCBCqSTik77u1MH/BapAefFIQLOJfMzI9G70jGG/+Y7SYfzBbdRVwxNq9oYFpRzQEzCUbJ4uWMpvzo3zCCmUH8dy9IohuSKzqHm5cogSFBuJfkrcYRzw0C2vCi0j6Z2R9+cYp6XoeDGTcEgx83Yu0c2yKh6eiMVqC5q+6KPBzuoLE641uNW/JG9WWz62roEw0lQIbelTtTT0v2JGpJimjMMk1uxC9GRSX+rlpUD30sJBQ1qCdJDMKQKnKA/DZ/pV8h+ATBUJJTRbxu5K43jmCr3Lzfkh6b0UtmBOm4/F08q8h1pt/b0y0/ajfEip7zotDrngy4n5NhokY0eMoeI+iPAnv3Ie82RLLk9S06bqydlOvZXc7rq2GJv3X8aoH33OzGxGrV6Alw2bpTaaSWhzep1lUFo8w7WmOrZnhlJugzjgTT9HBkZIUXbKLD/+jEv+Y1BbLPzRk5SexaaFdtAtRffN+QKFAhuTRL3f9ukyDfNUCNSbQw/mUI/2Gjc+QaAeNlpFWC3Ni8M9mBzYflwVZs4xJYNtZS7FRX0kRPUtXsGVRE4NVmCoAI4B7cp5Sevvegd1YQxVCeoqKmMZDasKmdeWKvTGvq31OXxN7SFGrKkiZ9a/MK0sD4vzPVZBMDl7PuXft1croE0y6VIlgO63vMoIuxF+yTHy3HaCTbtSEkK4YA/S+q5PequoM4dmD5NA==
X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE;
 SFS:(4636009)(36840700001)(46966006)(6286002)(7636003)(6666004)(70206006)(186003)(356005)(55016002)(82310400003)(1076003)(7696005)(316002)(8676002)(26005)(8936002)(83380400001)(5660300002)(2906002)(4326008)(54906003)(36860700001)(6916009)(2616005)(426003)(336012)(47076005)(86362001)(508600001)(70586007)(16526019)(36756003);
 DIR:OUT; SFP:1101; 
X-OriginatorOrg: Nvidia.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2021 19:34:47.5875 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 8a6d7633-07bd-4b61-d2f0-08d98512876c
X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34];
 Helo=[mail.nvidia.com]
X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT066.eop-nam11.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1338
Subject: [dpdk-dev] [PATCH v2 02/14] ethdev: support flow elements with
 variable length
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

From: Gregory Etelson <getelson@nvidia.com>

RTE flow API provides RAW item type for packet patterns of variable
length. The RAW item structure has fixed size members that describe the
variable pattern length and methods to process it.

A new RTE flow item type with variable length pattern that does not
fit the RAW item meta description could not use the RAW item.
For example, the new flow item that references 64 bits PMD handler
cannot be described by the RAW item.

The patch allows RTE conv helper functions to process custom flow
items with variable length pattern.

Signed-off-by: Gregory Etelson <getelson@nvidia.com>
---
 lib/ethdev/rte_flow.c | 68 ++++++++++++++++++++++++++++++++++---------
 1 file changed, 55 insertions(+), 13 deletions(-)

diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 8cb7a069c8..fe199eaeb3 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -30,13 +30,54 @@ uint64_t rte_flow_dynf_metadata_mask;
 struct rte_flow_desc_data {
 	const char *name;
 	size_t size;
+	size_t (*desc_fn)(void *dst, const void *src);
 };
 
+/**
+ *
+ * @param buf
+ * Destination memory.
+ * @param data
+ * Source memory
+ * @param size
+ * Requested copy size
+ * @param desc
+ * rte_flow_desc_item - for flow item conversion.
+ * rte_flow_desc_action - for flow action conversion.
+ * @param type
+ * Offset into the desc param or negative value for private flow elements.
+ */
+static inline size_t
+rte_flow_conv_copy(void *buf, const void *data, const size_t size,
+		   const struct rte_flow_desc_data *desc, int type)
+{
+	/**
+	 * allow PMD private flow item
+	 * see 5d1bff8fe2
+	 * "ethdev: allow negative values in flow rule types"
+	 */
+	size_t sz = type >= 0 ? desc[type].size : sizeof(void *);
+	if (buf == NULL || data == NULL)
+		return 0;
+	rte_memcpy(buf, data, (size > sz ? sz : size));
+	if (desc[type].desc_fn)
+		sz += desc[type].desc_fn(size > 0 ? buf : NULL, data);
+	return sz;
+}
+
 /** Generate flow_item[] entry. */
 #define MK_FLOW_ITEM(t, s) \
 	[RTE_FLOW_ITEM_TYPE_ ## t] = { \
 		.name = # t, \
-		.size = s, \
+		.size = s,               \
+		.desc_fn = NULL,\
+	}
+
+#define MK_FLOW_ITEM_FN(t, s, fn) \
+	[RTE_FLOW_ITEM_TYPE_ ## t] = {\
+		.name = # t,                 \
+		.size = s,                   \
+		.desc_fn = fn,               \
 	}
 
 /** Information about known flow pattern items. */
@@ -107,8 +148,17 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = {
 	[RTE_FLOW_ACTION_TYPE_ ## t] = { \
 		.name = # t, \
 		.size = s, \
+		.desc_fn = NULL,\
+	}
+
+#define MK_FLOW_ACTION_FN(t, fn) \
+	[RTE_FLOW_ACTION_TYPE_ ## t] = { \
+		.name = # t, \
+		.size = 0, \
+		.desc_fn = fn,\
 	}
 
+
 /** Information about known flow actions. */
 static const struct rte_flow_desc_data rte_flow_desc_action[] = {
 	MK_FLOW_ACTION(END, 0),
@@ -527,12 +577,8 @@ rte_flow_conv_item_spec(void *buf, const size_t size,
 		}
 		break;
 	default:
-		/**
-		 * allow PMD private flow item
-		 */
-		off = (int)item->type >= 0 ?
-		      rte_flow_desc_item[item->type].size : sizeof(void *);
-		rte_memcpy(buf, data, (size > off ? off : size));
+		off = rte_flow_conv_copy(buf, data, size,
+					 rte_flow_desc_item, item->type);
 		break;
 	}
 	return off;
@@ -634,12 +680,8 @@ rte_flow_conv_action_conf(void *buf, const size_t size,
 		}
 		break;
 	default:
-		/**
-		 * allow PMD private flow action
-		 */
-		off = (int)action->type >= 0 ?
-		      rte_flow_desc_action[action->type].size : sizeof(void *);
-		rte_memcpy(buf, action->conf, (size > off ? off : size));
+		off = rte_flow_conv_copy(buf, action->conf, size,
+					 rte_flow_desc_action, action->type);
 		break;
 	}
 	return off;
-- 
2.18.1