get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 116621,
    "url": "http://patches.dpdk.org/api/patches/116621/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/20220922142950.398902-4-hongbox.li@intel.com/",
    "project": {
        "id": 3,
        "url": "http://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<20220922142950.398902-4-hongbox.li@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20220922142950.398902-4-hongbox.li@intel.com",
    "date": "2022-09-22T14:29:47",
    "name": "[V1,4/7] tests/tso:Separated performance cases",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "e642654a4230d28a13151cf94e53084e1977e41b",
    "submitter": {
        "id": 2804,
        "url": "http://patches.dpdk.org/api/people/2804/?format=api",
        "name": "Li, HongboX",
        "email": "hongbox.li@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dts/patch/20220922142950.398902-4-hongbox.li@intel.com/mbox/",
    "series": [
        {
            "id": 24769,
            "url": "http://patches.dpdk.org/api/series/24769/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=24769",
            "date": "2022-09-22T14:29:44",
            "name": "[V1,1/7] tests/efd:Separated performance cases",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/24769/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/116621/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/116621/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dts-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 EC492A0540;\n\tThu, 22 Sep 2022 08:18:26 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id E664D4067C;\n\tThu, 22 Sep 2022 08:18:26 +0200 (CEST)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n by mails.dpdk.org (Postfix) with ESMTP id 2320C40156\n for <dts@dpdk.org>; Thu, 22 Sep 2022 08:18:24 +0200 (CEST)",
            "from fmsmga005.fm.intel.com ([10.253.24.32])\n by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 21 Sep 2022 23:18:24 -0700",
            "from unknown (HELO localhost.localdomain) ([10.239.252.92])\n by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 21 Sep 2022 23:17:47 -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=1663827505; x=1695363505;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=FFu1zG70gDTuqoCXXC/h09KCMyxMgr+Xaf2enIHejGE=;\n b=BMQpm74AJqS9VDKyp4j/ZuCxOQ3s5dK6qf4PqCVAuLw7lgyGMlOfQ+mf\n ilQLkFRCzeCg356QwhvlMD73Q6BDhv6JoJiHZ3aozSjMNhITWHAohXjbx\n DzAotO7PK2o2QXvCtq8Cpe9jD4QaAuAIfqqn+vJBoFIgCKyxEu+ptznuT\n bHzeg3H+1e/PJmqj7LipEK42FpJAdwiD7ps0MY4xdVxdEP4N1HcsOnb1x\n XUwscH8Tf0mWZ6BAeto7pVSZQ6FPBnAFwsFWOlNCwqGu4hhaz1oaDtV4G\n Y/2z34CfaKKzSiBqJ5mxpu7osWChP8qJ5dpFxKZkkVXb4l+RP6BYhOakY A==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6500,9779,10477\"; a=\"301617773\"",
            "E=Sophos;i=\"5.93,335,1654585200\"; d=\"scan'208\";a=\"301617773\"",
            "E=Sophos;i=\"5.93,335,1654585200\"; d=\"scan'208\";a=\"948466152\""
        ],
        "From": "Hongbo Li <hongbox.li@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "Hongbo Li <hongbox.li@intel.com>",
        "Subject": "[dts][PATCH V1 4/7] tests/tso:Separated performance cases",
        "Date": "Thu, 22 Sep 2022 14:29:47 +0000",
        "Message-Id": "<20220922142950.398902-4-hongbox.li@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20220922142950.398902-1-hongbox.li@intel.com>",
        "References": "<20220922142950.398902-1-hongbox.li@intel.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dts@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "test suite reviews and discussions <dts.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dts/>",
        "List-Post": "<mailto:dts@dpdk.org>",
        "List-Help": "<mailto:dts-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dts-bounces@dpdk.org"
    },
    "content": "Separated performance cases\n\nSigned-off-by: Hongbo Li <hongbox.li@intel.com>\n---\n test_plans/perf_tso_test_plan.rst |  82 +++++++++++\n test_plans/tso_test_plan.rst      |  35 -----\n tests/TestSuite_perf_tso.py       | 221 ++++++++++++++++++++++++++++++\n tests/TestSuite_tso.py            | 128 -----------------\n 4 files changed, 303 insertions(+), 163 deletions(-)\n create mode 100644 test_plans/perf_tso_test_plan.rst\n create mode 100644 tests/TestSuite_perf_tso.py",
    "diff": "diff --git a/test_plans/perf_tso_test_plan.rst b/test_plans/perf_tso_test_plan.rst\nnew file mode 100644\nindex 00000000..9dcdd4c3\n--- /dev/null\n+++ b/test_plans/perf_tso_test_plan.rst\n@@ -0,0 +1,82 @@\n+.. SPDX-License-Identifier: BSD-3-Clause\n+   Copyright(c) 2015-2017 Intel Corporation\n+\n+=========================================\n+Transmit Segmentation Offload (TSO) Tests\n+=========================================\n+\n+Description\n+===========\n+\n+This document provides the plan for testing the TSO (Transmit Segmentation\n+Offload, also called Large Send offload - LSO) feature of\n+Intel Ethernet Controller, including Intel 82599 10GbE Ethernet Controller and\n+Intel® Ethernet Converged Network Adapter XL710-QDA2. TSO enables the TCP/IP stack to\n+pass the network device a larger ULP datagram than the Maximum Transmit\n+Unit Size (MTU). NIC divides the large ULP datagram to multiple segments\n+according to the MTU size.\n+\n+\n+Prerequisites\n+=============\n+\n+The DUT must take one of the Ethernet controller ports connected to a port on another\n+device that is controlled by the Scapy packet generator.\n+\n+The Ethernet interface identifier of the port that Scapy will use must be known.\n+On tester, all offload feature should be disabled on tx port, and start rx port capture::\n+\n+  ethtool -K <tx port> rx off tx off tso off gso off gro off lro off\n+  ip l set <tx port> up\n+  tcpdump -n -e -i <rx port> -s 0 -w /tmp/cap\n+\n+\n+On DUT, run pmd with parameter \"--enable-rx-cksum\". Then enable TSO on tx port\n+and checksum on rx port. The test commands is below::\n+\n+  #enable hw checksum on rx port\n+  tx_checksum set ip hw 0\n+  tx_checksum set udp hw 0\n+  tx_checksum set tcp hw 0\n+  tx_checksum set sctp hw 0\n+  set fwd csum\n+\n+  # enable TSO on tx port\n+  *tso set 800 1\n+\n+\n+\n+Test case: TSO performance\n+==========================\n+\n+Set the packet stream as below before testing\n+\n++-------+---------+---------+---------+----------+----------+\n+| Frame | 1S/1C/1T| 1S/1C/1T| 1S/2C/1T| 1S/2C/2T | 1S/2C/2T |\n+| Size  |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  64   |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  65   |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  128  |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  256  |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  512  |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  1024 |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  1280 |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+|  1518 |         |         |         |          |          |\n++-------+---------+---------+---------+----------+----------+\n+\n+Then run the test application as below::\n+\n+   ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xffffffff -n 2 -- -i --rxd=512 --txd=512\n+   --burst=32 --rxfreet=64 --mbcache=128 --portmask=0x3 --txpt=36 --txht=0 --txwt=0\n+   --txfreet=32 --txrst=32 --enable-rx-cksum\n+\n+The -n command is used to select the number of memory channels. It should match the\n+number of memory channels on that setup.\ndiff --git a/test_plans/tso_test_plan.rst b/test_plans/tso_test_plan.rst\nindex d0f96b2b..7b7077b7 100644\n--- a/test_plans/tso_test_plan.rst\n+++ b/test_plans/tso_test_plan.rst\n@@ -131,38 +131,3 @@ Test nvgre() in scapy::\n \n     sendp([Ether(dst=\"%s\",src=\"52:00:00:00:00:00\")/IP(src=\"192.168.1.1\",dst=\"192.168.1.2\",proto=47)/NVGRE()/Ether(dst=%s,src=\"52:00:00:00:00:00\")/IP(src=\"192.168.1.1\",dst=\"192.168.1.2\")/TCP(sport=\"1021\",dport=\"1021\")/(\"X\"*%s)], iface=\"%s\")\n \n-Test case: TSO performance\n-==========================\n-\n-Set the packet stream to be sent out from packet generator before testing as\n-below.\n-\n-+-------+---------+---------+---------+----------+----------+\n-| Frame | 1S/1C/1T| 1S/1C/1T| 1S/2C/1T| 1S/2C/2T | 1S/2C/2T |\n-| Size  |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  64   |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  65   |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  128  |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  256  |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  512  |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  1024 |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  1280 |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-|  1518 |         |         |         |          |          |\n-+-------+---------+---------+---------+----------+----------+\n-\n-Then run the test application as below::\n-\n-   ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xffffffff -n 2 -- -i --rxd=512 --txd=512\n-   --burst=32 --rxfreet=64 --mbcache=128 --portmask=0x3 --txpt=36 --txht=0 --txwt=0\n-   --txfreet=32 --txrst=32 --enable-rx-cksum\n-\n-The -n command is used to select the number of memory channels. It should match the\n-number of memory channels on that setup.\ndiff --git a/tests/TestSuite_perf_tso.py b/tests/TestSuite_perf_tso.py\nnew file mode 100644\nindex 00000000..3821ecd1\n--- /dev/null\n+++ b/tests/TestSuite_perf_tso.py\n@@ -0,0 +1,221 @@\n+import os\n+import time\n+\n+import framework.utils as utils\n+from framework.pktgen import PacketGeneratorHelper\n+from framework.settings import HEADER_SIZE\n+from framework.test_case import TestCase\n+\n+DEFAULT_MUT = 1500\n+TSO_MTU = 9000\n+\n+\n+class TestTSO(TestCase):\n+    dut_ports = []\n+\n+    def set_up_all(self):\n+        \"\"\"\n+        Run at the start of each test suite.\n+        \"\"\"\n+        # Based on h/w type, choose how many ports to use\n+        self.dut_ports = self.dut.get_ports(self.nic)\n+\n+        # Verify that enough ports are available\n+        self.verify(len(self.dut_ports) >= 2, \"Insufficient ports for testing\")\n+\n+        # Verify that enough threads are available\n+        self.all_cores_mask = utils.create_mask(self.dut.get_core_list(\"all\"))\n+        self.portMask = utils.create_mask([self.dut_ports[0], self.dut_ports[1]])\n+        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])\n+\n+        self.loading_sizes = [128, 800, 801, 1700, 2500]\n+        self.rxfreet_values = [0, 8, 16, 32, 64, 128]\n+\n+        self.test_cycles = [{\"cores\": \"\", \"Mpps\": {}, \"pct\": {}}]\n+\n+        self.table_header = [\"Frame Size\"]\n+        for test_cycle in self.test_cycles:\n+            self.table_header.append(\"%s Mpps\" % test_cycle[\"cores\"])\n+            self.table_header.append(\"% linerate\")\n+\n+        self.eal_param = self.dut.create_eal_parameters(\n+            cores=\"1S/2C/1T\", socket=self.ports_socket, ports=self.dut_ports\n+        )\n+\n+        self.headers_size = HEADER_SIZE[\"eth\"] + HEADER_SIZE[\"ip\"] + HEADER_SIZE[\"tcp\"]\n+        self.tester.send_expect(\n+            \"ifconfig %s mtu %s\"\n+            % (\n+                self.tester.get_interface(\n+                    self.tester.get_local_port(self.dut_ports[0])\n+                ),\n+                TSO_MTU,\n+            ),\n+            \"# \",\n+        )\n+        # get dts output path\n+        if self.logger.log_path.startswith(os.sep):\n+            self.output_path = self.logger.log_path\n+        else:\n+            cur_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))\n+            self.output_path = os.sep.join([cur_path, self.logger.log_path])\n+        # create an instance to set stream field setting\n+        self.pktgen_helper = PacketGeneratorHelper()\n+        self.path = self.dut.apps_name[\"test-pmd\"]\n+\n+    def set_up(self):\n+        \"\"\"\n+        Run before each test case.\n+        \"\"\"\n+        pass\n+\n+    def test_perf_TSO_2ports(self):\n+        \"\"\"\n+        TSO Performance Benchmarking with 2 ports.\n+        \"\"\"\n+\n+        # prepare traffic generator input\n+        tgen_input = []\n+\n+        # run testpmd for each core config\n+        for test_cycle in self.test_cycles:\n+            core_config = test_cycle[\"cores\"]\n+            cores = self.dut.get_core_list(core_config, socket=self.ports_socket)\n+            self.coreMask = utils.create_mask(cores)\n+            if len(cores) > 2:\n+                queues = len(cores) // 2\n+            else:\n+                queues = 1\n+\n+            command_line = (\n+                \"%s %s -- -i --rxd=512 --txd=512 --burst=32 --rxfreet=64 --mbcache=128 --portmask=%s --max-pkt-len=%s --txpt=36 --txht=0 --txwt=0 --txfreet=32 --txrst=32 \"\n+                % (self.path, self.eal_param, self.portMask, TSO_MTU)\n+            )\n+            info = \"Executing PMD using %s\\n\" % test_cycle[\"cores\"]\n+            self.logger.info(info)\n+            self.rst_report(info, annex=True)\n+            self.rst_report(command_line + \"\\n\\n\", frame=True, annex=True)\n+\n+            self.dut.send_expect(command_line, \"testpmd> \", 120)\n+            self.dut.send_expect(\"port stop all\", \"testpmd> \", 120)\n+            self.dut.send_expect(\n+                \"csum set ip hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set udp hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set tcp hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set sctp hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set outer-ip hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum parse-tunnel on %d\" % self.dut_ports[0], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set ip hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set udp hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set tcp hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set sctp hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum set outer-ip hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\n+                \"csum parse-tunnel on %d\" % self.dut_ports[1], \"testpmd> \", 120\n+            )\n+            self.dut.send_expect(\"tso set 800 %d\" % self.dut_ports[1], \"testpmd> \", 120)\n+            self.dut.send_expect(\"set fwd csum\", \"testpmd> \", 120)\n+            self.dut.send_expect(\"port start all\", \"testpmd> \", 120)\n+            self.dut.send_expect(\"set promisc all off\", \"testpmd> \", 120)\n+            self.dut.send_expect(\"start\", \"testpmd> \")\n+            for loading_size in self.loading_sizes:\n+                frame_size = loading_size + self.headers_size\n+                wirespeed = self.wirespeed(self.nic, frame_size, 2)\n+\n+                # create pcap file\n+                self.logger.info(\"Running with frame size %d \" % frame_size)\n+                payload_size = frame_size - self.headers_size\n+                for _port in range(2):\n+                    mac = self.dut.get_mac_address(self.dut_ports[_port])\n+\n+                    pcap = os.sep.join([self.output_path, \"dts{0}.pcap\".format(_port)])\n+                    self.tester.scapy_append(\n+                        'wrpcap(\"%s\", [Ether(dst=\"%s\",src=\"52:00:00:00:00:01\")/IP(src=\"192.168.1.1\",dst=\"192.168.1.2\")/TCP(sport=1021,dport=1021)/(\"X\"*%d)])'\n+                        % (pcap, mac, payload_size)\n+                    )\n+                    tgen_input.append(\n+                        (\n+                            self.tester.get_local_port(self.dut_ports[_port]),\n+                            self.tester.get_local_port(self.dut_ports[1 - _port]),\n+                            \"%s\" % pcap,\n+                        )\n+                    )\n+                self.tester.scapy_execute()\n+\n+                # clear streams before add new streams\n+                self.tester.pktgen.clear_streams()\n+                # run packet generator\n+                streams = self.pktgen_helper.prepare_stream_from_tginput(\n+                    tgen_input, 100, None, self.tester.pktgen\n+                )\n+                _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)\n+\n+                pps /= 1000000.0\n+                test_cycle[\"Mpps\"][loading_size] = pps\n+                test_cycle[\"pct\"][loading_size] = pps * 100 // wirespeed\n+\n+            self.dut.send_expect(\"stop\", \"testpmd> \")\n+            self.dut.send_expect(\"quit\", \"# \", 30)\n+            time.sleep(5)\n+\n+        for n in range(len(self.test_cycles)):\n+            for loading_size in self.loading_sizes:\n+                self.verify(\n+                    self.test_cycles[n][\"Mpps\"][loading_size] > 0, \"No traffic detected\"\n+                )\n+\n+        # Print results\n+        self.result_table_create(self.table_header)\n+        for loading_size in self.loading_sizes:\n+            table_row = [loading_size]\n+            for test_cycle in self.test_cycles:\n+                table_row.append(test_cycle[\"Mpps\"][loading_size])\n+                table_row.append(test_cycle[\"pct\"][loading_size])\n+\n+            self.result_table_add(table_row)\n+\n+        self.result_table_print()\n+\n+    def tear_down(self):\n+        \"\"\"\n+        Run after each test case.\n+        \"\"\"\n+        self.dut.send_expect(\"quit\", \"# \")\n+        self.dut.kill_all()\n+        time.sleep(2)\n+\n+    def tear_down_all(self):\n+        \"\"\"\n+        Run after each test suite.\n+        \"\"\"\n+        self.tester.send_expect(\n+            \"ifconfig %s mtu %s\"\n+            % (\n+                self.tester.get_interface(\n+                    self.tester.get_local_port(self.dut_ports[0])\n+                ),\n+                DEFAULT_MUT,\n+            ),\n+            \"# \",\n+        )\ndiff --git a/tests/TestSuite_tso.py b/tests/TestSuite_tso.py\nindex 49db011d..c4f25afc 100644\n--- a/tests/TestSuite_tso.py\n+++ b/tests/TestSuite_tso.py\n@@ -487,134 +487,6 @@ class TestTSO(TestCase):\n                     )\n             self.get_chksum_value_and_verify(dump_pcap, save_file, Nic_list)\n \n-    def test_perf_TSO_2ports(self):\n-        \"\"\"\n-        TSO Performance Benchmarking with 2 ports.\n-        \"\"\"\n-\n-        # prepare traffic generator input\n-        tgen_input = []\n-\n-        # run testpmd for each core config\n-        for test_cycle in self.test_cycles:\n-            core_config = test_cycle[\"cores\"]\n-            cores = self.dut.get_core_list(core_config, socket=self.ports_socket)\n-            self.coreMask = utils.create_mask(cores)\n-            if len(cores) > 2:\n-                queues = len(cores) // 2\n-            else:\n-                queues = 1\n-\n-            command_line = (\n-                \"%s %s -- -i --rxd=512 --txd=512 --burst=32 --rxfreet=64 --mbcache=128 --portmask=%s --max-pkt-len=%s --txpt=36 --txht=0 --txwt=0 --txfreet=32 --txrst=32 \"\n-                % (self.path, self.eal_param, self.portMask, TSO_MTU)\n-            )\n-            info = \"Executing PMD using %s\\n\" % test_cycle[\"cores\"]\n-            self.logger.info(info)\n-            self.rst_report(info, annex=True)\n-            self.rst_report(command_line + \"\\n\\n\", frame=True, annex=True)\n-\n-            self.dut.send_expect(command_line, \"testpmd> \", 120)\n-            self.dut.send_expect(\"port stop all\", \"testpmd> \", 120)\n-            self.dut.send_expect(\n-                \"csum set ip hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set udp hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set tcp hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set sctp hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set outer-ip hw %d\" % self.dut_ports[0], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum parse-tunnel on %d\" % self.dut_ports[0], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set ip hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set udp hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set tcp hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set sctp hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum set outer-ip hw %d\" % self.dut_ports[1], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\n-                \"csum parse-tunnel on %d\" % self.dut_ports[1], \"testpmd> \", 120\n-            )\n-            self.dut.send_expect(\"tso set 800 %d\" % self.dut_ports[1], \"testpmd> \", 120)\n-            self.dut.send_expect(\"set fwd csum\", \"testpmd> \", 120)\n-            self.dut.send_expect(\"port start all\", \"testpmd> \", 120)\n-            self.dut.send_expect(\"set promisc all off\", \"testpmd> \", 120)\n-            self.dut.send_expect(\"start\", \"testpmd> \")\n-            for loading_size in self.loading_sizes:\n-                frame_size = loading_size + self.headers_size\n-                wirespeed = self.wirespeed(self.nic, frame_size, 2)\n-\n-                # create pcap file\n-                self.logger.info(\"Running with frame size %d \" % frame_size)\n-                payload_size = frame_size - self.headers_size\n-                for _port in range(2):\n-                    mac = self.dut.get_mac_address(self.dut_ports[_port])\n-\n-                    pcap = os.sep.join([self.output_path, \"dts{0}.pcap\".format(_port)])\n-                    self.tester.scapy_append(\n-                        'wrpcap(\"%s\", [Ether(dst=\"%s\",src=\"52:00:00:00:00:01\")/IP(src=\"192.168.1.1\",dst=\"192.168.1.2\")/TCP(sport=1021,dport=1021)/(\"X\"*%d)])'\n-                        % (pcap, mac, payload_size)\n-                    )\n-                    tgen_input.append(\n-                        (\n-                            self.tester.get_local_port(self.dut_ports[_port]),\n-                            self.tester.get_local_port(self.dut_ports[1 - _port]),\n-                            \"%s\" % pcap,\n-                        )\n-                    )\n-                self.tester.scapy_execute()\n-\n-                # clear streams before add new streams\n-                self.tester.pktgen.clear_streams()\n-                # run packet generator\n-                streams = self.pktgen_helper.prepare_stream_from_tginput(\n-                    tgen_input, 100, None, self.tester.pktgen\n-                )\n-                _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)\n-\n-                pps /= 1000000.0\n-                test_cycle[\"Mpps\"][loading_size] = pps\n-                test_cycle[\"pct\"][loading_size] = pps * 100 // wirespeed\n-\n-            self.dut.send_expect(\"stop\", \"testpmd> \")\n-            self.dut.send_expect(\"quit\", \"# \", 30)\n-            time.sleep(5)\n-\n-        for n in range(len(self.test_cycles)):\n-            for loading_size in self.loading_sizes:\n-                self.verify(\n-                    self.test_cycles[n][\"Mpps\"][loading_size] > 0, \"No traffic detected\"\n-                )\n-\n-        # Print results\n-        self.result_table_create(self.table_header)\n-        for loading_size in self.loading_sizes:\n-            table_row = [loading_size]\n-            for test_cycle in self.test_cycles:\n-                table_row.append(test_cycle[\"Mpps\"][loading_size])\n-                table_row.append(test_cycle[\"pct\"][loading_size])\n-\n-            self.result_table_add(table_row)\n-\n-        self.result_table_print()\n-\n     def tear_down(self):\n         \"\"\"\n         Run after each test case.\n",
    "prefixes": [
        "V1",
        "4/7"
    ]
}