From patchwork Tue Apr 13 15:16:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Etelson X-Patchwork-Id: 91282 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 355E2A0524; Tue, 13 Apr 2021 17:16:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 82C9416110A; Tue, 13 Apr 2021 17:16:32 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2071.outbound.protection.outlook.com [40.107.220.71]) by mails.dpdk.org (Postfix) with ESMTP id 3BB44161107 for ; Tue, 13 Apr 2021 17:16:31 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PvbCbuQM/GrTSNkVPBnil8ged4kzuckcy+Nh1QZSD+47hLwtozj4vLxYK6wcFaaqxUjlBHaS9EXvj9z5uCJLP586XkkjCj9Gp28Rs1Qw68EE8CgTxQYqGQad5V3w+kJ5v2SwkJ3KLQTbfTL9WQVBcS8qWaRGg5RJdeznxS3cqYxnb9hoih2AWmQU7f4y/xIi1bu3x/PZzYKeeDdFdh2CLNPA7iOCIRRBa9whIyFDMWInZWhDuXAWkCjPfbVvSChRqfrwlGKZCZFc5JFxxarSUM7W2/VVbgh9mdZ5yKJmmRY8/6AEG3ruGLTu1uwqLHiExeJMXvqMzLjlrE84G7zQyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9DX4Q4OCGAGx7tmFIJDXrRthf2YJdnVT4qS1t2rW2CA=; b=GIZOezNqow2cJNVIxTjch2lwtq2HSJJejA923lQoaxNwlsHnztryntRBmNWdiI8y+7d/YNFywvGVkUj/0PsEE5jOrqixjwVmACgiHiXw3+rvQ+9jXokiM4zi7nsTBed9vVxw0YC8SLQOkKzgnvg3HlxJEnzKqyfjIYc5quS4Q0/2Klx9iAORyT6o4VHOVQ3dl4Vnd6TgWAontdytaRipy8+OAkiOM3E7e8dZr3JwaQeLHtAmY8K7o34YuFu+pN9aGVS699HJG5JgXPd7/Ox/Ikhsidimh7PEC0oVEk9maLaainLPeKKMZev8aHDrURZRox5cbirUWFhXjahpalVjSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=gmail.com smtp.mailfrom=nvidia.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9DX4Q4OCGAGx7tmFIJDXrRthf2YJdnVT4qS1t2rW2CA=; b=dw+3tK7NkE0XsCVX1O8CFwjTxK/VZQSa9M9rPfXbGTHNrPTXlomPSwxudbojDTJ+t0EQyYYfahTLjSlc8L34GWEVmiPjNyrla96XfHl/P9O1Gsc4REL/CI7r3YQwo/uNd8x61hVvg4svHjHji0B5bSpxFQDyZZB6kju4R7PvWYj928IbcCy+7vyTRTZd0X1kK0N2TssBYg852X1p/17lztNefNLeaNHVxyV+xNg+rrK5TP8oX1C1Yy4Ec4mopbVJNZ2F1exLPeedYJfp6EFKE45coL9lJ+N00vb2za2TN9Hg0v84TmR4wLgfySwSdOvCt5etLKkJ5ZPGQXnTb8i1LQ== Received: from DS7PR03CA0166.namprd03.prod.outlook.com (2603:10b6:5:3b2::21) by MN2PR12MB3006.namprd12.prod.outlook.com (2603:10b6:208:cd::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Tue, 13 Apr 2021 15:16:29 +0000 Received: from DM6NAM11FT016.eop-nam11.prod.protection.outlook.com (2603:10b6:5:3b2:cafe::d1) by DS7PR03CA0166.outlook.office365.com (2603:10b6:5:3b2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.16 via Frontend Transport; Tue, 13 Apr 2021 15:16:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; gmail.com; dkim=none (message not signed) header.d=none;gmail.com; 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 DM6NAM11FT016.mail.protection.outlook.com (10.13.173.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4020.17 via Frontend Transport; Tue, 13 Apr 2021 15:16:29 +0000 Received: from nvidia.com (172.20.145.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 13 Apr 2021 15:16:25 +0000 From: Gregory Etelson To: CC: , , , , , , , , , , , Date: Tue, 13 Apr 2021 18:16:05 +0300 Message-ID: <20210413151606.11522-2-getelson@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210413151606.11522-1-getelson@nvidia.com> References: <20210413151606.11522-1-getelson@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.145.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: 2b000b01-1a87-40de-d38e-08d8fe8f1ce1 X-MS-TrafficTypeDiagnostic: MN2PR12MB3006: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Exchange-Transport-Forked: True X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uAh02Uq1ZboYYgJ+yiGau6FwHK0N5gRquTf9DuP5FJClFbvJes9p8N+ACZXVhvfS3guViHNpl4gIho15OZsJ6ny9Viw+qrX0vI9vSxxNwR3QQjQhapgzWabhZ71vdI4Pek+FfT82nXaksQuw9Nd2NPD1iYHl6Pg0e91H4BbvRecDXfIj1IsFJnaRfAuz/QBQdZy5YYFTR5N3UVHVfZqY3Ps5jufrVvzVzWSyF4sSHikmViaMJCixXMFKyNeGqVlhHiGZLSVSQ2fiAFPi4BmyELd/n/2lAuNSfk6RlNicvvnV9roCT+UKAM4CIyB/VnuP3aZ2cS9JMdUc38kY5S3Je8agsPE/+y4INEtaNNURfrWyYlQQhsV7yuQIDBDcX1U5LurPUEY8YUgoGYd3JTqXZJVGH8sZFdiXjbKmRHBGHciXQG7IBBvKBJP2jleurbHEpJ+OsdAocwW/xuNIdNIFkzqKKeDxgZOLYkKE59ALvpGBGIQPFO2SnpnEbAiz22fZ5BJkWzmkaqXB0LFVAq07f9vkVTfXOW0E9+urNXfwVTIhlXaDUULEXdgAJi38sJMasAxhmlxMSUzqpActoStH1V2DUoKQ9x/SDnfNvjdGCa35EdkfYftsmwSGwJOnTAzxprVTsJmSspZKZQfONZksk8Tui0obikGtcX5y7oYtWZg= 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)(376002)(39860400002)(396003)(136003)(346002)(36840700001)(46966006)(426003)(8936002)(36860700001)(47076005)(186003)(83380400001)(107886003)(6286002)(70586007)(2906002)(82310400003)(2616005)(86362001)(478600001)(8676002)(55016002)(336012)(70206006)(356005)(6666004)(16526019)(7696005)(6862004)(316002)(82740400003)(37006003)(5660300002)(6636002)(54906003)(1076003)(36756003)(36906005)(26005)(4326008)(7636003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 15:16:29.0265 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2b000b01-1a87-40de-d38e-08d8fe8f1ce1 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: DM6NAM11FT016.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3006 Subject: [dpdk-dev] [PATCH v3 1/2] ethdev: add packet integrity checks X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Ori Kam Currently, DPDK application can offload the checksum check, and report it in the mbuf. However, as more and more applications are offloading some or all logic and action to the HW, there is a need to check the packet integrity so the right decision can be taken. The application logic can be positive meaning if the packet is valid jump / do actions, or negative if packet is not valid jump to SW / do actions (like drop) a, and add default flow (match all in low priority) that will direct the miss packet to the miss path. Since currenlty rte_flow works in positive way the assumtion is that the postive way will be the common way in this case also. When thinking what is the best API to implement such feature, we need to considure the following (in no specific order): 1. API breakage. 2. Simplicity. 3. Performance. 4. HW capabilities. 5. rte_flow limitation. 6. Flexability. First option: Add integrity flags to each of the items. For example add checksum_ok to ipv4 item. Pros: 1. No new rte_flow item. 2. Simple in the way that on each item the app can see what checks are available. Cons: 1. API breakage. 2. increase number of flows, since app can't add global rule and must have dedicated flow for each of the flow combinations, for example matching on icmp traffic or UDP/TCP traffic with IPv4 / IPv6 will result in 5 flows. Second option: dedicated item Pros: 1. No API breakage, and there will be no for some time due to having extra space. (by using bits) 2. Just one flow to support the icmp or UDP/TCP traffic with IPv4 / IPv6. 3. Simplicity application can just look at one place to see all possible checks. 4. Allow future support for more tests. Cons: 1. New item, that holds number of fields from different items. For starter the following bits are suggested: 1. packet_ok - means that all HW checks depending on packet layer have passed. This may mean that in some HW such flow should be splited to number of flows or fail. 2. l2_ok - all check for layer 2 have passed. 3. l3_ok - all check for layer 3 have passed. If packet doens't have l3 layer this check should fail. 4. l4_ok - all check for layer 4 have passed. If packet doesn't have l4 layer this check should fail. 5. l2_crc_ok - the layer 2 crc is O.K. 6. ipv4_csum_ok - IPv4 checksum is O.K. it is possible that the IPv4 checksum will be O.K. but the l3_ok will be 0. it is not possible that checksum will be 0 and the l3_ok will be 1. 7. l4_csum_ok - layer 4 checksum is O.K. 8. l3_len_OK - check that the reported layer 3 len is smaller than the frame len. Example of usage: 1. check packets from all possible layers for integrity. flow create integrity spec packet_ok = 1 mask packet_ok = 1 ..... 2. Check only packet with layer 4 (UDP / TCP) flow create integrity spec l3_ok = 1, l4_ok = 1 mask l3_ok = 1 l4_ok = 1 Signed-off-by: Ori Kam --- doc/guides/prog_guide/rte_flow.rst | 19 ++++++++++++ lib/librte_ethdev/rte_flow.h | 47 ++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index e1b93ecedf..cccc0cfd05 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1398,6 +1398,25 @@ Matches a eCPRI header. - ``hdr``: eCPRI header definition (``rte_ecpri.h``). - Default ``mask`` matches nothing, for all eCPRI messages. +Item: ``PACKET_INTEGRITY_CHECKS`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Matches packet integrity. + +- ``level``: the encapsulation level that should be checked. level 0 means the + default PMD mode (Can be inner most / outermost). value of 1 means outermost + and higher value means inner header. See also RSS level. +- ``packet_ok``: All HW packet integrity checks have passed based on the max + layer of the packet. + layer of the packet. +- ``l2_ok``: all layer 2 HW integrity checks passed. +- ``l3_ok``: all layer 3 HW integrity checks passed. +- ``l4_ok``: all layer 4 HW integrity checks passed. +- ``l2_crc_ok``: layer 2 crc check passed. +- ``ipv4_csum_ok``: ipv4 checksum check passed. +- ``l4_csum_ok``: layer 4 checksum check passed. +- ``l3_len_ok``: the layer 3 len is smaller than the frame len. + Actions ~~~~~~~ diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index c476a0f59d..0dbc5e0c44 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -551,6 +551,15 @@ enum rte_flow_item_type { * See struct rte_flow_item_geneve_opt */ RTE_FLOW_ITEM_TYPE_GENEVE_OPT, + + /** + * [META] + * + * Matches on packet integrity. + * + * See struct rte_flow_item_integrity. + */ + RTE_FLOW_ITEM_TYPE_INTEGRITY, }; /** @@ -1685,6 +1694,44 @@ rte_flow_item_geneve_opt_mask = { }; #endif +__extension__ +struct rte_flow_item_integrity { + uint32_t level; + /**< Packet encapsulation level the item should apply to. + * @see rte_flow_action_rss + */ + union { + struct { + uint64_t packet_ok:1; + /** The packet is valid after passing all HW checks. */ + uint64_t l2_ok:1; + /**< L2 layer is valid after passing all HW checks. */ + uint64_t l3_ok:1; + /**< L3 layer is valid after passing all HW checks. */ + uint64_t l4_ok:1; + /**< L4 layer is valid after passing all HW checks. */ + uint64_t l2_crc_ok:1; + /**< L2 layer crc is valid. */ + uint64_t ipv4_csum_ok:1; + /**< IPv4 layer checksum is valid. */ + uint64_t l4_csum_ok:1; + /**< L4 layer checksum is valid. */ + uint64_t l3_len_ok:1; + /**< The l3 len is smaller than the frame len. */ + uint64_t reserved:56; + }; + uint64_t value; + }; +}; + +#ifndef __cplusplus +static const struct rte_flow_item_integrity +rte_flow_item_integrity_mask = { + .level = 0, + .value = 0, +}; +#endif + /** * Matching pattern item definition. * From patchwork Tue Apr 13 15:16:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Etelson X-Patchwork-Id: 91283 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 3E13FA0524; Tue, 13 Apr 2021 17:16:40 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CCAB7161111; Tue, 13 Apr 2021 17:16:37 +0200 (CEST) Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam08on2079.outbound.protection.outlook.com [40.107.101.79]) by mails.dpdk.org (Postfix) with ESMTP id 143FB161110 for ; Tue, 13 Apr 2021 17:16:36 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bT6iDGxZYkP+b72gzIfZ9ok5oktouCltzOEvp5JtvYRlZ1IdOvucWZ+Ze/EuGsVtpupTJp1fNQnt2fJ4qlMOW+n+C1K5Scoc3xibTYfoG0JmqibddplF2seUSYQqyM7/GK7fRiYF4u3isiO5Rrxsb0FSVJVTsXPo1jIcOZYgY738suH+9kcQate/OBQPXycjazcFXozaQi/Csk7WbF+D1i0+5TPD/1XKgg2eju+n4TZY66lRv+x3W+IoZTJrUCNQvkr3yw1LbYDJCf1JnG8Uqm6rKn4OiLTi3jQCYzVEJcKvdFCi96VCmJ163VM2yYOvcNJevQVBDToXrbBoXrZ5uQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NBvBxQETFzkdrC2ygJZwUy/BxZOqtOiCdoS4os3vBEY=; b=EJEDf5e7mT9ah5Tup/DFYZLGZQNs75HE3JyDxKfCT/1Emsezx/lJx0w80W1zTLlTeHX3rXsCGD4nXlBqadiUOVrDqWrwmk1VsxFlLXkgUOACrYjHaXgRyOHu+9KXBLw7T57o6ulc16baWXALUOK9RJ82GFxf/YPNMFO0qQwKwU3EP2gq3Hd5fohb/GKXQvzqSyfZkjnCHjX7mGyOpuRWcGHTp4g+HfKxXreDZElLDF6eYQsYUAtBI2knIxZIhZwRcR7KGFlxpPQjqT4xg8c0E7DIiM8x1t25DrTWUz+aehn8R+RyWLw68/LXtqAwr4M09ZVmeRWaiuDIbNvCNrVT2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=6wind.com smtp.mailfrom=nvidia.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NBvBxQETFzkdrC2ygJZwUy/BxZOqtOiCdoS4os3vBEY=; b=DD+L7x4zcSqMum9XuS3VVQi1nO/Ci5uP5v3VsMWbzNgHcdvQy3WcgAFqwNpIHa6+br5L4x3JPDZ8xtCmNEklV09LQWSWmg2aO6hqlaXmf6vBhPO/1Ki/kJ2DsXxdldzOjFxDQ43EMohYUkfoCP9BSxpRcUMmDyidXK1TOFR1DfDE0xhsaTTNpIb2FAuJ2V8x8SNMcj1akHBioV2ereBW7MpOlxUJZTZbpFXD7YuukvnrQNbZYIT8cwxWxA6f4g/E7AcRM8/0ngzy7vbNsTXBo7S64D+/sd3w/HpQRTzNMDeSh3J0gfAbjLcc9XnRxUqISqzIOLjLVEeATzu2xnZX+A== Received: from DM6PR06CA0085.namprd06.prod.outlook.com (2603:10b6:5:336::18) by CH0PR12MB5121.namprd12.prod.outlook.com (2603:10b6:610:bc::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.17; Tue, 13 Apr 2021 15:16:33 +0000 Received: from DM6NAM11FT012.eop-nam11.prod.protection.outlook.com (2603:10b6:5:336:cafe::37) by DM6PR06CA0085.outlook.office365.com (2603:10b6:5:336::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.16 via Frontend Transport; Tue, 13 Apr 2021 15:16:33 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; 6wind.com; dkim=none (message not signed) header.d=none;6wind.com; 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 DM6NAM11FT012.mail.protection.outlook.com (10.13.173.109) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4020.17 via Frontend Transport; Tue, 13 Apr 2021 15:16:33 +0000 Received: from nvidia.com (172.20.145.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 13 Apr 2021 15:16:29 +0000 From: Gregory Etelson To: CC: , , , , , , , , , , , , Xiaoyun Li Date: Tue, 13 Apr 2021 18:16:06 +0300 Message-ID: <20210413151606.11522-3-getelson@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210413151606.11522-1-getelson@nvidia.com> References: <20210413151606.11522-1-getelson@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.145.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: 276f57a0-a272-4a66-b9c0-08d8fe8f1f6d X-MS-TrafficTypeDiagnostic: CH0PR12MB5121: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Exchange-Transport-Forked: True X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RMFeQa/zcs+cCDRH7UFZG7/i0m8nLk40BDi9CGtBQgpIOoezQJffMx3DUOR3K2BtXZKeGzRZ4mg3L2mt4t5PUk6bMA/oj+WG6WgVeMtewdCovlnhri7WXXMAKj5ksFomjXrXDbw1UJMkgllLATo7CLYNcFBv/pdD7c4tuxM1JQIS5pJlh54o1irPfUHtoAAavBEpUBoBLLZtuP5rxEKfJ19N1pKxGgJHeYD28FpR40a/cLRTnrwD9bixdN8+/z6gmM8YWNFNo6GAxu0HgIRa0wYE+2C6rK+stBjYHOPLbS5/RouD+scFQ/A3MNXwQPxx/yVb0xFkNjnXccToJKbMX3P8fmHB1sFogE05pflbgCLff8ze9H5bU5NsIkSJyvJCcGbLVnKiPiWfhzKEMPjDvCFeYXWl8S9/tJDNloAZFTb/JJjdbPc9wsMs9kjTMNUWRmF7gv3R57JabOSbGCAj0zZf7caRb5zVyl0ynO1NeKLSRUGkcN7CmDECoqj6vNZ4HW0zSesn19uKnXgPY2C2cF5OaEoPI+xkhfMM9gTKE57updRHgnZ6N9OxVUYtPCRuDp5b/sF69y2ng5S9jR42AfjjvuFh+aIkKj4Q546t1o66y74zyyJI+/nrYtHlEdsIl/anw4/nOvmcibv11NHaROwGxSihUwmzniYrU1iGGss= 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)(376002)(346002)(396003)(136003)(39860400002)(36840700001)(46966006)(55016002)(26005)(70206006)(316002)(36906005)(82740400003)(8676002)(478600001)(356005)(6666004)(8936002)(70586007)(6636002)(37006003)(36860700001)(7636003)(54906003)(5660300002)(2906002)(16526019)(2616005)(186003)(83380400001)(1076003)(4326008)(47076005)(6286002)(336012)(426003)(86362001)(6862004)(82310400003)(7696005)(36756003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2021 15:16:33.2928 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 276f57a0-a272-4a66-b9c0-08d8fe8f1f6d 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: DM6NAM11FT012.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR12MB5121 Subject: [dpdk-dev] [PATCH v3 2/2] app/testpmd: add support for integrity item X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Ori Kam The integrity item allows the application to match on the integrity of a packet. use example: match that packet integrity checks are ok. The checks depend on packet layers. For example ICMP packet will not check L4 level. flow create 0 ingress pattern integrity value mask 0x01 value spec 0x01 match that L4 packet is ok - check L2 & L3 & L4 layers: flow create 0 ingress pattern integrity value mask 0xfe value spec 0xfe Signed-off-by: Ori Kam Signed-off-by: Gregory Etelson --- app/test-pmd/cmdline_flow.c | 39 +++++++++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 7 ++++ 2 files changed, 46 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index fb7a3a8bd3..b5dec34325 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -289,6 +289,9 @@ enum index { ITEM_GENEVE_OPT_TYPE, ITEM_GENEVE_OPT_LENGTH, ITEM_GENEVE_OPT_DATA, + ITEM_INTEGRITY, + ITEM_INTEGRITY_LEVEL, + ITEM_INTEGRITY_VALUE, /* Validate/create actions. */ ACTIONS, @@ -956,6 +959,7 @@ static const enum index next_item[] = { ITEM_PFCP, ITEM_ECPRI, ITEM_GENEVE_OPT, + ITEM_INTEGRITY, END_SET, ZERO, }; @@ -1307,6 +1311,19 @@ static const enum index item_geneve_opt[] = { ZERO, }; +static const enum index item_integrity[] = { + ITEM_INTEGRITY_LEVEL, + ITEM_INTEGRITY_VALUE, + ZERO, +}; + +static const enum index item_integrity_lv[] = { + ITEM_INTEGRITY_LEVEL, + ITEM_INTEGRITY_VALUE, + ITEM_NEXT, + ZERO, +}; + static const enum index next_action[] = { ACTION_END, ACTION_VOID, @@ -3373,6 +3390,28 @@ static const struct token token_list[] = { (sizeof(struct rte_flow_item_geneve_opt), ITEM_GENEVE_OPT_DATA_SIZE)), }, + [ITEM_INTEGRITY] = { + .name = "integrity", + .help = "match packet integrity", + .priv = PRIV_ITEM(INTEGRITY, + sizeof(struct rte_flow_item_integrity)), + .next = NEXT(item_integrity), + .call = parse_vc, + }, + [ITEM_INTEGRITY_LEVEL] = { + .name = "level", + .help = "integrity level", + .next = NEXT(item_integrity_lv, NEXT_ENTRY(UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_integrity, level)), + }, + [ITEM_INTEGRITY_VALUE] = { + .name = "value", + .help = "integrity value", + .next = NEXT(item_integrity_lv, NEXT_ENTRY(UNSIGNED), + item_param), + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_integrity, value)), + }, /* Validate/create actions. */ [ACTIONS] = { .name = "actions", diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 36f0a328a5..f1ad674336 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3783,6 +3783,13 @@ This section lists supported pattern items and their attributes, if any. - ``s_field {unsigned}``: S field. - ``seid {unsigned}``: session endpoint identifier. +- ``integrity``: match packet integrity. + + - ``level {unsigned}``: Packet encapsulation level the item should + apply to. See rte_flow_action_rss for details. + - ``value {unsigned}``: A bitmask that specify what packet elements + must be matched for integrity. + Actions list ^^^^^^^^^^^^