Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/118955/?format=api
http://patches.dpdk.org/api/patches/118955/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1666427069-10553-9-git-send-email-chaoyong.he@corigine.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1666427069-10553-9-git-send-email-chaoyong.he@corigine.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1666427069-10553-9-git-send-email-chaoyong.he@corigine.com", "date": "2022-10-22T08:24:12", "name": "[v2,08/25] net/nfp: prepare for IPv6 UDP tunnel decap flow action", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "2d4444936b88290938bd0db74367e4401a399ffe", "submitter": { "id": 2554, "url": "http://patches.dpdk.org/api/people/2554/?format=api", "name": "Chaoyong He", "email": "chaoyong.he@corigine.com" }, "delegate": { "id": 319, "url": "http://patches.dpdk.org/api/users/319/?format=api", "username": "fyigit", "first_name": "Ferruh", "last_name": "Yigit", "email": "ferruh.yigit@amd.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1666427069-10553-9-git-send-email-chaoyong.he@corigine.com/mbox/", "series": [ { "id": 25372, "url": "http://patches.dpdk.org/api/series/25372/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=25372", "date": "2022-10-22T08:24:04", "name": "add the extend rte_flow offload support of nfp PMD", "version": 2, "mbox": "http://patches.dpdk.org/series/25372/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/118955/comments/", "check": "success", "checks": "http://patches.dpdk.org/api/patches/118955/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id E8F6BA0032;\n\tSat, 22 Oct 2022 10:25:53 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C6EE742826;\n\tSat, 22 Oct 2022 10:25:11 +0200 (CEST)", "from NAM04-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam04on2121.outbound.protection.outlook.com [40.107.101.121])\n by mails.dpdk.org (Postfix) with ESMTP id CDED04280E\n for <dev@dpdk.org>; Sat, 22 Oct 2022 10:25:04 +0200 (CEST)", "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct\n 2022 08:25:03 +0000", "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Sat, 22 Oct 2022\n 08:25:03 +0000" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=LKRmgoB/RuyzTAZajkP+RZP0b01VHIRqBJZq+SJbLGwWnzBiYvxsW/Agn2vy/tfIWzb9ucg0eoKjHBOs9iN3O6wzSdjfODajYX/yeycv1emg3MfyrlWu3Ifd371OVwcHNPdAx3P7iYn8G9aQRA0mTk4Nq+tzQ+jK7OtOXbXvPLjKqTiuFtUP2reSTQGkpJ+HVFA4EKBgM2M6FvyDeydNiy3IOSy0suxbHKguaj6dyJoPtXYjFm2YCnzAkrD2yLJ+hQIQkuLfISvpcuXI2plDg9VkK7oDhjL3pjTUp+B5bG1sVNLVY+bbQFetqVoDmxm0G/GCezDHAuX/Iq4bdlLzfg==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n 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;\n bh=jliCd/nIeGTL/9h591nPJmFwNw8wmS1SEpWrvudXAvg=;\n b=keDLoFz0UWchbGUXv7hu1dc5i4A2IqosMyrv502DwurvGgl+NRi9qXvK9D/qXTXz39c93eNXARs4NvtpbaXmS+KHIKyHwH5k5eU5YEYd5VNY67UutcpP13evHbRC6WZrp8Jmix6qGtYgdu0crNd6GYPID1QtSBA2uiMyvbNt9NHt2KYEgLbBPAJX0McpxPbjcANtw23Bs+gR4IKUV10eV0+jtF5IuseX/cb1Ivd6IS0XwNycrb6gqwKSsckL3sYG5uUeQInrUv500xIZ/sh4bX6xHDRfODsiT69sp5by6TnZpKLIvW/XgW2F2Td40Z+ToNdJ6TTWk47a5HER97Grfw==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;\n dkim=pass header.d=corigine.com; arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=jliCd/nIeGTL/9h591nPJmFwNw8wmS1SEpWrvudXAvg=;\n b=GcSHOphly6oNBmIhHiR5iW/NBApGIsaZ9r2V/DBQ9fZ+mun7ubfCjbUrXVq8fNogDug3IWOHVsfaRGyK+8lwPffJ30TY+yEJD7MnSdXwfv5CJIIX/qZc6NbpZ6IpdsZ+7qESbY8jdlWvUYPBpSio+xeQkFSzAosToRTrG/E7l1I=", "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=corigine.com;", "From": "Chaoyong He <chaoyong.he@corigine.com>", "To": "dev@dpdk.org", "Cc": "oss-drivers@corigine.com, niklas.soderlund@corigine.com,\n Chaoyong He <chaoyong.he@corigine.com>", "Subject": "[PATCH v2 08/25] net/nfp: prepare for IPv6 UDP tunnel decap flow\n action", "Date": "Sat, 22 Oct 2022 16:24:12 +0800", "Message-Id": "<1666427069-10553-9-git-send-email-chaoyong.he@corigine.com>", "X-Mailer": "git-send-email 1.8.3.1", "In-Reply-To": "<1666427069-10553-1-git-send-email-chaoyong.he@corigine.com>", "References": "<1666063359-34283-1-git-send-email-chaoyong.he@corigine.com>\n <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com>", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-ClientProxiedBy": "SG2PR02CA0056.apcprd02.prod.outlook.com\n (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com\n (2603:10b6:a03:424::5)", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_", "X-MS-Office365-Filtering-Correlation-Id": "9f520451-c213-48db-3983-08dab406eac4", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;", "X-Microsoft-Antispam-Message-Info": "\n dulH9spawytQdEbHg0IBO84Nq+28fUT0z4BmNadupRA3S5TzipXYfs0+0z52FPI81F26fWXf+6fCwmfgx4KJZCSdVslozdkJzc8nNnDLyfyYAhHt6D8RAllxq7dpplPHTzLd7zVn/sIGS4bpIHKsTbiJKfY7IZcQltMgwGD9LFipMgnx7TCQ0kIZu2QY8b4odepXSpNIG1EmOe4WCKTMQgJAN9YrYJ3ch/hyrPNCIRbk/OWlb2bE2dU64m/CTrE4pLUJEhR+Ft6F3fu6NLhI2c1PXI8ZTbgNhx6u9ZZLLJpIpA2V/DLZrScpwjBFeArVNKIKWpVH84L/OlynJFdTAFgm8rQUi76FFcdzaqfT4sSi7NweM2/FLPKVdDYVIRo0otUHKcyWXQcEWvstpMWTZ5rZAJ0NuOVQG6HHSWAUmK8SLBCkBNRruCAzRFDG0R4CDyrOl6R4RTv51ZLPHLkkSWbUoD4FzRL6IPOWqs8uLtaykTTprkJdvW4eHGXSKtiFZse26vin5w4F4x9Xb2HilglutuBvVhXEfKAQ6YNh9VUtWiMMwCweWSVRQSKO1m3opmba5p5/cwQVnLIjx1RcrDWU11jhw99PdCeJcEGmJH5ZOy5LRIa5PneXd3I+PCU2M/x2yXzVR/5zWEUTY31NjH7uvescguzZNIgAieD4Zmkw8kL0ZOu/CjkUCLVVNlR78p/V8Tg0owoChb6rZ7WaTJNcD0iJyDDKMhNnLHzd9mJPtWCKEJ2KkZ5C215quKmz1WQkXaxIduFQ5U+DyfdTrhSGqQBFU/K+BucO8y3culI=", "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230022)(4636009)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(66574015)(83380400001)(2616005)(38350700002)(86362001)(44832011)(30864003)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003);\n DIR:OUT; SFP:1102;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?0cGTgQxGPmfVR7RNZiEHh+UzyIa9?=\n\t=?utf-8?q?F/I4tb8lkbVi3z6Fls90dcmf06XqiptpqSARVziQCmAa2hVtF7PNGCguOh3GpBkfp?=\n\t=?utf-8?q?a8h3xVBDQ+qvNEC8fo3+3UvizQxURHHQoMOuOq9GNsUyGY1XyiPZMzPSTQJ5Y16vI?=\n\t=?utf-8?q?6hjQSKu34L65gN3Ej5zWvT7cx/owy/AxsgYVE3APYkTRtqsRnlDLg5sSbkO1GSZjX?=\n\t=?utf-8?q?uRY5obsG5P9MNg6aviZ6FxGC00YADCg1RyHf3Ph4/nYpkAw0ye+eKAjAgkQAeiGz+?=\n\t=?utf-8?q?QjQkg5T0yV86Evh9atnZSSTRZEOeRHDqiggr1RRrkSo+VHfbiam0Xne2AmXljcOfk?=\n\t=?utf-8?q?4LoLktd2MvRTaCitpm4CdeFgatLMcfwhbA2xxx+0m/mC+LpIQe4N6E+jO6QMqUcAC?=\n\t=?utf-8?q?xrfNFJ/lZ7R2gvWiyC1yD0W2Eg0C5AoCv2ig7hSI+lzCws8rNy2B2ELLaO4DDh9z9?=\n\t=?utf-8?q?rPrmnYZZHih4e1XOjGEW2Q19Sq2WzGwmYJC8Y0tuiMyxu8PGbmyTL1KOwGErinVI1?=\n\t=?utf-8?q?3ArF+zmu7duQHPSOLazUP8Dv4FpJmDYJAZTUvAsAO8iWj0U0Ohs5FQb55D5aB7Tyu?=\n\t=?utf-8?q?9ZS53SGV1E7F1kzqQKF6mb8jl0wHPZtSvSuG4qx1BCsRCTy/V3/cB4Y85Ay1mvTt/?=\n\t=?utf-8?q?m0h/aI0xQ5sbFmtcH/7wA1GmwOD5WqOmE6LCMDM3X3P8ETf8msk1QQk2YCe9JvSSe?=\n\t=?utf-8?q?k9yf8YDqQYxgVfo+HnqaCFtCGyQM5dVBvU0kKfYiXDy0aaKjuAe5+tVhmGNbxwqzp?=\n\t=?utf-8?q?bdNnavVr2SsBqneINLIZ4OsndqHViMxFH3pSbdO6CQhJ3L/I2cNlz+uIDhdDMkkSL?=\n\t=?utf-8?q?k06P2HlVh7buIEviXuv+Umi4NAC43vV3IQr0QR8WRqMjn7iJvLDEqoJQ8zm+YgUAx?=\n\t=?utf-8?q?wW4/oxY0BWhBH8A7MTP9EXt4wAmoO16Wt8A4DnmXlM/on8PvH4CHNfsLF6ILyzOz6?=\n\t=?utf-8?q?uVBjigWm+/tRdyJMU5+yQVI2hnp20Jv9DnZ03Lu6Gb/yJ7Ek2CtbWv3cpCFF2ny1W?=\n\t=?utf-8?q?CX5jwNX/bNr1CuQUas0ShYxl6zgfTvwi3ulS3NY2fAEZQZWCg21Mf/rVhv35KFbjt?=\n\t=?utf-8?q?4dQXt/a6yfh5YlISIa+dQW5L9/LbUh+d8zZO5CjsgBT29hRaqpdqEUUIYAQwGMe1B?=\n\t=?utf-8?q?juInexy+qPqVLmAYewR1waTj1RQzr0+zYMaDDcRHqA4bjr5bu61nZrss2u6r2E9zJ?=\n\t=?utf-8?q?cpJQhdF6RtrDYrxDC3j3YcxAedm7VipZ5jnzVhHpEiCJr94VFSA9xQ7TV+Ijq1i1i?=\n\t=?utf-8?q?arSAJwtfwV8goBDrIVHCJy7DlQIzs1wHSh1x56CWDgetp4MFAwwJ2wTmkGziIoJ37?=\n\t=?utf-8?q?D8riu9liHZ4qgNAMYKfNABqjsps3fCnwmECSlvSw6GEM83Gv2JRFLO2wduP1bY0K5?=\n\t=?utf-8?q?6ruZMgqRFirZFxe7qHd4qTTmGxWqknPtmG2WvxXdhZzqlmx4MDx5nvVhlXVIibU+j?=\n\t=?utf-8?q?mR74Af0TZAuJLw16Pkyfvu/43KUesa0bbCyhj1wdQMlbF1aoZU+C189I9kih7NAWg?=\n\t=?utf-8?q?d4ZRbJo3a6NlSwn6B6fXsoYx30/0Ca3TKA=3D=3D?=", "X-OriginatorOrg": "corigine.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 9f520451-c213-48db-3983-08dab406eac4", "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "22 Oct 2022 08:25:02.9128 (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": "\n PkxlogRLtjOqq0yTzgweLw/ZkOPIk9pqEV4hCFbCU2X/CMyYwjgVF9neKBE2RKBMTjy0ZzTPw/VNz/F3eKz0TyP1CLeqx3OwM6Mab55w4y8=", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH7PR13MB5454", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org" }, "content": "Add the related data structure and functions, prepare for\nthe decap action of IPv6 UDP tunnel.\n\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>\n---\n drivers/net/nfp/flower/nfp_flower_cmsg.c | 42 +++++++++\n drivers/net/nfp/flower/nfp_flower_cmsg.h | 24 +++++\n drivers/net/nfp/nfp_flow.c | 145 ++++++++++++++++++++++++++++++-\n drivers/net/nfp/nfp_flow.h | 9 ++\n 4 files changed, 217 insertions(+), 3 deletions(-)", "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c\nindex f18f3de..76815cf 100644\n--- a/drivers/net/nfp/flower/nfp_flower_cmsg.c\n+++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c\n@@ -348,6 +348,48 @@\n }\n \n int\n+nfp_flower_cmsg_tun_off_v6(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tuint16_t cnt;\n+\tuint32_t count = 0;\n+\tstruct rte_mbuf *mbuf;\n+\tstruct nfp_flow_priv *priv;\n+\tstruct nfp_ipv6_addr_entry *entry;\n+\tstruct nfp_flower_cmsg_tun_ipv6_addr *msg;\n+\n+\tmbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool);\n+\tif (mbuf == NULL) {\n+\t\tPMD_DRV_LOG(DEBUG, \"Failed to alloc mbuf for v6 tun addr\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_IPS_V6, sizeof(*msg));\n+\n+\tpriv = app_fw_flower->flow_priv;\n+\trte_spinlock_lock(&priv->ipv6_off_lock);\n+\tLIST_FOREACH(entry, &priv->ipv6_off_list, next) {\n+\t\tif (count >= NFP_FL_IPV6_ADDRS_MAX) {\n+\t\t\trte_spinlock_unlock(&priv->ipv6_off_lock);\n+\t\t\tPMD_DRV_LOG(ERR, \"IPv6 offload exceeds limit.\");\n+\t\t\treturn -ERANGE;\n+\t\t}\n+\t\tmemcpy(&msg->ipv6_addr[count * 16], entry->ipv6_addr, 16UL);\n+\t\tcount++;\n+\t}\n+\tmsg->count = rte_cpu_to_be_32(count);\n+\trte_spinlock_unlock(&priv->ipv6_off_lock);\n+\n+\tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\n+\tif (cnt == 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Send cmsg through ctrl vnic failed.\");\n+\t\trte_pktmbuf_free(mbuf);\n+\t\treturn -EIO;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+int\n nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower,\n \t\tstruct nfp_fl_rule_metadata *nfp_flow_meta,\n \t\tuint16_t mac_idx,\ndiff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h\nindex 0933dac..61f2f83 100644\n--- a/drivers/net/nfp/flower/nfp_flower_cmsg.h\n+++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h\n@@ -280,6 +280,29 @@ struct nfp_flower_cmsg_tun_ipv4_addr {\n \trte_be32_t ipv4_addr[NFP_FL_IPV4_ADDRS_MAX];\n };\n \n+#define NFP_FL_IPV6_ADDRS_MAX 4\n+\n+/*\n+ * NFP_FLOWER_CMSG_TYPE_TUN_IP_V6\n+ * 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\n+ * -----\\ 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\n+ * +---------------------------------------------------------------+\n+ * 0 | Number of IP Addresses |\n+ * +---------------------------------------------------------------+\n+ * 1 | IP Address1 #1 |\n+ * +---------------------------------------------------------------+\n+ * 2 | IP Address1 #2 |\n+ * +---------------------------------------------------------------+\n+ * | ... |\n+ * +---------------------------------------------------------------+\n+ * 16 | IP Address4 #4 |\n+ * +---------------------------------------------------------------+\n+ */\n+struct nfp_flower_cmsg_tun_ipv6_addr {\n+\trte_be32_t count;\n+\tuint8_t ipv6_addr[NFP_FL_IPV6_ADDRS_MAX * 16];\n+};\n+\n /*\n * NFP_FLOWER_CMSG_TYPE_FLOW_STATS\n * 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\n@@ -802,6 +825,7 @@ int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower,\n int nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower,\n \t\tstruct nfp_flower_cmsg_tun_neigh_v6 *payload);\n int nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower);\n+int nfp_flower_cmsg_tun_off_v6(struct nfp_app_fw_flower *app_fw_flower);\n int nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower,\n \t\tstruct nfp_fl_rule_metadata *nfp_flow_meta,\n \t\tuint16_t mac_idx,\ndiff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c\nindex c088d24..ad484b9 100644\n--- a/drivers/net/nfp/nfp_flow.c\n+++ b/drivers/net/nfp/nfp_flow.c\n@@ -476,16 +476,95 @@ struct nfp_pre_tun_entry {\n \treturn 0;\n }\n \n+__rte_unused static int\n+nfp_tun_add_ipv6_off(struct nfp_app_fw_flower *app_fw_flower,\n+\t\tuint8_t ipv6[])\n+{\n+\tstruct nfp_flow_priv *priv;\n+\tstruct nfp_ipv6_addr_entry *entry;\n+\tstruct nfp_ipv6_addr_entry *tmp_entry;\n+\n+\tpriv = app_fw_flower->flow_priv;\n+\n+\trte_spinlock_lock(&priv->ipv6_off_lock);\n+\tLIST_FOREACH(entry, &priv->ipv6_off_list, next) {\n+\t\tif (!memcmp(entry->ipv6_addr, ipv6, sizeof(entry->ipv6_addr))) {\n+\t\t\tentry->ref_count++;\n+\t\t\trte_spinlock_unlock(&priv->ipv6_off_lock);\n+\t\t\treturn 0;\n+\t\t}\n+\t}\n+\trte_spinlock_unlock(&priv->ipv6_off_lock);\n+\n+\ttmp_entry = rte_zmalloc(\"nfp_ipv6_off\", sizeof(struct nfp_ipv6_addr_entry), 0);\n+\tif (tmp_entry == NULL) {\n+\t\tPMD_DRV_LOG(ERR, \"Mem error when offloading IP6 address.\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tmemcpy(tmp_entry->ipv6_addr, ipv6, sizeof(tmp_entry->ipv6_addr));\n+\ttmp_entry->ref_count = 1;\n+\n+\trte_spinlock_lock(&priv->ipv6_off_lock);\n+\tLIST_INSERT_HEAD(&priv->ipv6_off_list, tmp_entry, next);\n+\trte_spinlock_unlock(&priv->ipv6_off_lock);\n+\n+\treturn nfp_flower_cmsg_tun_off_v6(app_fw_flower);\n+}\n+\n+static int\n+nfp_tun_del_ipv6_off(struct nfp_app_fw_flower *app_fw_flower,\n+\t\tuint8_t ipv6[])\n+{\n+\tstruct nfp_flow_priv *priv;\n+\tstruct nfp_ipv6_addr_entry *entry;\n+\n+\tpriv = app_fw_flower->flow_priv;\n+\n+\trte_spinlock_lock(&priv->ipv6_off_lock);\n+\tLIST_FOREACH(entry, &priv->ipv6_off_list, next) {\n+\t\tif (!memcmp(entry->ipv6_addr, ipv6, sizeof(entry->ipv6_addr))) {\n+\t\t\tentry->ref_count--;\n+\t\t\tif (entry->ref_count == 0) {\n+\t\t\t\tLIST_REMOVE(entry, next);\n+\t\t\t\trte_free(entry);\n+\t\t\t\trte_spinlock_unlock(&priv->ipv6_off_lock);\n+\t\t\t\treturn nfp_flower_cmsg_tun_off_v6(app_fw_flower);\n+\t\t\t}\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\trte_spinlock_unlock(&priv->ipv6_off_lock);\n+\n+\treturn 0;\n+}\n+\n static int\n nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr,\n \t\tstruct rte_flow *nfp_flow)\n {\n \tint ret;\n+\tuint32_t key_layer2 = 0;\n \tstruct nfp_flower_ipv4_udp_tun *udp4;\n+\tstruct nfp_flower_ipv6_udp_tun *udp6;\n+\tstruct nfp_flower_meta_tci *meta_tci;\n+\tstruct nfp_flower_ext_meta *ext_meta = NULL;\n \n-\tudp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data -\n-\t\t\tsizeof(struct nfp_flower_ipv4_udp_tun));\n-\tret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst);\n+\tmeta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data;\n+\tif (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META)\n+\t\text_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1);\n+\n+\tif (ext_meta != NULL)\n+\t\tkey_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2);\n+\n+\tif (key_layer2 & NFP_FLOWER_LAYER2_TUN_IPV6) {\n+\t\tudp6 = (struct nfp_flower_ipv6_udp_tun *)(nfp_flow->payload.mask_data -\n+\t\t\t\tsizeof(struct nfp_flower_ipv6_udp_tun));\n+\t\tret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst);\n+\t} else {\n+\t\tudp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data -\n+\t\t\t\tsizeof(struct nfp_flower_ipv4_udp_tun));\n+\t\tret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst);\n+\t}\n \n \treturn ret;\n }\n@@ -2078,6 +2157,59 @@ struct nfp_pre_tun_entry {\n \treturn nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload);\n }\n \n+__rte_unused static int\n+nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower,\n+\t\tstruct rte_flow *nfp_flow)\n+{\n+\tstruct nfp_fl_tun *tmp;\n+\tstruct nfp_fl_tun *tun;\n+\tstruct nfp_flow_priv *priv;\n+\tstruct nfp_flower_ipv6 *ipv6;\n+\tstruct nfp_flower_mac_mpls *eth;\n+\tstruct nfp_flower_in_port *port;\n+\tstruct nfp_flower_meta_tci *meta_tci;\n+\tstruct nfp_flower_cmsg_tun_neigh_v6 payload;\n+\n+\tmeta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data;\n+\tport = (struct nfp_flower_in_port *)(meta_tci + 1);\n+\teth = (struct nfp_flower_mac_mpls *)(port + 1);\n+\n+\tif (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP)\n+\t\tipv6 = (struct nfp_flower_ipv6 *)((char *)eth +\n+\t\t\t\tsizeof(struct nfp_flower_mac_mpls) +\n+\t\t\t\tsizeof(struct nfp_flower_tp_ports));\n+\telse\n+\t\tipv6 = (struct nfp_flower_ipv6 *)((char *)eth +\n+\t\t\t\tsizeof(struct nfp_flower_mac_mpls));\n+\n+\ttun = &nfp_flow->tun;\n+\ttun->payload.v6_flag = 1;\n+\tmemcpy(tun->payload.dst.dst_ipv6, ipv6->ipv6_src, sizeof(tun->payload.dst.dst_ipv6));\n+\tmemcpy(tun->payload.src.src_ipv6, ipv6->ipv6_dst, sizeof(tun->payload.src.src_ipv6));\n+\tmemcpy(tun->payload.dst_addr, eth->mac_src, RTE_ETHER_ADDR_LEN);\n+\tmemcpy(tun->payload.src_addr, eth->mac_dst, RTE_ETHER_ADDR_LEN);\n+\n+\ttun->ref_cnt = 1;\n+\tpriv = app_fw_flower->flow_priv;\n+\tLIST_FOREACH(tmp, &priv->nn_list, next) {\n+\t\tif (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) {\n+\t\t\ttmp->ref_cnt++;\n+\t\t\treturn 0;\n+\t\t}\n+\t}\n+\n+\tLIST_INSERT_HEAD(&priv->nn_list, tun, next);\n+\n+\tmemset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6));\n+\tmemcpy(payload.dst_ipv6, ipv6->ipv6_src, sizeof(payload.dst_ipv6));\n+\tmemcpy(payload.src_ipv6, ipv6->ipv6_dst, sizeof(payload.src_ipv6));\n+\tmemcpy(payload.common.dst_mac, eth->mac_src, RTE_ETHER_ADDR_LEN);\n+\tmemcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN);\n+\tpayload.common.port_id = port->in_port;\n+\n+\treturn nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload);\n+}\n+\n static int\n nfp_flower_del_tun_neigh_v6(struct nfp_app_fw_flower *app_fw_flower,\n \t\tuint8_t *ipv6)\n@@ -2401,6 +2533,9 @@ struct nfp_pre_tun_entry {\n \tnfp_mac_idx = (find_entry->mac_index << 8) |\n \t\t\tNFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT |\n \t\t\tNFP_TUN_PRE_TUN_IDX_BIT;\n+\tif (nfp_flow->tun.payload.v6_flag != 0)\n+\t\tnfp_mac_idx |= NFP_TUN_PRE_TUN_IPV6_BIT;\n+\n \tret = nfp_flower_cmsg_tun_mac_rule(repr->app_fw_flower, &repr->mac_addr,\n \t\t\tnfp_mac_idx, true);\n \tif (ret != 0) {\n@@ -3263,6 +3398,10 @@ struct nfp_pre_tun_entry {\n \trte_spinlock_init(&priv->ipv4_off_lock);\n \tLIST_INIT(&priv->ipv4_off_list);\n \n+\t/* ipv6 off list */\n+\trte_spinlock_init(&priv->ipv6_off_lock);\n+\tLIST_INIT(&priv->ipv6_off_list);\n+\n \t/* neighbor next list */\n \tLIST_INIT(&priv->nn_list);\n \ndiff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h\nindex f536da2..a6994e0 100644\n--- a/drivers/net/nfp/nfp_flow.h\n+++ b/drivers/net/nfp/nfp_flow.h\n@@ -177,6 +177,12 @@ struct nfp_ipv4_addr_entry {\n \tint ref_count;\n };\n \n+struct nfp_ipv6_addr_entry {\n+\tLIST_ENTRY(nfp_ipv6_addr_entry) next;\n+\tuint8_t ipv6_addr[16];\n+\tint ref_count;\n+};\n+\n #define NFP_TUN_PRE_TUN_RULE_LIMIT 32\n \n struct nfp_flow_priv {\n@@ -201,6 +207,9 @@ struct nfp_flow_priv {\n \t/* IPv4 off */\n \tLIST_HEAD(, nfp_ipv4_addr_entry) ipv4_off_list; /**< Store ipv4 off */\n \trte_spinlock_t ipv4_off_lock; /**< Lock the ipv4 off list */\n+\t/* IPv6 off */\n+\tLIST_HEAD(, nfp_ipv6_addr_entry) ipv6_off_list; /**< Store ipv6 off */\n+\trte_spinlock_t ipv6_off_lock; /**< Lock the ipv6 off list */\n \t/* neighbor next */\n \tLIST_HEAD(, nfp_fl_tun)nn_list; /**< Store nn entry */\n };\n", "prefixes": [ "v2", "08/25" ] }{ "id": 118955, "url": "