get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 46995,
    "url": "https://patches.dpdk.org/api/patches/46995/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1539789731-18409-2-git-send-email-rasland@mellanox.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": "<1539789731-18409-2-git-send-email-rasland@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1539789731-18409-2-git-send-email-rasland@mellanox.com",
    "date": "2018-10-17T15:22:10",
    "name": "[v6,2/3] app/testpmd: add packet dump callback functions",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "ce275b65f96da2874dccb6bb5b43578684966bd1",
    "submitter": {
        "id": 513,
        "url": "https://patches.dpdk.org/api/people/513/?format=api",
        "name": "Raslan Darawsheh",
        "email": "rasland@mellanox.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/1539789731-18409-2-git-send-email-rasland@mellanox.com/mbox/",
    "series": [
        {
            "id": 1959,
            "url": "https://patches.dpdk.org/api/series/1959/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=1959",
            "date": "2018-10-17T15:22:09",
            "name": "[v6,1/3] app/testpmd: move dumping packets to a separate function",
            "version": 6,
            "mbox": "https://patches.dpdk.org/series/1959/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/46995/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/46995/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 51EDA1B12A;\n\tWed, 17 Oct 2018 17:22:32 +0200 (CEST)",
            "from EUR04-DB3-obe.outbound.protection.outlook.com\n\t(mail-eopbgr60083.outbound.protection.outlook.com [40.107.6.83])\n\tby dpdk.org (Postfix) with ESMTP id 3F9D0559A\n\tfor <dev@dpdk.org>; Wed, 17 Oct 2018 17:22:24 +0200 (CEST)",
            "from mellanox.com (37.142.13.130) by\n\tHE1PR05MB1257.eurprd05.prod.outlook.com (2a01:111:e400:5889::14) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.21;\n\tWed, 17 Oct 2018 15:22:22 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n\ts=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=tyuZfTT6JQ44K7gSmFG7OdLLQT1LOsmohYnkUUiGcMw=;\n\tb=fyNxqjsi9CLSTfK1y9H+VRRkFY23AOlrKO5T4Ar5Vp7jyFMi4IMjFU3499aoccwYL1eJn4HKAH0FYgGmF91YYd73djWznGEEDBPfq8TjQF3U4F7bGWnEMRutJqZMSw9B05TnTWpM3x5IES7di3rnOeIp5tGShIMl2qzMu4AQ3Gs=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=rasland@mellanox.com; ",
        "From": "Raslan Darawsheh <rasland@mellanox.com>",
        "To": "jingjing.wu@intel.com",
        "Cc": "thomas@monjalon.net, dev@dpdk.org, shahafs@mellanox.com,\n\trasland@mellanox.com, xuemingl@mellanox.com, orika@mellanox.com,\n\tjerin.jacob@caviumnetworks.com, david.marchand@6wind.com,\n\tbernard.iremonger@intel.com, ferruh.yigit@intel.com",
        "Date": "Wed, 17 Oct 2018 18:22:10 +0300",
        "Message-Id": "<1539789731-18409-2-git-send-email-rasland@mellanox.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1539789731-18409-1-git-send-email-rasland@mellanox.com>",
        "References": "<1538897848-1693-1-git-send-email-rasland@mellanox.com>\n\t<1539789731-18409-1-git-send-email-rasland@mellanox.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[37.142.13.130]",
        "X-ClientProxiedBy": "LO2P265CA0158.GBRP265.PROD.OUTLOOK.COM\n\t(2603:10a6:600:9::26) To HE1PR05MB1257.eurprd05.prod.outlook.com\n\t(2a01:111:e400:5889::14)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "c931d3c9-4aa8-41e4-40cb-08d634445686",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-Microsoft-Antispam": "BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);\n\tSRVR:HE1PR05MB1257; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; HE1PR05MB1257;\n\t3:fA9CEgoM4A1FfdYLKAHd/KGZRA2WPL0SIJjOwi9qo71Hpp0OQyqERUaPjFXRfMXAuIJzKbohY9sqyKZSaHxZDz9PjPC+bi5zRx88RIYMHKyrgouOawkUtgV+HL/z4lx7P8fevyDZClAc4wq51pxumyIyuhC03sNf2yg+LAERYDBiiebzmsInNvi68ipwVFM9qpc6aFZW6zPDFRspIvDpJqgcTKXcHNXuH8Hqo6CjnS7WFMfDVtm4MB/iIQOWNoFR;\n\t25:YvegzgDrb9yEDSAJxNwg90/oyCg7oznPZrdWFg9bv0sOxNw0qFUz5R1C89ggrTqBci4sZn+wG1LOZVyJOg7p05EKkUNLvS/dxA1ADFRwy1HRDTQ1E6PBDLwu3Ff3tn6YNQwDaA5wU0rdd9XYluWbnm9OVqz00SanKoJsW9iw349BrJvqA3mVY2L9RNca/7yG8SzuQimGT9zycan+w1jNGfKFqki0Pap6jez5ahCLoqeyOiY+h031+GD3XvHilyL5YAvVWAhEuc2vGvhIPXwatT0Y/dLhV9fptLkUh1pzhLgjYR+WhCVUhqydKKSPJQMBSmdtgitrHrsSd9bISZ2w6Pqd8loNfSxa+eV0h8bn1Lo=;\n\t31:NaZlVjN533jtht8BQpv415tfq45xOCrfrB0jZwuYt5THj/o6+4EEZvb/UXjSqTLwGM1ZREdywHyX6x2KnO3lY27vhNgz/BPZDwgi+Xkb8IiP/XQAiMxxSLeJSNrBhG0BzwYCbj9c5Q70odRhTQhx+Zz+zezul8bcps+UUDwWW9rI2OT45AD0jqEuJDOpNiXO/c+cH3o//5E3GitIs0FMSb4ZcOmlT+nthgVeirvgtsA=",
            "1; HE1PR05MB1257;\n\t20:MnJARV5z2ryzb1fyCNyHtuse7vjfau8PDFEG+4ounqrqxjC8+/f8NlTjR9ACOTaI/REayGLY39IJWD/BMd0cPmxA66SRIAqdvMTWO5SswBO/P/1t0AcIW8sElmA/59nftF3YPI3L+XPE56kXmWJnFs8TrWG7vC/T9JFxTpLYt8oGZoMQN4b8UEQVqTCF0tEijkAkBFRMe/YKzqBTa8jYis/3vgwYZJKtuANA88Nktn7Ud35XF34IbqEnUrAYZzfZ760zmuymx5kNB7s9RLyCP99JuX4CPiuAE13C6KdaUgF1sIn4jFdx0pz96G1CQ8AkSbm/RsXs5IjRiKwk/PKZTCT51lRkHiqVEuOKbe8Q9fLO5MinhU0DIDOB/YCjFioh0baAgytZOanYakQn2JXa9cKNHaA9NkztDxQ9E16xd/UFsc2XJV6MxtJRfczRwSJFu7m3x/Stgf6uS1lF9/SHdF5yEy7sd3Z6rcSzNqPFd1E//F1IzPwXbsEphNmFmPgw;\n\t4:hfcVZZ8fHabdYrraP2WZeFHfGRoBqfUsTeqcRxRVKveLqc3tXEgA4bnD0sjA+jC9UZvpst40uKyu/dKBjWY6VYkV6epA9aIRF/kN/HL1MgpM7xhB4u/Xh2Vhe/+yNjA0T9lVsRZAvG1lstu0FoiHMPfjHbQNximUUri86gvncN5+m9sEusyFctzhjwPY9o1qJWRz1/YdpcKyr0L7ObKQjnS/6KNsGOGdMFsbDmQmbFRR7+SQzrPHjrY7qs99BLbu0ZopenKBkRWPsoLVkegf2Af77VXh9yU3kpIzI9JvFJNQPBKQcj4oRC1WOj/MK77t",
            "=?us-ascii?Q?1; HE1PR05MB1257;\n\t23:I1Zp81fX7PUheeKkf12lKsN9giMHOqdnsTXvCbTKa?=\n\tsnWMlHNqTapMuPhzhkS0hpUqi+GGwRW3rZoTzo0A2WqV49KGoHTTteRuD4K0M6fiTA3xwH3UetwKHReUi3qJsnOzEJAbDZ33eYLjZYJH6Idj6pCp9FG2QfyZBO5JG8Uv3ClqoQP6JFfYlysTsfVwY4BDccsA1Y+TsiXn7Nr6huR2A5/JM+0zkOGRzVVcUNc6ueX0uOBdUpb1DYHzX8SlouPsjxdoyrJ8b8Sy7/pZmSwCaCKjsyAbX4ZulJ20bGG82RIYT03OgN92i+j8vQrur8vJMYEnDmpLIbRWuXAvd1bQWz/qN3J4iARmMzN1xahrQFXbK9qloyalD0nimPgsAmcGN3p8WEXZ7HvnUokSVTC8T+GnKoCThI68fvkmlApqS0TZ4NBk4NpxYSQ5Nvj0Voc3qeCO8Vw67znkmg+rKjsKRLONW/0M1zZuq3UoakCp26WdogZjdtrpqxhVgaVk/s8m2Z2/MQ4QAMrhydx/kc6nokku3b/acrLn0JUDUOrANbKzH8Cl09b+exfab8lRYAae+EuRqqp4mAv/HDTmDurxQaCKLBoyGSC8DtLNGuZNhHavU3sAHFXfjoys4TgN0Blms0S7J08jJfXBvMFh02Kcy5tTsUu4WB9p2YzHWAcn9vDsQggjYo+FifGuro557tS4yFUrJ/OUorXbV+j1Cg9ngFqof4ZFI366XKqx1JArzt6RgmbhsuesWiNHG1S9SWQezGKhfNkCHaqqFBcr5gnruLxP6cGMkUf8Qta3GYrJDCWelvZjKOB70ChUPLuB3m/RkRajZD6bwp8vjlAVJmtQm2xn3agEUqqzg6eQ30mbIHWN8MsJqYUrQ4TytEQA93b5ncikXNlWrzgYj1M+bHKPhiByEjwiUo8dok9Ij2qQkeMQkwMimaQlSB+mV1ADpu9dC97bN4WiL0R+d23eLG/sVjS/EccEpwgqHZHaidAjwuhPlW+OL5vxlC9G8vSbjGXDR8hYXpY4q1bYg9Esxi5SFEpP2+KRflKkDpxHKlVqkWM6bqh/sLut4/Nk01kABq0/gxOLYQ8Ek8DvtqEii+syuZnzKf1qbWvNpnOS08uPPZJjTKXGGoibq9s5q6jzDCD43BfbacA9PblElcMwlN2/kLv6+ZsRxOSM2riMp1xUJmVXvIz7zNKt3AncHuK/WeWvkvEJT/+kYX8ZnSdydmRD5YVa+CLZolRihYgJkjEIzFaKPQraPKtpqtHT3PEZjUn",
            "1; HE1PR05MB1257;\n\t6:0ad4bV8icSUG/LJ/QEpcsJ8ck51X7ijkQQnDchcf+4bN8oLSDjYInBltqfV+IIZ2QAaOrh+uCMgGtdlpppJQ8C5W3YBb+4Ae96vUGmZI8HJ8A4q94VJdwUpAwSKvOgawFDtyQEWVWLnvI2hO8TZ2kXE3IXZVeH9bs7ytAHmbjs/4Z1kVtkwnMzGK23cJNLEgLh69HSozCLf3ZlnxqaThLMFabgTqrJwnFL1F+gC4YHkNpGPZuCvLbiCfSDM2yULFMRrSd2lZODwK6b4+zQdE1brsAXFqZ3hu63Mpx5Dwdomo/HywSpRUZ4Fp4IScJZvrL6Brlqg9Y01T0lRY4lr53xwTIQfK1PnACTLjwUgJssKYGOyPqYd91qtfSIVZJeo2Zki0sqBj8jpiji03Won4LORGTlaJ+nIS1hDRp3x51V3/MrYzBIDB5KpGmSiW+TRPzr5AeLFC+z7POqsR01G/Lg==;\n\t5:ihrONyziHFH79y7Pb93dL915MZnodoS1z4q7IsB71rGaaqxedfDNf41UaupsKRXoP7rqPZZBIi7scm83oUT3kU+W0g71se/AIcekmlGfVO/ZjzPeNXpOyGwcKxIeZZixdrRzExwxgiZFAQV7L/BEbhAQ/z0z5hhpN8c29kf0cCY=;\n\t7:9R1nEH2xcrvnZ6/iTveg4vK8gYQCnNxV0kjwgqK6Pp86dmVWsZ6s5c6Giek138EZjifHFqpKIskyWuNYYm3ws7tuMIm5+FtDyLhKi9apho3dshgAyeinB70qNxyVUg4GMRbOBf7htDUi62/Txhp8O/QNpIWZD6iEVkfieSpLR6O5LhZPh3vlzRIsmzntvuL8gbPyikVIEoUtuAdClrCs8BAbPNZm5ugJha65aSM3qAvtuksJgnikusSHhbRht/XX"
        ],
        "X-MS-TrafficTypeDiagnostic": "HE1PR05MB1257:",
        "X-LD-Processed": "a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr",
        "X-Microsoft-Antispam-PRVS": "<HE1PR05MB12574594D2EF15D54ED40482C2FF0@HE1PR05MB1257.eurprd05.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(228905959029699);",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3231355)(944501410)(52105095)(3002001)(6055026)(149066)(150057)(6041310)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095);\n\tSRVR:HE1PR05MB1257; BCL:0; PCL:0; RULEID:; SRVR:HE1PR05MB1257; ",
        "X-Forefront-PRVS": "08286A0BE2",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(396003)(39860400002)(366004)(376002)(346002)(136003)(189003)(199004)(53936002)(47776003)(3846002)(8886007)(97736004)(55016002)(4326008)(316002)(16586007)(2361001)(66066001)(305945005)(33026002)(446003)(6116002)(11346002)(956004)(2906002)(50466002)(476003)(7736002)(486006)(21086003)(2616005)(36756003)(50226002)(51416003)(69596002)(48376002)(478600001)(5660300001)(386003)(86362001)(2351001)(52116002)(7696005)(68736007)(76176011)(186003)(25786009)(8676002)(81166006)(16526019)(81156014)(106356001)(105586002)(26005)(6916009)(6666004)(8936002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR05MB1257; H:mellanox.com; FPR:;\n\tSPF:None; \n\tLANG:en; PTR:InfoNoRecords; MX:1; A:1; ",
        "Received-SPF": "None (protection.outlook.com: mellanox.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "Hx67/BQGSIC9VVaYLcw3VEQQwgU21h++1R8al2f3jeWnOzwzXBwI14LxUpGJMQlW4KWYFtCO00k3AJMrD9PROFqGlzcr4SxM749OzNnGymYRO3BF3sQGLJav85nRJbfKb4H544VSfIaL6LzCzITRixBdamXwyQLFbpLRBVLthfg1qIqeBBfQsW6rSzp5gpCGhdmMRIlA0LECQKT51LA5flnsZY1GiVjhK8vsb2f4M+KEHLo3BdsjUGptLL5+RqzuZJRr5xlXsKpTIEM0u5H+8yLKGoWZy10DPHf1MsFi0IYOfaMNc85rf7A1IFCvqUCdDn9JZFQOD4R2trquA5CMr2TICcaxiO5sVRhvjuhh6LM=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "Mellanox.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "17 Oct 2018 15:22:22.0091\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "c931d3c9-4aa8-41e4-40cb-08d634445686",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "a652971c-7d2e-4d9b-a6a4-d149256f461b",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "HE1PR05MB1257",
        "Subject": "[dpdk-dev] [PATCH v6 2/3] app/testpmd: add packet dump callback\n\tfunctions",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "add new rx/tx callback functions to be used for dumping the packets.\n\nSigned-off-by: Raslan Darawsheh <rasland@mellanox.com>\nAcked-by: Bernard Iremonger <bernard.iremonger@intel.com>\n\n---\nchanges in v6:\n\trebase the work on top of the fix for compilation\n---\n---\n app/test-pmd/config.c  | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++\n app/test-pmd/rxonly.c  |  4 ---\n app/test-pmd/testpmd.h | 15 +++++++++--\n app/test-pmd/util.c    | 19 +++++++++++++-\n 4 files changed, 98 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex a6db5df..55fec7f 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -2706,6 +2706,73 @@ set_pkt_forwarding_mode(const char *fwd_mode_name)\n }\n \n void\n+add_rx_dump_callbacks(portid_t portid)\n+{\n+\tstruct rte_eth_dev_info dev_info;\n+\tuint16_t queue;\n+\n+\tif (port_id_is_invalid(portid, ENABLED_WARN))\n+\t\treturn;\n+\n+\trte_eth_dev_info_get(portid, &dev_info);\n+\tfor (queue = 0; queue < dev_info.nb_rx_queues; queue++)\n+\t\tif (!ports[portid].rx_dump_cb[queue])\n+\t\t\tports[portid].rx_dump_cb[queue] =\n+\t\t\t\trte_eth_add_rx_callback(portid, queue,\n+\t\t\t\t\tdump_rx_pkts, NULL);\n+}\n+\n+void\n+add_tx_dump_callbacks(portid_t portid)\n+{\n+\tstruct rte_eth_dev_info dev_info;\n+\tuint16_t queue;\n+\n+\tif (port_id_is_invalid(portid, ENABLED_WARN))\n+\t\treturn;\n+\trte_eth_dev_info_get(portid, &dev_info);\n+\tfor (queue = 0; queue < dev_info.nb_tx_queues; queue++)\n+\t\tif (!ports[portid].tx_dump_cb[queue])\n+\t\t\tports[portid].tx_dump_cb[queue] =\n+\t\t\t\trte_eth_add_tx_callback(portid, queue,\n+\t\t\t\t\t\t\tdump_tx_pkts, NULL);\n+}\n+\n+void\n+remove_rx_dump_callbacks(portid_t portid)\n+{\n+\tstruct rte_eth_dev_info dev_info;\n+\tuint16_t queue;\n+\n+\tif (port_id_is_invalid(portid, ENABLED_WARN))\n+\t\treturn;\n+\trte_eth_dev_info_get(portid, &dev_info);\n+\tfor (queue = 0; queue < dev_info.nb_rx_queues; queue++)\n+\t\tif (ports[portid].rx_dump_cb[queue]) {\n+\t\t\trte_eth_remove_rx_callback(portid, queue,\n+\t\t\t\tports[portid].rx_dump_cb[queue]);\n+\t\t\tports[portid].rx_dump_cb[queue] = NULL;\n+\t\t}\n+}\n+\n+void\n+remove_tx_dump_callbacks(portid_t portid)\n+{\n+\tstruct rte_eth_dev_info dev_info;\n+\tuint16_t queue;\n+\n+\tif (port_id_is_invalid(portid, ENABLED_WARN))\n+\t\treturn;\n+\trte_eth_dev_info_get(portid, &dev_info);\n+\tfor (queue = 0; queue < dev_info.nb_tx_queues; queue++)\n+\t\tif (ports[portid].tx_dump_cb[queue]) {\n+\t\t\trte_eth_remove_tx_callback(portid, queue,\n+\t\t\t\tports[portid].tx_dump_cb[queue]);\n+\t\t\tports[portid].tx_dump_cb[queue] = NULL;\n+\t\t}\n+}\n+\n+void\n set_verbose_level(uint16_t vb_level)\n {\n \tprintf(\"Change verbose level from %u to %u\\n\",\ndiff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c\nindex 3eca89c..5c65fc4 100644\n--- a/app/test-pmd/rxonly.c\n+++ b/app/test-pmd/rxonly.c\n@@ -70,10 +70,6 @@ pkt_burst_receive(struct fwd_stream *fs)\n \tfs->rx_burst_stats.pkt_burst_spread[nb_rx]++;\n #endif\n \tfs->rx_packets += nb_rx;\n-\n-\t/*\n-\t * Dump each received packet if verbose_level > 0.\n-\t */\n \tfor (i = 0; i < nb_rx; i++)\n \t\trte_pktmbuf_free(pkts_burst[i]);\n \ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex cba9640..c07bee8 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -191,6 +191,8 @@ struct rte_port {\n \tuint32_t                mc_addr_nb; /**< nb. of addr. in mc_addr_pool */\n \tuint8_t                 slave_flag; /**< bonding slave port */\n \tstruct port_flow        *flow_list; /**< Associated flows. */\n+\tconst struct rte_eth_rxtx_callback *rx_dump_cb[MAX_QUEUE_ID+1];\n+\tconst struct rte_eth_rxtx_callback *tx_dump_cb[MAX_QUEUE_ID+1];\n #ifdef SOFTNIC\n \tstruct softnic_port     softport;  /**< softnic params */\n #endif\n@@ -764,8 +766,17 @@ int check_nb_rxq(queueid_t rxq);\n queueid_t get_allowed_max_nb_txq(portid_t *pid);\n int check_nb_txq(queueid_t txq);\n \n-void dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],\n-\t uint16_t nb_pkts, int is_rx);\n+uint16_t dump_rx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],\n+\t\t      uint16_t nb_pkts, __rte_unused uint16_t max_pkts,\n+\t\t      __rte_unused void *user_param);\n+\n+uint16_t dump_tx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],\n+\t\t      uint16_t nb_pkts, __rte_unused void *user_param);\n+\n+void add_rx_dump_callbacks(portid_t portid);\n+void remove_rx_dump_callbacks(portid_t portid);\n+void add_tx_dump_callbacks(portid_t portid);\n+void remove_tx_dump_callbacks(portid_t portid);\n \n /*\n  * Work-around of a compilation error with ICC on invocations of the\ndiff --git a/app/test-pmd/util.c b/app/test-pmd/util.c\nindex 3ba3b58..f4125df 100644\n--- a/app/test-pmd/util.c\n+++ b/app/test-pmd/util.c\n@@ -21,7 +21,7 @@ print_ether_addr(const char *what, struct ether_addr *eth_addr)\n \tprintf(\"%s%s\", what, buf);\n }\n \n-void\n+static inline void\n dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],\n \t      uint16_t nb_pkts, int is_rx)\n {\n@@ -149,3 +149,20 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],\n \t\tprintf(\"  ol_flags: %s\\n\", buf);\n \t}\n }\n+\n+uint16_t\n+dump_rx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],\n+\t     uint16_t nb_pkts, __rte_unused uint16_t max_pkts,\n+\t     __rte_unused void *user_param)\n+{\n+\tdump_pkt_burst(port_id, queue, pkts, nb_pkts, 1);\n+\treturn nb_pkts;\n+}\n+\n+uint16_t\n+dump_tx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],\n+\t     uint16_t nb_pkts, __rte_unused void *user_param)\n+{\n+\tdump_pkt_burst(port_id, queue, pkts, nb_pkts, 0);\n+\treturn nb_pkts;\n+}\n",
    "prefixes": [
        "v6",
        "2/3"
    ]
}