test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH V2 0/6] etgen: remove etgen
@ 2021-08-31  8:22 Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 1/6] framework/etgen: " Yufen Mo
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Yufen Mo @ 2021-08-31  8:22 UTC (permalink / raw)
  To: dts, lijuan.tu, yingyax.han, junx.w.zhou; +Cc: Yufen Mo


v2: 
 - fix checkpatch error. 
 -  

v1: 
 - remove etgen relevant source code. 

Yufen Mo (6):
  framework/etgen: remove etgen
  tests: remove etgen
  tests/vxlan: move to pktgen from etgen
  tests/eventdev_perf: move to pktgen from etgen
  tests/eventdev_pipeline_perf: move to pktgen from etgen
  tests/fdir: move to pktgen from etgen

 conf/crbs.cfg                                 |   2 -
 conf/ixia.cfg                                 |  15 -
 framework/config.py                           |  67 +-
 framework/crb.py                              |   2 +-
 framework/crbs.py                             |   1 -
 framework/dts.py                              |   6 -
 framework/etgen.py                            | 972 ------------------
 framework/logger.py                           |  20 -
 framework/project_dpdk.py                     |  12 +-
 framework/settings.py                         |   1 -
 framework/tester.py                           |  90 +-
 tests/TestSuite_af_xdp_2.py                   |   2 +-
 tests/TestSuite_distributor.py                |   2 -
 tests/TestSuite_efd.py                        |   1 -
 tests/TestSuite_eventdev_perf.py              | 293 ++++--
 tests/TestSuite_eventdev_pipeline_perf.py     | 170 +--
 tests/TestSuite_fdir.py                       |  43 +-
 tests/TestSuite_iavf.py                       |   1 -
 tests/TestSuite_multiprocess.py               |   1 -
 tests/TestSuite_ntb.py                        |   1 -
 tests/TestSuite_packet_ordering.py            |   1 -
 tests/TestSuite_performance_thread.py         |   1 -
 tests/TestSuite_pmd.py                        |   1 -
 tests/TestSuite_rteflow_priority.py           |   1 -
 tests/TestSuite_userspace_ethtool.py          | 127 +--
 tests/TestSuite_vhost_virtio_pmd_interrupt.py |   1 -
 tests/TestSuite_virtio_event_idx_interrupt.py |   1 -
 tests/TestSuite_vm_power_manager.py           |   3 +-
 tests/TestSuite_vmdq.py                       |   1 -
 tests/TestSuite_vmdq_dcb.py                   |   1 -
 tests/TestSuite_vxlan.py                      | 186 ++--
 31 files changed, 472 insertions(+), 1554 deletions(-)
 delete mode 100644 conf/ixia.cfg
 delete mode 100644 framework/etgen.py

-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH V2 1/6] framework/etgen: remove etgen
  2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
@ 2021-08-31  8:22 ` Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 2/6] tests: " Yufen Mo
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Yufen Mo @ 2021-08-31  8:22 UTC (permalink / raw)
  To: dts, lijuan.tu, yingyax.han, junx.w.zhou; +Cc: Yufen Mo


remove etgen relevant source code.

Signed-off-by: Yufen Mo <yufengx.mo@intel.com>
---
 conf/crbs.cfg             |   2 -
 conf/ixia.cfg             |  15 -
 framework/config.py       |  67 +--
 framework/crb.py          |   2 +-
 framework/crbs.py         |   1 -
 framework/dts.py          |   6 -
 framework/etgen.py        | 972 --------------------------------------
 framework/logger.py       |  20 -
 framework/project_dpdk.py |  12 +-
 framework/settings.py     |   1 -
 framework/tester.py       |  90 +---
 11 files changed, 5 insertions(+), 1183 deletions(-)
 delete mode 100644 conf/ixia.cfg
 delete mode 100644 framework/etgen.py

diff --git a/conf/crbs.cfg b/conf/crbs.cfg
index 0ba9d1fc..b6c0a9af 100644
--- a/conf/crbs.cfg
+++ b/conf/crbs.cfg
@@ -6,7 +6,6 @@
 #  os: operation system type linux or freebsd
 #  tester_ip: Tester ip address
 #  tester_passwd: Tester password
-#  ixia_group: IXIA group name
 #  pktgen_group: packet generator group name: ixia/trex/ixia_network
 #  channels: Board channel number
 #  bypass_core0: Whether by pass core0
@@ -36,7 +35,6 @@ os=linux
 dut_arch=
 tester_ip=yyy.yyy.yyy.yyy
 tester_passwd=
-ixia_group=
 pktgen_group=
 channels=4
 bypass_core0=True
diff --git a/conf/ixia.cfg b/conf/ixia.cfg
deleted file mode 100644
index 9deba603..00000000
--- a/conf/ixia.cfg
+++ /dev/null
@@ -1,15 +0,0 @@
-# IXIA port Configuration
-# IxiaGroup: Group name for IXIA ports
-# Version  : IXIA TCL server version
-# IP       : IXIA server IP address
-# Ports    : [IXIA port list]
-# ixia_force100g: We need to set this to enable if we need IXIA port work in 100G mode.
-[IXIA Group]
-ixia_version=6.62
-ixia_ip=xxx.xxx.xxx.xxx
-ixia_ports=
-    card=1,port=1;
-    card=1,port=2;
-    card=1,port=3;
-    card=1,port=4;
-ixia_force100g=disable
diff --git a/framework/config.py b/framework/config.py
index 88ae8ea5..ac075233 100644
--- a/framework/config.py
+++ b/framework/config.py
@@ -36,7 +36,7 @@ import os
 import re
 import configparser  # config parse module
 import argparse      # parse arguments module
-from settings import (IXIA, PKTGEN, PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK,
+from settings import (PKTGEN, PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK,
                       CONFIG_ROOT_PATH, SUITE_SECTION_NAME)
 from settings import load_global_setting, DTS_CFG_FOLDER
 from exception import ConfigParseException, VirtConfigParseException, PortConfigParseException
@@ -268,7 +268,7 @@ class PortConf(UserConf):
 class CrbsConf(UserConf):
     DEF_CRB = {'IP': '', 'board': 'default', 'user': '',
                'pass': '', 'tester IP': '', 'tester pass': '',
-               IXIA: None, 'memory channels': 4,
+               'memory channels': 4,
                PKTGEN: None,
                'bypass core0': True, 'dut_cores': '',
                'snapshot_load_side': 'tester'}
@@ -309,11 +309,6 @@ class CrbsConf(UserConf):
                     crb['tester IP'] = value
                 elif key == 'tester_passwd':
                     crb['tester pass'] = value
-                elif key == 'ixia_group':
-                    # None type will be check later
-                    if value.lower() == 'none':
-                        value = None
-                    crb[IXIA] = value
                 elif key == 'pktgen_group':
                     crb[PKTGEN] = value.lower()
                 elif key == 'channels':
@@ -336,64 +331,6 @@ class CrbsConf(UserConf):
         return self.crbs_cfg
 
 
-class IxiaConf(UserConf):
-
-    def __init__(self, ixia_conf=IXIACONF):
-        self.config_file = ixia_conf
-        self.ixia_cfg = {}
-        try:
-            self.ixia_conf = UserConf(self.config_file)
-        except ConfigParseException:
-            self.ixia_conf = None
-            raise ConfigParseException
-
-    def load_ixia_config(self):
-        port_reg = r'card=(\d+),port=(\d+)'
-        groups = self.ixia_conf.get_sections()
-        if not groups:
-            return self.ixia_cfg
-
-        for group in groups:
-            ixia_group = {}
-            ixia_confs = self.ixia_conf.load_section(group)
-            if not ixia_confs:
-                continue
-
-            # convert file configuration to dts ixiacfg
-            for conf in ixia_confs:
-                key, value = conf
-                if key == 'ixia_version':
-                    ixia_group['Version'] = value
-                elif key == 'ixia_ip':
-                    ixia_group['IP'] = value
-                elif key == 'ixia_ports':
-                    ports = self.ixia_conf.load_config(value)
-                    ixia_ports = []
-                    for port in ports:
-                        m = re.match(port_reg, port)
-                        if m:
-                            ixia_port = {}
-                            ixia_port["card"] = int(m.group(1))
-                            ixia_port["port"] = int(m.group(2))
-                            ixia_ports.append(ixia_port)
-                    ixia_group['Ports'] = ixia_ports
-                elif key == 'ixia_enable_rsfec':
-                    ixia_group['enable_rsfec'] = value
-
-            if 'Version' not in ixia_group:
-                print('ixia configuration file request ixia_version option!!!')
-                continue
-            if 'IP' not in ixia_group:
-                print('ixia configuration file request ixia_ip option!!!')
-                continue
-            if 'Ports' not in ixia_group:
-                print('ixia configuration file request ixia_ports option!!!')
-                continue
-
-            self.ixia_cfg[group] = ixia_group
-
-        return self.ixia_cfg
-
 class PktgenConf(UserConf):
 
     def __init__(self, pktgen_type='ixia', pktgen_conf=PKTGENCONF):
diff --git a/framework/crb.py b/framework/crb.py
index 3964e213..40fe4fd1 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -32,7 +32,7 @@
 import time
 import re
 import os
-from settings import TIMEOUT, IXIA
+from settings import TIMEOUT
 from ssh_connection import SSHConnection
 from logger import getLogger
 from config import PortConf, PORTCONF, PktgenConf
diff --git a/framework/crbs.py b/framework/crbs.py
index 2ff937ac..c586caa1 100644
--- a/framework/crbs.py
+++ b/framework/crbs.py
@@ -1,7 +1,6 @@
 """
 Static configuration data for any CRBs that can be used.
 """
-from settings import IXIA
 
 crbs_desc = {
     'CrownPassCRB1':
diff --git a/framework/dts.py b/framework/dts.py
index 6f621a51..e83a6ce5 100644
--- a/framework/dts.py
+++ b/framework/dts.py
@@ -281,9 +281,6 @@ def dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname):
                hasattr(tester, 'pktgen') and \
                getattr(tester, 'pktgen'):
                 tester.pktgen.logger.config_suite(test_classname, 'pktgen')
-            elif hasattr(tester, 'ixia_packet_gen') and \
-                 getattr(tester, 'ixia_packet_gen'):
-                tester.ixia_packet_gen.logger.config_suite(test_classname, 'ixia')
     except Exception as ex:
         pass
 
@@ -304,9 +301,6 @@ def dts_log_execution(duts, tester, log_handler):
                hasattr(tester, 'pktgen') and \
                getattr(tester, 'pktgen'):
                 tester.pktgen.logger.config_execution('pktgen')
-            elif hasattr(tester, 'ixia_packet_gen') and \
-                 getattr(tester, 'ixia_packet_gen'):
-                tester.ixia_packet_gen.logger.config_execution('ixia')
     except Exception as ex:
         pass
 
diff --git a/framework/etgen.py b/framework/etgen.py
deleted file mode 100644
index acfa2960..00000000
--- a/framework/etgen.py
+++ /dev/null
@@ -1,972 +0,0 @@
-# BSD LICENSE
-#
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#   * Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-#   * Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in
-#     the documentation and/or other materials provided with the
-#     distribution.
-#   * Neither the name of Intel Corporation nor the names of its
-#     contributors may be used to endorse or promote products derived
-#     from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import re
-import string
-import time
-from config import IxiaConf
-from ssh_connection import SSHConnection
-from settings import SCAPY2IXIA
-from logger import getLogger
-from exception import VerifyFailure
-from utils import create_mask
-
-
-class SoftwarePacketGenerator():
-
-    """
-    Software WindRiver packet generator for performance measurement.
-    """
-
-    def __init__(self, tester):
-        self.tester = tester
-
-    def packet_generator(self, portList, rate_percent):
-        # bind ports
-        self.tester.send_expect("insmod igb_uio.ko", "#")
-
-        bind_cmd = ""
-        allow_list = ""
-        ports = []
-        tx_ports = []
-        for (tx_port, rx_port, pcap_file) in portList:
-            if tx_port not in ports:
-                ports.append(tx_port)
-                tx_ports.append(tx_port)
-            if rx_port not in ports:
-                ports.append(rx_port)
-
-        for port in ports:
-            bind_cmd += " %s" % self.tester.ports_info[port]['pci']
-            allow_list += " -w %s" % self.tester.ports_info[port]['pci']
-
-        self.tester.send_expect("./dpdk-devbind.py --bind=igb_uio %s" % bind_cmd, "#")
-
-        # assign core for ports
-        map_cmd = ""
-        port_index = list(range(len(ports)))
-        port_map = dict(list(zip(ports, port_index)))
-        self.tester.init_reserved_core()
-
-        # reserve one core for master process
-        used_cores = list()
-        master_core = self.tester.get_reserved_core("1C", socket=0)
-
-        if len(master_core) < 1:
-            raise VerifyFailure("Not enough core for performance!!!")
-
-        used_cores.append(int(master_core[0]))
-
-        # allocate cores for each port
-        for port in ports:
-            numa = self.tester.get_port_numa(port)
-            cores = self.tester.get_reserved_core("2C", socket=numa)
-
-            if len(cores) < 2:
-                raise VerifyFailure("Not enough cores for performance!!!")
-
-            map_cmd += "[%s:%s].%d, " % (cores[0], cores[1], port_map[port])
-            used_cores.append(int(cores[0]))
-            used_cores.append(int(cores[1]))
-
-        # prepare pcap for every port
-        pcap_cmd = ""
-        for (tx_port, rx_port, pcap_file) in portList:
-            pcap_cmd += " -s %d:%s" % (port_map[tx_port], pcap_file)
-
-        # Selected 2 for -n to optimize results on Burage
-        cores_mask = create_mask(used_cores)
-
-        # allocate enough memory for 4 ports
-        socket_mem = "--socket-mem 1024,1024"
-
-        # current support version is dpdk v18.02 + pktgen v3.5.0
-        pkt_cmd = "./pktgen -n 2 -c {CORE} --file-prefix=pktgen {ALLOW} " \
-                  "{MEM} -- -P -m \"{CORE_MAP}\" {PCAP}".format(CORE=cores_mask,
-                  ALLOW=allow_list, MEM=socket_mem, CORE_MAP=map_cmd, PCAP=pcap_cmd)
-
-        self.tester.send_expect(pkt_cmd, "Pktgen:/>", 100)
-        self.tester.send_expect("disable screen", "Pktgen:/>")
-
-        if rate_percent != 100:
-            self.tester.send_expect("set all rate %s" % rate_percent, "Pktgen:/>")
-        else:
-            self.tester.send_expect("set all rate 100", "Pktgen:/>")
-
-        self.tester.send_expect("start all", "Pktgen:/>")
-        time.sleep(10)
-        out = self.tester.send_expect("lua \"prints('portRates', pktgen.portStats('all', 'rate'))\"", "Pktgen:/>")
-        rx_bps = 0
-        rx_pps = 0
-        tx_bps = 0
-        rx_match = r"\[\"mbits_rx\"\] = (\d+),"
-        port_stats = re.findall(rx_match, out)
-        for port_stat in port_stats:
-            rx_bps += int(port_stat)
-
-        tx_match = r"\[\"mbits_tx\"\] = (\d+),"
-        port_stats = re.findall(tx_match, out)
-        for port_stat in port_stats:
-            tx_bps += int(port_stat)
-
-        pps_match = r"\[\"pkts_rx\"\] = (\d+),"
-        port_stats = re.findall(pps_match, out)
-        for port_stat in port_stats:
-            rx_pps += int(port_stat)
-
-        self.tester.send_expect("stop all", "Pktgen:/>")
-        self.tester.send_expect("quit", "#")
-        # restore stty setting
-        self.tester.send_expect('stty -echo', '#')
-        self.tester.kill_all(killall=True)
-        self.tester.restore_interfaces()
-
-        return rx_bps, tx_bps, rx_pps
-
-    def throughput(self, portList, rate_percent=100):
-        (bps_rx, _, pps_rx) = self.packet_generator(portList, rate_percent)
-        return bps_rx, pps_rx
-
-    def loss(self, portList, ratePercent):
-        (bps_rx, bps_tx, _) = self.packet_generator(portList, ratePercent)
-        assert bps_tx != 0
-        return (float(bps_tx) - float(bps_rx)) / float(bps_tx), float(bps_tx), float(bps_rx)
-
-
-class IxiaPacketGenerator(SSHConnection):
-
-    """
-    IXIA packet generator for performance measurement.
-    """
-
-    def __init__(self, tester):
-        self.tester = tester
-        self.NAME = 'ixia'
-        self.logger = getLogger(self.NAME)
-        super(IxiaPacketGenerator, self).__init__(self.get_ip_address(),
-                                                  self.NAME, self.tester.get_username(),
-                                                  self.get_password())
-        super(IxiaPacketGenerator, self).init_log(self.logger)
-
-        self.tcl_cmds = []
-        self.chasId = None
-        self.conRelation = {}
-
-        ixiaRef = self.tester.get_external_traffic_generator()
-
-        ixiacfg = IxiaConf()
-        ixiaPorts = ixiacfg.load_ixia_config()
-        if ixiaRef is None or ixiaRef not in ixiaPorts:
-            return
-
-        self.ixiaVersion = ixiaPorts[ixiaRef]["Version"]
-        self.ports = ixiaPorts[ixiaRef]["Ports"]
-
-        if 'force100g' in ixiaPorts[ixiaRef]:
-            self.enable100g = ixiaPorts[ixiaRef]['force100g']
-        else:
-            self.enable100g = 'disable'
-
-        self.logger.info(self.ixiaVersion)
-        self.logger.info(self.ports)
-
-        self.tclServerIP = ixiaPorts[ixiaRef]["IP"]
-
-        # prepare tcl shell and ixia library
-        self.send_expect("tclsh", "% ")
-        self.send_expect("source ./IxiaWish.tcl", "% ")
-        self.send_expect("set ::env(IXIA_VERSION) %s" % self.ixiaVersion, "% ")
-        out = self.send_expect("package req IxTclHal", "% ")
-        self.logger.debug("package req IxTclHal return:" + out)
-        if self.ixiaVersion in out:
-            if not self.tcl_server_login():
-                self.close()
-                self.session = None
-            for port in self.ports:
-                port['speed'] = self.get_line_rate(self.chasId, port)
-
-    def get_line_rate(self, chasid, port):
-        return self.send_expect("stat getLineSpeed %s %s %s" % (chasid, port['card'], port['port']), '%')
-
-    def get_ip_address(self):
-        return self.tester.get_ip_address()
-
-    def get_password(self):
-        return self.tester.get_password()
-
-    def add_tcl_cmd(self, cmd):
-        """
-        Add one tcl command into command list.
-        """
-        self.tcl_cmds.append(cmd)
-
-    def clean(self):
-        """
-        Clean ownership of IXIA devices and logout tcl session.
-        """
-        self.close()
-        self.send_expect("clearOwnershipAndLogout", "% ")
-
-    def parse_pcap(self, fpcap):
-        dump_str1 = "cmds = []\n"
-        dump_str2 = "for i in rdpcap('%s', -1):\n" % fpcap
-        dump_str3 = "    if 'VXLAN' in i.command():\n" + \
-                    "        vxlan_str = ''\n" + \
-                    "        l = len(i[VXLAN])\n" + \
-                    "        vxlan = str(i[VXLAN])\n" + \
-                    "        first = True\n" + \
-                    "        for j in range(l):\n" + \
-                    "            if first:\n" + \
-                    "                vxlan_str += \"VXLAN(hexval='%02X\" %ord(vxlan[j])\n" + \
-                    "                first = False\n" + \
-                    "            else:\n" + \
-                    "                vxlan_str += \" %02X\" %ord(vxlan[j])\n" + \
-                    "        vxlan_str += \"\')\"\n" + \
-                    "        command = re.sub(r\"VXLAN(.*)\", vxlan_str, i.command())\n" + \
-                    "    else:\n" + \
-                    "        command = i.command()\n" + \
-                    "    cmds.append(command)\n" + \
-                    "print cmds\n" + \
-                    "exit()"
-
-        f = open("dumppcap.py", "w")
-        f.write(dump_str1)
-        f.write(dump_str2)
-        f.write(dump_str3)
-        f.close()
-
-        self.session.copy_file_to("dumppcap.py")
-        out = self.send_expect("scapy -c dumppcap.py 2>/dev/null", "% ", 120)
-        flows = eval(out)
-        return flows
-
-    def ether(self, port, src, dst, type):
-        """
-        Configure Ether protocol.
-        """
-        self.add_tcl_cmd("protocol config -ethernetType ethernetII")
-        self.add_tcl_cmd('stream config -sa "%s"' % self.macToTclFormat(src))
-        self.add_tcl_cmd('stream config -da "%s"' % self.macToTclFormat(dst))
-
-    def ip(self, port, frag, src, proto, tos, dst, chksum, len, version, flags, ihl, ttl, id, options=None):
-        """
-        Configure IP protocol.
-        """
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        self.add_tcl_cmd("ip config -ipProtocol %d" % proto)
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port']))
-
-    def macToTclFormat(self, macAddr):
-        """
-        Convert normal mac address format into IXIA's format.
-        """
-        macAddr = macAddr.upper()
-        return "%s %s %s %s %s %s" % (macAddr[:2], macAddr[3:5], macAddr[6:8], macAddr[9:11], macAddr[12:14], macAddr[15:17])
-
-    def ipv6(self, port, version, tc, fl, plen, nh, hlim, src, dst):
-        """
-        Configure IPv6 protocol.
-        """
-        self.add_tcl_cmd("protocol config -name ipV6")
-        self.add_tcl_cmd('ipV6 setDefault')
-        self.add_tcl_cmd('ipV6 config -destAddr "%s"' % self.ipv6_to_tcl_format(dst))
-        self.add_tcl_cmd('ipV6 config -sourceAddr "%s"' % self.ipv6_to_tcl_format(src))
-        self.add_tcl_cmd('ipV6 config -flowLabel %d' % fl)
-        self.add_tcl_cmd('ipV6 config -nextHeader %d' % nh)
-        self.add_tcl_cmd('ipV6 config -hopLimit %d' % hlim)
-        self.add_tcl_cmd('ipV6 config -trafficClass %d' % tc)
-        self.add_tcl_cmd("ipV6 clearAllExtensionHeaders")
-        self.add_tcl_cmd("ipV6 addExtensionHeader %d" % nh)
-
-        self.add_tcl_cmd("stream config -framesize %d" % (plen + 40 + 18))
-        self.add_tcl_cmd("ipV6 set %d %d %d" % (self.chasId, port['card'], port['port']))
-
-    def udp(self, port, dport, sport, len, chksum):
-        """
-        Configure UDP protocol.
-        """
-        self.add_tcl_cmd("udp setDefault")
-        self.add_tcl_cmd("udp config -sourcePort %d" % sport)
-        self.add_tcl_cmd("udp config -destPort %d" % dport)
-        self.add_tcl_cmd("udp config -length %d" % len)
-        self.add_tcl_cmd("udp set %d %d %d" %
-                         (self.chasId, port['card'], port['port']))
-
-    def vxlan(self, port, hexval):
-        self.add_tcl_cmd("protocolPad setDefault")
-        self.add_tcl_cmd("protocol config -enableProtocolPad true")
-        self.add_tcl_cmd("protocolPad config -dataBytes \"%s\"" % hexval)
-        self.add_tcl_cmd("protocolPad set %d %d %d" %
-                         (self.chasId, port['card'], port['port']))
-
-    def tcp(self, port, sport, dport, seq, ack, dataofs, reserved, flags, window, chksum, urgptr, options=None):
-        """
-        Configure TCP protocol.
-        """
-        self.add_tcl_cmd("tcp setDefault")
-        self.add_tcl_cmd("tcp config -sourcePort %d" % sport)
-        self.add_tcl_cmd("tcp config -destPort %d" % dport)
-        self.add_tcl_cmd("tcp set %d %d %d" % (self.chasId, port['card'], port['port']))
-
-    def sctp(self, port, sport, dport, tag, chksum):
-        """
-        Configure SCTP protocol.
-        """
-        self.add_tcl_cmd("tcp config -sourcePort %d" % sport)
-        self.add_tcl_cmd("tcp config -destPort %d" % dport)
-        self.add_tcl_cmd("tcp set %d %d %d" % (self.chasId, port['card'], port['port']))
-
-    def dot1q(self, port, prio, id, vlan, type):
-        """
-        Configure 8021Q protocol.
-        """
-        self.add_tcl_cmd("protocol config -enable802dot1qTag true")
-        self.add_tcl_cmd("vlan config -vlanID %d" % vlan)
-        self.add_tcl_cmd("vlan config -userPriority %d" % prio)
-        self.add_tcl_cmd("vlan set %d %d %d" % (self.chasId, port['card'], port['port']))
-
-    def config_stream(self, fpcap, txport, rate_percent, stream_id=1, latency=False):
-        """
-        Configure IXIA stream and enable multiple flows.
-        """
-        flows = self.parse_pcap(fpcap)
-
-        self.add_tcl_cmd("ixGlobalSetDefault")
-        self.config_ixia_stream(rate_percent, flows, latency)
-
-        pat = re.compile(r"(\w+)\((.*)\)")
-        for flow in flows:
-            for header in flow.split('/'):
-                match = pat.match(header)
-                params = eval('dict(%s)' % match.group(2))
-                method_name = match.group(1)
-                if method_name == 'VXLAN':
-                    method = getattr(self, method_name.lower())
-                    method(txport, **params)
-                    break
-                if method_name in SCAPY2IXIA:
-                    method = getattr(self, method_name.lower())
-                    method(txport, **params)
-
-            self.add_tcl_cmd("stream set %d %d %d %d" % (self.chasId, txport[
-                                                         'card'], txport['port'], stream_id))
-            stream_id += 1
-
-        if len(flows) > 1:
-            stream_id -= 1
-            self.add_tcl_cmd("stream config -dma gotoFirst")
-            self.add_tcl_cmd("stream set %d %d %d %d" %
-                             (self.chasId, txport['card'], txport['port'], stream_id))
-
-    def config_ixia_stream(self, rate_percent, flows, latency):
-        """
-        Configure IXIA stream with rate and latency.
-        Override this method if you want to add custom stream configuration.
-        """
-        self.add_tcl_cmd("stream config -rateMode usePercentRate")
-        self.add_tcl_cmd("stream config -percentPacketRate %s" % rate_percent)
-        self.add_tcl_cmd("stream config -numFrames 1")
-        if len(flows) == 1:
-            self.add_tcl_cmd("stream config -dma contPacket")
-        else:
-            self.add_tcl_cmd("stream config -dma advance")
-        # request by packet Group
-        if latency is not False:
-            self.add_tcl_cmd("stream config -fir true")
-
-    def tcl_server_login(self):
-        """
-        Connect to tcl server and take ownership of all the ports needed.
-        """
-        out = self.send_expect("ixConnectToTclServer %s" % self.tclServerIP, "% ", 30)
-        self.logger.debug("ixConnectToTclServer return:" + out)
-        if out.strip()[-1] != '0':
-            return False
-
-        self.send_expect("ixLogin IxiaTclUser", "% ")
-
-        out = self.send_expect("ixConnectToChassis %s" % self.tclServerIP, "% ", 30)
-        if out.strip()[-1] != '0':
-            return False
-
-        out = self.send_expect("set chasId [ixGetChassisID %s]" % self.tclServerIP, "% ")
-        self.chasId = int(out.strip())
-
-        out = self.send_expect("ixClearOwnership [list %s]" % ' '.join(
-            ['[list %d %d %d]' % (self.chasId, item['card'], item['port']) for item in self.ports]), "% ", 10)
-        if out.strip()[-1] != '0':
-            return False
-        out = self.send_expect("ixTakeOwnership [list %s] force" % ' '.join(
-            ['[list %d %d %d]' % (self.chasId, item['card'], item['port']) for item in self.ports]), "% ", 10)
-        if out.strip()[-1] != '0':
-            return False
-
-        return True
-
-    def tcl_server_logout(self):
-        """
-        Disconnect to tcl server and make sure has been logged out.
-        """
-        self.send_expect("ixDisconnectFromChassis %s" % self.tclServerIP, "%")
-        self.send_expect("ixLogout", "%")
-        self.send_expect("ixDisconnectTclServer %s" % self.tclServerIP, "%")
-
-    def config_port(self, pList):
-        """
-        Configure ports and make them ready for performance validation.
-        """
-        pl = list()
-        for item in pList:
-            self.add_tcl_cmd("port setFactoryDefaults chasId %d %d" % (
-                item['card'], item['port']))
-            # if the line rate is 100G and we need this port work in 100G mode,
-            # we need to add some configure to make it so.
-            if int(self.get_line_rate(self.chasId, item).strip()) == 100000 and self.enable100g == 'enable':
-                self.add_tcl_cmd("port config -ieeeL1Defaults 0")
-                self.add_tcl_cmd("port config -autonegotiate false")
-                self.add_tcl_cmd("port config -enableRsFec true")
-                self.add_tcl_cmd("port set %d %d %d" % (self.chasId, item['card'], item['port']))
-
-            pl.append('[list %d %d %d]' % (self.chasId, item['card'], item['port']))
-
-        self.add_tcl_cmd("set portList [list %s]" % ' '.join(pl))
-
-        self.add_tcl_cmd("ixClearTimeStamp portList")
-        self.add_tcl_cmd("ixWritePortsToHardware portList")
-        self.add_tcl_cmd("ixCheckLinkState portList")
-
-    def set_ixia_port_list(self, pList):
-        """
-        Implement ports/streams configuration on specified ports.
-        """
-        self.add_tcl_cmd("set portList [list %s]" %
-                         ' '.join(['[list %d %d %d]' %
-                                      (self.chasId, item['card'], item['port']) for item in pList]))
-
-    def send_ping6(self, pci, mac, ipv6):
-        """
-        Send ping6 packet from IXIA ports.
-        """
-        self.send_expect("source ./ixTcl1.0/ixiaPing6.tcl", "% ")
-        out = self.send_expect('ping6 "%s" "%s" %d %d %d' %
-                               (self.ipv6_to_tcl_format(ipv6), self.macToTclFormat(mac), self.chasId, self.pci_to_port(pci)['card'], self.pci_to_port(pci)['port']), "% ", 90)
-        return out
-
-    def ipv6_to_tcl_format(self, ipv6):
-        """
-        Convert normal IPv6 address to IXIA format.
-        """
-        ipv6 = ipv6.upper()
-        singleAddr = ipv6.split(":")
-        if '' == singleAddr[0]:
-            singleAddr = singleAddr[1:]
-        if '' in singleAddr:
-            tclFormatAddr = ''
-            addStr = '0:' * (8 - len(singleAddr)) + '0'
-            for i in range(len(singleAddr)):
-                if singleAddr[i] == '':
-                    tclFormatAddr += addStr + ":"
-                else:
-                    tclFormatAddr += singleAddr[i] + ":"
-            tclFormatAddr = tclFormatAddr[0:len(tclFormatAddr) - 1]
-            return tclFormatAddr
-        else:
-            return ipv6
-
-    def get_ports(self):
-        """
-        API to get ixia ports
-        """
-        plist = list()
-        if self.session is None:
-            return plist
-
-        for p in self.ports:
-            plist.append({'type': 'ixia', 'pci': 'IXIA:%d.%d' % (p['card'], p['port'])})
-        return plist
-
-    def pci_to_port(self, pci):
-        """
-        Convert IXIA fake pci to IXIA port.
-        """
-        ixia_pci_regex = "IXIA:(\d*).(\d*)"
-        m = re.match(ixia_pci_regex, pci)
-        if m is None:
-            return {'card': -1, 'port': -1}
-
-        return {'card': int(m.group(1)), 'port': int(m.group(2))}
-
-    def loss(self, portList, ratePercent, delay=5):
-        """
-        Run loss performance test and return loss rate.
-        """
-        rxPortlist, txPortlist = self._configure_everything(portList, ratePercent)
-        return self.get_loss_packet_rate(rxPortlist, txPortlist, delay)
-
-    def get_loss_packet_rate(self, rxPortlist, txPortlist, delay=5):
-        """
-        Get RX/TX packet statistics and calculate loss rate.
-        """
-        time.sleep(delay)
-
-        self.send_expect("ixStopTransmit portList", "%", 10)
-        time.sleep(2)
-        sendNumber = 0
-        for port in txPortlist:
-            self.stat_get_stat_all_stats(port)
-            sendNumber += self.get_frames_sent()
-            time.sleep(0.5)
-
-        self.logger.info("send :%f" % sendNumber)
-
-        assert sendNumber != 0
-
-        revNumber = 0
-        for port in rxPortlist:
-            self.stat_get_stat_all_stats(port)
-            revNumber += self.get_frames_received()
-        self.logger.info("rev  :%f" % revNumber)
-
-        return float(sendNumber - revNumber) / sendNumber, sendNumber, revNumber
-
-    def latency(self, portList, ratePercent, delay=5):
-        """
-        Run latency performance test and return latency statistics.
-        """
-        rxPortlist, txPortlist = self._configure_everything(portList, ratePercent, True)
-        return self.get_packet_latency(rxPortlist)
-
-    def get_packet_latency(self, rxPortlist):
-        """
-        Stop IXIA transmit and return latency statistics.
-        """
-        latencyList = []
-        time.sleep(10)
-        self.send_expect("ixStopTransmit portList", "%", 10)
-        for rx_port in rxPortlist:
-            self.pktGroup_get_stat_all_stats(rx_port)
-            latency = {"port": rx_port,
-                       "min": self.get_min_latency(),
-                       "max": self.get_max_latency(),
-                       "average": self.get_average_latency()}
-            latencyList.append(latency)
-        return latencyList
-
-    def throughput(self, port_list, rate_percent=100, delay=5):
-        """
-        Run throughput performance test and return throughput statistics.
-        """
-        rxPortlist, txPortlist = self._configure_everything(port_list, rate_percent)
-        return self.get_transmission_results(rxPortlist, txPortlist, delay)
-
-    """
-    This function could be used to check the packets' order whether same as the receive sequence.
-    Please notice that this function only support single-stream mode.
-    """
-    def is_packet_ordered(self, port_list, delay):
-        rxPortlist, txPortlist = self.prepare_port_list(port_list)
-        self.prepare_ixia_for_transmission(txPortlist, rxPortlist)
-        self.send_expect('port config -receiveMode [expr $::portCapture|$::portRxSequenceChecking|$::portRxModeWidePacketGroup]', '%')
-        self.send_expect('port config -autonegotiate true', '%')
-        self.send_expect('ixWritePortsToHardware portList', '%')
-        self.send_expect('set streamId 1', '%')
-        self.send_expect('stream setDefault', '%')
-        self.send_expect('ixStartPortPacketGroups %d %d %d' % (self.chasId, self.ports[0]['card'], self.ports[0]['port']), '%')
-        self.send_expect('ixStartTransmit portList', '%')
-        self.send_expect('after 1000 * %d' % delay, '%')
-        self.send_expect('ixStopTransmit portList', '%')
-        self.send_expect('ixStopPortPacketGroups %d %d %d' % (self.chasId, self.ports[0]['card'], self.ports[0]['port']), '%')
-        self.send_expect('packetGroupStats get %d %d %d 1 1' % (self.chasId, self.ports[0]['card'], self.ports[0]['port']), '%')
-        self.send_expect('packetroupStats getGroup 1', '%')
-        self.send_expect('set reverseSequenceError [packetGroupStats cget -reverseSequenceError]]', '%')
-        output = self.send_expect('puts $reverseSequenceError', '%')
-        return int(output[:-2])
-
-    def _configure_everything(self, port_list, rate_percent, latency=False):
-        """
-        Prepare and configure IXIA ports for performance test.
-        """
-        rxPortlist, txPortlist = self.prepare_port_list(port_list, rate_percent, latency)
-        self.prepare_ixia_for_transmission(txPortlist, rxPortlist)
-        self.configure_transmission()
-        self.start_transmission()
-        self.clear_tcl_commands()
-        return rxPortlist, txPortlist
-
-    def clear_tcl_commands(self):
-        """
-        Clear all commands in command list.
-        """
-        del self.tcl_cmds[:]
-
-    def start_transmission(self):
-        """
-        Run commands in command list.
-        """
-        fileContent = "\n".join(self.tcl_cmds) + "\n"
-        self.tester.create_file(fileContent, 'ixiaConfig.tcl')
-        self.send_expect("source ixiaConfig.tcl", "% ", 75)
-
-    def configure_transmission(self, latency=False):
-        """
-        Start IXIA ports transmission.
-        """
-        self.add_tcl_cmd("ixStartTransmit portList")
-
-    def prepare_port_list(self, portList, rate_percent=100, latency=False):
-        """
-        Configure stream and flow on every IXIA ports.
-        """
-        txPortlist = set()
-        rxPortlist = set()
-
-        for (txPort, rxPort, pcapFile) in portList:
-            txPortlist.add(txPort)
-            rxPortlist.add(rxPort)
-
-        # port init
-        self.config_port([self.pci_to_port(
-            self.tester.get_pci(port)) for port in txPortlist.union(rxPortlist)])
-
-        # stream/flow setting
-        for (txPort, rxPort, pcapFile) in portList:
-            self.config_stream(pcapFile, self.pci_to_port(self.tester.get_pci(txPort)), rate_percent, 1, latency)
-
-        # config stream before packetGroup
-        if latency is not False:
-            for (txPort, rxPort, pcapFile) in portList:
-                flow_num = len(self.parse_pcap(pcapFile))
-                self.config_pktGroup_rx(self.pci_to_port(self.tester.get_pci(rxPort)))
-                self.config_pktGroup_tx(self.pci_to_port(self.tester.get_pci(txPort)))
-        return rxPortlist, txPortlist
-
-    def prepare_ixia_for_transmission(self, txPortlist, rxPortlist):
-        """
-        Clear all statistics and implement configuration to IXIA hardware.
-        """
-        self.add_tcl_cmd("ixClearStats portList")
-        self.set_ixia_port_list([self.pci_to_port(self.tester.get_pci(port)) for port in txPortlist])
-        self.add_tcl_cmd("ixWriteConfigToHardware portList")
-        for port in txPortlist:
-            self.start_pktGroup(self.pci_to_port(self.tester.get_pci(port)))
-        for port in rxPortlist:
-            self.start_pktGroup(self.pci_to_port(self.tester.get_pci(port)))
-
-    def hook_transmission_func(self):
-        pass
-
-    def get_transmission_results(self, rx_port_list, tx_port_list, delay=5):
-        """
-        Override this method if you want to change the way of getting results
-        back from IXIA.
-        """
-        time.sleep(delay)
-        bpsRate = 0
-        rate = 0
-        oversize = 0
-        for port in rx_port_list:
-            self.stat_get_rate_stat_all_stats(port)
-            out = self.send_expect("stat cget -framesReceived", '%', 10)
-            rate += int(out.strip())
-            out = self.send_expect("stat cget -bitsReceived", '% ', 10)
-            self.logger.debug("port %d bits rate:" % (port) + out)
-            bpsRate += int(out.strip())
-            out = self.send_expect("stat cget -oversize", '%', 10)
-            oversize += int(out.strip())
-
-        self.logger.info("Rate: %f Mpps" % (rate * 1.0 / 1000000))
-        self.logger.info("Mbps rate: %f Mbps" % (bpsRate * 1.0 / 1000000))
-
-        self.hook_transmission_func()
-
-        self.send_expect("ixStopTransmit portList", "%", 30)
-
-        if rate == 0 and oversize > 0:
-            return (bpsRate, oversize)
-        else:
-            return (bpsRate, rate)
-
-    def config_ixia_dcb_init(self, rxPort, txPort):
-        """
-        Configure Ixia for DCB.
-        """
-        self.send_expect("source ./ixTcl1.0/ixiaDCB.tcl", "% ")
-        self.send_expect("configIxia %d %s" % (self.chasId, ' '.join(["%s" % (
-            repr(self.conRelation[port][n])) for port in [rxPort, txPort] for n in range(3)])), "% ", 100)
-
-    def config_port_dcb(self, direction, tc):
-        """
-        Configure Port for DCB.
-        """
-        self.send_expect("configPort %s %s" % (direction, tc), "% ", 100)
-
-    def cfgStreamDcb(self, stream, rate, prio, types):
-        """
-        Configure Stream for DCB.
-        """
-        self.send_expect("configStream %s %s %s %s" % (stream, rate, prio, types), "% ", 100)
-
-    def get_connection_relation(self, dutPorts):
-        """
-        Get the connect relations between DUT and Ixia.
-        """
-        for port in dutPorts:
-            info = self.tester.get_pci(self.tester.get_local_port(port)).split('.')
-            self.conRelation[port] = [int(info[0]), int(info[1]), repr(self.tester.dut.get_mac_address(port).replace(':', ' ').upper())]
-        return self.conRelation
-
-    def config_pktGroup_rx(self, rxport):
-        """
-        Sets the transmit Packet Group configuration of the stream
-        Default streamID is 1
-        """
-        self.add_tcl_cmd("port config -receiveMode $::portRxModeWidePacketGroup")
-        self.add_tcl_cmd("port set %d %d %d" % (self.chasId, rxport['card'], rxport['port']))
-        self.add_tcl_cmd("packetGroup setDefault")
-        self.add_tcl_cmd("packetGroup config -latencyControl cutThrough")
-        self.add_tcl_cmd("packetGroup setRx %d %d %d" % (self.chasId, rxport['card'], rxport['port']))
-        self.add_tcl_cmd("packetGroup setTx %d %d %d 1" % (self.chasId, rxport['card'], rxport['port']))
-
-    def config_pktGroup_tx(self, txport):
-        """
-        Configure tx port pktGroup for latency.
-        """
-        self.add_tcl_cmd("packetGroup setDefault")
-        self.add_tcl_cmd("packetGroup config -insertSignature true")
-        self.add_tcl_cmd("packetGroup setTx %d %d %d 1" % (self.chasId,
-                                                           txport['card'], txport['port']))
-
-    def start_pktGroup(self, port):
-        """
-        Start tx port pktGroup for latency.
-        """
-        self.add_tcl_cmd("ixStartPortPacketGroups %d %d %d" % (self.chasId,
-                                                               port['card'], port['port']))
-
-    def pktGroup_get_stat_all_stats(self, port_number):
-        """
-        Stop Packet Group operation on port and get current Packet Group
-        statistics on port.
-        """
-        port = self.pci_to_port(self.tester.get_pci(port_number))
-        self.send_expect("ixStopPortPacketGroups %d %d %d" % (self.chasId, port['card'], port['port']), "%", 100)
-        self.send_expect("packetGroupStats get %d %d %d 0 16384" % (self.chasId, port['card'], port['port']), "%", 100)
-        self.send_expect("packetGroupStats getGroup 0", "%", 100)
-
-    def close(self):
-        """
-        We first close the tclsh session opened at the beginning,
-        then the SSH session.
-        """
-        if self.isalive():
-            self.send_expect('exit', '# ')
-            super(IxiaPacketGenerator, self).close()
-
-    def stat_get_stat_all_stats(self, port_number):
-        """
-        Sends a IXIA TCL command to obtain all the stat values on a given port.
-        """
-        port = self.pci_to_port(self.tester.get_pci(port_number))
-        command = 'stat get statAllStats {0} {1} {2}'
-        command = command.format(self.chasId, port['card'], port['port'])
-        self.send_expect(command, '% ', 10)
-
-    def prepare_ixia_internal_buffers(self, port_number):
-        """
-        Tells IXIA to prepare the internal buffers were the frames were captured.
-        """
-        port = self.pci_to_port(self.tester.get_pci(port_number))
-        command = 'capture get {0} {1} {2}'
-        command = command.format(self.chasId, port['card'], port['port'])
-        self.send_expect(command, '% ', 30)
-
-    def stat_get_rate_stat_all_stats(self, port_number):
-        """
-        All statistics of specified IXIA port.
-        """
-        port = self.pci_to_port(self.tester.get_pci(port_number))
-        command = 'stat getRate statAllStats {0} {1} {2}'
-        command = command.format(self.chasId, port['card'], port['port'])
-        self.send_expect(command, '% ', 30)
-        out = self.send_expect(command, '% ', 30)
-
-    def ixia_capture_buffer(self, port_number, first_frame, last_frame):
-        """
-        Tells IXIA to load the captured frames into the internal buffers.
-        """
-        port = self.pci_to_port(self.tester.get_pci(port_number))
-        command = 'captureBuffer get {0} {1} {2} {3} {4}'
-        command = command.format(self.chasId, port['card'], port['port'],
-                                 first_frame, last_frame)
-        self.send_expect(command, '%', 60)
-
-    def ixia_export_buffer_to_file(self, frames_filename):
-        """
-        Tells IXIA to dump the frames it has loaded in its internal buffer to a
-        text file.
-        """
-        command = 'captureBuffer export %s' % frames_filename
-        self.send_expect(command, '%', 30)
-
-    def _stat_cget_value(self, requested_value):
-        """
-        Sends a IXIA TCL command to obtain a given stat value.
-        """
-        command = "stat cget -" + requested_value
-        result = self.send_expect(command, '%', 10)
-        return int(result.strip())
-
-    def _capture_cget_value(self, requested_value):
-        """
-        Sends a IXIA TCL command to capture certain number of packets.
-        """
-        command = "capture cget -" + requested_value
-        result = self.send_expect(command, '%', 10)
-        return int(result.strip())
-
-    def _packetgroup_cget_value(self, requested_value):
-        """
-        Sends a IXIA TCL command to get pktGroup stat value.
-        """
-        command = "packetGroupStats cget -" + requested_value
-        result = self.send_expect(command, '%', 10)
-        return int(result.strip())
-
-    def number_of_captured_packets(self):
-        """
-        Returns the number of packets captured by IXIA on a previously set
-        port. Call self.stat_get_stat_all_stats(port) before.
-        """
-        return self._capture_cget_value('nPackets')
-
-    def get_frames_received(self):
-        """
-        Returns the number of packets captured by IXIA on a previously set
-        port. Call self.stat_get_stat_all_stats(port) before.
-        """
-        if self._stat_cget_value('framesReceived') != 0:
-            return self._stat_cget_value('framesReceived')
-        else:
-            # if the packet size is large than 1518, this line will avoid return
-            # a wrong number
-            return self._stat_cget_value('oversize')
-
-    def get_flow_control_frames(self):
-        """
-        Returns the number of control frames captured by IXIA on a
-        previously set port. Call self.stat_get_stat_all_stats(port) before.
-        """
-        return self._stat_cget_value('flowControlFrames')
-
-    def get_frames_sent(self):
-        """
-        Returns the number of packets sent by IXIA on a previously set
-        port. Call self.stat_get_stat_all_stats(port) before.
-        """
-        return self._stat_cget_value('framesSent')
-
-    def get_transmit_duration(self):
-        """
-        Returns the duration in nanosecs of the last transmission on a
-        previously set port. Call self.stat_get_stat_all_stats(port) before.
-        """
-        return self._stat_cget_value('transmitDuration')
-
-    def get_min_latency(self):
-        """
-        Returns the minimum latency in nanoseconds of the frames in the
-        retrieved capture buffer. Call packetGroupStats get before.
-        """
-        return self._packetgroup_cget_value('minLatency')
-
-    def get_max_latency(self):
-        """
-        Returns the maximum latency in nanoseconds of the frames in the
-        retrieved capture buffer. Call packetGroupStats get before.
-        """
-        return self._packetgroup_cget_value('maxLatency')
-
-    def get_average_latency(self):
-        """
-        Returns the average latency in nanoseconds of the frames in the
-        retrieved capture buffer. Call packetGroupStats get before.
-        """
-        return self._packetgroup_cget_value('averageLatency')
-
-    def _transmission_pre_config(self, port_list, rate_percent, latency=False):
-        """
-        Prepare and configure IXIA ports for performance test. And remove the transmission step in this config sequence.
-        This function is set only for function send_number_packets for nic_single_core_perf test case use
-        """
-        rxPortlist, txPortlist = self.prepare_port_list(port_list, rate_percent, latency)
-        self.prepare_ixia_for_transmission(txPortlist, rxPortlist)
-        self.start_transmission()
-        self.clear_tcl_commands()
-        return rxPortlist, txPortlist
-
-    def send_number_packets(self, portList, ratePercent, packetNum):
-        """
-        Configure ixia to send fixed number of packets
-        Note that this function is only set for test_suite nic_single_core_perf,
-        Not for common use
-        """
-        rxPortlist, txPortlist = self._transmission_pre_config(portList, ratePercent)
-
-        self.send_expect("stream config -numFrames %s" % packetNum, "%", 5)
-        self.send_expect("stream config -dma stopStream", "%", 5)
-        for txPort in txPortlist:
-            port = self.pci_to_port(self.tester.get_pci(txPort))
-            self.send_expect("stream set %d %d %d 1" % (self.chasId, port['card'], port['port']), "%", 5)
-
-        self.send_expect("ixWritePortsToHardware portList", "%", 5)
-        self.send_expect("ixClearStats portList", "%", 5)
-        self.send_expect("ixStartTransmit portList", "%", 5)
-        time.sleep(10)
-
-        rxPackets = 0
-        for port in txPortlist:
-            self.stat_get_stat_all_stats(port)
-            txPackets = self.get_frames_sent()
-            while txPackets != packetNum:
-                time.sleep(10)
-                self.stat_get_stat_all_stats(port)
-                txPackets = self.get_frames_sent()
-            rxPackets += self.get_frames_received()
-        self.logger.info("Received packets :%s" % rxPackets)
-
-        return rxPackets
diff --git a/framework/logger.py b/framework/logger.py
index 63e1d831..5a04bdd2 100644
--- a/framework/logger.py
+++ b/framework/logger.py
@@ -58,9 +58,6 @@ logging.SUITE_DUT_OUTPUT = logging.DEBUG + 3
 logging.SUITE_TESTER_CMD = logging.INFO + 4
 logging.SUITE_TESTER_OUTPUT = logging.DEBUG + 4
 
-logging.DTS_IXIA_CMD = logging.INFO + 5
-logging.DTS_IXIA_OUTPUT = logging.DEBUG + 5
-
 logging.DTS_VIRTDUT_CMD = logging.INFO + 6
 logging.DTS_VIRTDUT_OUTPUT = logging.DEBUG + 6
 
@@ -75,9 +72,6 @@ logging.addLevelName(logging.DTS_TESTER_CMD, 'DTS_TESTER_CMD')
 logging.addLevelName(logging.DTS_TESTER_OUTPUT, 'DTS_TESTER_OUTPUT')
 logging.addLevelName(logging.DTS_TESTER_RESULT, 'DTS_TESTER_RESULT')
 
-logging.addLevelName(logging.DTS_IXIA_CMD, 'DTS_IXIA_CMD')
-logging.addLevelName(logging.DTS_IXIA_OUTPUT, 'DTS_IXIA_OUTPUT')
-
 logging.addLevelName(logging.DTS_VIRTDUT_CMD, 'VIRTDUT_CMD')
 logging.addLevelName(logging.DTS_VIRTDUT_OUTPUT, 'VIRTDUT_OUTPUT')
 
@@ -140,12 +134,6 @@ class BaseLoggerAdapter(logging.LoggerAdapter):
     def suite_tester_output(self, msg, *args, **kwargs):
         self.log(logging.SUITE_TESTER_OUTPUT, msg, *args, **kwargs)
 
-    def dts_ixia_cmd(self, msg, *args, **kwargs):
-        self.log(logging.DTS_IXIA_CMD, msg, *args, **kwargs)
-
-    def dts_ixia_output(self, msg, *args, **kwargs):
-        self.log(logging.DTS_IXIA_OUTPUT, msg, *args, **kwargs)
-
     def dts_virtdut_cmd(self, msg, *args, **kwargs):
         self.log(logging.DTS_VIRTDUT_CMD, msg, *args, **kwargs)
 
@@ -174,8 +162,6 @@ class ColorHandler(logging.StreamHandler):
         logging.DTS_TESTER_CMD: '',  # SYSTEM
         logging.SUITE_DUT_CMD: '',  # SYSTEM
         logging.SUITE_TESTER_CMD: '',  # SYSTEM
-        logging.DTS_IXIA_CMD: '',  # SYSTEM
-        logging.DTS_IXIA_OUTPUT: '',  # SYSTEM
         logging.DTS_PKTGEN_CMD: '',  # SYSTEM
         logging.DTS_PKTGEN_OUTPUT: '',  # SYSTEM
         logging.DTS_VIRTDUT_CMD: '',  # SYSTEM
@@ -317,9 +303,6 @@ class DTSLOG(BaseLoggerAdapter):
             self.info_lvl = logging.DTS_TESTER_CMD
             self.debug_lvl = logging.DTS_TESTER_OUTPUT
             self.warn_lvl = logging.DTS_TESTER_RESULT
-        elif crb.startswith('ixia'):
-            self.info_lvl = logging.DTS_IXIA_CMD
-            self.debug_lvl = logging.DTS_IXIA_OUTPUT
         elif crb.startswith('pktgen'):
             self.info_lvl = logging.DTS_PKTGEN_CMD
             self.debug_lvl = logging.DTS_PKTGEN_OUTPUT
@@ -352,9 +335,6 @@ class DTSLOG(BaseLoggerAdapter):
         elif crb == 'tester':
             self.info_lvl = logging.SUITE_TESTER_CMD
             self.debug_lvl = logging.SUITE_TESTER_OUTPUT
-        elif crb == 'ixia':
-            self.info_lvl = logging.DTS_IXIA_CMD
-            self.debug_lvl = logging.DTS_IXIA_OUTPUT
         elif crb == 'pktgen':
             self.info_lvl = logging.DTS_PKTGEN_CMD
             self.debug_lvl = logging.DTS_PKTGEN_OUTPUT
diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py
index d96f8d63..51d32229 100644
--- a/framework/project_dpdk.py
+++ b/framework/project_dpdk.py
@@ -40,7 +40,7 @@ from crb import Crb
 from dut import Dut
 from tester import Tester
 from logger import getLogger
-from settings import IXIA, DRIVERS
+from settings import DRIVERS
 from utils import RED
 
 
@@ -707,16 +707,6 @@ class DPDKtester(Tester):
         self.tester_prerequisites()
 
         self.set_promisc()
-        # use software pktgen for performance test
-        if perf_test is True:
-            try:
-                if self.crb[IXIA] is not None:
-                    self.logger.info("Use hardware packet generator")
-            except Exception as e:
-                self.logger.warning("Use default software pktgen")
-                out = self.send_expect("ls /root/igb_uio.ko", "# ")
-                assert ("No such file or directory" not in out), "Can not find /root/igb_uio.ko for performance"
-                self.setup_memory()
 
         self.stage = "post-init"
 
diff --git a/framework/settings.py b/framework/settings.py
index fe7c01b5..c08b8709 100644
--- a/framework/settings.py
+++ b/framework/settings.py
@@ -226,7 +226,6 @@ TIMEOUT = 15
 """
 Global macro for dts.
 """
-IXIA = "ixia"
 PKTGEN = "pktgen"
 PKTGEN_DPDK = "dpdk"
 PKTGEN_TREX = "trex"
diff --git a/framework/tester.py b/framework/tester.py
index ec233b8a..8f6e97ae 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -38,10 +38,9 @@ import subprocess
 import os
 from time import sleep
 from settings import NICS, load_global_setting, PERF_SETTING
-from settings import IXIA, USERNAME, PKTGEN, PKTGEN_GRP
+from settings import USERNAME, PKTGEN, PKTGEN_GRP
 from crb import Crb
 from net_device import GetNicObj
-from etgen import IxiaPacketGenerator, SoftwarePacketGenerator
 import random
 from utils import (GREEN, convert_int2ip, convert_ip2int,
                    check_crb_python_version)
@@ -78,7 +77,6 @@ class Tester(Crb):
         self.bgItf = ''
         self.re_run_time = 0
         self.pktgen = None
-        self.ixia_packet_gen = None
         self.tmp_scapy_module_dir = '/tmp/dep'
         # prepare for scapy env
         self.scapy_sessions_li = list()
@@ -130,10 +128,7 @@ class Tester(Crb):
         if self.it_uses_external_generator():
             if self.is_pktgen:
                 self.pktgen_init()
-            else:
-                self.ixia_packet_gen = IxiaPacketGenerator(self)
             return
-        self.packet_gen = SoftwarePacketGenerator(self)
 
     def set_re_run(self, re_run_time):
         """
@@ -183,20 +178,12 @@ class Tester(Crb):
         try:
             # if pktgen_group is set, take pktgen config file as first selection
             if self.is_pktgen:
-                return True 
-            elif self.crb[IXIA] is not None:
                 return True
         except Exception as e:
             return False
 
         return False
 
-    def get_external_traffic_generator(self):
-        """
-        Return IXIA object.
-        """
-        return self.crb[IXIA]
-
     def it_uses_external_generator(self):
         """
         Check whether IXIA generator is ready for performance test.
@@ -456,8 +443,6 @@ class Tester(Crb):
             if self.it_uses_external_generator():
                 if self.is_pktgen:
                     self._scan_pktgen_ports()
-                else:
-                    self.ports_info.extend(self.ixia_packet_gen.get_ports())
             self.save_serializer_ports()
 
         for port_info in self.ports_info:
@@ -572,8 +557,6 @@ class Tester(Crb):
                                 self.ports_info[localPort]['pci'], mac, ipv6)
             elif self.ports_info[localPort]['type'].lower() == 'trex':
                 return "Not implemented yet"
-        elif self.ports_info[localPort]['type'].lower() in 'ixia':
-            return self.ixia_packet_gen.send_ping6(self.ports_info[localPort]['pci'], mac, ipv6)
         else:
             return self.send_expect("ping6 -w 5 -c 5 -A %s%%%s" % (ipv6, self.ports_info[localPort]['intf']), "# ", 10)
 
@@ -671,60 +654,6 @@ class Tester(Crb):
 
         return out
 
-    def traffic_generator_throughput(self, portList, rate_percent=100, delay=5):
-        """
-        Run throughput performance test on specified ports.
-        """
-        if self.check_port_list(portList, 'ixia'):
-            return self.ixia_packet_gen.throughput(portList, rate_percent, delay)
-        if not self.check_port_list(portList):
-            self.logger.warning("exception by mixed port types")
-            return None
-        return self.packet_gen.throughput(portList, rate_percent)
-
-    def verify_packet_order(self, portList, delay):
-        if self.check_port_list(portList, 'ixia'):
-            return self.ixia_packet_gen.is_packet_ordered(portList, delay)
-        else:
-            self.logger.warning("Only ixia port support check verify packet order function")
-            return False
-
-    def run_rfc2544(self, portlist, delay=120, permit_loss_rate=0):
-        """
-        test_rate: the line rate we are going to test.
-        """
-        test_rate = float(100)
-
-        self.logger.info("test rate: %f " % test_rate)
-        loss_rate, tx_num, rx_num = self.traffic_generator_loss(portlist, test_rate, delay)
-        while loss_rate > permit_loss_rate:
-                test_rate = float(1 - loss_rate) * test_rate
-                loss_rate, tx_num, rx_num = self.traffic_generator_loss(portlist, test_rate, delay)
-
-        self.logger.info("zero loss rate is %s" % test_rate)
-        return test_rate, tx_num, rx_num
-
-
-    def traffic_generator_loss(self, portList, ratePercent, delay=60):
-        """
-        Run loss performance test on specified ports.
-        """
-        if self.check_port_list(portList, 'ixia'):
-            return self.ixia_packet_gen.loss(portList, ratePercent, delay)
-        elif not self.check_port_list(portList):
-            self.logger.warning("exception by mixed port types")
-            return None
-        return self.packet_gen.loss(portList, ratePercent)
-
-    def traffic_generator_latency(self, portList, ratePercent=100, delay=5):
-        """
-        Run latency performance test on specified ports.
-        """
-        if self.check_port_list(portList, 'ixia'):
-            return self.ixia_packet_gen.latency(portList, ratePercent, delay)
-        else:
-            return None
-
     def parallel_transmit_ptks(self, pkt=None, intf='', send_times=1, interval=0.01):
         """
         Callable function for parallel processes
@@ -824,20 +753,6 @@ class Tester(Crb):
 
         return True
 
-    def extend_external_packet_generator(self, clazz, instance):
-        """
-        Update packet generator function, will implement later.
-        """
-        # packet generator has forbidden suite class to override parent class methods  
-        if self.is_pktgen:
-            return
-        # discard this in future
-        if self.it_uses_external_generator():
-            self.ixia_packet_gen.__class__ = clazz
-            current_attrs = instance.__dict__
-            instance.__dict__ = self.ixia_packet_gen.__dict__
-            instance.__dict__.update(current_attrs)
-
     def tcpdump_sniff_packets(self, intf, count=0, filters=None, lldp_forbid=True):
         """
         Wrapper for packet module sniff_packets
@@ -879,9 +794,6 @@ class Tester(Crb):
                 if 'start_trex' in list(self.pktgen.conf.keys()):
                     self.restore_trex_interfaces()
                 self.pktgen = None
-            elif self.ixia_packet_gen:
-                self.ixia_packet_gen.close()
-                self.ixia_packet_gen = None
 
         if self.scapy_sessions_li:
             for i in self.scapy_sessions_li:
-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH V2 2/6] tests: remove etgen
  2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 1/6] framework/etgen: " Yufen Mo
@ 2021-08-31  8:22 ` Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 3/6] tests/vxlan: move to pktgen from etgen Yufen Mo
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Yufen Mo @ 2021-08-31  8:22 UTC (permalink / raw)
  To: dts, lijuan.tu, yingyax.han, junx.w.zhou; +Cc: Yufen Mo


remove etgen relevant source code.

Signed-off-by: Yufen Mo <yufengx.mo@intel.com>
---
 tests/TestSuite_af_xdp_2.py                   |   2 +-
 tests/TestSuite_distributor.py                |   2 -
 tests/TestSuite_efd.py                        |   1 -
 tests/TestSuite_iavf.py                       |   1 -
 tests/TestSuite_multiprocess.py               |   1 -
 tests/TestSuite_ntb.py                        |   1 -
 tests/TestSuite_packet_ordering.py            |   1 -
 tests/TestSuite_performance_thread.py         |   1 -
 tests/TestSuite_pmd.py                        |   1 -
 tests/TestSuite_rteflow_priority.py           |   1 -
 tests/TestSuite_userspace_ethtool.py          | 127 +++---------------
 tests/TestSuite_vhost_virtio_pmd_interrupt.py |   1 -
 tests/TestSuite_virtio_event_idx_interrupt.py |   1 -
 tests/TestSuite_vm_power_manager.py           |   3 +-
 tests/TestSuite_vmdq.py                       |   1 -
 tests/TestSuite_vmdq_dcb.py                   |   1 -
 16 files changed, 23 insertions(+), 123 deletions(-)

diff --git a/tests/TestSuite_af_xdp_2.py b/tests/TestSuite_af_xdp_2.py
index 40a3d416..bcc9a751 100644
--- a/tests/TestSuite_af_xdp_2.py
+++ b/tests/TestSuite_af_xdp_2.py
@@ -45,7 +45,7 @@ class TestAfXdp(TestCase):
         Run at the start of each test suite.
         """
         #self.verify(self.nic in ("fortville_spirit"), "the port can not run this suite")
-        self.tester.extend_external_packet_generator(TestAfXdp, self)
+
         self.frame_sizes = [64, 128, 256, 512, 1024, 1518]
         self.dut_ports = self.dut.get_ports()
         self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
diff --git a/tests/TestSuite_distributor.py b/tests/TestSuite_distributor.py
index cd88977d..09a493b3 100644
--- a/tests/TestSuite_distributor.py
+++ b/tests/TestSuite_distributor.py
@@ -45,8 +45,6 @@ class TestDistributor(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.tester.extend_external_packet_generator(TestDistributor, self)
-
         # reduce tx queues for enable many workers
         self.dut.send_expect("sed -i -e 's/.*txRings = .*/\\tconst uint16_t rxRings = 1, txRings = 1;/' ./examples/distributor/main.c", "#")
         out = self.dut.build_dpdk_apps("./examples/distributor")
diff --git a/tests/TestSuite_efd.py b/tests/TestSuite_efd.py
index 787733ca..7d1e0a86 100644
--- a/tests/TestSuite_efd.py
+++ b/tests/TestSuite_efd.py
@@ -44,7 +44,6 @@ class TestEFD(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.tester.extend_external_packet_generator(TestEFD, self)
 
         self.build_server_node_efd()
 
diff --git a/tests/TestSuite_iavf.py b/tests/TestSuite_iavf.py
index 9656b4fc..adaa1304 100644
--- a/tests/TestSuite_iavf.py
+++ b/tests/TestSuite_iavf.py
@@ -57,7 +57,6 @@ class TestIavf(TestCase):
     supported_vf_driver = ['pci-stub', 'vfio-pci']
 
     def set_up_all(self):
-        self.tester.extend_external_packet_generator(TestIavf, self)
         self.dut_ports = self.dut.get_ports(self.nic)
         self.verify(len(self.dut_ports) > 1, "Insufficient ports")
         self.vm0 = None
diff --git a/tests/TestSuite_multiprocess.py b/tests/TestSuite_multiprocess.py
index 743ca1f3..8752a727 100644
--- a/tests/TestSuite_multiprocess.py
+++ b/tests/TestSuite_multiprocess.py
@@ -58,7 +58,6 @@ class TestMultiprocess(TestCase):
         # self.verify('bsdapp' not in self.target, "Multiprocess not support freebsd")
 
         self.verify(len(self.dut.get_all_cores()) >= 4, "Not enough Cores")
-        self.tester.extend_external_packet_generator(TestMultiprocess, self)
         self.dut_ports = self.dut.get_ports()
         self.socket = self.dut.get_numa_id(self.dut_ports[0])
 
diff --git a/tests/TestSuite_ntb.py b/tests/TestSuite_ntb.py
index e5013132..01e10620 100644
--- a/tests/TestSuite_ntb.py
+++ b/tests/TestSuite_ntb.py
@@ -55,7 +55,6 @@ class TestNtb(TestCase):
         self.host_mac = self.ntb_host.get_mac_address(self.host_port)
         self.client_mac = self.ntb_client.get_mac_address(self.client_port)
 
-        self.tester.extend_external_packet_generator(TestNtb, self)
         self.frame_sizes = [64, 128, 256, 512, 1024, 1518]
         self.header_size = HEADER_SIZE['eth'] + HEADER_SIZE['ip'] + HEADER_SIZE['udp']
         self.pktgen_helper = PacketGeneratorHelper()
diff --git a/tests/TestSuite_packet_ordering.py b/tests/TestSuite_packet_ordering.py
index 807a3c0d..2280b8b1 100644
--- a/tests/TestSuite_packet_ordering.py
+++ b/tests/TestSuite_packet_ordering.py
@@ -48,7 +48,6 @@ class TestPacketOrdering(TestCase):
         Executes the Packet Ordering prerequisites. Creates a simple scapy
         packet to be used later on the tests. It also compiles the example app.
         """
-        self.tester.extend_external_packet_generator(TestPacketOrdering, self)
         self.dut_ports = self.dut.get_ports(self.nic)
         global valports
         valports = [_ for _ in self.dut_ports if self.tester.get_local_port(_) != -1]
diff --git a/tests/TestSuite_performance_thread.py b/tests/TestSuite_performance_thread.py
index 3ff20150..459d9a11 100644
--- a/tests/TestSuite_performance_thread.py
+++ b/tests/TestSuite_performance_thread.py
@@ -47,7 +47,6 @@ class TestPerformanceThread(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.tester.extend_external_packet_generator(TestPerformanceThread, self)
         self.dut_ports = self.dut.get_ports(self.nic)
         global valports
         valports = [_ for _ in self.dut_ports if self.tester.get_local_port(_) != -1]
diff --git a/tests/TestSuite_pmd.py b/tests/TestSuite_pmd.py
index 48d35831..afc36d9f 100644
--- a/tests/TestSuite_pmd.py
+++ b/tests/TestSuite_pmd.py
@@ -58,7 +58,6 @@ class TestPmd(TestCase):
 
         PMD prerequisites.
         """
-        self.tester.extend_external_packet_generator(TestPmd, self)
 
         self.frame_sizes = [64, 72, 128, 256, 512, 1024, 1280, 1518]
 
diff --git a/tests/TestSuite_rteflow_priority.py b/tests/TestSuite_rteflow_priority.py
index 353dc8f9..b0bbf245 100644
--- a/tests/TestSuite_rteflow_priority.py
+++ b/tests/TestSuite_rteflow_priority.py
@@ -42,7 +42,6 @@ from time import sleep
 from scapy.utils import struct, socket, PcapWriter
 
 import utils
-from etgen import IxiaPacketGenerator
 from test_case import TestCase
 from settings import HEADER_SIZE
 from pmd_output import PmdOutput
diff --git a/tests/TestSuite_userspace_ethtool.py b/tests/TestSuite_userspace_ethtool.py
index fd65d718..4536b7d1 100644
--- a/tests/TestSuite_userspace_ethtool.py
+++ b/tests/TestSuite_userspace_ethtool.py
@@ -41,14 +41,14 @@ import re
 from test_case import TestCase
 from packet import Packet
 import random
-from etgen import IxiaPacketGenerator
 from settings import HEADER_SIZE
 from settings import SCAPY2IXIA
+from pktgen import PacketGeneratorHelper
 from utils import RED
 from exception import VerifyFailure
 
 
-class TestUserspaceEthtool(TestCase, IxiaPacketGenerator):
+class TestUserspaceEthtool(TestCase):
 
     def set_up_all(self):
         """
@@ -76,9 +76,8 @@ class TestUserspaceEthtool(TestCase, IxiaPacketGenerator):
         self.pause_time = 65535
         self.frame_size = 64
         self.pause_rate = 0.50
-
-        # update IxiaPacketGenerator function from local
-        self.tester.extend_external_packet_generator(TestUserspaceEthtool, self)
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
 
     def set_up(self):
         """
@@ -635,45 +634,6 @@ class TestUserspaceEthtool(TestCase, IxiaPacketGenerator):
 
         self.dut.send_expect("quit", "# ")
 
-    def test_perf_port_rx_pause(self):
-        """
-        Test ethtool app flow control configure
-        """
-        self.dut.send_expect(self.cmd, "EthApp>", 60)
-        # enable pause rx
-        self.dut.send_expect("pause 0 rx", "EthApp")
-
-        # calculate number of packets
-        pps = self.wirespeed(self.nic, self.frame_size, 1) * 1000000.0
-        # get line rate
-        linerate = pps * (self.frame_size + 20) * 8
-        # calculate default sleep time for one pause frame
-        sleep = (1 / linerate) * self.pause_time * 512
-        # calculate packets dropped in sleep time
-        self.n_pkts = int((sleep / (1 / pps)) * (1 / self.pause_rate))
-
-        tgen_input = []
-        headers_size = HEADER_SIZE['eth'] + HEADER_SIZE['ip'] + \
-            HEADER_SIZE['udp']
-        payload_size = self.frame_size - headers_size
-        self.tester.scapy_append('wrpcap("pause_rx.pcap", [Ether()/IP()/UDP()/("X"*%d)])' % payload_size)
-        self.tester.scapy_execute()
-        # rx and tx is the same port
-        tester_port = self.tester.get_local_port(self.ports[0])
-        tgen_input.append((tester_port, tester_port, "pause_rx.pcap"))
-
-        ori_func = self.config_stream
-        self.config_stream = self.config_stream_pause_rx
-        _, rx_pps = self.tester.traffic_generator_throughput(tgen_input)
-        self.config_stream = ori_func
-
-        rate = rx_pps / pps
-        # rate should same as expected rate
-        self.verify(rate > (self.pause_rate - 0.01) and
-                    rate < (self.pause_rate + 0.01), "Failed to handle Rx pause frame")
-
-        self.dut.send_expect("quit", "# ")
-
     def test_perf_port_tx_pause(self):
         """
         Test ethtool app flow control configure
@@ -691,78 +651,33 @@ class TestUserspaceEthtool(TestCase, IxiaPacketGenerator):
         headers_size = HEADER_SIZE['eth'] + HEADER_SIZE['ip'] + \
             HEADER_SIZE['udp']
         payload_size = self.frame_size - headers_size
-        self.tester.scapy_append('wrpcap("pause_tx.pcap", [Ether()/IP()/UDP()/("X"*%d)])' % payload_size)
+        dst_mac =  self.dut.get_mac_address(0)
+        self.tester.scapy_append(
+            'wrpcap("/root/pause_tx.pcap", [Ether(dst="%s")/IP()/UDP()/("X"*%d)])' % (dst_mac, payload_size))
         self.tester.scapy_execute()
         # rx and tx is the same port
         tester_port = self.tester.get_local_port(self.ports[0])
-        tgen_input.append((tester_port, tester_port, "pause_tx.pcap"))
-
-        self.wirespeed(self.nic, self.frame_size, 1) * 1000000.0
-        _, tx_pps = self.tester.traffic_generator_throughput(tgen_input)
-
+        tgen_input.append((tester_port, tester_port, "/root/pause_tx.pcap"))
+
+        # run traffic generator
+        streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                        None, self.tester.pktgen)
+        traffic_opt = {'throughput_stat_flag': True}
+        loss, rx_throughput  = self.tester.pktgen._measure_loss(
+            stream_ids=streams, options=traffic_opt)
+        tx_pps = rx_throughput[1]
+        sent_pkts, recv_pkts = list(loss.values())[0][1:]
+        self.dut.send_expect("quit", "# ")
+        self.dut.send_expect("sed -i -e '/usleep(10);$/d' %s" % main_file, "# ")
+        # rebuild sample app
+        self.build_ethtool()
         # verify ixia transmit line rate dropped
         pps = self.wirespeed(self.nic, self.frame_size, 1) * 1000000.0
         rate = tx_pps / pps
         self.verify(rate < 0.1, "Failed to slow down transmit speed")
-
         # verify received packets more than sent
-        self.stat_get_stat_all_stats(tester_port)
-        sent_pkts = self.get_frames_sent()
-        recv_pkts = self.get_frames_received()
         self.verify((float(recv_pkts) / float(sent_pkts)) > 1.05, "Failed to transmit pause frame")
 
-        self.dut.send_expect("quit", "# ")
-        self.dut.send_expect("sed -i -e '/usleep(10);$/d' %s" % main_file, "# ")
-        # rebuild sample app
-        self.build_ethtool()
-
-    def config_stream_pause_rx(self, fpcap, txport, rate_percent, stream_id=1, latency=False):
-        """
-        Configure IXIA stream with pause frame and normal packet
-        """
-        # enable flow control on port
-        self.add_tcl_cmd("port config -flowControl true")
-        self.add_tcl_cmd("port config -flowControlType ieee8023x")
-        self.add_tcl_cmd("port set %d %d %d" % (self.chasId, txport['card'], txport['port']))
-
-        flows = self.parse_pcap(fpcap)
-
-        self.add_tcl_cmd("ixGlobalSetDefault")
-        self.add_tcl_cmd("stream config -rateMode usePercentRate")
-        self.add_tcl_cmd("stream config -percentPacketRate 100")
-        self.add_tcl_cmd("stream config -numBursts 1")
-        self.add_tcl_cmd("stream config -numFrames %d" % self.n_pkts)
-        self.add_tcl_cmd("stream config -dma advance")
-
-        pat = re.compile(r"(\w+)\((.*)\)")
-        for header in flows[0].split('/'):
-            match = pat.match(header)
-            params = eval('dict(%s)' % match.group(2))
-            method_name = match.group(1)
-            if method_name in SCAPY2IXIA:
-                method = getattr(self, method_name.lower())
-                method(txport, **params)
-
-        # stream id start from 1
-        self.add_tcl_cmd("stream set %d %d %d %d" % (self.chasId, txport['card'], txport['port'], 1))
-
-        # pause frame stream
-        self.add_tcl_cmd("stream config -rateMode usePercentRate")
-        self.add_tcl_cmd("stream config -percentPacketRate 100")
-        self.add_tcl_cmd("stream config -numBursts 1")
-        self.add_tcl_cmd("stream config -numFrames 1")
-        self.add_tcl_cmd("stream config -dma gotoFirst")
-
-        self.add_tcl_cmd("protocol setDefault")
-        self.add_tcl_cmd("protocol config -name pauseControl")
-        self.add_tcl_cmd("pauseControl setDefault")
-        self.add_tcl_cmd("pauseControl config -da \"01 80 C2 00 00 01\"")
-        self.add_tcl_cmd("pauseControl config -pauseTime %d" % self.pause_time)
-        self.add_tcl_cmd("pauseControl config -pauseControlType ieee8023x")
-        self.add_tcl_cmd("pauseControl set %d %d %d" % (self.chasId, txport['card'], txport['port']))
-        self.add_tcl_cmd("stream set %d %d %d %d" %
-                         (self.chasId, txport['card'], txport['port'], 2))
-
     def tear_down(self):
         """
         Run after each test case.
diff --git a/tests/TestSuite_vhost_virtio_pmd_interrupt.py b/tests/TestSuite_vhost_virtio_pmd_interrupt.py
index 675a15ee..5dd2f830 100644
--- a/tests/TestSuite_vhost_virtio_pmd_interrupt.py
+++ b/tests/TestSuite_vhost_virtio_pmd_interrupt.py
@@ -49,7 +49,6 @@ class TestVhostVirtioPmdInterrupt(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.tester.extend_external_packet_generator(TestVhostVirtioPmdInterrupt, self)
         self.fix_ip = False
         self.nb_cores = 4
         self.queues = 4
diff --git a/tests/TestSuite_virtio_event_idx_interrupt.py b/tests/TestSuite_virtio_event_idx_interrupt.py
index 37634f05..09918992 100644
--- a/tests/TestSuite_virtio_event_idx_interrupt.py
+++ b/tests/TestSuite_virtio_event_idx_interrupt.py
@@ -49,7 +49,6 @@ class TestVirtioIdxInterrupt(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.tester.extend_external_packet_generator(TestVirtioIdxInterrupt, self)
         self.queues = 1
         self.nb_cores = 1
         self.dut_ports = self.dut.get_ports()
diff --git a/tests/TestSuite_vm_power_manager.py b/tests/TestSuite_vm_power_manager.py
index fca122bb..f650ba28 100644
--- a/tests/TestSuite_vm_power_manager.py
+++ b/tests/TestSuite_vm_power_manager.py
@@ -37,12 +37,11 @@ VM power manager test suite.
 import re
 import utils
 from test_case import TestCase
-from etgen import IxiaPacketGenerator
 from settings import HEADER_SIZE
 from qemu_libvirt import LibvirtKvm
 
 
-class TestVmPowerManager(TestCase, IxiaPacketGenerator):
+class TestVmPowerManager(TestCase):
 
     def set_up_all(self):
         """
diff --git a/tests/TestSuite_vmdq.py b/tests/TestSuite_vmdq.py
index 3f2ccde2..6dae54a4 100644
--- a/tests/TestSuite_vmdq.py
+++ b/tests/TestSuite_vmdq.py
@@ -50,7 +50,6 @@ class TestVmdq(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.tester.extend_external_packet_generator(TestVmdq, self)
 
         self.dut_ports = self.dut.get_ports(self.nic)
         self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
diff --git a/tests/TestSuite_vmdq_dcb.py b/tests/TestSuite_vmdq_dcb.py
index 5f0da0fb..2a248f8c 100644
--- a/tests/TestSuite_vmdq_dcb.py
+++ b/tests/TestSuite_vmdq_dcb.py
@@ -51,7 +51,6 @@ class TestVmdqDcb(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.tester.extend_external_packet_generator(TestVmdqDcb, self)
         self.dut_ports = self.dut.get_ports(self.nic)
         self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
         self.socket = self.dut.get_numa_id(self.dut_ports[0])
-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH V2 3/6] tests/vxlan: move to pktgen from etgen
  2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 1/6] framework/etgen: " Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 2/6] tests: " Yufen Mo
@ 2021-08-31  8:22 ` Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 4/6] tests/eventdev_perf: " Yufen Mo
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Yufen Mo @ 2021-08-31  8:22 UTC (permalink / raw)
  To: dts, lijuan.tu, yingyax.han, junx.w.zhou; +Cc: Yufen Mo


#. remove etgen relevant source code.
#. update perf test cases to pktgen.
#. dpdk remove legacy filter command, perf test cases need to use rte flow command.

Signed-off-by: Yufen Mo <yufengx.mo@intel.com>
---
 tests/TestSuite_vxlan.py | 186 ++++++++++++++++++++++++++-------------
 1 file changed, 124 insertions(+), 62 deletions(-)

diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py
index fdb6616d..fdf6170f 100644
--- a/tests/TestSuite_vxlan.py
+++ b/tests/TestSuite_vxlan.py
@@ -57,7 +57,7 @@ from scapy.route import *
 
 from test_case import TestCase
 from settings import HEADER_SIZE, FOLDERS
-from etgen import IxiaPacketGenerator
+from pktgen import PacketGeneratorHelper
 import packet
 
 #
@@ -283,7 +283,7 @@ class VxlanTestConfig(object):
         return len(self.pkt) + 4
 
 
-class TestVxlan(TestCase, IxiaPacketGenerator):
+class TestVxlan(TestCase):
 
     def set_up_all(self):
         """
@@ -301,9 +301,6 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
         # Based on h/w type, choose how many ports to use
         ports = self.dut.get_ports()
 
-        # update IxiaPacketGenerator function by local
-        self.tester.extend_external_packet_generator(TestVxlan, self)
-
         # Verify that enough ports are available
         self.verify(len(ports) >= 2, "Insufficient ports for testing")
         global valports
@@ -396,6 +393,68 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
                 'omac-imac-tenid', 'recvqueue': 'Multi'}
         ]
 
+        self.pktgen_helper = PacketGeneratorHelper()
+
+    def set_fields(self):
+        fields_config = {
+            'ip': {
+                'src': {'action': 'random'},
+                'dst': {'action': 'random'},
+        },}
+        return fields_config
+
+    def suite_measure_throughput(self, tgen_input, use_vm=False):
+        vm_config = self.set_fields()
+        self.tester.pktgen.clear_streams()
+        streams = self.pktgen_helper.prepare_stream_from_tginput(
+            tgen_input, 100, vm_config if use_vm else None, self.tester.pktgen)
+        result = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
+        return result
+
+    def perf_tunnel_filter_set_rule(self, rule_config):
+        rule_list = {
+            # check inner mac + inner vlan filter can work
+            'imac-ivlan':
+                f'flow create {rule_config.get("dut_port")} ingress pattern eth / '
+                f'ipv4 / udp / vxlan / eth dst is {rule_config.get("inner_mac_dst")} / '
+                f'vlan tci is {rule_config.get("inner_vlan")} / end actions pf / '
+                f'queue index {rule_config.get("queue")} / end',
+            # check inner mac + inner vlan + tunnel id filter can work
+            'imac-ivlan-tenid':
+                f'flow create {rule_config.get("dut_port")} ingress pattern eth / '
+                f'ipv4 / udp / vxlan vni is {rule_config.get("vni")} / '
+                f'eth dst is {rule_config.get("inner_mac_dst")} / '
+                f'vlan tci is {rule_config.get("inner_vlan")} / '
+                f'end actions pf / queue index {rule_config.get("queue")} / end',
+            # check inner mac + tunnel id filter can work
+            'imac-tenid':
+                f'flow create {rule_config.get("dut_port")} ingress pattern eth / '
+                f'ipv4 / udp / vxlan vni is {rule_config.get("vni")} / '
+                f'eth dst is {rule_config.get("inner_mac_dst")} / end actions pf / '
+                f'queue index {rule_config.get("queue")} / end',
+            # check inner mac filter can work
+            'imac':
+                f'flow create {rule_config.get("dut_port")} ingress pattern eth / '
+                f'ipv4 / udp / vxlan / eth dst is {rule_config.get("inner_mac_dst")} / end actions pf / '
+                f'queue index {rule_config.get("queue")} / end',
+            # check outer mac + inner mac + tunnel id filter can work
+            'omac-imac-tenid':
+                f'flow create {rule_config.get("dut_port")} ingress pattern '
+                f'eth dst is {rule_config.get("outer_mac_dst")} / '
+                f'ipv4 / udp / vxlan vni is {rule_config.get("vni")} / '
+                f'eth dst is {rule_config.get("inner_mac_dst")} / '
+                f'end actions pf / queue index {rule_config.get("queue")} / end',
+        }
+        rule = rule_list.get(rule_config.get("tun_filter"))
+        if not rule:
+            msg = "not support format"
+            self.logger.error(msg)
+            return
+        out = self.dut.send_expect(rule, "testpmd>", 3)
+        pat = "Flow rule #\d+ created"
+        self.verify(re.findall(pat, out, re.M), "Flow rule create failed")
+
     def send_and_detect(self, **kwargs):
         """
         send vxlan packet and check whether testpmd detect the correct
@@ -886,11 +945,17 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
             self.enable_vxlan(dut_port)
 
         if tun_filter != 'None':
-            args = [dut_port, config.outer_mac_dst,
-                    config.inner_mac_dst, config.inner_ip_dst,
-                    config.inner_vlan, tun_filter,
-                    config.vni, 0]
-            self.tunnel_filter_add(*args)
+            rule_config = {
+                'dut_port': dut_port,
+                'outer_mac_dst': config.outer_mac_dst,
+                'inner_mac_dst': config.inner_mac_dst,
+                'inner_ip_dst': config.inner_ip_dst,
+                'inner_vlan': config.inner_vlan,
+                'tun_filter': tun_filter,
+                'vni': config.vni,
+                'queue': 0
+            }
+            self.perf_tunnel_filter_set_rule(rule_config)
 
         if perf_config['Packet'] == 'Normal':
             config.outer_udp_dst = 63
@@ -917,35 +982,22 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
                 pkt = config.create_pcap()
                 pkts.append(pkt)
 
-                args = [dut_port, config.outer_mac_dst,
-                        config.inner_mac_dst, config.inner_ip_dst,
-                        config.inner_vlan, tun_filter,
-                        config.vni, (queue + 1)]
-                self.tunnel_filter_add(*args)
+                rule_config = {
+                    'dut_port': dut_port,
+                    'outer_mac_dst': config.outer_mac_dst,
+                    'inner_mac_dst': config.inner_mac_dst,
+                    'inner_ip_dst': config.inner_ip_dst,
+                    'inner_vlan': config.inner_vlan,
+                    'tun_filter': tun_filter,
+                    'vni': config.vni,
+                    'queue': (queue + 1),
+                }
+                self.perf_tunnel_filter_set_rule(rule_config)
 
         # save pkt list into pcap file
         wrpcap(config.pcap_file, pkts)
         self.tester.session.copy_file_to(config.pcap_file)
 
-    def ip_random(self, port, frag, src, proto, tos, dst, chksum, len,
-                  options, version, flags, ihl, ttl, id):
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd('ip config -sourceIpAddrMode ipIncrHost')
-        self.add_tcl_cmd('ip config -sourceIpAddrRepeatCount %d' % 64)
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd('ip config -destIpMask "255.255.0.0" ')
-        self.add_tcl_cmd('ip config -destIpAddrMode ipRandom')
-        self.add_tcl_cmd('ip config -destIpAddrRepeatCount 65536')
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        self.add_tcl_cmd("ip config -ipProtocol %d" % proto)
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" %
-                         (self.chasId, port['card'], port['port']))
-
     def combine_pcap(self, dest_pcap, src_pcap):
         pkts = rdpcap(dest_pcap)
         if len(pkts) != 1:
@@ -1002,15 +1054,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
             else:
                 wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1)
 
-            if recv_queue == 'Multi' and tun_filter == "None":
-                ip_ori = self.ip
-                self.ip = self.ip_random
-
             # run traffic generator
-            _, pps = self.tester.traffic_generator_throughput(tgen_input)
-
-            if recv_queue == 'Multi' and tun_filter == "None":
-                self.ip = ip_ori
+            use_vm = True if recv_queue == 'Multi' and tun_filter == "None" else False
+            _, pps = self.suite_measure_throughput(tgen_input, use_vm=use_vm)
 
             pps /= 1000000.0
             perf_config['Mpps'] = pps
@@ -1020,8 +1066,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
             self.dut.send_expect("quit", "# ", 10)
 
             # verify every queue work fine
+            check_queue = 0
             if recv_queue == 'Multi':
-                for queue in range(self.tunnel_multiqueue):
+                for queue in range(check_queue):
                     self.verify("Queue= %d -> TX Port"
                                 % (queue) in out,
                                 "Queue %d no traffic" % queue)
@@ -1033,6 +1080,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
 
         self.result_table_print()
 
+
     def test_perf_vxlan_checksum_performance_2ports(self):
         self.result_table_create(self.chksum_header)
         vxlan = VxlanTestConfig(self, payload_size=self.vxlan_payload)
@@ -1053,8 +1101,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
             socket=self.ports_socket)
         core_mask = utils.create_mask(core_list)
 
-        tgen_dut = self.tester.get_local_port(self.dut_port)
-        tgen_tester = self.tester.get_local_port(self.recv_port)
+        self.dut_ports = self.dut.get_ports_performance(force_different_nic=False)
+        tx_port = self.tester.get_local_port(self.dut_ports[0])
+        rx_port = self.tester.get_local_port(self.dut_ports[1])
+
         for cal in self.cal_type:
             recv_queue = cal['recvqueue']
             print((utils.GREEN("Measure checksum performance of [%s %s %s]"
@@ -1063,9 +1113,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
             # configure flows
             tgen_input = []
             if recv_queue == 'Multi':
-                self.combine_pcap("vxlan1.pcap", "vxlan1_1.pcap")
-            self.tester.session.copy_file_to("vxlan1.pcap")
-            tgen_input.append((tgen_dut, tgen_tester, "vxlan1.pcap"))
+                tgen_input.append((tx_port, rx_port, "vxlan1.pcap"))
+                tgen_input.append((tx_port, rx_port, "vxlan1_1.pcap"))
+            else:
+                tgen_input.append((tx_port, rx_port, "vxlan1.pcap"))
 
             # multi queue and signle queue commands
             if recv_queue == 'Multi':
@@ -1078,24 +1129,34 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
 
             self.dut.send_expect(pmd_cmd, "testpmd> ", 100)
             self.dut.send_expect("set fwd csum", "testpmd>", 10)
-            self.dut.send_expect("csum parse-tunnel on %d" %
-                                 self.dut_port, "testpmd>", 10)
-            self.dut.send_expect("csum parse-tunnel on %d" %
-                                 self.recv_port, "testpmd>", 10)
             self.enable_vxlan(self.dut_port)
             self.enable_vxlan(self.recv_port)
 
             # redirect flow to another queue by tunnel filter
-            args = [self.dut_port, vxlan.outer_mac_dst,
-                    vxlan.inner_mac_dst, vxlan.inner_ip_dst,
-                    0, 'imac', vxlan.vni, 0]
-            self.tunnel_filter_add(*args)
+            rule_config = {
+                'dut_port': self.dut_port,
+                'outer_mac_dst': vxlan.outer_mac_dst,
+                'inner_mac_dst': vxlan.inner_mac_dst,
+                'inner_ip_dst': vxlan.inner_ip_dst,
+                'inner_vlan': 0,
+                'tun_filter': 'imac',
+                'vni': vxlan.vni,
+                'queue': 0
+            }
+            self.perf_tunnel_filter_set_rule(rule_config)
 
             if recv_queue == 'Multi':
-                args = [self.dut_port, vxlan_queue.outer_mac_dst,
-                        vxlan_queue.inner_mac_dst, vxlan_queue.inner_ip_dst,
-                        0, 'imac', vxlan_queue.vni, 1]
-                self.tunnel_filter_add(*args)
+                rule_config = {
+                    'dut_port': self.dut_port,
+                    'outer_mac_dst': vxlan_queue.outer_mac_dst,
+                    'inner_mac_dst': vxlan_queue.inner_mac_dst,
+                    'inner_ip_dst': vxlan_queue.inner_ip_dst,
+                    'inner_vlan': 0,
+                    'tun_filter': 'imac',
+                    'vni': vxlan.vni,
+                    'queue': 1
+                }
+                self.perf_tunnel_filter_set_rule(rule_config)
 
             for pro in cal['csum']:
                 self.csum_set_type(pro, self.dut_port)
@@ -1106,7 +1167,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
             wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1)
 
             # run traffic generator
-            _, pps = self.tester.traffic_generator_throughput(tgen_input)
+            _, pps = self.suite_measure_throughput(tgen_input)
 
             pps /= 1000000.0
             cal['Mpps'] = pps
@@ -1116,8 +1177,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):
             self.dut.send_expect("quit", "# ", 10)
 
             # verify every queue work fine
+            check_queue = 1
             if recv_queue == 'Multi':
-                for queue in range(self.tunnel_multiqueue):
+                for queue in range(check_queue):
                     self.verify("Queue= %d -> TX Port"
                                 % (queue) in out,
                                 "Queue %d no traffic" % queue)
-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH V2 4/6] tests/eventdev_perf: move to pktgen from etgen
  2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
                   ` (2 preceding siblings ...)
  2021-08-31  8:22 ` [dts] [PATCH V2 3/6] tests/vxlan: move to pktgen from etgen Yufen Mo
@ 2021-08-31  8:22 ` Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 5/6] tests/eventdev_pipeline_perf: " Yufen Mo
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Yufen Mo @ 2021-08-31  8:22 UTC (permalink / raw)
  To: dts, lijuan.tu, yingyax.han, junx.w.zhou; +Cc: Yufen Mo


#. remove etgen relevant source code.
#. update perf test cases to pktgen.
#. update compile bin to meson build.

Signed-off-by: Yufen Mo <yufengx.mo@intel.com>
---
 tests/TestSuite_eventdev_perf.py | 293 ++++++++++++++++++++-----------
 1 file changed, 195 insertions(+), 98 deletions(-)

diff --git a/tests/TestSuite_eventdev_perf.py b/tests/TestSuite_eventdev_perf.py
index fd142e89..7730cd1e 100644
--- a/tests/TestSuite_eventdev_perf.py
+++ b/tests/TestSuite_eventdev_perf.py
@@ -43,14 +43,14 @@ from test_case import TestCase
 from time import sleep
 from settings import HEADER_SIZE
 from pmd_output import PmdOutput
-from etgen import IxiaPacketGenerator
+from pktgen import PacketGeneratorHelper
 
 from settings import FOLDERS
 from system_info import SystemInfo
 import perf_report
 from datetime import datetime
 
-class TestEventdevPerf(TestCase,IxiaPacketGenerator):
+class TestEventdevPerf(TestCase):
 
     def set_up_all(self):
         """
@@ -58,7 +58,6 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
 
         PMD prerequisites.
         """
-        self.tester.extend_external_packet_generator(TestEventdevPerf, self)
 
         self.frame_sizes = [64, 128, 256, 512, 1024, 1518]
 
@@ -111,6 +110,30 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
 
         self.pmdout = PmdOutput(self.dut)
 
+        self.build_eventdev_app()
+
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+
+        self.pktgen_helper = PacketGeneratorHelper()
+
+    def suite_measure_throughput(self, tgen_input, rate_percent, delay):
+        streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, rate_percent,
+                                            None, self.tester.pktgen)
+        result = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
+        return result
+
+    def build_eventdev_app(self):
+        self.app_command = self.dut.apps_name["eventdev_pipeline"]
+        out = self.dut.build_dpdk_apps("examples/eventdev_pipeline")
+        self.verify("Error" not in out, "compilation error 1")
+        self.verify("No such file" not in out, "compilation error 2")
+
     def set_up(self):
         """
         Run before each test case.
@@ -120,7 +143,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
     def eventdev_cmd(self, test_type, stlist, nports, worker_cores):
 
         self.Port_pci_ids = []
-        command_line1 = "dpdk-test-eventdev -l %s -w %s"
+        command_line1 = self.app_command + " -l %s -w %s"
         for i in range(0, nports):
             self.Port_pci_ids.append(self.dut.ports_info[i]['pci'])
             ## Adding core-list and pci-ids
@@ -144,7 +167,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -174,12 +197,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -221,7 +245,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -251,12 +275,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -299,7 +324,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -329,12 +354,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -377,7 +403,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -407,12 +433,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -455,7 +482,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -485,12 +512,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -533,7 +561,7 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -563,12 +591,13 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -611,10 +640,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -645,11 +674,15 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (
+                        os.sep.join([self.output_path, "event_test1.pcap"]), payload_size))
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (
+                        os.sep.join([self.output_path, "event_test2.pcap"]), payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -692,10 +725,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -725,12 +758,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -773,10 +810,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -806,12 +843,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -854,10 +895,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -887,12 +928,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -935,10 +980,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -968,12 +1013,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1016,10 +1065,10 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -1049,12 +1098,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1098,16 +1151,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -1137,12 +1190,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1184,16 +1247,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -1223,12 +1286,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1271,16 +1344,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -1310,12 +1383,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1358,16 +1441,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -1397,12 +1480,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1445,16 +1538,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                          "event_test.pcap"))
+                          os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                           self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
             core_config = test_cycle['cores']
@@ -1483,12 +1576,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1531,16 +1634,16 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -1570,12 +1673,22 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -1603,22 +1716,6 @@ class TestEventdevPerf(TestCase,IxiaPacketGenerator):
 
         self.result_table_print()
 
-    def ip(self, port, frag, src, proto, tos, dst, chksum, len, options, version, flags, ihl, ttl, id):
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd("ip config -sourceIpAddrMode ipIncrHost")
-        self.add_tcl_cmd("ip config -sourceIpAddrRepeatCount 100")
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd("ip config -destIpAddrMode ipIdle")
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255")
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port']))
-
-
     def tear_down(self):
         """
         Run after each test case.
-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH V2 5/6] tests/eventdev_pipeline_perf: move to pktgen from etgen
  2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
                   ` (3 preceding siblings ...)
  2021-08-31  8:22 ` [dts] [PATCH V2 4/6] tests/eventdev_perf: " Yufen Mo
@ 2021-08-31  8:22 ` Yufen Mo
  2021-08-31  8:22 ` [dts] [PATCH V2 6/6] tests/fdir: " Yufen Mo
  2021-09-14  8:33 ` [dts] [PATCH V2 0/6] etgen: remove etgen Tu, Lijuan
  6 siblings, 0 replies; 8+ messages in thread
From: Yufen Mo @ 2021-08-31  8:22 UTC (permalink / raw)
  To: dts, lijuan.tu, yingyax.han, junx.w.zhou; +Cc: Yufen Mo


#. remove etgen relevant source code.
#. update perf test cases to pktgen.
#. update compile bin to meson build.

Signed-off-by: Yufen Mo <yufengx.mo@intel.com>
---
 tests/TestSuite_eventdev_pipeline_perf.py | 170 ++++++++++++++--------
 1 file changed, 111 insertions(+), 59 deletions(-)

diff --git a/tests/TestSuite_eventdev_pipeline_perf.py b/tests/TestSuite_eventdev_pipeline_perf.py
index 361b47ee..69cb4aa4 100644
--- a/tests/TestSuite_eventdev_pipeline_perf.py
+++ b/tests/TestSuite_eventdev_pipeline_perf.py
@@ -43,14 +43,14 @@ from test_case import TestCase
 from time import sleep
 from settings import HEADER_SIZE
 from pmd_output import PmdOutput
-from etgen import IxiaPacketGenerator
+from pktgen import PacketGeneratorHelper
 
 from settings import FOLDERS
 from system_info import SystemInfo
 import perf_report
 from datetime import datetime
 
-class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
+class TestEventdevPipelinePerf(TestCase):
 
     def set_up_all(self):
         """
@@ -58,7 +58,6 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
 
         PMD prerequisites.
         """
-        self.tester.extend_external_packet_generator(TestEventdevPipelinePerf, self)
 
         self.frame_sizes = [64, 128, 256, 512, 1024, 1518]
 
@@ -111,6 +110,30 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
 
         self.pmdout = PmdOutput(self.dut)
 
+        self.build_eventdev_app()
+
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+
+        self.pktgen_helper = PacketGeneratorHelper()
+
+    def suite_measure_throughput(self, tgen_input, rate_percent, delay):
+        streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, rate_percent,
+                                            None, self.tester.pktgen)
+        result = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
+        return result
+
+    def build_eventdev_app(self):
+        self.app_command = self.dut.apps_name["eventdev_pipeline"]
+        out = self.dut.build_dpdk_apps("examples/eventdev_pipeline")
+        self.verify("Error" not in out, "compilation error 1")
+        self.verify("No such file" not in out, "compilation error 2")
+
     def set_up(self):
         """
         Run before each test case.
@@ -120,7 +143,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
     def eventdev_cmd(self, stlist, nports, wmask):
 
         self.Port_pci_ids = []
-        command_line1 = "dpdk-eventdev_pipeline -c %s -w %s"
+        command_line1 = self.app_command + " -c %s -w %s"
         for i in range(0, nports):
             self.Port_pci_ids.append(self.dut.ports_info[i]['pci'])
             ## Adding core-list and pci-ids
@@ -143,7 +166,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -170,12 +193,13 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -217,7 +241,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -244,12 +268,13 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -291,7 +316,7 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -318,12 +343,13 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -365,10 +391,10 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -395,12 +421,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -442,10 +472,10 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -472,12 +502,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -519,10 +553,10 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -549,12 +583,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -596,16 +634,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -632,12 +670,22 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -679,16 +727,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -715,12 +763,22 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -762,16 +820,16 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
         tgen_input = []
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                            self.tester.get_local_port(self.dut_ports[1]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test1.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[2]),
                            self.tester.get_local_port(self.dut_ports[3]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test2.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                            self.tester.get_local_port(self.dut_ports[0]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test3.pcap"])))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[3]),
                            self.tester.get_local_port(self.dut_ports[2]),
-                           "event_test.pcap"))
+                           os.sep.join([self.output_path, "event_test4.pcap"])))
 
         # run testpmd for each core config
         for test_cycle in self.test_cycles:
@@ -798,12 +856,22 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
+                pcap = os.sep.join([self.output_path, "event_test1.pcap"])
                 self.tester.scapy_append(
-                    'wrpcap("event_test.pcap", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (payload_size))
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:00")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test2.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:01")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test3.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:02")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
+                pcap = os.sep.join([self.output_path, "event_test4.pcap"])
+                self.tester.scapy_append(
+                    'wrpcap("%s", [Ether(src="52:00:00:00:00:03")/IP(src="1.2.3.4",dst="1.1.1.1")/TCP()/("X"*%d)])' % (pcap, payload_size))
                 self.tester.scapy_execute()
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input, rate_percent=100, delay=60)
+                _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
                 pps /= 1000000.0
                 pct = pps * 100 / wirespeed
                 test_cycle['Mpps'][frame_size] = float('%.3f' % pps)
@@ -831,22 +899,6 @@ class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
 
         self.result_table_print()
 
-    def ip(self, port, frag, src, proto, tos, dst, chksum, len, options, version, flags, ihl, ttl, id):
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd("ip config -sourceIpAddrMode ipIncrHost")
-        self.add_tcl_cmd("ip config -sourceIpAddrRepeatCount 100")
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd("ip config -destIpAddrMode ipIdle")
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255")
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port']))
-
-
     def tear_down(self):
         """
         Run after each test case.
-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH V2 6/6] tests/fdir: move to pktgen from etgen
  2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
                   ` (4 preceding siblings ...)
  2021-08-31  8:22 ` [dts] [PATCH V2 5/6] tests/eventdev_pipeline_perf: " Yufen Mo
@ 2021-08-31  8:22 ` Yufen Mo
  2021-09-14  8:33 ` [dts] [PATCH V2 0/6] etgen: remove etgen Tu, Lijuan
  6 siblings, 0 replies; 8+ messages in thread
From: Yufen Mo @ 2021-08-31  8:22 UTC (permalink / raw)
  To: dts, lijuan.tu, yingyax.han, junx.w.zhou; +Cc: Yufen Mo


#. remove etgen relevant source code.
#. update perf test cases to pktgen.

Signed-off-by: Yufen Mo <yufengx.mo@intel.com>
---
 tests/TestSuite_fdir.py | 43 ++++++++++++++---------------------------
 1 file changed, 14 insertions(+), 29 deletions(-)

diff --git a/tests/TestSuite_fdir.py b/tests/TestSuite_fdir.py
index 007db26d..a02255fa 100644
--- a/tests/TestSuite_fdir.py
+++ b/tests/TestSuite_fdir.py
@@ -42,16 +42,16 @@ from time import sleep
 from scapy.utils import struct, socket, PcapWriter
 
 import utils
-from etgen import IxiaPacketGenerator
 from test_case import TestCase
 from settings import HEADER_SIZE
 from pmd_output import PmdOutput
+from pktgen import PacketGeneratorHelper
 
 import sys
 import imp
 
 
-class TestFdir(TestCase, IxiaPacketGenerator):
+class TestFdir(TestCase):
 
     #
     #
@@ -140,7 +140,6 @@ class TestFdir(TestCase, IxiaPacketGenerator):
 
         PMD prerequisites.
         """
-        self.tester.extend_external_packet_generator(TestFdir, self)
         #self.verify('bsdapp' not in self.path, "FDIR not support freebsd")
         # this feature support Fortville, Niantic
         #self.verify(self.nic in ["kawela_2", "niantic", "bartonhills", "82545EM",
@@ -208,6 +207,8 @@ class TestFdir(TestCase, IxiaPacketGenerator):
         for test_cycle in self.test_cycles:
             self.table_header.append("%s Mpps" % test_cycle['cores'])
             self.table_header.append("% linerate")
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
 
     def set_up(self):
         """
@@ -1180,7 +1181,10 @@ class TestFdir(TestCase, IxiaPacketGenerator):
         dst_ip_temp = self.dst_ip
         print("*src_ip_temp = " + src_ip_temp + "dst_ip_temp = " + dst_ip_temp)
         flows.append("Ether(src='52:00:00:00:00:00', dst='00:1B:21:8E:B2:30')/IP(src='%s',dst='%s')/UDP(sport=%d,dport=%d)/Raw(load='%s' + 'X'*(%d - 42 - %d))" % (src_ip_temp, dst_ip_temp, 1021, 1021, self.payload, frame_size, self.flexlength))
-        self.scapyCmds.append('wrpcap("/root/test.pcap", [%s])' % string.join(flows, ','))
+        self.scapyCmds.append('wrpcap("/root/test1.pcap", [%s])' % ','.join(flows))
+        flows = []
+        flows.append("Ether(src='52:00:00:00:00:01', dst='00:1B:21:8E:B2:31')/IP(src='%s',dst='%s')/UDP(sport=%d,dport=%d)/Raw(load='%s' + 'X'*(%d - 42 - %d))" % (src_ip_temp, dst_ip_temp, 1021, 1021, self.payload, frame_size, self.flexlength))
+        self.scapyCmds.append('wrpcap("/root/test2.pcap", [%s])' % ','.join(flows))
 
     def perf_fdir_performance_2ports(self, test_type, num_rules, num_flows):
         """
@@ -1191,10 +1195,10 @@ class TestFdir(TestCase, IxiaPacketGenerator):
 
         tgen_input.append((self.tester.get_local_port(self.dut_ports[0]),
                           self.tester.get_local_port(self.dut_ports[1]),
-                          "/root/test.pcap"))
+                          "/root/test1.pcap"))
         tgen_input.append((self.tester.get_local_port(self.dut_ports[1]),
                           self.tester.get_local_port(self.dut_ports[0]),
-                          "/root/test.pcap"))
+                          "/root/test2.pcap"))
 
         print("self.ports_socket=%s" % (self.ports_socket))
         # run testpmd for each core config
@@ -1229,7 +1233,6 @@ class TestFdir(TestCase, IxiaPacketGenerator):
             out = self.dut.send_expect(command_line, "testpmd> ", 100)
             print(out)
 
-            self.dut.send_expect("set verbose 1", "testpmd>")
             self.fdir_get_flexbytes()
 
             if test_type in ["fdir_noflex", "fdir_2flex", "fdir_16flex"]:
@@ -1264,12 +1267,14 @@ class TestFdir(TestCase, IxiaPacketGenerator):
                 """
 
                 # run traffic generator
-                _, pps = self.tester.traffic_generator_throughput(tgen_input)
+                streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                                    None, self.tester.pktgen)
+                _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
                 """
                 _, pps, _ = self.throughputRate(tgen_input)
                 """
 
-                out = self.dut.send_expect("show port stats all", "testpmd> ")
+                out = self.dut.send_expect("show port stats all", "testpmd> ", timeout=60)
                 print(out)
 
                 pps /= 1000000.0
@@ -1297,26 +1302,6 @@ class TestFdir(TestCase, IxiaPacketGenerator):
 
         self.result_table_print()
 
-    def ip(self, port, frag, src, proto, tos, dst, chksum, len, version, flags, ihl, ttl, id, options=None):
-        """
-        Configure IP protocol.
-        """
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd("ip config -sourceIpAddrMode ipIncrHost")
-        self.add_tcl_cmd("ip config -sourceIpAddrRepeatCount 64")
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd("ip config -destIpAddrMode ipIncrHost")
-        self.add_tcl_cmd("ip config -destIpAddrRepeatCount 64")
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        # self.add_tcl_cmd("ip config -ipProtocol %d" % proto)
-        self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255")
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port']))
-
     def test_perf_fdir_performance_2ports(self):
         """
         fdir Performance Benchmarking with 2 ports.
-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dts] [PATCH V2 0/6] etgen: remove etgen
  2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
                   ` (5 preceding siblings ...)
  2021-08-31  8:22 ` [dts] [PATCH V2 6/6] tests/fdir: " Yufen Mo
@ 2021-09-14  8:33 ` Tu, Lijuan
  6 siblings, 0 replies; 8+ messages in thread
From: Tu, Lijuan @ 2021-09-14  8:33 UTC (permalink / raw)
  To: Mo, YufengX, dts, Han,  YingyaX, junx.w.zhou

> -----Original Message-----
> From: Mo, YufengX <yufengx.mo@intel.com>
> Sent: 2021年8月31日 16:22
> To: dts@dpdk.org; Tu, Lijuan <lijuan.tu@intel.com>; Han, YingyaX
> <yingyax.han@intel.com>; junx.w.zhou@intel.com
> Cc: Mo, YufengX <yufengx.mo@intel.com>
> Subject: [dts][PATCH V2 0/6] etgen: remove etgen
> 
> 
> v2:
>  - fix checkpatch error.
>  -
> 
> v1:
>  - remove etgen relevant source code.

Applied, thanks

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-09-14  8:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-31  8:22 [dts] [PATCH V2 0/6] etgen: remove etgen Yufen Mo
2021-08-31  8:22 ` [dts] [PATCH V2 1/6] framework/etgen: " Yufen Mo
2021-08-31  8:22 ` [dts] [PATCH V2 2/6] tests: " Yufen Mo
2021-08-31  8:22 ` [dts] [PATCH V2 3/6] tests/vxlan: move to pktgen from etgen Yufen Mo
2021-08-31  8:22 ` [dts] [PATCH V2 4/6] tests/eventdev_perf: " Yufen Mo
2021-08-31  8:22 ` [dts] [PATCH V2 5/6] tests/eventdev_pipeline_perf: " Yufen Mo
2021-08-31  8:22 ` [dts] [PATCH V2 6/6] tests/fdir: " Yufen Mo
2021-09-14  8:33 ` [dts] [PATCH V2 0/6] etgen: remove etgen Tu, Lijuan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).