get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 97586,
    "url": "http://patches.dpdk.org/api/patches/97586/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/20210831081224.47039-4-yufengx.mo@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": "<20210831081224.47039-4-yufengx.mo@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20210831081224.47039-4-yufengx.mo@intel.com",
    "date": "2021-08-31T08:12:21",
    "name": "[V1,3/6] tests/vxlan: move to pktgen from etgen",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "bb279648bc2a66ca7b50fa58e3a0d534d9a5f603",
    "submitter": {
        "id": 1342,
        "url": "http://patches.dpdk.org/api/people/1342/?format=api",
        "name": "Yufen.Mo",
        "email": "yufengx.mo@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dts/patch/20210831081224.47039-4-yufengx.mo@intel.com/mbox/",
    "series": [
        {
            "id": 18555,
            "url": "http://patches.dpdk.org/api/series/18555/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=18555",
            "date": "2021-08-31T08:12:18",
            "name": "etgen: remove etgen",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/18555/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/97586/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/97586/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 78FCBA0C46;\n\tTue, 31 Aug 2021 10:11:43 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6CBF5406A3;\n\tTue, 31 Aug 2021 10:11:43 +0200 (CEST)",
            "from mga07.intel.com (mga07.intel.com [134.134.136.100])\n by mails.dpdk.org (Postfix) with ESMTP id 4243A40141\n for <dts@dpdk.org>; Tue, 31 Aug 2021 10:11:41 +0200 (CEST)",
            "from fmsmga006.fm.intel.com ([10.253.24.20])\n by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 31 Aug 2021 01:11:40 -0700",
            "from dpdk-moyufen06.sh.intel.com ([10.67.116.208])\n by fmsmga006.fm.intel.com with ESMTP; 31 Aug 2021 01:11:38 -0700"
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10092\"; a=\"282140460\"",
            "E=Sophos;i=\"5.84,365,1620716400\"; d=\"scan'208\";a=\"282140460\"",
            "E=Sophos;i=\"5.84,365,1620716400\"; d=\"scan'208\";a=\"687623327\""
        ],
        "X-ExtLoop1": "1",
        "From": "Yufen Mo <yufengx.mo@intel.com>",
        "To": "dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com,\n junx.w.zhou@intel.com",
        "Cc": "Yufen Mo <yufengx.mo@intel.com>",
        "Date": "Tue, 31 Aug 2021 16:12:21 +0800",
        "Message-Id": "<20210831081224.47039-4-yufengx.mo@intel.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20210831081224.47039-1-yufengx.mo@intel.com>",
        "References": "<20210831081224.47039-1-yufengx.mo@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dts] [PATCH V1 3/6] tests/vxlan: move to pktgen from etgen",
        "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",
        "Sender": "\"dts\" <dts-bounces@dpdk.org>"
    },
    "content": "#. remove etgen relevant source code.\n#. udpate perf test cases to pktgen.\n#. dpdk remove legacy filter command, perf test cases need to use rte flow command.\n\nSigned-off-by: Yufen Mo <yufengx.mo@intel.com>\n---\n tests/TestSuite_vxlan.py | 186 ++++++++++++++++++++++++++-------------\n 1 file changed, 124 insertions(+), 62 deletions(-)",
    "diff": "diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py\nindex fdb6616d..30ad3c31 100644\n--- a/tests/TestSuite_vxlan.py\n+++ b/tests/TestSuite_vxlan.py\n@@ -57,7 +57,7 @@ from scapy.route import *\n \n from test_case import TestCase\n from settings import HEADER_SIZE, FOLDERS\n-from etgen import IxiaPacketGenerator\n+from pktgen import PacketGeneratorHelper\n import packet\n \n #\n@@ -283,7 +283,7 @@ class VxlanTestConfig(object):\n         return len(self.pkt) + 4\n \n \n-class TestVxlan(TestCase, IxiaPacketGenerator):\n+class TestVxlan(TestCase):\n \n     def set_up_all(self):\n         \"\"\"\n@@ -301,9 +301,6 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n         # Based on h/w type, choose how many ports to use\n         ports = self.dut.get_ports()\n \n-        # update IxiaPacketGenerator function by local\n-        self.tester.extend_external_packet_generator(TestVxlan, self)\n-\n         # Verify that enough ports are available\n         self.verify(len(ports) >= 2, \"Insufficient ports for testing\")\n         global valports\n@@ -396,6 +393,68 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n                 'omac-imac-tenid', 'recvqueue': 'Multi'}\n         ]\n \n+        self.pktgen_helper = PacketGeneratorHelper()\n+\n+    def set_fields(self):\n+        fields_config = {\n+            'ip': {\n+                'src': {'action': 'random'},\n+                'dst': {'action': 'random'},\n+        },}\n+        return fields_config\n+\n+    def suite_measure_throughput(self, tgen_input, use_vm=False):\n+        vm_config = self.set_fields()\n+        self.tester.pktgen.clear_streams()\n+        streams = self.pktgen_helper.prepare_stream_from_tginput(\n+            tgen_input, 100, vm_config if use_vm else None, self.tester.pktgen)\n+        result = self.tester.pktgen.measure_throughput(stream_ids=streams)\n+\n+        return result\n+\n+    def perf_tunnel_filter_set_rule(self, rule_config):\n+        rule_list = {\n+            # check inner mac + inner vlan filter can work\n+            'imac-ivlan': \n+                f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+                f'ipv4 / udp / vxlan / eth dst is {rule_config.get(\"inner_mac_dst\")} / '\n+                f'vlan tci is {rule_config.get(\"inner_vlan\")} / end actions pf / '\n+                f'queue index {rule_config.get(\"queue\")} / end',\n+            # check inner mac + inner vlan + tunnel id filter can work\n+            'imac-ivlan-tenid':\n+                f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+                f'ipv4 / udp / vxlan vni is {rule_config.get(\"vni\")} / '\n+                f'eth dst is {rule_config.get(\"inner_mac_dst\")} / '\n+                f'vlan tci is {rule_config.get(\"inner_vlan\")} / '\n+                f'end actions pf / queue index {rule_config.get(\"queue\")} / end',\n+            # check inner mac + tunnel id filter can work\n+            'imac-tenid':\n+                f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+                f'ipv4 / udp / vxlan vni is {rule_config.get(\"vni\")} / '\n+                f'eth dst is {rule_config.get(\"inner_mac_dst\")} / end actions pf / '\n+                f'queue index {rule_config.get(\"queue\")} / end',\n+            # check inner mac filter can work\n+            'imac':\n+                f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+                f'ipv4 / udp / vxlan / eth dst is {rule_config.get(\"inner_mac_dst\")} / end actions pf / '\n+                f'queue index {rule_config.get(\"queue\")} / end',\n+            # check outer mac + inner mac + tunnel id filter can work\n+            'omac-imac-tenid':\n+                f'flow create {rule_config.get(\"dut_port\")} ingress pattern '\n+                f'eth dst is {rule_config.get(\"outer_mac_dst\")} / '\n+                f'ipv4 / udp / vxlan vni is {rule_config.get(\"vni\")} / '\n+                f'eth dst is {rule_config.get(\"inner_mac_dst\")} / '\n+                f'end actions pf / queue index {rule_config.get(\"queue\")} / end',\n+        }\n+        rule = rule_list.get(rule_config.get(\"tun_filter\"))\n+        if not rule:\n+            msg = \"not support format\"\n+            self.logger.error(msg)\n+            return\n+        out = self.dut.send_expect(rule, \"testpmd>\", 3)\n+        pat = \"Flow rule #\\d+ created\"\n+        self.verify(re.findall(pat, out, re.M), \"Flow rule create failed\")\n+\n     def send_and_detect(self, **kwargs):\n         \"\"\"\n         send vxlan packet and check whether testpmd detect the correct\n@@ -886,11 +945,17 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n             self.enable_vxlan(dut_port)\n \n         if tun_filter != 'None':\n-            args = [dut_port, config.outer_mac_dst,\n-                    config.inner_mac_dst, config.inner_ip_dst,\n-                    config.inner_vlan, tun_filter,\n-                    config.vni, 0]\n-            self.tunnel_filter_add(*args)\n+            rule_config = {\n+                'dut_port': dut_port,\n+                'outer_mac_dst': config.outer_mac_dst,\n+                'inner_mac_dst': config.inner_mac_dst,\n+                'inner_ip_dst': config.inner_ip_dst,\n+                'inner_vlan': config.inner_vlan,\n+                'tun_filter': tun_filter,\n+                'vni': config.vni,\n+                'queue': 0\n+            }\n+            self.perf_tunnel_filter_set_rule(rule_config)\n \n         if perf_config['Packet'] == 'Normal':\n             config.outer_udp_dst = 63\n@@ -917,35 +982,22 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n                 pkt = config.create_pcap()\n                 pkts.append(pkt)\n \n-                args = [dut_port, config.outer_mac_dst,\n-                        config.inner_mac_dst, config.inner_ip_dst,\n-                        config.inner_vlan, tun_filter,\n-                        config.vni, (queue + 1)]\n-                self.tunnel_filter_add(*args)\n+                rule_config = {\n+                    'dut_port': dut_port,\n+                    'outer_mac_dst': config.outer_mac_dst,\n+                    'inner_mac_dst': config.inner_mac_dst,\n+                    'inner_ip_dst': config.inner_ip_dst,\n+                    'inner_vlan': config.inner_vlan,\n+                    'tun_filter': tun_filter,\n+                    'vni': config.vni,\n+                    'queue': (queue + 1),\n+                }\n+                self.perf_tunnel_filter_set_rule(rule_config)\n \n         # save pkt list into pcap file\n         wrpcap(config.pcap_file, pkts)\n         self.tester.session.copy_file_to(config.pcap_file)\n \n-    def ip_random(self, port, frag, src, proto, tos, dst, chksum, len,\n-                  options, version, flags, ihl, ttl, id):\n-        self.add_tcl_cmd(\"protocol config -name ip\")\n-        self.add_tcl_cmd('ip config -sourceIpAddr \"%s\"' % src)\n-        self.add_tcl_cmd('ip config -sourceIpAddrMode ipIncrHost')\n-        self.add_tcl_cmd('ip config -sourceIpAddrRepeatCount %d' % 64)\n-        self.add_tcl_cmd('ip config -destIpAddr \"%s\"' % dst)\n-        self.add_tcl_cmd('ip config -destIpMask \"255.255.0.0\" ')\n-        self.add_tcl_cmd('ip config -destIpAddrMode ipRandom')\n-        self.add_tcl_cmd('ip config -destIpAddrRepeatCount 65536')\n-        self.add_tcl_cmd(\"ip config -ttl %d\" % ttl)\n-        self.add_tcl_cmd(\"ip config -totalLength %d\" % len)\n-        self.add_tcl_cmd(\"ip config -fragment %d\" % frag)\n-        self.add_tcl_cmd(\"ip config -ipProtocol %d\" % proto)\n-        self.add_tcl_cmd(\"ip config -identifier %d\" % id)\n-        self.add_tcl_cmd(\"stream config -framesize %d\" % (len + 18))\n-        self.add_tcl_cmd(\"ip set %d %d %d\" %\n-                         (self.chasId, port['card'], port['port']))\n-\n     def combine_pcap(self, dest_pcap, src_pcap):\n         pkts = rdpcap(dest_pcap)\n         if len(pkts) != 1:\n@@ -1002,15 +1054,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n             else:\n                 wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1)\n \n-            if recv_queue == 'Multi' and tun_filter == \"None\":\n-                ip_ori = self.ip\n-                self.ip = self.ip_random\n-\n             # run traffic generator\n-            _, pps = self.tester.traffic_generator_throughput(tgen_input)\n-\n-            if recv_queue == 'Multi' and tun_filter == \"None\":\n-                self.ip = ip_ori\n+            use_vm = True if recv_queue == 'Multi' and tun_filter == \"None\" else False\n+            _, pps = self.suite_measure_throughput(tgen_input, use_vm=use_vm)\n \n             pps /= 1000000.0\n             perf_config['Mpps'] = pps\n@@ -1020,8 +1066,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n             self.dut.send_expect(\"quit\", \"# \", 10)\n \n             # verify every queue work fine\n+            check_queue = 0\n             if recv_queue == 'Multi':\n-                for queue in range(self.tunnel_multiqueue):\n+                for queue in range(check_queue):\n                     self.verify(\"Queue= %d -> TX Port\"\n                                 % (queue) in out,\n                                 \"Queue %d no traffic\" % queue)\n@@ -1033,6 +1080,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n \n         self.result_table_print()\n \n+\n     def test_perf_vxlan_checksum_performance_2ports(self):\n         self.result_table_create(self.chksum_header)\n         vxlan = VxlanTestConfig(self, payload_size=self.vxlan_payload)\n@@ -1053,8 +1101,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n             socket=self.ports_socket)\n         core_mask = utils.create_mask(core_list)\n \n-        tgen_dut = self.tester.get_local_port(self.dut_port)\n-        tgen_tester = self.tester.get_local_port(self.recv_port)\n+        self.dut_ports = self.dut.get_ports_performance(force_different_nic=False)\n+        tx_port = self.tester.get_local_port(self.dut_ports[0])\n+        rx_port = self.tester.get_local_port(self.dut_ports[1])\n+        \n         for cal in self.cal_type:\n             recv_queue = cal['recvqueue']\n             print((utils.GREEN(\"Measure checksum performance of [%s %s %s]\"\n@@ -1063,9 +1113,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n             # configure flows\n             tgen_input = []\n             if recv_queue == 'Multi':\n-                self.combine_pcap(\"vxlan1.pcap\", \"vxlan1_1.pcap\")\n-            self.tester.session.copy_file_to(\"vxlan1.pcap\")\n-            tgen_input.append((tgen_dut, tgen_tester, \"vxlan1.pcap\"))\n+                tgen_input.append((tx_port, rx_port, \"vxlan1.pcap\"))\n+                tgen_input.append((tx_port, rx_port, \"vxlan1_1.pcap\"))\n+            else:\n+                tgen_input.append((tx_port, rx_port, \"vxlan1.pcap\"))\n \n             # multi queue and signle queue commands\n             if recv_queue == 'Multi':\n@@ -1078,24 +1129,34 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n \n             self.dut.send_expect(pmd_cmd, \"testpmd> \", 100)\n             self.dut.send_expect(\"set fwd csum\", \"testpmd>\", 10)\n-            self.dut.send_expect(\"csum parse-tunnel on %d\" %\n-                                 self.dut_port, \"testpmd>\", 10)\n-            self.dut.send_expect(\"csum parse-tunnel on %d\" %\n-                                 self.recv_port, \"testpmd>\", 10)\n             self.enable_vxlan(self.dut_port)\n             self.enable_vxlan(self.recv_port)\n \n             # redirect flow to another queue by tunnel filter\n-            args = [self.dut_port, vxlan.outer_mac_dst,\n-                    vxlan.inner_mac_dst, vxlan.inner_ip_dst,\n-                    0, 'imac', vxlan.vni, 0]\n-            self.tunnel_filter_add(*args)\n+            rule_config = {\n+                'dut_port': self.dut_port,\n+                'outer_mac_dst': vxlan.outer_mac_dst,\n+                'inner_mac_dst': vxlan.inner_mac_dst,\n+                'inner_ip_dst': vxlan.inner_ip_dst,\n+                'inner_vlan': 0,\n+                'tun_filter': 'imac',\n+                'vni': vxlan.vni,\n+                'queue': 0\n+            }\n+            self.perf_tunnel_filter_set_rule(rule_config)\n \n             if recv_queue == 'Multi':\n-                args = [self.dut_port, vxlan_queue.outer_mac_dst,\n-                        vxlan_queue.inner_mac_dst, vxlan_queue.inner_ip_dst,\n-                        0, 'imac', vxlan_queue.vni, 1]\n-                self.tunnel_filter_add(*args)\n+                rule_config = {\n+                    'dut_port': self.dut_port,\n+                    'outer_mac_dst': vxlan_queue.outer_mac_dst,\n+                    'inner_mac_dst': vxlan_queue.inner_mac_dst,\n+                    'inner_ip_dst': vxlan_queue.inner_ip_dst,\n+                    'inner_vlan': 0,\n+                    'tun_filter': 'imac',\n+                    'vni': vxlan.vni,\n+                    'queue': 1\n+                }\n+                self.perf_tunnel_filter_set_rule(rule_config)\n \n             for pro in cal['csum']:\n                 self.csum_set_type(pro, self.dut_port)\n@@ -1106,7 +1167,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n             wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1)\n \n             # run traffic generator\n-            _, pps = self.tester.traffic_generator_throughput(tgen_input)\n+            _, pps = self.suite_measure_throughput(tgen_input)\n \n             pps /= 1000000.0\n             cal['Mpps'] = pps\n@@ -1116,8 +1177,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n             self.dut.send_expect(\"quit\", \"# \", 10)\n \n             # verify every queue work fine\n+            check_queue = 1\n             if recv_queue == 'Multi':\n-                for queue in range(self.tunnel_multiqueue):\n+                for queue in range(check_queue):\n                     self.verify(\"Queue= %d -> TX Port\"\n                                 % (queue) in out,\n                                 \"Queue %d no traffic\" % queue)\n",
    "prefixes": [
        "V1",
        "3/6"
    ]
}