get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 128238,
    "url": "http://patchwork.dpdk.org/api/patches/128238/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20230607015709.336420-4-chaoyong.he@corigine.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20230607015709.336420-4-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230607015709.336420-4-chaoyong.he@corigine.com",
    "date": "2023-06-07T01:57:02",
    "name": "[03/10] net/nfp: refactor the insert metadata logic of NFD3",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "41e5c58f111e1419f90c8d181bdc43a0827364bd",
    "submitter": {
        "id": 2554,
        "url": "http://patchwork.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20230607015709.336420-4-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 28380,
            "url": "http://patchwork.dpdk.org/api/series/28380/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=28380",
            "date": "2023-06-07T01:56:59",
            "name": "support rte_flow for flower firmware with NFDk",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/28380/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/128238/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/128238/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 B45CA42C45;\n\tWed,  7 Jun 2023 03:58:17 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id F3B49410F6;\n\tWed,  7 Jun 2023 03:57:59 +0200 (CEST)",
            "from NAM11-CO1-obe.outbound.protection.outlook.com\n (mail-co1nam11on2138.outbound.protection.outlook.com [40.107.220.138])\n by mails.dpdk.org (Postfix) with ESMTP id 93280406B6\n for <dev@dpdk.org>; Wed,  7 Jun 2023 03:57:58 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by PH7PR13MB5453.namprd13.prod.outlook.com (2603:10b6:510:138::5)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.33; Wed, 7 Jun\n 2023 01:57:56 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::d2cb:a650:e1ce:2174]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::d2cb:a650:e1ce:2174%3]) with mapi id 15.20.6455.030; Wed, 7 Jun 2023\n 01:57:56 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Y2WyFqnW+Q0efrozzn9NUCGJOKqaNAl5viKwDExgdsClRtatHz+kxBdisLmybMLSDJEb84PuyEUWnbivgpkdcgZkYOauET4BSiJnqeObeQpAUnV8K80IthPiixolLnk4VJLf16mahvRP0cFtCPgFEfXhdbwm7MJJs3ByXq1WMTMr5wF7SSI4OYAtWLxmT6CqgGZYal5rkyqq2J1tmRAwdKqPeXeZUEptwza5W7skFfGMSaFI0qgjq442fstA80JeRIVamb1Apley3zpwmxal4IkI4+MbdIDf6SmRmiyAVBWNxyhMWvLDVy8drE7SaUhZIiNTBUxHBuAQOn4eRJZFeQ==",
        "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=6LMOINbcu8xOomInaX26cUMN/wImon5Nbg5MDyhEVNI=;\n b=S54legLqNHJwtiWzNW+YoSEv5KPR+mKo8cDm5f5it+SAwTIGXHq7MX/u2JUbJqizinpxcDbTrH+hEIATn4JvFMbtIG6VUOBYn16j5isGY86Xk99a2dmbuULFN5+NC1N9QIE/E6/ggsUHn27OWEEbLF6LzCAzqgAu35UDvm369HCeVud0NCoLYE3bwuah4hWhAZzuiwBc7aUYCYn4Q4ul31pl/a+uNkmrGKehN1QVOh4/qkG1g1Ml/1KriSQIe8mANjZVlm6fY9tk8QtlBO8hGX16xjTWRMNqh5nYg0V3o+nSDNcnJE3b8RjqyIwS8yuEB+UrnvL2aCHhKTAXE5ZR2Q==",
        "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=6LMOINbcu8xOomInaX26cUMN/wImon5Nbg5MDyhEVNI=;\n b=hUQthDIPTsZonjpxTChH/vMDQdIm+OLhdrxK9Y17MPkcZXIa4jgjmJc+H/Svb637yN/OSiMnyKafb6b1qohD/sCqtlGEoJvSFMEvendQdConKmj6NiDJUXipYlsZ7+W9rOd5xdfP7C2cl1i456eXjhkWwPUrcGmlPjlcpCBEbAg=",
        "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 03/10] net/nfp: refactor the insert metadata logic of NFD3",
        "Date": "Wed,  7 Jun 2023 09:57:02 +0800",
        "Message-Id": "<20230607015709.336420-4-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20230607015709.336420-1-chaoyong.he@corigine.com>",
        "References": "<20230607015709.336420-1-chaoyong.he@corigine.com>",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-ClientProxiedBy": "SG2PR02CA0131.apcprd02.prod.outlook.com\n (2603:1096:4:188::6) 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_|PH7PR13MB5453:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "b9b627a3-f080-46d8-deea-08db66fa9d01",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n RY+R+Y/xA/kS2ZnkIBH9WnkfFR2fyPjaZs/yBCRiflaDDAdW2BEVrJKhkDBAwRByksvHgdDfpi8pnaMmjJuEOWrIDiyYxfZdwXDv1tmIFaTGuNL9YtHzj2tn3t9RaPkJPTEA40/Va82jDifPzKx3fhbILoBEkR1Ferx8UjSSOMMWcdQtwNUmwd9SaD2Fno4Qb/q1t/xk2lgO3yLHpKjlIyu5dEVwm2UlqsT+fJvA6vtjN8tRQoEcqUrYTWJ2G3Ya9xDZqFv8VZO4oxDeh1yZVYiVbNc5gdkCZzpLHC0By3GuAzzVH2PHrjooJyRGLJPRZNOLHwL2KsRVKi+T3q8VJstWjbjCqhJtm2pM3Vjb1WucGCvoyoP/RsIM0zHs0m4/xl/Pc9p8r6MSQUzrFVCui7f9AzIrK+omx5AF9GIQM2+11TkwG3f6CpiSu9RfUdixkCYsdPsuJb5ekUpWLXCD7yP1iiS0/ywKcu5zpg3C/BG5VjAZUpsN9W/G2p2Kq/dUr6E9w7FD0/TP4YPT0O/yAOxfKz/1BOrcK9euiPe4z9bKImDNodJhA+sfB5JqAPLo22Uvg2E987O+v9rRvm6rrmXKkrqadBZ1IrUnEig25Sb7eT3bCihQyKqQw4e6h0Sa",
        "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:(13230028)(4636009)(346002)(396003)(376002)(136003)(366004)(39840400004)(451199021)(107886003)(1076003)(6506007)(26005)(6512007)(36756003)(66574015)(83380400001)(38350700002)(86362001)(38100700002)(186003)(2616005)(8676002)(4326008)(41300700001)(44832011)(30864003)(6916009)(478600001)(66946007)(66476007)(2906002)(316002)(8936002)(5660300002)(6486002)(52116002)(66556008)(6666004);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?B4peIA2hAVOKZqXGTdJ5VakCoFXT?=\n\t=?utf-8?q?CvqVBxQzr/8wkojoY2GqjdWuaq2MRmd+MdYwYhcld/dlOdXDgVDEdatVX78u0Le9h?=\n\t=?utf-8?q?JdStBKISws8x54IoIZxnu03T7yftNJ0441d4vng9kyuMttk07DpQvUsBVhr6D+ynY?=\n\t=?utf-8?q?xb8zv9dDa7Z+n0s8JhI5FbEinXUjHehadAoBY/xzvHXZLhlzS0i1XzlBPB3iWbeJR?=\n\t=?utf-8?q?zjHfhlZZTf9sdTu3fVgZwTXU/uN5kddNtXv6r2sltPHk+uKhSsHoH71C6nE9ym9Fg?=\n\t=?utf-8?q?r8FJaeNHp5ioU66tXlEnUKSEcVRR0qr27V/XzabwBWLvEyzPKTnXms4M19ZVm5mVW?=\n\t=?utf-8?q?PGJNbJVVydKoVCtypBBoBZK7hILieGvt5AbiNNtdp90CdVyCamuR5RWP20uPoNWrO?=\n\t=?utf-8?q?2o3rIA9uIFwC/ybXqt3yflb1vCqhaoKC9ZBUS/5+EqVcrP8jNJQ0CO1+AVcECUyY/?=\n\t=?utf-8?q?cCYg5IejyoJ4errUi+gr14qRJz1fmamGe21gJNEbcr9tCTV+ec0F/Ihgq8ibcLQ+7?=\n\t=?utf-8?q?dxgS240DegEICXtBqjX+JNBN4QTrytcUGQrAmiXAr2L/dQ1oj86Mp/GstEPfA2leC?=\n\t=?utf-8?q?lqlcZBGD7XQeC4SrdXNnT4Hzshftv/ZSRTW+uFwTWJCjMN05syUmIMJ9KL2JVoEYF?=\n\t=?utf-8?q?SHCfghSB6JARyrvGYvuLTnrkmxlPr7kRoHebaOmnlUFEzyRMiIb4BrqtybvhdxpdM?=\n\t=?utf-8?q?3sSpGAP8j8SASyaRvN/SabhRJsNAMcWvJbMw9Tj6TtoNofzBzH/ltEX3wZj8nj3eJ?=\n\t=?utf-8?q?9OX2OuPlYIz8MugYUCG8fRCt2JBFZExiJbLW6BapgF10W7O59r6/bRNVvNJU9gsI8?=\n\t=?utf-8?q?8cNc1TvfCfPMbzN0qi7jo/PFRhIIF8LWfpPeNe8BeJi0RB8iNzm+wyCya3faWeS3E?=\n\t=?utf-8?q?V52fpwMJvKJWHnAT6HVJ6HXF9X8XHkLi9Neu+5BqoPd4ia/S+6/23Hd8t1xyMxX2S?=\n\t=?utf-8?q?UYDGYZwf0GDeQUnk9sF6hQE8s/6TSyC2JSxN4RsSs8W1smzvhxMOuxsky3dVehtB1?=\n\t=?utf-8?q?S/UGcerg32AxHajYLhKb40Knzvz7USRFVho3q41GPpcfF1l3G8cQGGjMgFTtOh0gS?=\n\t=?utf-8?q?FwO00W0rEHld0wdewZX3Ujg3yRGNnkGZWtsCJDV2zeX1a1P4/ykVHSNRf0RNNEp+y?=\n\t=?utf-8?q?brsSInAbmXQSBigejf50fRtXMqq55Aku4xmYHb/DCnILtMRDScPB3QrEeZLoKqS/f?=\n\t=?utf-8?q?M+6w7xQshtx6zJSlowDC9tAoSJsTC97H/jMmLl1ryU7reVWFCTVkYkOFBR3WUR764?=\n\t=?utf-8?q?aIninYdOTP+3SZq98Nv+MSkJna/BuaQA70f5AQMFQ4XDLlI+tK8l0X+97UDnol4zK?=\n\t=?utf-8?q?+/Rw+GwrZVA6Mv/ql38Aswh9dCrQtOHeMJCsi1igwNVbjBUKlhwekDfvSgFM7osX7?=\n\t=?utf-8?q?AEtR2BwPudDJDXBS/aiYCBMhJinfzp3L+AcJo/+6UBdQCQW3gk1OkDFVWYa0rd5ii?=\n\t=?utf-8?q?/U7XdLYaNHEX5wRIGVDZkfCP35PNDlJ6pe6+/U+Q0oIPiMVqgjAZWdcxbC3l+yNsc?=\n\t=?utf-8?q?RWoCdsHHi7z7U0KDHSqRy5dF9wKgjcCctg=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n b9b627a3-f080-46d8-deea-08db66fa9d01",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "07 Jun 2023 01:57:56.7735 (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 8hlBZtpTA5gYp02+p3TI7L5KGzCNaZVD9CClQXs9FvENUB6tpUigfcVfiOd5Y7LRIrXSy76QG5X2EVLVjXkHHt9irT1wOMJqDRGSLNH7ky0=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH7PR13MB5453",
        "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": "Extract the insert metadata logic of NFD3 into a single function to\nsimplify the logics.\n\nAdd the data structure aims to hold all the different function pointers\nwhich related to different NFD version.\n\nAlso add a register function to initialize the function pointers.\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.c           | 26 ++++++++\n drivers/net/nfp/flower/nfp_flower.h           | 16 ++++-\n drivers/net/nfp/flower/nfp_flower_cmsg.c      | 63 ++++++++++---------\n .../net/nfp/flower/nfp_flower_representor.c   | 10 +--\n drivers/net/nfp/nfd3/nfp_nfd3.h               |  2 +\n drivers/net/nfp/nfd3/nfp_nfd3_dp.c            | 16 +++++\n 6 files changed, 97 insertions(+), 36 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex afb4e5b344..3636c347bb 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -1058,6 +1058,30 @@ nfp_flower_enable_services(struct nfp_app_fw_flower *app_fw_flower)\n \treturn 0;\n }\n \n+static void\n+nfp_flower_pkt_add_metadata_register(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tstruct nfp_flower_nfd_func *nfd_func;\n+\n+\tnfd_func = &app_fw_flower->nfd_func;\n+\n+\tnfd_func->pkt_add_metadata_t = nfp_flower_nfd3_pkt_add_metadata;\n+}\n+\n+uint32_t\n+nfp_flower_pkt_add_metadata(struct nfp_app_fw_flower *app_fw_flower,\n+\t\tstruct rte_mbuf *mbuf,\n+\t\tuint32_t port_id)\n+{\n+\treturn app_fw_flower->nfd_func.pkt_add_metadata_t(mbuf, port_id);\n+}\n+\n+static void\n+nfp_flower_nfd_func_register(struct nfp_app_fw_flower *app_fw_flower)\n+{\n+\tnfp_flower_pkt_add_metadata_register(app_fw_flower);\n+}\n+\n int\n nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev)\n {\n@@ -1135,6 +1159,8 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev)\n \t\tgoto pf_cpp_area_cleanup;\n \t}\n \n+\tnfp_flower_nfd_func_register(app_fw_flower);\n+\n \t/* The ctrl vNIC struct comes directly after the PF one */\n \tapp_fw_flower->ctrl_hw = pf_hw + 1;\n \tctrl_hw = app_fw_flower->ctrl_hw;\ndiff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h\nindex 0ce5f7bd9e..3bc5924b71 100644\n--- a/drivers/net/nfp/flower/nfp_flower.h\n+++ b/drivers/net/nfp/flower/nfp_flower.h\n@@ -29,11 +29,20 @@\n  * to the correct packet data offset after metadata has\n  * been added\n  */\n-#define FLOWER_PKT_DATA_OFFSET 8\n+#define FLOWER_PKT_DATA_OFFSET (NFP_NET_META_HEADER_SIZE + NFP_NET_META_FIELD_SIZE)\n \n #define MAX_FLOWER_PHYPORTS 8\n #define MAX_FLOWER_VFS 64\n \n+struct nfp_app_fw_flower;\n+\n+/* The function pointers for different NFD version */\n+struct nfp_flower_nfd_func {\n+\t/** Function used to add metadata into pkt. */\n+\tuint32_t (*pkt_add_metadata_t)(struct rte_mbuf *mbuf,\n+\t\tuint32_t port_id);\n+};\n+\n /* The flower application's private structure */\n struct nfp_app_fw_flower {\n \t/* switch domain for this app */\n@@ -77,6 +86,9 @@ struct nfp_app_fw_flower {\n \n \tstruct nfp_flow_priv *flow_priv;\n \tstruct nfp_mtr_priv *mtr_priv;\n+\n+\t/* Function pointers for different NFD version */\n+\tstruct nfp_flower_nfd_func nfd_func;\n };\n \n static inline bool\n@@ -93,5 +105,7 @@ uint16_t nfp_flower_pf_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t\tuint16_t nb_pkts);\n int nfp_flower_pf_start(struct rte_eth_dev *dev);\n int nfp_flower_pf_stop(struct rte_eth_dev *dev);\n+uint32_t nfp_flower_pkt_add_metadata(struct nfp_app_fw_flower *app_fw_flower,\n+\t\tstruct rte_mbuf *mbuf, uint32_t port_id);\n \n #endif /* _NFP_FLOWER_H_ */\ndiff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c\nindex 430dd9c316..00f94c7492 100644\n--- a/drivers/net/nfp/flower/nfp_flower_cmsg.c\n+++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c\n@@ -12,28 +12,19 @@\n #include \"nfp_flower_representor.h\"\n \n static void *\n-nfp_flower_cmsg_init(struct rte_mbuf *m,\n+nfp_flower_cmsg_init(struct nfp_app_fw_flower *app_fw_flower,\n+\t\tstruct rte_mbuf *m,\n \t\tenum nfp_flower_cmsg_type type,\n \t\tuint32_t size)\n {\n \tchar *pkt;\n-\tuint32_t data;\n \tuint32_t new_size = size;\n \tstruct nfp_flower_cmsg_hdr *hdr;\n \n \tpkt = rte_pktmbuf_mtod(m, char *);\n \tPMD_DRV_LOG(DEBUG, \"flower_cmsg_init using pkt at %p\", pkt);\n \n-\tdata = rte_cpu_to_be_32(NFP_NET_META_PORTID);\n-\trte_memcpy(pkt, &data, 4);\n-\tpkt += 4;\n-\tnew_size += 4;\n-\n-\t/* First the metadata as flower requires it */\n-\tdata = rte_cpu_to_be_32(NFP_META_PORT_ID_CTRL);\n-\trte_memcpy(pkt, &data, 4);\n-\tpkt += 4;\n-\tnew_size += 4;\n+\tnew_size += nfp_flower_pkt_add_metadata(app_fw_flower, m, NFP_META_PORT_ID_CTRL);\n \n \t/* Now the ctrl header */\n \thdr = (struct nfp_flower_cmsg_hdr *)pkt;\n@@ -51,14 +42,17 @@ nfp_flower_cmsg_init(struct rte_mbuf *m,\n }\n \n static void\n-nfp_flower_cmsg_mac_repr_init(struct rte_mbuf *mbuf, int num_ports)\n+nfp_flower_cmsg_mac_repr_init(struct rte_mbuf *mbuf,\n+\t\tstruct nfp_app_fw_flower *app_fw_flower)\n {\n \tuint32_t size;\n+\tuint8_t num_ports;\n \tstruct nfp_flower_cmsg_mac_repr *msg;\n \tenum nfp_flower_cmsg_type type = NFP_FLOWER_CMSG_TYPE_MAC_REPR;\n \n+\tnum_ports = app_fw_flower->num_phyport_reprs;\n \tsize = sizeof(*msg) + (num_ports * sizeof(msg->ports[0]));\n-\tmsg = nfp_flower_cmsg_init(mbuf, type, size);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf, type, size);\n \tmemset(msg->reserved, 0, sizeof(msg->reserved));\n \tmsg->num_ports = num_ports;\n }\n@@ -96,7 +90,7 @@ nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower)\n \t\treturn -ENOMEM;\n \t}\n \n-\tnfp_flower_cmsg_mac_repr_init(mbuf, app_fw_flower->num_phyport_reprs);\n+\tnfp_flower_cmsg_mac_repr_init(mbuf, app_fw_flower);\n \n \t/* Fill in the mac repr cmsg */\n \tnfp_eth_table = app_fw_flower->pf_hw->pf_dev->nfp_eth_table;\n@@ -133,7 +127,8 @@ nfp_flower_cmsg_repr_reify(struct nfp_app_fw_flower *app_fw_flower,\n \t\treturn -ENOMEM;\n \t}\n \n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_PORT_REIFY, sizeof(*msg));\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_PORT_REIFY, sizeof(*msg));\n \tmsg->portnum  = rte_cpu_to_be_32(repr->port_id);\n \tmsg->reserved = 0;\n \tmsg->info     = rte_cpu_to_be_16(1);\n@@ -162,7 +157,8 @@ nfp_flower_cmsg_port_mod(struct nfp_app_fw_flower *app_fw_flower,\n \t\treturn -ENOMEM;\n \t}\n \n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_PORT_MOD, sizeof(*msg));\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_PORT_MOD, sizeof(*msg));\n \tmsg->portnum  = rte_cpu_to_be_32(port_id);\n \tmsg->reserved = 0;\n \tmsg->info     = carrier_ok;\n@@ -199,7 +195,8 @@ nfp_flower_cmsg_flow_delete(struct nfp_app_fw_flower *app_fw_flower,\n \tmsg_len = (nfp_flow_meta->key_len + nfp_flow_meta->mask_len +\n \t\t\tnfp_flow_meta->act_len) << NFP_FL_LW_SIZ;\n \tmsg_len += sizeof(struct nfp_fl_rule_metadata);\n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_FLOW_DEL, msg_len);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_FLOW_DEL, msg_len);\n \trte_memcpy(msg, flow->payload.meta, msg_len);\n \n \tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\n@@ -233,7 +230,8 @@ nfp_flower_cmsg_flow_add(struct nfp_app_fw_flower *app_fw_flower,\n \tmsg_len = (nfp_flow_meta->key_len + nfp_flow_meta->mask_len +\n \t\t\tnfp_flow_meta->act_len) << NFP_FL_LW_SIZ;\n \tmsg_len += sizeof(struct nfp_fl_rule_metadata);\n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_FLOW_ADD, msg_len);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_FLOW_ADD, msg_len);\n \trte_memcpy(msg, flow->payload.meta, msg_len);\n \n \tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\n@@ -264,7 +262,8 @@ nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower,\n \tmsg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v4);\n \tif (!nfp_flower_support_decap_v2(app_fw_flower))\n \t\tmsg_len -= sizeof(struct nfp_flower_tun_neigh_ext);\n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH, msg_len);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_TUN_NEIGH, msg_len);\n \tmemcpy(msg, payload, msg_len);\n \n \tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\n@@ -295,7 +294,8 @@ nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower,\n \tmsg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v6);\n \tif (!nfp_flower_support_decap_v2(app_fw_flower))\n \t\tmsg_len -= sizeof(struct nfp_flower_tun_neigh_ext);\n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6, msg_len);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6, msg_len);\n \tmemcpy(msg, payload, msg_len);\n \n \tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\n@@ -324,7 +324,8 @@ nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower)\n \t\treturn -ENOMEM;\n \t}\n \n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_IPS, sizeof(*msg));\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_TUN_IPS, sizeof(*msg));\n \n \tpriv = app_fw_flower->flow_priv;\n \trte_spinlock_lock(&priv->ipv4_off_lock);\n@@ -366,7 +367,8 @@ nfp_flower_cmsg_tun_off_v6(struct nfp_app_fw_flower *app_fw_flower)\n \t\treturn -ENOMEM;\n \t}\n \n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_IPS_V6, sizeof(*msg));\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_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@@ -409,7 +411,8 @@ nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower,\n \t\treturn -ENOMEM;\n \t}\n \n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_PRE_TUN_RULE, sizeof(*msg));\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_PRE_TUN_RULE, sizeof(*msg));\n \n \tmeta_tci = (struct nfp_flower_meta_tci *)((char *)nfp_flow_meta +\n \t\t\tsizeof(struct nfp_fl_rule_metadata));\n@@ -450,7 +453,8 @@ nfp_flower_cmsg_tun_mac_rule(struct nfp_app_fw_flower *app_fw_flower,\n \t\treturn -ENOMEM;\n \t}\n \n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_MAC, sizeof(*msg));\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_TUN_MAC, sizeof(*msg));\n \n \tmsg->count = rte_cpu_to_be_16(1);\n \tmsg->index = rte_cpu_to_be_16(mac_idx);\n@@ -484,7 +488,8 @@ nfp_flower_cmsg_qos_add(struct nfp_app_fw_flower *app_fw_flower,\n \t}\n \n \tlen = sizeof(struct nfp_profile_conf);\n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_QOS_MOD, len);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_QOS_MOD, len);\n \trte_memcpy(msg, conf, len);\n \n \tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\n@@ -513,7 +518,8 @@ nfp_flower_cmsg_qos_delete(struct nfp_app_fw_flower *app_fw_flower,\n \t}\n \n \tlen = sizeof(struct nfp_profile_conf);\n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_QOS_DEL, len);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_QOS_DEL, len);\n \trte_memcpy(msg, conf, len);\n \n \tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\n@@ -542,7 +548,8 @@ nfp_flower_cmsg_qos_stats(struct nfp_app_fw_flower *app_fw_flower,\n \t}\n \n \tlen = sizeof(struct nfp_cfg_head);\n-\tmsg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_QOS_STATS, len);\n+\tmsg = nfp_flower_cmsg_init(app_fw_flower, mbuf,\n+\t\t\tNFP_FLOWER_CMSG_TYPE_QOS_STATS, len);\n \trte_memcpy(msg, head, len);\n \n \tcnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf);\ndiff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c\nindex 607625d204..eb318f66df 100644\n--- a/drivers/net/nfp/flower/nfp_flower_representor.c\n+++ b/drivers/net/nfp/flower/nfp_flower_representor.c\n@@ -465,7 +465,6 @@ nfp_flower_repr_tx_burst(void *tx_queue,\n {\n \tuint16_t i;\n \tuint16_t sent;\n-\tchar *meta_offset;\n \tvoid *pf_tx_queue;\n \tstruct nfp_net_txq *txq;\n \tstruct nfp_net_hw *pf_hw;\n@@ -483,12 +482,9 @@ nfp_flower_repr_tx_burst(void *tx_queue,\n \trepr_dev = &rte_eth_devices[txq->port_id];\n \trepr = repr_dev->data->dev_private;\n \n-\tfor (i = 0; i < nb_pkts; i++) {\n-\t\tmeta_offset = rte_pktmbuf_prepend(tx_pkts[i], FLOWER_PKT_DATA_OFFSET);\n-\t\t*(uint32_t *)meta_offset = rte_cpu_to_be_32(NFP_NET_META_PORTID);\n-\t\tmeta_offset += 4;\n-\t\t*(uint32_t *)meta_offset = rte_cpu_to_be_32(repr->port_id);\n-\t}\n+\tfor (i = 0; i < nb_pkts; i++)\n+\t\tnfp_flower_pkt_add_metadata(repr->app_fw_flower,\n+\t\t\t\ttx_pkts[i], repr->port_id);\n \n \t/* This points to the PF vNIC that owns this representor */\n \tpf_hw = txq->hw;\ndiff --git a/drivers/net/nfp/nfd3/nfp_nfd3.h b/drivers/net/nfp/nfd3/nfp_nfd3.h\nindex e772bc4711..5bf89868fc 100644\n--- a/drivers/net/nfp/nfd3/nfp_nfd3.h\n+++ b/drivers/net/nfp/nfd3/nfp_nfd3.h\n@@ -153,6 +153,8 @@ nfp_net_nfd3_tx_cksum(struct nfp_net_txq *txq,\n \t\ttxd->flags |= NFD3_DESC_TX_CSUM;\n }\n \n+uint32_t nfp_flower_nfd3_pkt_add_metadata(struct rte_mbuf *mbuf,\n+\t\tuint32_t port_id);\n uint16_t nfp_net_nfd3_xmit_pkts(void *tx_queue,\n \t\tstruct rte_mbuf **tx_pkts,\n \t\tuint16_t nb_pkts);\ndiff --git a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\nindex 1a960fbe63..2ad098a699 100644\n--- a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\n+++ b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c\n@@ -10,8 +10,24 @@\n #include \"../nfp_logs.h\"\n #include \"../nfp_common.h\"\n #include \"../nfp_rxtx.h\"\n+#include \"../flower/nfp_flower.h\"\n+#include \"../flower/nfp_flower_cmsg.h\"\n #include \"nfp_nfd3.h\"\n \n+uint32_t\n+nfp_flower_nfd3_pkt_add_metadata(struct rte_mbuf *mbuf,\n+\t\tuint32_t port_id)\n+{\n+\tchar *meta_offset;\n+\n+\tmeta_offset = rte_pktmbuf_prepend(mbuf, FLOWER_PKT_DATA_OFFSET);\n+\t*(rte_be32_t *)meta_offset = rte_cpu_to_be_32(NFP_NET_META_PORTID);\n+\tmeta_offset += NFP_NET_META_HEADER_SIZE;\n+\t*(rte_be32_t *)meta_offset = rte_cpu_to_be_32(port_id);\n+\n+\treturn FLOWER_PKT_DATA_OFFSET;\n+}\n+\n /*\n  * nfp_net_nfd3_tx_vlan() - Set vlan info in the nfd3 tx desc\n  *\n",
    "prefixes": [
        "03/10"
    ]
}