get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 131185,
    "url": "http://patches.dpdk.org/api/patches/131185/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230906093407.3635038-2-wenjing.qiao@intel.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": "<20230906093407.3635038-2-wenjing.qiao@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230906093407.3635038-2-wenjing.qiao@intel.com",
    "date": "2023-09-06T09:33:59",
    "name": "[v3,1/9] net/cpfl: parse flow parser file in devargs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a421fba7877b00810d00d0766a6f45e9af94bf8f",
    "submitter": {
        "id": 2680,
        "url": "http://patches.dpdk.org/api/people/2680/?format=api",
        "name": "Wenjing Qiao",
        "email": "wenjing.qiao@intel.com"
    },
    "delegate": {
        "id": 1540,
        "url": "http://patches.dpdk.org/api/users/1540/?format=api",
        "username": "qzhan15",
        "first_name": "Qi",
        "last_name": "Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230906093407.3635038-2-wenjing.qiao@intel.com/mbox/",
    "series": [
        {
            "id": 29433,
            "url": "http://patches.dpdk.org/api/series/29433/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=29433",
            "date": "2023-09-06T09:33:58",
            "name": "add rte flow support for cpfl",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/29433/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/131185/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/131185/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 2777942528;\n\tWed,  6 Sep 2023 11:34:25 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D7FFA402C6;\n\tWed,  6 Sep 2023 11:34:22 +0200 (CEST)",
            "from mgamail.intel.com (mgamail.intel.com [192.55.52.120])\n by mails.dpdk.org (Postfix) with ESMTP id 7D977402BD\n for <dev@dpdk.org>; Wed,  6 Sep 2023 11:34:20 +0200 (CEST)",
            "from fmsmga001.fm.intel.com ([10.253.24.23])\n by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 06 Sep 2023 02:34:20 -0700",
            "from dpdk-wenjing-02.sh.intel.com ([10.67.119.75])\n by fmsmga001.fm.intel.com with ESMTP; 06 Sep 2023 02:34:07 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1693992860; x=1725528860;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=Y0vsEhizp4sEZiRabZb+UKeE27BzIna15bA2FxV5Zk0=;\n b=brAvMf3wqpkwmYN6rHli64NcE9ZFrJQWhQMeO52HEURbA5ELoMygDVKU\n 4GciQsHdE068Q4KNhtEpISfpwKFIKsXiXGgYLp+9cNaYOL2V7jXVyvjNt\n qS01R9487tGSaGptVW3VskPCPETK8FkR3RYMLWYP0SfBA6kbCedVVyzIS\n vqW+MJuLhxY8j67OYouDKym7Ao0j+3J8/J/Slq1dboHpfU9PD7Gg1J2pG\n K7e9czsDp4bjX/QgxfidvzuoCO4wv8b2RZEGO5oJTSu1V+tkESKgdZCVd\n Pz82dkOtUqXUHeHg4ltLbeyYx+yyKpiH+ziehmvktEFZY4aqkFGVUDaA0 Q==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6600,9927,10824\"; a=\"375919349\"",
            "E=Sophos;i=\"6.02,231,1688454000\"; d=\"scan'208\";a=\"375919349\"",
            "E=McAfee;i=\"6600,9927,10824\"; a=\"884623094\"",
            "E=Sophos;i=\"6.02,231,1688454000\"; d=\"scan'208\";a=\"884623094\""
        ],
        "X-ExtLoop1": "1",
        "From": "Wenjing Qiao <wenjing.qiao@intel.com>",
        "To": "yuying.zhang@intel.com, dev@dpdk.org, qi.z.zhang@intel.com,\n jingjing.wu@intel.com, beilei.xing@intel.com",
        "Cc": "mingxia.liu@intel.com,\n\tWenjing Qiao <wenjing.qiao@intel.com>",
        "Subject": "[PATCH v3 1/9] net/cpfl: parse flow parser file in devargs",
        "Date": "Wed,  6 Sep 2023 09:33:59 +0000",
        "Message-Id": "<20230906093407.3635038-2-wenjing.qiao@intel.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230906093407.3635038-1-wenjing.qiao@intel.com>",
        "References": "<20230901113158.1654044-1-yuying.zhang@intel.com>\n <20230906093407.3635038-1-wenjing.qiao@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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 devargs \"flow_parser\" for rte_flow json parser.\n\nSigned-off-by: Wenjing Qiao <wenjing.qiao@intel.com>\n---\n doc/guides/nics/cpfl.rst       | 32 ++++++++++++++++++++++++++++\n drivers/net/cpfl/cpfl_ethdev.c | 38 +++++++++++++++++++++++++++++++++-\n drivers/net/cpfl/cpfl_ethdev.h |  3 +++\n drivers/net/cpfl/meson.build   |  6 ++++++\n 4 files changed, 78 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/doc/guides/nics/cpfl.rst b/doc/guides/nics/cpfl.rst\nindex c20334230b..7032dd1a1a 100644\n--- a/doc/guides/nics/cpfl.rst\n+++ b/doc/guides/nics/cpfl.rst\n@@ -128,12 +128,24 @@ Runtime Configuration\n \n     -a BDF,representor=vf[0-3],representor=c1pf1\n \n+- ``flow_parser`` (default ``not enabled``)\n+\n+  The PMD supports using a JSON file to parse rte_flow tokens into low level hardware\n+  resources defined in a DDP package file.\n+\n+  The user can specify the path of json file, for example::\n+\n+    -a ca:00.0,flow_parser=\"refpkg.json\"\n+\n+  Then the PMD will load json file for device ``ca:00.0``.\n+  The parameter is optional.\n \n Driver compilation and testing\n ------------------------------\n \n Refer to the document :doc:`build_and_test` for details.\n \n+Rte flow need to install json-c library.\n \n Features\n --------\n@@ -164,3 +176,23 @@ Hairpin queue\n E2100 Series can loopback packets from RX port to TX port.\n This feature is called port-to-port or hairpin.\n Currently, the PMD only supports single port hairpin.\n+\n+Rte_flow\n+~~~~~~~~~~~~~\n+\n+Rte_flow uses a json file to direct CPF PMD to parse rte_flow tokens into\n+low level hardware resources defined in a DDP package file.\n+\n+#. install json-c library::\n+\n+   .. code-block:: console\n+\n+   git clone https://github.com/json-c/json-c.git\n+   cd json-c\n+   git checkout 777dd06be83ef7fac71c2218b565557cd068a714\n+\n+#. run testpmd with the json file::\n+\n+   .. code-block:: console\n+\n+   dpdk-testpmd -c 0x3 -n 4 -a 0000:af:00.6,vport=[0],flow_parser=\"refpkg.json\" -- -i\ndiff --git a/drivers/net/cpfl/cpfl_ethdev.c b/drivers/net/cpfl/cpfl_ethdev.c\nindex 88c1479f3a..3c4a6a4724 100644\n--- a/drivers/net/cpfl/cpfl_ethdev.c\n+++ b/drivers/net/cpfl/cpfl_ethdev.c\n@@ -21,6 +21,10 @@\n #define CPFL_RX_SINGLE_Q\t\"rx_single\"\n #define CPFL_VPORT\t\t\"vport\"\n \n+#ifdef CPFL_FLOW_JSON_SUPPORT\n+#define CPFL_FLOW_PARSER\t\"flow_parser\"\n+#endif\n+\n rte_spinlock_t cpfl_adapter_lock;\n /* A list for all adapters, one adapter matches one PCI device */\n struct cpfl_adapter_list cpfl_adapter_list;\n@@ -31,6 +35,9 @@ static const char * const cpfl_valid_args_first[] = {\n \tCPFL_TX_SINGLE_Q,\n \tCPFL_RX_SINGLE_Q,\n \tCPFL_VPORT,\n+#ifdef CPFL_FLOW_JSON_SUPPORT\n+\tCPFL_FLOW_PARSER,\n+#endif\n \tNULL\n };\n \n@@ -1537,6 +1544,24 @@ parse_repr(const char *key __rte_unused, const char *value, void *args)\n \treturn 0;\n }\n \n+#ifdef CPFL_FLOW_JSON_SUPPORT\n+static int\n+parse_file(const char *key, const char *value, void *args)\n+{\n+\tchar *name = args;\n+\n+\tif (strlen(value) > CPFL_FLOW_FILE_LEN - 1) {\n+\t\tPMD_DRV_LOG(ERR, \"file path(%s) is too long.\", value);\n+\t\treturn -1;\n+\t}\n+\n+\tPMD_DRV_LOG(DEBUG, \"value:\\\"%s\\\" for key:\\\"%s\\\"\", value, key);\n+\tstrlcpy(name, value, CPFL_FLOW_FILE_LEN);\n+\n+\treturn 0;\n+}\n+#endif\n+\n static int\n cpfl_parse_devargs(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter, bool first)\n {\n@@ -1585,7 +1610,18 @@ cpfl_parse_devargs(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adap\n \t\t\t\t &adapter->base.is_rx_singleq);\n \tif (ret != 0)\n \t\tgoto fail;\n-\n+#ifdef CPFL_FLOW_JSON_SUPPORT\n+\tif (rte_kvargs_get(kvlist, CPFL_FLOW_PARSER)) {\n+\t\tret = rte_kvargs_process(kvlist, CPFL_FLOW_PARSER,\n+\t\t\t\t\t &parse_file, cpfl_args->flow_parser);\n+\t\tif (ret) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Failed to parser flow_parser, ret: %d\", ret);\n+\t\t\tgoto fail;\n+\t\t}\n+\t} else {\n+\t\tcpfl_args->flow_parser[0] = '\\0';\n+\t}\n+#endif\n fail:\n \trte_kvargs_free(kvlist);\n \treturn ret;\ndiff --git a/drivers/net/cpfl/cpfl_ethdev.h b/drivers/net/cpfl/cpfl_ethdev.h\nindex a891bd8df9..ed730cc0e9 100644\n--- a/drivers/net/cpfl/cpfl_ethdev.h\n+++ b/drivers/net/cpfl/cpfl_ethdev.h\n@@ -87,6 +87,8 @@\n #define ACC_LCE_ID\t15\n #define IMC_MBX_EFD_ID\t0\n \n+#define CPFL_FLOW_FILE_LEN 100\n+\n struct cpfl_vport_param {\n \tstruct cpfl_adapter_ext *adapter;\n \tuint16_t devarg_id; /* arg id from user */\n@@ -100,6 +102,7 @@ struct cpfl_devargs {\n \tuint16_t req_vport_nb;\n \tuint8_t repr_args_num;\n \tstruct rte_eth_devargs repr_args[CPFL_REPR_ARG_NUM_MAX];\n+\tchar flow_parser[CPFL_FLOW_FILE_LEN];\n };\n \n struct p2p_queue_chunks_info {\ndiff --git a/drivers/net/cpfl/meson.build b/drivers/net/cpfl/meson.build\nindex fb075c6860..0be25512c3 100644\n--- a/drivers/net/cpfl/meson.build\n+++ b/drivers/net/cpfl/meson.build\n@@ -38,3 +38,9 @@ if arch_subdir == 'x86'\n         cflags += ['-DCC_AVX512_SUPPORT']\n     endif\n endif\n+\n+js_dep = dependency('json-c', required: false, method : 'pkg-config')\n+if js_dep.found()\n+    dpdk_conf.set('CPFL_FLOW_JSON_SUPPORT', true)\n+    ext_deps += js_dep\n+endif\n\\ No newline at end of file\n",
    "prefixes": [
        "v3",
        "1/9"
    ]
}