get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/117787/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 117787,
    "url": "https://patches.dpdk.org/api/patches/117787/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1665383329-23583-1-git-send-email-chaoyong.he@corigine.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1665383329-23583-1-git-send-email-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1665383329-23583-1-git-send-email-chaoyong.he@corigine.com",
    "date": "2022-10-10T06:28:49",
    "name": "net/nfp: add the feature of RSS based on VXLAN inner layer",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "24bfe5f01b7171012a4101944b6b2d02e3f32a55",
    "submitter": {
        "id": 2554,
        "url": "https://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1665383329-23583-1-git-send-email-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 25073,
            "url": "https://patches.dpdk.org/api/series/25073/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=25073",
            "date": "2022-10-10T06:28:49",
            "name": "net/nfp: add the feature of RSS based on VXLAN inner layer",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/25073/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/117787/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/117787/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 DA323A0544;\n\tMon, 10 Oct 2022 08:29:11 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 807CE4021E;\n\tMon, 10 Oct 2022 08:29:11 +0200 (CEST)",
            "from NAM10-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam10on2122.outbound.protection.outlook.com [40.107.93.122])\n by mails.dpdk.org (Postfix) with ESMTP id E760F40146\n for <dev@dpdk.org>; Mon, 10 Oct 2022 08:29:09 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by MW4PR13MB5940.namprd13.prod.outlook.com (2603:10b6:303:1b8::10)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.9; Mon, 10 Oct\n 2022 06:29:06 +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; Mon, 10 Oct 2022\n 06:29:06 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=FlCcVSXC9cpkTd9Nl1ft/lexWlFFO/WAaY1pn2I1y7Ugji4W/tZNX3bNHwZ3uOY5DDSZwq+pkkaW/nnmY/4aFLxbCC2oD3svi7HxE6pOaKZJyPkAhDNKUAkIbWyvd3WL+fj11WRv4U7CJJHRR6uAlPt0htZaWCN9vSvlHHkVSScOu7CI6HzA5/8N32VjN5lWsCN4uv2jn1IfpRsMkXSyAs0UdGvYRbqWJgoL1treIt24KjJRqlUB25o+XxwuEjw0K6M8WqoVWN9CKWHKGOVJCYRQcX9Unx/cYChTmwXhisUcmQvyBH7Dy/8DCn0oIuzfcqddTFnv87BRXo3iRXRTvA==",
        "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=oufUtIiUzCnJ6Lzv5W3V4Qn5VyBf4/oP+pg/xDXgZI4=;\n b=HLRKzKssX19+S59fvFyDCA2fWL07eKu7bz/fFDz2DwpX4QaCwdE+QDO2bGXY6aC5Wc+aZi+osaXkZXE8m4gczXUo2vmO7fu/IaZrP9KQQbQ+480zop9fXvNQe2+deTJVUA7lXPWS1uJBmzQOZgOXuji9D1qC0xbzzdmYDbICYHEmjfg4exHvT9t/anPY1H+g3QMMYfyRVz2B73CZzksEA8wFa2GkvVi23HP40op9JhtoxV+rpuaOIzKgEGxbPuCcVy8zqkf5WEIeMuGokpl4aVQ8VAJTFeZY1yoUZZY1GsEo7XE/LLFnkbGm4BDOvGo8FvVJ3n80u1Zdn71zBajd7g==",
        "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=oufUtIiUzCnJ6Lzv5W3V4Qn5VyBf4/oP+pg/xDXgZI4=;\n b=fShAbA6Us2Yqiq35uzNuEXz7EGekw1IhK5fruOHXHW0Ouu2JTweDdXDM0Qkb8H3d4tD5/P/q4xZiZNQOtgk6gorJbylgfAQiPmqcQN88db+2aACamOFa3rW/z7Y0BPZKnRYmXIaNqvDjQeYMVt9AZ5j3/L2aaumH5Pduj0Tj77Y=",
        "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] net/nfp: add the feature of RSS based on VXLAN inner layer",
        "Date": "Mon, 10 Oct 2022 14:28:49 +0800",
        "Message-Id": "<1665383329-23583-1-git-send-email-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-ClientProxiedBy": "SI2PR06CA0008.apcprd06.prod.outlook.com\n (2603:1096:4:186::23) 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_|MW4PR13MB5940:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "f957e286-2062-4474-d2f0-08daaa88bb47",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n IFHPBaFvEBtL7N547Pfe4ED70bp+c79FZRr9qs+ECimvgQTaktj9ChaR19RP143S2GFLmEmhxj1jgs9WHIpr6KR7CoAxJzDIVqQI9JdzdQLDiVlO4yq4Ch+Xje83cUbTwEj1UPUiKLU2bAqoWnRw3uIIQtmWjt9LsGx2jjIMwdDH9n1Ca6lZYBx7SqxmbqdPi/BQybeobgCCkAxNxZcEuJ9RpadhbdZq7urRVjihPjYAij4rH9IS8l94Xj9Nhh0uBFo3O+45dQCoXCinQTvxkk2rb21xi/UCynxbdptWhzcZfoNlnprZZPopFY5tZOoALvpNFQBCeKxLhDC77sSqU0BDG/mMe77o+zDRdPR3uDwfM0C3IvhMzInvCXxQ+Xit9Q0Ob0nDz6v+7WYSQW1SpH2EVFsVNamblFZFKDN/2ElghPdHVi18RSscVGKgkvTLQXlcvZzDDC8J+ukN2xUYRS6mJv2teI4bGufk61jNNJfcfQagXxfAGEFyL0Uke9Mp3MYabrtlvmFSRYpza7lWbwaLJTKPy0j21biOIMEC6IpIU+RftwCA1sVDj+Je8mtm3rQU4OXyjFNkj9KqFYxMmF97KpxRuKYKTSnzLPtR4rJyP7h0OWe1ySgkvCpBvuOUp2G3fzjY5I8UC0wtj3AFcnnx5jHkTa7OFNMkJ3sOnoPzdqVAadIEAyiZGXyY6gF49iNragbXN3oJh3/JXpaT4gCdlODIS8QZAOKwRS/8W64smTrJmXrGySp6jyzWNl3ashB4XlYJVbwQhbDrOaje0A==",
        "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)(396003)(376002)(39840400004)(136003)(346002)(366004)(451199015)(4326008)(478600001)(2616005)(186003)(41300700001)(66946007)(66476007)(5660300002)(38350700002)(38100700002)(8676002)(6486002)(66556008)(66574015)(26005)(6916009)(83380400001)(316002)(86362001)(44832011)(6666004)(6506007)(8936002)(6512007)(52116002)(36756003)(2906002)(107886003);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?sGJwiKyZajWuqCQ0SwGvKAiarntt?=\n\t=?utf-8?q?Ulgsjyxoyonf838EY4uR6NENfxuFBgOoBRQVY/LeozGIj+yFoRfyrVpb4ibtV0BCl?=\n\t=?utf-8?q?EtsT845yZO76o7SOWPo7jJfg+Dtb2PMSF/HNWDIa76pmOzi1b0DTTD+cfomNWm5Dp?=\n\t=?utf-8?q?0TpBY+ODSuGX0PhicTgSTzQwaTgyu72WhEDs4bw4xaZQYB/mFYTtO4KC7GIHq2axg?=\n\t=?utf-8?q?iiueop40TjGXeN5qoVqorH7v166EAogUkUl20jmDCFnlJN2MwjxhWidNup6T7Ve5U?=\n\t=?utf-8?q?4ImV7yyNACC5BFkYWSFyY0IAi7hEC6r4uBBsb/opQTr5ZUswmQQQvyzC0SkHJA7cE?=\n\t=?utf-8?q?b8/g9OL7gL2Yw88FufuEMBSCIj30vs/GR+NfZRGgY/hs0ioOeI8WZv3q4svP7Vx1F?=\n\t=?utf-8?q?Q8Oihq/8XFAJY3gNwRwr6yRcelfIOGBQtEvrxZSj+bBxzDTGqx/Izo3cFjhBMlJLl?=\n\t=?utf-8?q?RZqDdXMQhR8LcaNBBgL8ui2iuNU8MuiZcX8mMeBLLxCWFjRkZhA3bnhLkrbVEFzOV?=\n\t=?utf-8?q?vzMXRXVaAlEvvI3xQZtFJe0eeBWLx5eBwwwAxTDLeN8fCNK+vDUVjPLXILY4qzreb?=\n\t=?utf-8?q?2uB7pZMbh8Dnd1bn/Y2TcG1vbGenwX0anYU+VqucY/EdG1fWO7cqhDPLwoYz6zg0A?=\n\t=?utf-8?q?8KArM+6z4OzRq4j17IIwnSibMGFqLlD97uVHAG0JGQAhUqRWMaOxCo+nXO1w7XpLd?=\n\t=?utf-8?q?tzs84T3AhidF050wKU/uR3fm66Fmj0N6Ah/H2P8pbl0HGKKhM321rdErWQIX3+FsZ?=\n\t=?utf-8?q?ANJd3t4v3Yl4EP/wMGZqmV73Xrj5TkKSdB5bQsknjSXcZN52YB3LyWCOrLfERzHuS?=\n\t=?utf-8?q?U+jtke3DpnMaZbawwKCbuJMpzzZ6Q3amkyRglco8s9qSPumlO1gFfIWjTejFhUc0u?=\n\t=?utf-8?q?0a/+vJTlnUnmcz7njRVx4tgBssU1UhZzRVx6o9Ncw8E2xhI0drrDM+WtUIufLM9wO?=\n\t=?utf-8?q?9lwbTIs3Tw4pE8apNdyM4kppQJXnu2kRf8NTyj3KsohtC+Yiu88FJURDIvh9rMqYo?=\n\t=?utf-8?q?jZo3cEemuOrq3ViiAkLPcxLWh7watdGLyAhT7CElZO/Dk0hzP7ACz9MnUXB34+z4d?=\n\t=?utf-8?q?6nwLoNJ98hAHz0IJe+PX3A7lnhAAbTs58ZSwUx8bNBledF0+zMEOPMn8orj+ojeKA?=\n\t=?utf-8?q?oAun8P4YXuOC8ZAF6U9p6nobsfLp9QiFxgO5YQdL3DnX44LjAdj2UjiuLKuswvhuX?=\n\t=?utf-8?q?wmAE6mYRLTpXaooUEN0fvn0MjU+i4f7jTI5cZrHAeKaB0vAicNJTrqI+F4VW50nHh?=\n\t=?utf-8?q?ZKBUKMrOHXk7cuRFV271zLIXPRwPNaeQ4EiNkKyt7DukSCqw3wzOelj6c4vbrT+PV?=\n\t=?utf-8?q?En6PjL0lxiV5iWAA8R2B5rPHZmBsmxlbIUGKmS6i9QU/wYi18HrR4e7Luz6Il8OB5?=\n\t=?utf-8?q?va+nzVJxGauqNwAq9AYS6dZwe6P0u0LT76f+xip3qFRkS5+EegQCAD3lCyUbQTZ3o?=\n\t=?utf-8?q?6mXH6koCzX81MYqZZzMJpTxQ7Y7VZzmQE5lHDedZG6MTlgN4LTabezVpRvGh93E07?=\n\t=?utf-8?q?z0aqmbt2CcyAyU8LWBiVe6evIaPnNnZSTA=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n f957e286-2062-4474-d2f0-08daaa88bb47",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "10 Oct 2022 06:29:06.2229 (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 HYHMtwGRE5yazLa0G6dljhCvesZjJ3rYY9HUlzCKjCxS0VDpLnLi1xYy7zzxwaaXZY85MqY4Cm4h6POc7+Dyjeo+cNkJJnWvp1TMlHHcyBc=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MW4PR13MB5940",
        "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 logics to support the feature of RSS packets based on\nthe inner layer of VXLAN tunnel.\n\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>\n\nDepends-on: series-24819 (\"preparation for the rte_flow offload of nfp PMD\")\n\n---\n drivers/net/nfp/flower/nfp_flower.c             |   2 +-\n drivers/net/nfp/flower/nfp_flower_cmsg.c        |   1 +\n drivers/net/nfp/flower/nfp_flower_ctrl.c        |   2 +-\n drivers/net/nfp/flower/nfp_flower_representor.c |   2 +-\n drivers/net/nfp/nfp_common.c                    |  33 +++++++\n drivers/net/nfp/nfp_common.h                    |   4 +\n drivers/net/nfp/nfp_cpp_bridge.h                |   2 -\n drivers/net/nfp/nfp_ethdev.c                    | 111 ++++++++++++++++++++++++\n drivers/net/nfp/nfp_ethdev_vf.c                 |   1 +\n drivers/net/nfp/nfp_rxtx.c                      |   1 +\n 10 files changed, 154 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex 3e97f5c..da96d2f 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -10,9 +10,9 @@\n #include <ethdev_pci.h>\n #include <ethdev_driver.h>\n \n+#include \"../nfp_ctrl.h\"\n #include \"../nfp_common.h\"\n #include \"../nfp_logs.h\"\n-#include \"../nfp_ctrl.h\"\n #include \"../nfp_cpp_bridge.h\"\n #include \"../nfp_rxtx.h\"\n #include \"../nfpcore/nfp_mip.h\"\ndiff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c\nindex 750a629..b719eb2 100644\n--- a/drivers/net/nfp/flower/nfp_flower_cmsg.c\n+++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c\n@@ -5,6 +5,7 @@\n \n #include \"../nfpcore/nfp_nsp.h\"\n #include \"../nfp_logs.h\"\n+#include \"../nfp_ctrl.h\"\n #include \"../nfp_common.h\"\n #include \"nfp_flower.h\"\n #include \"nfp_flower_cmsg.h\"\ndiff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.c b/drivers/net/nfp/flower/nfp_flower_ctrl.c\nindex df908ef..961ca34 100644\n--- a/drivers/net/nfp/flower/nfp_flower_ctrl.c\n+++ b/drivers/net/nfp/flower/nfp_flower_ctrl.c\n@@ -6,9 +6,9 @@\n #include <rte_common.h>\n #include <ethdev_pci.h>\n \n+#include \"../nfp_ctrl.h\"\n #include \"../nfp_common.h\"\n #include \"../nfp_logs.h\"\n-#include \"../nfp_ctrl.h\"\n #include \"../nfp_rxtx.h\"\n #include \"nfp_flower.h\"\n #include \"nfp_flower_ctrl.h\"\ndiff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c\nindex 0e60f50..8db73e0 100644\n--- a/drivers/net/nfp/flower/nfp_flower_representor.c\n+++ b/drivers/net/nfp/flower/nfp_flower_representor.c\n@@ -6,9 +6,9 @@\n #include <rte_common.h>\n #include <ethdev_pci.h>\n \n+#include \"../nfp_ctrl.h\"\n #include \"../nfp_common.h\"\n #include \"../nfp_logs.h\"\n-#include \"../nfp_ctrl.h\"\n #include \"../nfp_rxtx.h\"\n #include \"../nfpcore/nfp_mip.h\"\n #include \"../nfpcore/nfp_rtsym.h\"\ndiff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c\nindex 07781a1..ec6a669 100644\n--- a/drivers/net/nfp/nfp_common.c\n+++ b/drivers/net/nfp/nfp_common.c\n@@ -37,6 +37,7 @@\n #include \"nfpcore/nfp_rtsym.h\"\n #include \"nfpcore/nfp_nsp.h\"\n \n+#include \"nfp_ctrl.h\"\n #include \"nfp_common.h\"\n #include \"nfp_ctrl.h\"\n #include \"nfp_rxtx.h\"\n@@ -1370,6 +1371,38 @@\n \t}\n }\n \n+int\n+nfp_net_set_vxlan_port(struct nfp_net_hw *hw,\n+\t\tsize_t idx,\n+\t\tuint16_t port)\n+{\n+\tint ret;\n+\tuint32_t i;\n+\n+\tif (idx > NFP_NET_N_VXLAN_PORTS) {\n+\t\tPMD_DRV_LOG(ERR, \"The idx value is out of range.\");\n+\t\treturn -ERANGE;\n+\t}\n+\n+\thw->vxlan_ports[idx] = port;\n+\n+\tfor (i = 0; i < NFP_NET_N_VXLAN_PORTS; i += 2) {\n+\t\tnn_cfg_writel(hw, NFP_NET_CFG_VXLAN_PORT + i * sizeof(port),\n+\t\t\t(hw->vxlan_ports[i + 1] << 16) | hw->vxlan_ports[i]);\n+\t}\n+\n+\trte_spinlock_lock(&hw->reconfig_lock);\n+\n+\tnn_cfg_writel(hw, NFP_NET_CFG_UPDATE, NFP_NET_CFG_UPDATE_VXLAN);\n+\trte_wmb();\n+\n+\tret = __nfp_net_reconfig(hw, NFP_NET_CFG_UPDATE_VXLAN);\n+\n+\trte_spinlock_unlock(&hw->reconfig_lock);\n+\n+\treturn ret;\n+}\n+\n RTE_LOG_REGISTER_SUFFIX(nfp_logtype_init, init, NOTICE);\n RTE_LOG_REGISTER_SUFFIX(nfp_logtype_driver, driver, NOTICE);\n RTE_LOG_REGISTER_SUFFIX(nfp_logtype_cpp, cpp, NOTICE);\ndiff --git a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h\nindex 27ea9c2..cc9ac01 100644\n--- a/drivers/net/nfp/nfp_common.h\n+++ b/drivers/net/nfp/nfp_common.h\n@@ -209,6 +209,9 @@ struct nfp_net_hw {\n \tint stride_rx;\n \tint stride_tx;\n \n+\tuint16_t vxlan_ports[NFP_NET_N_VXLAN_PORTS];\n+\tuint8_t vxlan_usecnt[NFP_NET_N_VXLAN_PORTS];\n+\n \tuint8_t *qcp_cfg;\n \trte_spinlock_t reconfig_lock;\n \n@@ -438,6 +441,7 @@ int nfp_net_rss_hash_conf_get(struct rte_eth_dev *dev,\n void nfp_net_close_rx_queue(struct rte_eth_dev *dev);\n void nfp_net_stop_tx_queue(struct rte_eth_dev *dev);\n void nfp_net_close_tx_queue(struct rte_eth_dev *dev);\n+int nfp_net_set_vxlan_port(struct nfp_net_hw *hw, size_t idx, uint16_t port);\n \n #define NFP_NET_DEV_PRIVATE_TO_HW(adapter)\\\n \t(&((struct nfp_net_adapter *)adapter)->hw)\ndiff --git a/drivers/net/nfp/nfp_cpp_bridge.h b/drivers/net/nfp/nfp_cpp_bridge.h\nindex 7fee3a9..2abc77c 100644\n--- a/drivers/net/nfp/nfp_cpp_bridge.h\n+++ b/drivers/net/nfp/nfp_cpp_bridge.h\n@@ -16,8 +16,6 @@\n #ifndef _NFP_CPP_BRIDGE_H_\n #define _NFP_CPP_BRIDGE_H_\n \n-#include \"nfp_common.h\"\n-\n #define NFP_CPP_MEMIO_BOUNDARY\t(1 << 20)\n #define NFP_BRIDGE_OP_READ\t20\n #define NFP_BRIDGE_OP_WRITE\t30\ndiff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex e131021..0e3d82a 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -32,6 +32,7 @@\n #include \"nfpcore/nfp_rtsym.h\"\n #include \"nfpcore/nfp_nsp.h\"\n \n+#include \"nfp_ctrl.h\"\n #include \"nfp_common.h\"\n #include \"nfp_ctrl.h\"\n #include \"nfp_rxtx.h\"\n@@ -138,6 +139,10 @@\n \n \tupdate |= NFP_NET_CFG_UPDATE_GEN | NFP_NET_CFG_UPDATE_RING;\n \n+\t/* Enable vxlan */\n+\tnew_ctrl |= NFP_NET_CFG_CTRL_VXLAN;\n+\tupdate |= NFP_NET_CFG_UPDATE_VXLAN;\n+\n \tif (hw->cap & NFP_NET_CFG_CTRL_RINGCFG)\n \t\tnew_ctrl |= NFP_NET_CFG_CTRL_RINGCFG;\n \n@@ -319,6 +324,110 @@\n \treturn 0;\n }\n \n+static int\n+nfp_net_find_vxlan_idx(struct nfp_net_hw *hw,\n+\t\tuint16_t port,\n+\t\tuint32_t *idx)\n+{\n+\tuint32_t i;\n+\tint free_idx = -1;\n+\n+\tfor (i = 0; i < NFP_NET_N_VXLAN_PORTS; i++) {\n+\t\tif (hw->vxlan_ports[i] == port) {\n+\t\t\tfree_idx = i;\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\tif (hw->vxlan_usecnt[i] == 0) {\n+\t\t\tfree_idx = i;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tif (free_idx == -1)\n+\t\treturn -EINVAL;\n+\n+\t*idx = free_idx;\n+\n+\treturn 0;\n+}\n+\n+static int\n+nfp_udp_tunnel_port_add(struct rte_eth_dev *dev,\n+\t\tstruct rte_eth_udp_tunnel *tunnel_udp)\n+{\n+\tint ret;\n+\tuint32_t idx;\n+\tuint16_t vxlan_port;\n+\tstruct nfp_net_hw *hw;\n+\tenum rte_eth_tunnel_type tnl_type;\n+\n+\thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tvxlan_port = tunnel_udp->udp_port;\n+\ttnl_type   = tunnel_udp->prot_type;\n+\n+\tif (tnl_type != RTE_ETH_TUNNEL_TYPE_VXLAN) {\n+\t\tPMD_DRV_LOG(ERR, \"Not VXLAN tunnel\");\n+\t\treturn -ENOTSUP;\n+\t}\n+\n+\tret = nfp_net_find_vxlan_idx(hw, vxlan_port, &idx);\n+\tif (ret != 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Failed find valid vxlan idx\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (hw->vxlan_usecnt[idx] == 0) {\n+\t\tret = nfp_net_set_vxlan_port(hw, idx, vxlan_port);\n+\t\tif (ret != 0) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Failed set vxlan port\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t}\n+\n+\thw->vxlan_usecnt[idx]++;\n+\n+\treturn 0;\n+}\n+\n+static int\n+nfp_udp_tunnel_port_del(struct rte_eth_dev *dev,\n+\t\tstruct rte_eth_udp_tunnel *tunnel_udp)\n+{\n+\tint ret;\n+\tuint32_t idx;\n+\tuint16_t vxlan_port;\n+\tstruct nfp_net_hw *hw;\n+\tenum rte_eth_tunnel_type tnl_type;\n+\n+\thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tvxlan_port = tunnel_udp->udp_port;\n+\ttnl_type   = tunnel_udp->prot_type;\n+\n+\tif (tnl_type != RTE_ETH_TUNNEL_TYPE_VXLAN) {\n+\t\tPMD_DRV_LOG(ERR, \"Not VXLAN tunnel\");\n+\t\treturn -ENOTSUP;\n+\t}\n+\n+\tret = nfp_net_find_vxlan_idx(hw, vxlan_port, &idx);\n+\tif (ret != 0 || hw->vxlan_usecnt[idx] == 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Failed find valid vxlan idx\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\thw->vxlan_usecnt[idx]--;\n+\n+\tif (hw->vxlan_usecnt[idx] == 0) {\n+\t\tret = nfp_net_set_vxlan_port(hw, idx, 0);\n+\t\tif (ret != 0) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Failed set vxlan port\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n /* Initialise and register driver with DPDK Application */\n static const struct eth_dev_ops nfp_net_eth_dev_ops = {\n \t.dev_configure\t\t= nfp_net_configure,\n@@ -347,6 +456,8 @@\n \t.tx_queue_release\t= nfp_net_tx_queue_release,\n \t.rx_queue_intr_enable   = nfp_rx_queue_intr_enable,\n \t.rx_queue_intr_disable  = nfp_rx_queue_intr_disable,\n+\t.udp_tunnel_port_add    = nfp_udp_tunnel_port_add,\n+\t.udp_tunnel_port_del    = nfp_udp_tunnel_port_del,\n };\n \n static inline int\ndiff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c\nindex 6c6caef..fa0d289 100644\n--- a/drivers/net/nfp/nfp_ethdev_vf.c\n+++ b/drivers/net/nfp/nfp_ethdev_vf.c\n@@ -18,6 +18,7 @@\n #include \"nfpcore/nfp_mip.h\"\n #include \"nfpcore/nfp_rtsym.h\"\n \n+#include \"nfp_ctrl.h\"\n #include \"nfp_common.h\"\n #include \"nfp_ctrl.h\"\n #include \"nfp_rxtx.h\"\ndiff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c\nindex b8c874d..b764845 100644\n--- a/drivers/net/nfp/nfp_rxtx.c\n+++ b/drivers/net/nfp/nfp_rxtx.c\n@@ -16,6 +16,7 @@\n #include <ethdev_driver.h>\n #include <ethdev_pci.h>\n \n+#include \"nfp_ctrl.h\"\n #include \"nfp_common.h\"\n #include \"nfp_ctrl.h\"\n #include \"nfp_rxtx.h\"\n",
    "prefixes": []
}