From patchwork Tue Oct 25 07:58:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119056 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 C16D0A0543; Tue, 25 Oct 2022 09:59:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B1CDA42836; Tue, 25 Oct 2022 09:59:55 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2133.outbound.protection.outlook.com [40.107.220.133]) by mails.dpdk.org (Postfix) with ESMTP id 6E14F4282F for ; Tue, 25 Oct 2022 09:59:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KM9ZKo6g3rbUgNv25Vh6j72oQeGUvVY5EDqfnGhWHrJi4X9uevsAihWYkl4mPtHmS4N3ouQJ30RDWt/ESBPUFHleJG6JGla5RX0zbKlvJ9x2AtTMK1hsxXQUzcWG/SH56kCmDkurT027ctaljAoQXK0WiT3ef08puwg5b0zwAEomtuzHT5IAnPzrgatv1oM+74FXul+6UQ+tfdWoQnYv47lUFYLQvps2hBw734tjna1iaqJasgCWSnT12Vn15yz0M16OeOS8xx0IFc6sMHVNimpGkHPbIRN0t4EjdHFFVD0NQ/9jhb/I7F/GVFPCrhzlTVlf6l/B+Vyo95aOunstkg== 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=LjL4A0uNF3fy4xK764sL9QlZUHOjn3oYKQ4q9LCtu/Q=; b=FJGpG/Ofv2sdcqe3tsAW/DY4dbtSZQYD27KLZ8B+lVcnMLe6w3Sv/5Z63WVp9KXNer1LgR6rl67Ti70A5mYZxazRChG82sHd5OtDnbG9yDLWM2W/pmtQdupRDnqGU7v6Oxqpj6FgskXM8LJBCrBu7sUfoxKuBPR9OoWAHvTAf/9ViCWxXoti6P9Jc+HoZVk3kRNHP/8PSGatiQpuBW/SXsYjuD6W59JaPp0eTMuSsP6laGoTofOMrGoWyu+iRdjipYXxGlDr3VVRzTtK1W0F1TUwFanYmaBwWP1hjLNNUNdcJWUIfZ/1mMCCooRxNTNxSjfq6X6WAe3sXlZLKc06vw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LjL4A0uNF3fy4xK764sL9QlZUHOjn3oYKQ4q9LCtu/Q=; b=TIUBoIXxnHwPHRLkYK7DedqFOM2e5gH/yMliJrZ8Pvh4tfgNbSeVLWXPX2iMcKL5hPzkFyr7l5ASzMJAbupIK9Zr7P/q1+e+V/fMmMTdsO/R73BGmjJei1vxGex+4GKksbwbwJMsjX8GaIDhG3cjlFC8svVPJGkoykLpTEAOeI8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 07:59:53 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 07:59:53 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 01/26] net/nfp: fix the app stuck by CPP bridge service Date: Tue, 25 Oct 2022 15:58:53 +0800 Message-Id: <20221025075918.7778-2-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 1b444e0f-6586-43ef-4e7d-08dab65ee60b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IiSOLmmdIZn66n06kV/gH3HsEiI+m9vocfjUQQMj+0gI4tfmIUmCwf6BqWnsjO7qLHhouamZ4Pl1NxaBym+A38qgqjwCDLOeuo6ZWUGCHvwUYqJi8Z26YkNffc119CRYVoT7jjhSSV1/h3chk86GEbeVmM2lfTaEfkl51RV92or9U7MF8YdIYmTbzTkj2XwVkG2VJc+Q5OLZbfTFGYioRSHbbVfnT1MWswMnhNJmdzp/q/hXyGZzCqt4qbGD1LJp+G0y7FXPFC/9Bu5493ESDQQboyJKYPmd9FL+w+7/fXoEyxrdEPDjlf42U3K+yUP/kr/9mFervuke/saVuYBSA1zRwJ7UZtZAnqBqFjqnFkSlV7gZa+J1PTOn7a4UEpOga4+ioWoHdgyRlte64wJhHQdP17uSr+vxFuyjM7SvzwEwtnyk2pBMp3w+wQXIuHZoEbVghjrbQWMmhbiHTozjWAplELSJ14rbbdr97HscEDVpFJnm+3dLPD3dnjADTOgdljRYcrTUip26p6nhzCpaRbDApOPIS3dkA+bfnRDkNDEy34z7mAnC1w9MJl9hgRDfiviD08okUWzoGxkxj6Q1IKLV+658GNCHV3YzyN8BAHxsyIT6hX9B4y4vAQz/jBjTlpsqxdgqaYQbLJQO9XnLcAgiEYZLArjog0zX4x70b4rEz2qzKkURpA1UKRKWE9f99VrvrF+3rgOysZnJq3Y49pDvdeos83QypW2iOabNrkUiz62kadXKVI8fd/ltv8DzhO4XLtpjtyTHTMYWhvEyDA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VNW3uetRWG5Hm7P3xzOX3+rI8GhS9OQSF13dm1ZIvrQqBD1SNZqXhD+RXKLitvlK8pi7ADirrlK0BZxO+ySypoh4+WEvEF6Ht2EVeAiRGu0xMNTE/kTiwgUliMYYQtOR4CUQSpTbXUN+cPJ20k2psz8ZK2F9mUpxwJjyJ/KHU/95dCEncf8toV3Y055swPwPtdChdAfKW1Fot+UHu8AzR8NExm3f+AVNJ/gN6lHnaHQBgp0NwCOYLGk1/z/g15/QwHbKmm8Fwudwpj+PvdmclaQTq7HOOEmq59SSlD3lkweCvjbJ4AA9PANAT/hBWIjNKk7+kfnvNDOMz1sV9I/gFXiCwTZ55p9ME4TOgn3II55G5ietqK/1mj4elechvT49SPa1TxCWutPbr6LMMcJewwdhyoD4dIbJEEg+rO56qr8ZYFn4K0d22246MlRwg7Okz0o83wbHkYqP+RQc5+KxfOfj2WZW7Qjqx7h1XJeYlqe5pbJ145oXWCR0/yYpP6MwZWeXVPunbAgYgflFNgRkXKKw08bP8FI7oFhuhqZkZXHvN/WkfAbay/iWqC4PRIJNy7i80oGeA4tnNw2ka9EIbrGhHNDAsNaxP3aTRIqakMD39rPZgOlWoFJOrzromlvanTSPAGTA3CWYZl7usytxehiDRsiSw26886EOQrKGON0aMYDiFk1keWyA/bx2bdLbrny4JSCskWcHbHL6yOhyF3VAZNFf90xEIEstRnH9L29hZUpIKLqGlwq8MWK++9EPDDCF0gEvxmu1KJ7AenqhTFFcx/AiUqljv9EGwfd7qVDHg8cEzAJm1koIWAAu/S+JlVT5FNGJO7Me/0oQ9QEfY3yZMupSGfujP7aT3vgooiENOQP3ahYS5lJd3XPLiIPBRYLHS75RI86mzwGpLhKuv82jPy9QMXvDPSnJbOCS8IIShfLJqP8JhPjYa9zpfyaI3kDIS9kf6LToZMKXt71m189wX8J2I/gqL/fCiUiAQbXRwUSjBw847bv2x5u8DJOEtsyciHW5eTJwwF+FmVJZdKD76QMg6Vg+RueRHUxzWk2yMxnuL1RWXtdpX2ygorJ89Kl62DBhzs6d6jc+HHdEca47cbKiJez8Hw0zqB7017ZYNFgLj9PtXriiBTw4Vyc5gikeTILQmattWw9Q7cvpJkh1EN3DyW/s1RIrm7rS4CMgiI4RwOHSrYNmlpb9B7XbGkdBhl5w9BdPX9Zj+AEeY0vlDM5Op02M8+dxttfugRYprUvSJn1rpGOqiIX9/Ti+yOHBMko+DImgpiiPP+r+61WDaXy9twzXesTZMYA+UkW7DQ1PHREijZK8JBhtDB8yWj0q7/rx/J7V8O7WNoDpkrPxyFknjdfULuyTQTXjkfwy3LntdVgLuHkSADQEl1AsM20zmVxy6D1NpTe6yOsOG57Lmkgkh+jzzTptsLTQ0Hf7+PMxuUxxPRHrXpoKCllQ2RaC2BOh7hfzwEur5Sw7mWhcBI9RPr1ByOvGJmG4T6c4Vqmh3Yy/JVCk4xCNntWgjqS3NlIgknfOCJaN6X6vZxAQuL9X/4PVBpu6cMI9sruO8wk1ffSsTaDqbi4x3lbMzPvo31oLGWx1g2W6KhuZxg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b444e0f-6586-43ef-4e7d-08dab65ee60b X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 07:59:53.0902 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ylul3x9RfXcSBhOxloLId0YyGLQM2o+ih6LrpY65XbSOOo0LtHD6vReZrOZR1w47duMD+hNBmviT1AHJ7wT5CAZF/kSBC7DUHkRrUIFZfqw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 The CPP (Command Pull Push) bridge service is needed for some debug tools, but if no debug tools has ever been run, the initial logic of CPP bridge service will block in accept() function call, and the DPDK app can't exit normally. Fixes: 678648abc64c ("net/nfp: fix service stuck on application exit") Signed-off-by: Chaoyong He --- drivers/net/nfp/nfp_cpp_bridge.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/nfp/nfp_cpp_bridge.c b/drivers/net/nfp/nfp_cpp_bridge.c index db4b781302..e650fe9930 100644 --- a/drivers/net/nfp/nfp_cpp_bridge.c +++ b/drivers/net/nfp/nfp_cpp_bridge.c @@ -379,6 +379,7 @@ nfp_cpp_bridge_service_func(void *args) struct nfp_cpp *cpp; struct nfp_pf_dev *pf_dev; int sockfd, datafd, op, ret; + struct timeval timeout = {1, 0}; unlink("/tmp/nfp_cpp"); sockfd = socket(AF_UNIX, SOCK_STREAM, 0); @@ -388,6 +389,8 @@ nfp_cpp_bridge_service_func(void *args) return -EIO; } + setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)); + memset(&address, 0, sizeof(struct sockaddr)); address.sa_family = AF_UNIX; @@ -415,6 +418,9 @@ nfp_cpp_bridge_service_func(void *args) while (rte_service_runstate_get(pf_dev->cpp_bridge_id) != 0) { datafd = accept(sockfd, NULL, NULL); if (datafd < 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) + continue; + RTE_LOG(ERR, PMD, "%s: accept call error (%d)\n", __func__, errno); RTE_LOG(ERR, PMD, "%s: service failed\n", __func__); From patchwork Tue Oct 25 07:58:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119057 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 14C66A0543; Tue, 25 Oct 2022 10:00:06 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9E0BA42BA7; Tue, 25 Oct 2022 09:59:59 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2113.outbound.protection.outlook.com [40.107.223.113]) by mails.dpdk.org (Postfix) with ESMTP id 0647842B81 for ; Tue, 25 Oct 2022 09:59:57 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RzJUw861NwGltgi2P1okBJMJGwLQnXKqqsLT3dAZlPMjwSFygI6t02TjdLzixPJgF7PQQr0wBR20CqU2UGJhv/pnk6Jt6L0GzY1/xBQncdPFazMtlF7EFND2Tuz8snufoLks0vJveRsYfV+sLLCUg8IjWKhf3YXIIGQB0nL0bhZDgitWsjzuwbYCoz4XVWx7hqGmvkf7tThxgC3QBHg5tIYnRCRHBU/un7TciAE/e0W5VLpQ1yKgR4udEMViZMBpywgUaMtGasQ+Tddnxho+USGEOMh0Z/j1zsQT/UrvrAJxKK6cqfGBLfR/EuqSH2Qk+oLPOKd5uFCPxJ8G0WvS5w== 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=IOdK0BFwvJk/V5ENo+oBpieLaCJMPdwG2DQKsJq9HOs=; b=DvL/3tBn7ORQJHDJZS2dRM0PyFkTwcAXFslRsVX5t7wZ3SVKMrsszoliRTeJ5IK/lPytmRZQvF9F+GosjRIVmakIJ3ISsgis4OrG4RjMszJbBV7/ixdceIZHaC3HEpXClaCHF+pJffocmNUgQaJ708c7WVub+LeuaXmWlY7l+Pto67cBlXo9iPOR4YT9TYI7BnUAtgUqODqTLpXKo1gjNjneFlaCSD+JxIHhLYYRGbnzaLecqwBsCSTSL7+9wIGlMoE/edIdWzYWTKSmzDM+mZpeDc8yn7IWcQrc4sDyBi3aig+Av2Kom3bnfIUd5kvYq/T8cQ79/j2JJgkaHeEu+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IOdK0BFwvJk/V5ENo+oBpieLaCJMPdwG2DQKsJq9HOs=; b=tMO0sq85y+CooKWeH+QfMaQwZD2LuuiclOQF5Pdb06Lc4qz7WRWTljrx/DtGvktV1PJVBXdOyAnUR1ecPJCc04KnXkll2FsHz14u8SCXSZF7gsIH5V5LcpOghGy6C3oJIKDFprxG1mwF7jZtvPmAD5cRgJPsBqPzr4ERZJF+TUc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 07:59:55 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 07:59:55 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 02/26] net/nfp: support IPv4 VXLAN flow item Date: Tue, 25 Oct 2022 15:58:54 +0800 Message-Id: <20221025075918.7778-3-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 953f49b4-9b74-4d47-590a-08dab65ee738 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DCwuNsUDVGXBrI5drO05q1ZvnNxHOkVUjbP3BdVS8SC3/hMBRxR60iVjZVFW2H2ev3UbeizTu05f2wstQx1tZRwPUjmvhA/AzvRIMVi+OaRd47EDKHQR7HsSriGisFIa85DePH9qQ9sR0I4H0ftZKwKLOyNGI6KujA5VLW8ODnRXYvhR4Kix20ZDqWy6UR1vrGco252KdYq8WnHq8ZCmzG5oLJ1nW4kNz/wVpiaOryOGpXDPa2FSvgVnEGml+0jpwrEGsENQNHUsIW7np7Nry8q9vkE6Zq5BS3wIGskBf8qf3BrQo5+XBAgWo36NM91drqc+016erYFQpctUQKwA6ZW9tvxmPuNTevE+V7M+ZRPyi41QV2H6llykszbkjcZqbWSCLmLa/unCyI/emQs5J7cepzy6NQlWtyagqyP/bF+LDG8kgBt5pQabLSlqN0NeWjoZlzTSPBYVc2/i1lj50bD2SDrb/jKbkMs7xBl0X+Eayrzo4OAoq7Wfzqc7owaFVli2WDhU/G4CdAE8pDOrMCjiAHYBVQ5c8dS3VhRDXBandsRUAcLyRyWVi2p5LX6RCeAn+elwex9h7rdmzfXQcf6OXSp/+uIue+X5jY229XqNEc+W0tEwvn6cTZmCoV2MoVI3jfDDXeafrEL/9E6hKpYLyd+r5GxCSK0qMFl0iJ/57++9/xD420mmV21UpiYL+QKO1Cm6lrF/CNQGGGs3F0uFstmldiCJjsbkTXAk1tchynJS1HJ76f+mnOCRCqVZ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(30864003)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(66574015)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?9rI7ZfgXhIvpSPbYZUb3VLwMhLyI?= =?utf-8?q?vzhv1XRnYLhd3W0OSNaS/Yr/zk11KHCQ7TQX9fyfTCNkOZF/8FlAYxNOl5zv7A0Bn?= =?utf-8?q?DrZdjnW2C/8qeFFJ+eRsKf2f3Jfi0dU4zX4END/mmRCHQAFtknjVXXiSVPXZF2jAx?= =?utf-8?q?AQ+AkNGRvE5hmYTEeTq/CxdWlp18oo01XNS80U1c78NfMMLrjlQESveoD/LkiQUVm?= =?utf-8?q?1H6EDE5ccm3/gFYIA1YlsbuArHDuOaUA8QQ7k89fobwldmER6eQEIRJeiJv2jkLKF?= =?utf-8?q?d3pnZ2Bw+D0c8DA3yIn+IRVIaWYV4ICmG4DHOLZpUclGujZuidbxj61XRgGnut7P8?= =?utf-8?q?myGvTX+rWX24bgAMsp6BvFWdu+waEMi0j692kLsZ0KigXdQg1r4kewCNnPkWLeaO+?= =?utf-8?q?5PYckYEK4X7WlrNP8aLGWYn7VgfQkFRWTyPYjD0h0RxKDhmw0vF68koAV1Asm4HIk?= =?utf-8?q?FvTfOv38SeIoG4CBJgvMaY0EVhE8Gy1FAakNZWrOCvnp8cv5njK3/nDKKc/lmsek6?= =?utf-8?q?csc7ZZWeXxzXJsnfWL0PB9WAotJvMWRuSA5iUXTEpAxYTbHpn2tJ74d8+Of7QyYZd?= =?utf-8?q?ZmWNblPdMYOPlJF8u6eOtXLKvdSfHkiQ+Z+7UJBXsAP1xdSOwuzZ1SDIv5VHX52et?= =?utf-8?q?eifH3T10kUBvAyjwvKR7G190qTo2KHREjN4l75UZ4QWqC2VooOvRg5FnRZ5DQtKlU?= =?utf-8?q?iwLWKzuhuyGdyWS2uAOugQi6qE8v1QWVoU4aEY2LWxb2h06rHO/s+TsDrEtfQjuIp?= =?utf-8?q?TysW9w7wAmBZyjPLFOZIeAbFu1vzxDHXM/2PLt3fKnQIyyFnRr+zdhSL5TViE0eRY?= =?utf-8?q?1qIpxQVuW7vxvX7lkMbrVln6WRkBg7NbOjuMgWAb9qyUKrUWslU0uMrY7IXDDJpdf?= =?utf-8?q?vCIF4mhaHexpErJT0ntZ+03mR95vYDaN4kTSq4xpwezzIRA0OpEJ6lPY+u8abXnah?= =?utf-8?q?0Vwh5e53a3emiAZ6Rd8p1+8zhn4zVjvW9S5pxkz/E43DSSkaUOsItZn+EI2sHxohL?= =?utf-8?q?Bhfgp1xI8oFJJjKCDO7gWfKrX9IcoASDowBuVjDC1MFYAoNo1vvvm63QgJ1pQ/Lrx?= =?utf-8?q?rlEy4i/O/FtbJyjkCQojdNWpbiO0ws3dRBgKSogcuMzRiTNi6zsMCuUYUt5Cdxsig?= =?utf-8?q?lxgH5wM5080LSKJBH7LtSAVNEWzcJCLiEGz8Oz6HEqCqIhw+6gUM47Xuv7jKHUU2z?= =?utf-8?q?NIOdl+Xm0Z0asM91CedOWHBJZi4qJ5Hr8D8bpQ8jnWNeNnMlBYxiypIvgRoxlnCCi?= =?utf-8?q?XMkgscZg6oaPRrLqZPNwhZNBOT2KyCRqD8+Qq9itlP0CsaacZ+EgPbEAN4IdLYk3Q?= =?utf-8?q?GnDGIIrIuDT+gGK/CEO0h1r6+kAWDH0bPZIKDgsme7qCbfAiIpEcW+s5Co0sdMVxB?= =?utf-8?q?pqs+f4Uw0YfjMFxl5jO2wL9jJDfZEN4TiHlbmVLh4+zkm4Kiyv8D7C7rU6p4U1wSv?= =?utf-8?q?bOEx7XrvtJpISrPN8JMxSBVkalu7url240E7AC0e6Z6yHgB5h2l4JZXJTaOXFZHgX?= =?utf-8?q?Ig9uXABMPivIrXiUPgcZshjloc7Gb+KyIQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 953f49b4-9b74-4d47-590a-08dab65ee738 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 07:59:55.2037 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +KG7xfTye/pvTg5CSeIe76Dt9+hdJIjEXmvtXiIu581BV9aX7tfMGNgBFl3IfL//gZQQtxpkD9Fzn9r/XJ1jRoTkodRttB2pui2rSyNf1ZA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the corresponding data structure and logics, to support the offload of IPv4 VXLAN item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/flower/nfp_flower_cmsg.h | 35 ++++ drivers/net/nfp/nfp_flow.c | 243 ++++++++++++++++++++--- 3 files changed, 246 insertions(+), 33 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 0184980e88..faaa7da83c 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -35,6 +35,7 @@ sctp = Y tcp = Y udp = Y vlan = Y +vxlan = Y [rte_flow actions] count = Y diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 6bf8ff7d56..08e2873808 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -324,6 +324,41 @@ struct nfp_flower_ipv6 { uint8_t ipv6_dst[16]; }; +struct nfp_flower_tun_ipv4 { + rte_be32_t src; + rte_be32_t dst; +}; + +struct nfp_flower_tun_ip_ext { + uint8_t tos; + uint8_t ttl; +}; + +/* + * Flow Frame IPv4 UDP TUNNEL --> Tunnel details (5W/20B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_src | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_dst | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | VNI | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv4_udp_tun { + struct nfp_flower_tun_ipv4 ipv4; + rte_be16_t reserved1; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be32_t reserved2; + rte_be32_t tun_id; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 69fc8be7ed..0e1e5ea6b2 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -38,7 +38,8 @@ struct nfp_flow_item_proc { char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask); + bool is_mask, + bool is_outer_layer); /* List of possible subsequent items. */ const enum rte_flow_item_type *const next_item; }; @@ -491,6 +492,7 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], struct nfp_fl_key_ls *key_ls) { struct rte_eth_dev *ethdev; + bool outer_ip4_flag = false; const struct rte_flow_item *item; struct nfp_flower_representor *representor; const struct rte_flow_item_port_id *port_id; @@ -526,6 +528,8 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV4 detected"); key_ls->key_layer |= NFP_FLOWER_LAYER_IPV4; key_ls->key_size += sizeof(struct nfp_flower_ipv4); + if (!outer_ip4_flag) + outer_ip4_flag = true; break; case RTE_FLOW_ITEM_TYPE_IPV6: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV6 detected"); @@ -547,6 +551,21 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], key_ls->key_layer |= NFP_FLOWER_LAYER_TP; key_ls->key_size += sizeof(struct nfp_flower_tp_ports); break; + case RTE_FLOW_ITEM_TYPE_VXLAN: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_VXLAN detected"); + /* Clear IPv4 bits */ + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->tun_type = NFP_FL_TUN_VXLAN; + key_ls->key_layer |= NFP_FLOWER_LAYER_VXLAN; + if (outer_ip4_flag) { + key_ls->key_size += sizeof(struct nfp_flower_ipv4_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv4_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } + break; default: PMD_DRV_LOG(ERR, "Item type %d not supported.", item->type); return -ENOTSUP; @@ -719,12 +738,25 @@ nfp_flow_key_layers_calculate(const struct rte_flow_item items[], return ret; } +static bool +nfp_flow_is_tunnel(struct rte_flow *nfp_flow) +{ + struct nfp_flower_meta_tci *meta_tci; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_VXLAN) + return true; + + return false; +} + static int nfp_flow_merge_eth(__rte_unused struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { struct nfp_flower_mac_mpls *eth; const struct rte_flow_item_eth *spec; @@ -760,7 +792,8 @@ nfp_flow_merge_vlan(struct rte_flow *nfp_flow, __rte_unused char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_vlan *spec; @@ -789,41 +822,58 @@ nfp_flow_merge_ipv4(struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + bool is_outer_layer) { struct nfp_flower_ipv4 *ipv4; const struct rte_ipv4_hdr *hdr; struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv4 *spec; const struct rte_flow_item_ipv4 *mask; + struct nfp_flower_ipv4_udp_tun *ipv4_udp_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; - if (spec == NULL) { - PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); - goto ipv4_end; - } + if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); + return 0; + } - /* - * reserve space for L4 info. - * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv4 - */ - if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) - *mbuf_off += sizeof(struct nfp_flower_tp_ports); + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv4_udp_tun = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv4 = (struct nfp_flower_ipv4 *)*mbuf_off; + ipv4_udp_tun->ip_ext.tos = hdr->type_of_service; + ipv4_udp_tun->ip_ext.ttl = hdr->time_to_live; + ipv4_udp_tun->ipv4.src = hdr->src_addr; + ipv4_udp_tun->ipv4.dst = hdr->dst_addr; + } else { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); + goto ipv4_end; + } + + /* + * reserve space for L4 info. + * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv4 + */ + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + *mbuf_off += sizeof(struct nfp_flower_tp_ports); + + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv4 = (struct nfp_flower_ipv4 *)*mbuf_off; - ipv4->ip_ext.tos = hdr->type_of_service; - ipv4->ip_ext.proto = hdr->next_proto_id; - ipv4->ip_ext.ttl = hdr->time_to_live; - ipv4->ipv4_src = hdr->src_addr; - ipv4->ipv4_dst = hdr->dst_addr; + ipv4->ip_ext.tos = hdr->type_of_service; + ipv4->ip_ext.proto = hdr->next_proto_id; + ipv4->ip_ext.ttl = hdr->time_to_live; + ipv4->ipv4_src = hdr->src_addr; + ipv4->ipv4_dst = hdr->dst_addr; ipv4_end: - *mbuf_off += sizeof(struct nfp_flower_ipv4); + *mbuf_off += sizeof(struct nfp_flower_ipv4); + } return 0; } @@ -833,7 +883,8 @@ nfp_flow_merge_ipv6(struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { struct nfp_flower_ipv6 *ipv6; const struct rte_ipv6_hdr *hdr; @@ -878,7 +929,8 @@ nfp_flow_merge_tcp(struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { uint8_t tcp_flags; struct nfp_flower_tp_ports *ports; @@ -950,7 +1002,8 @@ nfp_flow_merge_udp(struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + bool is_outer_layer) { char *ports_off; struct nfp_flower_tp_ports *ports; @@ -964,6 +1017,12 @@ nfp_flow_merge_udp(struct rte_flow *nfp_flow, return 0; } + /* Don't add L4 info if working on a inner layer pattern */ + if (!is_outer_layer) { + PMD_DRV_LOG(INFO, "Detected inner layer UDP, skipping."); + return 0; + } + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) { ports_off = *mbuf_off - sizeof(struct nfp_flower_ipv4) - @@ -991,7 +1050,8 @@ nfp_flow_merge_sctp(struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { char *ports_off; struct nfp_flower_tp_ports *ports; @@ -1027,10 +1087,42 @@ nfp_flow_merge_sctp(struct rte_flow *nfp_flow, return 0; } +static int +nfp_flow_merge_vxlan(__rte_unused struct rte_flow *nfp_flow, + char **mbuf_off, + const struct rte_flow_item *item, + const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + const struct rte_vxlan_hdr *hdr; + struct nfp_flower_ipv4_udp_tun *tun4; + const struct rte_flow_item_vxlan *spec; + const struct rte_flow_item_vxlan *mask; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge vxlan: no item->spec!"); + goto vxlan_end; + } + + mask = item->mask ? item->mask : proc->mask_default; + hdr = is_mask ? &mask->hdr : &spec->hdr; + + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = hdr->vx_vni; + +vxlan_end: + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + + return 0; +} + /* Graph of supported items and associated process function */ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { - .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH, + RTE_FLOW_ITEM_TYPE_IPV4), }, [RTE_FLOW_ITEM_TYPE_ETH] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VLAN, @@ -1113,6 +1205,7 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { .merge = nfp_flow_merge_tcp, }, [RTE_FLOW_ITEM_TYPE_UDP] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VXLAN), .mask_support = &(const struct rte_flow_item_udp){ .hdr = { .src_port = RTE_BE16(0xffff), @@ -1134,6 +1227,17 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { .mask_sz = sizeof(struct rte_flow_item_sctp), .merge = nfp_flow_merge_sctp, }, + [RTE_FLOW_ITEM_TYPE_VXLAN] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .mask_support = &(const struct rte_flow_item_vxlan){ + .hdr = { + .vx_vni = RTE_BE32(0xffffff00), + }, + }, + .mask_default = &rte_flow_item_vxlan_mask, + .mask_sz = sizeof(struct rte_flow_item_vxlan), + .merge = nfp_flow_merge_vxlan, + }, }; static int @@ -1187,21 +1291,53 @@ nfp_flow_item_check(const struct rte_flow_item *item, return ret; } +static bool +nfp_flow_is_tun_item(const struct rte_flow_item *item) +{ + if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN) + return true; + + return false; +} + +static bool +nfp_flow_inner_item_get(const struct rte_flow_item items[], + const struct rte_flow_item **inner_item) +{ + const struct rte_flow_item *item; + + *inner_item = items; + + for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END; ++item) { + if (nfp_flow_is_tun_item(item)) { + *inner_item = ++item; + return true; + } + } + + return false; +} + static int nfp_flow_compile_item_proc(const struct rte_flow_item items[], struct rte_flow *nfp_flow, char **mbuf_off_exact, - char **mbuf_off_mask) + char **mbuf_off_mask, + bool is_outer_layer) { int i; int ret = 0; + bool continue_flag = true; const struct rte_flow_item *item; const struct nfp_flow_item_proc *proc_list; proc_list = nfp_flow_item_proc_list; - for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END; ++item) { + for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END && continue_flag; ++item) { const struct nfp_flow_item_proc *proc = NULL; + if (nfp_flow_is_tun_item(item)) + continue_flag = false; + for (i = 0; proc_list->next_item && proc_list->next_item[i]; ++i) { if (proc_list->next_item[i] == item->type) { proc = &nfp_flow_item_proc_list[item->type]; @@ -1230,14 +1366,14 @@ nfp_flow_compile_item_proc(const struct rte_flow_item items[], } ret = proc->merge(nfp_flow, mbuf_off_exact, item, - proc, false); + proc, false, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d exact merge failed", item->type); break; } ret = proc->merge(nfp_flow, mbuf_off_mask, item, - proc, true); + proc, true, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d mask merge failed", item->type); break; @@ -1257,6 +1393,9 @@ nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, int ret; char *mbuf_off_mask; char *mbuf_off_exact; + bool is_tun_flow = false; + bool is_outer_layer = true; + const struct rte_flow_item *loop_item; mbuf_off_exact = nfp_flow->payload.unmasked_data + sizeof(struct nfp_flower_meta_tci) + @@ -1265,14 +1404,29 @@ nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, sizeof(struct nfp_flower_meta_tci) + sizeof(struct nfp_flower_in_port); + /* Check if this is a tunnel flow and get the inner item*/ + is_tun_flow = nfp_flow_inner_item_get(items, &loop_item); + if (is_tun_flow) + is_outer_layer = false; + /* Go over items */ - ret = nfp_flow_compile_item_proc(items, nfp_flow, - &mbuf_off_exact, &mbuf_off_mask); + ret = nfp_flow_compile_item_proc(loop_item, nfp_flow, + &mbuf_off_exact, &mbuf_off_mask, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item compile failed."); return -EINVAL; } + /* Go over inner items */ + if (is_tun_flow) { + ret = nfp_flow_compile_item_proc(items, nfp_flow, + &mbuf_off_exact, &mbuf_off_mask, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "nfp flow outer item compile failed."); + return -EINVAL; + } + } + return 0; } @@ -2119,12 +2273,35 @@ nfp_flow_query(struct rte_eth_dev *dev, return 0; } +static int +nfp_flow_tunnel_match(__rte_unused struct rte_eth_dev *dev, + __rte_unused struct rte_flow_tunnel *tunnel, + __rte_unused struct rte_flow_item **pmd_items, + uint32_t *num_of_items, + __rte_unused struct rte_flow_error *err) +{ + *num_of_items = 0; + + return 0; +} + +static int +nfp_flow_tunnel_item_release(__rte_unused struct rte_eth_dev *dev, + __rte_unused struct rte_flow_item *pmd_items, + __rte_unused uint32_t num_of_items, + __rte_unused struct rte_flow_error *err) +{ + return 0; +} + static const struct rte_flow_ops nfp_flow_ops = { .validate = nfp_flow_validate, .create = nfp_flow_create, .destroy = nfp_flow_destroy, .flush = nfp_flow_flush, .query = nfp_flow_query, + .tunnel_match = nfp_flow_tunnel_match, + .tunnel_item_release = nfp_flow_tunnel_item_release, }; int From patchwork Tue Oct 25 07:58:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119058 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 35216A0543; Tue, 25 Oct 2022 10:00:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 75D2142BC8; Tue, 25 Oct 2022 10:00:02 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2100.outbound.protection.outlook.com [40.107.236.100]) by mails.dpdk.org (Postfix) with ESMTP id 1035F42BCC for ; Tue, 25 Oct 2022 10:00:01 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TXi5yFylNa3s4nnY4O4sdaYZcJ/HiH1xDe6umDooYraE/jiYD30czb9xTvfym5BvwtpIRdiRo4xRX+n/j/Ttc8VeKo5/dloNYumfqwj0dvkF4ipDrhud7bY9RsBUFgx+T1UEUSA0bcCefPA0P7qJzPP4PHDyN1RsnzaXCkHMWGMUZ5DtOFEknSCgtCFQun9AbtsNiK8pDEvo/P65gtQJidf34FZA5iC+P7SRaBJ1eQ9G3l8ldWOORZheg/Xv57BaO0DXbjmQlZRv//zFOCOHsCocKBPu4V8HBnXbAkfQ27I+SJvgW3lnriMgQp/I/hUPf38U/IAYFxRy37789y3A6Q== 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=ZMhtGykeFGGi733dMMPy9ZTaq8ctP2m9vOJZNQzWVYs=; b=Vc8gQxe3Mli8kx53Al/6bqq+yciRHuMMpNrlYdFX0gN/hyRfpmawr990EQm6TP7tc3gXt/1ebUi03uxI9g/aR8x8wvhvwal04sac2NwxJo8CC3FUx1iNbbkKqvWe/G072gFZA8Wacm+Jd5dypicl7ezZBG2mNjw5+gut1gRvTt//BWIvEBzxxexbCcYsJvb0q36tLYbdMTe6Re7DpxKnJMfzkC1nzFh8u3ywFHQhZ3k9H7K7pVYRDJnZ/v2TTDiWYJsVRRZLdwKxWWhsbduIBbUOYCAPJgFGJxIjaQdjxo4wxEJj5nlzQfRZPpO2YqK62HXJ2SIZC8Pr3AvPYx3f/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZMhtGykeFGGi733dMMPy9ZTaq8ctP2m9vOJZNQzWVYs=; b=TQBPxZvPuILDE/C4Dn6WLJuCUFp0KLITiJFCkqF2pPhxkzeugOhEQJr4CiWgoLW7RC0IKWaqNuqLJhsa9p8QaaFCWICuIFS0QlrhitmdXXaoMlce6xZXZOrmlcDm+mg8sb4CNGiByAmeqGcsPUDUryjjlCG2jAy9cZjYKCsFf/E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY5PR13MB4405.namprd13.prod.outlook.com (2603:10b6:a03:1d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Tue, 25 Oct 2022 07:59:57 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 07:59:57 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 03/26] net/nfp: support IPv6 VXLAN flow item Date: Tue, 25 Oct 2022 15:58:55 +0800 Message-Id: <20221025075918.7778-4-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY5PR13MB4405:EE_ X-MS-Office365-Filtering-Correlation-Id: 92ffbb21-f077-440c-08b9-08dab65ee882 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: urgnt31LV1Yt3BWhDNt7A6FQ4zptDEsz83IKXVbJb+Hh81HudwJOuywKuox8C84voZG1mPysqA+uLw8IRSXeimKcGYHzZiyksN37rfkc+6kZAdVy+FKH6c3qkRKTRxPUfhSIduf5Pie5UAsmVoifBPssETSsqSNABjIAbxBLNEqjdjJWxGoEhKqFKMUPEiUjOIVCAx6BSUllClzlrfJFWUXuHn8OXo5wC4QU5AitHPy30tM1+zzCEZxO4/d6rUUKrX5xaBalq7T5Rv7uIV5Tku4xXsJ0vUuawY+bty+vAAZk/dL48FQalmtjIVJhXJtRXGOAlZRNFGhjxsH9YMJanRFiOWNT26XCmjw/PNd0ofKZ+DZaT9RaUwUKWpMSXrzGzhDYe2S9OW1hiG+aixRmX5Cf/xP6WhTZGLmY4K1PUCY3j6v/ySUyh3CJ6eCd6O/cGcyB4QpUlOWlklCDDmEDcmeWoMZhpBPTmNFumsVj/ObZAI6+FoBh6pK4620WTy86HDpGIvxhpYqRfnf3AWCKM2ZM7VRsWXDTdPqvDKBFpnHcplWbvsHHouesd5HsUyAKTWcGXZN1PfzRMNciV9z3Pqs6mrVSz3kClzGldl2h4QloBpmp7k/tF+AwKgV6xSETmBk2VBLGGS7bRx6XUangeQcb6s+lFwEdmf0BHzyasLbclauxFUwitVx7kWXoFQamTcXTLKM/s0ro682bsKjP7JKz1emSRdNr5FhoDFk6dl4QwdAVLg2rWCzMekfJoqnljgpPDN+tH/fSk1WEktWcwg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39830400003)(346002)(136003)(376002)(366004)(396003)(451199015)(36756003)(6486002)(5660300002)(30864003)(66946007)(66476007)(8936002)(38350700002)(38100700002)(66556008)(83380400001)(66574015)(86362001)(44832011)(6916009)(2616005)(26005)(107886003)(186003)(6512007)(1076003)(316002)(478600001)(52116002)(8676002)(41300700001)(4326008)(2906002)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?p6oPtdPv9R/ABEuYxrWq1Wa+1l6S?= =?utf-8?q?76j+K0+FlJZqnQGsq6nz8kDGqls6LLHMFqQE7GnvIdgOzgVRxfUIeCpY9Asnt8DNm?= =?utf-8?q?WPesjNlwRmKKCAoC39YioqUYfe18hzrXJLAIPEX4E81NY8zyfEzyiBpEAvq4hr+Rx?= =?utf-8?q?pijRDyHXY+cXQ3CP5n5ogECd1FX4TDDh+8PmJcP3DRqJm9hVuu8OFxpAqKamDZ7ey?= =?utf-8?q?lhytDT1vpA1tD3rjiszIdxDqoDYOIH88zDCNGh5fFme8UuU3hQa/9MNai2wPEaWnG?= =?utf-8?q?buJcgTQnrzFrr1I/B42KmBxf38SxcvlPBitrveG8q07xypmlEvmWJEtccBJa4fVd2?= =?utf-8?q?QbzQO+LLLPQH34XTJh0IJvUDXRVANj/feWpJ9z03mL4ksZ3fp7U6lubVDGOWoP447?= =?utf-8?q?P6fYdV9IZ13n2QVlQK6dH9c4kEg04kCj6BarKJo0Cr+c2nCXCZUzGndAB0jfi+epz?= =?utf-8?q?MB1xPb35U7zY/RROZTMlw9fAULT+pPymwr8/pgj98JeQWfO9zYL5cR5uvmFIWCWkH?= =?utf-8?q?4Y165TLfD+i8J5XVZYgT/mAuhGYMcfIadN/LjkRFTUGXn22szeuHyoV7HKZt1vHpG?= =?utf-8?q?+Rs2fejoQ+pK8toIP1cjkLVlDFv9IPnoEXbZUFqwzCL01VTtJXCKmeWhO9jiu2cXA?= =?utf-8?q?NB9OTjeNvrLJRXUHSVjvwxAIHQYSJCvh32HcKlTOrLML7JWJk01otmEuJnX9IxWJP?= =?utf-8?q?YaOonavEApje0XkiUnn+/ebqRfAKxHHI28L19iLirsqGYOvRV/m0rP9dzmIM4C5qU?= =?utf-8?q?IWdszWHOkKI6gR5r4juHBWhB3CT6Tik6z7/+kP35btF1RxjndsdE39E74vZfg7RNA?= =?utf-8?q?Yy5fNdV3YplqYljysphMS1v0HdrT19zsEufjrZ8q29fC1Ha81edNN8ar8XnYb0cW3?= =?utf-8?q?23o+psLW+kCXVtQrl7eNKBEKbg7upVg/jxbkDxrKeumoTnfuvZOZCQqYi1gIm1gA/?= =?utf-8?q?gMnRVxUd3LQq+kLCZoas8taj0HU/gWiXmsjlSA5+mR5ms+EsWjyjg1u/nvHXY+aFy?= =?utf-8?q?36Ick5qTMCNs5wSsviuZhto+EN9ic7xuLhXj/YjhZiEhQ5KjAAR/kw19FA/RB27Za?= =?utf-8?q?qLwh1JoAurNsfuy2GHaqCllNjvKdJH4WSb1lXCNw2mOreJQGOOLvQd6O78gOSVu36?= =?utf-8?q?9eY/OZgs12BXrcsWPYUZRpjOoOItisQ7obfijIjPe+Bge2HHkWatz8icOCAuNTAvP?= =?utf-8?q?21kFT4O2CZbEWDIFnPLfzLhL04UTq6oCb9AxCM3sO3QJgM4+nLN/eWWKEVi76yJJT?= =?utf-8?q?By5yBg0x/vMDEl3MAt/3d9qS3wr9o0oUVVswu6b2ErZhyNlnQ1dDn2NlLs3x35vt9?= =?utf-8?q?8021Elf1//69GdlXvoLxE1z9tN3XvdIGZN3318EahrHxFFGh4ZGpcr/ATW+QJxpCH?= =?utf-8?q?23fdCwWwZlTCd1wBdljjF1Gzf+IRNQzw8pbBBH5cJpQpal3tIMqHNYEFgAmgRSrKS?= =?utf-8?q?n/kPVu4lHoP9juIlRxdos1m3LDsqMY7VyGz5c+pdw0gFNYopuVo4nlvmnrtLkWsAb?= =?utf-8?q?+EOOyH9H09HIYQIhyh9PeB+Aw1m+1623JQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92ffbb21-f077-440c-08b9-08dab65ee882 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 07:59:57.3175 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5YIg/UAXYPSr/IwjPsLBtZn3oCb1kBrmrjqDgLOrnu7L/Cz847MocUYdqwyXWVnC7IB4VtW/nMYTGQOjYyxy78rFiVDsmbeZHuUKUD98YXk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR13MB4405 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 the corresponding data structure and logics, to support the offload of IPv6 VXLAN item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.h | 42 +++++++++ drivers/net/nfp/nfp_flow.c | 113 +++++++++++++++++------ 2 files changed, 129 insertions(+), 26 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 08e2873808..996ba3b982 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -329,6 +329,11 @@ struct nfp_flower_tun_ipv4 { rte_be32_t dst; }; +struct nfp_flower_tun_ipv6 { + uint8_t ipv6_src[16]; + uint8_t ipv6_dst[16]; +}; + struct nfp_flower_tun_ip_ext { uint8_t tos; uint8_t ttl; @@ -359,6 +364,43 @@ struct nfp_flower_ipv4_udp_tun { rte_be32_t tun_id; }; +/* + * Flow Frame IPv6 UDP TUNNEL --> Tunnel details (11W/44B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | VNI | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv6_udp_tun { + struct nfp_flower_tun_ipv6 ipv6; + rte_be16_t reserved1; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be32_t reserved2; + rte_be32_t tun_id; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 0e1e5ea6b2..bbd9dbabde 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -493,6 +493,7 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], { struct rte_eth_dev *ethdev; bool outer_ip4_flag = false; + bool outer_ip6_flag = false; const struct rte_flow_item *item; struct nfp_flower_representor *representor; const struct rte_flow_item_port_id *port_id; @@ -535,6 +536,8 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV6 detected"); key_ls->key_layer |= NFP_FLOWER_LAYER_IPV6; key_ls->key_size += sizeof(struct nfp_flower_ipv6); + if (!outer_ip6_flag) + outer_ip6_flag = true; break; case RTE_FLOW_ITEM_TYPE_TCP: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_TCP detected"); @@ -553,8 +556,9 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], break; case RTE_FLOW_ITEM_TYPE_VXLAN: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_VXLAN detected"); - /* Clear IPv4 bits */ + /* Clear IPv4 and IPv6 bits */ key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV6; key_ls->tun_type = NFP_FL_TUN_VXLAN; key_ls->key_layer |= NFP_FLOWER_LAYER_VXLAN; if (outer_ip4_flag) { @@ -564,6 +568,19 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], * in `struct nfp_flower_ipv4_udp_tun` */ key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } else if (outer_ip6_flag) { + key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_TUN_IPV6; + key_ls->key_size += sizeof(struct nfp_flower_ext_meta); + key_ls->key_size += sizeof(struct nfp_flower_ipv6_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv6_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv6); + } else { + PMD_DRV_LOG(ERR, "No outer IP layer for VXLAN tunnel."); + return -EINVAL; } break; default: @@ -884,42 +901,61 @@ nfp_flow_merge_ipv6(struct rte_flow *nfp_flow, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, bool is_mask, - __rte_unused bool is_outer_layer) + bool is_outer_layer) { struct nfp_flower_ipv6 *ipv6; const struct rte_ipv6_hdr *hdr; struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv6 *spec; const struct rte_flow_item_ipv6 *mask; + struct nfp_flower_ipv6_udp_tun *ipv6_udp_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; - if (spec == NULL) { - PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); - goto ipv6_end; - } + if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); + return 0; + } - /* - * reserve space for L4 info. - * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv4 - */ - if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) - *mbuf_off += sizeof(struct nfp_flower_tp_ports); + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv6_udp_tun = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + + ipv6_udp_tun->ip_ext.tos = (hdr->vtc_flow & + RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; + ipv6_udp_tun->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6_udp_tun->ipv6.ipv6_src, hdr->src_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_src)); + memcpy(ipv6_udp_tun->ipv6.ipv6_dst, hdr->dst_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_dst)); + } else { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); + goto ipv6_end; + } - hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv6 = (struct nfp_flower_ipv6 *)*mbuf_off; + /* + * reserve space for L4 info. + * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv6 + */ + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + *mbuf_off += sizeof(struct nfp_flower_tp_ports); + + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv6 = (struct nfp_flower_ipv6 *)*mbuf_off; - ipv6->ip_ext.tos = (hdr->vtc_flow & RTE_IPV6_HDR_TC_MASK) >> - RTE_IPV6_HDR_TC_SHIFT; - ipv6->ip_ext.proto = hdr->proto; - ipv6->ip_ext.ttl = hdr->hop_limits; - memcpy(ipv6->ipv6_src, hdr->src_addr, sizeof(ipv6->ipv6_src)); - memcpy(ipv6->ipv6_dst, hdr->dst_addr, sizeof(ipv6->ipv6_dst)); + ipv6->ip_ext.tos = (hdr->vtc_flow & RTE_IPV6_HDR_TC_MASK) >> + RTE_IPV6_HDR_TC_SHIFT; + ipv6->ip_ext.proto = hdr->proto; + ipv6->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6->ipv6_src, hdr->src_addr, sizeof(ipv6->ipv6_src)); + memcpy(ipv6->ipv6_dst, hdr->dst_addr, sizeof(ipv6->ipv6_dst)); ipv6_end: - *mbuf_off += sizeof(struct nfp_flower_ipv6); + *mbuf_off += sizeof(struct nfp_flower_ipv6); + } return 0; } @@ -1088,7 +1124,7 @@ nfp_flow_merge_sctp(struct rte_flow *nfp_flow, } static int -nfp_flow_merge_vxlan(__rte_unused struct rte_flow *nfp_flow, +nfp_flow_merge_vxlan(struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1097,8 +1133,15 @@ nfp_flow_merge_vxlan(__rte_unused struct rte_flow *nfp_flow, { const struct rte_vxlan_hdr *hdr; struct nfp_flower_ipv4_udp_tun *tun4; + struct nfp_flower_ipv6_udp_tun *tun6; + struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_vxlan *spec; const struct rte_flow_item_vxlan *mask; + struct nfp_flower_ext_meta *ext_meta = NULL; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); spec = item->spec; if (spec == NULL) { @@ -1109,11 +1152,21 @@ nfp_flow_merge_vxlan(__rte_unused struct rte_flow *nfp_flow, mask = item->mask ? item->mask : proc->mask_default; hdr = is_mask ? &mask->hdr : &spec->hdr; - tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - tun4->tun_id = hdr->vx_vni; + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) { + tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + tun6->tun_id = hdr->vx_vni; + } else { + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = hdr->vx_vni; + } vxlan_end: - *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) + *mbuf_off += sizeof(struct nfp_flower_ipv6_udp_tun); + else + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); return 0; } @@ -1122,7 +1175,8 @@ nfp_flow_merge_vxlan(__rte_unused struct rte_flow *nfp_flow, static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH, - RTE_FLOW_ITEM_TYPE_IPV4), + RTE_FLOW_ITEM_TYPE_IPV4, + RTE_FLOW_ITEM_TYPE_IPV6), }, [RTE_FLOW_ITEM_TYPE_ETH] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VLAN, @@ -1395,6 +1449,7 @@ nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, char *mbuf_off_exact; bool is_tun_flow = false; bool is_outer_layer = true; + struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item *loop_item; mbuf_off_exact = nfp_flow->payload.unmasked_data + @@ -1404,6 +1459,12 @@ nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, sizeof(struct nfp_flower_meta_tci) + sizeof(struct nfp_flower_in_port); + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) { + mbuf_off_exact += sizeof(struct nfp_flower_ext_meta); + mbuf_off_mask += sizeof(struct nfp_flower_ext_meta); + } + /* Check if this is a tunnel flow and get the inner item*/ is_tun_flow = nfp_flow_inner_item_get(items, &loop_item); if (is_tun_flow) From patchwork Tue Oct 25 07:58:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119059 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 68606A0543; Tue, 25 Oct 2022 10:00:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C351742B8E; Tue, 25 Oct 2022 10:00:05 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2134.outbound.protection.outlook.com [40.107.223.134]) by mails.dpdk.org (Postfix) with ESMTP id BBBDE42BC8 for ; Tue, 25 Oct 2022 10:00:01 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Yt9rugJsfwJSC2tCLfeedfGWpxMV5khhHSmg/0F4brZXPtPFiiorHYTFd3KykOZ+l1C4TNOeqQ2HHh1H7SRciL2N4Z+S2s1MKxTDKraSl2khCPInlhRsOE3VLXwWBU3phufl0wDCtWbu9jp8g4hXA+4nyWVr0Xmo2WaA6Y0s8xApzQ9IykahLL7vBj63q4NKkgaCsXpLfOBzXuiEm8TGLoOvKag7WUR8rvf2iFqW0J81ncBWadtVrI2ixC8J07SmLJf69TUD6lhLGspukONFh3baoP5pwjLN1U3HIcIckC07RvaSwFg/szMXAgqLMkf1k4k8SuV3YIXvuJd7ypxO/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=v73wimmFWgfwI3fjKH/mn9V5sGXHkKvCdDBijGF1e9Y=; b=Mz+15Y55yUvoszGf1bbIMhh77N/SFKoZlorVnzYaVbzUb7aWFxoiBC3GmPdCAz/46W+aLYtU9NKOk2WcMWUBUY1xevjH3c6z2/UTsaijQARAbZ38AMDaW6N1iYLkJDiktVWK+/L2gn7ISODWvOcapJuKz3NdF9t/BZuKqpWkao+5LFJXjoM3ZT60Yqu2+4/af/CUwmFvpIpLzoE79kcNq0kWK+bZ//2aDyk0B8Du+rwN8+Y33OLOnHyGggwTYnwg4zkuX+zacIT018fZuKKoI8lxwOl8ZUlPJDxr7lsnAKOvLYOwB948Dt2nWEmjWxKCnzS8cfCjn/8oMBsepEyI5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v73wimmFWgfwI3fjKH/mn9V5sGXHkKvCdDBijGF1e9Y=; b=LOlRIrnTMFO9WJNKOWniGssgvSwdvydONYBORymOyTOngyuwF5wqt1Adzy3ACFIey2FSaPbivMJfBy/kGrRqkI+TxrUpD5G53vUSwY1RZCaisziqRS37XymX8mFw/wpbnm1ScfnYdSPezy2fhjae+X71rr+5zDFikDikkbTgnDo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 07:59:59 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 07:59:59 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 04/26] net/nfp: prepare for IPv4 tunnel encap flow action Date: Tue, 25 Oct 2022 15:58:56 +0800 Message-Id: <20221025075918.7778-5-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 8fdf8a8a-9d8b-4e97-c939-08dab65ee9e7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GmNcHNvo7H8dlvcTBaTPB+9BX6Z05p0Lt0p08IgyZ3k2Wv2U8cgP28EWYlWB4hVTLv3Cbbv/Hr2Ls4J07mTyaCKgGsAIqMp/5HVbJ/sVPHQS+FBQ/Bm7VHnJmonhNus8mQR1PfqheUHi/IpUy9efk9wAJ9QENqg4znNXDk2WEEaF+ZoZXVuPzr60Jqz70kNvaeqK1NiivGeVb41Lm7IxZ/NQ3W6+WuQYeC/qmeEipXNjCkWSqmSSOOj/q3C3VwLcXb/3Ji37q0mIvOlyRdbnUy6aBSmqFvuO00ZQu7CFs02skAZHdFH6ucJhTng5fOucDKkpWuwalj4XxRdcOcr/XFwkVNV/Ekv3wVhOTxvB/5ND4ESnHLjlvvCOpFXt8RqsRAqFIGGirsNe/rqipZ0wKyy934JcyRih2397ksTizE5YTTC2JEc7P1sNHW6foVDV4mGPKOiU5yGFWKD56XrWLT3H/tNV73FdG2CgDyKsJPEuUk4IZO6/htspEvGtjvXIB2sTjytmeioV0ly+TYto1jrQrbn+XNJZyI4QSzEFYH3mDRg09FUK2FGYmfN9+idW7KPpNUc5FWpKolQPZSOEghM/Vqj0CBaFSrjh2MG3mOuCjcFq/+XWvc+THwM+yhXbWcatBZGRnMbn4oXxiFxgCTT8WoE+XOlbVoMfjc2d9dP7L2dBMSXEMxJ6pL4L4VckN5FbXb44QcN1vYfSzzePUm54gCPbKiZAzArbtvGAQ5T13c2+aOpEaf5Ep6kU9kgUwDyvZ9itkRdSuSmywlReXw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(30864003)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(66574015)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?iSU3VBZG7VjmmBbMkQ+LuJGL4nWZ?= =?utf-8?q?3tFt7RN2181eJSXQOelqLlqG/edIgjc38/n4N5FQW1rmiBlbW0jra6PrADSTYuVgM?= =?utf-8?q?dUf7aZM+uFUZYAxmGwdg2Pt/7HSGLRBLqRyrl8A6kvUEOT0nizJL4oz7mZhyFWzg5?= =?utf-8?q?todJXYhZOcTfWaT+NZs02uskEIySBh3W39Pb1P53yuQU8V8O8Ds9IUiE5cAScIEZ+?= =?utf-8?q?AMKTPatj4HzG1axe321CdWyLfGsPYc11LsQPRCNE28Z9169BaGvcBRH+6utR4of0y?= =?utf-8?q?8elFaSnSZWNRip76P26eU+LQ/Xsjyeu+4nxav3naoKXTkBZXh1DGBFA9CqANL2Wmd?= =?utf-8?q?F9BE4jzY609g20Az6aDWSHyDMENAU9xLBjYXJ+iAJKQh16JMbuXs4EhZJk60MWJGb?= =?utf-8?q?vtXXdcUe0hSuT+XGxo5pi+r9AamSirZ5oJ/dEMudW9JokoAW73zqKdhI1jRACeohh?= =?utf-8?q?iUdAxMFVdQ5tmS4K8pwFCM8sYeX0JZk5XQkyzpbm81MZA6V8HFpNR2eaRKH/ksMbM?= =?utf-8?q?9rqld62jWZj2iqpVkf+bnH3MhYaViC6EFciJuyL/KnUYzcSY8LARa4wjYOXH0myRI?= =?utf-8?q?ZnLYbdRBpVGwnSz+MtMTt3tvOpJn99sLYa87djOYrdsqlCRy4+EKkUTURiXt2K8U2?= =?utf-8?q?j5L9pla2ec2soSI670oNTEGEC9UpnFBT8lWFdC84cWh6ObhcrQVUNBhrt8XZIhKm+?= =?utf-8?q?+uhE3ulMQQX8HbdLxbdUAMBYcS11tgVTNU/CD2BL2DTmr4lQoUvLah0YT61yItbK9?= =?utf-8?q?8ozSOQ3F6krYeLz+nA90nejuoWp+CG2MPMHPdHSplDe+3UDnUc0icwVYa/qzKrlfB?= =?utf-8?q?XTi+7TQOi/I6wYEXQ07TsEmJqxv9i+jYwX/njP0RAryvoSBqd4BgCwij3q77nfHx9?= =?utf-8?q?ih7SGQMEJrdr6VG5vARRS0hz0HkzD4KDtOsWtlWufl06+FcfFCkDaaLxxZj+6K5sd?= =?utf-8?q?Cex2MhA9EZm2UPKJRV8Wt7vzOOP2xr6KcaAlX7etWCFTJKDDWYIudFxwoK5uUXln4?= =?utf-8?q?MmdUVXHfON2YDE6OR2oymTh0hCBUq8RXx2bH8nIbIftwAIqx5gY3ocOSFnyWHelu5?= =?utf-8?q?WEFJ/gRaNteosB1d6MXmfRf8+HNlpcXu9QsCJFAQDv2MT7YgpM5MoMUfqXsQYV0MO?= =?utf-8?q?gKSp3oozKv9lV5nliYwcg+50owDOF8+PGr0r4+8zTQFCwNXpNxnLyG72rkePqY7f3?= =?utf-8?q?+srBYAaOCF2Re302Uz5jGBLPehbbxpDVXrZmVt41VbG8ZM/nrlNX4BUahv+CoUKc6?= =?utf-8?q?wapdsiZpp+YaExHcQczPCZQwfrReuPUIwRvm5gUhpc6zD4pPr9NYyKyixZn3rLJXd?= =?utf-8?q?OevOTdAk4UbbC/FzAdvybg+YjRevNSsmaC/ZJEmNpPcez5twHgAxhQFIReVjLebwR?= =?utf-8?q?WPEILDMuVf2Zz1//A+p1lWB3PdzoiQjLywiQUMxuXmVNqRuIMwvs5DpJIG1p4If5O?= =?utf-8?q?dw+hAG2qDXWLv+Gc/Dfs8922kFNhAjvdkl1lPxGz44J+MXm2TiPIybJEH7CR3jGGF?= =?utf-8?q?IfxcGwzEwohGvagXyOq1U4umL9NBZLW7dQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8fdf8a8a-9d8b-4e97-c939-08dab65ee9e7 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 07:59:59.7402 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BRT3Vr78mSAmJVFQm41Zz/FvP0d1cRxf39NVgH46HzMCkseBx7YQKSlBErkpeWEktTRF9RJ5WSYMLGYdUuA4hRS1+BGFvdeIsgklJg6mbVc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the related data structure and functions, prepare for the encap action of IPv4 tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.c | 29 ++++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 93 ++++++++++++++++++++++++ drivers/net/nfp/nfp_flow.c | 88 ++++++++++++++++++++++ drivers/net/nfp/nfp_flow.h | 27 +++++++ 4 files changed, 237 insertions(+) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 15d838117a..7021d1fd43 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -246,3 +246,32 @@ nfp_flower_cmsg_flow_add(struct nfp_app_fw_flower *app_fw_flower, return 0; } + +int +nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v4 *payload) +{ + uint16_t cnt; + size_t msg_len; + struct rte_mbuf *mbuf; + struct nfp_flower_cmsg_tun_neigh_v4 *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v4 tun neigh"); + return -ENOMEM; + } + + msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v4); + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH, msg_len); + memcpy(msg, payload, msg_len); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 996ba3b982..e44e311176 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -129,6 +129,36 @@ struct nfp_flower_cmsg_port_mod { rte_be16_t mtu; }; +struct nfp_flower_tun_neigh { + uint8_t dst_mac[RTE_ETHER_ADDR_LEN]; + uint8_t src_mac[RTE_ETHER_ADDR_LEN]; + rte_be32_t port_id; +}; + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V4 + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | DST_IPV4 | + * +---------------------------------------------------------------+ + * 1 | SRC_IPV4 | + * +---------------------------------------------------------------+ + * 2 | DST_MAC_B5_B4_B3_B2 | + * +-------------------------------+-------------------------------+ + * 3 | DST_MAC_B1_B0 | SRC_MAC_B5_B4 | + * +-------------------------------+-------------------------------+ + * 4 | SRC_MAC_B3_B2_B1_B0 | + * +---------------------------------------------------------------+ + * 5 | Egress Port (NFP internal) | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_neigh_v4 { + rte_be32_t dst_ipv4; + rte_be32_t src_ipv4; + struct nfp_flower_tun_neigh common; +}; + /* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -574,6 +604,67 @@ struct nfp_fl_act_set_tport { rte_be16_t dst_port; }; +/* + * Pre-tunnel + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | - | opcode | |jump_id| - |M| - |V| + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_127_96 / ipv4_daddr | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_95_64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_63_32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_31_0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_fl_act_pre_tun { + struct nfp_fl_act_head head; + rte_be16_t flags; + union { + rte_be32_t ipv4_dst; + uint8_t ipv6_dst[16]; + }; +}; + +/* + * Set tunnel + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | res | opcode | res | len_lw| reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_id0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_id1 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | reserved | type |r| idx | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_flags | ttl | tos | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | reserved_cvs1 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | reserved_cvs2 | reserved_cvs3 | + * | var_flags | var_np | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_fl_act_set_tun { + struct nfp_fl_act_head head; + rte_be16_t reserved; + rte_be64_t tun_id; + rte_be32_t tun_type_index; + rte_be16_t tun_flags; + uint8_t ttl; + uint8_t tos; + rte_be16_t outer_vlan_tpid; + rte_be16_t outer_vlan_tci; + uint8_t tun_len; /* Only valid for NFP_FL_TUNNEL_GENEVE */ + uint8_t reserved2; + rte_be16_t tun_proto; /* Only valid for NFP_FL_TUNNEL_GENEVE */ +} __rte_packed; + int nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower); int nfp_flower_cmsg_repr_reify(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_representor *repr); @@ -583,5 +674,7 @@ int nfp_flower_cmsg_flow_delete(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *flow); int nfp_flower_cmsg_flow_add(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *flow); +int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v4 *payload); #endif /* _NFP_CMSG_H_ */ diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index bbd9dbabde..f71f8b1d5b 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1772,6 +1772,91 @@ nfp_flow_action_set_tc(char *act_data, tc_hl->reserved = 0; } +__rte_unused static void +nfp_flow_pre_tun_v4_process(struct nfp_fl_act_pre_tun *pre_tun, + rte_be32_t ipv4_dst) +{ + pre_tun->head.jump_id = NFP_FL_ACTION_OPCODE_PRE_TUNNEL; + pre_tun->head.len_lw = sizeof(struct nfp_fl_act_pre_tun) >> NFP_FL_LW_SIZ; + pre_tun->ipv4_dst = ipv4_dst; +} + +__rte_unused static void +nfp_flow_set_tun_process(struct nfp_fl_act_set_tun *set_tun, + enum nfp_flower_tun_type tun_type, + uint64_t tun_id, + uint8_t ttl, + uint8_t tos) +{ + /* Currently only support one pre-tunnel, so index is always 0. */ + uint8_t pretun_idx = 0; + uint32_t tun_type_index; + + tun_type_index = ((tun_type << 4) & 0xf0) | (pretun_idx & 0x07); + + set_tun->head.jump_id = NFP_FL_ACTION_OPCODE_SET_TUNNEL; + set_tun->head.len_lw = sizeof(struct nfp_fl_act_set_tun) >> NFP_FL_LW_SIZ; + set_tun->tun_type_index = rte_cpu_to_be_32(tun_type_index); + set_tun->tun_id = rte_cpu_to_be_64(tun_id); + set_tun->ttl = ttl; + set_tun->tos = tos; +} + +__rte_unused static int +nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun, + const struct rte_ether_hdr *eth, + const struct rte_flow_item_ipv4 *ipv4) +{ + struct nfp_fl_tun *tmp; + struct nfp_flow_priv *priv; + struct nfp_flower_in_port *port; + struct nfp_flower_cmsg_tun_neigh_v4 payload; + + tun->payload.v6_flag = 0; + tun->payload.dst.dst_ipv4 = ipv4->hdr.dst_addr; + tun->payload.src.src_ipv4 = ipv4->hdr.src_addr; + memcpy(tun->payload.dst_addr, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + port = (struct nfp_flower_in_port *)((char *)nfp_flow_meta + + sizeof(struct nfp_fl_rule_metadata) + + sizeof(struct nfp_flower_meta_tci)); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + payload.dst_ipv4 = ipv4->hdr.dst_addr; + payload.src_ipv4 = ipv4->hdr.src_addr; + memcpy(payload.common.dst_mac, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); +} + +__rte_unused static int +nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, + rte_be32_t ipv4) +{ + struct nfp_flower_cmsg_tun_neigh_v4 payload; + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + payload.dst_ipv4 = ipv4; + + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); +} + static int nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor, const struct rte_flow_action actions[], @@ -2487,6 +2572,9 @@ nfp_flow_priv_init(struct nfp_pf_dev *pf_dev) goto free_mask_table; } + /* neighbor next list */ + LIST_INIT(&priv->nn_list); + return 0; free_mask_table: diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index 0ad89e51f4..892dbc08f1 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -90,6 +90,11 @@ enum nfp_flower_tun_type { NFP_FL_TUN_GENEVE = 4, }; +enum nfp_flow_type { + NFP_FLOW_COMMON, + NFP_FLOW_ENCAP, +}; + struct nfp_fl_key_ls { uint32_t key_layer_two; uint8_t key_layer; @@ -118,6 +123,24 @@ struct nfp_fl_payload { char *action_data; }; +struct nfp_fl_tun { + LIST_ENTRY(nfp_fl_tun) next; + uint8_t ref_cnt; + struct nfp_fl_tun_entry { + uint8_t v6_flag; + uint8_t dst_addr[RTE_ETHER_ADDR_LEN]; + uint8_t src_addr[RTE_ETHER_ADDR_LEN]; + union { + rte_be32_t dst_ipv4; + uint8_t dst_ipv6[16]; + } dst; + union { + rte_be32_t src_ipv4; + uint8_t src_ipv6[16]; + } src; + } payload; +}; + #define CIRC_CNT(head, tail, size) (((head) - (tail)) & ((size) - 1)) #define CIRC_SPACE(head, tail, size) CIRC_CNT((tail), ((head) + 1), (size)) struct circ_buf { @@ -161,13 +184,17 @@ struct nfp_flow_priv { struct nfp_fl_stats_id stats_ids; /**< The stats id ring. */ struct nfp_fl_stats *stats; /**< Store stats of flow. */ rte_spinlock_t stats_lock; /** < Lock the update of 'stats' field. */ + /* neighbor next */ + LIST_HEAD(, nfp_fl_tun)nn_list; /**< Store nn entry */ }; struct rte_flow { struct nfp_fl_payload payload; + struct nfp_fl_tun tun; size_t length; uint32_t hash_key; bool install_flag; + enum nfp_flow_type type; }; int nfp_flow_priv_init(struct nfp_pf_dev *pf_dev); From patchwork Tue Oct 25 07:58:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119060 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 363A4A0543; Tue, 25 Oct 2022 10:00:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B2C9B42BEF; Tue, 25 Oct 2022 10:00:06 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2105.outbound.protection.outlook.com [40.107.223.105]) by mails.dpdk.org (Postfix) with ESMTP id 58C1242BCE for ; Tue, 25 Oct 2022 10:00:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WN3680CnDAUd7oZXmfL2e8D+rMskE7hT1IhsDsvQTWhTREsRuXdrb3MKaycQWZnncIxH2gLi3oZKE8YD6Tk2afFcbcV5PoZH9YbSCyB3WcIb+okzqQps9cMIWfFbKK9QKyJ5UuXQy29v5obc3VESBhOJCmHznelyrMT2wYtsiMV9W39o0ZkAlssGFza9TXWP/puDD9zH6fJbq7fIpuCtsKYF2zykcCS1iOPSRjQV0v8O5izyitr8vFrilLwhS+mQqrW03aVKJnTADIPpjubWneHDkjxF7py5Pen9iD2kbwE0IR5nEljDAAowa7xy+tRd/w7Ge161C5PxmsVTzYqGmA== 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=74y9dN8OAZoGdZMFwP6pxtEVhjfXH/vY/a8SwqFCsFY=; b=CBb7uxASOnlMxM+1OblPh2MgiqCtLJyoXgn8+bX3E4/GwFnpdRWssoduIJRMsUyOKQgGU2yu6jjj0mbR5YPEPDdFoRsxrwi9yDrPrvnmX2CYAxU+kbYPG6ZsuqfxB5+TCOU3dRh3x3ZgVC7Lq/51z1fFFTiXKnKR03zOTM/soaigyyA+HADAhLR2/GRLVzCXQdDuMhtcirSWU0FuukTDkK9vGTizaIL3E1POTHlUjXsINH03FZhXHzEEVp5ZMZSiCjrwGEDiPaJuXo23wOr3loLYzr0v4VlFeXDKWDjK9t8XGA7gmIDg3rZr3UrpkKIKB92toFnbFvc0zIuhkQkK+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=74y9dN8OAZoGdZMFwP6pxtEVhjfXH/vY/a8SwqFCsFY=; b=JhpUfh+//0+aJknnEEn4G+qsdmVkStLvVGQ2kCSjjvVINypsz2xBVREfvjfiqn8x9Es0XOKlix0EFqUzMBmWiwT435Wr2A7kBLlN5QYfdT8IceIWnZ0mD4dUdom1U7pnsZ+RIYh9gPHzT3zytXPikAwcL9bTxvphAl96yWGxm8g= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 08:00:02 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:01 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 05/26] net/nfp: prepare for IPv6 tunnel encap flow action Date: Tue, 25 Oct 2022 15:58:57 +0800 Message-Id: <20221025075918.7778-6-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 3bf04d3b-87f6-4c4c-0836-08dab65eeb2c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VtOxZsPE3t3Gey12RCa08n1rfmYZAHvbOh2tExX7LKLlaLD7jCU00DKk+cyw+paUyxd9a4ycQvYK2HjUGRy60nld8G3358dmBpFSHgEhfnbK8byqqR/1fssU+XzdmX5wiMd6qtMOxQh69FVu54k4CjJyJUgqUgZW5/U/phcM7swCpSAjBS2PS9zkPGjYQEUEXG4zeVUCAJ/rXBAYiLA3ht66UYHmDS2ug1vCjWAQwBAIkTKhhJfuz1E2vktb95a1LR5cjI09YKulb11gzVl5Dmii3TX36d4bIgx9AYOcSeoVdCG8eD8mW76zhZsZBSDvOZ+Unbdc88Mb0B1PlXW72JBN4nQ6c/2mZuvAcyjaMvjM0P6GGWkqX59Y6jPq1uL01aqK0EflOFk4abQFym/GY9sunjR60L4BhI0yfec6ZbovIAoSxOFeC1l3f2YFek8nmz81J0s8n3Rl3on5UBHJ4fL3QtRNP1v8xrHicCCyd1k+wnLS+rU97K6oAq1h4mDG637ZaAqw4Yjp6fyRgTmmyAl3MzoJk8P57tu0iqh35vg3ngCr+2p/5ODicnDzP6TIpahARQo4j6anE1bZGlZrTy9xj+Q/gyZlmwGbBad9pgk0wPWJuC/StUxDhN7pxm0WVnSci0ATFY+c/mHIcxn6wgDwTF9XMRmEgd5ARC2OERR3rrHrN+SIeISjHRVCN1SmT3GBku36U6K3cZq+HUFRxDP68PPP3I8m+g9ybOa9IdbdBi9hLVG9GVFy2MuQ58V9PSkhA/onepnVCWxXSgeYsg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(66574015)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?qq5gDoBKKksdbjyeYoHGbHrWoVxL?= =?utf-8?q?UDv1uOn6lTTZBpZrhtDmNPKklZM0xZDJ7pnImd64NxWUzuwGPOQvGUtkp4Kwe8Fk8?= =?utf-8?q?nanUb1YLQla5+A0ejAX3k86Cs4RROI1HcvOibCUwBh++atGN6cSe8DTYOYXlL5AZd?= =?utf-8?q?ihK3hbuwqwRSJ0Z/Or2jrfgWN+7BnbOGY5G93gZMbgGp7HnoR+7Zt7konUerCq1hJ?= =?utf-8?q?+D6Y0aSFEsDZMDevwZZd/VNLrjeBes/NNyw+dH4uqS0f7QgVT4geNVNVUtfqZMtNl?= =?utf-8?q?dXj5thmrCP5ZSphpDAbw2UC0Bok3dsTL8ZzuPbOR8AOWWEgnMR6kDPdM4SpwZmtJ7?= =?utf-8?q?XiTARs4tWKZpbUVSgYu48RY78hWPzBX8svt4uCF533aWvSPZsj8Kr98XByJQPvciF?= =?utf-8?q?w33t9lB9MdMqK2rJk2i+PmVuOjjs3gGbr5jk7u+FscCo1ECiAV0PhFJl3hdSijts+?= =?utf-8?q?uJn1FWh2mOEV7jKJBwM+okaUX008KXBI3o26og2Sape19yz4kqXG0RxT0+JZzWrcM?= =?utf-8?q?ug7djf15dfXAjcIttpslIM/cimtwxY81wRngHUzZLhnNZPVOzxzR+SpQo2qXrV+js?= =?utf-8?q?du+OybHANt0508Tf3jaKN7S5UdqTpifck0d5EMM1vcGXF0OmnYYyc/YRDUo5SL4W6?= =?utf-8?q?uVNcbvVLXyyaryRB3w1OAR18R+iWsBrnaCKMAOnSCm0dz5+lK4v+EOr8Ck4AU3Neb?= =?utf-8?q?uziVmqGGUXM+qdrrgiT77W2cG74sHmMSuu5wC+TAoicLOqv54L8CchlRFRZ8E9/Q0?= =?utf-8?q?drfHL4Cs3Lyhj8yRnMmDzab+frh5tJ564oftrZB6fbPJUz8VA4lTGUNNf0s9rEZ83?= =?utf-8?q?ufI2Bm9T4t+nhMyKfFGmFUb4z+EHRxeJAmRsVwibqeU7jDXO8BgOcNctBj3/lUNR/?= =?utf-8?q?I4XBXN1jmTsSbGsKt0BPKqX4HDZu9camGm+jeicv4pk+ZrsSQ8ITqics4cty/FBpH?= =?utf-8?q?/zsmekevPg4XZQnia7TvMEH4ipMOe6UJdyXVtteUeTxwNu3NGxfLjkqGgwGeJM4RZ?= =?utf-8?q?5Ru87Rp0WYujd/P9/ZSilxunEqDSyhhnf+DmPeWZKlzCoqKmEjPrWbeIrhayqO1Ol?= =?utf-8?q?uuL78qmodtq0X0WobNBSx0l96TQGyqtppa6PfGG5wBILAc3AE6IMj7xxr5zKgFwdx?= =?utf-8?q?73LKeYIMp2jjJqcyQbPqNhK0a+odQBGHrvmk/XQJL6K6hs+o6KG46B6Ag4HByzVeP?= =?utf-8?q?/z/2q+3d1+zqYLg5xtEwpG9HI5k35fiRs6BaBr9B0J7dgzLnugGINCoGC6zP9Kyt9?= =?utf-8?q?54Y6Ohz3Jo/P5aq0Cdc1sACW8zskIjsYmZBGXy6NmHIU2fE9y6ExCpFlF9Xm5oq9h?= =?utf-8?q?nPc6BcTvq2HRVkqLH7HdZkOsBuQzdyDryi/IvVsRcahsHEszIbm43a0wVwabasbvE?= =?utf-8?q?MBDK4LjJElGXLvJd1YVNq5QX5wUKNKfBixh8MLEI4QijmBX2NYVxNG17k6+ilYOdz?= =?utf-8?q?lN7CDa9lEV/IHhawlCQ+YkRtlyZiau3O9nAfzdSbxsS+fZRZaIa/ohHbFq+yI+knz?= =?utf-8?q?BlVJCNOLlK2FjXU9eUYXsodMHYTpHjpUoA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3bf04d3b-87f6-4c4c-0836-08dab65eeb2c X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:01.8339 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2a9gPBseakfjtocmPRhIErnox+ktp/+kaQXMGgvzaqSGtfsR/3IXA0F0fg10VxRGkPhY20GCsaVcL/KoKgttEo3deUZqTqYrjEceO/Aas5c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the related data structure and functions, prepare for the encap action of IPv6 tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.c | 29 +++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 40 +++++++++ drivers/net/nfp/nfp_flow.c | 105 ++++++++++++++++++++++- 3 files changed, 173 insertions(+), 1 deletion(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 7021d1fd43..8983178378 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -275,3 +275,32 @@ nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, return 0; } + +int +nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v6 *payload) +{ + uint16_t cnt; + size_t msg_len; + struct rte_mbuf *mbuf; + struct nfp_flower_cmsg_tun_neigh_v6 *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v6 tun neigh"); + return -ENOMEM; + } + + msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v6); + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6, msg_len); + memcpy(msg, payload, msg_len); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index e44e311176..d1e0562cf9 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -159,6 +159,42 @@ struct nfp_flower_cmsg_tun_neigh_v4 { struct nfp_flower_tun_neigh common; }; +/* + * NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6 + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | DST_IPV6 [0] | + * +---------------------------------------------------------------+ + * 1 | DST_IPV6 [1] | + * +---------------------------------------------------------------+ + * 2 | DST_IPV6 [2] | + * +---------------------------------------------------------------+ + * 3 | DST_IPV6 [3] | + * +---------------------------------------------------------------+ + * 4 | SRC_IPV6 [0] | + * +---------------------------------------------------------------+ + * 5 | SRC_IPV6 [1] | + * +---------------------------------------------------------------+ + * 6 | SRC_IPV6 [2] | + * +---------------------------------------------------------------+ + * 7 | SRC_IPV6 [3] | + * +---------------------------------------------------------------+ + * 8 | DST_MAC_B5_B4_B3_B2 | + * +-------------------------------+-------------------------------+ + * 9 | DST_MAC_B1_B0 | SRC_MAC_B5_B4 | + * +-------------------------------+-------------------------------+ + * 10 | SRC_MAC_B3_B2_B1_B0 | + * +---------------+---------------+---------------+---------------+ + * 11 | Egress Port (NFP internal) | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_neigh_v6 { + uint8_t dst_ipv6[16]; + uint8_t src_ipv6[16]; + struct nfp_flower_tun_neigh common; +}; + /* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -629,6 +665,8 @@ struct nfp_fl_act_pre_tun { }; }; +#define NFP_FL_PRE_TUN_IPV6 (1 << 0) + /* * Set tunnel * 3 2 1 @@ -676,5 +714,7 @@ int nfp_flower_cmsg_flow_add(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *flow); int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v4 *payload); +int nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v6 *payload); #endif /* _NFP_CMSG_H_ */ diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index f71f8b1d5b..e1b892f303 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1781,6 +1781,16 @@ nfp_flow_pre_tun_v4_process(struct nfp_fl_act_pre_tun *pre_tun, pre_tun->ipv4_dst = ipv4_dst; } +__rte_unused static void +nfp_flow_pre_tun_v6_process(struct nfp_fl_act_pre_tun *pre_tun, + const uint8_t ipv6_dst[]) +{ + pre_tun->head.jump_id = NFP_FL_ACTION_OPCODE_PRE_TUNNEL; + pre_tun->head.len_lw = sizeof(struct nfp_fl_act_pre_tun) >> NFP_FL_LW_SIZ; + pre_tun->flags = rte_cpu_to_be_16(NFP_FL_PRE_TUN_IPV6); + memcpy(pre_tun->ipv6_dst, ipv6_dst, sizeof(pre_tun->ipv6_dst)); +} + __rte_unused static void nfp_flow_set_tun_process(struct nfp_fl_act_set_tun *set_tun, enum nfp_flower_tun_type tun_type, @@ -1845,7 +1855,7 @@ nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, rte_be32_t ipv4) { @@ -1857,6 +1867,99 @@ nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } +__rte_unused static int +nfp_flower_add_tun_neigh_v6_encap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun, + const struct rte_ether_hdr *eth, + const struct rte_flow_item_ipv6 *ipv6) +{ + struct nfp_fl_tun *tmp; + struct nfp_flow_priv *priv; + struct nfp_flower_in_port *port; + struct nfp_flower_cmsg_tun_neigh_v6 payload; + + tun->payload.v6_flag = 1; + memcpy(tun->payload.dst.dst_ipv6, ipv6->hdr.dst_addr, sizeof(tun->payload.dst.dst_ipv6)); + memcpy(tun->payload.src.src_ipv6, ipv6->hdr.src_addr, sizeof(tun->payload.src.src_ipv6)); + memcpy(tun->payload.dst_addr, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + port = (struct nfp_flower_in_port *)((char *)nfp_flow_meta + + sizeof(struct nfp_fl_rule_metadata) + + sizeof(struct nfp_flower_meta_tci)); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(payload.dst_ipv6, ipv6->hdr.dst_addr, sizeof(payload.dst_ipv6)); + memcpy(payload.src_ipv6, ipv6->hdr.src_addr, sizeof(payload.src_ipv6)); + memcpy(payload.common.dst_mac, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); +} + +static int +nfp_flower_del_tun_neigh_v6(struct nfp_app_fw_flower *app_fw_flower, + uint8_t *ipv6) +{ + struct nfp_flower_cmsg_tun_neigh_v6 payload; + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(payload.dst_ipv6, ipv6, sizeof(payload.dst_ipv6)); + + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); +} + +__rte_unused static int +nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow) +{ + int ret; + bool flag = false; + struct nfp_fl_tun *tmp; + struct nfp_fl_tun *tun; + + tun = &nfp_flow->tun; + LIST_FOREACH(tmp, &app_fw_flower->flow_priv->nn_list, next) { + ret = memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)); + if (ret == 0) { + tmp->ref_cnt--; + flag = true; + break; + } + } + + if (!flag) { + PMD_DRV_LOG(DEBUG, "Can't find nn entry in the nn list"); + return -EINVAL; + } + + if (tmp->ref_cnt == 0) { + LIST_REMOVE(tmp, next); + if (tmp->payload.v6_flag != 0) { + return nfp_flower_del_tun_neigh_v6(app_fw_flower, + tmp->payload.dst.dst_ipv6); + } else { + return nfp_flower_del_tun_neigh_v4(app_fw_flower, + tmp->payload.dst.dst_ipv4); + } + } + + return 0; +} + static int nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor, const struct rte_flow_action actions[], From patchwork Tue Oct 25 07:58:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119061 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 7EE7FA0543; Tue, 25 Oct 2022 10:00:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2B4EE42BD0; Tue, 25 Oct 2022 10:00:11 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2093.outbound.protection.outlook.com [40.107.223.93]) by mails.dpdk.org (Postfix) with ESMTP id 4F87142B8E for ; Tue, 25 Oct 2022 10:00:05 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FWOPo92UoKkgP4rL54TEXs6BM1w4AzpItFh0UqeqYAff79QmaNXdmUPjBMET0sNJZJZm+dcYK2YEwNJmMqFacEQsZUaU3AyZlTflslbaDrhSUxHm8XCEzsMGrHEGK4jtyCk8xZfNuvheyhzLCwcFV47AumjENgyWMEwo6Ox3ZQpvoAOipcAeoNkOyU1ypfhbrlLcoirpCkmFqK77FgClb8RQXVxKGtiIjAMnyy2PX+VKw7VEUvpMKkiK/+SnETHq6kGBpnhKOMbSlpq8hZQREVkXeXhRn+X/oA0zmXW+kK3O3IbwB1QpOjotjB+qV5Eii5WwA1d2/JPhqHQ/pjzb9A== 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=b/mnjWQ023jGw/OG9fUmtSnkQY2iidLOzgr/M65/+Zg=; b=Iqoe3KLBc0xblgsjD/cn7lS0UCYM0IViqHpntLtjJ7MhxXqr+V+b/TyF2WwsgoJ73cZGD6iVppLekoNE05/6NDKwJiiLJ6pORtiqKW2QFmwCJrWMASxWMxeIx+aPm7RSXeYJeI4yb3Obw9QWjYvcZcWVqNKq1+fM63EBHe3o3NVQeXQgojm9tJ9YdBOogDjrJZidD/x2KkMjwSvhRjpF59duJpVjZIdOjKPfvG4h7GkWgQhoY53sWRWtwTAd6mc9dQATW6fJIfP1XcIjqxwmhG7C/hO7awpXyprbylWPtpd9rHGdIV3LukHfngOQn/gIvt+LQKJykTuzk8cQqcFA0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=b/mnjWQ023jGw/OG9fUmtSnkQY2iidLOzgr/M65/+Zg=; b=HTuNW9QMfCu37qaKYRkQ3hgcyO0wWptE0uSm+8zlZIkpbn+12gfwcZCo/g0LbnRx/z9+FvhV9JQX4U7PWlBKWXXStMup4qWbFwweTj6NPhFoiCSBs5OG/So2WVspHqHZdSnCGG6OFUO+ljBoh5RyhnIuhr25cNUnDEVzoqxgQcc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY5PR13MB4405.namprd13.prod.outlook.com (2603:10b6:a03:1d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Tue, 25 Oct 2022 08:00:03 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:03 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 06/26] net/nfp: support IPv4 VXLAN encap flow action Date: Tue, 25 Oct 2022 15:58:58 +0800 Message-Id: <20221025075918.7778-7-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY5PR13MB4405:EE_ X-MS-Office365-Filtering-Correlation-Id: 58d845ff-510e-4aee-b3c2-08dab65eec70 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ooDiaHoo8q0FraIPNWI6WGwlrcBcYgnK7A71uOqOZfX6gU9gTJkVcBek5iJ/QFyD4v2niJS3sPVchXYP+ff43NldMKoVlDguP7vRRPH8jCDemTWh5qIXsw70Hl0qKUUcDz0Wu3J+bwr1pP6eZnPCIjSiqKqarfJKEODGLXYvHXzZox8McL2eCcYCml7AXav7pcQEtwdbDb5WTRFBvtn/h4B6yj9HjL3Fc7yRrv464advKIkKs424bvA9IjQ5o73DQWaDrWyD8NS23tNCTr/l6m33F04YRU9VnCKrIj0SDtSncHTJJHDlWRsaT7EP4QaH30r6u5Mcg+fbVDjjRSwpW7HxhW/nrpqWz9qkngN1Ctn9i508h+Zn75qQejVpIGWV4iEVo2VznmN18quckmaGC5ltDqmzJfZ6DLvMzmEBg00p+s80DdeApqFyzjINs0BAfg3euYVeBGs2brXla4KzfMPyy7SMEWdjigrMvVyvkyuZehrcebJmOoNW54Y/ggxk9UbvbCDm5KIoGqPMgXmGGM3ZXO5HDnAQmhhUKd2xf/hHi7c7V8cuEPYufu4ksEjD60KqpBuz+9u4a7OSjDZzyMKHpviBVOdbwjKWTeCbGYT/NoyoUbzX8uG9QwSohhsAWSRUqjKkMLq8Gt35bBVTJ+ChSUOQO4AR0L/InWgW8hMXhVKlmLhLDrx08tD4EfPp27fQY0z4Ncrr2hbYjXsDLS47nDOPW8PcskQYy9syBFAvWI3l8VtonDVTkLrLwn+aw+PbJpve4C7IMXa/1k1CpQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39830400003)(346002)(136003)(376002)(366004)(396003)(451199015)(36756003)(6486002)(5660300002)(66946007)(66476007)(8936002)(38350700002)(38100700002)(66556008)(83380400001)(66574015)(86362001)(44832011)(6916009)(2616005)(26005)(107886003)(186003)(6512007)(1076003)(316002)(478600001)(52116002)(8676002)(41300700001)(4326008)(2906002)(6506007)(6666004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?KuXMEedJL7b8L57jqUu7kJAmjLnP?= =?utf-8?q?63WxiVq7MbUUVTWplgoPtZt1YFEKUFjbsHeB/PsG9ifCPSUM3hV5yArQvoeTVLWPB?= =?utf-8?q?WX6Jn1e+CvI3UjB+Ti9OgN8a0utTabAqxLsv8uEKNt77QqqItA0BCa6b2nhcDtj2W?= =?utf-8?q?YF8boM2Jz2SMvVSg8f5x9PHTvnSBgoS8UgcNDGhmWvkWTKwNhge8oyp4qEIqHbODX?= =?utf-8?q?1c9umDnjSOTfrHUqOjrhbOv2v3CMofFejcoNqa1cg3brtRwRfLmdInt8mchRi492Z?= =?utf-8?q?bzOjB4IirNHXJoabfEmPgplybMkiEteEcM44Jzso1vFzRuDeQHIGNTyg0xICh5jAR?= =?utf-8?q?oP6wn+nVju8IA7qj3jA5cnLS/19SMuRGd9BAOOxuchAM0r/rRL0E3UCZAZwATH9eP?= =?utf-8?q?IWUbKzvLGnFgI7OMVyUF3fUB1PN84mcqIvYE3/Ic0BBY+RDHqMFect8z8uGCOeMcI?= =?utf-8?q?U02fmM2qcKRT/ucHEBEJMJtNeD5TUA6gPInVIpERcLwBK931c2lRlpRc9TfPS6Rar?= =?utf-8?q?8RGck2Imo4vlwnfYCffuOgbjSbJVoYvPM8LsW2jncoQqwnvZ1z+vONIBuaLxlU5QV?= =?utf-8?q?f1ro2xJcU4jHOJIZiGVPEkj3TXgM59I5Qje0S4dckBRLtfDxUfPjSrZHBFgzllmHO?= =?utf-8?q?wfKwBGEZPQr7TIDQzrA+ZcfVJ4p4PtJ/GotXRmR0S2an1H6Pc3h0rQndyrda95zDj?= =?utf-8?q?Lq7ZBhyW4DnaF+Ef+iqTT43P9sBkZTt4Gxj78xqwt0/Gzsu1Dg3OGTLnM8P5MM9CE?= =?utf-8?q?iSTkkJmLjggesBUMKXG7/n5xyFbXCjpvxTK6Tiffy1QN0MfwLAwTtyAoYuwL+yZRK?= =?utf-8?q?9GFEmxGWFuae2tYcdi/IO5ASYlocQGTC7d5FWH4dCwYVxk8siGoz/yoTqwDn6SfVf?= =?utf-8?q?myZZFYH1H8ln0I/l73eas2q9dN53V+XJDbeAoQFv3oKkVxiNDtFhLf+/XcXnTt+ha?= =?utf-8?q?dKhy8l7kK0Hd3GFpGWBH+9qhIIi2AFRhdN/noQ26ogL9j7UF8UJLnl1jyt7RuL9a4?= =?utf-8?q?Cj4MXJIUIW62dYImpbI3qzsXHROo8YjDqXoEX832wl2aeoJpOf1kb2/50xVUVtBDM?= =?utf-8?q?rM0bU3V6w+1Wi5/aCS1EGBxwSK1fLJvB3hVsErKTs8ZdHEP9ov8IzYzWPOmcEgKBV?= =?utf-8?q?BgAb3YYAPcCNCA8NnOww/0mQn/3KRqzKdXXMauoF5k/YlBKRYf00Z6xEuS4rNwja2?= =?utf-8?q?Lajalh1gN7AbOYTfgqnqiIfIA6dgG9aa5C7jKlbyb2I9d+DaHKDM9qc+L23/BENpP?= =?utf-8?q?fAtc7gUKuc7p0zT2j6xyrUqYYHmzNHPBFb3671K7wMubiTOri797oPQQZmkrJ1U2a?= =?utf-8?q?NzyD30OkjOa65GT+tVI6pkntCa8Exuz/f4UAhhddsjyX5CvWO7xRzfcNUigPl70xX?= =?utf-8?q?5G5ZNXy/c30Fea3u4jq0Wak8TzsVjB7kBatEopJ2AX8YuRVgrHhurC9zGYvRPS2zu?= =?utf-8?q?bg3lValt6ENa2fOBImXwcMWiyFung6oYH+aFxWjaPsNwxKQNlAi5KpSAj6TTlG9aC?= =?utf-8?q?989b5T60R2FEvlMqnezxB90V1XVq5k6/EA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58d845ff-510e-4aee-b3c2-08dab65eec70 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:03.8211 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XlcHrWIklg7fYlUwrsXUXNSVKRAnEtH77rpg/ysrOhfUeg7WJaRDmHlA3iUIBJ6YKMQh7lg0L2ZmaWvWYrNHa7x7TX2N7JIJt5ii9IoueN4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR13MB4405 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 the offload support of encap action for IPv4 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 132 +++++++++++++++++++++++++++++-- 2 files changed, 128 insertions(+), 5 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index faaa7da83c..ff97787bd9 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -56,3 +56,4 @@ set_mac_src = Y set_tp_dst = Y set_tp_src = Y set_ttl = Y +vxlan_encap = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index e1b892f303..d2e779ca96 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -10,8 +10,10 @@ #include #include "nfp_common.h" +#include "nfp_ctrl.h" #include "nfp_flow.h" #include "nfp_logs.h" +#include "nfp_rxtx.h" #include "flower/nfp_flower.h" #include "flower/nfp_flower_cmsg.h" #include "flower/nfp_flower_ctrl.h" @@ -19,6 +21,17 @@ #include "nfpcore/nfp_mip.h" #include "nfpcore/nfp_rtsym.h" +/* + * Maximum number of items in struct rte_flow_action_vxlan_encap. + * ETH / IPv4(6) / UDP / VXLAN / END + */ +#define ACTION_VXLAN_ENCAP_ITEMS_NUM 5 + +struct vxlan_data { + struct rte_flow_action_vxlan_encap conf; + struct rte_flow_item items[ACTION_VXLAN_ENCAP_ITEMS_NUM]; +}; + /* Static initializer for a list of subsequent item types */ #define NEXT_ITEM(...) \ ((const enum rte_flow_item_type []){ \ @@ -724,6 +737,11 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], tc_hl_flag = true; } break; + case RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP detected"); + key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); + key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); + break; default: PMD_DRV_LOG(ERR, "Action type %d not supported.", action->type); return -ENOTSUP; @@ -1772,7 +1790,7 @@ nfp_flow_action_set_tc(char *act_data, tc_hl->reserved = 0; } -__rte_unused static void +static void nfp_flow_pre_tun_v4_process(struct nfp_fl_act_pre_tun *pre_tun, rte_be32_t ipv4_dst) { @@ -1791,7 +1809,7 @@ nfp_flow_pre_tun_v6_process(struct nfp_fl_act_pre_tun *pre_tun, memcpy(pre_tun->ipv6_dst, ipv6_dst, sizeof(pre_tun->ipv6_dst)); } -__rte_unused static void +static void nfp_flow_set_tun_process(struct nfp_fl_act_set_tun *set_tun, enum nfp_flower_tun_type tun_type, uint64_t tun_id, @@ -1812,7 +1830,7 @@ nfp_flow_set_tun_process(struct nfp_fl_act_set_tun *set_tun, set_tun->tos = tos; } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, struct nfp_fl_tun *tun, @@ -1922,7 +1940,7 @@ nfp_flower_del_tun_neigh_v6(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow) { @@ -1961,7 +1979,81 @@ nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, } static int -nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor, +nfp_flow_action_vxlan_encap_v4(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct vxlan_data *vxlan_data, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + const struct rte_flow_item_eth *eth; + const struct rte_flow_item_ipv4 *ipv4; + const struct rte_flow_item_vxlan *vxlan; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_flow_item_eth *)vxlan_data->items[0].spec; + ipv4 = (const struct rte_flow_item_ipv4 *)vxlan_data->items[1].spec; + vxlan = (const struct rte_flow_item_vxlan *)vxlan_data->items[3].spec; + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v4_process(pre_tun, ipv4->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_VXLAN, vxlan->hdr.vx_vni, + ipv4->hdr.time_to_live, ipv4->hdr.type_of_service); + set_tun->tun_flags = vxlan->hdr.vx_flags; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v4_encap(app_fw_flower, nfp_flow_meta, + tun, ð->hdr, ipv4); +} + +static int +nfp_flow_action_vxlan_encap(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action *action, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + size_t act_len; + size_t act_pre_size; + const struct vxlan_data *vxlan_data; + + vxlan_data = action->conf; + if (vxlan_data->items[0].type != RTE_FLOW_ITEM_TYPE_ETH || + vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV4 || + vxlan_data->items[2].type != RTE_FLOW_ITEM_TYPE_UDP || + vxlan_data->items[3].type != RTE_FLOW_ITEM_TYPE_VXLAN || + vxlan_data->items[4].type != RTE_FLOW_ITEM_TYPE_END) { + PMD_DRV_LOG(ERR, "Not an valid vxlan action conf."); + return -EINVAL; + } + + /* + * Pre_tunnel action must be the first on the action list. + * If other actions already exist, they need to be pushed forward. + */ + act_len = act_data - actions; + if (act_len != 0) { + act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + memmove(actions + act_pre_size, actions, act_len); + } + + if (vxlan_data->items[1].type == RTE_FLOW_ITEM_TYPE_IPV4) + return nfp_flow_action_vxlan_encap_v4(app_fw_flower, act_data, + actions, vxlan_data, nfp_flow_meta, tun); + + return 0; +} + +static int +nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], struct rte_flow *nfp_flow) { @@ -2118,6 +2210,20 @@ nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor, tc_hl_flag = true; } break; + case RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP: + PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP"); + ret = nfp_flow_action_vxlan_encap(representor->app_fw_flower, + position, action_data, action, nfp_flow_meta, + &nfp_flow->tun); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Failed when process" + " RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP"); + return ret; + } + position += sizeof(struct nfp_fl_act_pre_tun); + position += sizeof(struct nfp_fl_act_set_tun); + nfp_flow->type = NFP_FLOW_ENCAP; + break; default: PMD_DRV_LOG(ERR, "Unsupported action type: %d", action->type); return -ENOTSUP; @@ -2410,6 +2516,22 @@ nfp_flow_destroy(struct rte_eth_dev *dev, goto exit; } + switch (nfp_flow->type) { + case NFP_FLOW_COMMON: + break; + case NFP_FLOW_ENCAP: + /* Delete the entry from nn table */ + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + break; + default: + PMD_DRV_LOG(ERR, "Invalid nfp flow type %d.", nfp_flow->type); + ret = -EINVAL; + break; + } + + if (ret != 0) + goto exit; + /* Delete the flow from hardware */ if (nfp_flow->install_flag) { ret = nfp_flower_cmsg_flow_delete(app_fw_flower, nfp_flow); From patchwork Tue Oct 25 07:58:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119062 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 0510EA0543; Tue, 25 Oct 2022 10:00:57 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E3BB142BEC; Tue, 25 Oct 2022 10:00:11 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2099.outbound.protection.outlook.com [40.107.223.99]) by mails.dpdk.org (Postfix) with ESMTP id 17ED542BE9 for ; Tue, 25 Oct 2022 10:00:07 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YxHZyNihzOUt9xj7ftdi0tFO/zaHYauUz54Qapn8uDHle4b8dL014YQ0wo1OiqsFkl5FbSQbSnT/zx8CiEK+BNKt7vCas9+gJbxTzTvS5vTxS724AzvlyK8ak1PaNHdzfqTD9fkKVOMYIcI/ho9wkW+ElsxEpxt/SAc506pAAYj7TzTy0xT/3S1T2Euo44C87mkh4Q17s4xS1DTjxFi9+BwXlrhWDwYtZMMrBvcm5QaEzmyYd1Vmlxm+5wAsN1ZovQgbJPOrtnU0UbeQUEJiJVxfubOJC8CDMcPJNxg4CCENOfwU1TXpTPwBIsEliwTpe0816ewVemDsMilEBH03kA== 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=u/6O6AXtdtmXzwHPzC90Rk6bMjlznA0EiuBpaR6PoRk=; b=isANva7st94bORApUXs8fPMuQHSl0lo09G6BGXqewmsE1R+itgPdicziwOzdHM/ENiQHE9fGptvwxRS1Wx77+hx5NW9Hcs8+Gx3tW90zfwUUHukTVDNkjJVP8wtUUN+IJ6a3FPIRq4sfd+wgzrBsGve7HX4mK7Ev7QsaOcQx9shF56bHDGODp1bmhcWT1LIPBBZt4qEhKIbxL9+uJDLs/55yfirdBEzpJvQOTzSEKqt6CObzdbdgPvi432jKP5U8EX0N+FvZdaMpBvV+MajsJtOhxjEPPr4nsgACdyxzqvTObc++G55hojVhaZ80Z6N6zFz3DqGoCmIPQ/G6ueIGdA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u/6O6AXtdtmXzwHPzC90Rk6bMjlznA0EiuBpaR6PoRk=; b=izWal4pgMa62DIZnospOIZDKOOkUlsHewAudmmJBp5OBdyukbHNYXHZhI0sr99bkopaQ39M0vu5NqTLDUH4tpmQv8zjNQP6480hQ4kTURGCkl3xgtWCOgJjFIHtUE4E2Oqp4igP3jvjU9NhcbuOGJ0goBOp63LjfK6goj0E7MB8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY5PR13MB4405.namprd13.prod.outlook.com (2603:10b6:a03:1d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Tue, 25 Oct 2022 08:00:05 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:05 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 07/26] net/nfp: support IPv6 VXLAN encap flow action Date: Tue, 25 Oct 2022 15:58:59 +0800 Message-Id: <20221025075918.7778-8-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY5PR13MB4405:EE_ X-MS-Office365-Filtering-Correlation-Id: 1566f093-be71-4b0a-fe37-08dab65eed9f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6shezFjb9onS5wTGEsVyYCeM1AD3/NgusAm0yviAlcqWy4w4C4yYeRFwgp+6FmZcVENJKHvRlGHT5e4FRjtH7rQ65tixWtyE56HtFEhKBLq7k4SufLGNe+t7Mhb+podfCjeaenRCBbamUV3qC1hEVHSwEtTlvnUhbkpr36dvnMYyjmL2uix5i0ReV5osTt4XwUvG9Y8ivTNQ0IOIaKtrfymzZqqEdVtKzqI3AYg6JoML5EHDWinPCrj4K9l4CQBbdHEsKEEaa50B1T5n8K8zVP21Vd59383l33Z4xor4BQPomJoDZ1UJW6FpWDSkdEV8w5VY55Pt8VA+h/0OIoZi1uxa4/SsKknUnx88qJGqMlDviESA5jbIn0J7wbuh4iugIZd16j6RS3mk/jZ/VPD1kKr+YzguqhGjEqkykiAx58J2wDMzI/aW8F3k6TM4y7+R4Wi67lsCLN+O2AtFfoLCaWmBZMBLdPj5iKRZcgmarYb00aSsV/TolTaIHbp16cqGRGzRvhxdyI6ZGlHkqwFJ5tAZDkkiqjK4BUnhDwCW92qwlnq/mirRtubKPZmDK3u65QjoTwz8eFwq3wrlhVJ4iNcfV1IJZH7GjoZKQ0LVsEUI45BfWcruCevzk1IaSWbjRU++FOzNicz+BdxJc+7JM2SKeSl51DQGk/ERCeGJdKNnp+wd8KOdGCQnYroiapo66vgaO3iY1zozJxUiMDuHSzSeNZOpggV/L/1lFyp2ZUYwN8+VKSFrIXeTj066SnYk3udzs3i7hjTanaYYfJu5YA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39830400003)(346002)(136003)(376002)(366004)(396003)(451199015)(36756003)(6486002)(5660300002)(66946007)(66476007)(8936002)(38350700002)(38100700002)(66556008)(83380400001)(86362001)(44832011)(6916009)(2616005)(26005)(107886003)(186003)(6512007)(1076003)(316002)(478600001)(52116002)(8676002)(41300700001)(4326008)(2906002)(6506007)(6666004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yrAq7iJEIhrNqhdb6uHbzb506a4E?= =?utf-8?q?THrKTztjGvtIKqdSFNNiboxuY0UMj+0ruCgYxxnkoC+4dmdLyQ4uq8fQ7vC0MiQr3?= =?utf-8?q?JLRFLgNOp0YFGGZESVlT9c8aU6raKYmMlIacKBM/6ZLNQYqKZwlkDCv6yFvONozm8?= =?utf-8?q?ra4UOkuvF22beRaUtLUe1F4fCS80ml9QPbNWOucLC/26DQY70M/m+tY11kkDwUNP7?= =?utf-8?q?g74UuFm6I9kiL6uAzFgK1jPpY8LqF9m+Wj5xA0hL3ka6CWk1ArYUIJ7ykOjLH7cgA?= =?utf-8?q?WMJb58A2T6varxuJvv1A/EpDYBhpk6btS8Jh+pc3gkMes+jJVdNL81kVy/bUuYV/0?= =?utf-8?q?JQ1euR5B/8NpEbct99IdEycY1uQslKcvvjnQJxA0Kctu+bQP/sUfYZN8PoBJOJ/wo?= =?utf-8?q?yAvEvyqL98kKIHdA/OYDCnn+vRx+hK6V5JQs/vYwa0CLx1zZwYM6OxJyPKlC468Iy?= =?utf-8?q?5rG1f93Zo3d0RHQXcgMPSavV4Pk4Cm/jyNR5V81UD8y6autKc8ZtzxgIrsHlyxBrS?= =?utf-8?q?vo0YrDz14iSVW5n4q6W7Ae6qZ0OSGy/2KnuC83tEc3mR3u1/D5h8eaFMgpmOAcbFX?= =?utf-8?q?B8izWxTfdQ0LIl4IH07r0USiV6cpKbe7RpxuhcEPChtm7k+DYXg0c1GPm1z9Jsj7J?= =?utf-8?q?49sp1ohKsHDUG2THMmmrhFlTF01aImbroRKmcPB9sTLN9qVQEiFv0v7oOX+kHLexj?= =?utf-8?q?moC5XNO2JfKaNnm6X5W6vxzktZWB+BjRspC76A2pQQJ1aqSxDcFEB7XyNeSdXiRkl?= =?utf-8?q?PDgLzJmJkEh+efe+jwgQkgGZ91uv9xGVRzPjXY0+MQANX4BEQj6vKZtr0brDGNVFE?= =?utf-8?q?9y3I2Z92opy1+FMVNQCXhF7BDybXYNMLRRDQ64HTCuQ9Ti3Nq/P6uQpL289Uvm+N+?= =?utf-8?q?wdkDK7YJl+5XcOV6EzFbwhcAoka8VroPI42HfH8XLXqLpwjUaBjp5c+2Eh9FW1xGe?= =?utf-8?q?Z6B4urMsmE5hxeQHlRPaDKWhHDi2JzQpw+r+z3l/BYLrNA7quhQScu+lPns1eHA1L?= =?utf-8?q?VMwZgSMsLW9iNb+E6gfSckntUfNTRtx8XGvOMLfPCKhAGsCc/8GqzCL1oP4kd0yZD?= =?utf-8?q?U+AxULt8kwgNkX+6jidwZM76W0YmaqTepx1SjpxGRjVFX1lXycIn7IWGXjF3hg259?= =?utf-8?q?JTuu7TQ4Ol2hnwQw4C5YgjmAhgth/cj/e/4c6oUzgz+kK+1Z//Tr3BROzmQv4qZ0A?= =?utf-8?q?Wff5FUbgkdJotbEVbp6EAlBzU3KzO7qKBzwuaKHkXFOEg5hjeavSry3eAJf9xQFd7?= =?utf-8?q?ckflU44WfDq8aoyu2id5JflVRC8lx8qVcv3N4pY7AC+lTq32sk9SM5ShuLFJEEt8/?= =?utf-8?q?kkVgz0HfJjaJTsNq4StnG2Pns9dZoaU6JLTm5KNM/4qs+EcXHZbzZgWiRpyL4Y+kh?= =?utf-8?q?C9Tvd+638ktmxeYpFRgdq2WA5Kub7xfi2Mcf//xF9y+wxx0wXNWBQ+PGiYyBdbOPw?= =?utf-8?q?XnrdfBQehlGNFr8tWXLL6H4b3tLqGXgeiCsu/c9bh5hvpeAjO36l/RXpZ6GX7cHIT?= =?utf-8?q?tZX70ZtEPBM1k5rLR83iH7dACVmyro+XWg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1566f093-be71-4b0a-fe37-08dab65eed9f X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:05.8243 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rtBu9D2fhAp39+ckGjoYOLNVD1ztQLElN/WZ2K3jYQ7R0G6iVBq0nZKhzVfgAKtPE/CLh/hx/kRnzkf1uWT5h1416oIDqArXbU7salPwq1w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR13MB4405 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 the offload support of encap action for IPv6 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 48 ++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index d2e779ca96..9ee02b0fb9 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1799,7 +1799,7 @@ nfp_flow_pre_tun_v4_process(struct nfp_fl_act_pre_tun *pre_tun, pre_tun->ipv4_dst = ipv4_dst; } -__rte_unused static void +static void nfp_flow_pre_tun_v6_process(struct nfp_fl_act_pre_tun *pre_tun, const uint8_t ipv6_dst[]) { @@ -1885,7 +1885,7 @@ nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v6_encap(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, struct nfp_fl_tun *tun, @@ -2013,6 +2013,42 @@ nfp_flow_action_vxlan_encap_v4(struct nfp_app_fw_flower *app_fw_flower, tun, ð->hdr, ipv4); } +static int +nfp_flow_action_vxlan_encap_v6(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct vxlan_data *vxlan_data, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + const struct rte_flow_item_eth *eth; + const struct rte_flow_item_ipv6 *ipv6; + const struct rte_flow_item_vxlan *vxlan; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_flow_item_eth *)vxlan_data->items[0].spec; + ipv6 = (const struct rte_flow_item_ipv6 *)vxlan_data->items[1].spec; + vxlan = (const struct rte_flow_item_vxlan *)vxlan_data->items[3].spec; + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v6_process(pre_tun, ipv6->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_VXLAN, vxlan->hdr.vx_vni, + ipv6->hdr.hop_limits, + (ipv6->hdr.vtc_flow >> RTE_IPV6_HDR_TC_SHIFT) & 0xff); + set_tun->tun_flags = vxlan->hdr.vx_flags; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v6_encap(app_fw_flower, nfp_flow_meta, + tun, ð->hdr, ipv6); +} + static int nfp_flow_action_vxlan_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, @@ -2027,7 +2063,8 @@ nfp_flow_action_vxlan_encap(struct nfp_app_fw_flower *app_fw_flower, vxlan_data = action->conf; if (vxlan_data->items[0].type != RTE_FLOW_ITEM_TYPE_ETH || - vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV4 || + (vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV4 && + vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV6) || vxlan_data->items[2].type != RTE_FLOW_ITEM_TYPE_UDP || vxlan_data->items[3].type != RTE_FLOW_ITEM_TYPE_VXLAN || vxlan_data->items[4].type != RTE_FLOW_ITEM_TYPE_END) { @@ -2048,8 +2085,9 @@ nfp_flow_action_vxlan_encap(struct nfp_app_fw_flower *app_fw_flower, if (vxlan_data->items[1].type == RTE_FLOW_ITEM_TYPE_IPV4) return nfp_flow_action_vxlan_encap_v4(app_fw_flower, act_data, actions, vxlan_data, nfp_flow_meta, tun); - - return 0; + else + return nfp_flow_action_vxlan_encap_v6(app_fw_flower, act_data, + actions, vxlan_data, nfp_flow_meta, tun); } static int From patchwork Tue Oct 25 07:59:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119063 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 9F922A0543; Tue, 25 Oct 2022 10:01:05 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BB4FB42BF9; Tue, 25 Oct 2022 10:00:12 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2134.outbound.protection.outlook.com [40.107.223.134]) by mails.dpdk.org (Postfix) with ESMTP id 097BE42B95 for ; Tue, 25 Oct 2022 10:00:10 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jRqh+1UmvUE8xmXQU4mkn8mw+bcqyKklC2mNI9l0TTlLiJLZOp7Ek5/Nmxj2gU9JHW/voNEnc4PhHi+wQ4rXK1XCU/jAd0Ov7MnTTPvePGUIvViRDq4vc8pdHhrjcw7PF5F3JvQD8Ybu0k7C0MBZa/NWhQStfh/NG1xlsTcq2BaNn4gyn45x3wpLh6VApXIjv6yb2kY/E/8bnRFEcYizYy3BWmS13lQcvueTGyEQk5T14az9kRSNYoXNAbn9PncLqOi6nV3IujCBv+Ng5vp7i4qfIGS4ZRPmOy1snPsUcftijAuomeJyvKkqaFauoJgUsBUyt9TIvR0kZ7sL48jvAw== 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=puotpMiM7pCnDtHyDCMlyhT/P4hwQb830if8nzxODvk=; b=DAQ7vtSCyJYLJskVkwtbe/NN1XZcohnchdD2tP8/oWhM1S4wxvxF1cfRb8/W64hz+g1xV/oWD+8ZY1RHlO/cM2zrrqwCJSkC5YCsRzB1MmytgyjP8hz93qwtd3wj2zJ2gnLhCqbw8iLbbcTb9pDzjxLwHSLvcjqoLT47arZvidrN3XLb2rdj3Q5/IJWEne3SpnRNiMnw/YxXNYqFnD+kRF9X35iPKhq6dcTBVVTtI+mM7ioVGSQTtVaUST/HJFY/shjKfFa1cb7FDCRaTBR5EHJsJZsgjTzwsdB10VR48WK+imjV+rKw8ezm0oMWEcrPmsWkBCLJAfnM/QSGkfbaDA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=puotpMiM7pCnDtHyDCMlyhT/P4hwQb830if8nzxODvk=; b=q91o0QqfXsGz/LaAYb5aYMwREnGEsRu/h4w8xPYj9AqH3qJwICQ4thrXtcz5BTBh7Kd4gZwtPVisKoJ1ig4kln7GjuspsRFaSCdqtXrEhQmpRZEvtWs63nVO/HwwbSoZD0H3lPnSVzqgfYtR71Z46wvhxsh63/GWjyHUzqMAcQ8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY5PR13MB4405.namprd13.prod.outlook.com (2603:10b6:a03:1d4::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Tue, 25 Oct 2022 08:00:08 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:08 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 08/26] net/nfp: prepare for IPv4 UDP tunnel decap flow action Date: Tue, 25 Oct 2022 15:59:00 +0800 Message-Id: <20221025075918.7778-9-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY5PR13MB4405:EE_ X-MS-Office365-Filtering-Correlation-Id: 784c54d2-c419-45ed-1f1e-08dab65eeed4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5svVzXuTq0tpfSh16+0N3DIvFL5XuNIgEWO6MJtXDXDLDFdxDQdXziHZqBGn6V/Y/C369KpBfJns74WryEb7wpAjTA3PyjpgYzrxbfCJagkwsEl99rX6G+mJcYj/kmM6ULy4W0hbnsarUAeVo/5waeFUgc59rGkOtHQbjxWKs5PteYbjqjf4kesoh2hjj7+541zOuOZT2xDKzJ/xAL+I/D8j0l/i2pFtJqLb4lAiFe0wrtnmE1SmAd4hKTcHiu68iR/necOE7bNZyR33lDECIv7Rv4D2y5h3W2z1tP5zCjvwrRpBWNEDm8rnRVlubZCPADcvWZthI8f3KyonagC+Kydn8arYtFZ2NKSzoAscPR3T5NhskoTsYlIf4RCwLHgXAfaJ25fN5l3V92JM2B+6QBTo0fA4HIVVDd4g0OUH55VgqWZ6cZmRWRpXIhF+Dsv/ZQVsHgprmux2ufPUebYj8nPADy05i9XTgxFWFObtVSvAt1ns+2IpfdlVohcHdbxT/+MxX7WEOhMaiEJ8v384HiwUR1RLTw6YSOjJP3ja3/4llHn2g9e/u07L4hdwE0mElmFgniwK/9t2mgmuCbYedi4Zdj1tD0/GjFFkYZvz025/U4NPCvrmC/NhN2gHf1Ac20aJ0Njf8o4OUDnPkNNb38Q5kUISrxYGgEJRawFw8UkYXigaBk4jqzST+jXTCkdGsIIfCs/GdaNU0AlQD9fFPP4eJqXYqtXr17K4s0gE+T+OwiB/CHgnR8W60rvjHtGW59YLZ0SlUbiWCREilH1/7w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39830400003)(346002)(136003)(376002)(366004)(396003)(451199015)(36756003)(6486002)(5660300002)(30864003)(66946007)(66476007)(8936002)(38350700002)(38100700002)(66556008)(83380400001)(66574015)(86362001)(44832011)(6916009)(2616005)(26005)(107886003)(186003)(6512007)(1076003)(316002)(478600001)(52116002)(8676002)(41300700001)(4326008)(2906002)(6506007)(6666004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?PQ4G0SeMTdIb5FeGqURPBo43GJGt?= =?utf-8?q?RABsKuO5PHXGZSEMC4uTa9FczHvD/6kReFAnLjFZs757rUpvkr9bvywdYNwt/1o5i?= =?utf-8?q?ewHmj0MApZc6LRdmNESv/Ej6wOxYtSvfptcD440kuRMe2rLWESXXIKA5ADpjJbnyP?= =?utf-8?q?Pivnhjv7jlOR6HN8Wr4V9T0zdx0gC7NbaTeBCaP5C/5nhau/98yS/I5EjFIeEQOVt?= =?utf-8?q?FdXMCJ/T6Rk8mdClxWZJPwf8x6Kt4Ex0RUYB3e25WW4azo6i8hmWgXv7Se9eDHMiQ?= =?utf-8?q?+g5AGiPwhUux9vZymYrXswr1SJjp1a3wPzLH4awC5/nao9uXQ8ps0MWpr4RTYZZ+u?= =?utf-8?q?K7RDVkklJYnL4ecqU4m0+6PgKGNWBMH42P8sYr1+9/sJys5IS6zv4I/IsyEcwU8n8?= =?utf-8?q?R3N+g8fH8oWOLSVjX1eShCHQnvrmwZElhBx+lK+XXHH3eT5R6RR0eahVwxwcMbAhq?= =?utf-8?q?q9ENAuUJCy38c0QqXWa36C3kVbu7ePqXSR8id2x0GbpsmbR0pJLQ6bZzLFABrRteC?= =?utf-8?q?EvY0CwutE7Y9ZjhQdY1GO76n/RTrbXPP/FcWcwOK5g602lI7HnJuwHhOgxEX4aHO7?= =?utf-8?q?l/VsfdgW86RY6KqFmAivjCPypywl/x36Dw4ATb/UmvBX9MxSOhVySHJ7oo1ymmdb+?= =?utf-8?q?zqAgCbCA86a2+59Shyd5RcT/zU0DFUx9kkkWGQ0g+jYKt8xxDyVslffbl6aWR8AxA?= =?utf-8?q?asjP7I8JHm0gOFNalKkICz2B0XqyLBYNmveDT3tbtSXnJ8qOuP5iPj1LNOA6aeWRF?= =?utf-8?q?vrVI0Db5s+TU1tDrkSwSesBbS3wpAzFMQ/EBL5Ns/y1mkujHscFKJaISMzRHssj7u?= =?utf-8?q?n98tnX0omBu+CpXdesa32EcsRo/liHQxorXjnBpwUUxJOFV5TsOGc9jOArkAUpBNF?= =?utf-8?q?TWq2DH51cTQDNf8joKWEY523CKeLHI+8jVNbaOGvQXJemFCovpcuDuTDYRjykiXOH?= =?utf-8?q?9jl4l5DeB1y5wB9SvT0EUoVgTB8vhahJTWG2QzSw5lEXYbzgR68F3S3F1rAJCccfs?= =?utf-8?q?PPqk8dhZYRovxZmZ1FTNER+2E9EW+1sXR3tSThXwvOFr7zJMtn/tVIyTnv9LaiVs2?= =?utf-8?q?0atq3AfZQnN7Zbuhsf+44uhSauLpI3binr/6ucnDGWjdGdYFHGsP+5GWnN3rmlfZX?= =?utf-8?q?y7WDpjY+XsMdHCFOoFse++l+gPXUeHlNI9xBY/0ahhM+YBIITzx9cwgHAcp+eXCNT?= =?utf-8?q?EXXgcL6fYceZ+3Ym/CMbI736aPOKXeXsiDPk2V/yo2co2izdlbF4oiEiWn/KtcKQq?= =?utf-8?q?kLWSuw4OVZR9Jeh/WhEec971nz+BCk8zs//CcmqYXH5QhsCGGZq6dF2gMUv2VkFgv?= =?utf-8?q?ByxhsPIbSKj/Uw7TpyQwd84Tq2Xs6qvJR5IzOrFLBWl19khtOdmoaOTDAk/qnDHX+?= =?utf-8?q?UA6o8OVv+KPo73GwlHIRSJbKUe6P1xdoSEdQeJJps6GeU9hpR+5v968+Z19YxjT+y?= =?utf-8?q?gaG7bPDuzMiaEB0EXxNqy/GnRc+bqwQ/StmkfRj3o6nGiRlOSERYYjBFMAFhx7e83?= =?utf-8?q?eaoVaCk7mLCa/On3IWNtyxnHvPdEuMkxNQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 784c54d2-c419-45ed-1f1e-08dab65eeed4 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:08.0172 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: t5VtinIwaj9aFFdlfFU+Aq9FaVLV9y3vKC0QX6PoaxqxPp7gu5dsGGsafRc1aeCT1e5XKYggSvT49PHPv4FRIhiQ/QLPXhsb52ml6nH3DcI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR13MB4405 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 the related data structure and functions, prepare for the decap action of IPv4 UDP tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/flower/nfp_flower_cmsg.c | 118 ++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 94 +++++ drivers/net/nfp/nfp_flow.c | 461 ++++++++++++++++++++++- drivers/net/nfp/nfp_flow.h | 17 + 5 files changed, 676 insertions(+), 15 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index ff97787bd9..5ccfd61336 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -40,6 +40,7 @@ vxlan = Y [rte_flow actions] count = Y drop = Y +jump = Y of_pop_vlan = Y of_push_vlan = Y of_set_vlan_pcp = Y diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 8983178378..f18f3de042 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -304,3 +304,121 @@ nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, return 0; } + +int +nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower) +{ + uint16_t cnt; + uint32_t count = 0; + struct rte_mbuf *mbuf; + struct nfp_flow_priv *priv; + struct nfp_ipv4_addr_entry *entry; + struct nfp_flower_cmsg_tun_ipv4_addr *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v4 tun addr"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_IPS, sizeof(*msg)); + + priv = app_fw_flower->flow_priv; + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_FOREACH(entry, &priv->ipv4_off_list, next) { + if (count >= NFP_FL_IPV4_ADDRS_MAX) { + rte_spinlock_unlock(&priv->ipv4_off_lock); + PMD_DRV_LOG(ERR, "IPv4 offload exceeds limit."); + return -ERANGE; + } + msg->ipv4_addr[count] = entry->ipv4_addr; + count++; + } + msg->count = rte_cpu_to_be_32(count); + rte_spinlock_unlock(&priv->ipv4_off_lock); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} + +int +nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + uint16_t mac_idx, + bool is_del) +{ + uint16_t cnt; + struct rte_mbuf *mbuf; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_cmsg_pre_tun_rule *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for pre tunnel rule"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_PRE_TUN_RULE, sizeof(*msg)); + + meta_tci = (struct nfp_flower_meta_tci *)((char *)nfp_flow_meta + + sizeof(struct nfp_fl_rule_metadata)); + if (meta_tci->tci) + msg->vlan_tci = meta_tci->tci; + else + msg->vlan_tci = 0xffff; + + if (is_del) + msg->flags = rte_cpu_to_be_32(NFP_TUN_PRE_TUN_RULE_DEL); + + msg->port_idx = rte_cpu_to_be_16(mac_idx); + msg->host_ctx_id = nfp_flow_meta->host_ctx_id; + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} + +int +nfp_flower_cmsg_tun_mac_rule(struct nfp_app_fw_flower *app_fw_flower, + struct rte_ether_addr *mac, + uint16_t mac_idx, + bool is_del) +{ + uint16_t cnt; + struct rte_mbuf *mbuf; + struct nfp_flower_cmsg_tun_mac *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for tunnel mac"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_MAC, sizeof(*msg)); + + msg->count = rte_cpu_to_be_16(1); + msg->index = rte_cpu_to_be_16(mac_idx); + rte_ether_addr_copy(mac, &msg->addr); + if (is_del) + msg->flags = rte_cpu_to_be_16(NFP_TUN_MAC_OFFLOAD_DEL_FLAG); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index d1e0562cf9..0933dacfb1 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -195,6 +195,91 @@ struct nfp_flower_cmsg_tun_neigh_v6 { struct nfp_flower_tun_neigh common; }; +#define NFP_TUN_PRE_TUN_RULE_DEL (1 << 0) +#define NFP_TUN_PRE_TUN_IDX_BIT (1 << 3) +#define NFP_TUN_PRE_TUN_IPV6_BIT (1 << 7) + +/* + * NFP_FLOWER_CMSG_TYPE_PRE_TUN_RULE + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | FLAGS | + * +---------------------------------------------------------------+ + * 1 | MAC_IDX | VLAN_ID | + * +---------------------------------------------------------------+ + * 2 | HOST_CTX | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_pre_tun_rule { + rte_be32_t flags; + rte_be16_t port_idx; + rte_be16_t vlan_tci; + rte_be32_t host_ctx_id; +}; + +#define NFP_TUN_MAC_OFFLOAD_DEL_FLAG 0x2 + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_MAC + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * Word +-----------------------+---+-+-+---------------+---------------+ + * 0 | spare |NBI|D|F| Amount of MAC’s in this msg | + * +---------------+-------+---+-+-+---------------+---------------+ + * 1 | Index 0 | MAC[0] | MAC[1] | + * +---------------+---------------+---------------+---------------+ + * 2 | MAC[2] | MAC[3] | MAC[4] | MAC[5] | + * +---------------+---------------+---------------+---------------+ + * 3 | Index 1 | MAC[0] | MAC[1] | + * +---------------+---------------+---------------+---------------+ + * 4 | MAC[2] | MAC[3] | MAC[4] | MAC[5] | + * +---------------+---------------+---------------+---------------+ + * ... + * +---------------+---------------+---------------+---------------+ + * 2N-1 | Index N | MAC[0] | MAC[1] | + * +---------------+---------------+---------------+---------------+ + * 2N | MAC[2] | MAC[3] | MAC[4] | MAC[5] | + * +---------------+---------------+---------------+---------------+ + * + * F: Flush bit. Set if entire table must be flushed. Rest of info in cmsg + * will be ignored. Not implemented. + * D: Delete bit. Set if entry must be deleted instead of added + * NBI: Network Block Interface. Set to 0 + * The amount of MAC’s per control message is limited only by the packet + * buffer size. A 2048B buffer can fit 253 MAC address and a 10240B buffer + * 1277 MAC addresses. + */ +struct nfp_flower_cmsg_tun_mac { + rte_be16_t flags; + rte_be16_t count; /**< Should always be 1 */ + rte_be16_t index; + struct rte_ether_addr addr; +}; + +#define NFP_FL_IPV4_ADDRS_MAX 32 + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_IPS + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | Number of IP Addresses | + * +---------------------------------------------------------------+ + * 1 | IP Address #1 | + * +---------------------------------------------------------------+ + * 2 | IP Address #2 | + * +---------------------------------------------------------------+ + * | ... | + * +---------------------------------------------------------------+ + * 32 | IP Address #32 | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_ipv4_addr { + rte_be32_t count; + rte_be32_t ipv4_addr[NFP_FL_IPV4_ADDRS_MAX]; +}; + /* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -716,5 +801,14 @@ int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v4 *payload); int nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v6 *payload); +int nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower); +int nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + uint16_t mac_idx, + bool is_del); +int nfp_flower_cmsg_tun_mac_rule(struct nfp_app_fw_flower *app_fw_flower, + struct rte_ether_addr *mac, + uint16_t mac_idx, + bool is_del); #endif /* _NFP_CMSG_H_ */ diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 9ee02b0fb9..c088d24413 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -47,7 +47,8 @@ struct nfp_flow_item_proc { /* Size in bytes for @p mask_support and @p mask_default. */ const unsigned int mask_sz; /* Merge a pattern item into a flow rule handle. */ - int (*merge)(struct rte_flow *nfp_flow, + int (*merge)(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -63,6 +64,12 @@ struct nfp_mask_id_entry { uint8_t mask_id; }; +struct nfp_pre_tun_entry { + uint16_t mac_index; + uint16_t ref_cnt; + uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; +} __rte_aligned(32); + static inline struct nfp_flow_priv * nfp_flow_dev_to_priv(struct rte_eth_dev *dev) { @@ -406,6 +413,83 @@ nfp_stats_id_free(struct nfp_flow_priv *priv, uint32_t ctx) return 0; } +__rte_unused static int +nfp_tun_add_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, + rte_be32_t ipv4) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv4_addr_entry *entry; + struct nfp_ipv4_addr_entry *tmp_entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_FOREACH(entry, &priv->ipv4_off_list, next) { + if (entry->ipv4_addr == ipv4) { + entry->ref_count++; + rte_spinlock_unlock(&priv->ipv4_off_lock); + return 0; + } + } + rte_spinlock_unlock(&priv->ipv4_off_lock); + + tmp_entry = rte_zmalloc("nfp_ipv4_off", sizeof(struct nfp_ipv4_addr_entry), 0); + if (tmp_entry == NULL) { + PMD_DRV_LOG(ERR, "Mem error when offloading IP address."); + return -ENOMEM; + } + + tmp_entry->ipv4_addr = ipv4; + tmp_entry->ref_count = 1; + + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_INSERT_HEAD(&priv->ipv4_off_list, tmp_entry, next); + rte_spinlock_unlock(&priv->ipv4_off_lock); + + return nfp_flower_cmsg_tun_off_v4(app_fw_flower); +} + +static int +nfp_tun_del_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, + rte_be32_t ipv4) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv4_addr_entry *entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_FOREACH(entry, &priv->ipv4_off_list, next) { + if (entry->ipv4_addr == ipv4) { + entry->ref_count--; + if (entry->ref_count == 0) { + LIST_REMOVE(entry, next); + rte_free(entry); + rte_spinlock_unlock(&priv->ipv4_off_lock); + return nfp_flower_cmsg_tun_off_v4(app_fw_flower); + } + break; + } + } + rte_spinlock_unlock(&priv->ipv4_off_lock); + + return 0; +} + +static int +nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, + struct rte_flow *nfp_flow) +{ + int ret; + struct nfp_flower_ipv4_udp_tun *udp4; + + udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_udp_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + + return ret; +} + static void nfp_flower_compile_meta_tci(char *mbuf_off, struct nfp_fl_key_ls *key_layer) { @@ -635,6 +719,9 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], case RTE_FLOW_ACTION_TYPE_COUNT: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_COUNT detected"); break; + case RTE_FLOW_ACTION_TYPE_JUMP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_JUMP detected"); + break; case RTE_FLOW_ACTION_TYPE_PORT_ID: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_PORT_ID detected"); key_ls->act_size += sizeof(struct nfp_fl_act_output); @@ -786,7 +873,8 @@ nfp_flow_is_tunnel(struct rte_flow *nfp_flow) } static int -nfp_flow_merge_eth(__rte_unused struct rte_flow *nfp_flow, +nfp_flow_merge_eth(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + __rte_unused struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -823,7 +911,8 @@ nfp_flow_merge_eth(__rte_unused struct rte_flow *nfp_flow, } static int -nfp_flow_merge_vlan(struct rte_flow *nfp_flow, +nfp_flow_merge_vlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, __rte_unused char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -853,7 +942,8 @@ nfp_flow_merge_vlan(struct rte_flow *nfp_flow, } static int -nfp_flow_merge_ipv4(struct rte_flow *nfp_flow, +nfp_flow_merge_ipv4(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -914,7 +1004,8 @@ nfp_flow_merge_ipv4(struct rte_flow *nfp_flow, } static int -nfp_flow_merge_ipv6(struct rte_flow *nfp_flow, +nfp_flow_merge_ipv6(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -979,7 +1070,8 @@ nfp_flow_merge_ipv6(struct rte_flow *nfp_flow, } static int -nfp_flow_merge_tcp(struct rte_flow *nfp_flow, +nfp_flow_merge_tcp(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1052,7 +1144,8 @@ nfp_flow_merge_tcp(struct rte_flow *nfp_flow, } static int -nfp_flow_merge_udp(struct rte_flow *nfp_flow, +nfp_flow_merge_udp(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1100,7 +1193,8 @@ nfp_flow_merge_udp(struct rte_flow *nfp_flow, } static int -nfp_flow_merge_sctp(struct rte_flow *nfp_flow, +nfp_flow_merge_sctp(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1142,7 +1236,8 @@ nfp_flow_merge_sctp(struct rte_flow *nfp_flow, } static int -nfp_flow_merge_vxlan(struct rte_flow *nfp_flow, +nfp_flow_merge_vxlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1391,7 +1486,8 @@ nfp_flow_inner_item_get(const struct rte_flow_item items[], } static int -nfp_flow_compile_item_proc(const struct rte_flow_item items[], +nfp_flow_compile_item_proc(struct nfp_flower_representor *repr, + const struct rte_flow_item items[], struct rte_flow *nfp_flow, char **mbuf_off_exact, char **mbuf_off_mask, @@ -1402,6 +1498,7 @@ nfp_flow_compile_item_proc(const struct rte_flow_item items[], bool continue_flag = true; const struct rte_flow_item *item; const struct nfp_flow_item_proc *proc_list; + struct nfp_app_fw_flower *app_fw_flower = repr->app_fw_flower; proc_list = nfp_flow_item_proc_list; for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END && continue_flag; ++item) { @@ -1437,14 +1534,14 @@ nfp_flow_compile_item_proc(const struct rte_flow_item items[], break; } - ret = proc->merge(nfp_flow, mbuf_off_exact, item, + ret = proc->merge(app_fw_flower, nfp_flow, mbuf_off_exact, item, proc, false, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d exact merge failed", item->type); break; } - ret = proc->merge(nfp_flow, mbuf_off_mask, item, + ret = proc->merge(app_fw_flower, nfp_flow, mbuf_off_mask, item, proc, true, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d mask merge failed", item->type); @@ -1458,7 +1555,7 @@ nfp_flow_compile_item_proc(const struct rte_flow_item items[], } static int -nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, +nfp_flow_compile_items(struct nfp_flower_representor *representor, const struct rte_flow_item items[], struct rte_flow *nfp_flow) { @@ -1489,7 +1586,7 @@ nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, is_outer_layer = false; /* Go over items */ - ret = nfp_flow_compile_item_proc(loop_item, nfp_flow, + ret = nfp_flow_compile_item_proc(representor, loop_item, nfp_flow, &mbuf_off_exact, &mbuf_off_mask, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item compile failed."); @@ -1498,7 +1595,7 @@ nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, /* Go over inner items */ if (is_tun_flow) { - ret = nfp_flow_compile_item_proc(items, nfp_flow, + ret = nfp_flow_compile_item_proc(representor, items, nfp_flow, &mbuf_off_exact, &mbuf_off_mask, true); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow outer item compile failed."); @@ -1873,6 +1970,59 @@ nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } +__rte_unused static int +nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow) +{ + struct nfp_fl_tun *tmp; + struct nfp_fl_tun *tun; + struct nfp_flow_priv *priv; + struct nfp_flower_ipv4 *ipv4; + struct nfp_flower_mac_mpls *eth; + struct nfp_flower_in_port *port; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_cmsg_tun_neigh_v4 payload; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + port = (struct nfp_flower_in_port *)(meta_tci + 1); + eth = (struct nfp_flower_mac_mpls *)(port + 1); + + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + ipv4 = (struct nfp_flower_ipv4 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls) + + sizeof(struct nfp_flower_tp_ports)); + else + ipv4 = (struct nfp_flower_ipv4 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls)); + + tun = &nfp_flow->tun; + tun->payload.v6_flag = 0; + tun->payload.dst.dst_ipv4 = ipv4->ipv4_src; + tun->payload.src.src_ipv4 = ipv4->ipv4_dst; + memcpy(tun->payload.dst_addr, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->mac_dst, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + payload.dst_ipv4 = ipv4->ipv4_src; + payload.src_ipv4 = ipv4->ipv4_dst; + memcpy(payload.common.dst_mac, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); +} + static int nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, rte_be32_t ipv4) @@ -2090,6 +2240,200 @@ nfp_flow_action_vxlan_encap(struct nfp_app_fw_flower *app_fw_flower, actions, vxlan_data, nfp_flow_meta, tun); } +static struct nfp_pre_tun_entry * +nfp_pre_tun_table_search(struct nfp_flow_priv *priv, + char *hash_data, + uint32_t hash_len) +{ + int index; + uint32_t hash_key; + struct nfp_pre_tun_entry *mac_index; + + hash_key = rte_jhash(hash_data, hash_len, priv->hash_seed); + index = rte_hash_lookup_data(priv->pre_tun_table, &hash_key, (void **)&mac_index); + if (index < 0) { + PMD_DRV_LOG(DEBUG, "Data NOT found in the hash table"); + return NULL; + } + + return mac_index; +} + +static bool +nfp_pre_tun_table_add(struct nfp_flow_priv *priv, + char *hash_data, + uint32_t hash_len) +{ + int ret; + uint32_t hash_key; + + hash_key = rte_jhash(hash_data, hash_len, priv->hash_seed); + ret = rte_hash_add_key_data(priv->pre_tun_table, &hash_key, hash_data); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Add to pre tunnel table failed"); + return false; + } + + return true; +} + +static bool +nfp_pre_tun_table_delete(struct nfp_flow_priv *priv, + char *hash_data, + uint32_t hash_len) +{ + int ret; + uint32_t hash_key; + + hash_key = rte_jhash(hash_data, hash_len, priv->hash_seed); + ret = rte_hash_del_key(priv->pre_tun_table, &hash_key); + if (ret < 0) { + PMD_DRV_LOG(ERR, "Delete from pre tunnel table failed"); + return false; + } + + return true; +} + +__rte_unused static int +nfp_pre_tun_table_check_add(struct nfp_flower_representor *repr, + uint16_t *index) +{ + uint16_t i; + uint32_t entry_size; + uint16_t mac_index = 1; + struct nfp_flow_priv *priv; + struct nfp_pre_tun_entry *entry; + struct nfp_pre_tun_entry *find_entry; + + priv = repr->app_fw_flower->flow_priv; + if (priv->pre_tun_cnt >= NFP_TUN_PRE_TUN_RULE_LIMIT) { + PMD_DRV_LOG(ERR, "Pre tunnel table has full"); + return -EINVAL; + } + + entry_size = sizeof(struct nfp_pre_tun_entry); + entry = rte_zmalloc("nfp_pre_tun", entry_size, 0); + if (entry == NULL) { + PMD_DRV_LOG(ERR, "Memory alloc failed for pre tunnel table"); + return -ENOMEM; + } + + entry->ref_cnt = 1U; + memcpy(entry->mac_addr, repr->mac_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + /* 0 is considered a failed match */ + for (i = 1; i < NFP_TUN_PRE_TUN_RULE_LIMIT; i++) { + if (priv->pre_tun_bitmap[i] == 0) + continue; + entry->mac_index = i; + find_entry = nfp_pre_tun_table_search(priv, (char *)entry, entry_size); + if (find_entry != NULL) { + find_entry->ref_cnt++; + *index = find_entry->mac_index; + rte_free(entry); + return 0; + } + } + + for (i = 1; i < NFP_TUN_PRE_TUN_RULE_LIMIT; i++) { + if (priv->pre_tun_bitmap[i] == 0) { + priv->pre_tun_bitmap[i] = 1U; + mac_index = i; + break; + } + } + + entry->mac_index = mac_index; + if (!nfp_pre_tun_table_add(priv, (char *)entry, entry_size)) { + rte_free(entry); + return -EINVAL; + } + + *index = entry->mac_index; + priv->pre_tun_cnt++; + return 0; +} + +static int +nfp_pre_tun_table_check_del(struct nfp_flower_representor *repr, + struct rte_flow *nfp_flow) +{ + uint16_t i; + int ret = 0; + uint32_t entry_size; + uint16_t nfp_mac_idx; + struct nfp_flow_priv *priv; + struct nfp_pre_tun_entry *entry; + struct nfp_pre_tun_entry *find_entry; + struct nfp_fl_rule_metadata *nfp_flow_meta; + + priv = repr->app_fw_flower->flow_priv; + if (priv->pre_tun_cnt == 1) + return 0; + + entry_size = sizeof(struct nfp_pre_tun_entry); + entry = rte_zmalloc("nfp_pre_tun", entry_size, 0); + if (entry == NULL) { + PMD_DRV_LOG(ERR, "Memory alloc failed for pre tunnel table"); + return -ENOMEM; + } + + entry->ref_cnt = 1U; + memcpy(entry->mac_addr, repr->mac_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + /* 0 is considered a failed match */ + for (i = 1; i < NFP_TUN_PRE_TUN_RULE_LIMIT; i++) { + if (priv->pre_tun_bitmap[i] == 0) + continue; + entry->mac_index = i; + find_entry = nfp_pre_tun_table_search(priv, (char *)entry, entry_size); + if (find_entry != NULL) { + find_entry->ref_cnt--; + if (find_entry->ref_cnt != 0) + goto free_entry; + priv->pre_tun_bitmap[i] = 0; + break; + } + } + + nfp_flow_meta = nfp_flow->payload.meta; + nfp_mac_idx = (find_entry->mac_index << 8) | + NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | + NFP_TUN_PRE_TUN_IDX_BIT; + ret = nfp_flower_cmsg_tun_mac_rule(repr->app_fw_flower, &repr->mac_addr, + nfp_mac_idx, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send tunnel mac rule failed"); + ret = -EINVAL; + goto free_entry; + } + + ret = nfp_flower_cmsg_pre_tunnel_rule(repr->app_fw_flower, nfp_flow_meta, + nfp_mac_idx, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + ret = -EINVAL; + goto free_entry; + } + + find_entry->ref_cnt = 1U; + if (!nfp_pre_tun_table_delete(priv, (char *)find_entry, entry_size)) { + PMD_DRV_LOG(ERR, "Delete entry from pre tunnel table failed"); + ret = -EINVAL; + goto free_entry; + } + + rte_free(entry); + rte_free(find_entry); + priv->pre_tun_cnt--; + +free_entry: + rte_free(entry); + + return ret; +} + static int nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], @@ -2125,6 +2469,9 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, case RTE_FLOW_ACTION_TYPE_COUNT: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_COUNT"); break; + case RTE_FLOW_ACTION_TYPE_JUMP: + PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_JUMP"); + break; case RTE_FLOW_ACTION_TYPE_PORT_ID: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_PORT_ID"); ret = nfp_flow_action_output(position, action, nfp_flow_meta); @@ -2561,6 +2908,15 @@ nfp_flow_destroy(struct rte_eth_dev *dev, /* Delete the entry from nn table */ ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); break; + case NFP_FLOW_DECAP: + /* Delete the entry from nn table */ + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + if (ret != 0) + goto exit; + + /* Delete the entry in pre tunnel table */ + ret = nfp_pre_tun_table_check_del(representor, nfp_flow); + break; default: PMD_DRV_LOG(ERR, "Invalid nfp flow type %d.", nfp_flow->type); ret = -EINVAL; @@ -2570,6 +2926,10 @@ nfp_flow_destroy(struct rte_eth_dev *dev, if (ret != 0) goto exit; + /* Delete the ip off */ + if (nfp_flow_is_tunnel(nfp_flow)) + nfp_tun_check_ip_off_del(representor, nfp_flow); + /* Delete the flow from hardware */ if (nfp_flow->install_flag) { ret = nfp_flower_cmsg_flow_delete(app_fw_flower, nfp_flow); @@ -2703,6 +3063,49 @@ nfp_flow_tunnel_item_release(__rte_unused struct rte_eth_dev *dev, return 0; } +static int +nfp_flow_tunnel_decap_set(__rte_unused struct rte_eth_dev *dev, + struct rte_flow_tunnel *tunnel, + struct rte_flow_action **pmd_actions, + uint32_t *num_of_actions, + __rte_unused struct rte_flow_error *err) +{ + struct rte_flow_action *nfp_action; + + nfp_action = rte_zmalloc("nfp_tun_action", sizeof(struct rte_flow_action), 0); + if (nfp_action == NULL) { + PMD_DRV_LOG(ERR, "Alloc memory for nfp tunnel action failed."); + return -ENOMEM; + } + + switch (tunnel->type) { + default: + *pmd_actions = NULL; + *num_of_actions = 0; + rte_free(nfp_action); + break; + } + + return 0; +} + +static int +nfp_flow_tunnel_action_decap_release(__rte_unused struct rte_eth_dev *dev, + struct rte_flow_action *pmd_actions, + uint32_t num_of_actions, + __rte_unused struct rte_flow_error *err) +{ + uint32_t i; + struct rte_flow_action *nfp_action; + + for (i = 0; i < num_of_actions; i++) { + nfp_action = &pmd_actions[i]; + rte_free(nfp_action); + } + + return 0; +} + static const struct rte_flow_ops nfp_flow_ops = { .validate = nfp_flow_validate, .create = nfp_flow_create, @@ -2711,6 +3114,8 @@ static const struct rte_flow_ops nfp_flow_ops = { .query = nfp_flow_query, .tunnel_match = nfp_flow_tunnel_match, .tunnel_item_release = nfp_flow_tunnel_item_release, + .tunnel_decap_set = nfp_flow_tunnel_decap_set, + .tunnel_action_decap_release = nfp_flow_tunnel_action_decap_release, }; int @@ -2755,6 +3160,15 @@ nfp_flow_priv_init(struct nfp_pf_dev *pf_dev) .extra_flag = RTE_HASH_EXTRA_FLAGS_RW_CONCURRENCY, }; + struct rte_hash_parameters pre_tun_hash_params = { + .name = "pre_tunnel_table", + .entries = 32, + .hash_func = rte_jhash, + .socket_id = rte_socket_id(), + .key_len = sizeof(uint32_t), + .extra_flag = RTE_HASH_EXTRA_FLAGS_RW_CONCURRENCY, + }; + ctx_count = nfp_rtsym_read_le(pf_dev->sym_tbl, "CONFIG_FC_HOST_CTX_COUNT", &ret); if (ret < 0) { @@ -2835,11 +3249,27 @@ nfp_flow_priv_init(struct nfp_pf_dev *pf_dev) goto free_mask_table; } + /* pre tunnel table */ + priv->pre_tun_cnt = 1; + pre_tun_hash_params.hash_func_init_val = priv->hash_seed; + priv->pre_tun_table = rte_hash_create(&pre_tun_hash_params); + if (priv->pre_tun_table == NULL) { + PMD_INIT_LOG(ERR, "Pre tunnel table creation failed"); + ret = -ENOMEM; + goto free_flow_table; + } + + /* ipv4 off list */ + rte_spinlock_init(&priv->ipv4_off_lock); + LIST_INIT(&priv->ipv4_off_list); + /* neighbor next list */ LIST_INIT(&priv->nn_list); return 0; +free_flow_table: + rte_hash_free(priv->flow_table); free_mask_table: rte_free(priv->mask_table); free_stats: @@ -2863,6 +3293,7 @@ nfp_flow_priv_uninit(struct nfp_pf_dev *pf_dev) app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(pf_dev->app_fw_priv); priv = app_fw_flower->flow_priv; + rte_hash_free(priv->pre_tun_table); rte_hash_free(priv->flow_table); rte_hash_free(priv->mask_table); rte_free(priv->stats); diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index 892dbc08f1..f536da2650 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -6,6 +6,7 @@ #ifndef _NFP_FLOW_H_ #define _NFP_FLOW_H_ +#include #include #include @@ -93,6 +94,7 @@ enum nfp_flower_tun_type { enum nfp_flow_type { NFP_FLOW_COMMON, NFP_FLOW_ENCAP, + NFP_FLOW_DECAP, }; struct nfp_fl_key_ls { @@ -169,6 +171,14 @@ struct nfp_fl_stats { uint64_t bytes; }; +struct nfp_ipv4_addr_entry { + LIST_ENTRY(nfp_ipv4_addr_entry) next; + rte_be32_t ipv4_addr; + int ref_count; +}; + +#define NFP_TUN_PRE_TUN_RULE_LIMIT 32 + struct nfp_flow_priv { uint32_t hash_seed; /**< Hash seed for hash tables in this structure. */ uint64_t flower_version; /**< Flow version, always increase. */ @@ -184,6 +194,13 @@ struct nfp_flow_priv { struct nfp_fl_stats_id stats_ids; /**< The stats id ring. */ struct nfp_fl_stats *stats; /**< Store stats of flow. */ rte_spinlock_t stats_lock; /** < Lock the update of 'stats' field. */ + /* pre tunnel rule */ + uint16_t pre_tun_cnt; /**< The size of pre tunnel rule */ + uint8_t pre_tun_bitmap[NFP_TUN_PRE_TUN_RULE_LIMIT]; /**< Bitmap of pre tunnel rule */ + struct rte_hash *pre_tun_table; /**< Hash table to store pre tunnel rule */ + /* IPv4 off */ + LIST_HEAD(, nfp_ipv4_addr_entry) ipv4_off_list; /**< Store ipv4 off */ + rte_spinlock_t ipv4_off_lock; /**< Lock the ipv4 off list */ /* neighbor next */ LIST_HEAD(, nfp_fl_tun)nn_list; /**< Store nn entry */ }; From patchwork Tue Oct 25 07:59:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119064 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 21520A0543; Tue, 25 Oct 2022 10:01:18 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E995042C0A; Tue, 25 Oct 2022 10:00:13 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2093.outbound.protection.outlook.com [40.107.223.93]) by mails.dpdk.org (Postfix) with ESMTP id C539942BDF for ; Tue, 25 Oct 2022 10:00:11 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Sq6pXDwKI/nN5HDVgkrLQ3cl+gxUmkcFHnmtGntSAf7NIu6FCKS+vh6dfss9WTYJ2aA07pgnKhmLEV/ZaVB9uzyoK98V6snyCoA1GSqC14XLZay6Dqrdk1KNKyd3s6XSGxRmQmUA3XSVTmXDURKDpcTiu6XL/mF+NBDIh+D5Udtb29pbiBhe0By2E5jbOlfVsw3UW574CaU5hs3Uihi5+TUqnPY9QGFOxR07F3t4kdLNybwGx5J2cNhuqSbbS47ZkHY5qMdKpaiNVIN3wMD0m5JBYKN/2g59Ud/m317Wl48MKYaiEOJokUzLrukiaWLfsttjFlOY46nIa3QTliQLlg== 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=NV7WnMCsstyhD6L1ut1RVoDRfWUbA2rYady/OP3NS1s=; b=elIT64/6Ak2479SlSeq2HN06urfs/ryumTO+Ehuewy4VZ6jSLcwCjGXKsIFg/MzYjPnBB6oX7PtpcZbI3pcnUKR8eM19cNmPI9oiwaWdDAiC7t6VEydpn+zPW7Qjj5Qkyyb8q7oLq4wooKlyuvhN0s8RRkYVZAGTJeXpQfDD8llGrDSXEelBvwRPDTc5b92P+dKC6S1q2zcanlnlENdpXBkx3r6L1bkyg2dOc6Vj1Bu6F0B52icQ50XFSijBwSA+htaocqnvPZfnHpNOCehM7y8rT61A5JoOPHQIS3+3jQ+5t1Gs6EbPlfN4MUqEHyIXKqZtoOE1Z9xFfx8kOAXovw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NV7WnMCsstyhD6L1ut1RVoDRfWUbA2rYady/OP3NS1s=; b=iuvW1pHKYgX1PHRZHSY24MTRgBHaD7DTafo3hUoZXTDCAsjWSxfEG2YggXqvmmQ9gbC3+M0/M9mUWLFbi2bBYzw+koE5kLcbC5xphbIDV+ZbyYR5re2aOS36lm6YVySvNRFN3IBpo5+z9OVOgFBz9U08ZmUnnB9jgSOrjFd6MQU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 08:00:10 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:10 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 09/26] net/nfp: prepare for IPv6 UDP tunnel decap flow action Date: Tue, 25 Oct 2022 15:59:01 +0800 Message-Id: <20221025075918.7778-10-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 05aac5d4-6acb-44d3-19f4-08dab65ef022 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Lu/Bl8XcbNkwAGR32U1aA5QsjSxcQLlpoiHHpeTBp4pBicutsFCxjXaic3ZiAcyNi4eAAabN8AY1Hj+P4L4aDvOOaHL/HJ0gUGEDftwmRZATNU3gG0pQhiFiA9ZwQKsr95k0fjH/vMXYFJrcE4hR0Ne5YZXF0uXbC0P/QzjWWEv/qiHswrewvkSvkppSgBPcLitAv6taF//ildcKS30Xv2opCh1QmaOfq74aaEZ+yib02MqjdXq7EUr+HhtpEaYph6EuZtXoF6b9lq/QXxzSCCx8f29cKCDALeAORV5hhJLRSGHCODt5sghcBoz0rSlRCr7ysObHTYkkT5Xan2qpNApedS09cGDezMl4MzFoke+IT9ScO+BEs31DAmgf7m6nYxKy6uHWDIerm/ElTgU168+WoNZtg4+HMmNmN0ZpvlMy/lqAodGIfgm9Mf/3G466Iz9rY5NTWzuOAdpMgztziLnPTvT2IRXzLGgri5a6fIAwL4tQvJ79TbEMUfEPg1WrWwzwBy7EJlggrotlKj8BOuBfHOWZoyUukZRx53M21LMsAOhGNw8K5maoLi92rTvD2vaBbZDpul2L5tcioW5zsjYXBdeqlezvS+xRvMQ99NqgZuZmKfwR0YI53ZooDLhx9UI0tpIy8lwRGsLsNQxoCETefMGW9H1YU/x6h5Uw2374RIqugoP5tAaR2DHTPYeVerUxNqIEzmqUM8QvEVn02uesFb9c5pZddTpjPBjD2XeR+b8U4ZCYGHA2aKwBm5QI X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(30864003)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(66574015)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?HMPV722N73v0Tyq0xef2HU+Czihe?= =?utf-8?q?tu257VDovUgY6lGDf7jf0JOQZSR6aw1svTyQCpvmSPoJljLKzoiQmZ45+ZKdFaHXe?= =?utf-8?q?kfyNHDmyKZ4MyGGLbWG2HdDO9TlHysICUoe/1AmBmNK+qV8qIe1ikca7EYCRh6Jk5?= =?utf-8?q?Pfiwd/Jusjv+j7mJMoZjoEwVW4NL9lFcQ/Qelh/o3cK5rNvU9CUpONjqv0vuo3kPe?= =?utf-8?q?/pkRgd/GCNUtMUjHHQE0pXXGuoTyPxIGGmCwuFNOTjdftmk/JOAcVLBoO0cb0CkIV?= =?utf-8?q?cQ1QcfnHR0d58kPvCJJ5W73YCexV2obk4YFR7DLfZaof5y0Dsx+QefGlL5LE74srp?= =?utf-8?q?NOnReZ4+aW4BkLn5zG0XC6Rh28Br86tLF00vd4dJxqfLpPqTPxSToymVyJh2wXMLr?= =?utf-8?q?u37OG939Uaq/06q4ct4kH1V1APY4hDS0AvAQPkBXlMDL987zbCZD18iz22D2tgF3n?= =?utf-8?q?gJu24Wsu2X1nEN0w2jE1785wmMLbYFw3y27Gaxaiblfxex6IOpBn5UQA5YKTWG36+?= =?utf-8?q?PmKknipDsqupYr8Y/u22CcL8VsW/06lNUlFvV/j7Ba3oLi5pgLQvW+sigIu34h4CO?= =?utf-8?q?SBN5JQC+oL9aZiw0o30LZ4vmkjoQLgDHTHnkb/rCgPxbuaBqk0+FQBvUUHvvUocsn?= =?utf-8?q?kuGRckSMhBTRo49enPM6NODho1afhl7yZFEzJWqP2nV/9+WW0SY/BOIxwSVXOSJo9?= =?utf-8?q?ISaZbUr15cQKmJPHPMEua0rQcbpjBefmqLcj/u7YAFQuoJ6jS7O0O1dQ/I9HLcmQ7?= =?utf-8?q?YntsKLDwcHcOoQyKhcCu9DPv4C9Q0ylESEuuN5PVAiCo6y7R7GiOFi1XYRm1vU8qY?= =?utf-8?q?hXkrnvkKm7Haa0K7ARgtzCQJPettCpr7NJbzckg323wA1BNSfx1elmOhuXzAQPz2B?= =?utf-8?q?+fJxIZGj/mfyCPqB3x+cKwJfiOXnNEom9Jw531LGZO21154kNimLXbOPMm7vU44PB?= =?utf-8?q?vD+oO+32PmqU+mLPtr8qiAr0jv86z4121orP+17TNZ1fsmw95d6rXqVpItmTmEdK3?= =?utf-8?q?Hg74ijhGB7WbTDu+C0yvQAr0FZ3E8zbi0YMDWiTZASgyv/qtaJWAmBaA/twX7MZw4?= =?utf-8?q?j74r8orT40J3rEtzXv+eRTl51ap0VeQ5ovTAqRoKO9yOeU49t9kbUJdafKx3hjdgQ?= =?utf-8?q?BztDHLVyofsEoRBgtsREEsBCbxSZaxhrB9RUtv9D6QtTAhQumK9x5AwVEQtm1s1bO?= =?utf-8?q?Zlp6fmlYBve+CM1KTCd20vC8kuCnK10INoRSb7tqHxnkXSpy/Wg5hHmRU3VT7yqCo?= =?utf-8?q?bOtrtKColHcfgWQWUcEqrh6vX05E1+/J87+1yJXzzEe9450kAryswJ92yFu+rFzls?= =?utf-8?q?3sCAG8kVJdgMknQ/KWVRCC0Wk9jNEYkf9621usyp6n8ZUnT5bIE9b2dMUc1CZieze?= =?utf-8?q?ulSAoYDlzY8aLm1apPho5qDY9W5JHUZyIjerEB4sz6a+ppuf36l5NZp3GY/W1+cQT?= =?utf-8?q?vkBgXa5jsus9RGGRCCkns7aoIab1CFUtBCPeCF1lZ+DV2/qKFh70HHa1n2//QRzvV?= =?utf-8?q?AI42ywLpszV1mIuDj7fiYNAf4PAZTlUi+w=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 05aac5d4-6acb-44d3-19f4-08dab65ef022 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:10.1430 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LsaKqHz6Ks5DgHJ195wn0FBC4WowwVCt9PUYkMX+nuM+0kIrKZabOhbFG+WkT1lKoiQsG3PznhHerdpN9x1TqkfV3IFkMEjh0Q2Lknj7lgA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the related data structure and functions, prepare for the decap action of IPv6 UDP tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.c | 42 +++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 24 ++++ drivers/net/nfp/nfp_flow.c | 145 ++++++++++++++++++++++- drivers/net/nfp/nfp_flow.h | 9 ++ 4 files changed, 217 insertions(+), 3 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index f18f3de042..76815cfe14 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -347,6 +347,48 @@ nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower) return 0; } +int +nfp_flower_cmsg_tun_off_v6(struct nfp_app_fw_flower *app_fw_flower) +{ + uint16_t cnt; + uint32_t count = 0; + struct rte_mbuf *mbuf; + struct nfp_flow_priv *priv; + struct nfp_ipv6_addr_entry *entry; + struct nfp_flower_cmsg_tun_ipv6_addr *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v6 tun addr"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_IPS_V6, sizeof(*msg)); + + priv = app_fw_flower->flow_priv; + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_FOREACH(entry, &priv->ipv6_off_list, next) { + if (count >= NFP_FL_IPV6_ADDRS_MAX) { + rte_spinlock_unlock(&priv->ipv6_off_lock); + PMD_DRV_LOG(ERR, "IPv6 offload exceeds limit."); + return -ERANGE; + } + memcpy(&msg->ipv6_addr[count * 16], entry->ipv6_addr, 16UL); + count++; + } + msg->count = rte_cpu_to_be_32(count); + rte_spinlock_unlock(&priv->ipv6_off_lock); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} + int nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 0933dacfb1..61f2f83fc9 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -280,6 +280,29 @@ struct nfp_flower_cmsg_tun_ipv4_addr { rte_be32_t ipv4_addr[NFP_FL_IPV4_ADDRS_MAX]; }; +#define NFP_FL_IPV6_ADDRS_MAX 4 + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_IP_V6 + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | Number of IP Addresses | + * +---------------------------------------------------------------+ + * 1 | IP Address1 #1 | + * +---------------------------------------------------------------+ + * 2 | IP Address1 #2 | + * +---------------------------------------------------------------+ + * | ... | + * +---------------------------------------------------------------+ + * 16 | IP Address4 #4 | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_ipv6_addr { + rte_be32_t count; + uint8_t ipv6_addr[NFP_FL_IPV6_ADDRS_MAX * 16]; +}; + /* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -802,6 +825,7 @@ int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, int nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v6 *payload); int nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower); +int nfp_flower_cmsg_tun_off_v6(struct nfp_app_fw_flower *app_fw_flower); int nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, uint16_t mac_idx, diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index c088d24413..ad484b95b7 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -476,16 +476,95 @@ nfp_tun_del_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, return 0; } +__rte_unused static int +nfp_tun_add_ipv6_off(struct nfp_app_fw_flower *app_fw_flower, + uint8_t ipv6[]) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv6_addr_entry *entry; + struct nfp_ipv6_addr_entry *tmp_entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_FOREACH(entry, &priv->ipv6_off_list, next) { + if (!memcmp(entry->ipv6_addr, ipv6, sizeof(entry->ipv6_addr))) { + entry->ref_count++; + rte_spinlock_unlock(&priv->ipv6_off_lock); + return 0; + } + } + rte_spinlock_unlock(&priv->ipv6_off_lock); + + tmp_entry = rte_zmalloc("nfp_ipv6_off", sizeof(struct nfp_ipv6_addr_entry), 0); + if (tmp_entry == NULL) { + PMD_DRV_LOG(ERR, "Mem error when offloading IP6 address."); + return -ENOMEM; + } + memcpy(tmp_entry->ipv6_addr, ipv6, sizeof(tmp_entry->ipv6_addr)); + tmp_entry->ref_count = 1; + + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_INSERT_HEAD(&priv->ipv6_off_list, tmp_entry, next); + rte_spinlock_unlock(&priv->ipv6_off_lock); + + return nfp_flower_cmsg_tun_off_v6(app_fw_flower); +} + +static int +nfp_tun_del_ipv6_off(struct nfp_app_fw_flower *app_fw_flower, + uint8_t ipv6[]) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv6_addr_entry *entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_FOREACH(entry, &priv->ipv6_off_list, next) { + if (!memcmp(entry->ipv6_addr, ipv6, sizeof(entry->ipv6_addr))) { + entry->ref_count--; + if (entry->ref_count == 0) { + LIST_REMOVE(entry, next); + rte_free(entry); + rte_spinlock_unlock(&priv->ipv6_off_lock); + return nfp_flower_cmsg_tun_off_v6(app_fw_flower); + } + break; + } + } + rte_spinlock_unlock(&priv->ipv6_off_lock); + + return 0; +} + static int nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, struct rte_flow *nfp_flow) { int ret; + uint32_t key_layer2 = 0; struct nfp_flower_ipv4_udp_tun *udp4; + struct nfp_flower_ipv6_udp_tun *udp6; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_ext_meta *ext_meta = NULL; - udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - - sizeof(struct nfp_flower_ipv4_udp_tun)); - ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); + + if (ext_meta != NULL) + key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); + + if (key_layer2 & NFP_FLOWER_LAYER2_TUN_IPV6) { + udp6 = (struct nfp_flower_ipv6_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv6_udp_tun)); + ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); + } else { + udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_udp_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + } return ret; } @@ -2078,6 +2157,59 @@ nfp_flower_add_tun_neigh_v6_encap(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } +__rte_unused static int +nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow) +{ + struct nfp_fl_tun *tmp; + struct nfp_fl_tun *tun; + struct nfp_flow_priv *priv; + struct nfp_flower_ipv6 *ipv6; + struct nfp_flower_mac_mpls *eth; + struct nfp_flower_in_port *port; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_cmsg_tun_neigh_v6 payload; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + port = (struct nfp_flower_in_port *)(meta_tci + 1); + eth = (struct nfp_flower_mac_mpls *)(port + 1); + + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + ipv6 = (struct nfp_flower_ipv6 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls) + + sizeof(struct nfp_flower_tp_ports)); + else + ipv6 = (struct nfp_flower_ipv6 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls)); + + tun = &nfp_flow->tun; + tun->payload.v6_flag = 1; + memcpy(tun->payload.dst.dst_ipv6, ipv6->ipv6_src, sizeof(tun->payload.dst.dst_ipv6)); + memcpy(tun->payload.src.src_ipv6, ipv6->ipv6_dst, sizeof(tun->payload.src.src_ipv6)); + memcpy(tun->payload.dst_addr, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->mac_dst, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(payload.dst_ipv6, ipv6->ipv6_src, sizeof(payload.dst_ipv6)); + memcpy(payload.src_ipv6, ipv6->ipv6_dst, sizeof(payload.src_ipv6)); + memcpy(payload.common.dst_mac, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); +} + static int nfp_flower_del_tun_neigh_v6(struct nfp_app_fw_flower *app_fw_flower, uint8_t *ipv6) @@ -2401,6 +2533,9 @@ nfp_pre_tun_table_check_del(struct nfp_flower_representor *repr, nfp_mac_idx = (find_entry->mac_index << 8) | NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | NFP_TUN_PRE_TUN_IDX_BIT; + if (nfp_flow->tun.payload.v6_flag != 0) + nfp_mac_idx |= NFP_TUN_PRE_TUN_IPV6_BIT; + ret = nfp_flower_cmsg_tun_mac_rule(repr->app_fw_flower, &repr->mac_addr, nfp_mac_idx, true); if (ret != 0) { @@ -3263,6 +3398,10 @@ nfp_flow_priv_init(struct nfp_pf_dev *pf_dev) rte_spinlock_init(&priv->ipv4_off_lock); LIST_INIT(&priv->ipv4_off_list); + /* ipv6 off list */ + rte_spinlock_init(&priv->ipv6_off_lock); + LIST_INIT(&priv->ipv6_off_list); + /* neighbor next list */ LIST_INIT(&priv->nn_list); diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index f536da2650..a6994e08ee 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -177,6 +177,12 @@ struct nfp_ipv4_addr_entry { int ref_count; }; +struct nfp_ipv6_addr_entry { + LIST_ENTRY(nfp_ipv6_addr_entry) next; + uint8_t ipv6_addr[16]; + int ref_count; +}; + #define NFP_TUN_PRE_TUN_RULE_LIMIT 32 struct nfp_flow_priv { @@ -201,6 +207,9 @@ struct nfp_flow_priv { /* IPv4 off */ LIST_HEAD(, nfp_ipv4_addr_entry) ipv4_off_list; /**< Store ipv4 off */ rte_spinlock_t ipv4_off_lock; /**< Lock the ipv4 off list */ + /* IPv6 off */ + LIST_HEAD(, nfp_ipv6_addr_entry) ipv6_off_list; /**< Store ipv6 off */ + rte_spinlock_t ipv6_off_lock; /**< Lock the ipv6 off list */ /* neighbor next */ LIST_HEAD(, nfp_fl_tun)nn_list; /**< Store nn entry */ }; From patchwork Tue Oct 25 07:59:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119065 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 90FCEA0543; Tue, 25 Oct 2022 10:01:26 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0991142BB7; Tue, 25 Oct 2022 10:00:26 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2097.outbound.protection.outlook.com [40.107.212.97]) by mails.dpdk.org (Postfix) with ESMTP id F363D42C14 for ; Tue, 25 Oct 2022 10:00:14 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NJ4Ozi3/2wlABzS3IUt4/484sUQBDMb0+OGllhEcVVAQWbcgvXXgRelCf+oze/kwz9JrY6fSAanvtbhr2nRzapgQ4XD/BxCC3lm5x7xy1P61kBXP9Hw1lEnlkr4Q/6lME/dEqNxElhnhOspnXA6fdDS4njouRS/sbVfyPt+h9posFvNTWnEYS3xZLdvH3XuYgc9aYQYDX+x2BFJ5SCuX6QjAK6Ooypa2ZZG3hiwW+OjGmcp03buw63RhcTPPU8uaRovfuR4SxuBYoShTBIgo3uwKLiNngi6MCodr1KWHDzPqP+6COaNCVMKz8+ORD2dRjh4wSlO0JhO/0CJaWj+3Xw== 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=SLKbRPwQ9h6aYUn3PWwHKoLxblQbIOfbMneYmlFyKqQ=; b=j6FS5NXiG+7iSX04rpXEULt7r4YjDBKFQyd0ds9Q4MhaiyjFDT1bFvXGCSvonQNyzfH3qEGx4lWNutCLCEp6hFfN+9M3gny4j9fjqtfR51mXyuTamCoRDf1pZ5a8ZqH+H9tecTfNL1PWDceWAbc2cqIEtnljFxylYk/CEqdEsM+e4KHopnvGs8OKP7LmlSgSrSdOzyPkQRcC7CUcAAWN7QElhXLHjvfGa24loIHCtYBi8s7Mp68O8wlUMwOcID4z3kMCksQKFeIhrshig93Uv/nkP/+ZLoWLzwjAaaK+8eqqTloImkMoRLgP7XS4lAEU5Srp+uRMp6J+hg60Gcb9Iw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SLKbRPwQ9h6aYUn3PWwHKoLxblQbIOfbMneYmlFyKqQ=; b=TkSYE4f4qH+LimdA8Vu2i0f4wdPQau5S4qslJJ2PcHAfFmjAgVk1lkXkpgxzARbsdF/mti74IZH1cxm72mYjy2XTySVrew1ab/ElRh9EOeCoy42YJIiT9h81/S41K7Ecr/W+efkiTzWT2YbcHPgiSUWGPX77Th7vnf2EtuDx1yU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by DM6PR13MB3924.namprd13.prod.outlook.com (2603:10b6:5:28f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 08:00:12 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:12 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 10/26] net/nfp: support IPv4 VXLAN decap flow action Date: Tue, 25 Oct 2022 15:59:02 +0800 Message-Id: <20221025075918.7778-11-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3924:EE_ X-MS-Office365-Filtering-Correlation-Id: 0676c12e-ce95-47e6-c23f-08dab65ef168 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pBZvAhun+v3keMUBcWNeM4Cqo/Bkn36S12onE6dPhQgfJRZdu49YY3smzC3hTNV5ODVQWnabHRTtyViEnlXG0Sq5uDT68PQ7GxSCmqthhaBT4ezxz6YWRLaSVBMPT1j51E2B1Xm3EyAUgtDxP0Jgi5I8LhFUF6VJFAq1Qd2lKBUjxDGyur3tewCYN2pO4uO6ZdRznyiIarGuI8iKPWEltvwGH1spakBXe219T3E3slSZEvA+IoNmuCM/z1uBz6r0bvM2q6yX3evusHEv+3XOHx478ppnbXsD5DE3O1mQswlLMdHUS5/mt4lFttKLvgmOEtChBF9Ft2id/PJjTHqcg18RpFo3QwEocn12YKHx87sIRH7XFjjSeHb9SihY4HLcV6cpO0VfwNSI/TgjjWfeJUX8NgsXW+XjnMrpD6uPL6WRdIyWiKsPH/lgEgamh7W3A7PYBNAJJGhf1J9HUY/fOn+3zftjKbof+nE73ixUlcxYoMEhkxjZDo1oI/i3pdkIFBwVVeqeb0rrJwWkbHGUMtcbzb6x1hWTfJsjTGnqB3g5R4JHc8BB2tUdWqLM1+CHVPMEijB2fcN/DqIxlEhl3/nwZUb6Bro+szDX2O4os1rerikY2VWxTIEbLIIdz9H3LaPRE3qS4nYTQsvIp6qaE4rAhN7iP7PJKyYiQz4/wI+A88Qy0W4ZQPAk7Q4EBI8mQAF/Ns1zcydoapdvjd05OW8JDs9Qac9TjE0Lto6uXeEyuAmyErUO596zBOnvDQCVdL1bVVaYEJWo69OHyWoLXg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(136003)(346002)(39850400004)(396003)(451199015)(86362001)(2906002)(6666004)(186003)(1076003)(107886003)(83380400001)(38100700002)(41300700001)(2616005)(8936002)(6512007)(36756003)(5660300002)(66476007)(66556008)(66574015)(4326008)(8676002)(52116002)(66946007)(26005)(44832011)(6506007)(478600001)(6486002)(6916009)(38350700002)(316002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?xsNGD6FKqI98nbvM0juAk6hVX7xJ?= =?utf-8?q?qANhu9aQ2VMWstLCgjE0VN1Jk6NVOELS+nWMNjCepawRFDhUenSsyBYlwDN0MZTQ5?= =?utf-8?q?gt3TLJRHyve7mcMeUnj/J9E9ovDxa58KB0Tmk5uyO0cPpoM0UInPHwfww/c0He1h6?= =?utf-8?q?jq0st+Kgw69VSLzMeAP43aGtF8NTCB3EBuThc0prYouRHzNzFou50dt0mmoMBpDyg?= =?utf-8?q?JxYZwzP+2ioKJ0WoxAfbiCy1fkflVzRg6tB59+4GfEvXNLDgAC+hdG0ducjKuGpss?= =?utf-8?q?ErryrTOW35EIxD4Ylly2OPOml9fhsd3HmQoL9sC84Azc5766MXubfLm+QDX6zzDxN?= =?utf-8?q?qZ5/p8SaMNVxmMdVKV+6AvO1w+BOf+3nhF39F7upcq2INzW1dPFhJ2G28jI7WFf/T?= =?utf-8?q?MmMyopSzOuFenoDPMdnicT8o/BsGC7cKjGbbDSQ93nYw+suA6KKle2A+6ObLxXVn/?= =?utf-8?q?8FGId3DD/5YChNP9IpmlEI64dpewl29t6SXw5At5pSNOK/2Bdfdbbq/ysFW0E1bwT?= =?utf-8?q?ATIxo9lOlYHvsYqYHE+OtNXtw8177nDC0FlMNw61n2EiY5NCTlycY8AnyyikMK7xm?= =?utf-8?q?br3RIHni7DK/LfsajvIBB3cU2MfC0ixO+IJ/qOFyKonH68mUjoEaATiB7fnLcdwh0?= =?utf-8?q?W33GIj4CAeu8VeudzcUxqx1vLfaIWfkCkpcC0rSXJ3OmZPkWZFCcX3nGMfhtgu5z8?= =?utf-8?q?EJNqF/O4eAFimTzsincdnmarsIC/QGvYoNdJ48TDiK2uzFcqMskf04TPkRg2Kzis4?= =?utf-8?q?Xti+sP2xAc9Nwgvl5xPXPOBvJVohZqYzfSV1sctQYY9lLgLiV1lB8t3rdS9yAntH5?= =?utf-8?q?VXm47Y31v2Lki4gPIFVyQBR7GYXhgZGfbRyoXpQaqocmZ6BaHbShfEUaAwbqYsuT5?= =?utf-8?q?QomxS+GOpVPq72SkzOa4iJ7eXkYMpIzsUVvi2kLdjPd2QLT+/CBWmCy95i4HMGh5f?= =?utf-8?q?L2XzCTeUTDLVEhdezoA0rmEIeR2cKauNcx5+wp1VYifgAbFrqzYUq5iHcYfI3sOFq?= =?utf-8?q?nq9TseWYeJZMnMGNPqgJiUZ4pzGvxVbj40dJHozqW99DwY4kl90xSk9hend7hsNl+?= =?utf-8?q?9cPE7JPc2a90KBaH2D6nL7qFT9Xoyx5hTz/GO2UBYS75VkpF2Kn6CcGCQGdIHJmYK?= =?utf-8?q?VUMSxPGSZgyw3hvdVVSDS+FHhWsJ4kymCj4BamXJxGLTtpQTP0V4eWwzLyeZXxU7b?= =?utf-8?q?K0Nu6HZftmcTiG98wH2YwnxBgJN+t4LCk8ctUmv5ZBDyvh5RUr/VYtKwx81gajR/R?= =?utf-8?q?Z5YXdw+z0wBhw73eyf4c6JM71qQGT+xZkueaTOCrwTwIT5Bf8y3ZuGu9tgae9y21z?= =?utf-8?q?i+IXs73hKSzLdE7lVFFYBrUathQm56ukKJHPntbyKBWroEgNWrjM8R6lgxChXCgSn?= =?utf-8?q?AlCSCy7bSFn9PyE1X7mIKWiKqazhMXqmZatrOCWoEpW/5Ul3DYDZnuui7gNQwAEg6?= =?utf-8?q?V3PA5iWuvTltvdUWxVOkX3P0T9svo7ZQFougK4UP4qcj5OsYUFd5jVTNmaOEbhl+P?= =?utf-8?q?x70cszKo6QuOXC1NSyRo6rt69fLRvithdg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0676c12e-ce95-47e6-c23f-08dab65ef168 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:12.1746 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: X7pEg9cxDUNcvnW1/Ip/rsHtSbPIsdvw2HHhovMTppTNKHGmI5dDyLMwr/deMDrhctErIv2a4mS+B1MFmT+JmPF78PTFnP1i2/7We3jEV+4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3924 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 the offload support of decap action for IPv4 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 75 +++++++++++++++++++++++++++++--- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 5ccfd61336..9ab840c88b 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -57,4 +57,5 @@ set_mac_src = Y set_tp_dst = Y set_tp_src = Y set_ttl = Y +vxlan_decap = Y vxlan_encap = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index ad484b95b7..e71292ff12 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -413,7 +413,7 @@ nfp_stats_id_free(struct nfp_flow_priv *priv, uint32_t ctx) return 0; } -__rte_unused static int +static int nfp_tun_add_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, rte_be32_t ipv4) { @@ -908,6 +908,9 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); break; + case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_DECAP detected"); + break; default: PMD_DRV_LOG(ERR, "Action type %d not supported.", action->type); return -ENOTSUP; @@ -1315,7 +1318,7 @@ nfp_flow_merge_sctp(__rte_unused struct nfp_app_fw_flower *app_fw_flower, } static int -nfp_flow_merge_vxlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, +nfp_flow_merge_vxlan(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, @@ -1323,6 +1326,7 @@ nfp_flow_merge_vxlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, bool is_mask, __rte_unused bool is_outer_layer) { + int ret = 0; const struct rte_vxlan_hdr *hdr; struct nfp_flower_ipv4_udp_tun *tun4; struct nfp_flower_ipv6_udp_tun *tun6; @@ -1351,6 +1355,8 @@ nfp_flow_merge_vxlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, } else { tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = hdr->vx_vni; + if (!is_mask) + ret = nfp_tun_add_ipv4_off(app_fw_flower, tun4->ipv4.dst); } vxlan_end: @@ -1360,7 +1366,7 @@ nfp_flow_merge_vxlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, else *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); - return 0; + return ret; } /* Graph of supported items and associated process function */ @@ -2049,7 +2055,7 @@ nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow) { @@ -2427,7 +2433,7 @@ nfp_pre_tun_table_delete(struct nfp_flow_priv *priv, return true; } -__rte_unused static int +static int nfp_pre_tun_table_check_add(struct nfp_flower_representor *repr, uint16_t *index) { @@ -2569,6 +2575,49 @@ nfp_pre_tun_table_check_del(struct nfp_flower_representor *repr, return ret; } +static int +nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, + __rte_unused const struct rte_flow_action *action, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct rte_flow *nfp_flow) +{ + int ret; + uint16_t nfp_mac_idx = 0; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_app_fw_flower *app_fw_flower; + + ret = nfp_pre_tun_table_check_add(repr, &nfp_mac_idx); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Pre tunnel table add failed"); + return -EINVAL; + } + + nfp_mac_idx = (nfp_mac_idx << 8) | + NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | + NFP_TUN_PRE_TUN_IDX_BIT; + + app_fw_flower = repr->app_fw_flower; + ret = nfp_flower_cmsg_tun_mac_rule(app_fw_flower, &repr->mac_addr, + nfp_mac_idx, false); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send tunnel mac rule failed"); + return -EINVAL; + } + + ret = nfp_flower_cmsg_pre_tunnel_rule(app_fw_flower, nfp_flow_meta, + nfp_mac_idx, false); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + return -EINVAL; + } + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) + return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow); + else + return -ENOTSUP; +} + static int nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], @@ -2744,6 +2793,17 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, position += sizeof(struct nfp_fl_act_set_tun); nfp_flow->type = NFP_FLOW_ENCAP; break; + case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: + PMD_DRV_LOG(DEBUG, "process action tunnel decap"); + ret = nfp_flow_action_tunnel_decap(representor, action, + nfp_flow_meta, nfp_flow); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Failed when process tunnel decap"); + return ret; + } + nfp_flow->type = NFP_FLOW_DECAP; + nfp_flow->install_flag = false; + break; default: PMD_DRV_LOG(ERR, "Unsupported action type: %d", action->type); return -ENOTSUP; @@ -3214,6 +3274,11 @@ nfp_flow_tunnel_decap_set(__rte_unused struct rte_eth_dev *dev, } switch (tunnel->type) { + case RTE_FLOW_ITEM_TYPE_VXLAN: + nfp_action->type = RTE_FLOW_ACTION_TYPE_VXLAN_DECAP; + *pmd_actions = nfp_action; + *num_of_actions = 1; + break; default: *pmd_actions = NULL; *num_of_actions = 0; From patchwork Tue Oct 25 07:59:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119066 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 12866A0543; Tue, 25 Oct 2022 10:01:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DE45C42C10; Tue, 25 Oct 2022 10:00:26 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2097.outbound.protection.outlook.com [40.107.212.97]) by mails.dpdk.org (Postfix) with ESMTP id 3894A42C10 for ; Tue, 25 Oct 2022 10:00:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PPEc9eZBmSQotSTaWzagQM5H0fxyYd7v7dLcO6Fri72wCj4QfyvmZD9Qu7hW4ZqVQaqmsxKoST/4FpHCCL8Mn9LVVjAW/k0Xn35W0BXdHutAWYt/cdtBDyJumwBRXb15gLvAXZK42HbIZnHa/HSXHVVflHl7+E8i0dIAA7dq5xouiR6WrY91j2IN2EzVBHbb71AMmSZr9eoH/koHQb7Xev0f2KaIwr4FkMLUVqD0w5c3Uin6a7RoUEu6qoOeiqgcGl1EkD/MabuuoKN9grPmRyYZCM5DrU0yatcG6sxUZ0VS+RMUqtY3rn4glJ9IxhRECsIy/O2lHQBK1qAwxWuDWQ== 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=uJSd3CLISYoTUuzK7wJVXsNqwC/VcpLDIeh3NLjeV9I=; b=WbDZ0biUJdzh4eDKKLVNKUnZwNnb5B+LxPIdovmv3dyRrcOorQL7G+3CwrzeEi6uXeyZgVjRkjjzSu0zTzcO2NWt7QHcCHlf+tYL5uLclzlf08oUqhFCLgWxmpchnjziqLjLXgfmRFzQDKM9DmD/vSqj7eT08EkVxbqKvpRwmwFW+nI9BCdArDmg4P9oQeltDVNBeddgQu+24QKga6LDYIf0E5ljBhrZVqj4cnmtSPHqSN1XFE0qdtVX9pvYibv4bZl2Wa7HSpxAfjI9je4k8LBW4IPr3KNzNvWP/z0Q+LSau7mv2CribvdwsXV59IiugI7i+EOXsbSSFEWFR++s3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uJSd3CLISYoTUuzK7wJVXsNqwC/VcpLDIeh3NLjeV9I=; b=nFWWVo1eRiXEANI8DwuyeVD/Eh7aM093wLJOm0shg2QdaTtiVCSydGEnpOQLIPwb9DLNv51arOtnPUSqwxtrrXas1xDnsHS/giNSIqrtZdyDKQWJbYy3kqGytPNIItrQ6CmAva01P+3t5MBX1jj0k4r/OPNgwX4YF4s+RGivfpw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by DM6PR13MB3924.namprd13.prod.outlook.com (2603:10b6:5:28f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 08:00:14 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:14 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 11/26] net/nfp: support IPv6 VXLAN decap flow action Date: Tue, 25 Oct 2022 15:59:03 +0800 Message-Id: <20221025075918.7778-12-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3924:EE_ X-MS-Office365-Filtering-Correlation-Id: 1c31794a-acc5-46c9-253b-08dab65ef293 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uwzAx4VD4DPDF58/DEnVHLy6ygDnTqHSlliQ3Xj1S/AkI914Kjz73CdbNk8UebyC3CaCeJ6daooSA9Le9mUh585G2B4UKUlBSxWVsUv9tEDqz52IsJ5nUahM2QkbHpIcJ3pwdT2ivuW32u3DkVQnh/E9IwGJtYOyFzre/gfFGGnXTJjw94FwFxTsV+suwJU9mr/yG9ADLzkImntyRCJX9yJvbmT2Ae1lYgMsjIC3kegvJUZEAj/gwnP32eLpBBUEufydmewLN3eHcRx1+2tLDeZTSS8F0K/SOmZe+jjXnTdERHurT/FrU4SxPVqtV1bn4DNOkS4Gj5ytWps2XO/fbeCF3fSyMKgEffRWZ5uJyeR6bZEV/vzqphC+q9GrHuWwrHloW95aEL8/7lm78o+MpCTRaYtG87Ja4+zFg2FiHWjXSMWuMdg+JOTK8ylhhpor77oEQwraxJjrgI/jewZfT4Hga1VTWaUuJveU/5ArITvN7ISD9Pf4G08sf5hADtYdEEu1y25Wa9xfMtYbSJZultRrfPjnrlbvtjlmpH4GSh+Hj1oOkmaA+e/0ZvuoPKHbAR3IFafb9HmK13J34xfTtmhynmVdqWRH2dMtf9kbNQ7uKFiY4wPovZexiY5xHHskCY8kTGu/1r0KLjwBAA3/qEjP3lScIkTTP5r9lqZoy0L6W91jrRMZoTtTudtgjv792ZXN4JczoZI8JoNahp2tBqlLV506ngsn9b0dsoih8aPfx6cIL0MDNFimtdqkPHuiKRn90Y7af6segxe/+MZHlQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(136003)(346002)(39850400004)(396003)(451199015)(86362001)(2906002)(6666004)(186003)(1076003)(107886003)(83380400001)(38100700002)(41300700001)(2616005)(8936002)(6512007)(36756003)(5660300002)(66476007)(66556008)(4326008)(8676002)(52116002)(66946007)(26005)(44832011)(6506007)(478600001)(6486002)(6916009)(38350700002)(316002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?hWjp7Y7WBDeLoUJlVPMm/ekqedY2?= =?utf-8?q?y1unm8fQEea2K/8oKdEjtup21wz43w5BIdVQCzwpOWfbi2GHQ+GAU2ZErmXpSJ3eb?= =?utf-8?q?Nr2vzBIWLrex6EsMKB4Thh0w7T1n4/Ft6YOYTpsXVdz1TAMRkiO94uvdipnMtVS5c?= =?utf-8?q?aQ6MVXlEngjjMvOgbStGzVVPQj4yNiORfglSOwGwaepqoqzWEbgThYWqLcEk6SwO4?= =?utf-8?q?6yO5MomvL8bQbFBPksJkClg7gUXS/t6L1IwxhvkLORLhK5wbf1i5DYq6vILXO2q2L?= =?utf-8?q?8ZhA03ss/YB9vFDS04LaEtb810Ju80y+kJDWpwDQrUzuRbK1gTPnqIGYFWAHu9cil?= =?utf-8?q?Lrph3or5urC3KWydzRHV3O8gQVahISMEWmVyMEtVrnQnh8SV+LVHn4fhC7jCTwspB?= =?utf-8?q?C3gk/40eA81rsuGALqVjCUfVzU9E+zlBzRw5O7Ei7K5vJWUxyzZgWrxkleHzfst+q?= =?utf-8?q?A+n+QtizRTjwMb2dlnXNH9MtrIkZtY/zdrd1/3Sh0Ur7y9rThVjsZ0Dy70d37zaUI?= =?utf-8?q?L/8Zvoj71LK/hgMB34ADr15bH78sEdq6KfD1z16SIihBiohrF+sb2MPb5EBFiogjV?= =?utf-8?q?xq2eiSV13ffLI/Yg48WzcD5FZvynyw2u/frFIoaTZK/sAb5PagrE0gXONuA02/V2k?= =?utf-8?q?JYtbcoL4NdjSq7/vgS5PBCt0Rt43N1gt4aHQmHRDEEFz1k+kmqunRCiTxY1oNs099?= =?utf-8?q?YHgaSbOXCjxYAyqDXxpjM5eqk6NYSo4M3vpUfpt2U07Pqr4AMVjjUwpJ/YI/J5tU6?= =?utf-8?q?r1XwYBMCH4+1whZgsEMw7E7lOZvo0qljI5TcBpy/skurXydOHOk+Wz7+t6KZ+MIGC?= =?utf-8?q?4UpIwS6j06FKU4ixKARpQtXan1x/ssnDvKOuCWedKQIzqzy8IlVqsC2oxVCPWtqe7?= =?utf-8?q?SD7dICzzjBWEYVlli01uih6+w2WEOpuNhfvIXJeRlPso9Yb0Pid53Txd7eVMOjaCC?= =?utf-8?q?ZL/cASdtTHhm9JuOz0emvJx9RrlClOlaR4ADss6XAj/K9JeGPthD/N5mz8DC4sRnH?= =?utf-8?q?3+4RKk6VYVJGuz/fs70gqW0TGxJKPs+LeaggAz/IDbuZcBht9DhT0x+9v1Y3s62ic?= =?utf-8?q?S+5ElZ4E25KXCDM1ej0uT66kOWprEVu2BBU7qF4BT5YgN9i5GoR29rGNV69YTisN6?= =?utf-8?q?y1SzcQcqF2fXKLO85kwaJDxTmOIHjwF2TFCEdWPA9Mq/X6nAgOKQsNc9/gYJRjTRf?= =?utf-8?q?Rc6yHkyI9qaJDljMhBwdbX9/dlH0HIU9UNcNIx7JTdepNwdBtGzh9P6I+mGiLyF5U?= =?utf-8?q?w9rzucTAEKoZJBhtlDOrKC9XN9x2j+CwvIbfPdS+ptX0wTY1jWYKl+tjh/+XahzJ+?= =?utf-8?q?Lyv2J8mlp4YwTMd6wcwWzxrN0UlqyR3x3jgJ4B3LMX5+OXDjrLaU1auIFSRQ2mTMJ?= =?utf-8?q?e2kSJ4nl/QFGpkS4MLns6vEIb45AAj+ZT98F8pLAEJeocjkpEU61qenDSLHVCKGD0?= =?utf-8?q?P2LquAjVuYaNffqWBRvz4OT57HTzjLuOBPM4Oi0A+yJ5SnYjqJRzke9k1LfrA85w/?= =?utf-8?q?pD/gwcsrJKCjNyNgUmoIDTRXdCrleEvNkA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1c31794a-acc5-46c9-253b-08dab65ef293 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:14.2082 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: X6AylydXRU3sI78uws06RXpGzPUaOiY3iHVk0s1cKepw8yCq1txI35+D/UiSaPF7q43De3qtmXSPueJiBqgyFj0x1/oWizLMPm4KRggU8hk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3924 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 the offload support of decap action for IPv6 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index e71292ff12..9e8073b0f8 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -476,7 +476,7 @@ nfp_tun_del_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, return 0; } -__rte_unused static int +static int nfp_tun_add_ipv6_off(struct nfp_app_fw_flower *app_fw_flower, uint8_t ipv6[]) { @@ -1352,6 +1352,8 @@ nfp_flow_merge_vxlan(struct nfp_app_fw_flower *app_fw_flower, NFP_FLOWER_LAYER2_TUN_IPV6)) { tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; tun6->tun_id = hdr->vx_vni; + if (!is_mask) + ret = nfp_tun_add_ipv6_off(app_fw_flower, tun6->ipv6.ipv6_dst); } else { tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = hdr->vx_vni; @@ -2163,7 +2165,7 @@ nfp_flower_add_tun_neigh_v6_encap(struct nfp_app_fw_flower *app_fw_flower, return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow) { @@ -2577,7 +2579,7 @@ nfp_pre_tun_table_check_del(struct nfp_flower_representor *repr, static int nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, - __rte_unused const struct rte_flow_action *action, + const struct rte_flow_action *action, struct nfp_fl_rule_metadata *nfp_flow_meta, struct rte_flow *nfp_flow) { @@ -2595,6 +2597,8 @@ nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, nfp_mac_idx = (nfp_mac_idx << 8) | NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | NFP_TUN_PRE_TUN_IDX_BIT; + if (action->conf != NULL) + nfp_mac_idx |= NFP_TUN_PRE_TUN_IPV6_BIT; app_fw_flower = repr->app_fw_flower; ret = nfp_flower_cmsg_tun_mac_rule(app_fw_flower, &repr->mac_addr, @@ -2615,7 +2619,7 @@ nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow); else - return -ENOTSUP; + return nfp_flower_add_tun_neigh_v6_decap(app_fw_flower, nfp_flow); } static int @@ -2803,6 +2807,8 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, } nfp_flow->type = NFP_FLOW_DECAP; nfp_flow->install_flag = false; + if (action->conf != NULL) + nfp_flow->tun.payload.v6_flag = 1; break; default: PMD_DRV_LOG(ERR, "Unsupported action type: %d", action->type); @@ -3273,6 +3279,9 @@ nfp_flow_tunnel_decap_set(__rte_unused struct rte_eth_dev *dev, return -ENOMEM; } + if (tunnel->is_ipv6) + nfp_action->conf = (void *)~0; + switch (tunnel->type) { case RTE_FLOW_ITEM_TYPE_VXLAN: nfp_action->type = RTE_FLOW_ACTION_TYPE_VXLAN_DECAP; @@ -3300,6 +3309,7 @@ nfp_flow_tunnel_action_decap_release(__rte_unused struct rte_eth_dev *dev, for (i = 0; i < num_of_actions; i++) { nfp_action = &pmd_actions[i]; + nfp_action->conf = NULL; rte_free(nfp_action); } From patchwork Tue Oct 25 07:59:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119067 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 6232EA0543; Tue, 25 Oct 2022 10:01:44 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CDB0742C13; Tue, 25 Oct 2022 10:00:27 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2120.outbound.protection.outlook.com [40.107.212.120]) by mails.dpdk.org (Postfix) with ESMTP id 7A80742670 for ; Tue, 25 Oct 2022 10:00:17 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ShQzyG98MxUPxzJOdybyW8HwYNjEc00vmD1Fi21v58INGn2+K9NPE1MXlkyJZr44LHBAbCorQOlSro9pC2tvgYnv53tHF7xAAwHa5m1+mmIepI3QahSmBEQHtQPTtoMZBu7l2DwJnKbSyJ9GF8U7+NtK1/hIMa+9Utx+CzfQWOexVD8ICshvdVp3JN4yoKZtb13F4CnPhWtQLb6Yq4Xnc9hWoICcOKzbbU3vmp4behfQgWGK8JP+WaKbk1FbEn/l5CKZj943f0noTwlBUrvchSI9qliIfw7CvBs1JKJVz1TkLSmIKYfj91vskVVXRhLUsUCVbxII68MubK4VLL0+Hw== 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=QoKbReR/ZbK84RxmmLZXAW8GScAx2sQP2XI9k+nNquU=; b=ZwjIN9kFu+SbjwGIK+Z55TlmHmA/nU+m5xVJ/NyfuqJCc3l2QxRn1I/s77aGIhacIFf4SKTP9WLyLH97eV8uaercMX0gxcTjBqQrq2jf4Tn54kFwWnBX78qtbWAqlfTZwGzUr5HrHgtYyPmvDCSiGgR9SR6zVADWWZ8SUXMlGW/VHqJSC8kwH7IfCgsrJAk8SFKPxZbQEYwAnaZxDDi5nYEJSu6Dfcd/5IzJvPC5/qNI8Y1LpBYfvSbJytJpTsQJa3fXUyKdpFtLrLf+HrlrDeay4+2Je3sE9KLbitHtIMi3nryNrxR5gspfI2DBfnFLg/AKu7kloxmw7LIs1Nz8HA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QoKbReR/ZbK84RxmmLZXAW8GScAx2sQP2XI9k+nNquU=; b=Tz3ZyJm6TBFOZqtmTGVQKgQuB5XSAagb8P0efQmSmYT7QETXK/1iNrwmL6VMkO0VX/IEDdvnaUUGfvsEUQ02WbZT3JmfGv8OBfnv2p0QJgdP7398cIbN9sbFRIl6EstWJz9DIwTYhtAUL62v8HmMaA04QSpwY45UdeGq0RWFFm8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by DM6PR13MB3924.namprd13.prod.outlook.com (2603:10b6:5:28f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 08:00:16 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:16 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 12/26] net/nfp: support IPv4 GENEVE encap flow action Date: Tue, 25 Oct 2022 15:59:04 +0800 Message-Id: <20221025075918.7778-13-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3924:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ac7c88e-10fc-4b86-9333-08dab65ef3d0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DNnq0ho/beuzob5atOeaZz4YI6w7jTAwUyVXccSc1CaRwGO0i+CcV+PAT/D0iVRus8zSplDaJ3mlZhkkTYlcIqVE7WF3T/6TTItet6+sGxbPao+5fXCdPtyqpTz/MEhhkJ0eX03tWqTzLoAUgMPF/YfZ2s30olE/3wcK3KZGAUyp6HUZa/cTnFPF81uZjUtWicwKgSdEY/eH62cZmbeTpsWDB9saFFy2Q2LjRO/9Iuo0AiRnjLWdZx9z+aAS7H9/1hPsUO6/UCxyONgOR3/pk3iial++xG+bLCMUCF4v7v91l2CsE+Zy0qepq/Q4Bd1Sw6voyc/FcCQc5nOZuGsg8xlyQ11VKzQfmftzTutgoqw42pXTN8mZ7AyMr+YwQt4GbZVx3725wxraNJIFA5rYd36/RJIM5b/QS6VLKMZ9jyPSwg/uMz50b9L+F2PVGCSa1NG+lXbLzWStIo46YmRhvuO9sWKuToIY2ONyKje4Xd3oxYxO1Q5bBCIKQ5chp0P6v/nSdEJSfzDfiJJyoLLmsUY/17Nn87j2NZ7eQxUJfwnlzGlyN//qk0MjqiqIH7aHAsj/PVslBbHJHq5Pp4fZ3FovU9XpkRuPnSDLDH3tVDVNCmYTcVQB5sOX84mY7NqLepzLGihGZ88Mk8djCf+PcFduBvPtOkzivvF4+nIGgqgqm0gpLViVGPyadR1eu6VE2BsbsFEhyl2fW69KW2LKLF+PeRJ6W4KLbLssdianEeyQX3pt22nqfwswL3d6e0k/9f/s8LAgwavV6ZUix3l1XQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(136003)(346002)(39850400004)(396003)(451199015)(86362001)(2906002)(6666004)(186003)(1076003)(107886003)(83380400001)(38100700002)(41300700001)(2616005)(8936002)(6512007)(36756003)(5660300002)(66476007)(66556008)(4326008)(8676002)(52116002)(66946007)(26005)(44832011)(6506007)(478600001)(6486002)(6916009)(38350700002)(316002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Yh8fIpiyrKeN9EE0pwM867DIPA8l?= =?utf-8?q?SyXgah55cQH5MkvLyqK3tBmdA8hxxq96FjZMYgEnAiSE06Iavv0P+owyTD/tpHdX6?= =?utf-8?q?g0j840RuErvsnZW4LDvqbvg/dCzxBhNUvbtGGox+A9Mj8hboOE7ckNt6b6JbgM9gt?= =?utf-8?q?IWudMAnhheguTm3pxZIZzn71/uF8YKyYTv3Sav+klriShS5q+3kKdNXY+PuFtevvf?= =?utf-8?q?neYepYLdurC5eS7+wEmVAgUhksEKsoHgvbGERpLXYhIsDX2dAKvi7n9QvJLLI0ccR?= =?utf-8?q?OLQ84LW8umyfRlO1bafnbaB1YPG4KHjngMgzHZigiFXS/BbtQPeZZi+m8nDG43HKJ?= =?utf-8?q?OIUJR1x1CrbSoiiNPNuW7qE00tRljKoLcbXdFgA2h3CdjbsZMoAI4o2aLO2WUrMV5?= =?utf-8?q?nrDV2g+nhQXQudXcZPqek2CF0RwQlHbPOIIazVwh+RD+xsgwgSyj68xjP/vbyyoxX?= =?utf-8?q?8kg6V1Sw3rZVcoOdamHfdapj5g0dwksCFratQMyW/mZFU4cyFJKumlxQH+A2jhEiG?= =?utf-8?q?ey/R9y07rw4f++VYnM8CsKjdatre1URYLuP+WjtovqersuaMTtu6uJzMycZYcJWGu?= =?utf-8?q?eVG8JlxBHD9Cd4Yv4nVSBgsTF50rJl1z6ftlFnO4Be7rT5gcOs7y5xqlL4VbxS4o9?= =?utf-8?q?cOA/VgEpu/HOI5QCiSZzax+yErsDI1BLwSDi79ybx1AIyeKDHTRkY3+MC/HYL9vDg?= =?utf-8?q?2ZifEGkWnY6o8jOTpa5cuS35oqgGIYGR7t3tMM4/MQc2EJVA9MSLHR1kTqFwIBxws?= =?utf-8?q?/eT6rthBkjodWw6mBLElEOBS7/akrOLkVpzq4BUy5n8usmG3zL9+e+z1tzhnhkphf?= =?utf-8?q?Y7eATrTKtq3WFO/gC6N3x7VWQLMlgLO8Qir+ksG7hR9hoA92JNL2bB6Y6lXUBVIrB?= =?utf-8?q?tzlNklAc8NRdkqA4Y0WYJkdDfGfOpskh1Z3XUiuaKt9gpEYSmr+5j+UEjthwMDJrj?= =?utf-8?q?T9JU0aA1cCGoMnm8aLIv2kOciOT69paYT4HVq2NdXCgzp7Z5or20BvIDrRwl7JlF8?= =?utf-8?q?JPzzboJqkIGRqokiuTLburMjzMdsBC+iptfZyFNBpCTkVy8DYNzVF8eJJhK8384Ma?= =?utf-8?q?62lG9YiwLqd6mDsFddR1cxtnCwlUu52Vn5oJ2YsZ9fQLDvB5Mmq/Nvg2Tov40LOyW?= =?utf-8?q?uPalsyCV6v3hcLOuu64SykaFQ6ilCcNEcfOL/EznKVrkaonfo47TT7dE9R0LF99eG?= =?utf-8?q?rvXzsUdtPkHbU77fTKHfi7wulerIvrKEzSsnb08b80C6f3822BjNqbQyu3Xqc7a3F?= =?utf-8?q?UQqCiBYiTMUNSwiYB6JLRAL1RiiDRZA4bb6+RbGaq1u7IWfs3X+2+8adNLA6/byR/?= =?utf-8?q?jAb6xzRaONC29BxnaCrVj04KJ/vEaqqPOaKzPeYLBEBBSq8bV7sQ37+IZ7vAPRwJ5?= =?utf-8?q?0EJLCJKkwCn0IAJes7gPG8EWGFil6grxOdRzDvky7IvYTE8t204R5NNxu24ocUCfP?= =?utf-8?q?BWSydFIiTgEEjpsGTPAxEF5H4y1cHSjQ+D1zW8HPKa+5LRhPWYf1iIN5/Mh0P3DBg?= =?utf-8?q?/AEUSp/bLRVsvn5lIQxSejuzta43sVYs9g=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ac7c88e-10fc-4b86-9333-08dab65ef3d0 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:16.2091 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MFHZtBEarQaD6BOe6GKJwjHnD+mjuDPc+QBhj7k8edGgwj64n7z5Uikb2oZhr+5IH6WeVF3WmIEP2QEHpXJzCZgsBNYyIdrnvB7ABICXD3g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3924 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 the offload support of encap action for IPv4 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 107 +++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 9ab840c88b..deb27ee2d8 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -45,6 +45,7 @@ of_pop_vlan = Y of_push_vlan = Y of_set_vlan_pcp = Y of_set_vlan_vid = Y +raw_encap = Y port_id = Y set_ipv4_dscp = Y set_ipv4_dst = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 9e8073b0f8..7d19781bd9 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -38,6 +38,12 @@ struct vxlan_data { __VA_ARGS__, RTE_FLOW_ITEM_TYPE_END, \ }) +/* Data length of various conf of raw encap action */ +#define GENEVE_V4_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv4_hdr) + \ + sizeof(struct rte_udp_hdr) + \ + sizeof(struct rte_flow_item_geneve)) + /* Process structure associated with a flow item */ struct nfp_flow_item_proc { /* Bit-mask for fields supported by this PMD. */ @@ -908,6 +914,11 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); break; + case RTE_FLOW_ACTION_TYPE_RAW_ENCAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_RAW_ENCAP detected"); + key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); + key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); + break; case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_DECAP detected"); break; @@ -2622,6 +2633,88 @@ nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, return nfp_flower_add_tun_neigh_v6_decap(app_fw_flower, nfp_flow); } +static int +nfp_flow_action_geneve_encap_v4(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + uint64_t tun_id; + const struct rte_ether_hdr *eth; + const struct rte_flow_item_udp *udp; + const struct rte_flow_item_ipv4 *ipv4; + const struct rte_flow_item_geneve *geneve; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv4 = (const struct rte_flow_item_ipv4 *)(eth + 1); + udp = (const struct rte_flow_item_udp *)(ipv4 + 1); + geneve = (const struct rte_flow_item_geneve *)(udp + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v4_process(pre_tun, ipv4->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + tun_id = (geneve->vni[0] << 16) | (geneve->vni[1] << 8) | geneve->vni[2]; + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GENEVE, tun_id, + ipv4->hdr.time_to_live, ipv4->hdr.type_of_service); + set_tun->tun_proto = geneve->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v4_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv4); +} + +static int +nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action *action, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + int ret; + size_t act_len; + size_t act_pre_size; + const struct rte_flow_action_raw_encap *raw_encap; + + raw_encap = action->conf; + if (raw_encap->data == NULL) { + PMD_DRV_LOG(ERR, "The raw encap action conf is NULL."); + return -EINVAL; + } + + /* Pre_tunnel action must be the first on action list. + * If other actions already exist, they need to be + * pushed forward. + */ + act_len = act_data - actions; + if (act_len != 0) { + act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + memmove(actions + act_pre_size, actions, act_len); + } + + switch (raw_encap->size) { + case GENEVE_V4_LEN: + ret = nfp_flow_action_geneve_encap_v4(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; + default: + PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); + ret = -EINVAL; + break; + } + + return ret; +} + static int nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], @@ -2797,6 +2890,20 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, position += sizeof(struct nfp_fl_act_set_tun); nfp_flow->type = NFP_FLOW_ENCAP; break; + case RTE_FLOW_ACTION_TYPE_RAW_ENCAP: + PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_RAW_ENCAP"); + ret = nfp_flow_action_raw_encap(representor->app_fw_flower, + position, action_data, action, nfp_flow_meta, + &nfp_flow->tun); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Failed when process" + " RTE_FLOW_ACTION_TYPE_RAW_ENCAP"); + return ret; + } + position += sizeof(struct nfp_fl_act_pre_tun); + position += sizeof(struct nfp_fl_act_set_tun); + nfp_flow->type = NFP_FLOW_ENCAP; + break; case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: PMD_DRV_LOG(DEBUG, "process action tunnel decap"); ret = nfp_flow_action_tunnel_decap(representor, action, From patchwork Tue Oct 25 07:59:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119068 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 DD2D1A0543; Tue, 25 Oct 2022 10:01:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BCFF342C18; Tue, 25 Oct 2022 10:00:28 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2127.outbound.protection.outlook.com [40.107.212.127]) by mails.dpdk.org (Postfix) with ESMTP id 7AD0742670 for ; Tue, 25 Oct 2022 10:00:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fu31xS2N98CXQ9IXg+bpkKLrVL8ZiWCl9XYt0OrF2XmtfI/+Oora0FDS9Zdy/Qcu7q4NAo4gzr0/iRFzovUr/mEwR3Op0W1JC/cG0o2LmCeOQVIT/LufmlS9UVRnJhkfXP10AvF1d1tCjFmJ3qCtH4PcgK19ECinFfYuk2TQj8ymn9xHM26NPw5yFgUxTrNNbrXIhWVbA82LVE4Kog0TZdv6ktdKn8EZz03r88IrCeBjnm95TaA5j0PGRSiDTvBylwymN83GnBBKW8zoYw77C29wE93zZHU/ZH3eLomPgVgLWQjEPZTg8Ws1aZdD+aiBJ3Ja62EIoMwAze7dweLy2Q== 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=uI8XgCvsUW9YnuhnxrjzfO5G0L8OgbwG03tzSJAHEu4=; b=e8aVc+TNlYA9wo7rSpAF9S+WC5BSurcJqHleeQ8sDHgfkL6QQ4iu7oXsmxJr4gmoYJMqL0eOFkPZjxtrJuPi79wcVHG8jZeJeGkC7nLctEvINNEY3jSvpIRtm9ht5kVj/1NP6X4JOkfivK6OyW16KEFSyf1PIJyCjWpbb/VbaiBOb3b7jDlQ5/vWR4EwUfiA7tBTq3kVykP0Di0qMz45nruPWTfp7dwvs+738apQoLnqTHJCheQGkUEZviEI1FIRyUUL0qQitGmr0peCIDC24oRyqWvCvv9q7hLn9G9padqBKa+0TXNkPx9fVcJO3dNY50+2GqVomDumNCGibOPmDQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uI8XgCvsUW9YnuhnxrjzfO5G0L8OgbwG03tzSJAHEu4=; b=ijfB8F4RNg5BMER/3f+EaMWp1IJJcTnJrFRdTtVfe4IWXHtKZ0xvJnsU9Nq+52hK+z9MS2DlpjJu75MyYnE/JPBLAhcRrVwtkJXE1wYLuJ2nr3cga95vNhOeFrt4dGb97UzVFTm9knTIg8dl43rEWlA4pGfCvg2bUpL7wBxvB/w= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by DM6PR13MB3924.namprd13.prod.outlook.com (2603:10b6:5:28f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 08:00:18 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:18 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 13/26] net/nfp: support IPv6 GENEVE encap flow action Date: Tue, 25 Oct 2022 15:59:05 +0800 Message-Id: <20221025075918.7778-14-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3924:EE_ X-MS-Office365-Filtering-Correlation-Id: 99ca9316-d9cc-4487-870e-08dab65ef501 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HC1E9qpq1trhTeJW/1kzh1wbDdGGemBuvI8GQvNsvp59Wx61dTJuslxCuf0qymTkbdXHqAXCv6UhwwwYN/t1Oa0NowQA0nKfQpwj1fo/BzPbBlV8LeB1Yv9D3UKNm6ZQ4t1X0JLT+AQpY/CyGyl8wTJ5dCvgV6Gy9srmJaZ9g4K+VheG7tYM4cmUDX6SwVbuTDAXiTsc/2QvtFlkjjaRBPDHg+YkMePE9MdAfA+l/nPMaZ85heAUwNJ0ti4kE8dnCE/WdKyQWvjEZYwhkE+CBqxTGQmWSVaAFzz4uoQDkjphHKkuUjJ36xUVQCvbg21fEw5diPvnfhgfjR5IZhQ+Xh4TcbK60hH97khEubyH5CuMkVA38JQkDcmy5va31wiSZkht3mo8L2/XTAOJPasABRvf+Q24z8wa5uLvJ7Y2M17jf1tv2NG4WkzBA8zW2Ny98ojTjXSNNivygY6l5nySiC2T81YQDWDd9DhE2IYeU2oB5hyasr4FZpVr8zA7R5hkeT1vUwxWZBlmFkgOL52CThqNVbrWYbFmWNgPnJJZvSJW7rLW0eAtr3BUUjND3dXSnoZJrCV18YbqRaw5sRAlU1gfqSsTdsWGm/T13G0GsNOqpoNhWTFSEK5Xir1oINfen4liREe/VFB15O5viMc2HxO8ldKTGJv3CSEVL9DblzFRdcOHEqqm2XwAyj0dETAV1ADN3ATRIyW6DvYmbHUSadUbLmlZiL+pfGYWryxJPmTVUOuQIK2XrobXi5YIJyF5ZizlN5ZWa+VPReM7NGiB7Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(136003)(346002)(39850400004)(396003)(451199015)(86362001)(2906002)(6666004)(186003)(1076003)(107886003)(83380400001)(38100700002)(41300700001)(2616005)(8936002)(6512007)(36756003)(5660300002)(66476007)(66556008)(4326008)(8676002)(52116002)(66946007)(26005)(44832011)(6506007)(478600001)(6486002)(6916009)(38350700002)(316002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?EsXP4Gcih0TCakmwmxIhVK+QDpun?= =?utf-8?q?UyQVK9PK4bqI6pGNqPcQjzNS37IzkWeEGKLVwtxHK1EljjaKel4NL7lDu6eCzjuw0?= =?utf-8?q?dk8jPvB8v6NqM7tDIcqaxnJt8/NbtevTnhPdz0QMHDvJ2bYqKZ28/Q1GS8/L6p3jz?= =?utf-8?q?n0U2eZ93XoyJ/eC1k8uoewmfMDS0TFzNzLtOVPqlZ7Z4UCB+0sndF8ZYHtUWlg/UT?= =?utf-8?q?KmWxPAOrK6ksWHV/KoWecORuT/Ub6lSrzonfbs0jWM7YwYjiq8obL4ACOjY3NLyRm?= =?utf-8?q?kRoHS8+o+txZvo/sKM5haJpLYjyRQtRn8a12h1SEVBsK4mN6ZksMhBjNEwQz6Kw6N?= =?utf-8?q?1w/thS/avFeqI7q4/j9yfY5nF8tthKVfmpqwraD6CoGye/eyZSCCcppeTJuyCRHpK?= =?utf-8?q?Twb6D+BOWSVMIKBIWNyNGyZKWGAJyCsWyOPwlxQ9TN92c5N+jQpTEp9NgtMnGu9Fh?= =?utf-8?q?92DHuOjZSvqsQ9RjpdIyGROffTyD4kHxEuF88lXhAETu8cdb6KwVczl9CtBG+2iGw?= =?utf-8?q?SnXjwhGvgh92EqoFEYeyku0S4C9M/vZt28BaojI8SI892OHX8IkwTxW8RGGtsC2Ch?= =?utf-8?q?ovmStA70LEDM6kiAWHaMAP9oK0FaYx5vos3w+MISye0dadr/jjV5QXUsm7J1mKSS4?= =?utf-8?q?6nuEp3cG0tfaBGESYC+rNqMV3CkTpvkURIyuNEmN/Dp5u10TZbU+n4HJxWplTpG0F?= =?utf-8?q?tAgU7aq31a4wUYiesLHttyJN9IRFH//1+jDItq0CzoCo7/4SMZnRoWeM/bcfAi32r?= =?utf-8?q?Y1GGpy2shPwHz3KeVE4G6CcLKsnoEzxPMcZqUy7OZqIQR5KcJisxQQ9VCkS4CkIGY?= =?utf-8?q?TKPJOiW2o0O47PmydC86l5DjcpptiisC6xmI4uRMNcKhPomaXQx3gtZfC1N6R1nQu?= =?utf-8?q?JK5ugMTYK78KbOiIqLqS5JgThL+NmP25K70vlnnf12pl8JCnKAc5JzouXdSCAp7ow?= =?utf-8?q?R+OapyKIo6m7NuXBKv9qR6qwbT7xwYoIAQ68vUQxd3bQllH6xLuyS3e53D4GLRap9?= =?utf-8?q?x5gI5kRbJbrr2VPhyV9r/rCFlpoxi6dAF7LXcHTajl3k4THoE1H32Xne9pWwTbDR0?= =?utf-8?q?4za5c6QjLbvJkGcjcgEBL5KFSv/XA4ZHLf8mT/LNMe4tNyyAGGq5OqUPjM22hqkp6?= =?utf-8?q?a6EKOWAw/tXP6Y5xaJ5EHNwSIgZ12a516G+GVW62R4FSI9d9MU1LTN6xwQkONhktI?= =?utf-8?q?UFt8JILap1SfLY2Cf7itru/LYzPh5Gim8yGB3/JTs1CBmufM3gCO8X16sSD3Kwvl0?= =?utf-8?q?ZwTFhGu+dOCqPI/HiIae7mK45Me1Ws6muUOAd82DiUsi80EeM0Gdkp4DphfYnipbj?= =?utf-8?q?NoDj8B9vn8LucUKES+v6ZQZ+wYkIORE3Shtt2cEeBNiBdvIJTCy/YAwO9y8GIMpZx?= =?utf-8?q?CkPXIF3TF0w9EgU7nvnXs8RlglhHmUpfKUsw5sDMHZxTlWPy/hir7EpIpmPKa/+QJ?= =?utf-8?q?4rf6yLMyAGD6eeqSPXQUsBK0gcs/9d44VwfZf1YcN7JoasJe+l5OT4yeoPK2EDhQB?= =?utf-8?q?FDgVcEfzwbNWUr76AfDmXhDTgCMvqP5tPQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99ca9316-d9cc-4487-870e-08dab65ef501 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:18.2089 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cF9hOX/dQC9yZNyveLLnAVOpDh4elyPtaCIYD00iVEK3edR/nHFkZopRunU9oBRgEi6ttA12nlSoxLvfKqP+ybm4cXYkYMBDt5yIfz46ZRA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3924 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 the offload support of encap action for IPv6 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 7d19781bd9..8416229f20 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -43,6 +43,10 @@ struct vxlan_data { sizeof(struct rte_ipv4_hdr) + \ sizeof(struct rte_udp_hdr) + \ sizeof(struct rte_flow_item_geneve)) +#define GENEVE_V6_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv6_hdr) + \ + sizeof(struct rte_udp_hdr) + \ + sizeof(struct rte_flow_item_geneve)) /* Process structure associated with a flow item */ struct nfp_flow_item_proc { @@ -2672,6 +2676,47 @@ nfp_flow_action_geneve_encap_v4(struct nfp_app_fw_flower *app_fw_flower, tun, eth, ipv4); } +static int +nfp_flow_action_geneve_encap_v6(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + uint8_t tos; + uint64_t tun_id; + const struct rte_ether_hdr *eth; + const struct rte_flow_item_udp *udp; + const struct rte_flow_item_ipv6 *ipv6; + const struct rte_flow_item_geneve *geneve; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv6 = (const struct rte_flow_item_ipv6 *)(eth + 1); + udp = (const struct rte_flow_item_udp *)(ipv6 + 1); + geneve = (const struct rte_flow_item_geneve *)(udp + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v6_process(pre_tun, ipv6->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + tos = (ipv6->hdr.vtc_flow >> RTE_IPV6_HDR_TC_SHIFT) & 0xff; + tun_id = (geneve->vni[0] << 16) | (geneve->vni[1] << 8) | geneve->vni[2]; + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GENEVE, tun_id, + ipv6->hdr.hop_limits, tos); + set_tun->tun_proto = geneve->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v6_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv6); +} + static int nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, @@ -2706,6 +2751,10 @@ nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, ret = nfp_flow_action_geneve_encap_v4(app_fw_flower, act_data, actions, raw_encap, nfp_flow_meta, tun); break; + case GENEVE_V6_LEN: + ret = nfp_flow_action_geneve_encap_v6(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; default: PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); ret = -EINVAL; From patchwork Tue Oct 25 07:59:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119069 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 24095A0543; Tue, 25 Oct 2022 10:02:01 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C1F5742BF7; Tue, 25 Oct 2022 10:00:29 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2139.outbound.protection.outlook.com [40.107.212.139]) by mails.dpdk.org (Postfix) with ESMTP id 6510942670 for ; Tue, 25 Oct 2022 10:00:21 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=V8gYYScp+O1ohbGAQbrFitf0dneHo7XZFnHMUTbdU2BKZt/hLGjXFBN6/XTmIbQq2gXtrIRNj5iidHFLWXt3sZC6hzBRzQGRMWwfF54kKYvGFhOfBKww0PkjYfa/zsBca9vozTFFJ9o/6Pc+1NlyRAGmrsjJzw8S71M7EE3Hc/rasqc+/uZHOMHjeN7Im0iwa2QJ8833wfGDUF9P8YemLI3v5xKiShZ/ATxECOQggTnSgtyd71ZaVT0pmvXgIlD0TTgn4C8bwuhiSXpmHsC9xpTJELNeZYtciLHhzonPNz/8WaImFHvj0PsesFYovT2+66pI9YActKvYes/ofi3M7w== 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=nuS26QShNul5FItYgUTXFQiwVrr8Ny3loLniPF3lAwQ=; b=Brcy2xKgIesKtzGSoVk9W3BH0ciqjraDnnpH22oD4L6egg+GpIlqR/wJqh16NQ4tNjZ0wOIDW8EiyheMMWCJebcxoPv3CewE6l95SEabqO0cvwGVMdYNVd7LPgL0gWwM9XZbYlkm2MxlrPzDHbNsk0uXwccRxNm24Dr88+uFCebdDzC4XWKBpCb8PK/TEUSu/Q8Dt3rTUEhg03Le9aoN8Ze07tlsHJt36vScMreQsChxIVlzm+zkeyLbxzIt7ZcHEQYQ4ChwPt/cVFsHTd08weTgI7/mM+iYrkyIK29anXYURsIYGEzCIfLe/ouNNwKiXmtjkrIAepyP9T5LHZmhgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nuS26QShNul5FItYgUTXFQiwVrr8Ny3loLniPF3lAwQ=; b=gB2AKYky57L9pvAaMEfgrnEMjCeeg3N0gxnq2yP9sxTQ76Nbem6/YhZGawejEFi4Tyv1ATAk3eVoxcXzwvK7WOUHXX6rq80M2MwN90BOOg15kBTtNyNTlDItbp4wYkwynGp6I6qt7r2a0mvWHYtPXX+2AsTbUzzCOMcgwR4+qOQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by DM6PR13MB3924.namprd13.prod.outlook.com (2603:10b6:5:28f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 08:00:20 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:20 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 14/26] net/nfp: support IPv4 GENEVE flow item Date: Tue, 25 Oct 2022 15:59:06 +0800 Message-Id: <20221025075918.7778-15-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3924:EE_ X-MS-Office365-Filtering-Correlation-Id: ec6e4e4f-df74-4b0d-d662-08dab65ef632 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /F7Hjr87Ma8c0BATvMwgZ1ugFcq7JJ7/F4j4TIThxCKRlCy9D7hRdPwKIQ0BrHEL07YvZ3wpmJBuseYeVcZ7hZnecw+IcQlqYWFoCj8kCyHCxh1G34+5wag2pGPvlxqUGbdX1rl6FPS47KYyTiqvLnRXbmNS1YtFI1kIbmFtpzgB4lPbjlOSGrHQAoyMPX+hb4aQKlCozYulHhl5E14AyUWlR2MzAAjHBaIE2doIsoydrMJms60G3t+oTvaV65yKTDPdL+Ryg7lXR3MiVGPd7jxdhdXnbcKgRh6XN/6dyVUyCcVtCoIqKGU2X1lgmJBCR2OyFigGcN0TBJaqsH6Ep9kSli+QQyYZVKq9RGoA/n/qi0o9V456svrf9KI9w41D/Z0n68lpS+u/5Hy0ae4ldpxkuwohN2Ks4ODEdo8hnCUbyEBf30+mcLg6XDAJAQ0jH/RnTyx5o/Ii0SOOcKqLmSJnLbI4NUVpj0mdtKeDu5LFuI5mqfWixvhTwWL9JmSkjuR6BakyG2S5g4JWo4t/7i1cjSVco7Re6taglsNZQJrFp/WMNT1Rb9xjKIWLs1x2+TtAmJin2gMg2e3GmMeK2mliG6qgOuSozXznNg2RcpVtNN6iKdiLVIiDZvMSUb765L9b7arZGmycfmoI1Let4JZRy6nw4Tq+NfzwIOgM8jY0aM/ZKiwM++UNJyX9XaYK/IySjaLJx04nLCB9FXTYy8LjL6up1NkZSWIR23KrOBV6bG/Ih9BvkecduOwI1ghd2S0v4IDN0kvJ2LhpSZ4Thw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(136003)(346002)(39850400004)(396003)(451199015)(86362001)(2906002)(6666004)(186003)(1076003)(107886003)(83380400001)(38100700002)(41300700001)(2616005)(8936002)(6512007)(36756003)(5660300002)(66476007)(66556008)(4326008)(8676002)(52116002)(66946007)(26005)(44832011)(6506007)(478600001)(6486002)(6916009)(38350700002)(316002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?lXweU5Mgij1iqywMdhaXsl7Ze76F?= =?utf-8?q?WKTt3SOggITeVNAOGRqVizK9GVZtCSRQS+kMzpXkn0zxMuzVHI6q12J/2pTXdt9CF?= =?utf-8?q?Ldon4eeRN4HlDu5JCtXhZ7+dE4N7BZwacbv+irn28ZBYTT9+FrBev3gNtQcLTnBzu?= =?utf-8?q?ELQ9kzMBYD7uBsgTaBzKwJz01J5HHk5mkzLgoC4mExqHk9Epa0IUeL+5gt7Acef5F?= =?utf-8?q?tTCmb8GWpTaG+gSmU/Az0+Tzazp9paM8So4RpQW+owrmImIQkVLf157KSB4ruccDj?= =?utf-8?q?8Eiw1Ocy6Siy0rDVpZTHPEvxGZlkdbhML95LWb4LAs/AgoME0dNe26lui0BdE4v4/?= =?utf-8?q?ZmPNgZx/0FP+rnSUQljVJ+qKTcjGsGq/zUgjWh3pSaZyCtglycsZL2kgWs9xwQtIn?= =?utf-8?q?3clVwm30cYATILNUH7ZGg7EmzDVY51m731kiCLY+M88oFwLCXsH4TCicFbweSuXgq?= =?utf-8?q?bR0d6On0FHeXlv6pqjRKO7TbMBidJ35r84lsLtD97/TsqndQR8ofWYHjhER177GDn?= =?utf-8?q?tZXml0PrKGhhWOegMqnd/GREqFrcjecdQyXG2dYiA/Uu01af3+9mU0FfReR+ZZP+2?= =?utf-8?q?BMNtoRsX58qbgMLXuLngYrXwwYUpsq768xD5MXFgjRscq7v+ZMU6owe9x+6a7C5vk?= =?utf-8?q?nrVnFN5IVwTSV6ldgOrTG+T3gSrldZFJOSk0pScHvbwzl0Zb9TibTSOPvLsHS23zh?= =?utf-8?q?dJkfhET54e1cjP3TLqJKMmgLU8MxwUZvNdcL5OkFUQoRgJk5r3Z2iYdYHcJ4wUDcN?= =?utf-8?q?YPyjtVXQ11oC5mEZ+Z+e8MQJXAcSWchxMyBkGqAdpH+6NAaFEwvUZBqBeX255kfx8?= =?utf-8?q?88/ZWw9Y+SOTCQ+iyqErGC/y4LYPnEZjwuI56fwX2jviYsaOItj8/jrcxU7HF8xAM?= =?utf-8?q?d2YuCxB02BOf7jaqQnseYIx7IHiN8OC8XEe0fELNy2Fiuq8PSOdh8Q3UBRVZIWXwP?= =?utf-8?q?2+XTKROhEzkL2ZTEF/M+MN6tABXbMefyKBYJM+m0cDEOFHW632uXAWts+spzgz5wm?= =?utf-8?q?OLHFLVU+3dobR1WEqScHyZxVUXYBYjhRDK/ZgRrfnOTXLLmMBUAvR2LjJqjfCJ/R3?= =?utf-8?q?ZAeVyhROgYhhtaOfKFDIM9DH27aivg516FcN2BxyLwpliiv2Dea7X76gsAVQDMkRr?= =?utf-8?q?w8U3izJiTV+kFYftnq6/PPBRvUCHV8X+09I0khgWPqkYSu6iiwp4HLqzQQbg8F1PC?= =?utf-8?q?ffSfa3NNv2X/JGRg8RdeccC5pqWuyQ9RWrwpSxxoqlkA3mQj2trKrlB+sPDsj6iNY?= =?utf-8?q?tE5CZBZkFliUVQgojb7pmkmv5vJRKNri7Ak24e0z+eIPngUlkdz32HJ4KpMRZ2yov?= =?utf-8?q?iF86Ss1tVWEFJjKw9DOm/9DL41td76uJZ4KMxQ5yPLsf+GWRMZPSvxc5F6mO+0LXJ?= =?utf-8?q?kCiu2KSoQtn1AajUQWDAU0eAX5OLtYpLnKfOYSLaOS2oAGtRK+6bv2fe5XV36HMgo?= =?utf-8?q?+59epKGEjpQ+UmB7YFBV2SgxB/K6ju/1CYyt07Tdl5kGY66Mp3xmVf6HXErCjFclI?= =?utf-8?q?0SGes99bQBxqfody25Emj0XGQfYBR5apgg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec6e4e4f-df74-4b0d-d662-08dab65ef632 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:20.1787 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: REXVvKS41BqNE9mQiQHmeLdxM6P6ZIiPTGDs0TQ8gTO/Oew0bEjucAIBO98yOne2rtfD4zEeihIFfeYObIzj+WthdY0NX6KI0RvqxkYNlAQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3924 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 the corresponding logics to support the offload of IPv4 GENEVE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 75 +++++++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index deb27ee2d8..2e215bb324 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -28,6 +28,7 @@ Usage doc = Y [rte_flow items] eth = Y +geneve = Y ipv4 = Y ipv6 = Y port_id = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 8416229f20..39ed279778 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -769,6 +769,23 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], return -EINVAL; } break; + case RTE_FLOW_ITEM_TYPE_GENEVE: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GENEVE detected"); + /* Clear IPv4 bits */ + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->tun_type = NFP_FL_TUN_GENEVE; + key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_GENEVE; + key_ls->key_size += sizeof(struct nfp_flower_ext_meta); + if (outer_ip4_flag) { + key_ls->key_size += sizeof(struct nfp_flower_ipv4_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv4_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } + break; default: PMD_DRV_LOG(ERR, "Item type %d not supported.", item->type); return -ENOTSUP; @@ -960,12 +977,22 @@ nfp_flow_key_layers_calculate(const struct rte_flow_item items[], static bool nfp_flow_is_tunnel(struct rte_flow *nfp_flow) { + uint32_t key_layer2; + struct nfp_flower_ext_meta *ext_meta; struct nfp_flower_meta_tci *meta_tci; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_VXLAN) return true; + if (!(meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META)) + return false; + + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); + key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); + if (key_layer2 & NFP_FLOWER_LAYER2_GENEVE) + return true; + return false; } @@ -1386,6 +1413,39 @@ nfp_flow_merge_vxlan(struct nfp_app_fw_flower *app_fw_flower, return ret; } +static int +nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + __rte_unused struct rte_flow *nfp_flow, + char **mbuf_off, + const struct rte_flow_item *item, + const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + struct nfp_flower_ipv4_udp_tun *tun4; + const struct rte_flow_item_geneve *spec; + const struct rte_flow_item_geneve *mask; + const struct rte_flow_item_geneve *geneve; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge geneve: no item->spec!"); + goto geneve_end; + } + + mask = item->mask ? item->mask : proc->mask_default; + geneve = is_mask ? mask : spec; + + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | + (geneve->vni[1] << 8) | (geneve->vni[2])); + +geneve_end: + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + + return 0; +} + /* Graph of supported items and associated process function */ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { @@ -1474,7 +1534,8 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { .merge = nfp_flow_merge_tcp, }, [RTE_FLOW_ITEM_TYPE_UDP] = { - .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VXLAN), + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VXLAN, + RTE_FLOW_ITEM_TYPE_GENEVE), .mask_support = &(const struct rte_flow_item_udp){ .hdr = { .src_port = RTE_BE16(0xffff), @@ -1507,6 +1568,15 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { .mask_sz = sizeof(struct rte_flow_item_vxlan), .merge = nfp_flow_merge_vxlan, }, + [RTE_FLOW_ITEM_TYPE_GENEVE] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .mask_support = &(const struct rte_flow_item_geneve){ + .vni = "\xff\xff\xff", + }, + .mask_default = &rte_flow_item_geneve_mask, + .mask_sz = sizeof(struct rte_flow_item_geneve), + .merge = nfp_flow_merge_geneve, + }, }; static int @@ -1563,7 +1633,8 @@ nfp_flow_item_check(const struct rte_flow_item *item, static bool nfp_flow_is_tun_item(const struct rte_flow_item *item) { - if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN) + if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN || + item->type == RTE_FLOW_ITEM_TYPE_GENEVE) return true; return false; From patchwork Tue Oct 25 07:59:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119070 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 69789A0543; Tue, 25 Oct 2022 10:02:09 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A212842836; Tue, 25 Oct 2022 10:00:37 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2090.outbound.protection.outlook.com [40.107.223.90]) by mails.dpdk.org (Postfix) with ESMTP id BB16D42670 for ; Tue, 25 Oct 2022 10:00:23 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FSv8fNE2Kn7lJnfjhy8yLsLsfBOiLZS2vDM0UAHtvIn4FJYrWX6MOVwZC7/5yFyLlGp/c1/mfwRHEpAvwix7Wdc4FrcsM/xJJXo/fvKH5CUmg3/v9ICIiEBuSPj00KRH4iX+jHYXo2JS2uOeDsy6AiQQKALxG5MsEbAVtyIIpYF2ZANg4UnfMaQV9vNdesAPT2dqQAzCW9XT2R6RBJN13TV+xgpt60KssgoSx5yvsigAa6Cu5L0Xku7ZbouedSMiZvT7pVJRvOtMoBqHG1JaDeShsORkckjBI+9RlSf5/qaMBqLVAKcyJ24bx9yEKG/ZWigEya/k6BTXGT6G+4+nLg== 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=J+z84flUIiETRKz6AVXPxJnwjC2qJLMgZiW7g6zR7O8=; b=CjN6vPXyoY8jGuL1Ev8Zh9x/Y2h08n/uWpVOQFFvjuh4Lqd210QVPT4c6OVbfRjxxKjBtSmsQwIf9fOR8LZFtrR+Zo01KqS7Ff6RdPlWWdPffrdb/BPzrjn8XnUvBaKaJwWyxReEn89xqnD+gL1N6Mv4/2UYl6cBJZL7OqqwBKy6DA6gO+LRDbQwd7i4BSizvTjYX3n+zX8fQho9PTtbkzU0pxKrCvYjGs9bUJs0IQuSbUk40ynWUrfoAQ/YTvWjKdEqaeMDSJohwo8Of7EQgoLqZ816Y9maTInq8tUVfIfT6xS1tQWC0yWEJ7RF6MZY3fUJLzWOkpFNnIuO7o6djQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J+z84flUIiETRKz6AVXPxJnwjC2qJLMgZiW7g6zR7O8=; b=CRfJTUlqaZfpQJxGDYetw0I/9SLBNJ71XPqoN4DdXOSGIbLbdyhtP9IS38S5OSFQaWfOn0V2xWnWwwXH3QlnRSPmEzWEha84r1LHjwsn+5Cx2IzaIbAykUgXPOpPUAnlc5has0CLLjn4Il6NM/0ZGw/LinzLkeyMAI4kEu4F+ro= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 08:00:22 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:22 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 15/26] net/nfp: support IPv6 GENEVE flow item Date: Tue, 25 Oct 2022 15:59:07 +0800 Message-Id: <20221025075918.7778-16-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 9116965e-ca8a-401a-cf48-08dab65ef75c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: m3P0bgEizBRiPEYhrhpN4m3cuVG4hC+CFVDp/ohjB3So+6c3vbhbGPF3he1K9rAXR20E/EMSSNZgsITvcOWw8Z4S2BaI3X0AHG6SkDBiiUtW2/s6jufdpGpH0OOMFf8cE0bwdkSBN5vZiL5NLADzWuD7l4zWIDBxyFztsva9ag1d0ZusSxOkb/3nibxIAZ4Xc+5+jYyv0SWgegv2HptwmInajKKZsKlNsL6brVGM3DJvN1qK7uY8gZ0D13vnozObS4o9Dy72+BR1hk/dBSEzq9q7Bk6gxHc6WWEmhEJELYLXVRSqtyggat0XQI9Y9xDsdcasKGwaZ2PenTXQqC8iWnX9kx+Wd+pusoFlb9v2X19bs9uPKlEMYMHdcHEabDUHXiPlMBzJjf4D1jmGQIp/C83Mq2t9gRG4fm0r+niPVhv+8jFyRhblX3cyLGBLViPXduShfFF9Tjbw/mGXndTbf+EQcJnyHFc9Y35ONt/t88XyOPJ2XnK8c1lpHxRyKLDH2N0Q8+3FP3pWB4U9BmN2cwc4/LV7/rwtLjW2tFrYV/Ul/vo9LLq+q/vpW7Gdv7ph9kKm8JGGZ2vpqBTil+v8QdO0dfSaCks7ujcMVs4y8DloNV/qR7EAdX2vg/5JBdpyYUgV9XgFQIS/8NPMDpmbxk/fPHsSLg71z9fVJw4iplsIwbqjsiJUM+BMRjqiyvdKnuo89/bwl0zIqsilKaD4gB/6vrNvhtRc0qrIiZW/F3ab92gssTUkIH2s3hpHQDJ425pnwtkVQzDR7OunfWHHvg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ixDPh8JEPIFT0WzGVMcTl/9BbcbH?= =?utf-8?q?8ycazxUAFSq5o0HOw8R1W+Dyea+uR1aa9bt3++HZGLWqPRN2mVk7SyR+6fVBOvzSR?= =?utf-8?q?jHtPrENt8zFTrfGtI8vbs+Lpx0W/YtcHEh5xPqAGaRhVhsIPcdWAnEGwgFmLo4Wrf?= =?utf-8?q?NiS/LEL+nNRmDwx3lhwQWpe7r7J8J8PPPPv6amXmZHDLOBr55dNlZ7ym1oLXiZz6R?= =?utf-8?q?2+60t7rt9rJ6GNZb3Z6a3+oVWvU5OzhemSYBib/5zAeLGh/fam0ETFHQHpkVbfRJb?= =?utf-8?q?ruyTsUgA2rhUHjtzocShxxYvS/+m3+SN6JPUuEQSL8gMUi5FA+ignk0jr4APZRurX?= =?utf-8?q?giIcgSsEYcgANDQwCSugJul48tGKpgx0uxWibGBRcLO4DFXfpuecpXIKi5phxtccd?= =?utf-8?q?tVVSZ+RoIeifK24oSS0neDxR2jdggzbLDL6WqtOMG2hYJ+i+zjVWAccedRDqfOn7c?= =?utf-8?q?jso2YZji7CyHddlQk9kWD14dcD5T9HfgLNrS1WDGS3ocMJWgfW+kRoXIrc8I/ualh?= =?utf-8?q?0c4wMPEdHGxAViakp0VKXe5d1bRG4vqyUH/481lspTbgBuC8f6f4AXV+XqFg1LEFI?= =?utf-8?q?rSYGp8rqxiq9EC2mSBE5jUEgb6XpM+TBVHb9yGTwMKl11lStTizN8GyoXw0c1KtR2?= =?utf-8?q?x0vRlOtpF1WTTCt1e7f77TDeCP6MUMTekkhmI6BZGHdf1jiMKieIcWxrKGAeYQReZ?= =?utf-8?q?LLwjBbkd9T0QwKx03VnqBbo4rTfsdMrnbbe9ieK42GoY95ix5vdFW7HPl7DyU+12F?= =?utf-8?q?p2N9+g3OLc/yOxqqJ2uVex14ZdvFW7OwkTrRIUpTLQFPrvxyTmRC9FOt7BbOMkRp4?= =?utf-8?q?aipSYJ/DyzZlxS/Noi8S4eb4qDV3qGYDA9A22DmF2diWrY3cgUiUb6zVE0s+n0qmH?= =?utf-8?q?WgQSa+jNNMSMvxgtlShZ9gltshL/pMl+q0NLVvJT8LpMwoqT7RZnjzxkbR2qRyTcx?= =?utf-8?q?Y/NSgVdb2UsGwPPhgnT8tkQQZFM3xGsCcBusDgBZOe/eAhtCO4puBO2dpwq/EiPzY?= =?utf-8?q?YDjH0CB+E3Du5iuBCjXhcY3tsbpMIxouHenTk0sHnLRCZKDjrPooGCWgaP2DDUmsS?= =?utf-8?q?pky5rig44zmdoPKsITDnxA3bNo7W/iejPvIW7/y1X/AVhlLcNddZwracX+qI0IZTw?= =?utf-8?q?r1ICmt2deHFpo3JXjJ3VvWMd5SwvGHiaRmMcOR4BXj8DRHXVHzjtmsVKKSDYvWfVW?= =?utf-8?q?HhM88nBCkKJb9qHGDB8Pec4cSiO1oGplUgZWvK+EIhgC9r3DoieAzYhzMCsONpYct?= =?utf-8?q?RYB1jkSex3Fh+gxzBY8KG3HnUXlMEjm/j2FCTUeLrngIy3jnKekGsXPWOKulH0T5T?= =?utf-8?q?hKZ/afUADOEqGs08ATIZtEREJoIK8wiNwMgcyreJoUROJVObCIdUf/HYnZgwoiYiS?= =?utf-8?q?NDenejskEdqOyplPDulmcca+3CE0eM+O7Vrll7KJlcU/M4gPgjvfLGbdHMtuFTMq9?= =?utf-8?q?saC/fEd5XxjYyriPsj3EczJRu2E0GqsPiS/OA3arWqihtkYTzD37EyHqGi5v+gRe4?= =?utf-8?q?QqVUVIPZtUQ5eJFFWwCXjhFLgZ+Z5wb+4A=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9116965e-ca8a-401a-cf48-08dab65ef75c X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:22.1470 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dchp02Dva3cz83yfp9X897pG47j3Mnc2+1reHLTbMAyb5k/sumedlSWLbaztjXdV/M11LX4l/OxgF34nCp0GH7EgoSoJtjGkbmOYRpFgxDQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the corresponding logics to support the offload of IPv6 GENEVE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 43 ++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 39ed279778..50e5131f54 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -771,8 +771,9 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], break; case RTE_FLOW_ITEM_TYPE_GENEVE: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GENEVE detected"); - /* Clear IPv4 bits */ + /* Clear IPv4 and IPv6 bits */ key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV6; key_ls->tun_type = NFP_FL_TUN_GENEVE; key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; key_ls->key_layer_two |= NFP_FLOWER_LAYER2_GENEVE; @@ -784,6 +785,17 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], * in `struct nfp_flower_ipv4_udp_tun` */ key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } else if (outer_ip6_flag) { + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_TUN_IPV6; + key_ls->key_size += sizeof(struct nfp_flower_ipv6_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv6_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv6); + } else { + PMD_DRV_LOG(ERR, "No outer IP layer for GENEVE tunnel."); + return -EINVAL; } break; default: @@ -1415,7 +1427,7 @@ nfp_flow_merge_vxlan(struct nfp_app_fw_flower *app_fw_flower, static int nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, - __rte_unused struct rte_flow *nfp_flow, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1423,9 +1435,16 @@ nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, __rte_unused bool is_outer_layer) { struct nfp_flower_ipv4_udp_tun *tun4; + struct nfp_flower_ipv6_udp_tun *tun6; + struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_geneve *spec; const struct rte_flow_item_geneve *mask; const struct rte_flow_item_geneve *geneve; + struct nfp_flower_ext_meta *ext_meta = NULL; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); spec = item->spec; if (spec == NULL) { @@ -1436,12 +1455,24 @@ nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, mask = item->mask ? item->mask : proc->mask_default; geneve = is_mask ? mask : spec; - tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | - (geneve->vni[1] << 8) | (geneve->vni[2])); + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) { + tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + tun6->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | + (geneve->vni[1] << 8) | (geneve->vni[2])); + } else { + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | + (geneve->vni[1] << 8) | (geneve->vni[2])); + } geneve_end: - *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) { + *mbuf_off += sizeof(struct nfp_flower_ipv6_udp_tun); + } else { + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + } return 0; } From patchwork Tue Oct 25 07:59:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119071 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 60EE4A0543; Tue, 25 Oct 2022 10:02:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 775E142C1E; Tue, 25 Oct 2022 10:00:38 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2090.outbound.protection.outlook.com [40.107.223.90]) by mails.dpdk.org (Postfix) with ESMTP id BA0AF42C12 for ; Tue, 25 Oct 2022 10:00:27 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PP3slOIU1JboHfY1QUCV90Upo5yhP1iDbIIroOmUnEOlvqGljTK36UPt0LYCcN9ItHoQI0Z3Gbbi0Kv3HhDAFodAPQZJkvbVV52niDZB3x4uEjS42uJQGK9pt+Tgb+vDTw0rGpBgrdHl0z6k57fBChK5K9jO/y9zHpzoWwq9BqTtPSJ8PBEjOjsODqTnPzmc7REz1l+uiSbSjiWuxa1aAkYTybV7OGduvIzMOa74jTccvvXE2mN+8t0e9zUxCF7NaXzDYHgZxmA7YA6cak+rODVaWPmuon/29RIPaTuMRwymeAlEzFUjK7g8XTE4aUqwJweTZlro7F4O4LXrB1p1Jw== 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=IL3xN9yHnrEBjiV8n1oBuxLRiLqlGsn0fL9Oq3ZXwns=; b=ON14MXhbMoNvfg9xQsHB//ob9PLpfHwMRN8GgYSIOw8H8970zXg4XPLKLpfb0FJ2LTtj0nIITWXR8RNOHXmovGlApWHNdV9I6wfddYb+EXTrgBsRcZzBt/S1I/XGdxmZcmgZPsz8AnGFDe8QfmQukZ1xYOwJ/dh19cqfTL8MMWgQOqDHuST7o7DGE7eU0GscbhnhFJAkdadA+6PEZuk1InSemum8/M/lIMIZ5csmvZHSOrtwgH7L+kmM0PJgtgHAZHOBNmco4SXk3O0mA26GaP/+ga30ukQD+hbgSOSPrJEKVo0mZ8Nu4eLTTY4cOTo4C62XRT/BpPF0zVT/aKEUoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IL3xN9yHnrEBjiV8n1oBuxLRiLqlGsn0fL9Oq3ZXwns=; b=Gjft/IlesC8L5aCE0+ycAY6jcyK2k50vuvvJPqf3gFXnGww510dzxSBPXciIaBDMoffMk1sL4TqjPsekh3Sdjl5sqig8EQlw0x+yUkMUcrcd2ZHP9lbiPa60a5/9g73phxs4oNkWF6M5Sid1cQwk5i+KOYrNM3xeZtzSDdGnv/0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 08:00:24 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:24 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 16/26] net/nfp: support IPv4 GENEVE decap flow action Date: Tue, 25 Oct 2022 15:59:08 +0800 Message-Id: <20221025075918.7778-17-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 5381d1b9-cabc-4346-e248-08dab65ef88d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kQeUoGkIWpXPMOqvB+DYuTMJWWp2fVhmRvDvmQoWmxwk8vSH8+x+3ni1C8zWdRR9Cme2voz1DJmhEBIYaM4wvL2WuNTTrcs6pLvhHUwNL3Y/PBnu5L3cnrDkKT+ugVHfHAuZ3X6V47CQwhyAw14gHz/uiiHQh36hmDzMAZ1h3W17GGdbAx5yhE2GDJ9Vz4jRn7XHTq42rtKlcqK+jBrbvafcPvbVqY7tEmhtJsuMqeNqvZilAVm8cywIlKgLjnWworR5AYx4Z11mEqcIUxrCqhtJf5884xtspcyS4H2FBNX6m2L+w4fNIm/mIzMRhxRkjz4OuvP5nYJS2OEtcGazNwWgdQmd8zeETiUbhwJ768OeS3KTYBLT4zTWyOK2lY0OOZRb1TxGcbyc2bM4ldZdnxEhsW8remrYOrf4tNQY3hBM9ytyNA/0GO+h5Y/YJOoBhOGG7YfElTYGaZfPn1TDGBzw57Dt+bUjpakTS/qKox6w2dre13KEjt30gbEElbZAuZRKJjR7TOVOoDt1n4rGS/SZ+JAgQUa27zHwmBcia33SUWjBFNoLASfk157qUMPg9ZqYVzPp4yHVikNS+cwj215jhtJ0a6dc1Vc8CWAwVTo3Ux2aZAr4AZG5ureRCJi5hUV+KxtD/4f4i3f1k7JnWG8yoi0p8X3XyA1SxnQ+EMaYM6QlA4JYpZa6jlb4V7Ta3hvog00boXh2ZVhRTpPMCt//wPrfi5rR+B3k++9WOsCXnTzy1W4eSuL3DXwTzWwhT9ZttUdIyoQxf8CD06+u2g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?3QiIXNuNyS85L3YKHgs92xmiykdr?= =?utf-8?q?dqxnFdkGFuKj0gtQaJFKBoDRUTobZmvRC8R2wCeM4ss++U5pZXZAr9K1un2uOjZM8?= =?utf-8?q?vovOPrO9kQj6+UfkkT7d0LlevYGc/BlXBF4P3jt/LiMOLBS6D7MxyuO/uMcyGsYc3?= =?utf-8?q?fdFPcjQaL52mmpOrQSqZMYKFZVVIsg0Q7GGIR0ce3+iFjzyZtwrKG2Qf0WPIo5WxT?= =?utf-8?q?j8kTdNzz23YxSbDRL8eqvOSGeH7/9Kj0fE3buQmKvlchw8/EcxN9cRF36r7/dBabF?= =?utf-8?q?RV4WGDRf8JMNJ3Nb+BxlF07n16BKErwB9p13F2DxV8wZZJh/NY5d0ibka3OT050DU?= =?utf-8?q?OMp7YuO6XgRnXJ/4w9pHXNZHmhCgVCJDAbg2Oix4YT086E5wOusNWr4vFi+bOIjSP?= =?utf-8?q?dqH9qoAyfCQjAUIqtXeMRlO9umJkjpWRu/AZEpvlLHwur6FxxEugYIPjnc/RC+kot?= =?utf-8?q?mQcgmbP0SlHMw7Y5wM8n/Yzb1rVIlZOTpghYLSoR9UD50dUiZqjvGhY/64GYpVvfG?= =?utf-8?q?qLAcspTmbwgYRzkTDkfKA0uSnRWfiCtbrHCwNxeVlm737ybUVQPK+toOcA8m6ftjB?= =?utf-8?q?cUhWy5iDsOaRwu4oDHCT+R7eiLJn4HWA1v7p/PMNcITZOoY/Nb8mBQdtftAF1TKEF?= =?utf-8?q?koVgJX4QM7qZg5hHRZOD0PW87MAee8vOg/vhQ4N//wc7yz9c3QhtbM9M3LiKTQ18N?= =?utf-8?q?njIZhjB4A4TTNr/ED/taFKyUoUoTb6CuwNfeoa1edMMXGMys/YZ/kLl9q+o0z5mzw?= =?utf-8?q?sWaZzPeepr1d/GApMAWFpVNFmMB21bOFnVE6QhjBr86UA8OAzIGVh/+ajEzykiMMW?= =?utf-8?q?+azd9YrbPY9AFAIJ/nYrNsV0x5Y5SEwJkmy1yA6JQ2owNMrm5f3JzVNdJ7K8Ut0QI?= =?utf-8?q?Bl9P1Uv0ZrBrBexKkaVppzVDyevV0Ff5ZR1lK23ysouW5yGEfRMf3mBhq/0Ma1iv5?= =?utf-8?q?aKopjAMnsDmH8qonKRMQhGqS0NzatQuwU1h+VQzA7EoDenzHJobOmWxdcYXX5JqOr?= =?utf-8?q?f3RhQt/Lm8CQ6jLJwgV/G1bD5Eo6lHvqQpY3R/x1SlAoyH/TdBSNJu4tACt3kt46x?= =?utf-8?q?/CNxtrs3ctWj+1vXU2pmRkf4SOIyqgrxnCkTmspzbRGqvIFfNhw5/DNZhNtRW+m/I?= =?utf-8?q?gwqz3HzShm/TnL992xVCJJQJbJutjZwnwAcUKIc2d1Dly9adFzRRdE6LNOoB0tK+u?= =?utf-8?q?dSNXcB1DD/eRWxbhAqjh8UYili9tFhJh6tIS0QTZwwiTp6uceSBTA0CLepisOyVsY?= =?utf-8?q?LJhJdtsypwkQTcXwJhdZjQ/r6AYd2yesFuEbnU+r12lRYp8+RL7Jex/SwsVRtbjo6?= =?utf-8?q?/kX5DjlzcCBhuRWRTXBCyyz7uOywPRXA8QHkQACHtG0963cH4w4mMLR2/A61hanXD?= =?utf-8?q?+MPDYdktRrO8HfRdjQIfjOoogxy0rBqVvU6hZjg77gZWtV1nI8UBSRLpIZ/MwtGUm?= =?utf-8?q?03uApcWv2ioURSGWl+wkW4VICdovlq0NEc2VCm84yizWyNPLBZsSJKw7TI7P3h6UC?= =?utf-8?q?9Nukt3wPC0L0iAfGWNEExFaKy2WeR6R8Xg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5381d1b9-cabc-4346-e248-08dab65ef88d X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:24.1620 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GIRRXc5YtgtIoGTzTL/lSW0YV/1zburjxM3OahEMCJ8EqhW5BTCcCRIE4ZuTrt61L/sEl4yLdOw+QQFIgMLGUZe5m592P/PupHdV5M8er18= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the offload support of decap action for IPv4 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 2e215bb324..fe1cb971f1 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -46,6 +46,7 @@ of_pop_vlan = Y of_push_vlan = Y of_set_vlan_pcp = Y of_set_vlan_vid = Y +raw_decap = Y raw_encap = Y port_id = Y set_ipv4_dscp = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 50e5131f54..46a047cd7b 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -955,6 +955,9 @@ nfp_flow_key_layers_calculate_actions(const struct rte_flow_action actions[], case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_DECAP detected"); break; + case RTE_FLOW_ACTION_TYPE_RAW_DECAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_RAW_DECAP detected"); + break; default: PMD_DRV_LOG(ERR, "Action type %d not supported.", action->type); return -ENOTSUP; @@ -1426,7 +1429,7 @@ nfp_flow_merge_vxlan(struct nfp_app_fw_flower *app_fw_flower, } static int -nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, +nfp_flow_merge_geneve(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, @@ -1434,6 +1437,7 @@ nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, bool is_mask, __rte_unused bool is_outer_layer) { + int ret = 0; struct nfp_flower_ipv4_udp_tun *tun4; struct nfp_flower_ipv6_udp_tun *tun6; struct nfp_flower_meta_tci *meta_tci; @@ -1464,6 +1468,8 @@ nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | (geneve->vni[1] << 8) | (geneve->vni[2])); + if (!is_mask) + ret = nfp_tun_add_ipv4_off(app_fw_flower, tun4->ipv4.dst); } geneve_end: @@ -1474,7 +1480,7 @@ nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); } - return 0; + return ret; } /* Graph of supported items and associated process function */ @@ -3056,6 +3062,7 @@ nfp_flow_compile_action(struct nfp_flower_representor *representor, nfp_flow->type = NFP_FLOW_ENCAP; break; case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: + case RTE_FLOW_ACTION_TYPE_RAW_DECAP: PMD_DRV_LOG(DEBUG, "process action tunnel decap"); ret = nfp_flow_action_tunnel_decap(representor, action, nfp_flow_meta, nfp_flow); @@ -3546,6 +3553,11 @@ nfp_flow_tunnel_decap_set(__rte_unused struct rte_eth_dev *dev, *pmd_actions = nfp_action; *num_of_actions = 1; break; + case RTE_FLOW_ITEM_TYPE_GENEVE: + nfp_action->type = RTE_FLOW_ACTION_TYPE_RAW_DECAP; + *pmd_actions = nfp_action; + *num_of_actions = 1; + break; default: *pmd_actions = NULL; *num_of_actions = 0; From patchwork Tue Oct 25 07:59:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119072 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 29ACCA0543; Tue, 25 Oct 2022 10:02:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0719642C36; Tue, 25 Oct 2022 10:00:40 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2090.outbound.protection.outlook.com [40.107.223.90]) by mails.dpdk.org (Postfix) with ESMTP id 679F442C16 for ; Tue, 25 Oct 2022 10:00:28 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IQ2lWT5auer4UnmaTTVTEv9NHRMrGXjMExVrVBr2z2+4qw3A5L6S8xEEXBqBKFsLGunTKi/H1rAYXbXilIyygSX91gW2ybpxhTi8E8onX/O+C7SWaq+6PxRt6dZlmDlOuAjloMyNT+ZZ5XvhrtUH0xi/C75xQhnfjVBWCFs4fm1HTvDxfITI09p9lNQFRqmTrLHHYv5GyEKPR6zasOjBK2eporgjY0oTkcaxPgjmkyMKGevofEfqELKPVgWaq5LNxnrkDhVx4BLOdr0ypTNUUNw9Hj77E4r8wcwCAao4u1ytnwXJQHpSUkgL4JnhAUcqA9Q5h6G427dFCvubiOVQEg== 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=Ck6o7hFgjCrutYS0Mfe75957Ucsq22wK8olJ17EuK7k=; b=YYK0gUQgKhRr6TFDYL4FwbB9fqkJuwtvD1vGsYpfExQyWI/nwd4DKqIeQGGv5X65iAid9Vk7WvlXB6Z0lT2T+ABNu0fXsXteF3IxTDI8u9mLVEQO6SU+6Dltro5QW38OKRghSA2et9UIBetEGQlT2pMZkU2hz4IIvgfCNOlDRx3HYs9rDTJi3tTN+mFQY9uOC5yypDaXDyWfSS63LOW1n0iTqNDQLRf/GjID5JrUJhygkVhIrIB2hz+NNHHcKSrWtyFSEHjR2WQZcZ4CRca3GAFan49X+KjYO3Y+gOiNpWn8McZvhGCmExxWtPVv9vxCEUrl8oHvOTOgHp4xqkuUeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ck6o7hFgjCrutYS0Mfe75957Ucsq22wK8olJ17EuK7k=; b=mWi4vubYRejW/jc00p+J1fxzu7O1BdGUXsN/2pm/LEnLBGk3a98HyGYrwAQgyTpverc0yJ8beCROxGwT0juhxzMfl1/UEgRa+cftF9MfQEt3mHN5D+YGWoaMf8XNUZdycGskKmjAofm/9BKoATUaRYE9xVpkWVgdVJmgNqlEX1E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 08:00:26 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:26 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 17/26] net/nfp: support IPv6 GENEVE decap flow action Date: Tue, 25 Oct 2022 15:59:09 +0800 Message-Id: <20221025075918.7778-18-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 2250fb07-c905-44a3-fab6-08dab65ef9c3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fePhbzOF17VaAL84cKLaulXDENE4vVbi/aNPt1B7ckuD9G/JtHiopvlecnWEmi3P2ui6lhBFZwtKSgs+P0+3J6InztP4eZ3RzDxW7YYk6PWJC8RJX4Rbf0dTvRHhY0Yx/imPrRxps94JIpN3u7q9Tv7iAAh3BlnI7fiTJlCcVCgb2vRXcdA5DWHEUvSegeKw9Xxst7JlucfIULcy40XV/rgRCgNPGeU8XzOxvazskJB9VXFwbGqnHBCVUGXVB8Wp9VVQePHpnZc8rKvoET8kf8zttc+uVI9rVJKeeZZqDgyhaWrCi7mLZuPC/X73quDZ8k912MyjGrzoK5jifsVnDweZDcHkO3B31sTkBvwXD/sAvBr+W2SY/vNLS+K3NyEWYYu0XHv85hheqKlay+a86edxts6YOPxhITRxvu0s0ujONEyGdo85Azxu4keufjm2DO+w9Ijvh/Qdng8jKmDsBgoZBbDpphxodtoV7n7IiMfaS9zdRTvVhkRA6ymjUHK2lcjuIFmEd4+AaDl07ZtOPOMt6a5bwy79z3XQ+qxBARq97B/v6yLeKJUpy0E+RzVr67LB5tj7TU0s7Sqpd9lmWrxM6EM4sPSVvEA8TDagMG/ffpiJPEcpW/kzOoWf3ExrVBA6rigHgGO1r1F7yZtMoGSR3gIhXAC7jvAxJp865MCd8I0dPqrmeoNP0IvqdzcgJqL8V5QpyvS/7wwszFdWivk/7y77QKVn/Kwa/wWyq3a8/gPgwvh1O5vk/4OsX0DS3tyVtgAkTzBAj4cyM4A4/g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(6506007)(478600001)(4744005)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ShiIRz5YqDpGLi27D67Lw7dWT661?= =?utf-8?q?RJvk3tqYzYXY++Xu/4XsEPy3ABteDWfBSaG/kWV2Y1Rx9/kqVBONjXSnuspKDU9E7?= =?utf-8?q?/REJnQzsQV/w9xlS5lUIc8j91ndSo0NKG+GJ45tY5U/N402Gxfl1y0hnTtmLdrikz?= =?utf-8?q?IQmgOyBkoF2EjV5sHMeccZc8WZGRTi3SzIQdUdxF7LT2cpk5WTrqH7y2gmcvSSv3J?= =?utf-8?q?3KTtB2IL2d748fYgrpzXEVDne+gdCIxy1pU79IfIEBZ3ssIrfwqfZfaWECV2ATiby?= =?utf-8?q?SaUMtTDIUWsvO2JI7wmJpH42NP2+Yo07NBlGNOEI2wCKH+898aCB3aZipmgvsUeOh?= =?utf-8?q?eLly+TOSFDrI49oxseybfadrcPuTAnYFWQFdYIJru9wrMW978w5rhkOCvlqmyxG6y?= =?utf-8?q?JVXCgX4AhL8qEtifF2Kzrt5a686zJvMQ8ff4vKJe6dmqnDtNMjD/Gfpwxu/6ocymd?= =?utf-8?q?/47Gu9sj/UDv7ZXhtT7aoJMkVvAbPI9RnnQAQMsHdzlT79eXvjNSx6hXkM9gvIh1I?= =?utf-8?q?wLy8nydcmCrypya0YC4Y/E4U9heioU5WJKUd/3jAuoLTx6XLF0QVgKACR1St4AZWT?= =?utf-8?q?5wl7S+JfVeP8txf3t/DUI+Tfda5H+pTgmIs3hWeYY5QHC1PSFKVxEEYXeS1vfvBmZ?= =?utf-8?q?fzpwkA80CWoEUkil/orkFakFxLYWy5wHY1++nvrfMnA92mlylrbIQJ0jBO6Nne5vh?= =?utf-8?q?iOTsdxqkyDMIZGxJbdO4PmhOvk6tDqyJL4TmDhXqKZacCe+mkWKxGa9Nn6QvosOVE?= =?utf-8?q?3Y2aasZ/WeTQoM9uFI+MpqLkIzL6QueO+N/SSNYCk3NT9GeLENt+96TzID3K6E/s9?= =?utf-8?q?efjp6l1gTZb/KApxQ4kUte2bDJ25dyjKV4j5xy1EfyGEjARxdYcJE5S6UXELOnUHT?= =?utf-8?q?xzYHu7Dad6c4wtfkyfc10l4FOKMNJKKYqZ75hr6B05rtgBtzidirAC3EQSCTAOIbX?= =?utf-8?q?GqDuhNJHF9lZhZkxMsO0FSGqL+Bf/FFOHIkfQeX7DYhhm5AYrQSoVbhow2Fu7fh4J?= =?utf-8?q?yvl16ujdwP7ZXnfj4bQfwkM2pICa6lK/aFGB6737IDbU9SoEiLB1b+iLu1EgmwL2b?= =?utf-8?q?YqPB397ULT7IZXIIDyLr+BiYZ0P1GLLd7kcMptZm1IeYI6LORJ5RsGtypZhxwT+4e?= =?utf-8?q?/UXaW1THhZQ8QVlk9o+qCMv+zCoLTjeCnw+wBhDqH/sKVS3jGo1OgwG1p44PfkLkC?= =?utf-8?q?7zvbksGHcnLhrZrzbcP7tDwUWuVJ2Fgk6y5dOsZfrld9+eIYc38b5alo8atv1SaJM?= =?utf-8?q?q9x8/yusD2F3zivddOJlzNqFaVchA3nB9piZfehQfxAW71leHATx+4isMmGAyecTN?= =?utf-8?q?WVl8n/ic9DiqzmnKy5TmC1Vg/1ECFvvMD159S4cW9/oAoOfzxvKxnpiovCigBOKHN?= =?utf-8?q?h5COF1Omv9L32EKuMyTd44y0TQgaBP+FSJI7k7GITCWzamnsgrPllc5ahX0ul3XId?= =?utf-8?q?NEWxA1zy8vnuZjb9ancbMqdafvn5l9YxPVjOD6sVDzc4Yuq4BbTQV7Ys/Vrq/vM1p?= =?utf-8?q?wLvMwrcrRwTwy9GiymbDHj0fAk2iJWOUjw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2250fb07-c905-44a3-fab6-08dab65ef9c3 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:26.3193 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ekVuuOo5yci1nrNt/tFSfgyShnVsemWsF11Vtg4oVH+TJwmD6OvwjX51Cqrv/v+NXaXJ7X+vJZhvSTjUCDAMGTIrVNKIZYp0fPukDsm4ZEE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the offload support of decap action for IPv6 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 46a047cd7b..ee9c2a36e0 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1464,6 +1464,8 @@ nfp_flow_merge_geneve(struct nfp_app_fw_flower *app_fw_flower, tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; tun6->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | (geneve->vni[1] << 8) | (geneve->vni[2])); + if (!is_mask) + ret = nfp_tun_add_ipv6_off(app_fw_flower, tun6->ipv6.ipv6_dst); } else { tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | From patchwork Tue Oct 25 07:59:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119073 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 E8D96A0543; Tue, 25 Oct 2022 10:02:38 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B443C42C39; Tue, 25 Oct 2022 10:00:40 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2105.outbound.protection.outlook.com [40.107.223.105]) by mails.dpdk.org (Postfix) with ESMTP id AAA4B42C1A for ; Tue, 25 Oct 2022 10:00:29 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CLarJTG849p/chQU5noTUjsgCruOoT1T+xsHOtEXStZgDVMNwJUrDnvWK3SmW+SvTFNBM2I9sNo3ILDbz5z9LS5iAFzSS58XyrvWHG4nS3mSCN4J+IQRKhRYarWrH8aI3F6wIGJ6ZzkdAi5NcM1LRN8/IYwbUAlTENWETYMQgdT6s2o30t/zkEzS7qYjTai53tSEVgQEo9sktsWD0QrkM+PSiswxkOaSTET1kK8d+GMvLl23V1XR3ack3MPFazhOKPqmfbNpkhKHXxnvmiAOiUGiZO6uXD97KCVoWA5P8yd9s288F6Cqzf8Te/Z8wpgWt5zql9LNFIoltmxyyNaQ6w== 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=y/RxdqwhS+Sm6720XaunjWC6mXg8PHzA4nYJCgTFlII=; b=NjVJ2Uu7Zn26djmDAi7YO6yRy1ZTroiaOYArvhZOt4PaxirSZecxR39g2SNWa7I6V6nqK4n/b0e5/nG7Udvt2LH4LPo5bNeS7cUT+NNZqvq0u9iNsX5nlDwXB5c4QbLG6yrb2G5iOlUGTAex97/SCBez/xajYR3bQyQ3ehDemYpnUzTiSbKhjRWEybgKu6M2qAFqV1wvQerngdzH06PibYJ2CWRHrS8dH8+sw8rAQ/Q0+QvbZMxCWFc2J7Ma+7eQK5wbrNv3fbhL9Gf71kCoYwV51Qye1tkKlcxJG2oDlA3IMmtuFCJI2RKYS0V5gr3Q5FW+MefbyWrcTb7Th4TUvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=y/RxdqwhS+Sm6720XaunjWC6mXg8PHzA4nYJCgTFlII=; b=NZ6PHUwGpGOB/fjPcaGzi05tGWWnrWQl75zuOeyk+Vo3AtpY3oA2Jg9xDfY/kePdf4mwkoO3azHwAh5L4TSk27z0Dfo4+UVTcPBIZ1uX8TaW0sraKSbY8L74AsXcrRGnAx4x2AYetTKLAc25q0biVi5ytqI5LYlxUvtVMTkjXes= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 08:00:28 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:28 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 18/26] net/nfp: support IPv4 NVGRE encap flow action Date: Tue, 25 Oct 2022 15:59:10 +0800 Message-Id: <20221025075918.7778-19-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: c0fafe9e-204a-46ee-dd20-08dab65efb0a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: V+XL4z2v5qEAjYSMOI/5DiBbd57oxbkn9yA9fnZBY5EVJQj+/kk0r7W3YOcUy60YhanZ57GkC/GvsNER+PMa/0bdlGfK1VjU9a5VPJAIAMqVfGjOPByJ27NI1AK0BdUoVa8OnxMdeIQ1+26n4oc0a8AgXxg11gr7teENnISbTUxxKdfzuAj+0McOxzNB7g3z2wI7AfKMQ8NeiShnKcWi9yn10qOrr10F74C+M2hKaAme1TijkPPKxIj9PfDlxZ0l/pyWXs9zxou47gjXuNrfgHHqCVmuFZYCTonk0o6Qtl/d7UdbBhCLANleJXMSH2pe3XVX9jkbFCxRDYWu76CgIt956OZm1KfhlNeydoaVOFtZaHPZ5VP7gYFs+Msf0rx9O6UYbm9IM7myNSie/FhnXaf2OsAvL0OjL6T8sMtN/EbYuMCtfAE2O/AfgHWIGCPq9bNruPOZ8R50cPMp9KIfCzXRHe25qLP71An1kS2A+OJOWy7xYPYvKZ40xxXtxtmNfKznUkoXN2iy1lI9HADzmLe9JGbjNsc4WzseXlFRXWvuTrF3u9M07yyg+yabyff2zbstHo51vbPjQdW3Ef8fZRN49DwXHzjnKAbPsZZS9Tls0CEQDid4eFhL0QbeHiI1CkofcE/FV8JY69isjiWM+S6bL7qwtPDGoxEf7ctj0eTTXbdjUeHCXIFyBxMSJtjpi4OZ5jX7r/I91Nxi013f9bYSiDT+f6Agp37EQRQR33FE0TXbh/+mIxCV725HerRftOKcmvvsmJv2uoKZp+dcGg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?kuB2VhmyoOoebzyltJIYoLk5LngH?= =?utf-8?q?tbG6VD25YeGWa0TH5YPAueGmdD2JgztWNMTPGQOClpKGWG5HjJ+nSw0eq00RaVOFp?= =?utf-8?q?wyFd1RLa+hrME9azbaBapsdq5jylKpGNGrAKCVStzussCz0y5BNu0rys5ZwG4pIeU?= =?utf-8?q?ZsZaLcOK3MTpFr4IBoXJAkh1XrjamLogR5o858NTAa3UjHhVLGNMT+KSW/yONgmM1?= =?utf-8?q?kPectrejgx94GyntAEfG1Ul33Yc4b0TrdBJOKzi1+fORw8ENHQIMgwTN5ZkthHbuy?= =?utf-8?q?empW1k6tS31WeVFjKrRamfBKQ0xWVWr7NDtzZE0KnKcqOGj8JsupPsH19Whafi9Ca?= =?utf-8?q?ETM4R8t5UEbqW3YleC89xa8QUlWFj1Q5G50JDLspb1c4TfiTtzG3ACGXBblE4NsNI?= =?utf-8?q?ozjctfLmQX8JZjQKIrvK2gvjCooG1WUykUMA7i+DmYKtZXhrhO8Z7wBU0ALCPtPzl?= =?utf-8?q?ArDoFhVhQM6ExFAH/JIaF6/plAqiKOq8yE99zArLlR+ONbgql6wnixp780xLjgnNh?= =?utf-8?q?BUN2LjjvuclLWsV4+KN3ySwFu0WDNv4Q9IikUDMkuL29IfxvRuerbep7LVSVX+1ie?= =?utf-8?q?TBHFNfYDyUfcZRmLISH793fBK+YOOGpMdPPgWYHNNgT1IWq0wW1+rxMnqnMptzYUD?= =?utf-8?q?1vW/K+aWwCa0Q8drkdkhWaE9/jxqLio7xFOjQ8j9WqXaufdoPspoIVHKapFx350zz?= =?utf-8?q?GPgbZDnqk7SG/U8Sjb3dRS83AfbiIPI9uM54/O6IdRyAobD221y9jwjmeSMRh3RK8?= =?utf-8?q?5apamEXYseE3UHH0ZHwQ6/GrSqpyzBQOQFQdVo/HTr7zdvkr+A+I8tkV8YXYN3QNV?= =?utf-8?q?yXrNrOiLToYGyNA5eHpRMET/iwrnFaD+uqPrWWZfZps7zTUqfBkW5Dae3D662P6co?= =?utf-8?q?ga0iSOeauUD0viUyb83xJSu9ZZNZockDbuojwi+0RY7epQprCF/genC3DlORmgudZ?= =?utf-8?q?jBSvIlaeofWpGNauW5qxPJoG5rmJt8iWkqbwzV7fTFZDwMWuBzOWD+/MqGMEUpT4u?= =?utf-8?q?8sSWVUC09K3wDWapARP6xED/iRIIA4rEh9JnwsYuK92Mh3lEauCL0bfUejCLzoJfs?= =?utf-8?q?WF8ikE2oFdr5IZSQKIgBsMg76i12eN1ZBXrkLbSLokz/UFXw4w6nrMLGKZskkcKER?= =?utf-8?q?gf1mvMJVb1bquJxjUKL5nHFjsWge8cCf8n2QO/sUNCCPEjVrsDUJDlLyrSNhU2V0N?= =?utf-8?q?kpoewt9AjN9aC6jxV/tP+f+E6TGO7NXpFWGJ7E5k0V6rsOoRq4yfdS/e6zU0++gyP?= =?utf-8?q?9Wu5+wo6eYL7G1fPHIUnx2PJG8Zmh05/2Y/SHLyeaCQzL2pgN0oG9FYDXtMXJPcHb?= =?utf-8?q?bzqmtVcqxbmg0z91bBi6v4Gxjbp1IG7T3m57cPRQpJjYjOyQ41ZE36X4aQIST+8J/?= =?utf-8?q?7fkcxW8GwFMTWaJ7RFwIkLg/s26vfrl6LkehF+IsKJPUSNB/ipe6Ksd7ylTQovwQb?= =?utf-8?q?+c2PbrSE68jqZisuz/1V84taAlvjRoMtGYLptT+ObmdSDMXEs/mEECy7s1To5KNH5?= =?utf-8?q?E0hDWneHF6j5I0GN7F0h/YJMqL/P+ZmfzQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: c0fafe9e-204a-46ee-dd20-08dab65efb0a X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:28.3195 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rQQp5Dt1LL6t3SWnvpDoIz8OJpqHsu1YhxYee2RRe2mpS1shViiTiMoeK42Eph8aC2uZdcOQGMAuVBrVDukz7CRZlr9pUONdQiEamCS0sWg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the offload support of encap action of IPv4 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index ee9c2a36e0..cc09ba45e2 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -47,6 +47,10 @@ struct vxlan_data { sizeof(struct rte_ipv6_hdr) + \ sizeof(struct rte_udp_hdr) + \ sizeof(struct rte_flow_item_geneve)) +#define NVGRE_V4_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv4_hdr) + \ + sizeof(struct rte_flow_item_gre) + \ + sizeof(rte_be32_t)) /* gre key */ /* Process structure associated with a flow item */ struct nfp_flow_item_proc { @@ -2827,6 +2831,41 @@ nfp_flow_action_geneve_encap_v6(struct nfp_app_fw_flower *app_fw_flower, tun, eth, ipv6); } +static int +nfp_flow_action_nvgre_encap_v4(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + const struct rte_ether_hdr *eth; + const struct rte_flow_item_ipv4 *ipv4; + const struct rte_flow_item_gre *gre; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv4 = (const struct rte_flow_item_ipv4 *)(eth + 1); + gre = (const struct rte_flow_item_gre *)(ipv4 + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v4_process(pre_tun, ipv4->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GRE, 0, + ipv4->hdr.time_to_live, ipv4->hdr.type_of_service); + set_tun->tun_proto = gre->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v4_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv4); +} + static int nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, @@ -2865,6 +2904,10 @@ nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, ret = nfp_flow_action_geneve_encap_v6(app_fw_flower, act_data, actions, raw_encap, nfp_flow_meta, tun); break; + case NVGRE_V4_LEN: + ret = nfp_flow_action_nvgre_encap_v4(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; default: PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); ret = -EINVAL; From patchwork Tue Oct 25 07:59:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119074 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 A0A80A0543; Tue, 25 Oct 2022 10:02:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6FAEC42C3E; Tue, 25 Oct 2022 10:00:41 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2107.outbound.protection.outlook.com [40.107.212.107]) by mails.dpdk.org (Postfix) with ESMTP id B31E842C09 for ; Tue, 25 Oct 2022 10:00:31 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QAJE05OwTHJlqa4pvoYetKDl4aMVR9jro8QHfD65OOWqJLAWrAhVuwSND52MRJ1tgovD5pvWxyaP5UxZIX+uYQyePthkreuVgpcPiDnzWa0i1Z7YNebrvmPc9Lu/PR1+LLPOwOw73jK8WkvmRp8ME5Jf84vKYbXEcYqI7KJnv6d0gwF6UIGGOdiHygFAShzs5LTxkPeap8OZ2OAdmz7zuiT6I1JKk2cD9LjJqQC7gggWmLNVb6A2YuzHSWLvvfcPfMAOQ6Rn71/hbTH0KoOjy8cVvTdT4SqrErLCxvAW/e+udCos4rYa5zqFEy0nnWlZRczVIC9uUbIh9msl/wsZpg== 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=0okx0KG8y96ZIasOQgOQzGnTwXMSBiVNmrNXwX1FK4E=; b=iR8o3boeSDOn2GoQsXtsDf8IKmLG3d9i50WYpFelBH9RrPLOKjnS7tJWioF9vm4Z9h390KUZeUIArgQWaHxOIoKKqoemi6KWdkSnNZj3BgvsrgMM+jCX1IKb7Qa+w+b3jPgWZn5o2wcJqUv5CzLGoJ1aLN3mjNkjpLvpUiVkujOP/XNUUJTkOPGj8HdwZ4I6cD32xldHPZL3nqD79SdeiJ0R5fASKRQRlyNt8gyWj23QiqflL+0zAc3koxg46vExSiJPhHTGbmdWLjYAxGWxhX32kKi4fZgk1CGEpxT9T9uakdt2uCnSNLhs08TIfTTDDBqeoh938o8VeiLi9mCBLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0okx0KG8y96ZIasOQgOQzGnTwXMSBiVNmrNXwX1FK4E=; b=sDrIKVVa1DvvNE1Q99BsxspoCEyMbdSEOz7LWOP3pbL6fulgQXjTkQAFMf5/pYYDp8TtA+VskhYknbE2HTnJt9jwSJUFRn2+PLr5aqOyrERYNqqXyaeDVvLSSA1jQthZzIzVfnkjWt6rXXnAcg5tZQYkx3KaodReufhjaXVQK9I= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by DM6PR13MB3924.namprd13.prod.outlook.com (2603:10b6:5:28f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 08:00:30 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:30 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 19/26] net/nfp: support IPv6 NVGRE encap flow action Date: Tue, 25 Oct 2022 15:59:11 +0800 Message-Id: <20221025075918.7778-20-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3924:EE_ X-MS-Office365-Filtering-Correlation-Id: da6d7652-02c0-4ff2-d52c-08dab65efc51 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vlmHwnbd94IpIz5X7nmUce8BCdRy98B/a/N+zYt1dY50wwj4pi/26e5yGhc0fGfBDMC+2jSZ8TZhfKEt6LFyOSL6mdAF/lRCQUstsb/iYUBzaG75b7MfvtS3jLgOCccoNA0TTURkvKVP9y/+4617aCUzHWO7suZob7//BV+CbJ2PgSDP9mLc1FkokSHr5klma1oiwVFMj39I+C5JxNlNQXK4Qjh167B8KTuJ8a2gURcB+EIgVie2glzVNR/bk2JHOqTAvviAw670/c3ti3UdUSF5Z+v35dGWWUbe1uPJHreXuF5d/slqXvgou/fXTwwDBK/zPsMksVMyHjptVbR0DyLmdqWoqyCJ7+mCmEfI9TjaVnkEULGIH4JPW312m5mkpIRi4U6eX4smfYJRmgPoZHdOGRbKrzmmpenG93ymlbAKklnFzvlnz2HdUIv0N+f3NaIreSZKvBGS9hIZECMONfhox0j1KxbCPMFWamDKECRN0foyFj8XvjsfXycV95JUXPqrds/5yH95BIJ24iw6UW/eml9scktz3C/+eS9/XnFC3OU2mxNlZy01nX8Cufgyf8FQCE98q+rq1J6v7n6/xRxgSzG1WhkD9hXcMdHOb7BHR3pCobTjou4cWN+XsTfNN5PP4hKlhtxUOO/1LGEAKEFQiEYb5zrpZg4TNHn/EXfdhB9m509obaZxIaY2b/Cjg440cltDW5GdMgcwhKDMia+g1KA/k4aU25hJzJZTgaIDmK2MSXY+gcGz3hY6nRSjFqFBTTXuS94i+Ki4WS7Alg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(136003)(346002)(39850400004)(396003)(451199015)(86362001)(2906002)(6666004)(186003)(1076003)(107886003)(83380400001)(38100700002)(41300700001)(2616005)(8936002)(6512007)(36756003)(5660300002)(66476007)(66556008)(4326008)(8676002)(52116002)(66946007)(26005)(44832011)(6506007)(478600001)(6486002)(6916009)(38350700002)(316002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?wCa220cWVNHmur2535tUMS2QV47m?= =?utf-8?q?STuK+rguLKDx8B4ITKHIDmA90XXkwYyM3041UtDgHvadSr43fu1FfBaxghTMJ609a?= =?utf-8?q?Pxt6/FyTVjOQCbH8QZ4G2PzXRolfhnAswRyC8JWmK/1RKHGPj8pZXWJMQBTp6zjHR?= =?utf-8?q?O6Q/If5QiuPRPzmqd8rOmTqpA06Uolr4pW9vUpopvYwm4mgL7EhSqQcrNqaem+0ZX?= =?utf-8?q?4IjAWPdlHNcrTnLzqVEP0GT4JXJ86KKGsfi6YyKNn8PWEtfzp+0R6qJqL3lN+CIev?= =?utf-8?q?xVK5vSF/FGJ2JLvnOALt+/uPrRRwQzHvVTIosf/9invdpYkB7L6ESnPUxZ52i9UkU?= =?utf-8?q?gCsmr7HSSKg3EAZyk0LA0j3nm0e+d7U3M3K1cm0bTjvV+Sz654KxRDTDYyA+aZmF7?= =?utf-8?q?9Kr80RnaxWi+6cr+qN2rsJuT3YzpEaTwA6uC/+q+RT5+y9FPHEL4BZf3plwiSKLGu?= =?utf-8?q?03vIe/XNszVk8MG2UJ4PExpfx+b/+RcBh0TvgBb/xGkiHpZB1OY9qUTG7yDn+Ch+O?= =?utf-8?q?R1V4SjRJplWD+NxQkLDENq7Z9V6lLrbMDaurJF+iGy39oaQRrAxd94mH5W0R7+9L/?= =?utf-8?q?iYMckpdVkyBq+d/IekPPGOMWARTE7rs51N7L40QAIV+EV9wZxs4FNgmdP+fdT/ssQ?= =?utf-8?q?yJMq5/MvHxwN7N9jQZeDpjUwfGBFkivoS74pRayqxaqMFVpZfHTrXHJYHLNxrvr8I?= =?utf-8?q?OZbTttpn/04km2G2yA1f2I3yI+6E42nybwXqzKykMrn+5ECw/jd9wPLCIy7isoVZo?= =?utf-8?q?JBSG1jnKCLgfiEsvf7o4+S6ZoXKMXo9O700hpaO/173lCbNKqwstKWyf+zVWP85ge?= =?utf-8?q?MSrYn5NoExR4ss0ciVRR8ZJsRoBgKul/dWVKPpxfSQqAzcHxGrbpJo/RTZaiRnwYV?= =?utf-8?q?UgKbXEv+YnExLljhXOanPer+cpLdcV5l+eMYUzDWrcuiqKs9bQnd+3Tm0RG+drfkl?= =?utf-8?q?wKckfzABhiLfVzZNLySLOtISmsXwHE+7lpm0DERgkCuwKnXcEsdecUujdIDV0ukbW?= =?utf-8?q?NrRAOxH+2d+JSnLH1vf5TZteCVTzR3byoeK17uIo4I8WgTkSNRSMeCxYrObJtDEh/?= =?utf-8?q?EnyuxbFJfz7EA9d5JA/BUSYuRNI41UgnBjIkZS/VKPKr/DFFiWvmmu4wEa/jSvoS0?= =?utf-8?q?1rLy0hzQj1GwyBRS8cmujSaIK1fOvJ5gAj1ahCSGokLhWIMop/tUv6XxRezO5xJAD?= =?utf-8?q?m98dlh2aLcCBnKw8zLD0nKCn+DrgAXJzPMvGZ1MesRW5MOtaUulH9XzYPwCm9R24j?= =?utf-8?q?HPB5qgTVPbg1QgTEwF04DyAQymJwoJjjSFTEkDPPk1RuMUMIwC5YGmf6ckS36OcIv?= =?utf-8?q?nxGySqsKFj1pV3r6bvb+cpZYXAlREbsRKT86Uq/9osME2rdakJ0G4TEvQmXCvHlHH?= =?utf-8?q?WoKiknHKqm8kFqEz+5Pds0N3eRXZycZp/gJkjITNU21dmLvEsQQ0TMMAzHKAH1dux?= =?utf-8?q?5ezU/PElbFGI9QfMPajst0t6cXQ23C5YOUwkb1t6lqmKuwQ7v4Rxybnlwwj7varRr?= =?utf-8?q?00xDrOYOEYDjZg5Kq+d2CsrZrnkaWud3xQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: da6d7652-02c0-4ff2-d52c-08dab65efc51 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:30.4623 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YfT4XwojYOp+G+m6pZrGqUD7++1se+fobhh2AKO7R9ppQ+aO+n0LjlPKW97HlJvw4vIOaktyBfNVd46T+oEhMPSIllhoOy/Fd/k6ZakrhrE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3924 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 the offload support of encap action of IPv6 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index cc09ba45e2..06115cc954 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -51,6 +51,10 @@ struct vxlan_data { sizeof(struct rte_ipv4_hdr) + \ sizeof(struct rte_flow_item_gre) + \ sizeof(rte_be32_t)) /* gre key */ +#define NVGRE_V6_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv6_hdr) + \ + sizeof(struct rte_flow_item_gre) + \ + sizeof(rte_be32_t)) /* gre key */ /* Process structure associated with a flow item */ struct nfp_flow_item_proc { @@ -2866,6 +2870,43 @@ nfp_flow_action_nvgre_encap_v4(struct nfp_app_fw_flower *app_fw_flower, tun, eth, ipv4); } +static int +nfp_flow_action_nvgre_encap_v6(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + uint8_t tos; + const struct rte_ether_hdr *eth; + const struct rte_flow_item_ipv6 *ipv6; + const struct rte_flow_item_gre *gre; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv6 = (const struct rte_flow_item_ipv6 *)(eth + 1); + gre = (const struct rte_flow_item_gre *)(ipv6 + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v6_process(pre_tun, ipv6->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + tos = (ipv6->hdr.vtc_flow >> RTE_IPV6_HDR_TC_SHIFT) & 0xff; + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GRE, 0, + ipv6->hdr.hop_limits, tos); + set_tun->tun_proto = gre->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v6_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv6); +} + static int nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, @@ -2908,6 +2949,10 @@ nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, ret = nfp_flow_action_nvgre_encap_v4(app_fw_flower, act_data, actions, raw_encap, nfp_flow_meta, tun); break; + case NVGRE_V6_LEN: + ret = nfp_flow_action_nvgre_encap_v6(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; default: PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); ret = -EINVAL; From patchwork Tue Oct 25 07:59:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119075 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 DC704A0543; Tue, 25 Oct 2022 10:02:54 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3323D42C43; Tue, 25 Oct 2022 10:00:42 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2133.outbound.protection.outlook.com [40.107.223.133]) by mails.dpdk.org (Postfix) with ESMTP id F24DA40A89 for ; Tue, 25 Oct 2022 10:00:33 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LwWqE1Z5hbvxaHzCHzTZe2LACY6To5btsFmGYzWTWfjEaJ+w9NqiLC7ukPwaYt7nEuibC97chDx4pcpXyISHQQW3UIL5CCbknpeugbukfVqSIhCZRo/x2xThCN4H5Twqg1rMZrrZhhR8CCP2jDYnsxg4nM73cKvNSBt/kTZcYOG5B5zbss63YJ4HDGxiONN+zZ13e4WMvbLDDuP5PWTT3pkmjdHl9opBGlFx3Tf1ApwqJxdOnHfxtys09BRazYZvLZq2hRGbKCBLcZjlInYYBRVovs+lutrYimOXtk30SIxJ1gne+siQ1YtEwxsUJeSu/K/Uh3Smqy55LpooAHHsOA== 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=Dx7+HcsXXBLE6HQIGDk1oqX+M2W9ZOyGUcx9sBcULdQ=; b=MBr7AKUy4HvQdRe4CdS+xiGs0r2X1YyUKBUI+yrCnZXm46xON9ld4Fc9i+r+MLtpQCks+Io0OG05UyalYErljane9rC5dMMVhVhxaXYnxEQ34G5o9QYlGHYSnzDvBq4fo9UJPtjLslgYKlwc7cO5YLV2WyBgT4VxpZvy93eeo4WCAztxVN85WOMlT5DTCwTYqL8pLhN9LnXRFqjc7KclGc5dysz2CjeqgXqrR5ab/yb25wLhWNKiPhblsTNEQlwbXtIpFfXXTIvMQwUyYDuoFI63a3EzibrH5o5Z37t/dzfHoCImxOm2CamqYgF18C0GzVv0X2nzxsHKvt3ds5hd9w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Dx7+HcsXXBLE6HQIGDk1oqX+M2W9ZOyGUcx9sBcULdQ=; b=vM1DmFjjrRkpuehZnsk107karzCpq4ZtuB0xHFo9lstgelfDDOUQ7MPgBzn039IH4aJAMi2QTH5aYNwj/fo27NHp7iII/DKE8t//3CQI7J3o+uLjFoLleny6rn88zOOwbVx9KMeSxLozDD3HgC88/3OuC4bf7ZXBcsUHG/meoLs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW5PR13MB5439.namprd13.prod.outlook.com (2603:10b6:303:196::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 25 Oct 2022 08:00:32 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:32 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 20/26] net/nfp: prepare for IPv4 GRE tunnel decap flow action Date: Tue, 25 Oct 2022 15:59:12 +0800 Message-Id: <20221025075918.7778-21-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5439:EE_ X-MS-Office365-Filtering-Correlation-Id: 598a07a2-c00e-442a-7844-08dab65efd85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lTipa/QuKN/+I60CeG9QMpxsMKRrnRo633sKHEPBTKHikMBBv0SYkI0E4wITPu8efit5tByBvEuCPKrSBAlaNCQY5eoWXyW45+AavCR6JZSejbEiIsb60B0ZeVq0q4e1s2EVGNqP3yLP2ZiYZd1ftZIariPO6uOe6u+2IeuMAotBSUMfk5Dglz+n4j2VGPbLuKfRVPyEYCoq97ilNfZm5//JGOSa103OM9bUjQBZ7vTjMzk8mYOzrawwgLuRMZkWSicJm396hELhDNdX33N+Zb8JqjNHb3Yu3s8JRZybn6c3B/zGB0azyCVztA0bi62Do7jTDF4O1pI7AlcuRKLczihaaVFmp/ll2mOkOEbSoatE+3W3MeaX2MwELBHRL/bt0tcbVaaaZLSNGFgBRxhIokfeTt+O2O/id1RJRWiNn3/fu1aehKqt2D+LBksVciQDzWV9Dfy2SXGF3j8LSskvX9BUjUim8vct6T0EFwmp7YgN/Qlcq089WGRiLMEP+mQO/A1l/Z3vSV+1cffI79ESMPvbxJmqIkY5X5tSTb43c1kV9rcmDYgBQNE+RiR9yfYjtBIkAnTfKigmDgTfxxG0GgahxMx4lYkPPundlloWcy2fnlK+UpUYD5yKAkNjE7aOyS+hKKQTGPOKbQbTIK49sCJRVZxtAerz45hCsOdLx2icTUPqDOmdHL+5RuB9aLjQ3SIBI6b16p8/sxSFajzD9zOl7BI4fvjThrDE8jPRNNu27DMcoxUB8oqFSqmz1B56POXpO/81fNLLXQWihSQ//w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39850400004)(366004)(396003)(346002)(376002)(136003)(451199015)(83380400001)(6506007)(478600001)(316002)(38100700002)(52116002)(38350700002)(2906002)(41300700001)(5660300002)(6486002)(44832011)(66946007)(66476007)(4326008)(66556008)(8676002)(6916009)(1076003)(8936002)(6512007)(86362001)(2616005)(26005)(107886003)(6666004)(36756003)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?vQ50oibZqkH46kcGPXUIXJ7kps4t?= =?utf-8?q?uaTS9pj5BPjDxeQ2uNmoVZfYJ0D8IiAhtFKEKaGJvmg1oM8/xOVC4jgoSQ5KM0D+l?= =?utf-8?q?0j36oW0sf73JRPxMQP6TU3Lv+u8PlC8/SNvvrKAzkB43edw6atKjYw5vT7osAw1Za?= =?utf-8?q?P9Irm4GW+g0kJ5p6NlHK34qMLmRMe6BW2nxOjarWThMGU8l5z4W6FzABPxu51569P?= =?utf-8?q?NU/cMzjhEe4jJaw+ZZIv1wSyPkV4KXluXoNUhCe4AtyXtYejPKApBcT2qH5tzmarH?= =?utf-8?q?2Fa6tYW29PsuPAIMQlDvmwCuvC5gudaxHZx50YPtr2YY10TxR274OY1dpYb8EdRKu?= =?utf-8?q?KWKnwYB2xnEPGCLx6xIQHDJg7sx0Gv+1LtmWKOlP/yBnXGRLuIfVrJWVG8UiuMz6d?= =?utf-8?q?dsup9C0e6OXe3oYGU2IDsemPaT7mphyEH1quBmdXNrG1ggtSOH1bx71oCuk6rbfpw?= =?utf-8?q?VZWJLAxigFU0LrfH9+rNjUzpuG6ytUIeEcMJxA8pusC12on5o1LCHozNI+56ZjgjL?= =?utf-8?q?QbVvjyp9W7ufeAaUy2CDaOBAhd2IwiB0XnEPL3EuUUqxQ/3rBgr5BQNsRK+DcpGcp?= =?utf-8?q?yzVZYn07RSPMyTlmStdfyKKXdgQ+lsRD9lJWhnfYU8TPnVKjRs8XNO7XipVlKckEa?= =?utf-8?q?MxATDJbXR8+FogfOeG7hx86I9p4d2S/PNsm+BHigokIwIEEFluz44jxyXWgm/1BYm?= =?utf-8?q?LQcSYp7qEVTHDzRR/+ZnBc7EYTRqdJNK139NcXptbLpiEkclioXS+gj3oqp7r4lMs?= =?utf-8?q?V3cwiw3c1dPXgdVAYAe6MVQBQaad0GYnxl7VWUXzxTopZ6F8Dn8h0ptS2rM3aMCBK?= =?utf-8?q?9f9tmjeFFBOCr984SAUjCo3UnblszFw92yp2jETmpYMjl/iXBJp4qPmC5RmCxvH7A?= =?utf-8?q?KDLzFaZIb75bIPMlwXotjlZ8dvh90avZuRxIdeYUuIRtCymBQpsH8wRmqmnYT+F7a?= =?utf-8?q?JhnY5uwnpqi82HNSzdxlKGCsjVXTVZfj5IBqgEguT/V/+H423KePCPL2TXADi+Fxt?= =?utf-8?q?27hyIz8fyps8rSFJoPwTxCd+drNG1c3E7R/O5RT9q61L08ObUNKYVKM3HcxRtYWE/?= =?utf-8?q?iyJotyDQdKZqlOht7APJT2KgC/V6DzDx/xHecQ9zbjTyrkmhsskAXEo+O+owjya5y?= =?utf-8?q?oA1GMUXjNdZsClJ9KFtW9Voma3gZvyzOwxdc6piMO0vNjRPoivg9B6zG8YHue2UxW?= =?utf-8?q?KakZdWODUAl+mzn1UVIDGK/3n2YZNp3QHDy4qW17pGI+9kKTcbG/H9dNL92XOGQ/b?= =?utf-8?q?RxQgjjAm1IahDW2njo6Y4+jBAw3LeuCuAiJ86XWELDyLSSgHlM8dtZEFWo6JjBV2H?= =?utf-8?q?ticrGyc/5dzYZHB3ZP6RltjURYxemONeHmWUDqCJWlNmWYPYj8lHLgGjMoju5T/HF?= =?utf-8?q?BvQd2WZrOD8j+79bLh3ltkaBgiFB0QpYnh07rzpaNvfM6W+N+LoOWr24fK594c0Wx?= =?utf-8?q?ZdNNvQjfxFeDXRXfiqzquCQ4GZ0VY7ViiZVeeUVH7PCXJHCTvZgUhgzHyudQZxzhi?= =?utf-8?q?TnujpafxiNgalKwKDjCIsZQvm6wMJQGZuQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 598a07a2-c00e-442a-7844-08dab65efd85 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:32.4784 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Yx7f/GLkx9LpehtUeHInvPxzh3gYvRQLk3OQ+A5h6AwgYxxmRH9DyNP9lK/OMXktHydsyYaOylCGgdSUGgHOU0fTGSmK1AQREbf/KpawM/U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5439 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 the related data structure and logics, prepare for the decap action of IPv4 GRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.h | 29 +++++++++++++++++ drivers/net/nfp/nfp_flow.c | 40 ++++++++++++++++++------ drivers/net/nfp/nfp_flow.h | 3 ++ 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 61f2f83fc9..8bca7c2fa2 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -575,6 +575,35 @@ struct nfp_flower_ipv6_udp_tun { rte_be32_t tun_id; }; +/* + * Flow Frame GRE TUNNEL --> Tunnel details (6W/24B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_src | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_dst | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_flags | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | Ethertype | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Key | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv4_gre_tun { + struct nfp_flower_tun_ipv4 ipv4; + rte_be16_t tun_flags; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be16_t reserved1; + rte_be16_t ethertype; + rte_be32_t tun_key; + rte_be32_t reserved2; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 06115cc954..115b9cbb92 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -564,6 +564,7 @@ nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, uint32_t key_layer2 = 0; struct nfp_flower_ipv4_udp_tun *udp4; struct nfp_flower_ipv6_udp_tun *udp6; + struct nfp_flower_ipv4_gre_tun *gre4; struct nfp_flower_meta_tci *meta_tci; struct nfp_flower_ext_meta *ext_meta = NULL; @@ -579,9 +580,15 @@ nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, sizeof(struct nfp_flower_ipv6_udp_tun)); ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); } else { - udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - - sizeof(struct nfp_flower_ipv4_udp_tun)); - ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + if (key_layer2 & NFP_FLOWER_LAYER2_GRE) { + gre4 = (struct nfp_flower_ipv4_gre_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_gre_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, gre4->ipv4.dst); + } else { + udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_udp_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + } } return ret; @@ -1013,7 +1020,7 @@ nfp_flow_is_tunnel(struct rte_flow *nfp_flow) ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); - if (key_layer2 & NFP_FLOWER_LAYER2_GENEVE) + if (key_layer2 & (NFP_FLOWER_LAYER2_GENEVE | NFP_FLOWER_LAYER2_GRE)) return true; return false; @@ -1102,11 +1109,15 @@ nfp_flow_merge_ipv4(__rte_unused struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv4 *spec; const struct rte_flow_item_ipv4 *mask; + struct nfp_flower_ext_meta *ext_meta = NULL; struct nfp_flower_ipv4_udp_tun *ipv4_udp_tun; + struct nfp_flower_ipv4_gre_tun *ipv4_gre_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { if (spec == NULL) { @@ -1115,12 +1126,23 @@ nfp_flow_merge_ipv4(__rte_unused struct nfp_app_fw_flower *app_fw_flower, } hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv4_udp_tun = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - ipv4_udp_tun->ip_ext.tos = hdr->type_of_service; - ipv4_udp_tun->ip_ext.ttl = hdr->time_to_live; - ipv4_udp_tun->ipv4.src = hdr->src_addr; - ipv4_udp_tun->ipv4.dst = hdr->dst_addr; + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_GRE)) { + ipv4_gre_tun = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + + ipv4_gre_tun->ip_ext.tos = hdr->type_of_service; + ipv4_gre_tun->ip_ext.ttl = hdr->time_to_live; + ipv4_gre_tun->ipv4.src = hdr->src_addr; + ipv4_gre_tun->ipv4.dst = hdr->dst_addr; + } else { + ipv4_udp_tun = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + + ipv4_udp_tun->ip_ext.tos = hdr->type_of_service; + ipv4_udp_tun->ip_ext.ttl = hdr->time_to_live; + ipv4_udp_tun->ipv4.src = hdr->src_addr; + ipv4_udp_tun->ipv4.dst = hdr->dst_addr; + } } else { if (spec == NULL) { PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index a6994e08ee..b0c2aaf6d8 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -49,6 +49,9 @@ #define NFP_FL_SC_ACT_POPV 0x6A000000 #define NFP_FL_SC_ACT_NULL 0x00000000 +/* GRE Tunnel flags */ +#define NFP_FL_GRE_FLAG_KEY (1 << 2) + /* Action opcodes */ #define NFP_FL_ACTION_OPCODE_OUTPUT 0 #define NFP_FL_ACTION_OPCODE_PUSH_VLAN 1 From patchwork Tue Oct 25 07:59:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119076 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 BF0A2A0543; Tue, 25 Oct 2022 10:03:05 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 28E6942C4E; Tue, 25 Oct 2022 10:00:43 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2101.outbound.protection.outlook.com [40.107.237.101]) by mails.dpdk.org (Postfix) with ESMTP id 42A4740A89 for ; Tue, 25 Oct 2022 10:00:37 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iTY3aDA1KbAiH3ZhPzpm7Lm0/u3yCguTP3jeSLSCMiOxHO+T/iZMdCRrhKmrL6bdeIcs5qck31mX+SkfaDG1WGkToBrJ+jeLs3+nPQFI97bbYfNdHMSByXtKEQNF5qsv7w9/v3V5MkHJ3jKSMnSBbAVAV4DyZ8mB70sAqpcvLemFsQNdAMeH8owHOEuFNt1KNcT1Diown5pCn5xSTikd6EFBJoiz9qYbzx3U/7qSZb6xyUcOnJNVO0ym9Rfp9UcoaP962l79QpoFe4hGCvnUHB3WWIVLicFGhoSYiRG+d4S9mFRZctWUCyyHWnzqufSsTZR1p6l1EIlF3VGokeKXLg== 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=txU6/h6aGkaChtTUJRmrQfuCJhPP4ghJeEcPMFhMvhU=; b=U+Ec6gbkfgPu3Ss5N224dDmwtdlugYoEV0Se091o4BRGN+BjVsTQC5EZ+LiNUPOUG+wvCPUvXcVYK0JwlRMeWigacmyMn4dk4Sb0YjL8LpIcipjijNznVgKdF1hn2S0gW/8Js5rRdHQUVC2ONHybVpzoAgWoImrpO+94kdiBNReRmOOjZsGlO+QLPfq2jltEhHCKQFfUAPlUJC4CfxE5WWgrfy3fBRGYf5v5VCQaek6fgUKrpx+JzMcwFfKEJ68d/INZuDH1aFMlLhn2fi+nRqP3ALr2JMKnAvigXQcvwrbObsvrA9Sk1p2dUzbUkZaatnjyU/GZHBmSPIyaACmHnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=txU6/h6aGkaChtTUJRmrQfuCJhPP4ghJeEcPMFhMvhU=; b=Wm3JcT/g2mHG+dTiYubp6DlUEMpeBMdlJOuydVsh9AY5WzL8TR+3Pjx4yDf2PNgw7ckvVlJRfFt8Ot33uIIQsmMZQ5rQSIRLJc08xebqsvCxIAAmFyCTnpeuZLBzPUJ5gTCVW0MZpdPDrN1aHsFZBryPdSRYNFX4r/rbBG9fYqg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BLAPR13MB4739.namprd13.prod.outlook.com (2603:10b6:208:306::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.25; Tue, 25 Oct 2022 08:00:35 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:34 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 21/26] net/nfp: prepare for IPv6 GRE tunnel decap flow action Date: Tue, 25 Oct 2022 15:59:13 +0800 Message-Id: <20221025075918.7778-22-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BLAPR13MB4739:EE_ X-MS-Office365-Filtering-Correlation-Id: f5d8c4c9-bb81-4926-fc01-08dab65efeb6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wf4dtbMD1BG3SrU2Rj07j5zKpebv+L011hVYyQtWtYdUO/VoHBcH66K/bfLGJNgaXRmzoEJ09/H/bpUa4dvekipWthNPLiv1rMBjwpUCZzMZLwBYQ8PHXkdqmr0ZYW4hXH+p3vLQGpTKUJ3ywxawdixUKgHpx2et8JLFBvMJo4jZLAUk9HzVAiS0RLmw1M6tlnyqWMS926WVLIDSFS0xPJT21BZjs4v0EJDOxyGf1PeM/mj8Dfa8bSz/WfAgfVlaWERv2L6B5JS7WaEKm5qj8On1IG/lk4RTSkwVgn169FyU0LVXotfw9vZpPtJRCycVe61E8Sv/n+cvwlihpg9OVxxMZTFx4a+xLz8dt1elccovPTlAqUfRWGxrOx/z2n1VKrAlwVi98LARAVILULO7CbJ2Va0fhnoTmWoz94NQcB5aGovFUcrdDjmgA6rWSsWUd5jjhioGT3EcNNKdNThz78Sz61gvSM88aWKOXKP0mJ1YfgWKmQjGUCLbQp5JPeXrLeQaVH41lbu1VU9dSXeWhaoXw05uhODz248drITYWCr/uX2W8HYtJE7bxBf+TCy4NeN1bdxyLBjR4MftCJzSm1wT9jY27XTpGsJDWF+sSxQqqZvgNRhlrHu4uHBjK9IYbVCV/KFobEWsf8nedkEA1ciIbd3MDBAfkE9HpxNpc7CdYbruWGccmTj5zGvPCgE5T/o6UB41x3nMC7LOdtXFhIlfey0BpwCOEBckS07/vPAQ1+KvdnXakMleesod2gD3dC6s3stK4jEugLhlZdSCdg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(396003)(136003)(39850400004)(346002)(451199015)(36756003)(38350700002)(86362001)(38100700002)(41300700001)(83380400001)(66946007)(1076003)(2906002)(6512007)(6666004)(26005)(186003)(6916009)(6506007)(52116002)(107886003)(478600001)(44832011)(66556008)(5660300002)(8936002)(2616005)(6486002)(8676002)(316002)(66476007)(4326008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?mKQ7hH/pVVzRRUjgpEOcUU3gBMsB?= =?utf-8?q?NWSY7An/0++oCgV4N+39qedmDSS8PKwIrwP2jeOZr/TbwjFREMdGAAIWFUBSdrB3G?= =?utf-8?q?vkq28gmZpn53Gb+8YgS4r+xCptidJgDTx6Z8+sgFBeDoIevd3vjcjS86L7I9wzNvT?= =?utf-8?q?FUZzwBgYqoLn7PW4ZdBzAO+dkjY96HRa1St5jwLsqbhl/pBLG1DR8Kihou/K6CHbT?= =?utf-8?q?+dLkYVGyfG6gt/Bg1AFM9wrttY3Kly5hz3w69DYPWMgbWA6iVgGqAVOkfsXK/CeU4?= =?utf-8?q?LT1BniiToYkP3hNPZKpNEaPQgHb9wX1zKI8UVVzvPYpjepPuUISJKjBkZJwZbiSmr?= =?utf-8?q?daXG9VzAkrPSJfglfihdIKS4x74xLuGkXq4ltWNM9//135S4E3AHSJrBwBXMW0cvS?= =?utf-8?q?6BI5u/VDjfBOXWVV6W2ncJHBNIU00m3JTA7dTE6jfhH3k2je/N6E3uSDmuXvy3heR?= =?utf-8?q?l0+eY1InGQp0CmaklqvLYtCb5ZYXgcsMeVaOS9qSlpa2hNVTPrp+CDfkEphVsZ27Q?= =?utf-8?q?HDMVZQ9nKs5q7Rc9l67vM4K/PD+xnCDLTwai7XBU4PoOT8wr2kGk4OrKs/bHUZ9rV?= =?utf-8?q?UfdYoYF4oSKpwsUjtWw/C2baYAvsfvt8lhAGwYMaGeFekTtlc0ljj4e3UCCXl5HyZ?= =?utf-8?q?2CkE+FIBiZn+LlQrbrRj49bq1TaBtGeORdtENO1PLb+fmDROMb3SkWyTvWue3hvSQ?= =?utf-8?q?/AlNFwHVGYLmYM/BWGrDrbk+l+28toHLYpMBO0y15v639vOYKotGk7JNhY1689X2s?= =?utf-8?q?IglrKe2VCIErzCpR6XyG4ivwDh3IbBNWfeHqf4ViQSCFanmo12BGgYb27aelrBp4o?= =?utf-8?q?s6PD4kBD9Q5U/nz9JKQaK2qQJKk6iY+TZWkgmhvEriZgm8pUqvxeUweOWpHum9sKN?= =?utf-8?q?MzF6ghz1gxkuY3+Z9G0DjnoaIAqVYLXdSbQCIZEHM94k7lkM+ektInBsPQZkrvC/A?= =?utf-8?q?y53591o/m+CkXp70cwzEOP9KTn9gNA+pPjjdqtQGFcy1d/7CT99YBGwHDGwCpE6zX?= =?utf-8?q?51Gmi6Tg4YimtHT3NyIx8tl6vBKDbn44/n3Sjtvqq0FH2YUXicb7LCuqjEH5HTDyp?= =?utf-8?q?CIOkquSbNH2pAcv79tvpNlcnvJG4SBJOSJvwY2ZgkA0COcCCItQ/ZHl4BYDSvMnIA?= =?utf-8?q?YO77/KBPqZgxgThur5X2+aL9H5NI/wpzPcWh+pW+3T9aJMwAuH9CW7ct4EwPkXUiv?= =?utf-8?q?KfGEYC1NScV8m1wejrOElJhvfBV33/jSiJqK6zpeCIJAnETWePoU7d+4o4bE1yiKx?= =?utf-8?q?cRlh8+axu1qzRzNjPlW1rrjYpe5GAaA+K73fIAilJqskIPZTk4Jf0PqE79ySyLYR/?= =?utf-8?q?wIsVTcWVcGUwSKk25CM8m5drnIMpIi03lOBEI16PmPT0k1i+JYZ2I33BlAu2x0r+Y?= =?utf-8?q?5n/tYBkPm/ZUudDebJjPZR8ekhYnY/ZjBnA+KQC2GXlPrPzSqvzB3Ci2F+vusartk?= =?utf-8?q?M5mzw/kpsKEihpesjOav5B0/1yKq9lKC5BKbuKNCGpwp082M8DiYtM1Wpd7d+3g+v?= =?utf-8?q?r//Gr/7slE6H6A18y18+asYfZjqusjBkWA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5d8c4c9-bb81-4926-fc01-08dab65efeb6 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:34.4807 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vldaytNty5sKfms0otlnU4wc2y1oHr1diekguHpUqR+WYDO0f0Yim9VR9KYOJJS93ObDSdYVdd/Q9TuQz6wnCfSR7Zzp4IFSt0jLLaLvo78= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR13MB4739 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 the related data structure and logics, prepare for the decap action of IPv6 GRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.h | 41 ++++++++++++++++++++ drivers/net/nfp/nfp_flow.c | 49 ++++++++++++++++++------ 2 files changed, 78 insertions(+), 12 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 8bca7c2fa2..a48da67222 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -604,6 +604,47 @@ struct nfp_flower_ipv4_gre_tun { rte_be32_t reserved2; }; +/* + * Flow Frame GRE TUNNEL V6 --> Tunnel details (12W/48B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_flags | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | Ethertype | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Key | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv6_gre_tun { + struct nfp_flower_tun_ipv6 ipv6; + rte_be16_t tun_flags; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be16_t reserved1; + rte_be16_t ethertype; + rte_be32_t tun_key; + rte_be32_t reserved2; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 115b9cbb92..0353eed499 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -565,6 +565,7 @@ nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, struct nfp_flower_ipv4_udp_tun *udp4; struct nfp_flower_ipv6_udp_tun *udp6; struct nfp_flower_ipv4_gre_tun *gre4; + struct nfp_flower_ipv6_gre_tun *gre6; struct nfp_flower_meta_tci *meta_tci; struct nfp_flower_ext_meta *ext_meta = NULL; @@ -576,9 +577,15 @@ nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); if (key_layer2 & NFP_FLOWER_LAYER2_TUN_IPV6) { - udp6 = (struct nfp_flower_ipv6_udp_tun *)(nfp_flow->payload.mask_data - - sizeof(struct nfp_flower_ipv6_udp_tun)); - ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); + if (key_layer2 & NFP_FLOWER_LAYER2_GRE) { + gre6 = (struct nfp_flower_ipv6_gre_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv6_gre_tun)); + ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, gre6->ipv6.ipv6_dst); + } else { + udp6 = (struct nfp_flower_ipv6_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv6_udp_tun)); + ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); + } } else { if (key_layer2 & NFP_FLOWER_LAYER2_GRE) { gre4 = (struct nfp_flower_ipv4_gre_tun *)(nfp_flow->payload.mask_data - @@ -1186,11 +1193,15 @@ nfp_flow_merge_ipv6(__rte_unused struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv6 *spec; const struct rte_flow_item_ipv6 *mask; + struct nfp_flower_ext_meta *ext_meta = NULL; struct nfp_flower_ipv6_udp_tun *ipv6_udp_tun; + struct nfp_flower_ipv6_gre_tun *ipv6_gre_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { if (spec == NULL) { @@ -1199,15 +1210,29 @@ nfp_flow_merge_ipv6(__rte_unused struct nfp_app_fw_flower *app_fw_flower, } hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv6_udp_tun = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; - - ipv6_udp_tun->ip_ext.tos = (hdr->vtc_flow & - RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; - ipv6_udp_tun->ip_ext.ttl = hdr->hop_limits; - memcpy(ipv6_udp_tun->ipv6.ipv6_src, hdr->src_addr, - sizeof(ipv6_udp_tun->ipv6.ipv6_src)); - memcpy(ipv6_udp_tun->ipv6.ipv6_dst, hdr->dst_addr, - sizeof(ipv6_udp_tun->ipv6.ipv6_dst)); + + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_GRE)) { + ipv6_gre_tun = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; + + ipv6_gre_tun->ip_ext.tos = (hdr->vtc_flow & + RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; + ipv6_gre_tun->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6_gre_tun->ipv6.ipv6_src, hdr->src_addr, + sizeof(ipv6_gre_tun->ipv6.ipv6_src)); + memcpy(ipv6_gre_tun->ipv6.ipv6_dst, hdr->dst_addr, + sizeof(ipv6_gre_tun->ipv6.ipv6_dst)); + } else { + ipv6_udp_tun = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + + ipv6_udp_tun->ip_ext.tos = (hdr->vtc_flow & + RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; + ipv6_udp_tun->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6_udp_tun->ipv6.ipv6_src, hdr->src_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_src)); + memcpy(ipv6_udp_tun->ipv6.ipv6_dst, hdr->dst_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_dst)); + } } else { if (spec == NULL) { PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); From patchwork Tue Oct 25 07:59:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119077 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 89232A0543; Tue, 25 Oct 2022 10:03:19 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8B58242C5E; Tue, 25 Oct 2022 10:00:44 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2113.outbound.protection.outlook.com [40.107.237.113]) by mails.dpdk.org (Postfix) with ESMTP id DB8FE42BB3 for ; Tue, 25 Oct 2022 10:00:37 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UoJpM39km37rxrfyGOmsVCg9bk6EOupcSUvLKQIx4DqFdXAo5piF7+2I6LNNdbwvgoN80gbR+us/HDoKOqLPcLAK60YbjLksd9TzK7oNNTXaQjt0jz6eJAPvqTVxUJ7UvbpYrkKnEwOsFjWXGZUHM61UgaRFW+XOK/PZuSKgxJyK1lZUYUO8HVKj44UbtiUPhyneEhbzCCncIoRKzV0HPH70J189aqQBvDDyihphz5BRzef6LoTA1lQb1LlgNawdUgBvTC42eBGCfrtaIuxNpfKF3mlAM8q89pHku/OTCLv1vbVW4CMZRyfcHavALSR/h4aRvh/eWCEOpwG5+f158g== 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=tzKKfexIZqVdBOtDdXBJyjHWLQeR1QJz65yWp+Y6ju8=; b=Hq7OktOdV0D+Yt8pGGYc/7GKzj7w0FhIWwJDQ/d/tKS20tfyD2M6GnS4FbwuP1xMn8LiGaBLhxnTgYdGf8wgJDm0yT2EzFdqQaw+7XjiwDegcPeEKVYoaB9wXODe8G1ySI0WhmGB8JzLac+TLGTA90moT7JzcShEF1tg7BAkqQFkwI1+4QX2LSUKBRhA4tLLIthcO8KKaQEP2V1EeTzWfaWwv+u22AYN5q52JXIEDxA+Fjsesmtt2uq4JZTUXCdMFrg3Tiipb9hVVhntheMfiGxeOWa3DTgVbcsnXtJ+nlb/INdKwVQd+T45kllkjUgJ6+sXEN8Qt4bJjusgIbEoOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tzKKfexIZqVdBOtDdXBJyjHWLQeR1QJz65yWp+Y6ju8=; b=uwIajkjJyT8RXRmNNBTiaUYG9DeyiTi+/AP97XKJR+U+c9B7eJC+6Fx2sOdE4ZEh5YHdHJVDdFk8JRR5rM+iyjcETI1uX8l6dWpT2sDCg/K3Ib/HJagWHTBLS5cvQsdvIAEeNPJYprku5M/4kpQNGZZs/7LYpS1nHo4W1n/M0LY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BLAPR13MB4739.namprd13.prod.outlook.com (2603:10b6:208:306::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.25; Tue, 25 Oct 2022 08:00:36 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:36 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 22/26] net/nfp: support IPv4 NVGRE flow item Date: Tue, 25 Oct 2022 15:59:14 +0800 Message-Id: <20221025075918.7778-23-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BLAPR13MB4739:EE_ X-MS-Office365-Filtering-Correlation-Id: a1774843-6e32-4ce2-2b10-08dab65effe1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VbV3+Mpg8VNsR2ZoGRZHtxkTTEVnzrZcHMs4lmpLU4fiPx2xyjdT9JHpQe+oYXuuowGBuqkX817BzaMoNO1l5/4DM3UzoO/yoSa1IYSah+wYYQpkL69SJKsvRVGN+7vlUff2HjdJPWzn0s3nKw/YAprVXMmrN8qsIj9FoYYU33jNQUZ07VkKfRgTwfH7peYvBAJ8vlqWcklQvkesCLvO3xnF1zIs0SVfbjI4MwI0Z4OhQ+zU3rr5y7jPvky929aHhjTcOrqCQWxrEdysB21zxpQTp9rae3hp1agvFAhiT447Cmxz2RBGFGAHzegHNCZEeeiNtpyneLbhm4FU5kHhJl9uw4GjNaWSF3V1n5v3pYJj4VNT2fIAbZBKOyuwQWxNLhFib4dHkoyIiDFCpUmZlno+AKuQWvZXO+/Q9MRVSjOV2936d4Ipei3RSMorO9fJ2tZiwqO5AM8uukgOFNJCFkKD5JqEkMpaJL2tkUGbwi5RKoRWAX6UKLVLrKbpIiO3KYYtN03fPey/BmsIq2GQBePlc5QmLDUiB1FKwQTS0e4/r5Bz+4uJwrFoz3H7pgFgAXvtkQmImXdXLFfhg1AhIWGo1AQnWi0BQkpDqs4mjPq43mqbcytx3zeJbd7QOCELa2Si+IbCPXO7Mdj3tDVLY8wj66qJjkEnyBp7eKH9jDq3LtKIcefJFXhE9xOxCmajnnk0CdZmcEYLZ77K+4A3chM47If2sKmQsSsQvwbaXkNMMaNXfpA7M2zXWB2pp6hCtsiK1gyf+ckskLuRIbdIyw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(396003)(136003)(39850400004)(346002)(451199015)(36756003)(38350700002)(86362001)(38100700002)(41300700001)(83380400001)(66946007)(1076003)(2906002)(6512007)(6666004)(26005)(186003)(6916009)(6506007)(52116002)(107886003)(478600001)(44832011)(66556008)(5660300002)(8936002)(2616005)(6486002)(8676002)(316002)(66476007)(4326008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?IRDmaEAxRBII2S66mkQebxvxABwE?= =?utf-8?q?1mTNZyuzO9eeu8JvrrHpT9QqMQZ4lSRVar7d+k3BxpVJXtIqkid0C4BZgHyRDQSj+?= =?utf-8?q?eo7DR3p7vGSwT9yE9ILcx9jqwx6lbQbxEIau0BNPSqX7iBgqqkeRkIWY2Xi8epgqR?= =?utf-8?q?OFyUyF1oEOiY/Zl+VQXHWb7XbjVkDtn3URl4bwuV2KdERr2HovpiY0uN1ha7ti10D?= =?utf-8?q?oUFt9KUPf2MjG5NSqqMQOR0Fy8w13ehtDWz00bgFhXiWEkPyh7WQd+TIBiMU3Jk9D?= =?utf-8?q?l92Vm0SdY+aO25NM7DZtfjwmc2ZjRLD1afrLrE9lQkP3PfGRXkIDTYsp9rMCCClhx?= =?utf-8?q?wRgRUQi4GjHXAte56A2xN2txlMwmqogIWAX7jKuHRhxGaukp0mhCWOB/mr7u2QmwG?= =?utf-8?q?DyrM/kYOuxp/7PwSTY/LQPb2dgRvIiXBTt95+oXFkXNB8jo/pZXboauxtl4cEECzs?= =?utf-8?q?Ke5Mh1SQPbvXFdePZWoWcv9Z91DlO3TNzL7UAuJENshJrmOGi+MBr/BPAwARTDkOY?= =?utf-8?q?t95HURzuHAdApWgxvTvz47/LeDeCuodPFBLnCaRZ0ZBESmTTnxKoYYBEewBUQmCxb?= =?utf-8?q?Xt8DLzQfhofwQBGgGQLw6ZgaA3qH0oHDkdnZrdqKev8PpRVTyA8AuFWhT1blPrIE5?= =?utf-8?q?CarruCK8Ivb4ACsebnp6Nbz/fBD1woSNiY+8/dk4Yhm6l+mRrcawEQObwEF8n8iVQ?= =?utf-8?q?BCAjWPiXvXwENGSnB/p2B7Je3YcjooRTBfSKkPZ8qAFrg2R3Y89apKEIK1weomfrZ?= =?utf-8?q?xos1jMF7AiG+iHz4DUHcPlx3WD9sW+zG/2zj+2jJ6X37fbhxzmn0mfAKidSfwOLEO?= =?utf-8?q?fNRfEgDKwNY0agupUhdOrVxmA3Az50H3zy0WRlOUpIVXjj9qeEpdQdaI8acRLKZbe?= =?utf-8?q?wNX3WqqJWVetvz/QQsPEMXlLbnar7SzdahBViCumY7Zk6L3WSTd2kqEygAwIShS6K?= =?utf-8?q?zeGY3scB3rVzgEiISDZ8UhI7GBmKE6GGpacn5PLQ4bOyYqhpSb2ZJpvbrRJ9ZNCcI?= =?utf-8?q?b/QbkbFFP9fB1Ornvle0VRTga0x2viLl7FDoNnJD1+9Y6+wM7lQRzDqF76aWuk/6K?= =?utf-8?q?8PJ0MWqSPF1uyxpIVoI8E3ZXEEWAJfIOo5CQu3SKYFm5V4bpePJKpdtxOvB6mFPt3?= =?utf-8?q?3zYjyYOff4WVmgL7fGiMiV8qBfyTj7v5K8Hgp7sPRvGgKkIHEly9L5jh2ktNoVZTX?= =?utf-8?q?shPVNVesxXEnaR7o0ZsH9NNFJXzw6we9v2xmBvsD0WFLDgA8f6P+iYMsDdQ8oqjRN?= =?utf-8?q?o1vrAhK94pFN/MUkYgZJTfNkfCL7Jm1DXfSms3yDsuSqLXT2zhbwxAJBRoGh9AWx/?= =?utf-8?q?4bNRDfSSwx1F5tcFGXr0GlN7cjjG20wJiSHhgAzhtqRvLbOHAiX7R+HTXTnejpCDT?= =?utf-8?q?h2SSBnyi9aid4Nt5oXpfFaERFXVRfGzoH2ifLSUHbU5vmmH6+IP809KVchSkvOWnI?= =?utf-8?q?wer6qaVgKrqBcYl4peDJiqmdGMIyjmlSrIe0PWB1izRwCCBCXNBvVYN14ktWvBeOt?= =?utf-8?q?Sbj30POisVa9f/5/9Ppf+q3RCqg3nTd4zQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1774843-6e32-4ce2-2b10-08dab65effe1 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:36.4342 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PR+xwaUQdECbB6exqI75zShxnxks0+D68V1YmlHm/o9gITBSR7PE3JBhgjlhl+3yEA1eNJh+8pw36La9ksf4gXoJsGpyc8ynq1+99M1CTY8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR13MB4739 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 the corresponding logics to support the offload of IPv4 NVGRE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 2 + drivers/net/nfp/nfp_flow.c | 99 +++++++++++++++++++++++++++++++- 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index fe1cb971f1..9e075a680b 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -29,6 +29,8 @@ Usage doc = Y [rte_flow items] eth = Y geneve = Y +gre = Y +gre_key = Y ipv4 = Y ipv6 = Y port_id = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 0353eed499..226fc7d590 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -820,6 +820,26 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], return -EINVAL; } break; + case RTE_FLOW_ITEM_TYPE_GRE: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GRE detected"); + /* Clear IPv4 bits */ + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->tun_type = NFP_FL_TUN_GRE; + key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_GRE; + key_ls->key_size += sizeof(struct nfp_flower_ext_meta); + if (outer_ip4_flag) { + key_ls->key_size += sizeof(struct nfp_flower_ipv4_gre_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv4_gre_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } + break; + case RTE_FLOW_ITEM_TYPE_GRE_KEY: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GRE_KEY detected"); + break; default: PMD_DRV_LOG(ERR, "Item type %d not supported.", item->type); return -ENOTSUP; @@ -1540,6 +1560,62 @@ nfp_flow_merge_geneve(struct nfp_app_fw_flower *app_fw_flower, return ret; } +static int +nfp_flow_merge_gre(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + __rte_unused struct rte_flow *nfp_flow, + char **mbuf_off, + __rte_unused const struct rte_flow_item *item, + __rte_unused const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + struct nfp_flower_ipv4_gre_tun *tun4; + + /* NVGRE is the only supported GRE tunnel type */ + tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + if (is_mask) + tun4->ethertype = rte_cpu_to_be_16(~0); + else + tun4->ethertype = rte_cpu_to_be_16(0x6558); + + return 0; +} + +static int +nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + __rte_unused struct rte_flow *nfp_flow, + char **mbuf_off, + const struct rte_flow_item *item, + __rte_unused const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + rte_be32_t tun_key; + const rte_be32_t *spec; + const rte_be32_t *mask; + struct nfp_flower_ipv4_gre_tun *tun4; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge gre key: no item->spec!"); + goto gre_key_end; + } + + mask = item->mask ? item->mask : proc->mask_default; + tun_key = is_mask ? *mask : *spec; + + tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + tun4->tun_key = tun_key; + tun4->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + +gre_key_end: + *mbuf_off += sizeof(struct nfp_flower_ipv4_gre_tun); + + return 0; +} + +const rte_be32_t nfp_flow_item_gre_key = 0xffffffff; + /* Graph of supported items and associated process function */ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { @@ -1580,7 +1656,8 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_IPV4] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_TCP, RTE_FLOW_ITEM_TYPE_UDP, - RTE_FLOW_ITEM_TYPE_SCTP), + RTE_FLOW_ITEM_TYPE_SCTP, + RTE_FLOW_ITEM_TYPE_GRE), .mask_support = &(const struct rte_flow_item_ipv4){ .hdr = { .type_of_service = 0xff, @@ -1671,6 +1748,23 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { .mask_sz = sizeof(struct rte_flow_item_geneve), .merge = nfp_flow_merge_geneve, }, + [RTE_FLOW_ITEM_TYPE_GRE] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_GRE_KEY), + .mask_support = &(const struct rte_flow_item_gre){ + .c_rsvd0_ver = RTE_BE16(0xa000), + .protocol = RTE_BE16(0xffff), + }, + .mask_default = &rte_flow_item_gre_mask, + .mask_sz = sizeof(struct rte_flow_item_gre), + .merge = nfp_flow_merge_gre, + }, + [RTE_FLOW_ITEM_TYPE_GRE_KEY] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .mask_support = &nfp_flow_item_gre_key, + .mask_default = &nfp_flow_item_gre_key, + .mask_sz = sizeof(rte_be32_t), + .merge = nfp_flow_merge_gre_key, + }, }; static int @@ -1728,7 +1822,8 @@ static bool nfp_flow_is_tun_item(const struct rte_flow_item *item) { if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN || - item->type == RTE_FLOW_ITEM_TYPE_GENEVE) + item->type == RTE_FLOW_ITEM_TYPE_GENEVE || + item->type == RTE_FLOW_ITEM_TYPE_GRE_KEY) return true; return false; From patchwork Tue Oct 25 07:59:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119078 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 76188A0543; Tue, 25 Oct 2022 10:03:27 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9DBD642BCC; Tue, 25 Oct 2022 10:00:58 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2133.outbound.protection.outlook.com [40.107.237.133]) by mails.dpdk.org (Postfix) with ESMTP id 155A542C38 for ; Tue, 25 Oct 2022 10:00:40 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cIssGBdUoIxxNV05V0JpI1oGZtmWlL8xiU+TmF5JlKp5H2516ez1R3JfXt+1RQH1teSZcgyMhTzVW2aFg2GFHbsRabQbWDaSDoGgERx147R0LQtATjT9SflSLal6hHcy+3FARwOLTahrgG1HKNkV6fwUVFUIhZq8EZ10hoLZ+EA8CotxCj1lCycaJKHTtIT5AFoDdCg3VOpArV2/eaG7QH+gdgrSxR+r5dwxrqmchlJ7RQroWwyNMZYZmeI6In3TyViemmXEwHfiI2Z1WflMgugQiQKgyukeqAD8mFS+KT5+6PLGxbVAyzzvpj9gSRRaCC4kY0Jk8RHyrJhZu7Aurg== 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=FN58zPKDXJhPyvMGG435DykaEsSBSU1oiMebGo9JBIo=; b=kqe8PSCMXlJ7GooOzseoPp4yHVMQ1Hiy7Wk9q/VicHsekHtsVEivnX/9vqKis8ZBBFEjKXoAZj0E51ZUs2cpwqHR8rkIGrCwrzE3Qn5P3AcIVrMNQxzQLgVCH6BfnAhE9Waz4+4fQQkUE7QHdnk1sRx+QLNa5J43JxRcvtHms/MHiyheecPTjFfAJDrbz/6gb6JXWUOg5N3iAkGp77NxGfthVh6wHsGxvmus8Lwxp200v6ecmFtRW2VJjuMSGST4wOln/bNukDBwlVTj5u3Xz2IMizZ8XMtGMflOQXrvlF/yj3DvJg7O5mkVB/OPpWiF5VHgntI88z6KC/QKVf9b5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FN58zPKDXJhPyvMGG435DykaEsSBSU1oiMebGo9JBIo=; b=dIurtDhXdUm/n1+ru/tNvtQjshDZI0Rea5hlBGu/YLEzvXG/eRRKzHN7CCj36cnTHdz4AOmwZuQFMKjHRDomCEO0TcjwgeDaIn6gx98KlaHDQyu4Dgmv3YW5W+UbQTAql/gNZ6WqtQSzk+h+BcSHlLLs5QHtMWbjUd5QtxfEMrU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BLAPR13MB4739.namprd13.prod.outlook.com (2603:10b6:208:306::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.25; Tue, 25 Oct 2022 08:00:38 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:38 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 23/26] net/nfp: support IPv6 NVGRE flow item Date: Tue, 25 Oct 2022 15:59:15 +0800 Message-Id: <20221025075918.7778-24-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BLAPR13MB4739:EE_ X-MS-Office365-Filtering-Correlation-Id: 71ae4d29-7e0a-462a-fe6c-08dab65f010f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TfxbrTU3Cq8/nEO2Ig3X02KrYOCjqHyr+9703bUg3uVZxlzpbOyPQf4mLC877K5NgCk9AAhitkmzM6YBgDcHq4MW6Qj2T7+bLUM2P6b2OPgzMHNZNzRiminqKsHc8fXKnfor0SQIgDD0MwcVaUurnrJuMd2RzYGqB1wXIsuz4QENDflpujFXDEVgrRZEaxQnznzscD0DWtysYH7NU4Dc24DabBdlBxXiyx8Z17Jmv0gYy28Ex88H+WEQCrdt1ePvbletaJjC47agqEiWfJge9txxNn5uy7tE5/6g9SXsO5kvGxDZ9XT17hJmRKllTET5nttPnMgCiyznhkiDBTiK0J199QDwbCrEU40kRJyF6OAemt7VNwMs/vxcfghzFjlQgn8QtPwihiwBRVsF3iS+sXR4ebaX/aU6Ff7feMNaMgv4fE5YrU8rysUlKtUFzqBhuTXGII0jkpk2MiHqnrvf+gkBl4CbiV6j32n7Z5k0Lr88oNNFLvS6juwbR09ZCKQRnYk06l8Pbtp8mjH852Nzg5U+SLvtJfhnECe9g5XnBGJgt7nzI5IYBfeh70o5z3LcPauAa2nRCSWWsi+gAYgAaj5l6yETX/OIZ9YceZEWf3Wd5cqRg3YNbzqgWl6cVOLlRYd7aecxiiJNoYBD5PC5x/4OPJG0C6quRYWf7poqJIsrS1VqH1amkf2V9Pe84tUE5O57sBXa+VwAQ667GHk9bD6Th3Z2+Rgb32jQhkmgFX8xlRm7NdqsAYIKWf8VTgXNQbIH4IpbEywXwoFl2mQ7kA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(396003)(136003)(39850400004)(346002)(451199015)(36756003)(38350700002)(86362001)(38100700002)(41300700001)(83380400001)(66946007)(1076003)(2906002)(6512007)(6666004)(26005)(186003)(6916009)(6506007)(52116002)(107886003)(478600001)(44832011)(66556008)(5660300002)(8936002)(2616005)(6486002)(8676002)(316002)(66476007)(4326008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?F0zvC7CpCa49GramDUbf24ATv/4y?= =?utf-8?q?rVWE0JnBG3NjShgctUrDZz2Va+TTM3gXzst9kZDO8dPmzunZfzu2tA2CzSQtRcCc9?= =?utf-8?q?DWJlAEHOgoNebzYonG4vsbyh1pnkDUKiGDD9e4MJcb7MfAMFFLYJ5R0Llunpfql2x?= =?utf-8?q?9kIJafbD6EY1/XeA7me2M+SivOzN5Oq0Dt9OIy/JCR3Wqmv7V8IgtDZtNQD0WQZJw?= =?utf-8?q?dF5sN32Jk98oRNyKICJgDluQIwpBbH5viPJ96Gnbzydz2RbxMe/35V/BGFjQQsJpZ?= =?utf-8?q?GUxIJhS2R7w1Xu1cHxZGM6cgHojnaHXMccyuiU5kjn5A+ZYrn3ZByPXpvdJOLZ1mH?= =?utf-8?q?Ei6LriGGLaFEpHTVEc6qHjCuNbYA50Dh3Z2kCQcgY3wNqomxijYbu6ZYj7ZiL+SjX?= =?utf-8?q?k2U1q/XcEecIxjxnBRTTLIXSo1lUATWXKNltdd8cIv+S7NxfPORouDn1pmdU6XPB7?= =?utf-8?q?znxSCpBSqitUH6ROjNB7hUBk3a+K5NUw//QahoU0H0HBT/PF4DhvR397/H8ohldLt?= =?utf-8?q?ag2S81OJ3JE1NIN5yH1e+K6MetUwmmOwa0v4Eq1/MFgT48Rcgw+WfZo7az8SLPr19?= =?utf-8?q?QsdQ3nLfoVbgB/fW7PmFi0VF+FXg5W/ik2N284FARHL/Rs6U+Drv+XAHHgFm7qsxY?= =?utf-8?q?j2C6PUZeMiP+JbFT2ciBY/cZSUyIkPPkjhrHQnOrLSaFXMAOU1cRVEC9aaLWLycH5?= =?utf-8?q?4mVahc6MJzypsPNOLZhPdN+2lViq56LysUxELYNXvybxOlTI5G9LIzlh5eDC5JtiB?= =?utf-8?q?LSWz1vqtYZhw11Ph50Vftv7D18LemgI+4rEhZxxJ2mvsPdfwSeJJugFmVrn6Gmmsf?= =?utf-8?q?KtT1KKI8mPUHOo94xqlxJ5dzO70oa35bl4kgPe1K05XFvHRe88vBidqo7tZo+SL+u?= =?utf-8?q?vPwJjwm9rFPqmvHKeO0G5STMy1pKRJcOgEyD5dIfiFjcI/czePxMZlm6E9c9QWOfc?= =?utf-8?q?DUeJuGMSbf4zszF0rBtfXXGItYrzV6CK1uHrIDPk4xPvCBl14bXhibKvkk4mb4Rzb?= =?utf-8?q?AWgEk7+B/1IUKJRKuX3oH/A5ksxdrJWy4GvWDy+d3NIQ8iKbLdp+M6FmuejbzgQZi?= =?utf-8?q?QBH/WJOICJISFbdDCHIPxp9I8neRY3uXjQ14z729m0k8fq1RXJaBYviCuwDO3DcJ8?= =?utf-8?q?YF7xgQ3HkFRjN6MS4TPrmX7BDoyOg2OWc+WtQ+b2AON9MrECiCukB857U8vQKMt4j?= =?utf-8?q?FyD9p9a4Qak3UtDTW44dCEeRSt1FyWJv3bgLlXTMeRQSTXo8cm1eDqMntaMkBiw5Q?= =?utf-8?q?BLmOhpycCJR3VnKtmaCBmSij7huH8Z/59Qnt8tpuA3qn0y4srxR46M9SKKZVMohYe?= =?utf-8?q?MvvjRS6gJGdwX7gTqg9niMjA/SLg9gXuKOgW1opVuqIYVABtli5l/OBJ1/hJBSwPJ?= =?utf-8?q?e/Yw978Xup97HTSngJ/kBQBpx3+VkhhpBEqYd6gBSaAAIA658Gh3HbjlmHpl3rO/s?= =?utf-8?q?UOhQVzcXgdpMIf4dQD1z9xeqgYArIMFBqva7DHeWtjmK2tbmt/lLYGegXITXIUzXv?= =?utf-8?q?dnMPNbFhoOo808TiS5+CMOxbU4S28dsjtQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 71ae4d29-7e0a-462a-fe6c-08dab65f010f X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:38.4975 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4UZxCcvWVdXtRMcGZXrUZsiITNqGAsqQnr3yFY7/Hm7rajMGBhV6YaVnK4m38npdBPeVjIWUTdQ9YOayx6DSr4mfhJOLMrvvf+7HUnG58Ts= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR13MB4739 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 the corresponding logics to support the offload of IPv6 NVGRE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 73 ++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 226fc7d590..78af7bcf0c 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -822,8 +822,9 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], break; case RTE_FLOW_ITEM_TYPE_GRE: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GRE detected"); - /* Clear IPv4 bits */ + /* Clear IPv4 and IPv6 bits */ key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV6; key_ls->tun_type = NFP_FL_TUN_GRE; key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; key_ls->key_layer_two |= NFP_FLOWER_LAYER2_GRE; @@ -835,6 +836,17 @@ nfp_flow_key_layers_calculate_items(const struct rte_flow_item items[], * in `struct nfp_flower_ipv4_gre_tun` */ key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } else if (outer_ip6_flag) { + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_TUN_IPV6; + key_ls->key_size += sizeof(struct nfp_flower_ipv6_gre_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv6_gre_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv6); + } else { + PMD_DRV_LOG(ERR, "No outer IP layer for GRE tunnel."); + return -1; } break; case RTE_FLOW_ITEM_TYPE_GRE_KEY: @@ -1562,38 +1574,59 @@ nfp_flow_merge_geneve(struct nfp_app_fw_flower *app_fw_flower, static int nfp_flow_merge_gre(__rte_unused struct nfp_app_fw_flower *app_fw_flower, - __rte_unused struct rte_flow *nfp_flow, + struct rte_flow *nfp_flow, char **mbuf_off, __rte_unused const struct rte_flow_item *item, __rte_unused const struct nfp_flow_item_proc *proc, bool is_mask, __rte_unused bool is_outer_layer) { + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_ext_meta *ext_meta; struct nfp_flower_ipv4_gre_tun *tun4; + struct nfp_flower_ipv6_gre_tun *tun6; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); /* NVGRE is the only supported GRE tunnel type */ - tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; - if (is_mask) - tun4->ethertype = rte_cpu_to_be_16(~0); - else - tun4->ethertype = rte_cpu_to_be_16(0x6558); + if (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6) { + tun6 = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; + if (is_mask) + tun6->ethertype = rte_cpu_to_be_16(~0); + else + tun6->ethertype = rte_cpu_to_be_16(0x6558); + } else { + tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + if (is_mask) + tun4->ethertype = rte_cpu_to_be_16(~0); + else + tun4->ethertype = rte_cpu_to_be_16(0x6558); + } return 0; } static int nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, - __rte_unused struct rte_flow *nfp_flow, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, - __rte_unused const struct nfp_flow_item_proc *proc, + const struct nfp_flow_item_proc *proc, bool is_mask, __rte_unused bool is_outer_layer) { rte_be32_t tun_key; const rte_be32_t *spec; const rte_be32_t *mask; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_ext_meta *ext_meta; struct nfp_flower_ipv4_gre_tun *tun4; + struct nfp_flower_ipv6_gre_tun *tun6; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); spec = item->spec; if (spec == NULL) { @@ -1604,12 +1637,23 @@ nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, mask = item->mask ? item->mask : proc->mask_default; tun_key = is_mask ? *mask : *spec; - tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; - tun4->tun_key = tun_key; - tun4->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + if (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6) { + tun6 = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; + tun6->tun_key = tun_key; + tun6->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + } else { + tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + tun4->tun_key = tun_key; + tun4->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + } gre_key_end: - *mbuf_off += sizeof(struct nfp_flower_ipv4_gre_tun); + if (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6) + *mbuf_off += sizeof(struct nfp_flower_ipv6_gre_tun); + else + *mbuf_off += sizeof(struct nfp_flower_ipv4_gre_tun); return 0; } @@ -1675,7 +1719,8 @@ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_IPV6] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_TCP, RTE_FLOW_ITEM_TYPE_UDP, - RTE_FLOW_ITEM_TYPE_SCTP), + RTE_FLOW_ITEM_TYPE_SCTP, + RTE_FLOW_ITEM_TYPE_GRE), .mask_support = &(const struct rte_flow_item_ipv6){ .hdr = { .vtc_flow = RTE_BE32(0x0ff00000), From patchwork Tue Oct 25 07:59:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119079 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 18644A0543; Tue, 25 Oct 2022 10:03:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8755642C28; Tue, 25 Oct 2022 10:00:59 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2136.outbound.protection.outlook.com [40.107.237.136]) by mails.dpdk.org (Postfix) with ESMTP id F08CA42C40 for ; Tue, 25 Oct 2022 10:00:41 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nqmFRp6UaMtftQp/M3xAZcAajpQQvrqBRoPuBD9tEOW75I1i99DBIrGIfQaOVA/Nk5g+Kh/YGmYiH2LL7VB1ARHNVP5V08CCO8rMgD2JDEk/yOx0/8ptbC4/7fcUMiCZr2KYSf+l/RH6FcWInA1LGECOPN/vs5R6ITkJ9JBMYwEjZMYOf8RTzBI+UQS+zr7jcQMvbPE2B/G2W/nPO4GFbo1jLsgW/jDcZoeEYFfbRG0uiORF5e+Y4aQbnZIfUM1Z1Dy4S6wEdLFUNNxFLoluzUgU2exiwFuFPVA36nr3oeYTKqx3+XzhZ+b9BwgJb5xDXuxCX0VUvtTEiULSJVD+iQ== 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=E6wkqoKCkS3WbPT133ituL+mB27+lJyBJCZgcaevTI0=; b=O0sQjaZTOo3RCuMmCt6JJeN/6MuevJB2+GLqL2yGA9lBv+f5WauuMpFPRRPOjs+z6B2NxHJGBPMkjDndSfDOIkyhUJ05BSQixi8J8e+aMmRi3lvcA66r7dMcIxNhI9PZ/L6j3YZvGRed0phzicBjKXlc8Rdyy1XRV0azRqR+3sywGGYbT3hutsCXZc4zOzlWwVuZRv7f98k600TwWTqgGPkuCmBOwmZ8VvCZ1dCBUXMOvIyhZ5FYVsP+8aBaxJ80K62jtJAIM5zfZ++gLE/yTy/2NY0RnmYHwo0dFe7EHkB+StdBBAzIBAlEjjFJRM/dppLnhWsggHERF54RgnLKcw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E6wkqoKCkS3WbPT133ituL+mB27+lJyBJCZgcaevTI0=; b=k09/c3OZH3N7U0MEBgevxDJvWbUh24gLKSOKWio95zLjej++4/YH9gu1kXrW74jiZPEqIQc5aA8t11Eefhf5uwfrseRHv9+aDoTrxWhsxnaFk1Z/xg0O7v8vH4w0wwnqBGruQ+3CqSLXMkaQnGY22bOE0BJVapMaaOOUEVBTDMY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BLAPR13MB4739.namprd13.prod.outlook.com (2603:10b6:208:306::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.25; Tue, 25 Oct 2022 08:00:40 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:40 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 24/26] net/nfp: support IPv4 NVGRE decap flow action Date: Tue, 25 Oct 2022 15:59:16 +0800 Message-Id: <20221025075918.7778-25-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BLAPR13MB4739:EE_ X-MS-Office365-Filtering-Correlation-Id: 540139be-c4bc-4fbf-909b-08dab65f0250 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: i16XwzOQv4OjVE14FWUBN8ZAGOAFv1f1Oi4ZbYbf3wUohRkp2Bgm2OpL+BKzk9Zqo+o8w7jhDjrf2q/LiOrEoV2nInputx2qlNi3C8tgMqatitlHL7Dp5hbiHQdYvC2urTvwirAweV2oaS0GpPL4+Xv3a+GZje34H4SrGdZHm1ukUJZ/9nE/g3S8ck01XT/LmsajSxAIM9hB2ghL9+1p+kNCoxvKqsMQKDQQHIS7GUW1caMn2fUlye+UpFpjtVsCI2zZxKilzT0HKgwrpVYbcPk9MhkHX6BJf7jWvjXQWf4n3lhpP0C+zT9PzxZyEaRx++UoopY3HtOIpXHCjcZJHQJM8QeLaXoFpOylk1k3VFkRtsntRQhqIJ9rA64G2ADRrcq0GeCzQIpJfw1ZLVuz9fR2Rqo+/J5s9iFePOYiDNaeP7V+zNi5e9uQAz6WVdr03vYp/7Qx9lqrIJLxqZ3E/B2Qwo4g2ZifbioQZ7y6DTQG/ctYfhnpvr17PxMt8gCedB6CwW9QpMBHMQzsqj3AEW5kBuuoiL4SbnDl/fsU1jKRhean5pwyJvLgIwqc/UB09yVpPPGbLm2ScDG2oL04J20ItSohNpv07ffO89c5KdSFyR8ieAVvfNXe65pKoS/Z0WivzrpU+qpt6ui2bRvQMCTAF1xlbTDT3sTOl51j/9C9qGcqlWNLJkJjPHFJZQRIKs71oMUrg4ywOMEbeos0kGBFSHXs4kP7dyyxCrKaPR2Hp52kiFg6oHbaMiffeFcgy0vJ8RO8DKgOEOWq4nERUA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(396003)(136003)(39850400004)(346002)(451199015)(36756003)(38350700002)(86362001)(38100700002)(41300700001)(83380400001)(66946007)(1076003)(2906002)(6512007)(6666004)(26005)(186003)(6916009)(6506007)(52116002)(107886003)(478600001)(44832011)(66556008)(5660300002)(8936002)(2616005)(6486002)(8676002)(316002)(66476007)(4326008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?CC0tiPbHlS7lSqIrqyLvm59oH0Ez?= =?utf-8?q?YQPuSIDnDzcQuZe8oGQImbuuDOXg7Cw9aSNajGEw4gRH3m/fJpJbTOc/A3n5cA2R5?= =?utf-8?q?p2Y02Q+q6YX7Z9olMrcR5VRC30LotwihrIzmqY5lM/aGmwKRO/dRWNBgTjpmBNnG5?= =?utf-8?q?gduIYQEujje8Gc1SCeoHkeHOGY5HxMjb4TmAU+cMgGi6cn4xxCBR58CsGpD1izmuD?= =?utf-8?q?TD+zTIEyQbXtPIc+Yk0zdJ/s9r422s6zbMtuwNbNCc7xhUno6ewwj4K13zsQjfG0X?= =?utf-8?q?GwhzmJPJ1AQa6SmUuPgH/gd2kHAY9O2eJYeFXV1teTTste6xF746eNhfYkpjIoBWJ?= =?utf-8?q?kZRneBIv/nmr9ZVECipP4xAxoAqNKVeVdJD2ee28RePiV++mhrTR67kU+g+Fi6HPs?= =?utf-8?q?Pphtp8kuupbbA2pdRzp7hiKPgzGRDKbw83mTmyY0KGhNdujPUhGyLkM5Zt3rTMN3c?= =?utf-8?q?FGkKGrorL84Px0QMeQ10Pv5CO+Fcmsiqzi0ewS8qFg8iZZ4xMXTMKwpwJxgBt318t?= =?utf-8?q?9aKPuPGkK/CIQdND7m7pACFaXAJA0F9xoNa9NCtJVGAdK6hLzCIs4QMKleBvEGARf?= =?utf-8?q?Tmgp5fUxZRdUWLMLAGfjemrze0pKKcr5P/jS7ZuWrhvNecGHBheFr10Gh61bQZI/I?= =?utf-8?q?b3y9ra20v/GG8+L/sBurpKV8K6edcoFlenfO+fzvHdV6JGcGjyd0cVYMBYGs8Sl3D?= =?utf-8?q?LxuCDdXeVyQVLUlL2KJgoaNjReu2ca9xJM0uLUrO1BTalBR0aPpndjfP+fTYJbzXN?= =?utf-8?q?Dn0i4/pNpxEw8CQfwt8KNixhIgifA3dkcZYwBahS8vcMSHf0IU5REA99tV0VSV6rP?= =?utf-8?q?5Cn2EskIcY0Q1dK4LLAY6LIt4aHuQt+izYtVAHZYalZ5spCt4bId7owzSANajBF4K?= =?utf-8?q?Ij2VVYu+VMfGraArUQin2xHPDTXXGMTGs363wI4kz5+zZZl5GF5jW2oL/0iCrzjh7?= =?utf-8?q?avnr56ot3ciXWs4xlHmDGRjyYBf9sD/9+eQVyk+PXm6/E2o2471ia5fmExj4lbEa6?= =?utf-8?q?oelL3P3vtwOMw378zRyzc+zocB59JRTnyKLnvZLAYYEwr8wsTgAS8XV0GO8Smf0cP?= =?utf-8?q?UypLQCr4ZRM2ofML/i5HPsbKbGU8fwCScFt2gjM48uV/Zpkg5oSJd9Exjlg+SxgRz?= =?utf-8?q?XXfH7VWwFhP2278zMuF5yHCQ+klrzXO1dBegGDImnO8GlFTqW1/mWEPA/FDGRhQ+0?= =?utf-8?q?LIxLj1tmHCnbd/Q9bAbQQdbLpyK8Gwh2ulLYpjHzxnLfYQgxQ/AMTI5shNu5FLDfc?= =?utf-8?q?6ryvgQesPBCxB08lvjxPDxuzsNzGIJOJ6iKvdMfYfwa/bsvtt1AZ7y80aFqYZHVwK?= =?utf-8?q?/WW34L9iQ8NXBL6Aa8CkRxvVJ401rgyVRj2IZS/kVrAlQ2MYnhEvwjONhaNYYFeEW?= =?utf-8?q?yOYvhysb+2i8mfv3u0wge1IeATxtcWQ1s+AceFCZDnx2IJgxvpgpdR5QpOV/W2mcF?= =?utf-8?q?VQqHjA7no03s2WebbomdVe0dHH+QQP62PK/1MStCEptuA9iFGHRsyfkkPwSJFhFg+?= =?utf-8?q?F5P1D4qzGirlDLWDDCHBRSV+Hby75HL5jA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 540139be-c4bc-4fbf-909b-08dab65f0250 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:40.5360 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GJVosULAF6cTT0U2WKp/KzRmT275pRYU8GG8En26OAOvwbAkGphaJMo7eAsLoZgNQwaKNvPDfvk/hZV54HpfQWfJ92ovXcKFfOmqDb6vpwM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR13MB4739 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 the offload support of decap action of IPv4 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 78af7bcf0c..d666446edf 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1609,7 +1609,7 @@ nfp_flow_merge_gre(__rte_unused struct nfp_app_fw_flower *app_fw_flower, } static int -nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, +nfp_flow_merge_gre_key(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, @@ -1617,6 +1617,7 @@ nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, bool is_mask, __rte_unused bool is_outer_layer) { + int ret = 0; rte_be32_t tun_key; const rte_be32_t *spec; const rte_be32_t *mask; @@ -1646,6 +1647,8 @@ nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; tun4->tun_key = tun_key; tun4->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + if (!is_mask) + ret = nfp_tun_add_ipv4_off(app_fw_flower, tun4->ipv4.dst); } gre_key_end: @@ -1655,7 +1658,7 @@ nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, else *mbuf_off += sizeof(struct nfp_flower_ipv4_gre_tun); - return 0; + return ret; } const rte_be32_t nfp_flow_item_gre_key = 0xffffffff; @@ -3831,6 +3834,7 @@ nfp_flow_tunnel_decap_set(__rte_unused struct rte_eth_dev *dev, *num_of_actions = 1; break; case RTE_FLOW_ITEM_TYPE_GENEVE: + case RTE_FLOW_ITEM_TYPE_GRE: nfp_action->type = RTE_FLOW_ACTION_TYPE_RAW_DECAP; *pmd_actions = nfp_action; *num_of_actions = 1; From patchwork Tue Oct 25 07:59:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119080 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 688E7A0543; Tue, 25 Oct 2022 10:03:42 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 723F042C47; Tue, 25 Oct 2022 10:01:00 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2124.outbound.protection.outlook.com [40.107.237.124]) by mails.dpdk.org (Postfix) with ESMTP id 5F25C42C5C for ; Tue, 25 Oct 2022 10:00:44 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=etf2X3q3UGe9Vwzm6iWLu+/ULB4jalFUUP8VAz3IdTB1rF56qKxQmFaBbVe0fbeP7wXD88FO00qq6x3sIjB0ITsj6fl018AV80O7tBtrJ4TlwsOn23W5zFFFmgdewqeJe0JcEV+3IbzTbVOAYE/nkZekS+odQilj8dcb4QSLXLyw15QfjwzRcbSWLlqanh+02jBUJ9PxdUQ4dgZ2rtYVF2DGkjoKXFp8PXplNXcCRBppBXSBTXGB/j8oe/walRmRdKuNu/d0bm6Z1tfRMzq+kHeZBMk2GW4A82QjBDqbggW3xsLR/TX7tx6L3QOleYkeLF+JaSxPV4EKu0dDcYpWLg== 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=Or+aZSG3DAVeeyFVpFZoTkF56vPQ+nUAG0LJ+IxBreI=; b=hMkZNsxeYA9TI/x9YbVhNzuy6bvTiGWKMEUGYlZq9M/H/s7swq1wVjEb9PUAEC71A8XPARTZpAbLrMfG/YHcMC06XwKU52b+eFMpREo9g+mB+50/G7LiaItF8MINwPt/6m6fZEZDO6OEnWkz1SErabH4Y/b4/g08zHCKZ+qgRnVZeMwSt+Dx0CgXgGLOtH2RsSxJgi/CFBqzgn4AwxACDtkxsyow1WbqWJz9oOuyr+qQp8htKSXLWuu3/VZ36mVuMSo4QBw3dQHAgtSQS1+q71pC9Y1xVB1osfBBpV6QCrjlLSyPPGu+Re6TUZYc+lFXUi6fxiZqISYuwTNxtFM7ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Or+aZSG3DAVeeyFVpFZoTkF56vPQ+nUAG0LJ+IxBreI=; b=gAlPm4FnM72DkmZnv/xpnHbZuAIwiZIuErJzKfMqU8HhU5d/PYd+7GrO+F2hI4UUAA98LSZP7DQlJNgdwl7rgpafWHyj4sr4WACrz6p4MIdXOUQHYBdyoqJ0QOb2NoJEO4ISk0KxgEn8OcgN9OSNzheGGelpBhTgVna+atxNhpk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BLAPR13MB4739.namprd13.prod.outlook.com (2603:10b6:208:306::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.25; Tue, 25 Oct 2022 08:00:43 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:43 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 25/26] net/nfp: support IPv6 NVGRE decap flow action Date: Tue, 25 Oct 2022 15:59:17 +0800 Message-Id: <20221025075918.7778-26-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BLAPR13MB4739:EE_ X-MS-Office365-Filtering-Correlation-Id: f1a8942c-e138-4c31-34f9-08dab65f03b6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kZCUf9bnRi1LnjP1/FCB0i9d24vy7JuC46jjf0njqlz5IuSOlsebYIy49raO7yDrppSTX3zKFaHxldZwcyPniUAIbK94fm02HXXDAjImR3JMcP7EUAHc5uCCn6axxAnFAz8q257AFhN+xjI+pkt+mJZEuYiOQU9SHmSMLXXSBkhtBpxq3/WTtm2uhF9DRzYX+xGPZUk87n9jMGtYGwH3AoASn5wSg9mTAkNLz7F2RL0iuODb4Eq5HXafOddWLX8NiqEbmvH0cNmLXxYaDKU1AFeM8zNoNZ8dRSxEBlbHFIvktPlFRJYMvG3ThlfJ1EBL2dNSCsBliBImu4Ie4HIpGs2Q0r11hPxSck+uSTxx48mGOckG1YFsnxLlSiDjuc6a/Mc+Lw+uqyT3xDwzQkGYjS5SYGPsXbLjPp/oaXeCvl7iHPGVpYwXbMoeKtxCo9JqGHeESZgi65Oq1SUuwzlts021h+GB+jH7WxUn3ji5PmHU+TmhWn9Gn+fOXTgWKwUuEW/uiEmvu76Bido60sk7uWNwk09LlbXFEOnoGVjAkaJ62WXa6zNwIo7ZIv/fGR6ZfvvUA5874VXIF3nfdrB+R2M0xrRGIGeDP5g8Rt95D+Zwr+P2ew6DbNsurKZdG3YnGotF6IlSD4lG8KKiOmfcdWyKROG37sg3y1YVKMI7/uj1AnUwDCL9zai4XofX/UFDN//C/omIeZ8RXZ/1CmKrX16xazBjqSWCj4MUQg1RNNf/XTuzbqfHpanDeHFo2iKNOOOP655IjWpnYl0CMpK3lg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(396003)(136003)(39850400004)(346002)(451199015)(36756003)(38350700002)(86362001)(38100700002)(41300700001)(66946007)(1076003)(2906002)(6512007)(6666004)(26005)(186003)(6916009)(6506007)(52116002)(107886003)(478600001)(44832011)(66556008)(5660300002)(8936002)(2616005)(6486002)(8676002)(4744005)(316002)(66476007)(4326008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?9sBvo2+MwcUdcdr6IuJ2i1wsiYw3?= =?utf-8?q?3AqpTIYP6sE3AIgKOOgTmLMHTuqL2rhkXAG2wppmX+ewvY/riX3bfxL1bklv6Jf/C?= =?utf-8?q?9t5p1G4fbDUjU7e6sIlhNBGg1qlCDKLqyqUJahNArkLbMMcah7ORtqpkmgQNycps8?= =?utf-8?q?Pad4nqvnhIARQ53nFy2KbyhlHumRy+z6ZrYBDHF7FuU0YQbVJ625l1NqyfI1/DnHw?= =?utf-8?q?psAPRBUZthYQL0bFnJlTgToyDjkNoYRTOGBFIuAhcp4pVX14R4k5Vsaaoai0bXv3E?= =?utf-8?q?LIttN0Vd3esMJvtoUs39boTr0nF+aZ88CZrVr25/MPCOA5lqWV5osjpU0LUhfZZPD?= =?utf-8?q?9IXq3D9mpXR4kjR2j8xb+n5GADVOe7nTapV4oaisdmBqRv11eSv3uBzU/Ee4NxEM/?= =?utf-8?q?2sdoc7b9M/FFiZB7ewKcaj0FqdAVU7DyRNVtkgM/tzGAhk7ARNwPRS9TML1ttjaTX?= =?utf-8?q?7BOlvKt80tj2LNq3hNsLgAtO2a2k0nI5a6eQeEEbcBWi8HnBblny0FCg3rygySUFh?= =?utf-8?q?h8YuwnqMXQP4TVEh98ILqNLlQOmK44CRteEYFk+a7iuX/4udY7+zMM0k+IrFPTbUX?= =?utf-8?q?nRdHbfNhhEHEMzRre14vdA38jhMr54fLljuv0LhP0Kw+BCzB5KKAj8geK6mSqvGi8?= =?utf-8?q?woc7Mg3wLebvmSMWK4gtvBAzj4GAV/CTDBuMUIINzq5xkwCY5f2rKFfIoZZtryPXY?= =?utf-8?q?rcVhPUqADTXqm9LnnzRdtVew3Kwb3354RiJk58lPdy3qJnwd4d/xWpRGQlD9CDRvD?= =?utf-8?q?Ppxq3fCQOY4Z9qhfejxMwUDBzRWMI7AALNrsyO/l2a5ppSN8N0D3TBbQ0pRNa+pgb?= =?utf-8?q?xcRBQjzkcT8DWK5QWdCffw55RbykBRLubZ1UmVfiKozPYoD8dYc28LUe+hfzlcyPG?= =?utf-8?q?k5ZMzGY8o+9FAKUQ6BOoykXpyWwjhdlYJlWhK9NKnJNhICOMab6S0WenCokxhKyPg?= =?utf-8?q?l9Ffdj4ysAmwSf4EAx+Qwj2VLh/+6VUKTQbShLHXNRhcrKyJW3dv3kts9f7Clz3rp?= =?utf-8?q?7oScMkuk6O4Gfh7Iq3BEzHVTjTXQ8LDUBUsiJUZDbDcZ1KSSsJWiMf1Tqvkb19moX?= =?utf-8?q?YBQKlhvzgS4ET9by49+8lVOHBvUdwkbW+76cnxQ3UvQgQsQcYMkf5ULunbFBrbXnu?= =?utf-8?q?iCFCrMesKjZT/8zcy+B22ySnEHNV7CUGwJt1Myd6JZC/wx3MQbWO3lioP7PWgYL1c?= =?utf-8?q?+KTyUh5iPuwRUJcQ0x2eZ/4AVDMG6K1QrIAWh281XNpF2s/cnISeg4kYA2xsghmTA?= =?utf-8?q?xz7hSbnJH4rpQg/Nl2etXcfR7pxXLA7lyGt2v2AZRRYoJDXGWoNQCxLqMlwT0i8rX?= =?utf-8?q?lEtluttnnkEbD1cFMda93Sp83kL3epnGMBcS+lpYAn7jIQB1VVh+OxUeAWT10bfA9?= =?utf-8?q?CUNx6Mpse9wK47VyV+ry6kRpuuJnmPEhAikQcDLexdEjlqM06cFWTxEN1+wELyHdO?= =?utf-8?q?iL9wSfAzSiFdWJdo1aDSQqGOOXOTibuiqUU6vb0/18TXJzXABOIgnN5cilKy2EfcQ?= =?utf-8?q?PPuyoBToksvJS+PJHnavdpoace4avTFP4Q=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1a8942c-e138-4c31-34f9-08dab65f03b6 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:43.0204 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hKS09Wnh/augZsDhxHdinxUhDFN5MVDX7y79GaJ2nIGyd4tK7140BY9/Vt8iCVmHcqYAiKBZf7EgXbBGMLsbhi5SZyIF+XVSwNccl61d+OU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR13MB4739 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 the offload support of decap action of IPv6 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index d666446edf..93a9233b8b 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1643,6 +1643,8 @@ nfp_flow_merge_gre_key(struct nfp_app_fw_flower *app_fw_flower, tun6 = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; tun6->tun_key = tun_key; tun6->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + if (!is_mask) + ret = nfp_tun_add_ipv6_off(app_fw_flower, tun6->ipv6.ipv6_dst); } else { tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; tun4->tun_key = tun_key; From patchwork Tue Oct 25 07:59:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 119081 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 79B1DA0543; Tue, 25 Oct 2022 10:03:50 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9C76442C54; Tue, 25 Oct 2022 10:01:01 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2102.outbound.protection.outlook.com [40.107.237.102]) by mails.dpdk.org (Postfix) with ESMTP id C789242BA7 for ; Tue, 25 Oct 2022 10:00:46 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z8yEwyGVVxncSiB7W7Vuz/zrBjW9mDro5URgaF56onPmgilQiyK+7/unLxyN+3/jSXFaOf6p0P/CF7iGvWZcpLwIdmFukuCm4afoEJ6zW4XaJMf4Tsm01zfbBwREViY5Y2mrspc0AgguSKhnDRkP5MSPOteBnTbBBuiKJUmArlcLF2nf1xPxLJMOHqXQ7EHBsa/ZmO0TKZbK1nsZLlrkXRbBRg86v1J9IanEk9TVyXYrrzDpycwEVoTgIPL7Y9cAyDewweQ46R6G0Uni2KcpTIwQY7L5T2m5Kb6btNrC5tAVpoFpBRLEfNjTyh4z5NzbBmislCOjyQKpJM/MV1x93w== 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=3ZddnPhJ5PHgw36imy+YTVvTj+jqQKPKlE5PKkK8h5U=; b=XiI3wpHN+tfgTVAFRdhMuisfi3Ekvoy9bK2Fufgh+CkoKWqHLBcfLdBCavxbEASskTB4cARsBsfLeRAbb+S8NKDfG7l+XDGqIfVGrhfu2hKpthdRJjspAg6gsf8nucO7ovAZ8/luV7yTSxhqjKeLTE2axnYq/eTXy92BVFGr/ER3GrK14pEi41TRRo3eJPBZhsbh9fRGc8mGNxBdE+IlylZA0Wqu+M3E1rE4fFjF305B9eerTZEx+n5xG023hn+G4nmDf6UojzX6rbshjbPH41uhDXn+Ax6B6luT75Ts7zMpmQfbkSJTZpW0PpcW8s30DTSwSi8BlTP1Ds2LfG/4+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3ZddnPhJ5PHgw36imy+YTVvTj+jqQKPKlE5PKkK8h5U=; b=rk2g3Bs/kqNt36+T1vZoesii3cT+GEy3KHzgbPWP+tD0JgFGGmt+1lyDilZ6g5RyCNYIrPNzs+d5SLQFFFjR/NrofL/xFCQlSqE8/9oX4V7p4YbzRm0mcxyuyFzeYuyowdXiQdaeZBTZb5Xb3XLR83vNigEz4xIehnTp55KQbmg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BLAPR13MB4739.namprd13.prod.outlook.com (2603:10b6:208:306::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.25; Tue, 25 Oct 2022 08:00:45 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 25 Oct 2022 08:00:45 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v3 26/26] net/nfp: support new solution for tunnel decap action Date: Tue, 25 Oct 2022 15:59:18 +0800 Message-Id: <20221025075918.7778-27-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221025075918.7778-1-chaoyong.he@corigine.com> References: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> <20221025075918.7778-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR01CA0142.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BLAPR13MB4739:EE_ X-MS-Office365-Filtering-Correlation-Id: 86e4edad-7373-4f68-93d4-08dab65f04ff X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: x2RXjsNlaxAC+cwTMhst71KfWRhAGR0MhYnp6q1YxMZ98F/zTdOUOoCc7odAUN8lCJAyB3rTbyqkOxcu4tFm8g4eWEbhMIv1RYCQEl7TTdgvguGC2F2xXsvNar8ZTkyS2xz9lt27iuXx/ZUIVd+PbNMsKjLe9Pvj0+GXQPq1sp32b+IQ2VSQS1BYybUx9cbZtnLPboyYeanp3NoAoZTZ0VVYnHFzF1v5OnrgYE0xHWD4IdVQwwgyq4k8CinaKKkqyv+o3wRc4RkbKQbziMGXgqexWb56xdQToQw4SZw7UV6f2lQyulDoTb0PqYm0hjKjZe6wURppOfgD+sig4FazCGsYO2nUPPE+uKb2GbVeVP98qsxMmPLlY9ctIRjcAOI+EAPaSDn6tikst1mMyB1lgvApaM9l8Hx+s3MM9oEPt/wERFf7/XvW3GCTUUxtzjp7ANGadHE5HkpkmRLIopcbZnYXSkAuRxGmHXInoBxqwtV7XB/unixv+tFOhoO9lCXEcsmWuGWYED5IA98kjuxq6YTft2cSE1ZIXwMa1KqJLIHDEmV0kgVtXzkfau51NPkm17FkAuUvVYEPS1AU3wDJngTZCvwV3wtQ3Tgvig9taLmcygqzfSZ2zS3X2Hp5HxvONT/9Ot9FgPykGe+VgL1v9GJ2Bk8XlnDYyCqJA41hAeiTQRntex596HrN1RNL0rvPa+yOaD/YsAvwBBmNQLlHfJBopFPiwT4rCNPa2CGHsiDXFIbZdeJMT19sk0KZzk7CLDKrX0uSpQM2r6FQDo9gUA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(366004)(396003)(136003)(39850400004)(346002)(451199015)(36756003)(38350700002)(86362001)(38100700002)(41300700001)(83380400001)(66946007)(66574015)(1076003)(2906002)(6512007)(6666004)(26005)(186003)(6916009)(6506007)(52116002)(107886003)(478600001)(44832011)(66556008)(5660300002)(8936002)(2616005)(6486002)(30864003)(8676002)(316002)(66476007)(4326008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?kSRzoWbg9Qt7s2OMYnNStcVwon0k?= =?utf-8?q?nzth1U0J+pbNFQIUxjQax0kGVwj+9IkvLhKiTWK1FyX0XSSuz427AtfySh/oSOCSa?= =?utf-8?q?5+J0Hu03CKiLew6zqxWv8w+Ito7g3owL88VHjxIl3xTiqthGzTSUS/nnl+pYqg4DF?= =?utf-8?q?90ckXTRK6q2iTE/cO8D6RF4Dauk0m2T4ubRZf0WSufw0TjSSJZd29Q9qzCesXAhHu?= =?utf-8?q?LbhZ4PzmgobogDe87wwj9WeT7ULJlFf7SMbQ6Fu2CJTBy/ozzLPTq9zR0/Dk+JQM3?= =?utf-8?q?wyT3ZsIWsdAIQ0DJeFGwSZd8pxvZEop35f3wDK6kk7PQYbgSu/jknKA0jaxDBzWhb?= =?utf-8?q?n98KNg1GdY148AozRz/uzzW9iVZ0JoegNXsyAXjWLEudXVScAii5STIDcgKy5ax77?= =?utf-8?q?w9m6r9O7rNuMC6sZIaKVG/AkA9bpWyof6mgduHB/R6qvqxhKtpoR0XZkyD2gL7GT7?= =?utf-8?q?R7LWjMu+sj6MjaNG1/lSKhD+Xw2mvPJvPQFNYz5iyhvDkLliS/jCTN3+gt079uAZP?= =?utf-8?q?JRmGeRozZK6b5GWQankDG0C6teouCCaTC1tKCfwRtL2fNNvTaFM8aMdF6mwiSGaxT?= =?utf-8?q?b4iggCzHUJweXXqffdyRIcIGzfn9YxqoK2dtZKklobfAS43NxYi8UEd/p4EDLUkN3?= =?utf-8?q?OHyrA15MwtEAiFgLBCRXSG30N7ByafktKb3owplj29y5Cbi37kKdvOFB6z69nuaI8?= =?utf-8?q?77CzWpeySlg+gcW20qP5T10JtjirCMJHPH7BEkO9+0fyxKiCbIF0ji+hO+W4HVXTr?= =?utf-8?q?sJQ+qeNXCR5I52KJ+vxeUcUTQxXISvJwsMikfwlbHSx98lVGkhDpVitJlcwWvLsEx?= =?utf-8?q?/uTupWtIRgTGuFqdVW/hPUSBUJb+miXKuii/mGDI+MDAhrxdMR33By7GmG1GYRylc?= =?utf-8?q?lhXZifWvUMwbjp8FbAq+PvOBOjhwM4GstDA/hZNt23ilszRPy7c5rzjZniAnvm1Qe?= =?utf-8?q?E/xmySzks5qCRo+J7V1zoTHpGzsHSsDxE2Bi6cBF5tTg+POUJ601bRz7Nyk06PVR4?= =?utf-8?q?ea5ClWRnUb+my/ko1euw7mNhqw5lOvmItzyFh4vZuxkWGvklAr6h7azvNl1Evpdks?= =?utf-8?q?rmSiBwbgoeqnhej7RrhYLgJKgxG1QsGiSnsKHmnEsq9AGy3boSLWmmy9fZWPHZ9D2?= =?utf-8?q?JojG44CbkNWclotA7s5ZzVMM4yAMq3J642DlaSLLMk375Q+KFtoK/pujXALwkRFfO?= =?utf-8?q?RHNEXb4weQkdV7ESSpxVVQMe2tfJ6LjIFExnCOrzGcPN3g2DT1imyqGSEfWSosdFE?= =?utf-8?q?1QvCu9Z9GJVf0A2s3VUMzYoFRqD5Nl9N/PnCGN0OEBjQLe4O9H3Z6rnbIFGcDgweY?= =?utf-8?q?CcYaD6JiPs0yqyUy5G8nMAPRd+hSazI1wxx+uVPqsgNip36KQ9be53urnjEcIXcOk?= =?utf-8?q?YJwCccFMVTakE7BZz7+Cz6Yc8/s/RuTlyuQADQxvWTNhRxHPaIR4WXo6XJYzmllJ6?= =?utf-8?q?8/zbQjLDL8961IFcSS+GlVRH6zZvumzfdRGCzv4V8C36dmqB5Zf0zvJ4c1UEBJtPr?= =?utf-8?q?Pk1PhD88Hb3Sjx+l4YRLPzQHtK4ssoezUg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86e4edad-7373-4f68-93d4-08dab65f04ff X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 08:00:45.1632 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gfglg73ZfkFpDQ97ylfliE6Vb1GhlUqU9/s050eF1cipEpyJLVAEcWmsKK9YH64D0bDAY1AcyEGY50lAQJzjPzLu1n4AMYvf8/XpWsDFi+I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR13MB4739 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 The new version of flower firmware application add the support of a new tunnel decap action solution. It changes the structure of tunnel neighbor, and use a feature flag to indicate which tunnel decap action solution is used. Add the logic of read extra features from firmware, and store it in the app private structure. Adjust the data structure and related logic to make the PMD support both version of tunnel decap action solutions. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower.c | 14 +++ drivers/net/nfp/flower/nfp_flower.h | 24 +++++ drivers/net/nfp/flower/nfp_flower_cmsg.c | 4 + drivers/net/nfp/flower/nfp_flower_cmsg.h | 17 ++++ drivers/net/nfp/nfp_flow.c | 118 +++++++++++++++++++---- 5 files changed, 157 insertions(+), 20 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 41b0fe2337..aa8199dde2 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -1074,6 +1074,8 @@ int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev) { int ret; + int err; + uint64_t ext_features; unsigned int numa_node; struct nfp_net_hw *pf_hw; struct nfp_net_hw *ctrl_hw; @@ -1115,6 +1117,18 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev) goto vnic_cleanup; } + /* Read the extra features */ + ext_features = nfp_rtsym_read_le(pf_dev->sym_tbl, "_abi_flower_extra_features", + &err); + if (err != 0) { + PMD_INIT_LOG(ERR, "Couldn't read extra features from fw"); + ret = -EIO; + goto pf_cpp_area_cleanup; + } + + /* Store the extra features */ + app_fw_flower->ext_features = ext_features; + /* Fill in the PF vNIC and populate app struct */ app_fw_flower->pf_hw = pf_hw; pf_hw->ctrl_bar = pf_dev->ctrl_bar; diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index f199741190..c05a761a95 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -8,6 +8,21 @@ #include "../nfp_common.h" +/* Extra features bitmap. */ +#define NFP_FL_FEATS_GENEVE RTE_BIT64(0) +#define NFP_FL_NBI_MTU_SETTING RTE_BIT64(1) +#define NFP_FL_FEATS_GENEVE_OPT RTE_BIT64(2) +#define NFP_FL_FEATS_VLAN_PCP RTE_BIT64(3) +#define NFP_FL_FEATS_VF_RLIM RTE_BIT64(4) +#define NFP_FL_FEATS_FLOW_MOD RTE_BIT64(5) +#define NFP_FL_FEATS_PRE_TUN_RULES RTE_BIT64(6) +#define NFP_FL_FEATS_IPV6_TUN RTE_BIT64(7) +#define NFP_FL_FEATS_VLAN_QINQ RTE_BIT64(8) +#define NFP_FL_FEATS_QOS_PPS RTE_BIT64(9) +#define NFP_FL_FEATS_QOS_METER RTE_BIT64(10) +#define NFP_FL_FEATS_DECAP_V2 RTE_BIT64(11) +#define NFP_FL_FEATS_HOST_ACK RTE_BIT64(31) + /* * Flower fallback and ctrl path always adds and removes * 8 bytes of prepended data. Tx descriptors must point @@ -57,9 +72,18 @@ struct nfp_app_fw_flower { /* service id of ctrl vnic service */ uint32_t ctrl_vnic_id; + /* Flower extra features */ + uint64_t ext_features; + struct nfp_flow_priv *flow_priv; }; +static inline bool +nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower) +{ + return app_fw_flower->ext_features & NFP_FL_FEATS_DECAP_V2; +} + int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev); int nfp_secondary_init_app_fw_flower(struct nfp_cpp *cpp); uint16_t nfp_flower_pf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 76815cfe14..babdd8e36b 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -263,6 +263,8 @@ nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, } msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v4); + if (!nfp_flower_support_decap_v2(app_fw_flower)) + msg_len -= sizeof(struct nfp_flower_tun_neigh_ext); msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH, msg_len); memcpy(msg, payload, msg_len); @@ -292,6 +294,8 @@ nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, } msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v6); + if (!nfp_flower_support_decap_v2(app_fw_flower)) + msg_len -= sizeof(struct nfp_flower_tun_neigh_ext); msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6, msg_len); memcpy(msg, payload, msg_len); diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index a48da67222..04601cb0bd 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -135,6 +135,21 @@ struct nfp_flower_tun_neigh { rte_be32_t port_id; }; +/* + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | VLAN_TPID | VLAN_ID | + * +---------------------------------------------------------------+ + * 1 | HOST_CTX | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_tun_neigh_ext { + rte_be16_t vlan_tpid; + rte_be16_t vlan_tci; + rte_be32_t host_ctx; +}; + /* * NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V4 * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -157,6 +172,7 @@ struct nfp_flower_cmsg_tun_neigh_v4 { rte_be32_t dst_ipv4; rte_be32_t src_ipv4; struct nfp_flower_tun_neigh common; + struct nfp_flower_tun_neigh_ext ext; }; /* @@ -193,6 +209,7 @@ struct nfp_flower_cmsg_tun_neigh_v6 { uint8_t dst_ipv6[16]; uint8_t src_ipv6[16]; struct nfp_flower_tun_neigh common; + struct nfp_flower_tun_neigh_ext ext; }; #define NFP_TUN_PRE_TUN_RULE_DEL (1 << 0) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 93a9233b8b..af56e7bef2 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -2384,8 +2384,10 @@ nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, static int nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, struct rte_flow *nfp_flow) { + bool exists = false; struct nfp_fl_tun *tmp; struct nfp_fl_tun *tun; struct nfp_flow_priv *priv; @@ -2419,11 +2421,17 @@ nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, LIST_FOREACH(tmp, &priv->nn_list, next) { if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { tmp->ref_cnt++; - return 0; + exists = true; + break; } } - LIST_INSERT_HEAD(&priv->nn_list, tun, next); + if (exists) { + if (!nfp_flower_support_decap_v2(app_fw_flower)) + return 0; + } else { + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + } memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); payload.dst_ipv4 = ipv4->ipv4_src; @@ -2432,6 +2440,17 @@ nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); payload.common.port_id = port->in_port; + if (nfp_flower_support_decap_v2(app_fw_flower)) { + if (meta_tci->tci != 0) { + payload.ext.vlan_tci = meta_tci->tci; + payload.ext.vlan_tpid = 0x88a8; + } else { + payload.ext.vlan_tci = 0xffff; + payload.ext.vlan_tpid = 0xffff; + } + payload.ext.host_ctx = nfp_flow_meta->host_ctx_id; + } + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } @@ -2492,8 +2511,10 @@ nfp_flower_add_tun_neigh_v6_encap(struct nfp_app_fw_flower *app_fw_flower, static int nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, struct rte_flow *nfp_flow) { + bool exists = false; struct nfp_fl_tun *tmp; struct nfp_fl_tun *tun; struct nfp_flow_priv *priv; @@ -2527,11 +2548,17 @@ nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, LIST_FOREACH(tmp, &priv->nn_list, next) { if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { tmp->ref_cnt++; - return 0; + exists = true; + break; } } - LIST_INSERT_HEAD(&priv->nn_list, tun, next); + if (exists) { + if (!nfp_flower_support_decap_v2(app_fw_flower)) + return 0; + } else { + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + } memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); memcpy(payload.dst_ipv6, ipv6->ipv6_src, sizeof(payload.dst_ipv6)); @@ -2540,6 +2567,17 @@ nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); payload.common.port_id = port->in_port; + if (nfp_flower_support_decap_v2(app_fw_flower)) { + if (meta_tci->tci != 0) { + payload.ext.vlan_tci = meta_tci->tci; + payload.ext.vlan_tpid = 0x88a8; + } else { + payload.ext.vlan_tci = 0xffff; + payload.ext.vlan_tpid = 0xffff; + } + payload.ext.host_ctx = nfp_flow_meta->host_ctx_id; + } + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } @@ -2557,12 +2595,14 @@ nfp_flower_del_tun_neigh_v6(struct nfp_app_fw_flower *app_fw_flower, static int nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, - struct rte_flow *nfp_flow) + struct rte_flow *nfp_flow, + bool decap_flag) { int ret; bool flag = false; struct nfp_fl_tun *tmp; struct nfp_fl_tun *tun; + struct nfp_flower_in_port *port; tun = &nfp_flow->tun; LIST_FOREACH(tmp, &app_fw_flower->flow_priv->nn_list, next) { @@ -2590,6 +2630,40 @@ nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, } } + if (!decap_flag) + return 0; + + port = (struct nfp_flower_in_port *)(nfp_flow->payload.unmasked_data + + sizeof(struct nfp_fl_rule_metadata) + + sizeof(struct nfp_flower_meta_tci)); + + if (tmp->payload.v6_flag != 0) { + struct nfp_flower_cmsg_tun_neigh_v6 nn_v6; + memset(&nn_v6, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(nn_v6.dst_ipv6, tmp->payload.dst.dst_ipv6, sizeof(nn_v6.dst_ipv6)); + memcpy(nn_v6.src_ipv6, tmp->payload.src.src_ipv6, sizeof(nn_v6.src_ipv6)); + memcpy(nn_v6.common.dst_mac, tmp->payload.dst_addr, RTE_ETHER_ADDR_LEN); + memcpy(nn_v6.common.src_mac, tmp->payload.src_addr, RTE_ETHER_ADDR_LEN); + nn_v6.common.port_id = port->in_port; + + ret = nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &nn_v6); + } else { + struct nfp_flower_cmsg_tun_neigh_v4 nn_v4; + memset(&nn_v4, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + nn_v4.dst_ipv4 = tmp->payload.dst.dst_ipv4; + nn_v4.src_ipv4 = tmp->payload.src.src_ipv4; + memcpy(nn_v4.common.dst_mac, tmp->payload.dst_addr, RTE_ETHER_ADDR_LEN); + memcpy(nn_v4.common.src_mac, tmp->payload.src_addr, RTE_ETHER_ADDR_LEN); + nn_v4.common.port_id = port->in_port; + + ret = nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &nn_v4); + } + + if (ret != 0) { + PMD_DRV_LOG(DEBUG, "Failed to send the nn entry"); + return -EINVAL; + } + return 0; } @@ -2877,12 +2951,14 @@ nfp_pre_tun_table_check_del(struct nfp_flower_representor *repr, goto free_entry; } - ret = nfp_flower_cmsg_pre_tunnel_rule(repr->app_fw_flower, nfp_flow_meta, - nfp_mac_idx, true); - if (ret != 0) { - PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); - ret = -EINVAL; - goto free_entry; + if (!nfp_flower_support_decap_v2(repr->app_fw_flower)) { + ret = nfp_flower_cmsg_pre_tunnel_rule(repr->app_fw_flower, nfp_flow_meta, + nfp_mac_idx, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + ret = -EINVAL; + goto free_entry; + } } find_entry->ref_cnt = 1U; @@ -2933,18 +3009,20 @@ nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, return -EINVAL; } - ret = nfp_flower_cmsg_pre_tunnel_rule(app_fw_flower, nfp_flow_meta, - nfp_mac_idx, false); - if (ret != 0) { - PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); - return -EINVAL; + if (!nfp_flower_support_decap_v2(app_fw_flower)) { + ret = nfp_flower_cmsg_pre_tunnel_rule(app_fw_flower, nfp_flow_meta, + nfp_mac_idx, false); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + return -EINVAL; + } } meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) - return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow); + return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow_meta, nfp_flow); else - return nfp_flower_add_tun_neigh_v6_decap(app_fw_flower, nfp_flow); + return nfp_flower_add_tun_neigh_v6_decap(app_fw_flower, nfp_flow_meta, nfp_flow); } static int @@ -3654,11 +3732,11 @@ nfp_flow_destroy(struct rte_eth_dev *dev, break; case NFP_FLOW_ENCAP: /* Delete the entry from nn table */ - ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow, false); break; case NFP_FLOW_DECAP: /* Delete the entry from nn table */ - ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow, true); if (ret != 0) goto exit;