Show a patch.

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

{
    "id": 86,
    "url": "https://patches.dpdk.org/api/patches/86/",
    "web_url": "https://patches.dpdk.org/patch/86/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/",
        "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"
    },
    "msgid": "<1406118534-6169-3-git-send-email-olivier.matz@6wind.com>",
    "date": "2014-07-23T12:28:54",
    "name": "[dpdk-dev,2/2] testpmd: add a new command to get the extended statistics of a port",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "506f21cad43694f407f1ba9c1f3ff53c48badb84",
    "submitter": {
        "id": 8,
        "url": "https://patches.dpdk.org/api/people/8/",
        "name": "Olivier Matz",
        "email": "olivier.matz@6wind.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/patch/86/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/86/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/86/checks/",
    "tags": {},
    "headers": {
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "X-Gm-Message-State": "ALoCoQlrK/bLi7L17XnW+fQg6Ek+5d8SbX1scGc7k3OcXrzpAwB9PxHxs6Ie0KNFiyRSOPAG9wVT",
        "List-Post": "<mailto:dev@dpdk.org>",
        "References": "<1406118534-6169-1-git-send-email-olivier.matz@6wind.com>",
        "X-BeenThere": "dev@dpdk.org",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "Subject": "[dpdk-dev] [PATCH 2/2] testpmd: add a new command to get the\n\textended statistics of a port",
        "From": "Olivier Matz <olivier.matz@6wind.com>",
        "Received": [
            "from mail-wg0-f46.google.com (mail-wg0-f46.google.com\n\t[74.125.82.46]) by dpdk.org (Postfix) with ESMTP id B33C1594D\n\tfor <dev@dpdk.org>; Wed, 23 Jul 2014 14:27:39 +0200 (CEST)",
            "by mail-wg0-f46.google.com with SMTP id m15so1091958wgh.17\n\tfor <dev@dpdk.org>; Wed, 23 Jul 2014 05:29:03 -0700 (PDT)",
            "from glumotte.dev.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net.\n\t[82.239.227.177]) by mx.google.com with ESMTPSA id\n\tch5sm5882484wjb.18.2014.07.23.05.29.01 for <multiple recipients>\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tWed, 23 Jul 2014 05:29:02 -0700 (PDT)"
        ],
        "To": "dev@dpdk.org",
        "X-Mailer": "git-send-email 2.0.1",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=FFfukQ1b6PPuWesVBTZojnilIFlt9MVXT1NaDS7iot8=;\n\tb=lnLkje5S50XWgxyLZ0pdG3VeWgoMWPge17a/sryzYJfhgWpDTjWoSYu3VicL/N4ovC\n\tdh1O9SfpQMy422AlzU27LWB0A+J3ybZMGcUlzDI9bOPJ8JuCzn0FUmhy/hvNkpFMoS0n\n\tLtXMSWD8Hk+dMce2+KfikhHXNe7sXt3XTXXe80DapnCBFqL7yBG192Jr0BMetKUmVBCa\n\t/Ja/4NC3FE064l9f2kYlOWCMPTBvhmbNQQB/KMftepZXSl+7I7qJ4/4wGhdquDAQMaQJ\n\tm4vxDM16X45FwrpFVXZoyo8zbdSVortTy4cBuffY2v1rNHRhSOVVTSWqy3LhcWJ1KWrh\n\tbmhA==",
        "Date": "Wed, 23 Jul 2014 14:28:54 +0200",
        "X-Received": "by 10.194.174.35 with SMTP id bp3mr1280317wjc.33.1406118543104; \n\tWed, 23 Jul 2014 05:29:03 -0700 (PDT)",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "X-List-Received-Date": "Wed, 23 Jul 2014 12:27:39 -0000",
        "In-Reply-To": "<1406118534-6169-1-git-send-email-olivier.matz@6wind.com>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "Message-Id": "<1406118534-6169-3-git-send-email-olivier.matz@6wind.com>",
        "Return-Path": "<olivier.matz@6wind.com>"
    },
    "content": "Add a new token in \"show port\" command to dump the extended statistics\nof a device. It validates the new xstats framework added in previous commit.\n\nSigned-off-by: Olivier Matz <olivier.matz@6wind.com>\n---\n app/test-pmd/cmdline.c | 22 ++++++++++++++++------\n app/test-pmd/config.c  | 34 ++++++++++++++++++++++++++++++++++\n app/test-pmd/testpmd.h |  2 ++\n 3 files changed, 52 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex 345be11..972ef8c 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -183,14 +183,14 @@ static void cmd_help_long_parsed(void *parsed_result,\n \t\t\t\"Display:\\n\"\n \t\t\t\"--------\\n\\n\"\n \n-\t\t\t\"show port (info|stats|fdir|stat_qmap) (port_id|all)\\n\"\n+\t\t\t\"show port (info|stats|xstats|fdir|stat_qmap) (port_id|all)\\n\"\n \t\t\t\"    Display information for port_id, or all.\\n\\n\"\n \n \t\t\t\"show port rss-hash [key]\\n\"\n \t\t\t\"    Display the RSS hash functions and RSS hash key\"\n \t\t\t\" of port X\\n\\n\"\n \n-\t\t\t\"clear port (info|stats|fdir|stat_qmap) (port_id|all)\\n\"\n+\t\t\t\"clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)\\n\"\n \t\t\t\"    Clear information for port_id, or all.\\n\\n\"\n \n \t\t\t\"show config (rxtx|cores|fwd)\\n\"\n@@ -5015,12 +5015,18 @@ static void cmd_showportall_parsed(void *parsed_result,\n \t\tif (!strcmp(res->what, \"stats\"))\n \t\t\tfor (i = 0; i < nb_ports; i++)\n \t\t\t\tnic_stats_clear(i);\n+\t\telse if (!strcmp(res->what, \"xstats\"))\n+\t\t\tfor (i = 0; i < nb_ports; i++)\n+\t\t\t\tnic_xstats_clear(i);\n \t} else if (!strcmp(res->what, \"info\"))\n \t\tfor (i = 0; i < nb_ports; i++)\n \t\t\tport_infos_display(i);\n \telse if (!strcmp(res->what, \"stats\"))\n \t\tfor (i = 0; i < nb_ports; i++)\n \t\t\tnic_stats_display(i);\n+\telse if (!strcmp(res->what, \"xstats\"))\n+\t\tfor (i = 0; i < nb_ports; i++)\n+\t\t\tnic_xstats_display(i);\n \telse if (!strcmp(res->what, \"fdir\"))\n \t\tfor (i = 0; i < nb_ports; i++)\n \t\t\tfdir_get_infos(i);\n@@ -5036,13 +5042,13 @@ cmdline_parse_token_string_t cmd_showportall_port =\n \tTOKEN_STRING_INITIALIZER(struct cmd_showportall_result, port, \"port\");\n cmdline_parse_token_string_t cmd_showportall_what =\n \tTOKEN_STRING_INITIALIZER(struct cmd_showportall_result, what,\n-\t\t\t\t \"info#stats#fdir#stat_qmap\");\n+\t\t\t\t \"info#stats#xstats#fdir#stat_qmap\");\n cmdline_parse_token_string_t cmd_showportall_all =\n \tTOKEN_STRING_INITIALIZER(struct cmd_showportall_result, all, \"all\");\n cmdline_parse_inst_t cmd_showportall = {\n \t.f = cmd_showportall_parsed,\n \t.data = NULL,\n-\t.help_str = \"show|clear port info|stats|fdir|stat_qmap all\",\n+\t.help_str = \"show|clear port info|stats|xstats|fdir|stat_qmap all\",\n \t.tokens = {\n \t\t(void *)&cmd_showportall_show,\n \t\t(void *)&cmd_showportall_port,\n@@ -5068,10 +5074,14 @@ static void cmd_showport_parsed(void *parsed_result,\n \tif (!strcmp(res->show, \"clear\")) {\n \t\tif (!strcmp(res->what, \"stats\"))\n \t\t\tnic_stats_clear(res->portnum);\n+\t\telse if (!strcmp(res->what, \"xstats\"))\n+\t\t\tnic_xstats_clear(res->portnum);\n \t} else if (!strcmp(res->what, \"info\"))\n \t\tport_infos_display(res->portnum);\n \telse if (!strcmp(res->what, \"stats\"))\n \t\tnic_stats_display(res->portnum);\n+\telse if (!strcmp(res->what, \"xstats\"))\n+\t\tnic_xstats_display(res->portnum);\n \telse if (!strcmp(res->what, \"fdir\"))\n \t\t fdir_get_infos(res->portnum);\n \telse if (!strcmp(res->what, \"stat_qmap\"))\n@@ -5085,14 +5095,14 @@ cmdline_parse_token_string_t cmd_showport_port =\n \tTOKEN_STRING_INITIALIZER(struct cmd_showport_result, port, \"port\");\n cmdline_parse_token_string_t cmd_showport_what =\n \tTOKEN_STRING_INITIALIZER(struct cmd_showport_result, what,\n-\t\t\t\t \"info#stats#fdir#stat_qmap\");\n+\t\t\t\t \"info#stats#xstats#fdir#stat_qmap\");\n cmdline_parse_token_num_t cmd_showport_portnum =\n \tTOKEN_NUM_INITIALIZER(struct cmd_showport_result, portnum, INT32);\n \n cmdline_parse_inst_t cmd_showport = {\n \t.f = cmd_showport_parsed,\n \t.data = NULL,\n-\t.help_str = \"show|clear port info|stats|fdir|stat_qmap X (X = port number)\",\n+\t.help_str = \"show|clear port info|stats|xstats|fdir|stat_qmap X (X = port number)\",\n \t.tokens = {\n \t\t(void *)&cmd_showport_show,\n \t\t(void *)&cmd_showport_port,\ndiff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex c72f6ee..0a42ee9 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -199,6 +199,40 @@ nic_stats_clear(portid_t port_id)\n \tprintf(\"\\n  NIC statistics for port %d cleared\\n\", port_id);\n }\n \n+void\n+nic_xstats_display(portid_t port_id)\n+{\n+\tstruct rte_eth_xstats *xstats;\n+\tint len, ret, i;\n+\n+\tprintf(\"###### NIC extended statistics for port %-2d\\n\", port_id);\n+\n+\tlen = rte_eth_xstats_get(port_id, NULL, 0);\n+\tif (len < 0) {\n+\t\tprintf(\"Cannot get xstats count\\n\");\n+\t\treturn;\n+\t}\n+\txstats = malloc(sizeof(xstats[0]) * len);\n+\tif (xstats == NULL) {\n+\t\tprintf(\"Cannot allocate memory for xstats\\n\");\n+\t\treturn;\n+\t}\n+\tret = rte_eth_xstats_get(port_id, xstats, len);\n+\tif (ret < 0 || ret > len) {\n+\t\tprintf(\"Cannot get xstats\\n\");\n+\t\tfree(xstats);\n+\t\treturn ;\n+\t}\n+\tfor (i = 0; i < len; i++)\n+\t\tprintf(\"%s: %\"PRIu64\"\\n\", xstats[i].name, xstats[i].value);\n+\tfree(xstats);\n+}\n+\n+void\n+nic_xstats_clear(portid_t port_id)\n+{\n+\trte_eth_xstats_reset(port_id);\n+}\n \n void\n nic_stats_mapping_display(portid_t port_id)\ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex ac86bfe..c698c41 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -448,6 +448,8 @@ void launch_args_parse(int argc, char** argv);\n void prompt(void);\n void nic_stats_display(portid_t port_id);\n void nic_stats_clear(portid_t port_id);\n+void nic_xstats_display(portid_t port_id);\n+void nic_xstats_clear(portid_t port_id);\n void nic_stats_mapping_display(portid_t port_id);\n void port_infos_display(portid_t port_id);\n void fwd_lcores_config_display(void);\n",
    "prefixes": [
        "dpdk-dev",
        "2/2"
    ]
}