diff mbox series

[v2,5/5] rename base classes 5

Message ID 20220526131135.1643352-6-juraj.linkes@pantheon.tech (mailing list archive)
State Superseded
Headers show
Series cleanup: rename base classes | expand

Checks

Context Check Description
ci/Intel-dts-suite-test fail Apply issues

Commit Message

Juraj Linkeš May 26, 2022, 1:11 p.m. UTC
tests/*

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
 tests/TestSuite_acl.py                        |   16 +-
 tests/TestSuite_af_xdp_2.py                   |   72 +-
 tests/TestSuite_asan_smoke.py                 |   34 +-
 tests/TestSuite_basic_4k_pages_cbdma.py       |  138 +--
 tests/TestSuite_blocklist.py                  |   18 +-
 tests/TestSuite_cbdma.py                      |   82 +-
 tests/TestSuite_checksum_offload.py           |  286 ++---
 tests/TestSuite_cloud_filter_with_l4_port.py  |   86 +-
 tests/TestSuite_cmdline.py                    |   28 +-
 tests/TestSuite_compressdev_isal_pmd.py       |    2 +-
 tests/TestSuite_compressdev_qat_pmd.py        |    2 +-
 tests/TestSuite_compressdev_zlib_pmd.py       |    2 +-
 tests/TestSuite_coremask.py                   |   26 +-
 tests/TestSuite_crypto_perf_cryptodev_perf.py |   42 +-
 tests/TestSuite_dcf_lifecycle.py              |  190 +--
 tests/TestSuite_ddp_gtp.py                    |  108 +-
 tests/TestSuite_ddp_gtp_qregion.py            |  110 +-
 tests/TestSuite_ddp_l2tpv3.py                 |  144 +--
 tests/TestSuite_ddp_mpls.py                   |   90 +-
 tests/TestSuite_ddp_ppp_l2tp.py               |   86 +-
 tests/TestSuite_distributor.py                |   96 +-
 tests/TestSuite_dpdk_gro_lib.py               |  260 ++--
 tests/TestSuite_dpdk_gro_lib_cbdma.py         |  128 +-
 tests/TestSuite_dpdk_gso_lib.py               |  296 ++---
 tests/TestSuite_dpdk_hugetlbfs_mount_size.py  |  126 +-
 tests/TestSuite_dual_vlan.py                  |  192 +--
 tests/TestSuite_dynamic_config.py             |  130 +-
 tests/TestSuite_dynamic_flowtype.py           |   72 +-
 tests/TestSuite_dynamic_queue.py              |   92 +-
 tests/TestSuite_eeprom_dump.py                |   36 +-
 tests/TestSuite_efd.py                        |   76 +-
 ...e_enable_package_download_in_ice_driver.py |  188 +--
 tests/TestSuite_ethtool_stats.py              |   36 +-
 tests/TestSuite_eventdev_perf.py              |  512 ++++----
 tests/TestSuite_eventdev_pipeline.py          |   58 +-
 tests/TestSuite_eventdev_pipeline_perf.py     |  278 ++---
 tests/TestSuite_example_build.py              |    6 +-
 tests/TestSuite_external_memory.py            |   82 +-
 tests/TestSuite_external_mempool_handler.py   |   32 +-
 tests/TestSuite_fips_cryptodev.py             |   10 +-
 tests/TestSuite_firmware_version.py           |   10 +-
 tests/TestSuite_flexible_rxd.py               |   26 +-
 tests/TestSuite_floating_veb.py               |  194 +--
 tests/TestSuite_flow_classify.py              |   74 +-
 tests/TestSuite_flow_classify_softnic.py      |  537 ++++-----
 tests/TestSuite_flow_filtering.py             |   40 +-
 tests/TestSuite_generic_flow_api.py           |  682 +++++------
 tests/TestSuite_hello_world.py                |   16 +-
 tests/TestSuite_hotplug.py                    |  126 +-
 tests/TestSuite_hotplug_mp.py                 |   46 +-
 tests/TestSuite_i40e_rss_input.py             | 1074 ++++++++---------
 tests/TestSuite_iavf.py                       |  343 +++---
 tests/TestSuite_iavf_flexible_descriptor.py   |   48 +-
 ...tSuite_iavf_package_driver_error_handle.py |  172 +--
 tests/TestSuite_ice_1pps_signal.py            |   14 +-
 tests/TestSuite_ice_advanced_iavf_rss.py      |   74 +-
 ...TestSuite_ice_advanced_iavf_rss_gtpogre.py |   44 +-
 tests/TestSuite_ice_advanced_iavf_rss_gtpu.py |   52 +-
 ...uite_ice_advanced_iavf_rss_pppol2tpoudp.py |   52 +-
 ...advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py |   72 +-
 tests/TestSuite_ice_advanced_rss.py           |   54 +-
 tests/TestSuite_ice_advanced_rss_gtpogre.py   |   36 +-
 tests/TestSuite_ice_advanced_rss_gtpu.py      |   36 +-
 tests/TestSuite_ice_advanced_rss_pppoe.py     |   38 +-
 ..._ice_advanced_rss_vlan_esp_ah_l2tp_pfcp.py |   44 +-
 tests/TestSuite_ice_dcf_acl_filter.py         |  160 +--
 tests/TestSuite_ice_dcf_date_path.py          |   62 +-
 tests/TestSuite_ice_dcf_flow_priority.py      |  110 +-
 tests/TestSuite_ice_dcf_qos.py                |   69 +-
 tests/TestSuite_ice_dcf_switch_filter.py      |  202 ++--
 tests/TestSuite_ice_dcf_switch_filter_gtpu.py |   74 +-
 .../TestSuite_ice_dcf_switch_filter_pppoe.py  |  104 +-
 tests/TestSuite_ice_ecpri.py                  |  100 +-
 tests/TestSuite_ice_fdir.py                   |   88 +-
 tests/TestSuite_ice_flow_priority.py          |   32 +-
 tests/TestSuite_ice_iavf_fdir.py              |  442 +++----
 tests/TestSuite_ice_iavf_fdir_gtpogre.py      |   64 +-
 tests/TestSuite_ice_iavf_fdir_pppol2tpoudp.py |   52 +-
 ...TestSuite_ice_iavf_ip_fragment_rte_flow.py |   58 +-
 tests/TestSuite_ice_iavf_rss_configure.py     |   42 +-
 tests/TestSuite_ice_ip_fragment_rte_flow.py   |   46 +-
 tests/TestSuite_ice_limit_value_test.py       |  250 ++--
 tests/TestSuite_ice_qinq.py                   |  134 +-
 tests/TestSuite_ice_rss_configure.py          |   22 +-
 tests/TestSuite_ice_switch_filter.py          |  196 +--
 tests/TestSuite_ice_switch_filter_pppoe.py    |  174 +--
 ...tSuite_ice_vf_support_multicast_address.py |  120 +-
 tests/TestSuite_ieee1588.py                   |   76 +-
 tests/TestSuite_inline_ipsec.py               |   94 +-
 tests/TestSuite_interrupt_pmd.py              |   54 +-
 tests/TestSuite_ip_pipeline.py                |  339 +++---
 tests/TestSuite_ipfrag.py                     |  106 +-
 tests/TestSuite_ipgre.py                      |   94 +-
 tests/TestSuite_ipsec_gw_cryptodev_func.py    |   62 +-
 tests/TestSuite_ipv4_reassembly.py            |  108 +-
 ...te_ixgbe_vf_get_extra_queue_information.py |  104 +-
 tests/TestSuite_jumboframes.py                |   74 +-
 tests/TestSuite_keep_alive.py                 |   32 +-
 tests/TestSuite_kernelpf_iavf.py              |  350 +++---
 tests/TestSuite_kni.py                        |  464 +++----
 tests/TestSuite_l2fwd.py                      |  108 +-
 tests/TestSuite_l2fwd_cryptodev_func.py       |   68 +-
 tests/TestSuite_l2fwd_jobstats.py             |   36 +-
 tests/TestSuite_l2tp_esp_coverage.py          |  224 ++--
 tests/TestSuite_l3fwd.py                      |   10 +-
 tests/TestSuite_l3fwd_func.py                 |   86 +-
 tests/TestSuite_l3fwd_lpm_ipv4.py             |   10 +-
 tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py     |   10 +-
 tests/TestSuite_l3fwd_lpm_ipv6.py             |   10 +-
 tests/TestSuite_l3fwdacl.py                   |  216 ++--
 tests/TestSuite_large_vf.py                   |   74 +-
 tests/TestSuite_link_flowctrl.py              |  130 +-
 tests/TestSuite_link_status_interrupt.py      |  122 +-
 tests/TestSuite_linux_modules.py              |   84 +-
 ...Suite_loopback_multi_paths_port_restart.py |   34 +-
 tests/TestSuite_loopback_multi_queues.py      |   28 +-
 ...tSuite_loopback_virtio_user_server_mode.py |   60 +-
 ..._loopback_virtio_user_server_mode_cbdma.py |   50 +-
 tests/TestSuite_mac_filter.py                 |   88 +-
 tests/TestSuite_macsec_for_ixgbe.py           |  148 +--
 ...Suite_malicious_driver_event_indication.py |   54 +-
 tests/TestSuite_mdd.py                        |   90 +-
 tests/TestSuite_metering_and_policing.py      |  190 +--
 tests/TestSuite_metrics.py                    |   93 +-
 tests/TestSuite_mtu_update.py                 |   63 +-
 tests/TestSuite_multicast.py                  |   48 +-
 tests/TestSuite_multiple_pthread.py           |   44 +-
 tests/TestSuite_multiprocess.py               |  188 +--
 tests/TestSuite_nic_single_core_perf.py       |   64 +-
 tests/TestSuite_ntb.py                        |   97 +-
 tests/TestSuite_nvgre.py                      |  190 +--
 tests/TestSuite_packet_capture.py             |  248 ++--
 tests/TestSuite_packet_ordering.py            |   50 +-
 tests/TestSuite_perf_virtio_user_loopback.py  |   24 +-
 tests/TestSuite_pf_smoke.py                   |   82 +-
 tests/TestSuite_pipeline.py                   |  815 +++++++------
 tests/TestSuite_pmd.py                        |  168 +--
 tests/TestSuite_pmd_bonded.py                 |  640 +++++-----
 tests/TestSuite_pmd_bonded_8023ad.py          |   28 +-
 tests/TestSuite_pmd_stacked_bonded.py         |   38 +-
 tests/TestSuite_pmdpcap.py                    |   80 +-
 tests/TestSuite_pmdrss_hash.py                |  266 ++--
 tests/TestSuite_pmdrssreta.py                 |   88 +-
 tests/TestSuite_port_control.py               |   64 +-
 tests/TestSuite_port_representor.py           |  100 +-
 tests/TestSuite_power_bidirection_channel.py  |   82 +-
 tests/TestSuite_power_branch_ratio.py         |  109 +-
 tests/TestSuite_power_empty_poll.py           |   69 +-
 tests/TestSuite_power_negative.py             |   76 +-
 tests/TestSuite_power_pbf.py                  |   56 +-
 tests/TestSuite_power_pstate.py               |   48 +-
 tests/TestSuite_power_telemetry.py            |   59 +-
 tests/TestSuite_ptpclient.py                  |   70 +-
 tests/TestSuite_ptype_mapping.py              |   64 +-
 tests/TestSuite_pvp_diff_qemu_version.py      |   92 +-
 .../TestSuite_pvp_multi_paths_performance.py  |   66 +-
 ...lti_paths_vhost_single_core_performance.py |   62 +-
 ...ti_paths_virtio_single_core_performance.py |   64 +-
 ...Suite_pvp_qemu_multi_paths_port_restart.py |   74 +-
 tests/TestSuite_pvp_share_lib.py              |   70 +-
 tests/TestSuite_pvp_vhost_user_reconnect.py   |  148 +--
 tests/TestSuite_pvp_virtio_bonding.py         |   64 +-
 .../TestSuite_pvp_virtio_user_2M_hugepages.py |   58 +-
 tests/TestSuite_pvp_virtio_user_4k_pages.py   |   74 +-
 ...p_virtio_user_multi_queues_port_restart.py |   60 +-
 tests/TestSuite_qinq_filter.py                |  176 +--
 tests/TestSuite_qos_api.py                    |  102 +-
 tests/TestSuite_qos_meter.py                  |   75 +-
 tests/TestSuite_queue_region.py               |  270 ++---
 tests/TestSuite_queue_start_stop.py           |   74 +-
 tests/TestSuite_rss_key_update.py             |   92 +-
 tests/TestSuite_rss_to_rte_flow.py            |  426 +++----
 tests/TestSuite_rte_flow.py                   |   38 +-
 tests/TestSuite_rteflow_priority.py           |  192 +--
 tests/TestSuite_runtime_vf_queue_number.py    |  110 +-
 ...estSuite_runtime_vf_queue_number_kernel.py |   96 +-
 ...stSuite_runtime_vf_queue_number_maxinum.py |   58 +-
 tests/TestSuite_rxtx_callbacks.py             |   34 +-
 tests/TestSuite_rxtx_offload.py               |  413 ++++---
 tests/TestSuite_scatter.py                    |   38 +-
 tests/TestSuite_short_live.py                 |  100 +-
 tests/TestSuite_shutdown_api.py               |  420 +++----
 tests/TestSuite_skeleton.py                   |   34 +-
 tests/TestSuite_softnic.py                    |  104 +-
 tests/TestSuite_speed_capabilities.py         |   22 +-
 tests/TestSuite_sriov_kvm.py                  |  190 +--
 tests/TestSuite_stats_checks.py               |   60 +-
 tests/TestSuite_telemetry.py                  |   72 +-
 tests/TestSuite_testpmd_perf.py               |    8 +-
 tests/TestSuite_timer.py                      |   14 +-
 tests/TestSuite_tso.py                        |  340 +++---
 tests/TestSuite_tx_preparation.py             |   81 +-
 tests/TestSuite_uni_pkt.py                    |   64 +-
 tests/TestSuite_unit_tests_cmdline.py         |   12 +-
 tests/TestSuite_unit_tests_crc.py             |   12 +-
 tests/TestSuite_unit_tests_cryptodev_func.py  |   14 +-
 tests/TestSuite_unit_tests_dump.py            |  134 +-
 tests/TestSuite_unit_tests_eal.py             |  236 ++--
 tests/TestSuite_unit_tests_event_timer.py     |   26 +-
 tests/TestSuite_unit_tests_kni.py             |   20 +-
 tests/TestSuite_unit_tests_loopback.py        |   84 +-
 tests/TestSuite_unit_tests_lpm.py             |   42 +-
 tests/TestSuite_unit_tests_mbuf.py            |   12 +-
 tests/TestSuite_unit_tests_mempool.py         |   22 +-
 tests/TestSuite_unit_tests_pmd_perf.py        |   38 +-
 tests/TestSuite_unit_tests_power.py           |   32 +-
 tests/TestSuite_unit_tests_qos.py             |   32 +-
 tests/TestSuite_unit_tests_ring.py            |   20 +-
 tests/TestSuite_unit_tests_ringpmd.py         |   22 +-
 tests/TestSuite_unit_tests_timer.py           |   22 +-
 tests/TestSuite_userspace_ethtool.py          |  224 ++--
 tests/TestSuite_vdev_primary_secondary.py     |   66 +-
 tests/TestSuite_veb_switch.py                 |  184 +--
 tests/TestSuite_vf_daemon.py                  |  190 +--
 tests/TestSuite_vf_interrupt_pmd.py           |  176 +--
 tests/TestSuite_vf_jumboframe.py              |   88 +-
 tests/TestSuite_vf_kernel.py                  |  598 ++++-----
 tests/TestSuite_vf_l3fwd.py                   |   92 +-
 tests/TestSuite_vf_l3fwd_em_kernelpf.py       |   10 +-
 tests/TestSuite_vf_l3fwd_kernelpf.py          |   10 +-
 tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py |   10 +-
 ...uite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py |   10 +-
 tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py |   10 +-
 tests/TestSuite_vf_macfilter.py               |   94 +-
 tests/TestSuite_vf_offload.py                 |  220 ++--
 tests/TestSuite_vf_packet_rxtx.py             |  142 +--
 tests/TestSuite_vf_port_start_stop.py         |   64 +-
 tests/TestSuite_vf_rss.py                     |  144 +--
 tests/TestSuite_vf_single_core_perf.py        |   88 +-
 tests/TestSuite_vf_smoke.py                   |  104 +-
 tests/TestSuite_vf_to_vf_nic_bridge.py        |   86 +-
 tests/TestSuite_vf_vlan.py                    |  148 +--
 tests/TestSuite_vhost_1024_ethports.py        |   34 +-
 tests/TestSuite_vhost_cbdma.py                |  100 +-
 tests/TestSuite_vhost_event_idx_interrupt.py  |   94 +-
 tests/TestSuite_vhost_multi_queue_qemu.py     |  190 +--
 tests/TestSuite_vhost_pmd_xstats.py           |   54 +-
 tests/TestSuite_vhost_user_interrupt.py       |   56 +-
 tests/TestSuite_vhost_user_live_migration.py  |  292 ++---
 tests/TestSuite_vhost_virtio_pmd_interrupt.py |  124 +-
 ...tSuite_vhost_virtio_pmd_interrupt_cbdma.py |  126 +-
 .../TestSuite_vhost_virtio_user_interrupt.py  |  116 +-
 ...Suite_vhost_virtio_user_interrupt_cbdma.py |   78 +-
 tests/TestSuite_virtio_event_idx_interrupt.py |   98 +-
 ...tSuite_virtio_event_idx_interrupt_cbdma.py |  108 +-
 .../TestSuite_virtio_ipsec_cryptodev_func.py  |  168 +--
 tests/TestSuite_virtio_perf_cryptodev_func.py |   96 +-
 tests/TestSuite_virtio_pvp_regression.py      |   98 +-
 tests/TestSuite_virtio_smoke.py               |   46 +-
 tests/TestSuite_virtio_unit_cryptodev_func.py |   94 +-
 ...stSuite_virtio_user_as_exceptional_path.py |  164 +--
 ...te_virtio_user_for_container_networking.py |   58 +-
 tests/TestSuite_vlan.py                       |  116 +-
 tests/TestSuite_vlan_ethertype_config.py      |  198 +--
 tests/TestSuite_vm2vm_virtio_net_perf.py      |  104 +-
 .../TestSuite_vm2vm_virtio_net_perf_cbdma.py  |   94 +-
 tests/TestSuite_vm2vm_virtio_pmd.py           |  306 ++---
 tests/TestSuite_vm2vm_virtio_pmd_cbdma.py     |   66 +-
 tests/TestSuite_vm2vm_virtio_user.py          |  104 +-
 tests/TestSuite_vm2vm_virtio_user_cbdma.py    |   66 +-
 tests/TestSuite_vm_hotplug.py                 |  136 +--
 tests/TestSuite_vm_power_manager.py           |   78 +-
 tests/TestSuite_vm_pw_mgmt_policy.py          |  162 +--
 tests/TestSuite_vmdq.py                       |   82 +-
 tests/TestSuite_vmdq_dcb.py                   |   54 +-
 ..._pvp_multi_paths_performance_with_cbdma.py |  102 +-
 tests/TestSuite_vswitch_sample_cbdma.py       |  202 ++--
 tests/TestSuite_vxlan.py                      |  323 +++--
 tests/TestSuite_vxlan_gpe_support_in_i40e.py  |   70 +-
 tests/bonding.py                              |   88 +-
 tests/compress_common.py                      |   32 +-
 tests/cryptodev_common.py                     |   18 +-
 tests/flexible_common.py                      |   48 +-
 tests/perf_test_base.py                       |  136 +--
 tests/rte_flow_common.py                      |   64 +-
 tests/smoke_base.py                           |   34 +-
 276 files changed, 15849 insertions(+), 15872 deletions(-)
diff mbox series

Patch

diff --git a/tests/TestSuite_acl.py b/tests/TestSuite_acl.py
index e8b536f1..6c40d689 100644
--- a/tests/TestSuite_acl.py
+++ b/tests/TestSuite_acl.py
@@ -7,15 +7,15 @@  from framework.test_case import TestCase
 
 class TestACL(TestCase):
     def install_acl_rules(self):
-        # copy 'dep/test-acl-input.tar.gz' from tester to DUT,
+        # copy 'dep/test-acl-input.tar.gz' from TG to SUT,
         # and unpack the tarball into temporary directory.
         self.clean_acl_rules()
-        self.dut.session.copy_file_to(f"dep/{self.acl_tarball}", "/tmp")
-        self.dut.send_expect(f"tar xf /tmp/{self.acl_tarball} --directory=/tmp", "# ")
+        self.sut_node.session.copy_file_to(f"dep/{self.acl_tarball}", "/tmp")
+        self.sut_node.send_expect(f"tar xf /tmp/{self.acl_tarball} --directory=/tmp", "# ")
 
     def clean_acl_rules(self):
         # remove the temporary tarball file and directory
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             f"rm -rf /tmp/{self.acl_tarball} {self.acl_rules_dir}", "# ", 20
         )
 
@@ -25,9 +25,9 @@  class TestACL(TestCase):
         """
         # build ${DPDK}/<build>/app/dpdk-test-acl
         self.test_acl_sh = "app/test-acl/test-acl.sh"
-        out = self.dut.send_expect(f"ls -l {self.test_acl_sh}", "# ")
+        out = self.sut_node.send_expect(f"ls -l {self.test_acl_sh}", "# ")
         self.logger.info(f"test_acl_sh: {self.test_acl_sh}")
-        self.test_acl_bin = self.dut.apps_name["test-acl"]
+        self.test_acl_bin = self.sut_node.apps_name["test-acl"]
         self.logger.info(f"test_acl_app: {self.test_acl_bin}")
 
         # prepare test-acl-input directory
@@ -45,7 +45,7 @@  class TestACL(TestCase):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
@@ -86,7 +86,7 @@  class TestACL(TestCase):
             "257",
         ):
             acl_test_cmd = f"/bin/bash -x {self.test_acl_sh} {self.test_acl_bin} {self.acl_rules_dir} {alg} {burst_size}"
-            out = self.dut.send_expect(acl_test_cmd, "# ", 1200, trim_whitespace=False)
+            out = self.sut_node.send_expect(acl_test_cmd, "# ", 1200, trim_whitespace=False)
             self.verify("FAILED" not in out, f"for details see TestACL.log")
         self.logger.info("All tests have ended successfully")
 
diff --git a/tests/TestSuite_af_xdp_2.py b/tests/TestSuite_af_xdp_2.py
index 8e2fa9c3..38ee4836 100644
--- a/tests/TestSuite_af_xdp_2.py
+++ b/tests/TestSuite_af_xdp_2.py
@@ -6,10 +6,10 @@  import os
 import re
 import time
 
-from framework.packet import Packet
-from framework.pktgen import PacketGeneratorHelper
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.settings import HEADER_SIZE
 from framework.test_case import TestCase
+from framework.tg_perf import TrafficGeneratorStream
 
 
 class TestAfXdp(TestCase):
@@ -20,10 +20,10 @@  class TestAfXdp(TestCase):
         # self.verify(self.nic in ("I40E_40G-QSFP_A"), "the port can not run this suite")
 
         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")
+        self.sut_ports = self.sut_node.get_ports()
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports for testing")
 
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
 
         self.header_size = HEADER_SIZE["eth"] + HEADER_SIZE["ip"] + HEADER_SIZE["udp"]
 
@@ -36,29 +36,29 @@  class TestAfXdp(TestCase):
             self.frame_sizes = self.get_suite_cfg()["packet_sizes"]
 
         self.out_path = "/tmp"
-        out = self.tester.send_expect("ls -d %s" % self.out_path, "# ")
+        out = self.tg_node.send_expect("ls -d %s" % self.out_path, "# ")
         if "No such file or directory" in out:
-            self.tester.send_expect("mkdir -p %s" % self.out_path, "# ")
-        self.base_dir = self.dut.base_dir.replace("~", "/root")
-        self.pktgen_helper = PacketGeneratorHelper()
+            self.tg_node.send_expect("mkdir -p %s" % self.out_path, "# ")
+        self.base_dir = self.sut_node.base_dir.replace("~", "/root")
+        self.pktgen_helper = TrafficGeneratorStream()
 
-        self.dut.restore_interfaces()
-        self.irqs_set = self.dut.new_session(suite="irqs-set")
+        self.sut_node.restore_interfaces()
+        self.irqs_set = self.sut_node.new_session(suite="irqs-set")
 
     def set_up(self):
         pass
 
     def set_port_queue(self, intf):
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "ethtool -L %s combined %d" % (intf, self.nb_cores / self.port_num), "# "
         )
 
     def config_stream(self, rx_port, frame_size):
         tgen_input = []
 
-        dst_mac = self.dut.get_mac_address(self.dut_ports[rx_port])
-        pkt = Packet(pkt_len=frame_size)
-        pkt.config_layers(
+        dst_mac = self.sut_node.get_mac_address(self.sut_ports[rx_port])
+        scapy_pkt_builder = ScapyPacketBuilder(pkt_len=frame_size)
+        scapy_pkt_builder.config_layers(
             [
                 ("ether", {"dst": dst_mac}),
                 ("ipv4", {"dst": "192.168.%d.1" % (rx_port + 1), "proto": 255}),
@@ -67,7 +67,7 @@  class TestAfXdp(TestCase):
         pcap = os.path.join(
             self.out_path, "af_xdp_%d_%d_%d.pcap" % (self.port_num, rx_port, frame_size)
         )
-        pkt.save_pcapfile(None, pcap)
+        scapy_pkt_builder.save_pcapfile(None, pcap)
         tgen_input.append((rx_port, rx_port, pcap))
 
         return tgen_input
@@ -76,10 +76,10 @@  class TestAfXdp(TestCase):
         tgen_input = []
 
         rule = self.rule[rule_index]
-        pkt = Packet(pkt_len=frame_size)
-        pkt.config_layers([("udp", {"src": rule[-2], "dst": rule[-1]})])
+        scapy_pkt_builder = ScapyPacketBuilder(pkt_len=frame_size)
+        scapy_pkt_builder.config_layers([("udp", {"src": rule[-2], "dst": rule[-1]})])
         pcap = os.path.join(self.out_path, "af_xdp_%d_%d.pcap" % (rule[-2], frame_size))
-        pkt.save_pcapfile(None, pcap)
+        scapy_pkt_builder.save_pcapfile(None, pcap)
         tgen_input.append((rule[0], rule[0], pcap))
 
         return tgen_input
@@ -87,7 +87,7 @@  class TestAfXdp(TestCase):
     def ethtool_set_rule(self):
         rule_id, rule = 1, []
         for i in range(self.port_num):
-            intf = self.dut.ports_info[i]["port"].get_interface_name()
+            intf = self.sut_node.ports_info[i]["port"].get_interface_name()
             self.irqs_set.send_expect("ethtool -N %s rx-flow-hash udp4 fn" % intf, "# ")
             self.irqs_set.send_expect(
                 "ethtool -N %s flow-type udp4 src-port 4243 dst-port 4243 action 0 loc %d"
@@ -115,7 +115,7 @@  class TestAfXdp(TestCase):
         core_config = "1S/%dC/1T" % (
             self.nb_cores + 1 + max(self.port_num, self.vdev_num) * self.queue_number
         )
-        self.core_list = self.dut.get_core_list(core_config, socket=self.ports_socket)
+        self.core_list = self.sut_node.get_core_list(core_config, socket=self.ports_socket)
 
     def assign_port_core(self, separate=True):
         if separate:
@@ -128,7 +128,7 @@  class TestAfXdp(TestCase):
             ][-max(self.port_num, self.vdev_num) * self.queue_number :]
 
         for i in range(self.port_num):
-            intf = self.dut.ports_info[i]["port"].get_interface_name()
+            intf = self.sut_node.ports_info[i]["port"].get_interface_name()
             cores = ",".join(
                 core_list[i * self.queue_number : (i + 1) * self.queue_number]
             )
@@ -138,7 +138,7 @@  class TestAfXdp(TestCase):
             out = self.irqs_set.send_expect(command, "# ")
             self.verify(
                 "No such file or directory" not in out,
-                "can not find the set_irq_affinity in dut root",
+                "can not find the set_irq_affinity in SUT root",
             )
             time.sleep(1)
 
@@ -146,7 +146,7 @@  class TestAfXdp(TestCase):
         vdev_list = []
 
         if self.port_num == 1:
-            intf = self.dut.ports_info[0]["port"].get_interface_name()
+            intf = self.sut_node.ports_info[0]["port"].get_interface_name()
             self.set_port_queue(intf)
             time.sleep(1)
             for i in range(self.vdev_num):
@@ -161,7 +161,7 @@  class TestAfXdp(TestCase):
         else:
             for i in range(self.port_num):
                 vdev = ""
-                intf = self.dut.ports_info[i]["port"].get_interface_name()
+                intf = self.sut_node.ports_info[i]["port"].get_interface_name()
                 self.set_port_queue(intf)
                 vdev = "net_af_xdp%d,iface=%s" % (i, intf)
                 vdev_list.append(vdev)
@@ -182,14 +182,14 @@  class TestAfXdp(TestCase):
         else:
             rss_ip = ""
 
-        eal_params = self.dut.create_eal_parameters(
+        eal_params = self.sut_node.create_eal_parameters(
             cores=self.core_list[
                 : -max(self.port_num, self.vdev_num) * self.queue_number
             ],
             vdevs=vdev,
             no_pci=True,
         )
-        app_name = self.dut.apps_name["test-pmd"]
+        app_name = self.sut_node.apps_name["test-pmd"]
         command = (
             app_name
             + " %s --log-level=pmd.net.af_xdp:8 -- -i %s %s --auto-start --nb-cores=%d --rxq=%d "
@@ -206,7 +206,7 @@  class TestAfXdp(TestCase):
         )
 
         self.logger.info("start testpmd")
-        self.dut.send_expect(command, "testpmd> ", 120)
+        self.sut_node.send_expect(command, "testpmd> ", 120)
 
     def create_table(self, index=1):
         if self.port_num == 2 or index == 2:
@@ -239,18 +239,18 @@  class TestAfXdp(TestCase):
         traffic_opt = {"delay": 5}
 
         # clear streams before add new streams
-        self.tester.pktgen.clear_streams()
+        self.tg_node.perf_tg.clear_streams()
 
-        # run packet generator
+        # run traffic generator
         fields_config = {
             "ip": {
                 "dst": {"action": "random"},
             },
         }
         streams = self.pktgen_helper.prepare_stream_from_tginput(
-            tgen_input, 100, fields_config, self.tester.pktgen
+            tgen_input, 100, fields_config, self.tg_node.perf_tg
         )
-        _, pps = self.tester.pktgen.measure_throughput(
+        _, pps = self.tg_node.perf_tg.measure_throughput(
             stream_ids=streams, options=traffic_opt
         )
 
@@ -333,7 +333,7 @@  class TestAfXdp(TestCase):
                 result.append(Mpps)
                 result.append(throughput)
 
-                self.out = self.dut.send_expect("stop", "testpmd> ", 60)
+                self.out = self.sut_node.send_expect("stop", "testpmd> ", 60)
 
                 if self.queue_number == 1:
                     self.check_packets_of_each_port(i)
@@ -342,7 +342,7 @@  class TestAfXdp(TestCase):
                 else:
                     self.check_packets_of_each_queue(i)
 
-                self.dut.send_expect("start", "testpmd> ", 60)
+                self.sut_node.send_expect("start", "testpmd> ", 60)
 
             self.update_table_info(result)
 
@@ -468,7 +468,7 @@  class TestAfXdp(TestCase):
         self.result_table_print()
 
     def tear_down(self):
-        self.dut.send_expect("quit", "#", 60)
+        self.sut_node.send_expect("quit", "#", 60)
 
     def tear_down_all(self):
-        self.dut.kill_all()
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_asan_smoke.py b/tests/TestSuite_asan_smoke.py
index 14e18edd..47fbbbf9 100644
--- a/tests/TestSuite_asan_smoke.py
+++ b/tests/TestSuite_asan_smoke.py
@@ -2,8 +2,8 @@ 
 # Copyright(c) 2022 Intel Corporation
 #
 
-from framework.packet import Packet
 from framework.pmd_output import PmdOutput
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.test_case import TestCase
 
 from .smoke_base import SmokeTest
@@ -15,26 +15,26 @@  class TestASanSmoke(TestCase):
         Run at the start of each test suite.
         Generic filter Prerequistites
         """
-        self.smoke_dut_ports = self.dut.get_ports(self.nic)
-        self.ports_pci = [self.dut.ports_info[self.smoke_dut_ports[0]]["pci"]]
+        self.smoke_sut_ports = self.sut_node.get_ports(self.nic)
+        self.ports_pci = [self.sut_node.ports_info[self.smoke_sut_ports[0]]["pci"]]
         # Verify that enough ports are available
-        self.verify(len(self.smoke_dut_ports) >= 1, "Insufficient ports")
-        self.tester_port0 = self.tester.get_local_port(self.smoke_dut_ports[0])
-        self.smoke_tester_nic = self.tester.get_interface(self.tester_port0)
-        self.smoke_tester_mac = self.tester.get_mac(self.smoke_dut_ports[0])
-        self.smoke_dut_mac = self.dut.get_mac_address(self.smoke_dut_ports[0])
+        self.verify(len(self.smoke_sut_ports) >= 1, "Insufficient ports")
+        self.tg_port0 = self.tg_node.get_local_port(self.smoke_sut_ports[0])
+        self.smoke_tg_nic = self.tg_node.get_interface(self.tg_port0)
+        self.smoke_tg_mac = self.tg_node.get_mac(self.smoke_sut_ports[0])
+        self.smoke_sut_mac = self.sut_node.get_mac_address(self.smoke_sut_ports[0])
         self.cores = "1S/5C/1T"
         # check core num
-        core_list = self.dut.get_core_list(self.cores)
+        core_list = self.sut_node.get_core_list(self.cores)
         self.verify(len(core_list) >= 5, "Insufficient cores for testing")
 
-        # init Packet(), SmokeTest(), PmdOutput()
-        self.pkt = Packet()
+        # init ScapyTrafficGenerator(), SmokeTest(), PmdOutput()
+        self.scapy_pkt_builder = ScapyPacketBuilder()
         self.smoke_base = SmokeTest(self)
-        self.pmd_out = PmdOutput(self.dut)
+        self.pmd_out = PmdOutput(self.sut_node)
 
         # build dpdk with ASan tool
-        self.dut.build_install_dpdk(
+        self.sut_node.build_install_dpdk(
             target=self.target,
             extra_options="-Dbuildtype=debug -Db_lundef=false -Db_sanitize=address",
         )
@@ -55,13 +55,13 @@  class TestASanSmoke(TestCase):
         """
         Run after each test suite.
         """
-        self.dut.send_expect("quit", "#")
-        self.dut.kill_all()
-        self.dut.build_install_dpdk(self.target)
+        self.sut_node.send_expect("quit", "#")
+        self.sut_node.kill_all()
+        self.sut_node.build_install_dpdk(self.target)
 
     def check_testpmd_status(self):
         cmd = "ps -aux | grep testpmd | grep -v grep"
-        out = self.dut.send_expect(cmd, "#", 15, alt_session=True)
+        out = self.sut_node.send_expect(cmd, "#", 15, alt_session=True)
         self.verify(
             "testpmd" in out, "After build dpdk with ASan, start testpmd failed"
         )
diff --git a/tests/TestSuite_basic_4k_pages_cbdma.py b/tests/TestSuite_basic_4k_pages_cbdma.py
index 45e78f1e..74e48570 100644
--- a/tests/TestSuite_basic_4k_pages_cbdma.py
+++ b/tests/TestSuite_basic_4k_pages_cbdma.py
@@ -11,10 +11,10 @@  import re
 import time
 
 import framework.utils as utils
-from framework.packet import Packet
-from framework.pktgen import PacketGeneratorHelper
 from framework.pmd_output import PmdOutput
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.test_case import TestCase
+from framework.tg_perf import TrafficGeneratorStream
 from framework.virt_common import VM
 
 
@@ -23,46 +23,46 @@  class TestBasic4kPagesCbdma(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.dut_ports = self.dut.get_ports()
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
-        self.cores_num = len([n for n in self.dut.cores if int(n["socket"]) == 0])
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports for testing")
+        self.sut_ports = self.sut_node.get_ports()
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        self.cores_num = len([n for n in self.sut_node.cores if int(n["socket"]) == 0])
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports for testing")
         self.verify(
             self.cores_num >= 4,
             "There has not enought cores to test this suite %s" % self.suite_name,
         )
-        self.cores_list = self.dut.get_core_list(config="all", socket=self.ports_socket)
+        self.cores_list = self.sut_node.get_core_list(config="all", socket=self.ports_socket)
         self.vhost_core_list = self.cores_list[0:9]
         self.virtio0_core_list = self.cores_list[9:11]
-        self.vhost_user = self.dut.new_session(suite="vhost-user")
-        self.virtio_user0 = self.dut.new_session(suite="virtio-user")
-        self.vhost_user_pmd = PmdOutput(self.dut, self.vhost_user)
-        self.virtio_user0_pmd = PmdOutput(self.dut, self.virtio_user0)
-        self.pci_info = self.dut.ports_info[0]["pci"]
-        self.dst_mac = self.dut.get_mac_address(self.dut_ports[0])
+        self.vhost_user = self.sut_node.new_session(suite="vhost-user")
+        self.virtio_user0 = self.sut_node.new_session(suite="virtio-user")
+        self.vhost_user_pmd = PmdOutput(self.sut_node, self.vhost_user)
+        self.virtio_user0_pmd = PmdOutput(self.sut_node, self.virtio_user0)
+        self.pci_info = self.sut_node.ports_info[0]["pci"]
+        self.dst_mac = self.sut_node.get_mac_address(self.sut_ports[0])
         self.frame_sizes = [64, 128, 256, 512, 1024, 1518]
         self.out_path = "/tmp/%s" % self.suite_name
-        out = self.tester.send_expect("ls -d %s" % self.out_path, "# ")
+        out = self.tg_node.send_expect("ls -d %s" % self.out_path, "# ")
         if "No such file or directory" in out:
-            self.tester.send_expect("mkdir -p %s" % self.out_path, "# ")
+            self.tg_node.send_expect("mkdir -p %s" % self.out_path, "# ")
         # create an instance to set stream field setting
-        self.pktgen_helper = PacketGeneratorHelper()
+        self.pktgen_helper = TrafficGeneratorStream()
         self.number_of_ports = 1
-        self.app_testpmd_path = self.dut.apps_name["test-pmd"]
+        self.app_testpmd_path = self.sut_node.apps_name["test-pmd"]
         self.testpmd_name = self.app_testpmd_path.split("/")[-1]
         self.vm_num = 2
         self.virtio_ip1 = "1.1.1.1"
         self.virtio_ip2 = "1.1.1.2"
         self.virtio_mac1 = "52:54:00:00:00:01"
         self.virtio_mac2 = "52:54:00:00:00:02"
-        self.base_dir = self.dut.base_dir.replace("~", "/root")
+        self.base_dir = self.sut_node.base_dir.replace("~", "/root")
 
     def set_up(self):
         """
         Run before each test case.
         """
-        self.dut.send_expect("rm -rf /tmp/vhost-net*", "# ")
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "# ")
+        self.sut_node.send_expect("rm -rf /tmp/vhost-net*", "# ")
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "# ")
         self.umount_tmpfs_for_4k()
         # Prepare the result table
         self.table_header = ["Frame"]
@@ -71,7 +71,7 @@  class TestBasic4kPagesCbdma(TestCase):
         self.table_header.append("Queue Num")
         self.table_header.append("% linerate")
         self.result_table_create(self.table_header)
-        self.vm_dut = []
+        self.vm_sut = []
         self.vm = []
 
     def get_cbdma_ports_info_and_bind_to_dpdk(self, cbdma_num, allow_diff_socket=False):
@@ -81,7 +81,7 @@  class TestBasic4kPagesCbdma(TestCase):
         self.all_cbdma_list = []
         self.cbdma_list = []
         self.cbdma_str = ""
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --status-dev dma", "# ", 30
         )
         device_info = out.split("\n")
@@ -105,7 +105,7 @@  class TestBasic4kPagesCbdma(TestCase):
         )
         self.cbdma_list = self.all_cbdma_list[0:cbdma_num]
         self.cbdma_str = " ".join(self.cbdma_list)
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --force --bind=%s %s"
             % (self.drivername, self.cbdma_str),
             "# ",
@@ -113,11 +113,11 @@  class TestBasic4kPagesCbdma(TestCase):
         )
 
     def bind_cbdma_device_to_kernel(self):
-        self.dut.send_expect("modprobe ioatdma", "# ")
-        self.dut.send_expect(
+        self.sut_node.send_expect("modprobe ioatdma", "# ")
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -u %s" % self.cbdma_str, "# ", 30
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --force --bind=ioatdma  %s" % self.cbdma_str,
             "# ",
             60,
@@ -125,22 +125,22 @@  class TestBasic4kPagesCbdma(TestCase):
 
     def send_and_verify(self):
         """
-        Send packet with packet generator and verify
+        Send packet with traffic generator and verify
         """
         for frame_size in self.frame_sizes:
             tgen_input = []
-            rx_port = self.tester.get_local_port(self.dut_ports[0])
-            tx_port = self.tester.get_local_port(self.dut_ports[0])
-            pkt = Packet(pkt_type="UDP", pkt_len=frame_size)
-            pkt.config_layer("ether", {"dst": "%s" % self.dst_mac})
-            pkt.save_pcapfile(self.tester, "%s/vhost.pcap" % self.out_path)
+            rx_port = self.tg_node.get_local_port(self.sut_ports[0])
+            tx_port = self.tg_node.get_local_port(self.sut_ports[0])
+            scapy_pkt_builder = ScapyPacketBuilder(pkt_type="UDP", pkt_len=frame_size)
+            scapy_pkt_builder.config_layer("ether", {"dst": "%s" % self.dst_mac})
+            scapy_pkt_builder.save_pcapfile(self.tg_node, "%s/vhost.pcap" % self.out_path)
             tgen_input.append((tx_port, rx_port, "%s/vhost.pcap" % self.out_path))
 
-            self.tester.pktgen.clear_streams()
+            self.tg_node.perf_tg.clear_streams()
             streams = self.pktgen_helper.prepare_stream_from_tginput(
-                tgen_input, 100, None, self.tester.pktgen
+                tgen_input, 100, None, self.tg_node.perf_tg
             )
-            _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
+            _, pps = self.tg_node.perf_tg.measure_throughput(stream_ids=streams)
             Mpps = pps / 1000000.0
             # self.verify(Mpps > self.check_value[frame_size],
             #             "%s of frame size %d speed verify failed, expect %s, result %s" % (
@@ -194,8 +194,8 @@  class TestBasic4kPagesCbdma(TestCase):
             vm_params["opt_queue"] = opt_queue
 
         for i in range(self.vm_num):
-            vm_dut = None
-            vm_info = VM(self.dut, "vm%d" % i, vm_config)
+            vm_sut = None
+            vm_info = VM(self.sut_node, "vm%d" % i, vm_config)
 
             vm_params["driver"] = "vhost-user"
             if not server_mode:
@@ -207,31 +207,31 @@  class TestBasic4kPagesCbdma(TestCase):
             vm_info.set_vm_device(**vm_params)
             time.sleep(3)
             try:
-                vm_dut = vm_info.start(set_target=False)
-                if vm_dut is None:
+                vm_sut = vm_info.start(set_target=False)
+                if vm_sut is None:
                     raise Exception("Set up VM ENV failed")
             except Exception as e:
                 print((utils.RED("Failure for %s" % str(e))))
                 raise e
-            self.vm_dut.append(vm_dut)
+            self.vm_sut.append(vm_sut)
             self.vm.append(vm_info)
 
     def config_vm_ip(self):
         """
         set virtio device IP and run arp protocal
         """
-        vm1_intf = self.vm_dut[0].ports_info[0]["intf"]
-        vm2_intf = self.vm_dut[1].ports_info[0]["intf"]
-        self.vm_dut[0].send_expect(
+        vm1_intf = self.vm_sut[0].ports_info[0]["intf"]
+        vm2_intf = self.vm_sut[1].ports_info[0]["intf"]
+        self.vm_sut[0].send_expect(
             "ifconfig %s %s" % (vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm_dut[1].send_expect(
+        self.vm_sut[1].send_expect(
             "ifconfig %s %s" % (vm2_intf, self.virtio_ip2), "#", 10
         )
-        self.vm_dut[0].send_expect(
+        self.vm_sut[0].send_expect(
             "arp -s %s %s" % (self.virtio_ip2, self.virtio_mac2), "#", 10
         )
-        self.vm_dut[1].send_expect(
+        self.vm_sut[1].send_expect(
             "arp -s %s %s" % (self.virtio_ip1, self.virtio_mac1), "#", 10
         )
 
@@ -239,12 +239,12 @@  class TestBasic4kPagesCbdma(TestCase):
         """
         set virtio device combined
         """
-        vm1_intf = self.vm_dut[0].ports_info[0]["intf"]
-        vm2_intf = self.vm_dut[1].ports_info[0]["intf"]
-        self.vm_dut[0].send_expect(
+        vm1_intf = self.vm_sut[0].ports_info[0]["intf"]
+        vm2_intf = self.vm_sut[1].ports_info[0]["intf"]
+        self.vm_sut[0].send_expect(
             "ethtool -L %s combined %d" % (vm1_intf, combined), "#", 10
         )
-        self.vm_dut[1].send_expect(
+        self.vm_sut[1].send_expect(
             "ethtool -L %s combined %d" % (vm2_intf, combined), "#", 10
         )
 
@@ -254,10 +254,10 @@  class TestBasic4kPagesCbdma(TestCase):
         """
         iperf_server = "iperf -s -i 1"
         iperf_client = "iperf -c {} -i 1 -t 60".format(self.virtio_ip1)
-        self.vm_dut[0].send_expect(
+        self.vm_sut[0].send_expect(
             "{} > iperf_server.log &".format(iperf_server), "", 10
         )
-        self.vm_dut[1].send_expect(
+        self.vm_sut[1].send_expect(
             "{} > iperf_client.log &".format(iperf_client), "", 60
         )
         time.sleep(60)
@@ -268,8 +268,8 @@  class TestBasic4kPagesCbdma(TestCase):
         """
         self.table_header = ["Mode", "[M|G]bits/sec"]
         self.result_table_create(self.table_header)
-        self.vm_dut[0].send_expect("pkill iperf", "# ")
-        self.vm_dut[1].session.copy_file_from("%s/iperf_client.log" % self.dut.base_dir)
+        self.vm_sut[0].send_expect("pkill iperf", "# ")
+        self.vm_sut[1].session.copy_file_from("%s/iperf_client.log" % self.sut_node.base_dir)
         fp = open("./iperf_client.log")
         fmsg = fp.read()
         fp.close()
@@ -289,8 +289,8 @@  class TestBasic4kPagesCbdma(TestCase):
         # print iperf resut
         self.result_table_print()
         # rm the iperf log file in vm
-        self.vm_dut[0].send_expect("rm iperf_server.log", "#", 10)
-        self.vm_dut[1].send_expect("rm iperf_client.log", "#", 10)
+        self.vm_sut[0].send_expect("rm iperf_server.log", "#", 10)
+        self.vm_sut[1].send_expect("rm iperf_client.log", "#", 10)
 
     def verify_xstats_info_on_vhost(self):
         """
@@ -315,8 +315,8 @@  class TestBasic4kPagesCbdma(TestCase):
         Prepare tmpfs with 4K-pages
         """
         for num in range(number):
-            self.dut.send_expect("mkdir /mnt/tmpfs_nohuge{}".format(num), "# ")
-            self.dut.send_expect(
+            self.sut_node.send_expect("mkdir /mnt/tmpfs_nohuge{}".format(num), "# ")
+            self.sut_node.send_expect(
                 "mount tmpfs /mnt/tmpfs_nohuge{} -t tmpfs -o size=4G".format(num), "# "
             )
 
@@ -324,21 +324,21 @@  class TestBasic4kPagesCbdma(TestCase):
         """
         Prepare tmpfs with 4K-pages
         """
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "mount |grep 'mnt/tmpfs' |awk -F ' ' {'print $3'}", "#"
         )
         mount_infos = out.replace("\r", "").split("\n")
         if len(mount_infos) != 0:
             for mount_info in mount_infos:
-                self.dut.send_expect("umount {}".format(mount_info), "# ")
+                self.sut_node.send_expect("umount {}".format(mount_info), "# ")
 
     def umount_huge_pages(self):
-        self.dut.send_expect("mount |grep '/mnt/huge' |awk -F ' ' {'print $3'}", "#")
-        self.dut.send_expect("umount /mnt/huge", "# ")
+        self.sut_node.send_expect("mount |grep '/mnt/huge' |awk -F ' ' {'print $3'}", "#")
+        self.sut_node.send_expect("umount /mnt/huge", "# ")
 
     def mount_huge_pages(self):
-        self.dut.send_expect("mkdir -p /mnt/huge", "# ")
-        self.dut.send_expect("mount -t hugetlbfs nodev /mnt/huge", "# ")
+        self.sut_node.send_expect("mkdir -p /mnt/huge", "# ")
+        self.sut_node.send_expect("mount -t hugetlbfs nodev /mnt/huge", "# ")
 
     def test_perf_pvp_virtio_user_split_ring_with_4K_pages_and_cbdma_enable(self):
         """
@@ -350,7 +350,7 @@  class TestBasic4kPagesCbdma(TestCase):
         vhost_param = " --no-numa --socket-num={} --lcore-dma=[{}]".format(
             self.ports_socket, lcore_dma
         )
-        ports = [self.dut.ports_info[0]["pci"]]
+        ports = [self.sut_node.ports_info[0]["pci"]]
         for i in self.cbdma_list:
             ports.append(i)
         self.start_vhost_user_testpmd(
@@ -380,7 +380,7 @@  class TestBasic4kPagesCbdma(TestCase):
         vhost_param = " --no-numa --socket-num={} --lcore-dma=[{}]".format(
             self.ports_socket, lcore_dma
         )
-        ports = [self.dut.ports_info[0]["pci"]]
+        ports = [self.sut_node.ports_info[0]["pci"]]
         for i in self.cbdma_list:
             ports.append(i)
         self.start_vhost_user_testpmd(
@@ -406,7 +406,7 @@  class TestBasic4kPagesCbdma(TestCase):
         """
         self.virtio_user0_pmd.quit()
         self.vhost_user_pmd.quit()
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "# ")
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "# ")
         self.bind_cbdma_device_to_kernel()
         self.umount_tmpfs_for_4k()
 
@@ -414,5 +414,5 @@  class TestBasic4kPagesCbdma(TestCase):
         """
         Run after each test suite.
         """
-        self.dut.close_session(self.vhost_user)
-        self.dut.close_session(self.virtio_user0)
+        self.sut_node.close_session(self.vhost_user)
+        self.sut_node.close_session(self.virtio_user0)
diff --git a/tests/TestSuite_blocklist.py b/tests/TestSuite_blocklist.py
index 635502ff..71c5bdad 100644
--- a/tests/TestSuite_blocklist.py
+++ b/tests/TestSuite_blocklist.py
@@ -20,13 +20,13 @@  class TestBlockList(TestCase):
         Requirements:
             Two Ports
         """
-        self.ports = self.dut.get_ports(self.nic)
+        self.ports = self.sut_node.get_ports(self.nic)
         self.verify(len(self.ports) >= 2, "Insufficient ports for testing")
         [arch, machine, self.env, toolchain] = self.target.split("-")
         self.regexp_blocklisted_port = (
             "Probe PCI driver: net.*%s \(%s\) device: .*%s \(socket [-0-9]+\)"
         )
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
     def set_up(self):
         """
@@ -46,10 +46,10 @@  class TestBlockList(TestCase):
             # Look for the PCI ID of each card followed by
             # "Device is blocklisted, not initializing" but avoid to consume more
             # than one device.
-            port_pci = self.dut.ports_info[port]["pci"]
+            port_pci = self.sut_node.ports_info[port]["pci"]
             regexp_blocklisted_port = self.regexp_blocklisted_port % (
                 DRIVERS.get(self.nic),
-                self.dut.ports_info[port]["type"],
+                self.sut_node.ports_info[port]["type"],
                 port_pci,
             )
             matching_ports = utils.regexp(output, regexp_blocklisted_port, True)
@@ -77,9 +77,9 @@  class TestBlockList(TestCase):
         """
         Run testpmd with one port blocklisted.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         out = self.pmdout.start_testpmd(
-            "Default", eal_param="-b %s" % self.dut.ports_info[0]["pci"]
+            "Default", eal_param="-b %s" % self.sut_node.ports_info[0]["pci"]
         )
         self.check_blocklisted_ports(out, self.ports[1:])
 
@@ -87,11 +87,11 @@  class TestBlockList(TestCase):
         """
         Run testpmd with all but one port blocklisted.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         ports_to_blocklist = self.ports[:-1]
         cmdline = ""
         for port in ports_to_blocklist:
-            cmdline += " -b %s" % self.dut.ports_info[port]["pci"]
+            cmdline += " -b %s" % self.sut_node.ports_info[port]["pci"]
         out = self.pmdout.start_testpmd("Default", eal_param=cmdline)
         blocklisted_ports = self.check_blocklisted_ports(out, ports_to_blocklist, True)
 
@@ -100,7 +100,7 @@  class TestBlockList(TestCase):
         Run after each test case.
         Quit testpmd.
         """
-        self.dut.send_expect("quit", "# ", 10)
+        self.sut_node.send_expect("quit", "# ", 10)
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_cbdma.py b/tests/TestSuite_cbdma.py
index d5198472..79541122 100644
--- a/tests/TestSuite_cbdma.py
+++ b/tests/TestSuite_cbdma.py
@@ -10,9 +10,9 @@  import re
 import time
 
 import framework.utils as utils
-from framework.packet import Packet
-from framework.pktgen import TRANSMIT_CONT
 from framework.pmd_output import PmdOutput
+from framework.scapy_packet_builder import ScapyPacketBuilder
+from framework.settings import TRANSMIT_CONT
 from framework.test_case import TestCase
 
 
@@ -24,16 +24,16 @@  class TestCBDMA(TestCase):
         self.frame_sizes = [64, 256, 512, 1024, 1518]
         self.cbdma_dev_infos = []
         self.device_str = None
-        self.dut_ports = self.dut.get_ports()
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.sut_ports = self.sut_node.get_ports()
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports for testing")
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
         self.get_cbdma_ports_info_and_bind_to_dpdk()
         # default --proc-type=primary, case 1-6 use default values, case7 use --proc-type=secondary
         self.cbdma_proc = "--proc-type=primary"
         # default v_dev is None, case 1-6 use default None values, case7 use --vdev net_null_0
         self.v_dev = ""
-        out = self.dut.build_dpdk_apps("./examples/dma")
-        self.dma_path = self.dut.apps_name["dma"]
+        out = self.sut_node.build_dpdk_apps("./examples/dma")
+        self.dma_path = self.sut_node.apps_name["dma"]
         self.verify("Error" not in out, "compilation dma error")
 
     def set_up(self):
@@ -49,14 +49,14 @@  class TestCBDMA(TestCase):
         self.table_header.append("Updating MAC")
         self.table_header.append("% linerate")
         self.result_table_create(self.table_header)
-        self.send_session = self.dut.new_session("new_session")
+        self.send_session = self.sut_node.new_session("new_session")
 
     def get_core_list(self):
         """
         get cores list depend on thread_num
         """
         core_config = "1S/%dC/1T" % self.cbdma_cores_num
-        self.core_list = self.dut.get_core_list(core_config, socket=self.ports_socket)
+        self.core_list = self.sut_node.get_core_list(core_config, socket=self.ports_socket)
         self.verify(
             len(self.core_list) >= self.cbdma_cores_num,
             "There no enough cores to run this case",
@@ -66,7 +66,7 @@  class TestCBDMA(TestCase):
         """
         get all cbdma ports
         """
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --status-dev dma", "# ", 30
         )
         device_info = out.split("\n")
@@ -88,7 +88,7 @@  class TestCBDMA(TestCase):
             "There no enough cbdma device to run this suite",
         )
         self.device_str = " ".join(self.cbdma_dev_infos[0:8])
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --force --bind=%s %s"
             % (self.drivername, self.device_str),
             "# ",
@@ -97,11 +97,11 @@  class TestCBDMA(TestCase):
 
     def bind_cbdma_device_to_kernel(self):
         if self.device_str is not None:
-            self.dut.send_expect("modprobe ioatdma", "# ")
-            self.dut.send_expect(
+            self.sut_node.send_expect("modprobe ioatdma", "# ")
+            self.sut_node.send_expect(
                 "./usertools/dpdk-devbind.py -u %s" % self.device_str, "# ", 30
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "./usertools/dpdk-devbind.py --force --bind=ioatdma  %s"
                 % self.device_str,
                 "# ",
@@ -111,7 +111,7 @@  class TestCBDMA(TestCase):
     def get_ports_info(self):
         dev_info = []
         for i in range(self.cbdma_nic_dev_num):
-            dev_info.append(self.dut.ports_info[i]["pci"])
+            dev_info.append(self.sut_node.ports_info[i]["pci"])
         for i in range(self.cbdma_dma_dev_num):
             dev_info.append(self.cbdma_dev_infos[i])
         return dev_info
@@ -170,23 +170,23 @@  class TestCBDMA(TestCase):
     def config_stream(self, frame_size):
         stream_ids = []
         for port in range(self.cbdma_nic_dev_num):
-            tx_port = self.tester.get_local_port(self.dut_ports[port])
+            tx_port = self.tg_node.get_local_port(self.sut_ports[port])
             rx_port = tx_port
             if self.cbdma_nic_dev_num > 1:
                 if port % self.cbdma_nic_dev_num == 0:
-                    rx_port = self.tester.get_local_port(self.dut_ports[port + 1])
+                    rx_port = self.tg_node.get_local_port(self.sut_ports[port + 1])
                 else:
-                    rx_port = self.tester.get_local_port(self.dut_ports[port - 1])
-            dst_mac = self.dut.get_mac_address(self.dut_ports[port])
+                    rx_port = self.tg_node.get_local_port(self.sut_ports[port - 1])
+            dst_mac = self.sut_node.get_mac_address(self.sut_ports[port])
             # pkt config
-            pkt = Packet(pkt_type="UDP", pkt_len=frame_size)
-            pkt.config_layer("ether", {"dst": "%s" % dst_mac})
-            pkt.config_layer("udp", {"src": 1111, "dst": 1112})
-            pkt.save_pcapfile(
-                self.tester, "%s/cbdma_%d.pcap" % (self.tester.tmp_file, port)
+            scapy_pkt_builder = ScapyPacketBuilder(pkt_type="UDP", pkt_len=frame_size)
+            scapy_pkt_builder.config_layer("ether", {"dst": "%s" % dst_mac})
+            scapy_pkt_builder.config_layer("udp", {"src": 1111, "dst": 1112})
+            scapy_pkt_builder.save_pcapfile(
+                self.tg_node, "%s/cbdma_%d.pcap" % (self.tg_node.tmp_file, port)
             )
             stream_option = {
-                "pcap": "%s/cbdma_%d.pcap" % (self.tester.tmp_file, port),
+                "pcap": "%s/cbdma_%d.pcap" % (self.tg_node.tmp_file, port),
                 "fields_config": {
                     "ip": {
                         "src": {
@@ -202,22 +202,22 @@  class TestCBDMA(TestCase):
                     "transmit_mode": TRANSMIT_CONT,
                 },
             }
-            stream_id = self.tester.pktgen.add_stream(
-                tx_port, tx_port, "%s/cbdma_%d.pcap" % (self.tester.tmp_file, port)
+            stream_id = self.tg_node.perf_tg.add_stream(
+                tx_port, tx_port, "%s/cbdma_%d.pcap" % (self.tg_node.tmp_file, port)
             )
-            self.tester.pktgen.config_stream(stream_id, stream_option)
+            self.tg_node.perf_tg.config_stream(stream_id, stream_option)
             stream_ids.append(stream_id)
         return stream_ids
 
     def send_and_verify_throughput(self, check_channel=False):
         """
-        Send packet with packet generator and verify
+        Send packet with traffic generator and verify
         """
         for frame_size in self.frame_sizes:
-            self.tester.pktgen.clear_streams()
+            self.tg_node.perf_tg.clear_streams()
             stream_ids = self.config_stream(frame_size)
             traffic_opt = {"method": "throughput", "rate": 100, "duration": 20}
-            _, pps = self.tester.pktgen.measure(stream_ids, traffic_opt)
+            _, pps = self.tg_node.perf_tg.measure(stream_ids, traffic_opt)
             self.verify(
                 pps > 0,
                 "%s can not receive packets of frame size %d"
@@ -275,7 +275,7 @@  class TestCBDMA(TestCase):
         self.cbdma_copy_mode = "hw"
         self.get_core_list()
         dev_info = self.get_ports_info()
-        eal_params = self.dut.create_eal_parameters(
+        eal_params = self.sut_node.create_eal_parameters(
             cores=self.core_list, ports=dev_info, prefix="cbdma"
         )
         self.launch_dma_app(eal_params)
@@ -294,7 +294,7 @@  class TestCBDMA(TestCase):
         self.cbdma_copy_mode = "hw"
         self.get_core_list()
         dev_info = self.get_ports_info()
-        eal_params = self.dut.create_eal_parameters(
+        eal_params = self.sut_node.create_eal_parameters(
             cores=self.core_list, ports=dev_info, prefix="cbdma"
         )
         self.launch_dma_app(eal_params)
@@ -313,7 +313,7 @@  class TestCBDMA(TestCase):
         self.cbdma_copy_mode = "hw"
         self.get_core_list()
         dev_info = self.get_ports_info()
-        eal_params = self.dut.create_eal_parameters(
+        eal_params = self.sut_node.create_eal_parameters(
             cores=self.core_list, ports=dev_info, prefix="cbdma"
         )
         self.launch_dma_app(eal_params)
@@ -334,7 +334,7 @@  class TestCBDMA(TestCase):
         for queue_num in queue_num_list:
             self.cbdma_dma_dev_num = queue_num
             dev_info = self.get_ports_info()
-            eal_params = self.dut.create_eal_parameters(
+            eal_params = self.sut_node.create_eal_parameters(
                 cores=self.core_list, ports=dev_info, prefix="cbdma"
             )
             self.launch_dma_app(eal_params)
@@ -354,7 +354,7 @@  class TestCBDMA(TestCase):
         self.cbdma_copy_mode = "hw"
         self.get_core_list()
         dev_info = self.get_ports_info()
-        eal_params = self.dut.create_eal_parameters(
+        eal_params = self.sut_node.create_eal_parameters(
             cores=self.core_list, ports=dev_info, prefix="cbdma"
         )
         self.launch_dma_app(eal_params)
@@ -377,7 +377,7 @@  class TestCBDMA(TestCase):
         self.cbdma_copy_mode = "hw"
         self.get_core_list()
         dev_info = self.get_ports_info()
-        eal_params = self.dut.create_eal_parameters(
+        eal_params = self.sut_node.create_eal_parameters(
             cores=self.core_list, ports=dev_info, prefix="cbdma"
         )
         self.launch_dma_app(eal_params)
@@ -402,13 +402,13 @@  class TestCBDMA(TestCase):
         dev_info = self.get_ports_info()
         dev_info.pop(0)
         self.get_core_list()
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
         self.pmdout.start_testpmd(
             cores="", eal_param="--vdev net_null_0 --proc-type=primary", ports=dev_info
         )
         self.pmdout.execute_cmd("port stop all")
         self.cbdma_proc = "--proc-type=secondary"
-        eal_params = self.dut.create_eal_parameters(
+        eal_params = self.sut_node.create_eal_parameters(
             cores=self.core_list, ports=dev_info
         )
         self.launch_dma_app(eal_params)
@@ -421,8 +421,8 @@  class TestCBDMA(TestCase):
         Run after each test case.
         """
         self.send_session.send_expect("^c", "# ")
-        self.dut.close_session(self.send_session)
-        self.dut.kill_all()
+        self.sut_node.close_session(self.send_session)
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_checksum_offload.py b/tests/TestSuite_checksum_offload.py
index 3554f5eb..020b4b2a 100644
--- a/tests/TestSuite_checksum_offload.py
+++ b/tests/TestSuite_checksum_offload.py
@@ -24,15 +24,15 @@  from scapy.layers.vxlan import VXLAN
 from scapy.packet import Raw
 from scapy.utils import rdpcap, wrpcap
 
-import framework.packet as packet
+import framework.scapy_packet_builder as scapy_pkt_builder
 import framework.utils as utils
 from framework.exception import VerifyFailure
-from framework.pktgen import PacketGeneratorHelper
 from framework.pmd_output import PmdOutput
 from framework.rst import RstReport
 from framework.settings import FOLDERS
 from framework.test_capabilities import DRIVER_TEST_LACK_CAPA
 from framework.test_case import TestCase
+from framework.tg_perf import TrafficGeneratorStream
 
 l3_proto_classes = [IP, IPv6]
 
@@ -62,12 +62,12 @@  class TestChecksumOffload(TestCase):
         Checksum offload prerequisites.
         """
         # Based on h/w type, choose how many ports to use
-        self.dut_ports = self.dut.get_ports(self.nic)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
         # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports for testing")
-        self.pmdout: PmdOutput = PmdOutput(self.dut)
-        self.portMask = utils.create_mask([self.dut_ports[0]])
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports for testing")
+        self.pmdout: PmdOutput = PmdOutput(self.sut_node)
+        self.portMask = utils.create_mask([self.sut_ports[0]])
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
         # get dts output path
         if self.logger.log_path.startswith(os.sep):
             self.output_path = self.logger.log_path
@@ -88,28 +88,28 @@  class TestChecksumOffload(TestCase):
             + "--port-topology=loop",
             socket=self.ports_socket,
         )
-        self.dut.send_expect("set verbose 1", "testpmd>")
-        self.dut.send_expect("set fwd csum", "testpmd>")
+        self.sut_node.send_expect("set verbose 1", "testpmd>")
+        self.sut_node.send_expect("set fwd csum", "testpmd>")
 
     def checksum_enablehw(self, port):
-        self.dut.send_expect("port stop all", "testpmd>")
-        self.dut.send_expect("rx_vxlan_port add 4789 0 ", "testpmd>")
-        self.dut.send_expect("csum set ip hw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set udp hw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set tcp hw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set sctp hw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set outer-ip hw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set outer-udp hw %d" % port, "testpmd>")
-        self.dut.send_expect("csum parse-tunnel on %d" % port, "testpmd>")
-        self.dut.send_expect("port start all", "testpmd>")
+        self.sut_node.send_expect("port stop all", "testpmd>")
+        self.sut_node.send_expect("rx_vxlan_port add 4789 0 ", "testpmd>")
+        self.sut_node.send_expect("csum set ip hw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set udp hw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set tcp hw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set sctp hw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set outer-ip hw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set outer-udp hw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum parse-tunnel on %d" % port, "testpmd>")
+        self.sut_node.send_expect("port start all", "testpmd>")
 
     def checksum_enablesw(self, port):
-        self.dut.send_expect("port stop all", "testpmd>")
-        self.dut.send_expect("csum set ip sw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set udp sw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set tcp sw %d" % port, "testpmd>")
-        self.dut.send_expect("csum set sctp sw %d" % port, "testpmd>")
-        self.dut.send_expect("port start all", "testpmd>")
+        self.sut_node.send_expect("port stop all", "testpmd>")
+        self.sut_node.send_expect("csum set ip sw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set udp sw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set tcp sw %d" % port, "testpmd>")
+        self.sut_node.send_expect("csum set sctp sw %d" % port, "testpmd>")
+        self.sut_node.send_expect("port start all", "testpmd>")
 
     def get_chksum_values(self, packets_expected):
         """
@@ -119,15 +119,15 @@  class TestChecksumOffload(TestCase):
 
         chksum = dict()
 
-        self.tester.send_expect("scapy", ">>> ")
+        self.tg_node.send_expect("scapy", ">>> ")
 
         for packet_type in list(packets_expected.keys()):
-            self.tester.send_expect("p = %s" % packets_expected[packet_type], ">>>")
-            out = self.tester.send_command("p.show2()", timeout=1)
+            self.tg_node.send_expect("p = %s" % packets_expected[packet_type], ">>>")
+            out = self.tg_node.send_command("p.show2()", timeout=1)
             chksums = checksum_pattern.findall(out)
             chksum[packet_type] = chksums
 
-        self.tester.send_expect("exit()", "#")
+        self.tg_node.send_expect("exit()", "#")
 
         return chksum
 
@@ -135,14 +135,14 @@  class TestChecksumOffload(TestCase):
         """
         Sends packets and check the checksum valid-flags.
         """
-        self.dut.send_expect("start", "testpmd>")
-        tx_interface = self.tester.get_interface(
-            self.tester.get_local_port(self.dut_ports[0])
+        self.sut_node.send_expect("start", "testpmd>")
+        tx_interface = self.tg_node.get_interface(
+            self.tg_node.get_local_port(self.sut_ports[0])
         )
         for packet_type in list(packets_sent.keys()):
-            self.pkt = packet.Packet(pkt_str=packets_sent[packet_type])
-            self.pkt.send_pkt(self.tester, tx_interface, count=4)
-            out = self.dut.get_session_output(timeout=1)
+            self.scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder(pkt_str=packets_sent[packet_type])
+            self.scapy_pkt_builder.send_pkt(self.tg_node, tx_interface, count=4)
+            out = self.sut_node.get_session_output(timeout=1)
             lines = out.split("\r\n")
 
             # collect the checksum result
@@ -191,36 +191,36 @@  class TestChecksumOffload(TestCase):
                                     "Packet Rx IP checksum valid-flags error!",
                                 )
 
-        self.dut.send_expect("stop", "testpmd>")
+        self.sut_node.send_expect("stop", "testpmd>")
 
     def checksum_validate(self, packets_sent, packets_expected):
         """
         Validate the checksum.
         """
-        tx_interface = self.tester.get_interface(
-            self.tester.get_local_port(self.dut_ports[0])
+        tx_interface = self.tg_node.get_interface(
+            self.tg_node.get_local_port(self.sut_ports[0])
         )
-        rx_interface = self.tester.get_interface(
-            self.tester.get_local_port(self.dut_ports[0])
+        rx_interface = self.tg_node.get_interface(
+            self.tg_node.get_local_port(self.sut_ports[0])
         )
 
-        sniff_src = self.dut.get_mac_address(self.dut_ports[0])
+        sniff_src = self.sut_node.get_mac_address(self.sut_ports[0])
         result = dict()
 
         chksum = self.get_chksum_values(packets_expected)
 
-        inst = self.tester.tcpdump_sniff_packets(
+        inst = self.tg_node.tcpdump_sniff_packets(
             intf=rx_interface,
             count=len(packets_sent) * 4,
             filters=[{"layer": "ether", "config": {"src": sniff_src}}],
         )
 
-        self.pkt = packet.Packet()
+        self.scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder()
         for packet_type in list(packets_sent.keys()):
-            self.pkt.append_pkt(packets_sent[packet_type])
-        self.pkt.send_pkt(crb=self.tester, tx_port=tx_interface, count=4)
+            self.scapy_pkt_builder.append_pkt(packets_sent[packet_type])
+        self.scapy_pkt_builder.send_pkt(node=self.tg_node, tx_port=tx_interface, count=4)
 
-        p = self.tester.load_tcpdump_sniff_packets(inst)
+        p = self.tg_node.load_tcpdump_sniff_packets(inst)
         nr_packets = len(p)
         print(p)
         packets_received = [
@@ -264,11 +264,11 @@  class TestChecksumOffload(TestCase):
         return result
 
     def send_scapy_packet(self, packet: str):
-        itf = self.tester.get_interface(self.tester.get_local_port(self.dut_ports[0]))
+        itf = self.tg_node.get_interface(self.tg_node.get_local_port(self.sut_ports[0]))
 
-        self.tester.scapy_foreground()
-        self.tester.scapy_append(f'sendp({packet}, iface="{itf}")')
-        return self.tester.scapy_execute()
+        self.tg_node.scapy_foreground()
+        self.tg_node.scapy_append(f'sendp({packet}, iface="{itf}")')
+        return self.tg_node.scapy_execute()
 
     def get_pkt_rx_l4_cksum(self, testpmd_output: str) -> bool:
         return self.checksum_flags_are_good("RTE_MBUF_F_RX_L4_CKSUM_", testpmd_output)
@@ -366,10 +366,10 @@  class TestChecksumOffload(TestCase):
         return False
 
     def scapy_exec(self, cmd: str, timeout=1) -> str:
-        return self.tester.send_expect(cmd, ">>>", timeout=timeout)
+        return self.tg_node.send_expect(cmd, ">>>", timeout=timeout)
 
-    def get_packets(self, dut_mac, tester_mac):
-        eth = Ether(dst=dut_mac, src=tester_mac)
+    def get_packets(self, sut_mac, tg_mac):
+        eth = Ether(dst=sut_mac, src=tg_mac)
         packets = []
         checksum_options = (
             {},
@@ -420,36 +420,36 @@  class TestChecksumOffload(TestCase):
         return packets
 
     def send_tx_package(
-        self, packet_file_path, capture_file_path, packets, iface, dut_mac
+        self, packet_file_path, capture_file_path, packets, iface, sut_mac
     ):
         if os.path.isfile(capture_file_path):
             os.remove(capture_file_path)
-        self.tester.send_expect(
-            f"tcpdump -i '{iface}' ether src {dut_mac} -s 0 -w {capture_file_path} &",
+        self.tg_node.send_expect(
+            f"tcpdump -i '{iface}' ether src {sut_mac} -s 0 -w {capture_file_path} &",
             "# ",
         )
 
         if os.path.isfile(packet_file_path):
             os.remove(packet_file_path)
         wrpcap(packet_file_path, packets)
-        self.tester.session.copy_file_to(packet_file_path, packet_file_path)
+        self.tg_node.session.copy_file_to(packet_file_path, packet_file_path)
 
         # send packet
-        self.tester.send_expect("scapy", ">>>")
+        self.tg_node.send_expect("scapy", ">>>")
         self.scapy_exec(f"packets = rdpcap('{packet_file_path}')")
         for i in range(0, len(packets)):
             self.scapy_exec(f"packets[{i}].show")
             self.scapy_exec(f"sendp(packets[{i}], iface='{iface}')")
             self.pmdout.get_output(timeout=0.5)
-            self.dut.send_expect(
-                "show port stats {}".format(self.dut_ports[0]), "testpmd>"
+            self.sut_node.send_expect(
+                "show port stats {}".format(self.sut_ports[0]), "testpmd>"
             )
-        self.tester.send_expect("quit()", "# ")
+        self.tg_node.send_expect("quit()", "# ")
 
         time.sleep(1)
-        self.tester.send_expect("killall tcpdump", "#")
+        self.tg_node.send_expect("killall tcpdump", "#")
         time.sleep(1)
-        self.tester.send_expect('echo "Cleaning buffer"', "#")
+        self.tg_node.send_expect('echo "Cleaning buffer"', "#")
         time.sleep(1)
         return
 
@@ -502,7 +502,7 @@  class TestChecksumOffload(TestCase):
         Verify that the same number of packet are correctly received on the
         traffic generator side.
         """
-        mac = self.dut.get_mac_address(self.dut_ports[0])
+        mac = self.sut_node.get_mac_address(self.sut_ports[0])
 
         pktsChkErr = {
             "IP/UDP": 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/UDP(chksum=0xf)/("X"*46)'
@@ -534,10 +534,10 @@  class TestChecksumOffload(TestCase):
             del pktsChkErr["IP/SCTP"]
             del pkts["IP/SCTP"]
 
-        self.checksum_enablehw(self.dut_ports[0])
-        self.dut.send_expect("start", "testpmd>")
+        self.checksum_enablehw(self.sut_ports[0])
+        self.sut_node.send_expect("start", "testpmd>")
         result = self.checksum_validate(pktsChkErr, pkts)
-        self.dut.send_expect("stop", "testpmd>")
+        self.sut_node.send_expect("stop", "testpmd>")
         self.verify(len(result) == 0, ",".join(list(result.values())))
 
     def test_rx_checksum_valid_flags(self):
@@ -546,7 +546,7 @@  class TestChecksumOffload(TestCase):
         transmit packet.Enable Checksum offload.
         Verify the checksum valid-flags.
         """
-        mac = self.dut.get_mac_address(self.dut_ports[0])
+        mac = self.sut_node.get_mac_address(self.sut_ports[0])
 
         pkts_ref = {
             "IP/UDP": 'Ether(dst="%s", src="52:00:00:00:00:00")/IP()/UDP()/("X"*46)'
@@ -561,7 +561,7 @@  class TestChecksumOffload(TestCase):
             % mac,
         }
 
-        self.checksum_enablehw(self.dut_ports[0])
+        self.checksum_enablehw(self.sut_ports[0])
 
         # get the packet checksum value
         result = self.get_chksum_values(pkts_ref)
@@ -611,7 +611,7 @@  class TestChecksumOffload(TestCase):
         Verify that the same number of packet are correctly received on the
         traffic generator side.
         """
-        mac = self.dut.get_mac_address(self.dut_ports[0])
+        mac = self.sut_node.get_mac_address(self.sut_ports[0])
 
         pkts = {
             "IP/UDP": 'Ether(dst="%s", src="52:00:00:00:00:00")/IP(chksum=0x0)/UDP(chksum=0xf)/("X"*46)'
@@ -643,13 +643,13 @@  class TestChecksumOffload(TestCase):
             del pkts["IP/SCTP"]
             del pkts_ref["IP/SCTP"]
 
-        self.checksum_enablehw(self.dut_ports[0])
+        self.checksum_enablehw(self.sut_ports[0])
 
-        self.dut.send_expect("start", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
 
         result = self.checksum_validate(pkts, pkts_ref)
 
-        self.dut.send_expect("stop", "testpmd>")
+        self.sut_node.send_expect("stop", "testpmd>")
 
         self.verify(len(result) == 0, ",".join(list(result.values())))
 
@@ -660,7 +660,7 @@  class TestChecksumOffload(TestCase):
         Verify that the same number of packet are correctly received on
         the traffic generator side.
         """
-        mac = self.dut.get_mac_address(self.dut_ports[0])
+        mac = self.sut_node.get_mac_address(self.sut_ports[0])
         sndIP = "10.0.0.1"
         sndIPv6 = "::1"
         sndPkts = {
@@ -687,12 +687,12 @@  class TestChecksumOffload(TestCase):
             % (mac, expIPv6),
         }
 
-        self.dut.send_expect("start", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
         result = self.checksum_validate(sndPkts, expPkts)
 
         self.verify(len(result) == 0, ",".join(list(result.values())))
 
-        self.dut.send_expect("stop", "testpmd>")
+        self.sut_node.send_expect("stop", "testpmd>")
 
     def benchmark(self, lcore, ptype, mode, flow_format, size_list, nic):
         """
@@ -701,48 +701,48 @@  class TestChecksumOffload(TestCase):
         Bps = dict()
         Pps = dict()
         Pct = dict()
-        dmac = self.dut.get_mac_address(self.dut_ports[0])
-        dmac1 = self.dut.get_mac_address(self.dut_ports[1])
+        dmac = self.sut_node.get_mac_address(self.sut_ports[0])
+        dmac1 = self.sut_node.get_mac_address(self.sut_ports[1])
 
         result = [2, lcore, ptype, mode]
         for size in size_list:
             flow = flow_format % (dmac, size)
             pcap = os.sep.join([self.output_path, "test.pcap"])
-            self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
-            self.tester.scapy_execute()
+            self.tg_node.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
+            self.tg_node.scapy_execute()
             flow = flow_format % (dmac1, size)
             pcap = os.sep.join([self.output_path, "test1.pcap"])
-            self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
-            self.tester.scapy_execute()
+            self.tg_node.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
+            self.tg_node.scapy_execute()
 
             tgenInput = []
             pcap = os.sep.join([self.output_path, "test.pcap"])
             tgenInput.append(
                 (
-                    self.tester.get_local_port(self.dut_ports[0]),
-                    self.tester.get_local_port(self.dut_ports[1]),
+                    self.tg_node.get_local_port(self.sut_ports[0]),
+                    self.tg_node.get_local_port(self.sut_ports[1]),
                     pcap,
                 )
             )
             pcap = os.sep.join([self.output_path, "test1.pcap"])
             tgenInput.append(
                 (
-                    self.tester.get_local_port(self.dut_ports[1]),
-                    self.tester.get_local_port(self.dut_ports[0]),
+                    self.tg_node.get_local_port(self.sut_ports[1]),
+                    self.tg_node.get_local_port(self.sut_ports[0]),
                     pcap,
                 )
             )
 
             # clear streams before add new streams
-            self.tester.pktgen.clear_streams()
+            self.tg_node.perf_tg.clear_streams()
             # create an instance to set stream field setting
             # Moved here because it messes with the ability of the functional tests to use scapy.
-            self.pktgen_helper = PacketGeneratorHelper()
-            # run packet generator
+            self.pktgen_helper = TrafficGeneratorStream()
+            # run traffic generator
             streams = self.pktgen_helper.prepare_stream_from_tginput(
-                tgenInput, 100, None, self.tester.pktgen
+                tgenInput, 100, None, self.tg_node.perf_tg
             )
-            Bps[str(size)], Pps[str(size)] = self.tester.pktgen.measure_throughput(
+            Bps[str(size)], Pps[str(size)] = self.tg_node.perf_tg.measure_throughput(
                 stream_ids=streams
             )
             self.verify(Pps[str(size)] > 0, "No traffic detected")
@@ -759,8 +759,8 @@  class TestChecksumOffload(TestCase):
         Test checksum offload performance.
         """
         # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
-        self.dut.send_expect("quit", "#")
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports for testing")
+        self.sut_node.send_expect("quit", "#")
 
         # sizes = [64, 128, 256, 512, 1024]
         sizes = [64, 128]
@@ -776,7 +776,7 @@  class TestChecksumOffload(TestCase):
             del pkts["IP/SCTP"]
 
         lcore = "1S/2C/1T"
-        portMask = utils.create_mask([self.dut_ports[0], self.dut_ports[1]])
+        portMask = utils.create_mask([self.sut_ports[0], self.sut_ports[1]])
         for mode in ["sw", "hw"]:
             self.logger.info("%s performance" % mode)
             tblheader = ["Ports", "S/C/T", "Packet Type", "Mode"]
@@ -792,34 +792,34 @@  class TestChecksumOffload(TestCase):
                 socket=self.ports_socket,
             )
 
-            self.dut.send_expect("set fwd csum", "testpmd> ")
+            self.sut_node.send_expect("set fwd csum", "testpmd> ")
             if mode == "hw":
-                self.checksum_enablehw(self.dut_ports[0])
-                self.checksum_enablehw(self.dut_ports[1])
+                self.checksum_enablehw(self.sut_ports[0])
+                self.checksum_enablehw(self.sut_ports[1])
             else:
-                self.checksum_enablesw(self.dut_ports[0])
-                self.checksum_enablesw(self.dut_ports[1])
+                self.checksum_enablesw(self.sut_ports[0])
+                self.checksum_enablesw(self.sut_ports[1])
 
-            self.dut.send_expect("start", "testpmd> ", 3)
+            self.sut_node.send_expect("start", "testpmd> ", 3)
             for ptype in list(pkts.keys()):
                 self.benchmark(lcore, ptype, mode, pkts[ptype], sizes, self.nic)
 
-            self.dut.send_expect("stop", "testpmd> ")
-            self.dut.send_expect("quit", "#", 10)
+            self.sut_node.send_expect("stop", "testpmd> ")
+            self.sut_node.send_expect("quit", "#", 10)
             self.result_table_print()
 
     def test_hardware_checksum_check_ip_rx(self):
-        self.tester.send_expect("scapy", ">>>")
-        self.checksum_enablehw(self.dut_ports[0])
-        self.dut.send_expect("start", "testpmd>")
-        self.pmdout.wait_link_status_up(self.dut_ports[0])
+        self.tg_node.send_expect("scapy", ">>>")
+        self.checksum_enablehw(self.sut_ports[0])
+        self.sut_node.send_expect("start", "testpmd>")
+        self.pmdout.wait_link_status_up(self.sut_ports[0])
         verification_errors: List[VerifyFailure] = []
 
-        iface = self.tester.get_interface(self.tester.get_local_port(self.dut_ports[0]))
-        dut_mac = self.dut.get_mac_address(self.dut_ports[0])
-        tester_mac = self.tester.get_mac(self.tester.get_local_port(self.dut_ports[0]))
+        iface = self.tg_node.get_interface(self.tg_node.get_local_port(self.sut_ports[0]))
+        sut_mac = self.sut_node.get_mac_address(self.sut_ports[0])
+        tg_mac = self.tg_node.get_mac(self.tg_node.get_local_port(self.sut_ports[0]))
 
-        self.scapy_exec(f"eth = Ether(dst='{dut_mac}', src='{tester_mac}')")
+        self.scapy_exec(f"eth = Ether(dst='{sut_mac}', src='{tg_mac}')")
         self.scapy_exec(f"iface = '{iface}'")
 
         # Untunnelled
@@ -838,19 +838,19 @@  class TestChecksumOffload(TestCase):
             self.logger.error(str(err))
         self.verify(len(verification_errors) == 0, "See previous output")
 
-        self.tester.send_expect("quit()", "# ")
-        self.dut.send_expect("stop", "testpmd>")
+        self.tg_node.send_expect("quit()", "# ")
+        self.sut_node.send_expect("stop", "testpmd>")
 
     def test_hardware_checksum_check_ip_tx(self):
-        self.checksum_enablehw(self.dut_ports[0])
-        self.dut.send_expect("start", "testpmd>")
-        self.pmdout.wait_link_status_up(self.dut_ports[0])
+        self.checksum_enablehw(self.sut_ports[0])
+        self.sut_node.send_expect("start", "testpmd>")
+        self.pmdout.wait_link_status_up(self.sut_ports[0])
         verification_errors: List[VerifyFailure] = []
 
-        iface = self.tester.get_interface(self.tester.get_local_port(self.dut_ports[0]))
-        dut_mac = self.dut.get_mac_address(self.dut_ports[0])
-        tester_mac = self.tester.get_mac(self.tester.get_local_port(self.dut_ports[0]))
-        eth = Ether(dst=dut_mac, src=tester_mac)
+        iface = self.tg_node.get_interface(self.tg_node.get_local_port(self.sut_ports[0]))
+        sut_mac = self.sut_node.get_mac_address(self.sut_ports[0])
+        tg_mac = self.tg_node.get_mac(self.tg_node.get_local_port(self.sut_ports[0]))
+        eth = Ether(dst=sut_mac, src=tg_mac)
 
         checksum_options = (
             {},
@@ -865,13 +865,13 @@  class TestChecksumOffload(TestCase):
         capture_file_name = "test_hardware_checksum_check_l3_tx_capture.pcap"
 
         packet_file_path = "/tmp/test_hardware_checksum_check_l3_tx_packets.pcap"
-        capture_file_path = "/tmp/tester/" + capture_file_name
+        capture_file_path = "/tmp/tg/" + capture_file_name
 
         self.send_tx_package(
-            packet_file_path, capture_file_path, packets, iface, dut_mac
+            packet_file_path, capture_file_path, packets, iface, sut_mac
         )
 
-        self.tester.session.copy_file_from(
+        self.tg_node.session.copy_file_from(
             capture_file_path, "output/tmp/pcap/" + capture_file_name
         )
         captured_packets = rdpcap("output/tmp/pcap/" + capture_file_name)
@@ -890,24 +890,24 @@  class TestChecksumOffload(TestCase):
                     f" checksum when it should have had the opposite."
                 )
 
-        self.dut.send_expect("stop", "testpmd>")
+        self.sut_node.send_expect("stop", "testpmd>")
         if len(error_messages) != 0:
             for error_msg in error_messages:
                 self.logger.error(error_msg)
             self.verify(False, "See prior output")
 
     def test_hardware_checksum_check_l4_rx(self):
-        self.checksum_enablehw(self.dut_ports[0])
-        self.dut.send_expect("start", "testpmd>")
+        self.checksum_enablehw(self.sut_ports[0])
+        self.sut_node.send_expect("start", "testpmd>")
 
         verification_errors: List[VerifyFailure] = []
 
-        iface = self.tester.get_interface(self.tester.get_local_port(self.dut_ports[0]))
-        dut_mac = self.dut.get_mac_address(self.dut_ports[0])
-        tester_mac = self.tester.get_mac(self.tester.get_local_port(self.dut_ports[0]))
+        iface = self.tg_node.get_interface(self.tg_node.get_local_port(self.sut_ports[0]))
+        sut_mac = self.sut_node.get_mac_address(self.sut_ports[0])
+        tg_mac = self.tg_node.get_mac(self.tg_node.get_local_port(self.sut_ports[0]))
 
-        self.tester.send_expect("scapy", ">>> ")
-        self.scapy_exec(f"eth = Ether(dst='{dut_mac}', src='{tester_mac}')")
+        self.tg_node.send_expect("scapy", ">>> ")
+        self.scapy_exec(f"eth = Ether(dst='{sut_mac}', src='{tg_mac}')")
         self.scapy_exec(f"iface = '{iface}'")
         # Untunneled
         for l3 in l3_protos:
@@ -989,35 +989,35 @@  class TestChecksumOffload(TestCase):
         #                             if vf is not None:
         #                                 verification_errors.append(vf)
 
-        self.tester.send_expect("quit()", "#")
-        self.dut.send_expect("stop", "testpmd>")
+        self.tg_node.send_expect("quit()", "#")
+        self.sut_node.send_expect("stop", "testpmd>")
 
         for err in verification_errors:
             self.logger.error(str(err))
         self.verify(len(verification_errors) == 0, "See previous output")
 
     def test_hardware_checksum_check_l4_tx(self):
-        self.checksum_enablehw(self.dut_ports[0])
-        self.dut.send_expect("start", "testpmd>")
+        self.checksum_enablehw(self.sut_ports[0])
+        self.sut_node.send_expect("start", "testpmd>")
 
         verification_errors: List[VerifyFailure] = []
 
-        iface = self.tester.get_interface(self.tester.get_local_port(self.dut_ports[0]))
-        dut_mac = self.dut.get_mac_address(self.dut_ports[0])
-        tester_mac = self.tester.get_mac(self.tester.get_local_port(self.dut_ports[0]))
+        iface = self.tg_node.get_interface(self.tg_node.get_local_port(self.sut_ports[0]))
+        sut_mac = self.sut_node.get_mac_address(self.sut_ports[0])
+        tg_mac = self.tg_node.get_mac(self.tg_node.get_local_port(self.sut_ports[0]))
 
-        packets = self.get_packets(dut_mac, tester_mac)
+        packets = self.get_packets(sut_mac, tg_mac)
 
         capture_file_name = "test_hardware_checksum_check_l4_tx_capture.pcap"
 
         packet_file_path = "/tmp/test_hardware_checksum_check_l4_tx_packets.pcap"
-        capture_file_path = "/tmp/tester/" + capture_file_name
+        capture_file_path = "/tmp/tg/" + capture_file_name
 
         self.send_tx_package(
-            packet_file_path, capture_file_path, packets, iface, dut_mac
+            packet_file_path, capture_file_path, packets, iface, sut_mac
         )
 
-        self.tester.session.copy_file_from(
+        self.tg_node.session.copy_file_from(
             capture_file_path, "output/tmp/pcap/" + capture_file_name
         )
 
@@ -1027,7 +1027,7 @@  class TestChecksumOffload(TestCase):
             len(packets) == len(captured_packets), "Not all packets were received"
         )
 
-        self.dut.send_expect("stop", "testpmd>")
+        self.sut_node.send_expect("stop", "testpmd>")
 
         self.count = 0
         error_messages = self.validate_packet_list_checksums(captured_packets)
@@ -1041,7 +1041,7 @@  class TestChecksumOffload(TestCase):
         """
         Run after each test case.
         """
-        self.dut.send_expect("quit", "#")
+        self.sut_node.send_expect("quit", "#")
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_cloud_filter_with_l4_port.py b/tests/TestSuite_cloud_filter_with_l4_port.py
index 5f4ff0de..55ee6907 100644
--- a/tests/TestSuite_cloud_filter_with_l4_port.py
+++ b/tests/TestSuite_cloud_filter_with_l4_port.py
@@ -15,13 +15,13 @@  import time
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
-import framework.packet as packet
+import framework.scapy_packet_builder as scapy_pkt_builder
 import framework.utils as utils
-from framework.crb import Crb
-from framework.dut import Dut
 from framework.exception import VerifyFailure
+from framework.node import Node
 from framework.pmd_output import PmdOutput
 from framework.settings import DRIVERS
+from framework.sut_node import SutNode
 from framework.test_case import TestCase
 
 MAX_QUEUE = 16
@@ -34,19 +34,19 @@  class TestCloudFilterWithL4Port(TestCase):
         Generic filter Prerequistites
         """
         # Based on h/w type, choose how many ports to use
-        self.dut_ports = self.dut.get_ports(self.nic)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
         # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
         self.cores = "1S/8C/1T"
         self.pf_cores = "1S/8C/1T"
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
-        localPort = self.tester.get_local_port(self.dut_ports[0])
-        self.tester_itf = self.tester.get_interface(localPort)
-        self.pf_interface = self.dut.ports_info[self.dut_ports[0]]["intf"]
-        self.pf_mac = self.dut.get_mac_address(0)
-        self.pf_pci = self.dut.ports_info[self.dut_ports[0]]["pci"]
-        self.pkt_obj = packet.Packet()
+        localPort = self.tg_node.get_local_port(self.sut_ports[0])
+        self.tg_itf = self.tg_node.get_interface(localPort)
+        self.pf_interface = self.sut_node.ports_info[self.sut_ports[0]]["intf"]
+        self.pf_mac = self.sut_node.get_mac_address(0)
+        self.pf_pci = self.sut_node.ports_info[self.sut_ports[0]]["pci"]
+        self.scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder()
 
         self.verify(
             self.nic
@@ -66,24 +66,24 @@  class TestCloudFilterWithL4Port(TestCase):
         """
         Run before each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
         self.pmdout.start_testpmd(
             "%s" % self.cores,
             "--rxq=%d --txq=%d --disable-rss" % (MAX_QUEUE, MAX_QUEUE),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set promisc all off", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set promisc all off", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
     def destroy_env(self):
         """
         This is to stop testpmd.
         """
-        self.dut.send_expect("quit", "# ")
+        self.sut_node.send_expect("quit", "# ")
         time.sleep(2)
 
     def compare_memory_rules(self, expectedRules):
@@ -91,7 +91,7 @@  class TestCloudFilterWithL4Port(TestCase):
         dump all flow rules that have been created in memory and compare that total rules number with the given expected number
         to see if they are equal, as to get your conclusion after you have deleted any flow rule entry.
         """
-        outstring = self.dut.send_expect("flow list 0", "testpmd> ", 20)
+        outstring = self.sut_node.send_expect("flow list 0", "testpmd> ", 20)
         result_scanner = r"\d*.*?\d*.*?\d*.*?=>*"
         scanner = re.compile(result_scanner, re.DOTALL)
         m = scanner.findall(outstring)
@@ -108,10 +108,10 @@  class TestCloudFilterWithL4Port(TestCase):
         # check if there are expected flow rules have been created
         self.compare_memory_rules(rule_num)
         # check if one rule destroyed with success
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
         self.compare_memory_rules(rule_num - 1)
         # check if all flow rules have been removed with success
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
         self.compare_memory_rules(0)
 
     def sendpkt(self, pktstr, count=1):
@@ -119,11 +119,11 @@  class TestCloudFilterWithL4Port(TestCase):
 
         py_version = sys.version
         if py_version.startswith("3."):
-            self.pkt_obj.pktgen.pkts.clear()
+            self.scapy_pkt_builder.scapy_pkt_util.pkts.clear()
         else:
-            del self.pkt_obj.pktgen.pkts[:]
-        self.pkt_obj.append_pkt(pktstr)
-        self.pkt_obj.send_pkt(self.tester, tx_port=self.tester_itf, count=count)
+            del self.scapy_pkt_builder.scapy_pkt_util.pkts[:]
+        self.scapy_pkt_builder.append_pkt(pktstr)
+        self.scapy_pkt_builder.send_pkt(self.tg_node, tx_port=self.tg_itf, count=count)
 
     def sendpkt_check_result(self, src_port, dst_port, queue, match, pctype=""):
         match_info = "/queue %d: " % queue
@@ -160,7 +160,7 @@  class TestCloudFilterWithL4Port(TestCase):
                     pktstr="Ether()/IP()/UDP(sport=%s, dport=%s)" % (src_port, dst_port)
                 )
 
-        out_pf = self.dut.get_session_output(timeout=2)
+        out_pf = self.sut_node.get_session_output(timeout=2)
         print("out_pf is %s" % out_pf)
 
         if match == 1:
@@ -182,14 +182,14 @@  class TestCloudFilterWithL4Port(TestCase):
     ):
 
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth / %s / %s %s is %d / end actions pf / queue index %d / end"
             % (ip_type, l4_port_type, src_dst, port_value, queue_id),
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / %s / %s %s is %d / end actions pf / queue index %d / end"
             % (ip_type, l4_port_type, src_dst, port_value, queue_id),
             "created",
@@ -222,7 +222,7 @@  class TestCloudFilterWithL4Port(TestCase):
             )
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         if src_dst is "src":
             self.sendpkt_check_result(
@@ -376,27 +376,27 @@  class TestCloudFilterWithL4Port(TestCase):
         )
 
     def test_multi_rule(self):
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp src is 11 / end actions pf / queue index 1 / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / tcp src is 22 / end actions pf / queue index 2 / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / sctp src is 33 / end actions pf / queue index 3 / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp dst is 44 / end actions pf / queue index 4 / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / tcp dst is 55 / end actions pf / queue index 5 / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / sctp dst is 66 / end actions pf / queue index 6 / end",
             "created",
         )
@@ -409,14 +409,14 @@  class TestCloudFilterWithL4Port(TestCase):
         self.sendpkt_check_result("", "66", 6, 1, "ipv4-sctp")
 
         # destroy
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
 
         self.sendpkt_check_result("11", "", 1, 0, "ipv4-udp")
 
         self.compare_memory_rules(5)
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result("22", "", 2, 0, "ipv4-tcp")
 
@@ -424,22 +424,22 @@  class TestCloudFilterWithL4Port(TestCase):
 
     def test_negative(self):
         # unsupported rules
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp src is 156 dst is 156 / end actions pf / queue index 1 / end",
             "error",
         )
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp src is 156 / end actions pf / queue index 1 / end",
             "create",
         )
 
         # conflicted rules
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp src is 156 / end actions pf / queue index 2 / end",
             "error",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv6 / udp src is 156 / end actions pf / queue index 2 / end",
             "error",
         )
@@ -449,10 +449,10 @@  class TestCloudFilterWithL4Port(TestCase):
         Run after each test case.
         """
         self.destroy_env()
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
         Run after each test suite.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_cmdline.py b/tests/TestSuite_cmdline.py
index 54201910..9316d590 100644
--- a/tests/TestSuite_cmdline.py
+++ b/tests/TestSuite_cmdline.py
@@ -18,16 +18,16 @@  class TestCmdline(TestCase):
 
         Cmdline Prerequisites:
             cmdline build pass
-            At least one core in DUT
+            At least one core in SUT
         """
-        out = self.dut.build_dpdk_apps("examples/cmdline")
+        out = self.sut_node.build_dpdk_apps("examples/cmdline")
         self.verify("Error" not in out, "compilation error 1")
         self.verify("No such file" not in out, "compilation error 2")
 
         # Run cmdline app
-        self.app_cmdline_path = self.dut.apps_name["cmdline"]
-        self.eal_para = self.dut.create_eal_parameters(cores="1S/1C/1T")
-        self.dut.send_expect(
+        self.app_cmdline_path = self.sut_node.apps_name["cmdline"]
+        self.eal_para = self.sut_node.create_eal_parameters(cores="1S/1C/1T")
+        self.sut_node.send_expect(
             r"./%s %s" % (self.app_cmdline_path, self.eal_para), "> ", 10
         )
 
@@ -44,31 +44,31 @@  class TestCmdline(TestCase):
         """
 
         # add a test object with an IP address associated
-        out = self.dut.send_expect("add object 192.168.0.1", "example> ")
+        out = self.sut_node.send_expect("add object 192.168.0.1", "example> ")
         self.verify("Object object added, ip=192.168.0.1" in out, "add command error")
 
         # verify the object existence
-        out = self.dut.send_expect("add object 192.168.0.1", "example> ")
+        out = self.sut_node.send_expect("add object 192.168.0.1", "example> ")
         self.verify("Object object already exist" in out, "double add command error")
 
         # show the object result by 'show' command
-        out = self.dut.send_expect("show object", "example> ")
+        out = self.sut_node.send_expect("show object", "example> ")
         self.verify("Object object, ip=192.168.0.1" in out, "show command error")
 
         # delete the object in cmdline
-        out = self.dut.send_expect("del object", "example> ")
+        out = self.sut_node.send_expect("del object", "example> ")
         self.verify("Object object removed, ip=192.168.0.1" in out, "del command error")
 
         # double delete the object to verify the correctness
-        out = self.dut.send_expect("del object", "example> ", 1)
+        out = self.sut_node.send_expect("del object", "example> ", 1)
         self.verify("Bad arguments" in out, "double del command error")
 
         # verify no such object anymore
-        out = self.dut.send_expect("show object", "example> ", 1)
+        out = self.sut_node.send_expect("show object", "example> ", 1)
         self.verify("Bad arguments" in out, "final show command error")
 
         # verify the help command
-        out = self.dut.send_expect("help", "example> ", 1)
+        out = self.sut_node.send_expect("help", "example> ", 1)
 
         """
         Demo example of command line interface in RTE
@@ -87,7 +87,7 @@  class TestCmdline(TestCase):
         """
         self.verify(" " in out, "help command error")
 
-        out = self.dut.send_expect("?", "example> ", 1)
+        out = self.sut_node.send_expect("?", "example> ", 1)
         """
         show [Mul-choice STRING]: Show/del an object
         del [Mul-choice STRING]: Show/del an object
@@ -108,4 +108,4 @@  class TestCmdline(TestCase):
         Run after each test suite.
         Stop cmdline app.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_compressdev_isal_pmd.py b/tests/TestSuite_compressdev_isal_pmd.py
index 60432371..f8d8e1fb 100644
--- a/tests/TestSuite_compressdev_isal_pmd.py
+++ b/tests/TestSuite_compressdev_isal_pmd.py
@@ -59,7 +59,7 @@  class TestCompressdevIsalPmd(TestCase):
         pass
 
     def tear_down_all(self):
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         if self._perf_result:
             with open(self.logger.log_path + "/" + self.suite_name + ".json", "a") as f:
                 json.dump(self._perf_result, f, indent=4)
diff --git a/tests/TestSuite_compressdev_qat_pmd.py b/tests/TestSuite_compressdev_qat_pmd.py
index 9ff26c5f..6b4bcb1d 100644
--- a/tests/TestSuite_compressdev_qat_pmd.py
+++ b/tests/TestSuite_compressdev_qat_pmd.py
@@ -178,7 +178,7 @@  class TestCompressdevQatPmd(TestCase):
         pass
 
     def tear_down_all(self):
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         if self._perf_result:
             with open(
                 self.logger.log_path + "/" + self.suite_name + ".json", "a"
diff --git a/tests/TestSuite_compressdev_zlib_pmd.py b/tests/TestSuite_compressdev_zlib_pmd.py
index 1945af0a..93fb7356 100644
--- a/tests/TestSuite_compressdev_zlib_pmd.py
+++ b/tests/TestSuite_compressdev_zlib_pmd.py
@@ -60,7 +60,7 @@  class TestCompressdevZlibPmd(TestCase):
         pass
 
     def tear_down_all(self):
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         if self._perf_result:
             with open(
                 self.logger.log_path + "/" + self.suite_name + ".json", "a"
diff --git a/tests/TestSuite_coremask.py b/tests/TestSuite_coremask.py
index 54db5550..2d4516a9 100644
--- a/tests/TestSuite_coremask.py
+++ b/tests/TestSuite_coremask.py
@@ -36,10 +36,10 @@  class TestCoremask(TestCase):
         Coremask Prerequisites.
         """
 
-        self.port_mask = utils.create_mask(self.dut.get_ports(self.nic))
-        self.mem_channel = self.dut.get_memory_channels()
-        self.app_test_path = self.dut.apps_name["test"]
-        self.all_cores = self.dut.get_core_list("all")
+        self.port_mask = utils.create_mask(self.sut_node.get_ports(self.nic))
+        self.mem_channel = self.sut_node.get_memory_channels()
+        self.app_test_path = self.sut_node.apps_name["test"]
+        self.all_cores = self.sut_node.get_core_list("all")
 
     def set_up(self):
         """
@@ -58,7 +58,7 @@  class TestCoremask(TestCase):
 
             command = command_line % (self.app_test_path, core_mask, self.mem_channel)
 
-            out = self.dut.send_expect(command, "RTE>>", 10)
+            out = self.sut_node.send_expect(command, "RTE>>", 10)
             self.verify(
                 "EAL: Detected lcore %s as core" % core in out,
                 "Core %s not detected" % core,
@@ -68,7 +68,7 @@  class TestCoremask(TestCase):
                 "EAL: Main lcore %s is ready" % core in out, "Core %s not ready" % core
             )
 
-            self.dut.send_expect("quit", "# ", 10)
+            self.sut_node.send_expect("quit", "# ", 10)
 
     def test_all_cores_coremask(self):
         """
@@ -81,7 +81,7 @@  class TestCoremask(TestCase):
 
         command = command_line % (self.app_test_path, core_mask, self.mem_channel)
 
-        out = self.dut.send_expect(command, "RTE>>", 10)
+        out = self.sut_node.send_expect(command, "RTE>>", 10)
         self.verify(
             "EAL: Main lcore %s is ready" % first_core in out,
             "Core %s not ready" % first_core,
@@ -102,7 +102,7 @@  class TestCoremask(TestCase):
                 "Core %s not detected" % core,
             )
 
-        self.dut.send_expect("quit", "# ", 10)
+        self.sut_node.send_expect("quit", "# ", 10)
 
     def test_big_coremask(self):
         """
@@ -116,7 +116,7 @@  class TestCoremask(TestCase):
             big_coremask += "f"
         command = command_line % (self.app_test_path, big_coremask, self.mem_channel)
         try:
-            out = self.dut.send_expect(command, "RTE>>", 10)
+            out = self.sut_node.send_expect(command, "RTE>>", 10)
         except:
             self.verify("EAL: invalid coremask" in out, "Small core mask set")
 
@@ -129,7 +129,7 @@  class TestCoremask(TestCase):
                 "Core %s not detected" % core,
             )
 
-        self.dut.send_expect("quit", "# ", 10)
+        self.sut_node.send_expect("quit", "# ", 10)
 
     def test_wrong_coremask(self):
         """
@@ -164,20 +164,20 @@  class TestCoremask(TestCase):
 
             command = command_line % (self.app_test_path, coremask, self.mem_channel)
             try:
-                out = self.dut.send_expect(command, "# ", 5)
+                out = self.sut_node.send_expect(command, "# ", 5)
                 self.verify(
                     "EAL: invalid coremask" in out,
                     "Wrong core mask (%s) accepted" % coremask,
                 )
             except:
-                self.dut.send_expect("quit", "# ", 5)
+                self.sut_node.send_expect("quit", "# ", 5)
                 raise VerifyFailure("Wrong core mask (%s) accepted" % coremask)
 
     def tear_down(self):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_crypto_perf_cryptodev_perf.py b/tests/TestSuite_crypto_perf_cryptodev_perf.py
index 9270b52d..2ea6d4f8 100644
--- a/tests/TestSuite_crypto_perf_cryptodev_perf.py
+++ b/tests/TestSuite_crypto_perf_cryptodev_perf.py
@@ -42,18 +42,18 @@  class PerfTestsCryptodev(TestCase):
             "digest-sz": None,
             "csv-friendly": None,
         }
-        self._app_path = self.dut.apps_name["test-crypto-perf"]
-        page_size = self.dut.send_expect(
+        self._app_path = self.sut_node.apps_name["test-crypto-perf"]
+        page_size = self.sut_node.send_expect(
             "awk '/Hugepagesize/ {print $2}' /proc/meminfo", "# "
         )
         if int(page_size) == 1024 * 1024:
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "echo 0 > /sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages"
                 % (page_size),
                 "# ",
                 5,
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "echo 16 > /sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages"
                 % (page_size),
                 "# ",
@@ -62,9 +62,9 @@  class PerfTestsCryptodev(TestCase):
 
         cc.bind_qat_device(self, "vfio-pci")
         src_files = ["dep/test_aes_cbc.data", "dep/test_aes_gcm.data"]
-        self.dut_file_dir = "/tmp"
+        self.sut_file_dir = "/tmp"
         for file in src_files:
-            self.dut.session.copy_file_to(file, self.dut_file_dir)
+            self.sut_node.session.copy_file_to(file, self.sut_file_dir)
 
     def tear_down_all(self):
         if self._perf_result:
@@ -77,7 +77,7 @@  class PerfTestsCryptodev(TestCase):
         pass
 
     def tear_down(self):
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def test_verify_aesni_mb(self):
         self._run_crypto_func()
@@ -180,7 +180,7 @@  class PerfTestsCryptodev(TestCase):
         if cc.is_test_skip(self):
             return
 
-        cores = ",".join(self.dut.get_core_list("1S/2C/1T"))
+        cores = ",".join(self.sut_node.get_core_list("1S/2C/1T"))
         config = {"l": cores}
         devices = self._get_crypto_device(1)
         if not devices:
@@ -195,8 +195,8 @@  class PerfTestsCryptodev(TestCase):
             self._app_path, eal_opt_str, crypto_func_opt_str
         )
         try:
-            self.dut.send_expect(
-                cmd_str + ">%s/%s.txt" % (self.dut_file_dir, self.running_case),
+            self.sut_node.send_expect(
+                cmd_str + ">%s/%s.txt" % (self.sut_file_dir, self.running_case),
                 "#",
                 600,
             )
@@ -204,8 +204,8 @@  class PerfTestsCryptodev(TestCase):
             self.logger.error(ex)
             raise ex
 
-        out = self.dut.send_command(
-            "cat %s/%s.txt" % (self.dut_file_dir, self.running_case), 30
+        out = self.sut_node.send_command(
+            "cat %s/%s.txt" % (self.sut_file_dir, self.running_case), 30
         )
 
         self.verify("Error" not in out, "Test function failed")
@@ -228,7 +228,7 @@  class PerfTestsCryptodev(TestCase):
             self._app_path, eal_opt_str, crypto_perf_opt_str
         )
         try:
-            out = self.dut.send_expect(cmd_str, "#", 600)
+            out = self.sut_node.send_expect(cmd_str, "#", 600)
         except Exception as ex:
             self.logger.error(ex)
             raise ex
@@ -323,7 +323,7 @@  class PerfTestsCryptodev(TestCase):
 
     def _get_core_and_thread_num(self):
         cpu_info = {}
-        out = self.dut.send_expect("lscpu", "#")
+        out = self.sut_node.send_expect("lscpu", "#")
         for each_line in out.split("\n"):
             if each_line.find(":") == -1:
                 continue
@@ -395,19 +395,19 @@  class PerfTestsCryptodev(TestCase):
 
         framesizes = self.get_case_cfg()["buffer-sz"].split(",")
         running_case = self.running_case
-        dut = self.dut.crb["IP"]
-        dut_index = self._suite_result.internals.index(dut)
-        target_index = self._suite_result.internals[dut_index + 1].index(self.target)
-        suite_index = self._suite_result.internals[dut_index + 1][
+        sut = self.sut_node.node["IP"]
+        sut_index = self._suite_result.internals.index(sut)
+        target_index = self._suite_result.internals[sut_index + 1].index(self.target)
+        suite_index = self._suite_result.internals[sut_index + 1][
             target_index + 2
         ].index(self.suite_name)
-        case_index = self._suite_result.internals[dut_index + 1][target_index + 2][
+        case_index = self._suite_result.internals[sut_index + 1][target_index + 2][
             suite_index + 1
         ].index(running_case)
-        self._suite_result.internals[dut_index + 1][target_index + 2][
+        self._suite_result.internals[sut_index + 1][target_index + 2][
             suite_index + 1
         ].pop(case_index + 1)
-        self._suite_result.internals[dut_index + 1][target_index + 2][
+        self._suite_result.internals[sut_index + 1][target_index + 2][
             suite_index + 1
         ].pop(case_index)
 
diff --git a/tests/TestSuite_dcf_lifecycle.py b/tests/TestSuite_dcf_lifecycle.py
index 60f2ad60..381f378a 100644
--- a/tests/TestSuite_dcf_lifecycle.py
+++ b/tests/TestSuite_dcf_lifecycle.py
@@ -26,8 +26,8 @@  from pprint import pformat
 
 import framework.utils as utils
 from framework.exception import VerifyFailure
-from framework.packet import Packet
 from framework.pmd_output import PmdOutput
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.settings import HEADER_SIZE
 from framework.test_case import TestCase
 
@@ -36,22 +36,22 @@  class TestDcfLifeCycle(TestCase):
     @property
     def target_dir(self):
         target_dir = (
-            "/root" + self.dut.base_dir[1:]
-            if self.dut.base_dir.startswith("~")
-            else self.dut.base_dir
+            "/root" + self.sut_node.base_dir[1:]
+            if self.sut_node.base_dir.startswith("~")
+            else self.sut_node.base_dir
         )
         return target_dir
 
     def d_con(self, cmd):
         _cmd = [cmd, "# ", 15] if isinstance(cmd, str) else cmd
-        return self.dut.send_expect(*_cmd)
+        return self.sut_node.send_expect(*_cmd)
 
     def d_a_con(self, cmds):
         if isinstance(cmds, str):
             _cmd = [cmds, "# ", 15]
-            return self.dut.alt_session.send_expect(*_cmd)
+            return self.sut_node.alt_session.send_expect(*_cmd)
         else:
-            return [self.dut.alt_session.send_expect(_cmd, "# ", 10) for _cmd in cmds]
+            return [self.sut_node.alt_session.send_expect(_cmd, "# ", 10) for _cmd in cmds]
 
     def vf_pmd2_con(self, cmd):
         _cmd = [cmd, "# ", 15] if isinstance(cmd, str) else cmd
@@ -66,11 +66,11 @@  class TestDcfLifeCycle(TestCase):
         }
         return layer
 
-    def get_mac_layer(self, dut_port_id=0, vf_id=0):
+    def get_mac_layer(self, sut_port_id=0, vf_id=0):
         dmac = (
-            self.vf_ports_info[dut_port_id]["vfs_mac"][vf_id]
+            self.vf_ports_info[sut_port_id]["vfs_mac"][vf_id]
             if vf_id is not None
-            else self.dut.ports_info[dut_port_id]["mac"]
+            else self.sut_node.ports_info[sut_port_id]["mac"]
         )
         layer = {
             "ether": {
@@ -84,20 +84,20 @@  class TestDcfLifeCycle(TestCase):
         pktlen = 64 - headers_size
         return pktlen
 
-    def config_stream(self, dut_port_id=0, vf_id=None):
+    def config_stream(self, sut_port_id=0, vf_id=None):
         pkt_layers = {"raw": {"payload": ["58"] * self.get_pkt_len()}}
         pkt_layers.update(self.get_ip_layer())
-        pkt_layers.update(self.get_mac_layer(dut_port_id, vf_id))
-        pkt = Packet(pkt_type="IP_RAW")
+        pkt_layers.update(self.get_mac_layer(sut_port_id, vf_id))
+        scapy_pkt_builder = ScapyPacketBuilder(pkt_type="IP_RAW")
         for layer in list(pkt_layers.keys()):
-            pkt.config_layer(layer, pkt_layers[layer])
-        self.logger.info(pkt.pktgen.pkt.command())
-        return pkt
+            scapy_pkt_builder.config_layer(layer, pkt_layers[layer])
+        self.logger.info(scapy_pkt_builder.scapy_pkt_util.pkt.command())
+        return scapy_pkt_builder
 
-    def send_packet_by_scapy(self, pkt, dut_port_id=0, count=1):
-        tester_port_id = self.tester.get_local_port(dut_port_id)
-        tx_iface = self.tester.get_interface(tester_port_id)
-        pkt.send_pkt(crb=self.tester, tx_port=tx_iface, count=count)
+    def send_packet_by_scapy(self, scapy_pkt_builder, sut_port_id=0, count=1):
+        tg_port_id = self.tg_node.get_local_port(sut_port_id)
+        tx_iface = self.tg_node.get_interface(tg_port_id)
+        scapy_pkt_builder.send_pkt(node=self.tg_node, tx_port=tx_iface, count=count)
 
     def init_adq(self):
         cmds = [
@@ -107,13 +107,13 @@  class TestDcfLifeCycle(TestCase):
         ]
         self.d_a_con(cmds)
 
-    def set_adq_on_pf(self, dut_port_id=0):
+    def set_adq_on_pf(self, sut_port_id=0):
         """
         Set ADQ on PF
         """
         msg = "Set ADQ on PF"
         self.logger.info(msg)
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmds = [
             f"ethtool -K {intf} hw-tc-offload on",
             f"tc qdisc add dev {intf} ingress",
@@ -126,7 +126,7 @@  class TestDcfLifeCycle(TestCase):
         self.is_adq_set = True
         return output
 
-    def remove_adq_on_pf(self, dut_port_id=0):
+    def remove_adq_on_pf(self, sut_port_id=0):
         """
         Remove ADQ on PF
         """
@@ -134,7 +134,7 @@  class TestDcfLifeCycle(TestCase):
             return
         msg = "Remove ADQ on PF"
         self.logger.info(msg)
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmds = [
             f"tc filter del dev {intf} parent ffff: pref 1 protocol ip",
             f"tc filter show dev {intf} parent ffff:",
@@ -146,13 +146,13 @@  class TestDcfLifeCycle(TestCase):
         self.d_a_con(cmds)
         self.is_adq_set = False
 
-    def set_adq_mac_vlan(self, dut_port_id=0):
+    def set_adq_mac_vlan(self, sut_port_id=0):
         """
         change the ADQ commands to MAC-VLAN
         """
         msg = "change the ADQ commands to MAC-VLAN"
         self.logger.info(msg)
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmds = [
             f"ethtool -K {intf} l2-fwd-offload on",
             f"ip link add link macvlan0 link {intf} type macvlan",
@@ -163,7 +163,7 @@  class TestDcfLifeCycle(TestCase):
         self.is_adq_set = True
         return output
 
-    def remove_adq_mac_vlan(self, dut_port_id=0):
+    def remove_adq_mac_vlan(self, sut_port_id=0):
         """
         Remove MAC-VLAN commands
         """
@@ -171,7 +171,7 @@  class TestDcfLifeCycle(TestCase):
             return
         msg = "Remove MAC-VLAN commands"
         self.logger.info(msg)
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmds = [
             "ip link del macvlan0",
             f"ethtool -K {intf} l2-fwd-offload off",
@@ -189,18 +189,18 @@  class TestDcfLifeCycle(TestCase):
 
     def vf_init(self):
         self.vf_ports_info = {}
-        self.dut.setup_modules(self.target, "vfio-pci", "")
+        self.sut_node.setup_modules(self.target, "vfio-pci", "")
 
     def vf_create(self):
         max_vfs = 4
-        for index, port_id in enumerate(self.dut_ports):
-            port_obj = self.dut.ports_info[port_id]["port"]
+        for index, port_id in enumerate(self.sut_ports):
+            port_obj = self.sut_node.ports_info[port_id]["port"]
             pf_driver = port_obj.default_driver
-            self.dut.generate_sriov_vfs_by_port(port_id, max_vfs, driver=pf_driver)
+            self.sut_node.generate_sriov_vfs_by_port(port_id, max_vfs, driver=pf_driver)
             pf_pci = port_obj.pci
-            sriov_vfs_port = self.dut.ports_info[port_id].get("vfs_port")
+            sriov_vfs_port = self.sut_node.ports_info[port_id].get("vfs_port")
             if not sriov_vfs_port:
-                msg = f"failed to create vf on dut port {pf_pci}"
+                msg = f"failed to create vf on SUT port {pf_pci}"
                 self.logger.error(msg)
                 continue
             for port in sriov_vfs_port:
@@ -223,8 +223,8 @@  class TestDcfLifeCycle(TestCase):
         if not self.vf_ports_info:
             return
         for port_id, _ in self.vf_ports_info.items():
-            self.dut.destroy_sriov_vfs_by_port(port_id)
-            port_obj = self.dut.ports_info[port_id]["port"]
+            self.sut_node.destroy_sriov_vfs_by_port(port_id)
+            port_obj = self.sut_node.ports_info[port_id]["port"]
             port_obj.bind_driver(self.drivername)
         self.vf_ports_info = None
 
@@ -249,17 +249,17 @@  class TestDcfLifeCycle(TestCase):
         }
         return allowlist
 
-    def vf_set_mac_addr(self, dut_port_id=0, vf_id=1):
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+    def vf_set_mac_addr(self, sut_port_id=0, vf_id=1):
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmd = f"ip link set {intf} vf 1 mac 00:01:02:03:04:05"
         self.d_a_con(cmd)
         self.vf_testpmd2_reset_port()
 
-    def vf_set_trust(self, dut_port_id=0, vf_id=0, flag="on"):
+    def vf_set_trust(self, sut_port_id=0, vf_id=0, flag="on"):
         """
         Set a VF as trust
         """
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmd = f"ip link set {intf} vf {vf_id} trust {flag}"
         self.d_a_con(cmd)
 
@@ -269,7 +269,7 @@  class TestDcfLifeCycle(TestCase):
         """
         self.vf_set_trust(flag="off")
 
-    def testpmd_set_flow_rule(self, dut_port_id=0, con_name="vf_dcf"):
+    def testpmd_set_flow_rule(self, sut_port_id=0, con_name="vf_dcf"):
         """
         Set switch rule to VF from DCF
         """
@@ -281,7 +281,7 @@  class TestDcfLifeCycle(TestCase):
             "actions vf id {vf_id} / end"
         ).format(
             **{
-                "port": dut_port_id,
+                "port": sut_port_id,
                 "vf_id": 1,
                 "ip_src": self.get_ip_layer()["ipv4"]["src"],
                 "ip_dst": self.get_ip_layer()["ipv4"]["dst"],
@@ -293,7 +293,7 @@  class TestDcfLifeCycle(TestCase):
         return output
 
     def init_vf_dcf_testpmd(self):
-        self.vf_dcf_testpmd = self.dut.apps_name["test-pmd"]
+        self.vf_dcf_testpmd = self.sut_node.apps_name["test-pmd"]
 
     def start_vf_dcf_testpmd(self, pmd_opiton):
         allowlist_name, prefix = pmd_opiton
@@ -311,7 +311,7 @@  class TestDcfLifeCycle(TestCase):
             **{
                 "bin": "".join(["./", self.vf_dcf_testpmd]),
                 "core_mask": core_mask,
-                "mem_channel": self.dut.get_memory_channels(),
+                "mem_channel": self.sut_node.get_memory_channels(),
                 "allowlist": allowlist,
                 "prefix": prefix,
             }
@@ -346,8 +346,8 @@  class TestDcfLifeCycle(TestCase):
         cmd = "ps aux | grep testpmd"
         self.d_a_con(cmd)
 
-    def vf_dcf_testpmd_set_flow_rule(self, dut_port_id=0):
-        return self.testpmd_set_flow_rule(dut_port_id)
+    def vf_dcf_testpmd_set_flow_rule(self, sut_port_id=0):
+        return self.testpmd_set_flow_rule(sut_port_id)
 
     def get_vf_dcf_testpmd_start_output(self):
         output = self.vf_dcf_pmd_start_output
@@ -356,9 +356,9 @@  class TestDcfLifeCycle(TestCase):
         return output
 
     def init_vf_testpmd2(self):
-        self.vf_testpmd2 = self.dut.apps_name["test-pmd"]
+        self.vf_testpmd2 = self.sut_node.apps_name["test-pmd"]
         self.vf_pmd2_session_name = "vf_testpmd2"
-        self.vf_pmd2_session = self.dut.new_session(self.vf_pmd2_session_name)
+        self.vf_pmd2_session = self.sut_node.new_session(self.vf_pmd2_session_name)
 
     def start_vf_testpmd2(self, pmd_opiton):
         allowlist_name, prefix = pmd_opiton
@@ -376,7 +376,7 @@  class TestDcfLifeCycle(TestCase):
             **{
                 "bin": "".join(["./", self.vf_testpmd2]),
                 "core_mask": core_mask,
-                "mem_channel": self.dut.get_memory_channels(),
+                "mem_channel": self.sut_node.get_memory_channels(),
                 "allowlist": allowlist,
                 "prefix": prefix,
             }
@@ -410,8 +410,8 @@  class TestDcfLifeCycle(TestCase):
         ]
         [self.vf_pmd2_con([cmd, "testpmd> ", 15]) for cmd in cmds]
 
-    def vf_testpmd2_set_flow_rule(self, dut_port_id=0):
-        self.testpmd_set_flow_rule(dut_port_id, con_name="vf2")
+    def vf_testpmd2_set_flow_rule(self, sut_port_id=0):
+        self.testpmd_set_flow_rule(sut_port_id, con_name="vf2")
 
     def vf_pmd2_clear_port_stats(self):
         cmd = "clear port stats all"
@@ -428,7 +428,7 @@  class TestDcfLifeCycle(TestCase):
     def check_vf_pmd2_stats(
         self, traffic, verbose_parser, portid=0, is_traffic_valid=True
     ):
-        pmd = PmdOutput(self.dut, session=self.vf_pmd2_session)
+        pmd = PmdOutput(self.sut_node, session=self.vf_pmd2_session)
         info = pmd.get_pmd_stats(portid) or {}
         ori_pkt = info.get("RX-packets") or 0
         traffic()
@@ -455,10 +455,10 @@  class TestDcfLifeCycle(TestCase):
         return output
 
     def check_vf_pmd2_traffic(self, func_name, topo=None, flag=False, **kwargs):
-        dut_port_id, vf_id = topo if topo else [0, 1]
-        pkt = self.config_stream(dut_port_id, vf_id)
-        traffic = partial(self.send_packet_by_scapy, pkt, dut_port_id, vf_id)
-        verbose_parser = partial(self.parse_pmd2_verbose_pkt_count, dut_port_id, vf_id)
+        sut_port_id, vf_id = topo if topo else [0, 1]
+        scapy_pkt_builder = self.config_stream(sut_port_id, vf_id)
+        traffic = partial(self.send_packet_by_scapy, scapy_pkt_builder, sut_port_id, vf_id)
+        verbose_parser = partial(self.parse_pmd2_verbose_pkt_count, sut_port_id, vf_id)
         self.vf_pmd2_clear_port_stats()
         self.check_vf_pmd2_stats(traffic, verbose_parser)
         status_change_func = getattr(self, func_name)
@@ -466,10 +466,10 @@  class TestDcfLifeCycle(TestCase):
         self.check_vf_pmd2_stats(traffic, verbose_parser, is_traffic_valid=flag)
 
     def check_vf_traffic(self, func_name, topo=None, flag=False, **kwargs):
-        dut_port_id, vf_id = topo if topo else [0, 1]
-        pkt = self.config_stream(dut_port_id, vf_id)
-        traffic = partial(self.send_packet_by_scapy, pkt, dut_port_id, vf_id)
-        verbose_parser = partial(self.parse_pmd2_verbose_pkt_count, dut_port_id, vf_id)
+        sut_port_id, vf_id = topo if topo else [0, 1]
+        scapy_pkt_builder = self.config_stream(sut_port_id, vf_id)
+        traffic = partial(self.send_packet_by_scapy, scapy_pkt_builder, sut_port_id, vf_id)
+        verbose_parser = partial(self.parse_pmd2_verbose_pkt_count, sut_port_id, vf_id)
         self.vf_pmd2_clear_port_stats()
         self.check_vf_pmd2_stats(traffic, verbose_parser)
         status_change_func = getattr(self, func_name)
@@ -482,13 +482,13 @@  class TestDcfLifeCycle(TestCase):
         status_change_func(**kwargs)
 
     def send_pkt_to_vf1(self):
-        tester_port_id = self.tester.get_local_port(0)
-        tester_itf = self.tester.get_interface(tester_port_id)
-        p = Packet()
-        p.append_pkt(
+        tg_port_id = self.tg_node.get_local_port(0)
+        tg_itf = self.tg_node.get_interface(tg_port_id)
+        scapy_pkt_builder = ScapyPacketBuilder()
+        scapy_pkt_builder.append_pkt(
             'Ether(src="00:11:22:33:44:55", dst="C6:44:32:0A:EC:E1")/IP(src="192.168.0.2", dst="192.168.0.3")/("X"*64)'
         )
-        p.send_pkt(self.tester, tx_port=tester_itf)
+        scapy_pkt_builder.send_pkt(self.tg_node, tx_port=tg_itf)
         time.sleep(1)
 
     def run_test_pre(self, pmd_opitons):
@@ -563,7 +563,7 @@  class TestDcfLifeCycle(TestCase):
         except_content = None
         try:
             self.vf_set_trust()
-            self.vf_set_trust(dut_port_id=1)
+            self.vf_set_trust(sut_port_id=1)
             pmd_opts = [["pf1_vf0_dcf", "dcf1"], ["pf2_vf0_dcf", "dcf2"]]
             self.run_test_pre(pmd_opts)
             self.check_support_dcf_mode_02_result()
@@ -969,7 +969,7 @@  class TestDcfLifeCycle(TestCase):
             self.run_test_post()
             self.check_dcf_with_l2fwd_adp_failed_result(output)
             # Exit DCF mode, PF can set L2 forwarding.
-            self.dut.destroy_sriov_vfs_by_port(0)
+            self.sut_node.destroy_sriov_vfs_by_port(0)
             time.sleep(1)
             output = self.set_adq_mac_vlan()
             self.check_dcf_with_l2fwd_adp_result(output)
@@ -994,7 +994,7 @@  class TestDcfLifeCycle(TestCase):
             pmd_opts = [["pf1_vf0_dcf", "dcf"]]
             self.run_test_pre(pmd_opts)
             # run PF1 DCF mode, PF2 can set L2 forwarding.
-            self.dut.destroy_sriov_vfs_by_port(1)
+            self.sut_node.destroy_sriov_vfs_by_port(1)
             time.sleep(1)
             output = self.set_adq_mac_vlan(1)
             self.remove_adq_mac_vlan(1)
@@ -1017,8 +1017,8 @@  class TestDcfLifeCycle(TestCase):
         supported_drivers = ["ice"]
         result = all(
             [
-                self.dut.ports_info[index]["port"].default_driver in supported_drivers
-                for index in self.dut_ports
+                self.sut_node.ports_info[index]["port"].default_driver in supported_drivers
+                for index in self.sut_ports
             ]
         )
         msg = "current nic <{0}> is not supported".format(self.nic)
@@ -1026,10 +1026,10 @@  class TestDcfLifeCycle(TestCase):
 
     def preset_pmd_res(self):
         self.dcf_dev_id = "8086:1889"
-        self.socket = self.dut.get_numa_id(self.dut_ports[0])
-        self.dut.init_reserved_core()
-        self.core_pf = self.dut.get_reserved_core("2C", 0)
-        self.core_vf = self.dut.get_reserved_core("2C", 0)
+        self.socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        self.sut_node.init_reserved_core()
+        self.core_pf = self.sut_node.get_reserved_core("2C", 0)
+        self.core_vf = self.sut_node.get_reserved_core("2C", 0)
 
     def clear_flags(self):
         self.is_vf_dcf_pmd_on = self.is_vf_pmd2_on = False
@@ -1061,7 +1061,7 @@  class TestDcfLifeCycle(TestCase):
             msg = "close vf devices"
             self.logger.info(msg)
         if self.vf_pmd2_session:
-            self.dut.close_session(self.vf_pmd2_session)
+            self.sut_node.close_session(self.vf_pmd2_session)
             self.vf_pmd2_session = None
 
     #
@@ -1073,8 +1073,8 @@  class TestDcfLifeCycle(TestCase):
         Run at the start of each test suite.
         """
         self.init_suite()
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Not enough ports")
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Not enough ports")
         self.verify_supported_nic()
         # prepare testing environment
         self.preset_test_environment()
@@ -1102,7 +1102,7 @@  class TestDcfLifeCycle(TestCase):
             self.destroy_resource()
             self.init_suite()
             self.preset_test_environment()
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         self.clear_flags()
 
     def test_support_dcf_mode_01(self):
@@ -1117,7 +1117,7 @@  class TestDcfLifeCycle(TestCase):
         """
         DCF on 2 PFs, 1 trust VF on each PF
         """
-        self.verify(len(self.dut_ports) >= 2, "2 ports at least")
+        self.verify(len(self.sut_ports) >= 2, "2 ports at least")
         msg = "begin : DCF on 2 PFs, 1 trust VF on each PF"
         self.logger.info(msg)
         self.verify_support_dcf_mode_02()
@@ -1198,7 +1198,7 @@  class TestDcfLifeCycle(TestCase):
         """
         DCF and ADQ can be enabled on different PF
         """
-        self.verify(len(self.dut_ports) >= 2, "2 ports at least")
+        self.verify(len(self.sut_ports) >= 2, "2 ports at least")
         msg = "begin : DCF and ADQ can be enabled on different PF"
         self.logger.info(msg)
         self.verify_dcf_with_adq_03()
@@ -1223,7 +1223,7 @@  class TestDcfLifeCycle(TestCase):
         """
         DCF and L2 forwarding can be enabled on different PF
         """
-        self.verify(len(self.dut_ports) >= 2, "2 ports at least")
+        self.verify(len(self.sut_ports) >= 2, "2 ports at least")
         msg = "begin : DCF and L2 forwarding can be enabled on different PF"
         self.logger.info(msg)
         self.verify_dcf_with_l2fwd_03()
@@ -1260,14 +1260,14 @@  class TestDcfLifeCycle(TestCase):
             self.verify(matched, "flow rule on port 0 is not existed")
 
     def send_pkt_to_vf1_first(self, dmac):
-        tester_port_id = self.tester.get_local_port(0)
-        tester_itf = self.tester.get_interface(tester_port_id)
-        p = Packet()
-        p.append_pkt(
+        tg_port_id = self.tg_node.get_local_port(0)
+        tg_itf = self.tg_node.get_interface(tg_port_id)
+        scapy_pkt_builder = ScapyPacketBuilder()
+        scapy_pkt_builder.append_pkt(
             'Ether(src="00:11:22:33:44:55", dst="%s")/IP()/TCP(sport=8012)/Raw(load="X"*30)'
             % dmac
         )
-        p.send_pkt(self.tester, tx_port=tester_itf)
+        scapy_pkt_builder.send_pkt(self.tg_node, tx_port=tg_itf)
         time.sleep(1)
 
     def pretest_handle_acl_filter(self):
@@ -1304,7 +1304,7 @@  class TestDcfLifeCycle(TestCase):
 
     def create_acl_rule_by_kernel_cmd(self, port_id=0, stats=True):
         # create an ACL rule on PF0 by kernel command
-        intf = self.dut.ports_info[port_id]["port"].intf_name
+        intf = self.sut_node.ports_info[port_id]["port"].intf_name
         rule = (
             "ethtool -N %s flow-type tcp4 src-ip 192.168.10.0 m 0.255.255.255 dst-port 8000 m 0x00ff action -1"
             % intf
@@ -1336,7 +1336,7 @@  class TestDcfLifeCycle(TestCase):
             **{
                 "bin": "".join(["./", self.vf_dcf_testpmd]),
                 "core_mask": core_mask,
-                "mem_channel": self.dut.get_memory_channels(),
+                "mem_channel": self.sut_node.get_memory_channels(),
                 "allowlist": allowlist,
             }
         )
@@ -1349,7 +1349,7 @@  class TestDcfLifeCycle(TestCase):
 
     def delete_acl_rule_by_kernel_cmd(self, port_id=0):
         # delete the kernel ACL rule
-        intf = self.dut.ports_info[port_id]["port"].intf_name
+        intf = self.sut_node.ports_info[port_id]["port"].intf_name
         self.d_a_con("ethtool -N %s delete %s" % (intf, self.rule_id))
 
     def test_handle_acl_filter_01(self):
@@ -1424,7 +1424,7 @@  class TestDcfLifeCycle(TestCase):
             **{
                 "bin": "".join(["./", self.vf_dcf_testpmd]),
                 "core_mask": core_mask,
-                "mem_channel": self.dut.get_memory_channels(),
+                "mem_channel": self.sut_node.get_memory_channels(),
                 "allowlist": allowlist,
                 "prefix": "vf0",
             }
@@ -1478,7 +1478,7 @@  class TestDcfLifeCycle(TestCase):
         )
 
         # Reset VF1 by setting mac addr
-        intf = self.dut.ports_info[0]["port"].intf_name
+        intf = self.sut_node.ports_info[0]["port"].intf_name
         self.d_a_con("ip link set %s vf 1 mac 00:01:02:03:04:05" % intf)
         [self.vf_pmd2_con([cmd, "testpmd> ", 15]) for cmd in cmds]
         self.clear_vf_pmd2_port0_stats()
@@ -1625,14 +1625,14 @@  class TestDcfLifeCycle(TestCase):
         ]
         [self.d_con([cmd, "testpmd> ", 15]) for cmd in cmds]
 
-    def vf_dcf_reset_mtu(self, dut_port_id=0, vf_id=0):
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+    def vf_dcf_reset_mtu(self, sut_port_id=0, vf_id=0):
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmd = f"ifconfig {intf} mtu 3000"
         self.d_a_con(cmd)
         self.vf_dcf_testpmd_reset_port()
 
-    def vf_dcf_set_mac_addr(self, dut_port_id=0, vf_id=0):
-        intf = self.dut.ports_info[dut_port_id]["port"].intf_name
+    def vf_dcf_set_mac_addr(self, sut_port_id=0, vf_id=0):
+        intf = self.sut_node.ports_info[sut_port_id]["port"].intf_name
         cmd = f"ip link set {intf} vf 0 mac 00:01:02:03:04:05"
         self.d_a_con(cmd)
         self.vf_dcf_testpmd_reset_port()
diff --git a/tests/TestSuite_ddp_gtp.py b/tests/TestSuite_ddp_gtp.py
index d0c3b560..d030f012 100644
--- a/tests/TestSuite_ddp_gtp.py
+++ b/tests/TestSuite_ddp_gtp.py
@@ -24,13 +24,13 @@  class TestDdpGtp(TestCase):
         self.verify(
             self.is_eth_series_nic(700), "ddp gtp can not support %s nic" % self.nic
         )
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
         self.vm0 = None
         self.env_done = False
         profile_file = "dep/gtp.pkgo"
         profile_dst = "/tmp/"
-        self.dut.session.copy_file_to(profile_file, profile_dst)
+        self.sut_node.session.copy_file_to(profile_file, profile_dst)
         self.PF_Q_strip = "RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF"
         # commit ee653bd8, queue number of per vf default value is defined
         # in drivers/net/i40e/i40e_ethdev.c, named as RTE_LIBRTE_I40E_QUEUE_NUM_PER_VF
@@ -46,32 +46,32 @@  class TestDdpGtp(TestCase):
             self.vf_assign_method = "pci-assign"
         else:
             self.vf_assign_method = "vfio-pci"
-            self.dut.send_expect("modprobe vfio-pci", "#")
+            self.sut_node.send_expect("modprobe vfio-pci", "#")
 
     def insmod_modprobe(self, modename=""):
         """
         Insmod modProbe before run test case
         """
         if modename == "igb_uio":
-            self.dut.send_expect("modprobe uio", "#", 10)
-            out = self.dut.send_expect("lsmod | grep igb_uio", "#")
+            self.sut_node.send_expect("modprobe uio", "#", 10)
+            out = self.sut_node.send_expect("lsmod | grep igb_uio", "#")
             if "igb_uio" in out:
-                self.dut.send_expect("rmmod -f igb_uio", "#", 10)
-            self.dut.send_expect(
+                self.sut_node.send_expect("rmmod -f igb_uio", "#", 10)
+            self.sut_node.send_expect(
                 "insmod ./" + self.target + "/kmod/igb_uio.ko", "#", 10
             )
 
-            out = self.dut.send_expect("lsmod | grep igb_uio", "#")
+            out = self.sut_node.send_expect("lsmod | grep igb_uio", "#")
             assert "igb_uio" in out, "Failed to insmod igb_uio"
 
     def set_up(self):
-        self.dut_testpmd = PmdOutput(self.dut)
-        self.used_dut_port = self.dut_ports[0]
-        tester_port = self.tester.get_local_port(self.used_dut_port)
-        self.tester_intf = self.tester.get_interface(tester_port)
+        self.sut_testpmd = PmdOutput(self.sut_node)
+        self.used_sut_port = self.sut_ports[0]
+        tg_port = self.tg_node.get_local_port(self.used_sut_port)
+        self.tg_intf = self.tg_node.get_interface(tg_port)
         if "vf" in self._suite_result.test_case:
             self.insmod_modprobe("igb_uio")
-            self.bind_nic_driver(self.dut_ports, "igb_uio")
+            self.bind_nic_driver(self.sut_ports, "igb_uio")
             self.setup_vm_env()
             self.load_profile()
             self.vm0_testpmd.start_testpmd(
@@ -90,10 +90,10 @@  class TestDdpGtp(TestCase):
         Search max queue number from configuration.
         """
         if Q_strip is self.PF_Q_strip:
-            out = self.dut.send_expect("cat config/rte_config.h", "]# ", 10)
+            out = self.sut_node.send_expect("cat config/rte_config.h", "]# ", 10)
             pattern = "define (%s) (\d*)" % Q_strip
         else:
-            out = self.dut.send_expect("cat drivers/net/i40e/i40e_ethdev.c", "]# ", 10)
+            out = self.sut_node.send_expect("cat drivers/net/i40e/i40e_ethdev.c", "]# ", 10)
             pattern = "#define %s\s*(\d*)" % Q_strip
         s = re.compile(pattern)
         res = s.search(out)
@@ -112,40 +112,40 @@  class TestDdpGtp(TestCase):
         Create testing environment with VF generated from 1PF
         """
         if self.env_done is False:
-            self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 1, driver=driver)
-            self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port]["vfs_port"]
+            self.sut_node.generate_sriov_vfs_by_port(self.used_sut_port, 1, driver=driver)
+            self.sriov_vfs_port = self.sut_node.ports_info[self.used_sut_port]["vfs_port"]
             for port in self.sriov_vfs_port:
                 port.bind_driver(self.vf_driver)
             time.sleep(1)
             vf0_prop = {"opt_host": self.sriov_vfs_port[0].pci}
             # set up VM0 ENV
-            self.vm0 = QEMUKvm(self.dut, "vm0", "ddp_gtp")
+            self.vm0 = QEMUKvm(self.sut_node, "vm0", "ddp_gtp")
             self.vm0.set_vm_device(driver=self.vf_assign_method, **vf0_prop)
             try:
-                self.vm0_dut = self.vm0.start()
-                if self.vm0_dut is None:
+                self.vm0_sut = self.vm0.start()
+                if self.vm0_sut is None:
                     raise Exception("Set up VM0 ENV failed!")
             except Exception as e:
                 self.destroy_vm_env()
                 raise Exception(e)
-            self.vm0_dut_ports = self.vm0_dut.get_ports("any")
-            self.vm0_testpmd = PmdOutput(self.vm0_dut)
+            self.vm0_sut_ports = self.vm0_sut.get_ports("any")
+            self.vm0_testpmd = PmdOutput(self.vm0_sut)
             self.env_done = True
 
     def destroy_vm_env(self):
 
         if getattr(self, "vm0", None):
-            self.vm0_dut.kill_all()
+            self.vm0_sut.kill_all()
             self.vm0_testpmd = None
-            self.vm0_dut_ports = None
+            self.vm0_sut_ports = None
             # destroy vm0
             self.vm0.stop()
             self.vm0 = None
 
-        if getattr(self, "used_dut_port", None):
-            self.dut.destroy_sriov_vfs_by_port(self.used_dut_port)
-            port = self.dut.ports_info[self.used_dut_port]["port"]
-            self.used_dut_port = None
+        if getattr(self, "used_sut_port", None):
+            self.sut_node.destroy_sriov_vfs_by_port(self.used_sut_port)
+            port = self.sut_node.ports_info[self.used_sut_port]["port"]
+            self.used_sut_port = None
 
         self.env_done = False
 
@@ -155,24 +155,24 @@  class TestDdpGtp(TestCase):
         profile will be stored in binary file and need to be passed to AQ to
         program Intel® Ethernet 700 Series during initialization stage.
         """
-        self.dut_testpmd.start_testpmd(
+        self.sut_testpmd.start_testpmd(
             "Default",
             "--pkt-filter-mode=perfect --port-topology=chained \
             --txq=%s --rxq=%s"
             % (self.PF_QUEUE, self.PF_QUEUE),
         )
 
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
         time.sleep(1)
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
-        self.dut_testpmd.execute_cmd("ddp add 0 /tmp/gtp.pkgo,/tmp/gtp.bak")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("ddp add 0 /tmp/gtp.pkgo,/tmp/gtp.bak")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("Profile number is: 1" in out, "Failed to load ddp profile!!!")
-        self.dut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port start all")
         time.sleep(1)
-        self.dut_testpmd.execute_cmd("set fwd rxonly")
-        self.dut_testpmd.execute_cmd("set verbose 1")
-        self.dut_testpmd.execute_cmd("start")
+        self.sut_testpmd.execute_cmd("set fwd rxonly")
+        self.sut_testpmd.execute_cmd("set verbose 1")
+        self.sut_testpmd.execute_cmd("start")
         time.sleep(2)
 
     def gtp_packets(
@@ -316,7 +316,7 @@  class TestDdpGtp(TestCase):
 
     def gtp_test(self, type="fdir", port="pf", tunnel_pkt="gtpu", inner_L3="ipv4"):
         """
-        Send GTP packet to dut, receive packet from configured queue.
+        Send GTP packet to SUT, receive packet from configured queue.
         Input: filter type, port type, packet type, inner L3 type
         """
         queue = random.randint(1, self.PF_QUEUE - 1)
@@ -327,19 +327,19 @@  class TestDdpGtp(TestCase):
         wrong_teid = hex((random_teid + 2) % int(0xFFFFFFFF))
         if type is "fdir":
             if inner_L3 is None:
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "flow create 0 ingress pattern eth / ipv4 / udp / \
                     %s teid is %s / end actions queue index %d / end"
                     % (tunnel_pkt, correct_teid, queue)
                 )
             else:
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "flow create 0 ingress pattern eth / ipv4 / udp / \
                     %s teid is %s / %s / end actions queue index %d / end"
                     % (tunnel_pkt, correct_teid, inner_L3, queue)
                 )
         if type is "clfter":
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 / udp / \
                 %s teid is %s / end actions %s / queue index %d / end"
                 % (tunnel_pkt, correct_teid, port, queue)
@@ -356,15 +356,15 @@  class TestDdpGtp(TestCase):
                     )
                     for packet_type in list(pkts.keys()):
                         count = count + 1
-                        self.tester.scapy_append(
+                        self.tg_node.scapy_append(
                             'sendp([%s], iface="%s")'
-                            % (pkts[packet_type], self.tester_intf)
+                            % (pkts[packet_type], self.tg_intf)
                         )
-                    self.tester.scapy_execute()
+                    self.tg_node.scapy_execute()
                     if port is "pf":
-                        out = self.dut.get_session_output(timeout=5)
+                        out = self.sut_node.get_session_output(timeout=5)
                     else:
-                        out = self.vm0_dut.get_session_output(timeout=5)
+                        out = self.vm0_sut.get_session_output(timeout=5)
                     self.verify(
                         count == out.count("port 0/queue %d" % queue),
                         "Failed to receive packet in this queue!!!",
@@ -464,18 +464,18 @@  class TestDdpGtp(TestCase):
     def tear_down(self):
         if "vf" in self._suite_result.test_case:
             self.destroy_vm_env()
-        self.dut_testpmd.execute_cmd("stop")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("stop")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         if "Profile number is: 0" not in out:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd("ddp del 0 /tmp/gtp.bak")
-            out = self.dut_testpmd.execute_cmd("ddp get list 0")
+            self.sut_testpmd.execute_cmd("ddp del 0 /tmp/gtp.bak")
+            out = self.sut_testpmd.execute_cmd("ddp get list 0")
             self.verify(
                 "Profile number is: 0" in out, "Failed to delete ddp profile!!!"
             )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.quit()
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
         if self.env_done:
diff --git a/tests/TestSuite_ddp_gtp_qregion.py b/tests/TestSuite_ddp_gtp_qregion.py
index a3dea1b2..d6367e8c 100644
--- a/tests/TestSuite_ddp_gtp_qregion.py
+++ b/tests/TestSuite_ddp_gtp_qregion.py
@@ -8,7 +8,7 @@  import time
 
 from scapy.all import *
 
-import framework.packet as packet
+import framework.scapy_packet_builder as scapy_pkt_builder
 import framework.utils as utils
 from framework.pmd_output import PmdOutput
 from framework.settings import get_nic_name
@@ -17,19 +17,19 @@  from framework.test_case import TestCase
 
 class TestDdpGtpQregion(TestCase):
     def set_up_all(self):
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
         profile_file = "dep/gtp.pkgo"
         profile_dst = "/tmp/"
-        self.dut.session.copy_file_to(profile_file, profile_dst)
-        out = self.dut.send_expect("cat config/rte_config.h", "]# ", 10)
+        self.sut_node.session.copy_file_to(profile_file, profile_dst)
+        out = self.sut_node.send_expect("cat config/rte_config.h", "]# ", 10)
         self.PF_Q_strip = "RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF"
         pattern = "define (%s) (\d*)" % self.PF_Q_strip
         self.PF_QUEUE = self.element_strip(out, pattern)
-        self.used_dut_port = self.dut_ports[0]
-        tester_port = self.tester.get_local_port(self.used_dut_port)
-        self.tester_intf = self.tester.get_interface(tester_port)
-        self.dut_testpmd = PmdOutput(self.dut)
+        self.used_sut_port = self.sut_ports[0]
+        tg_port = self.tg_node.get_local_port(self.used_sut_port)
+        self.tg_intf = self.tg_node.get_interface(tg_port)
+        self.sut_testpmd = PmdOutput(self.sut_node)
 
     def set_up(self):
         self.load_profile()
@@ -54,18 +54,18 @@  class TestDdpGtpQregion(TestCase):
         profile will be stored in binary file and need to be passed to AQ to
         program Intel® Ethernet 700 Series during initialization stage.
         """
-        self.dut_testpmd.start_testpmd(
+        self.sut_testpmd.start_testpmd(
             "Default",
             "--pkt-filter-mode=perfect --port-topology=chained \
             --txq=%s --rxq=%s"
             % (self.PF_QUEUE, self.PF_QUEUE),
         )
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
         time.sleep(1)
-        self.dut_testpmd.execute_cmd("ddp add 0 /tmp/gtp.pkgo,/tmp/gtp.bak")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("ddp add 0 /tmp/gtp.pkgo,/tmp/gtp.bak")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("Profile number is: 1" in out, "Failed to load ddp profile!!!")
-        self.dut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port start all")
 
     def flowtype_qregion_mapping(self):
         """
@@ -77,18 +77,18 @@  class TestDdpGtpQregion(TestCase):
         q_nums = [8, 16, 8, 16]
         flowtypes = [26, 23, 24, 25]
         for rg_id, idx_id, q_num in zip(rg_ids, idx_ids, q_nums):
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "set port 0 queue-region region_id \
                 %d queue_start_index %d queue_num %d"
                 % (rg_id, idx_id, q_num)
             )
         for rg_id, flowtype in zip(rg_ids, flowtypes):
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "set port 0 queue-region region_id \
                 %d flowtype %d"
                 % (rg_id, flowtype)
             )
-        self.dut_testpmd.execute_cmd("set port 0 queue-region flush on")
+        self.sut_testpmd.execute_cmd("set port 0 queue-region flush on")
 
     def gtp_pkts(self, flowtype, keyword, opt):
         """
@@ -152,9 +152,9 @@  class TestDdpGtpQregion(TestCase):
         if flowtype == 26:
             a = 'Ether()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0xfe)/IP(dst="1.1.1.1", src="2.2.2.2")/UDP(dport=100, sport=200)/Raw("X"*20)'
         rawfile_src = "/tmp/test_gtp.raw"
-        packet.write_raw_pkt(a, rawfile_src)
+        scapy_pkt_builder.write_raw_pkt(a, rawfile_src)
         rawfile_dst = "/tmp/"
-        self.dut.session.copy_file_to(rawfile_src, rawfile_dst)
+        self.sut_node.session.copy_file_to(rawfile_src, rawfile_dst)
 
     def send_verify_fd(self, flowtype, keyword, opt):
         """
@@ -162,9 +162,9 @@  class TestDdpGtpQregion(TestCase):
         """
         pkts = self.gtp_pkts(flowtype, keyword, opt)
         for packet_type in list(pkts.keys()):
-            pkt = packet.Packet(pkts[packet_type])
-            pkt.send_pkt(crb=self.tester, tx_port=self.tester_intf)
-            out = self.dut.get_session_output(timeout=2)
+            scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder(pkts[packet_type])
+            scapy_pkt_builder.send_pkt(node=self.tg_node, tx_port=self.tg_intf)
+            out = self.sut_node.get_session_output(timeout=2)
             pattern = "port (\d)/queue (\d{1,2}): received (\d) packets"
             qnum = self.element_strip(out, pattern)
             ptypes = packet_type.split("/")
@@ -218,9 +218,9 @@  class TestDdpGtpQregion(TestCase):
                     keyword = "src_ipv6"
             pkts = self.gtp_pkts(flowtype, keyword, opt)
             for packet_type in list(pkts.keys()):
-                pkt = packet.Packet(pkts[packet_type])
-                pkt.send_pkt(crb=self.tester, tx_port=self.tester_intf)
-                out = self.dut.get_session_output(timeout=2)
+                scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder(pkts[packet_type])
+                scapy_pkt_builder.send_pkt(node=self.tg_node, tx_port=self.tg_intf)
+                out = self.sut_node.get_session_output(timeout=2)
                 self.verify("RTE_MBUF_F_RX_RSS_HASH" in out, "Failed to test RSS!!!")
                 pattern = "port (\d)/queue (\d{1,2}): received (\d) packets"
                 qnum = self.element_strip(out, pattern)
@@ -269,8 +269,8 @@  class TestDdpGtpQregion(TestCase):
                     )
 
     def flowtype_pctype_mapping(self, flowtype, pctype):
-        self.dut_testpmd.execute_cmd("port config 0 pctype mapping reset")
-        out = self.dut_testpmd.execute_cmd("show port 0 pctype mapping")
+        self.sut_testpmd.execute_cmd("port config 0 pctype mapping reset")
+        out = self.sut_testpmd.execute_cmd("show port 0 pctype mapping")
         self.verify(
             "pctype: 63  ->  flowtype: 14" in out,
             "Failed show flow type to pctype mapping!!!",
@@ -279,10 +279,10 @@  class TestDdpGtpQregion(TestCase):
             "pctype: %s  ->  flowtype: %s" % (pctype, flowtype) not in out,
             "Failed show flow type to pctype mapping!!!",
         )
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "port config 0 pctype mapping update %s %s" % (pctype, flowtype)
         )
-        out = self.dut_testpmd.execute_cmd("show port 0 pctype mapping")
+        out = self.sut_testpmd.execute_cmd("show port 0 pctype mapping")
         self.verify(
             "pctype: %s  ->  flowtype: %s" % (pctype, flowtype) in out,
             "Failed update flow type to pctype mapping!!!",
@@ -306,25 +306,25 @@  class TestDdpGtpQregion(TestCase):
 
         self.flowtype_pctype_mapping(flowtype, pctype)
         if crlwords is not None:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "port config 0 pctype %s fdir_inset clear all" % pctype
             )
             for word in crlwords:
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "port config 0 pctype %s fdir_inset set field %s" % (pctype, word)
                 )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.execute_cmd("set fwd rxonly")
-        self.dut_testpmd.execute_cmd("set verbose 1")
-        self.dut_testpmd.execute_cmd("start")
-        self.dut_testpmd.wait_link_status_up(self.dut_ports[0])
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("set fwd rxonly")
+        self.sut_testpmd.execute_cmd("set verbose 1")
+        self.sut_testpmd.execute_cmd("start")
+        self.sut_testpmd.wait_link_status_up(self.sut_ports[0])
         qnum = self.send_verify_fd(flowtype, keywords, "word_opt")
         self.verify(qnum == 0, "Receive packet from wrong queue!!!")
         self.raw_packet_generate(flowtype)
         queue = random.randint(1, self.PF_QUEUE - 1)
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "flow_director_filter 0 mode raw add flow %d fwd queue %d \
             fd_id 1 packet /tmp/test_gtp.raw"
             % (flowtype, queue)
@@ -375,21 +375,21 @@  class TestDdpGtpQregion(TestCase):
         """
         self.flowtype_qregion_mapping()
         self.flowtype_pctype_mapping(flowtype, pctype)
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
         time.sleep(1)
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "port config 0 pctype %s hash_inset clear all" % pctype
         )
         for word in crlwords:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "port config 0 pctype %s hash_inset set field %s" % (pctype, word)
             )
-        self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.execute_cmd("port config all rss %s" % flowtype)
-        self.dut_testpmd.execute_cmd("set fwd rxonly")
-        self.dut_testpmd.execute_cmd("set verbose 1")
-        self.dut_testpmd.execute_cmd("start")
-        self.dut_testpmd.wait_link_status_up(self.dut_ports[0])
+        self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port config all rss %s" % flowtype)
+        self.sut_testpmd.execute_cmd("set fwd rxonly")
+        self.sut_testpmd.execute_cmd("set verbose 1")
+        self.sut_testpmd.execute_cmd("start")
+        self.sut_testpmd.wait_link_status_up(self.sut_ports[0])
         self.send_and_verify(flowtype, qmin, qmax, keyword)
 
     def test_outer_dst_contrl_gtpcq(self):
@@ -639,19 +639,19 @@  class TestDdpGtpQregion(TestCase):
         self.run_gtp_test(crlwords, 23, 23, 10, 25, "dst_ipv6_32pre")
 
     def tear_down(self):
-        self.dut_testpmd.execute_cmd("stop")
-        self.dut_testpmd.execute_cmd("set port 0 queue-region flush off")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("stop")
+        self.sut_testpmd.execute_cmd("set port 0 queue-region flush off")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         if "Profile number is: 0" not in out:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd("ddp del 0 /tmp/gtp.bak")
-            out = self.dut_testpmd.execute_cmd("ddp get list 0")
+            self.sut_testpmd.execute_cmd("ddp del 0 /tmp/gtp.bak")
+            out = self.sut_testpmd.execute_cmd("ddp get list 0")
             self.verify(
                 "Profile number is: 0" in out, "Failed to delete ddp profile!!!"
             )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.quit()
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
         pass
diff --git a/tests/TestSuite_ddp_l2tpv3.py b/tests/TestSuite_ddp_l2tpv3.py
index ef50824b..ea4ccea8 100644
--- a/tests/TestSuite_ddp_l2tpv3.py
+++ b/tests/TestSuite_ddp_l2tpv3.py
@@ -18,13 +18,13 @@  from framework.test_case import TestCase
 
 class TestDdpL2tpv3(TestCase):
     def set_up_all(self):
-        self.dut.session.copy_file_to("dep/l2tpv3oip-l4.pkg", "/tmp/")
-        self.dut_testpmd = PmdOutput(self.dut)
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.used_dut_port = self.dut_ports[0]
-        tester_port = self.tester.get_local_port(self.used_dut_port)
-        self.tester_intf = self.tester.get_interface(tester_port)
-        out = self.dut.send_expect("cat config/rte_config.h", "]# ", 10)
+        self.sut_node.session.copy_file_to("dep/l2tpv3oip-l4.pkg", "/tmp/")
+        self.sut_testpmd = PmdOutput(self.sut_node)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.used_sut_port = self.sut_ports[0]
+        tg_port = self.tg_node.get_local_port(self.used_sut_port)
+        self.tg_intf = self.tg_node.get_interface(tg_port)
+        out = self.sut_node.send_expect("cat config/rte_config.h", "]# ", 10)
         self.PF_Q_strip = "RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF"
         pattern = "define (%s) (\d*)" % self.PF_Q_strip
         self.PF_QUEUE = self.element_strip(out, pattern)
@@ -51,20 +51,20 @@  class TestDdpL2tpv3(TestCase):
         Load profile to update Intel® Ethernet 700 Series configuration
         tables, profile will be stored in binary file.
         """
-        self.dut_testpmd.start_testpmd(
+        self.sut_testpmd.start_testpmd(
             "Default",
             "--pkt-filter-mode=perfect --port-topology=chained \
             --txq=%s --rxq=%s --disable-rss"
             % (self.PF_QUEUE, self.PF_QUEUE),
         )
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
         time.sleep(1)
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak"
         )
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("Profile number is: 1" in out, "Failed to load ddp profile!!!")
-        self.dut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port start all")
         time.sleep(3)
 
     def l2tpv3pkts(self, keyword):
@@ -236,11 +236,11 @@  class TestDdpL2tpv3(TestCase):
         pkt = self.l2tpv3pkts(keyword)
         qnum = []
         for i in range(len(pkt)):
-            self.tester.scapy_append(
-                'sendp([%s], iface="%s")' % (pkt[i], self.tester_intf)
+            self.tg_node.scapy_append(
+                'sendp([%s], iface="%s")' % (pkt[i], self.tg_intf)
             )
-            self.tester.scapy_execute()
-            out = self.dut.get_session_output(timeout=2)
+            self.tg_node.scapy_execute()
+            out = self.sut_node.get_session_output(timeout=2)
             pattern = "port (\d)/queue (\d{1,2}): received (\d) packets"
             qnum.append(self.element_strip(out, pattern))
         return qnum
@@ -251,22 +251,22 @@  class TestDdpL2tpv3(TestCase):
 
         keywords: keywords have IPv4/IPv6 SIP DIP and UDP
         """
-        self.dut_testpmd.execute_cmd("port stop all")
-        self.dut_testpmd.execute_cmd("port config 0 pctype 28 fdir_inset clear all")
-        self.dut_testpmd.execute_cmd("port config 0 pctype 38 fdir_inset clear all")
+        self.sut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port config 0 pctype 28 fdir_inset clear all")
+        self.sut_testpmd.execute_cmd("port config 0 pctype 38 fdir_inset clear all")
         if crlwords_ipv4 is not None:
             for field in crlwords_ipv4:
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "port config 0 pctype 28 fdir_inset set field {}".format(field)
                 )
         if crlwords_ipv6 is not None:
             for field in crlwords_ipv6:
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "port config 0 pctype 38 fdir_inset set field {}".format(field)
                 )
-        self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.execute_cmd("start")
-        self.dut_testpmd.execute_cmd("set verbose 1")
+        self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("start")
+        self.sut_testpmd.execute_cmd("set verbose 1")
         qdef = []
         qnum = self.send_and_verify(keyword)
         for i in range(len(qnum)):
@@ -277,7 +277,7 @@  class TestDdpL2tpv3(TestCase):
         queue = random.randint(1, self.PF_QUEUE - 1)
 
         if "l2tpv3oipv4" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -290,7 +290,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching sessionID
 
         if "l2tpv3oipv4_dst" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4  dst is 8.8.8.8  / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -306,7 +306,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching DIP
 
         if "l2tpv3oipv4_src" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 src is 1.1.1.1 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -322,7 +322,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching SIP
 
         if "l2tpv3oipv4_src_dst" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 src is 5.5.5.5 dst is 2.2.2.2 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -341,7 +341,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching DIP
 
         if "l2tpv3oipv6" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -354,7 +354,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching sessionID
 
         if "l2tpv3oipv6_dst" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 dst is 8:7:6:5:4:3:2:1 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -370,7 +370,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching DIP
 
         if "l2tpv3oipv6_src" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 src is 1:2:3:4:5:6:7:8 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -386,7 +386,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching SIP
 
         if "l2tpv3oipv6_src_dst" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 src is 2:3:4:5:6:7:8:9 dst is 6:5:4:3:2:1:8:9 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -405,7 +405,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching DIP
 
         if "l2tpv3_ipv4_ipv6" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -417,7 +417,7 @@  class TestDdpL2tpv3(TestCase):
                 0
             )  # Default Queue number to check for in case of non matching sessionID
             queue = random.randint(1, self.PF_QUEUE - 1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -430,7 +430,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching sessionID
 
         if "l2tpv3oip_v4src_v6src" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 src is 1.3.5.7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -445,7 +445,7 @@  class TestDdpL2tpv3(TestCase):
                 0
             )  # Default Queue number to check for in case of non matching IPv4 SIP
             queue = random.randint(1, self.PF_QUEUE - 1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 src is 1:3:5:7:9:2:4:6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -461,7 +461,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching IPv6 SIP
 
         if "l2tpv3oip_v4dst_v6dst" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 dst is 9.7.5.3 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -476,7 +476,7 @@  class TestDdpL2tpv3(TestCase):
                 0
             )  # Default Queue number to check for in case of non matching IPv4 DIP
             queue = random.randint(1, self.PF_QUEUE - 1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 dst is 2:4:6:8:1:3:5:7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -492,7 +492,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching IPv6 DIP
 
         if "l2tpv3oip_v4srcdst_v6srcdst" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 src is 9.8.7.6 dst is 4.5.6.7 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -510,7 +510,7 @@  class TestDdpL2tpv3(TestCase):
                 0
             )  # Default Queue number to check for in case of non matching IPv4 DIP
             queue = random.randint(1, self.PF_QUEUE - 1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 src is 1:2:3:4:5:6:7:8 dst is 9:8:7:6:5:4:3:2 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -529,7 +529,7 @@  class TestDdpL2tpv3(TestCase):
             )  # Default Queue number to check for in case of non matching IPv6 DIP
 
         if "l2tpv3oip_v4_v6_udp" is keyword:
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -541,7 +541,7 @@  class TestDdpL2tpv3(TestCase):
                 0
             )  # Default Queue number to check for in case of non matching sessionID
             queue = random.randint(1, self.PF_QUEUE - 1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                     queue
                 )
@@ -553,7 +553,7 @@  class TestDdpL2tpv3(TestCase):
                 0
             )  # Default Queue number to check for in case of non matching sessionID
             queue = random.randint(1, self.PF_QUEUE - 1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "flow create 0 ingress pattern eth / ipv4 / udp / end actions queue index {} / end".format(
                     queue
                 )
@@ -566,7 +566,7 @@  class TestDdpL2tpv3(TestCase):
                 qdef[i] == qnum[i],
                 "Receive packet from wrong queue{}_{}!!!".format(qdef[i], qnum[i]),
             )
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "flow flush 0"
         )  # Delete all the flow director rules
 
@@ -697,16 +697,16 @@  class TestDdpL2tpv3(TestCase):
         Step1: Check if it is already loaded, if loaded delete the same
         Step2: Load the profile
         """
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
 
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         if "L2TPv3oIP with L4 payload" in out:
             print("Profile is already loaded!!")
-            out = self.dut_testpmd.execute_cmd("ddp del 0 /tmp/l2tpv3oip-l4.bak")
-        out = self.dut_testpmd.execute_cmd(
+            out = self.sut_testpmd.execute_cmd("ddp del 0 /tmp/l2tpv3oip-l4.bak")
+        out = self.sut_testpmd.execute_cmd(
             "ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak"
         )
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("L2TPv3oIP with L4 payload" in out, "Failed to Load DDP profile ")
 
     def test_l2tpv3oip_delete_profile(self):
@@ -715,24 +715,24 @@  class TestDdpL2tpv3(TestCase):
         Step1: Check if profile is loaded, if loaded, delete the same
         Step2: Add the profile again
         """
-        self.dut_testpmd.execute_cmd("port stop all")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("port stop all")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
 
         if "L2TPv3oIP with L4 payload" not in out:
-            out = self.dut_testpmd.execute_cmd(
+            out = self.sut_testpmd.execute_cmd(
                 "ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak"
             )
-            out = self.dut_testpmd.execute_cmd("ddp get list 0")
+            out = self.sut_testpmd.execute_cmd("ddp get list 0")
             self.verify(
                 "L2TPv3oIP with L4 payload" in out, "Error in loading the Profile"
             )
-        self.dut_testpmd.execute_cmd("ddp del 0 /tmp/l2tpv3oip-l4.bak")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("ddp del 0 /tmp/l2tpv3oip-l4.bak")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("Profile number is: 0" in out, "Error in @@deleting the Profile !!")
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak"
         )
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("L2TPv3oIP with L4 payload" in out, "Error in loading the Profile")
 
     def test_l2tpv3oip_delete_rules(self):
@@ -743,46 +743,46 @@  class TestDdpL2tpv3(TestCase):
         Step3: Flush all rules
         """
         queue = random.randint(1, self.PF_QUEUE - 1)
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / end".format(
                 queue
             )
         )
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1002 / end actions queue index {} / end".format(
                 queue
             )
         )
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1003 / end actions queue index {} / end".format(
                 queue
             )
         )
-        out = self.dut_testpmd.execute_cmd("flow list 0")
+        out = self.sut_testpmd.execute_cmd("flow list 0")
         verify = out.splitlines()
         self.verify(len(verify) == 6, "Flow rules not added")
-        self.dut_testpmd.execute_cmd("flow destroy 0 rule 0")
-        out = self.dut_testpmd.execute_cmd("flow list 0")
+        self.sut_testpmd.execute_cmd("flow destroy 0 rule 0")
+        out = self.sut_testpmd.execute_cmd("flow list 0")
         verify = out.splitlines()
         self.verify(len(verify) == 5, "Flow rules not destroyed")
-        self.dut_testpmd.execute_cmd("flow flush 0")
-        out = self.dut_testpmd.execute_cmd("flow list 0")
+        self.sut_testpmd.execute_cmd("flow flush 0")
+        out = self.sut_testpmd.execute_cmd("flow list 0")
         verify = out.splitlines()
         self.verify(len(verify) == 1, "Flow rules not destroyed")
 
     def tear_down(self):
-        self.dut_testpmd.execute_cmd("stop")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("stop")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         if "Profile number is: 0" not in out:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd("ddp del 0 /tmp/l2tpv3oip-l4.bak")
-            out = self.dut_testpmd.execute_cmd("ddp get list 0")
+            self.sut_testpmd.execute_cmd("ddp del 0 /tmp/l2tpv3oip-l4.bak")
+            out = self.sut_testpmd.execute_cmd("ddp get list 0")
             self.verify(
                 "Profile number is: 0" in out, "Failed to delete ddp profile!!!"
             )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.quit()
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
         pass
diff --git a/tests/TestSuite_ddp_mpls.py b/tests/TestSuite_ddp_mpls.py
index f0d4ef7d..bb9f7b8c 100644
--- a/tests/TestSuite_ddp_mpls.py
+++ b/tests/TestSuite_ddp_mpls.py
@@ -26,13 +26,13 @@  class Testddp_mpls(TestCase):
         self.verify(
             self.is_eth_series_nic(700), "ddp mpls can not support %s nic" % self.nic
         )
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
         self.vm0 = None
         self.env_done = False
         profile_file = r"dep/mpls.pkgo"
         profile_dst = "/tmp/"
-        self.dut.session.copy_file_to(profile_file, profile_dst)
+        self.sut_node.session.copy_file_to(profile_file, profile_dst)
 
         self.vf_driver = self.get_suite_cfg()["vf_driver"]
         if self.vf_driver is None:
@@ -42,7 +42,7 @@  class Testddp_mpls(TestCase):
             self.vf_assign_method = "pci-assign"
         else:
             self.vf_assign_method = "vfio-pci"
-            self.dut.send_expect("modprobe vfio-pci", "#")
+            self.sut_node.send_expect("modprobe vfio-pci", "#")
 
     def set_up(self):
         self.setup_vm_env()
@@ -52,36 +52,36 @@  class Testddp_mpls(TestCase):
         Create testing environment with VF generated from 1PF
         """
         if self.env_done == False:
-            self.bind_nic_driver(self.dut_ports[:1], driver="igb_uio")
-            self.used_dut_port = self.dut_ports[0]
-            tester_port = self.tester.get_local_port(self.used_dut_port)
-            self.tester_intf = self.tester.get_interface(tester_port)
+            self.bind_nic_driver(self.sut_ports[:1], driver="igb_uio")
+            self.used_sut_port = self.sut_ports[0]
+            tg_port = self.tg_node.get_local_port(self.used_sut_port)
+            self.tg_intf = self.tg_node.get_interface(tg_port)
 
-            self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 1, driver=driver)
-            self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port]["vfs_port"]
+            self.sut_node.generate_sriov_vfs_by_port(self.used_sut_port, 1, driver=driver)
+            self.sriov_vfs_port = self.sut_node.ports_info[self.used_sut_port]["vfs_port"]
             for port in self.sriov_vfs_port:
                 port.bind_driver(self.vf_driver)
             time.sleep(1)
-            self.dut_testpmd = PmdOutput(self.dut)
+            self.sut_testpmd = PmdOutput(self.sut_node)
             time.sleep(1)
             vf0_prop = {"opt_host": self.sriov_vfs_port[0].pci}
 
             # set up VM0 ENV
-            self.vm0 = QEMUKvm(self.dut, "vm0", "ddp_mpls")
+            self.vm0 = QEMUKvm(self.sut_node, "vm0", "ddp_mpls")
             self.vm0.set_vm_device(driver=self.vf_assign_method, **vf0_prop)
             try:
-                self.vm0_dut = self.vm0.start()
-                if self.vm0_dut is None:
+                self.vm0_sut = self.vm0.start()
+                if self.vm0_sut is None:
                     raise Exception("Set up VM0 ENV failed!")
             except Exception as e:
                 self.destroy_vm_env()
                 raise Exception(e)
 
-            self.vm0_dut_ports = self.vm0_dut.get_ports("any")
-            self.vm0_testpmd = PmdOutput(self.vm0_dut)
+            self.vm0_sut_ports = self.vm0_sut.get_ports("any")
+            self.vm0_testpmd = PmdOutput(self.vm0_sut)
             self.env_done = True
 
-        self.dut_testpmd.start_testpmd(
+        self.sut_testpmd.start_testpmd(
             "Default",
             "--port-topology=chained --txq=%s --rxq=%s" % (PF_MAX_QUEUE, PF_MAX_QUEUE),
         )
@@ -94,17 +94,17 @@  class Testddp_mpls(TestCase):
     def destroy_vm_env(self):
 
         if getattr(self, "vm0", None):
-            self.vm0_dut.kill_all()
+            self.vm0_sut.kill_all()
             self.vm0_testpmd = None
-            self.vm0_dut_ports = None
+            self.vm0_sut_ports = None
             # destroy vm0
             self.vm0.stop()
             self.vm0 = None
 
-        if getattr(self, "used_dut_port", None):
-            self.dut.destroy_sriov_vfs_by_port(self.used_dut_port)
-            port = self.dut.ports_info[self.used_dut_port]["port"]
-            self.used_dut_port = None
+        if getattr(self, "used_sut_port", None):
+            self.sut_node.destroy_sriov_vfs_by_port(self.used_sut_port)
+            port = self.sut_node.ports_info[self.used_sut_port]["port"]
+            self.used_sut_port = None
 
         self.env_done = False
 
@@ -114,29 +114,29 @@  class Testddp_mpls(TestCase):
         profile will be stored in binary file and need to be passed to AQ to
         program Intel® Ethernet 700 Series during initialization stage.
         """
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
         time.sleep(1)
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify(
             "Profile number is: 0" in out, "Failed to get ddp profile info list!!!"
         )
-        self.dut_testpmd.execute_cmd("ddp add 0 /tmp/mpls.pkgo,/tmp/mpls.bak")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("ddp add 0 /tmp/mpls.pkgo,/tmp/mpls.bak")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("Profile number is: 1" in out, "Failed to load ddp profile!!!")
-        self.dut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port start all")
         time.sleep(1)
 
     def mpls_test(self, port="pf", pkt="udp"):
         """
-        Send mpls packet to dut, receive packet from configured queue.
+        Send mpls packet to SUT, receive packet from configured queue.
         Input: port type, packet type
         """
         pkts = []
         if port == "pf":
             queue = random.randint(1, PF_MAX_QUEUE - 1)
-            self.dut_testpmd.execute_cmd("set fwd rxonly")
-            self.dut_testpmd.execute_cmd("set verbose 1")
-            self.dut_testpmd.execute_cmd("start")
+            self.sut_testpmd.execute_cmd("set fwd rxonly")
+            self.sut_testpmd.execute_cmd("set verbose 1")
+            self.sut_testpmd.execute_cmd("start")
         else:
             queue = random.randint(1, VF_MAX_QUEUE - 1)
             self.vm0_testpmd.execute_cmd("set fwd rxonly")
@@ -145,7 +145,7 @@  class Testddp_mpls(TestCase):
         random_label = random.randint(0x0, 0xFFFFF)
         label = hex(random_label)
         wrong_label = hex((random_label + 2) % int(0xFFFFF))
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "flow create 0 ingress pattern eth / ipv4\
             / %s / mpls label is %s / end actions %s / queue index %d / end"
             % (pkt, label, port, queue)
@@ -170,14 +170,14 @@  class Testddp_mpls(TestCase):
                     % label,
                 }
             for packet_type in list(pkts.keys()):
-                self.tester.scapy_append(
-                    'sendp([%s], iface="%s")' % (pkts[packet_type], self.tester_intf)
+                self.tg_node.scapy_append(
+                    'sendp([%s], iface="%s")' % (pkts[packet_type], self.tg_intf)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
                 if port == "pf":
-                    out = self.dut.get_session_output(timeout=2)
+                    out = self.sut_node.get_session_output(timeout=2)
                 else:
-                    out = self.vm0_dut.get_session_output(timeout=2)
+                    out = self.vm0_sut.get_session_output(timeout=2)
 
                 self.verify(
                     "port 0/queue %d" % queue in out,
@@ -229,19 +229,19 @@  class Testddp_mpls(TestCase):
 
     def tear_down(self):
         self.vm0_testpmd.execute_cmd("stop")
-        self.dut_testpmd.execute_cmd("stop")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("stop")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         if "Profile number is: 0" not in out:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd("ddp del 0 /tmp/mpls.bak")
-            out = self.dut_testpmd.execute_cmd("ddp get list 0")
+            self.sut_testpmd.execute_cmd("ddp del 0 /tmp/mpls.bak")
+            out = self.sut_testpmd.execute_cmd("ddp get list 0")
             self.verify(
                 "Profile number is: 0" in out, "Failed to delete mpls profile!!!"
             )
-            self.dut_testpmd.execute_cmd("port start all")
+            self.sut_testpmd.execute_cmd("port start all")
         self.vm0_testpmd.quit()
-        self.dut_testpmd.quit()
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
         self.destroy_vm_env()
diff --git a/tests/TestSuite_ddp_ppp_l2tp.py b/tests/TestSuite_ddp_ppp_l2tp.py
index c0890a48..50667b91 100644
--- a/tests/TestSuite_ddp_ppp_l2tp.py
+++ b/tests/TestSuite_ddp_ppp_l2tp.py
@@ -17,19 +17,19 @@  from framework.test_case import TestCase
 
 class TestDdpPppL2tp(TestCase):
     def set_up_all(self):
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
         profile_file = "dep/ppp-oe-ol2tpv2.pkgo"
         profile_dst = "/tmp/"
-        self.dut.session.copy_file_to(profile_file, profile_dst)
-        out = self.dut.send_expect("cat config/rte_config.h", "]# ", 10)
+        self.sut_node.session.copy_file_to(profile_file, profile_dst)
+        out = self.sut_node.send_expect("cat config/rte_config.h", "]# ", 10)
         self.PF_Q_strip = "RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF"
         pattern = "define (%s) (\d*)" % self.PF_Q_strip
         self.PF_QUEUE = self.element_strip(out, pattern)
-        self.used_dut_port = self.dut_ports[0]
-        tester_port = self.tester.get_local_port(self.used_dut_port)
-        self.tester_intf = self.tester.get_interface(tester_port)
-        self.dut_testpmd = PmdOutput(self.dut)
+        self.used_sut_port = self.sut_ports[0]
+        tg_port = self.tg_node.get_local_port(self.used_sut_port)
+        self.tg_intf = self.tg_node.get_interface(tg_port)
+        self.sut_testpmd = PmdOutput(self.sut_node)
 
     def set_up(self):
         self.load_profile()
@@ -53,20 +53,20 @@  class TestDdpPppL2tp(TestCase):
         profile will be stored in binary file and need to be passed to AQ to
         program Intel® Ethernet 700 Series during initialization stage.
         """
-        self.dut_testpmd.start_testpmd(
+        self.sut_testpmd.start_testpmd(
             "Default",
             "--pkt-filter-mode=perfect --port-topology=chained \
             --txq=%s --rxq=%s"
             % (self.PF_QUEUE, self.PF_QUEUE),
         )
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
         time.sleep(1)
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "ddp add 0 /tmp/ppp-oe-ol2tpv2.pkgo,/tmp/ppp-oe-ol2tpv2.bak"
         )
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("Profile number is: 1" in out, "Failed to load ddp profile!!!")
-        self.dut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port start all")
 
     def ppp_l2tp_pkts(self, flowtype, keyword):
         """
@@ -199,7 +199,7 @@  class TestDdpPppL2tp(TestCase):
         File.write(ba)
         File.close()
         rawfile_dst = "/tmp/"
-        self.dut.session.copy_file_to(rawfile_src, rawfile_dst)
+        self.sut_node.session.copy_file_to(rawfile_src, rawfile_dst)
 
     def send_and_verify(self, flowtype, keyword="def", type="rss"):
         """
@@ -207,11 +207,11 @@  class TestDdpPppL2tp(TestCase):
         """
         pkts = self.ppp_l2tp_pkts(flowtype, keyword)
         for packet_type in list(pkts.keys()):
-            self.tester.scapy_append(
-                'sendp([%s], iface="%s")' % (pkts[packet_type], self.tester_intf)
+            self.tg_node.scapy_append(
+                'sendp([%s], iface="%s")' % (pkts[packet_type], self.tg_intf)
             )
-            self.tester.scapy_execute()
-            out = self.dut.get_session_output(timeout=2)
+            self.tg_node.scapy_execute()
+            out = self.sut_node.get_session_output(timeout=2)
             print(out)
             if type is "rss":
                 self.verify("RTE_MBUF_F_RX_RSS_HASH" in out, "Failed to test RSS!!!")
@@ -233,8 +233,8 @@  class TestDdpPppL2tp(TestCase):
         """
         dynamic flowtype/pctype mapping for new protocol.
         """
-        self.dut_testpmd.execute_cmd("port config 0 pctype mapping reset")
-        out = self.dut_testpmd.execute_cmd("show port 0 pctype mapping")
+        self.sut_testpmd.execute_cmd("port config 0 pctype mapping reset")
+        out = self.sut_testpmd.execute_cmd("show port 0 pctype mapping")
         self.verify(
             "pctype: 63  ->  flowtype: 14" in out,
             "Failed show flow type to pctype mapping!!!",
@@ -243,16 +243,16 @@  class TestDdpPppL2tp(TestCase):
             "pctype: %s  ->  flowtype: %s" % (pctype, flowtype) not in out,
             "Failed show flow type to pctype mapping!!!",
         )
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "port config 0 pctype mapping update %s %s" % (pctype, flowtype)
         )
-        out = self.dut_testpmd.execute_cmd("show port 0 pctype mapping")
+        out = self.sut_testpmd.execute_cmd("show port 0 pctype mapping")
         self.verify(
             "pctype: %s  ->  flowtype: %s" % (pctype, flowtype) in out,
             "Failed update flow type to pctype mapping!!!",
         )
-        self.dut_testpmd.execute_cmd("set fwd rxonly")
-        self.dut_testpmd.execute_cmd("set verbose 1")
+        self.sut_testpmd.execute_cmd("set fwd rxonly")
+        self.sut_testpmd.execute_cmd("set verbose 1")
 
     def run_rss_test(self, crlwords, flowtype, pctype, keywords, qchecks):
         """
@@ -273,18 +273,18 @@  class TestDdpPppL2tp(TestCase):
 
         self.pctype_flowtype_mapping(flowtype, pctype)
         if crlwords is not None:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "port config 0 pctype %s hash_inset clear all" % pctype
             )
             for word in crlwords:
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "port config 0 pctype %s hash_inset set field %s" % (pctype, word)
                 )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.execute_cmd("port config all rss %s" % flowtype)
-        self.dut_testpmd.execute_cmd("start")
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port config all rss %s" % flowtype)
+        self.sut_testpmd.execute_cmd("start")
         qnum = self.send_and_verify(flowtype, "def", "rss")
         qdef = qnum
         for word, chk in zip(keywords, qchecks):
@@ -314,22 +314,22 @@  class TestDdpPppL2tp(TestCase):
 
         self.pctype_flowtype_mapping(flowtype, pctype)
         if crlwords is not None:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd(
+            self.sut_testpmd.execute_cmd(
                 "port config 0 pctype %s fdir_inset clear all" % pctype
             )
             for word in crlwords:
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "port config 0 pctype %s fdir_inset set field %s" % (pctype, word)
                 )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.execute_cmd("start")
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("start")
         qnum = self.send_and_verify(flowtype, "def", "fd")
         self.verify(qnum == 0, "Receive packet from wrong queue!!!")
         self.raw_packet_generate(flowtype)
         queue = random.randint(1, self.PF_QUEUE - 1)
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "flow_director_filter 0 mode raw add flow %d fwd queue %d \
             fd_id 1 packet /tmp/test.raw"
             % (flowtype, queue)
@@ -588,18 +588,18 @@  class TestDdpPppL2tp(TestCase):
         self.run_fd_test(crlwords, 24, 19, keywords, qchecks)
 
     def tear_down(self):
-        self.dut_testpmd.execute_cmd("stop")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("stop")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         if "Profile number is: 0" not in out:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd("ddp del 0 /tmp/ppp-oe-ol2tpv2.bak")
-            out = self.dut_testpmd.execute_cmd("ddp get list 0")
+            self.sut_testpmd.execute_cmd("ddp del 0 /tmp/ppp-oe-ol2tpv2.bak")
+            out = self.sut_testpmd.execute_cmd("ddp get list 0")
             self.verify(
                 "Profile number is: 0" in out, "Failed to delete ddp profile!!!"
             )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.quit()
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
         pass
diff --git a/tests/TestSuite_distributor.py b/tests/TestSuite_distributor.py
index 7b41eb01..4216eb97 100644
--- a/tests/TestSuite_distributor.py
+++ b/tests/TestSuite_distributor.py
@@ -9,8 +9,8 @@  import os
 import re
 
 import framework.utils as utils
-from framework.pktgen import PacketGeneratorHelper
 from framework.test_case import TestCase
+from framework.tg_perf import TrafficGeneratorStream
 
 
 class TestDistributor(TestCase):
@@ -18,13 +18,13 @@  class TestDistributor(TestCase):
         """
         Run at the start of each test suite.
         """
-        out = self.dut.build_dpdk_apps("./examples/distributor")
+        out = self.sut_node.build_dpdk_apps("./examples/distributor")
         self.verify("Error" not in out, "Compilation error")
         self.verify("No such" not in out, "Compilation error")
 
-        self.dut_ports = self.dut.get_ports()
-        self.app_distributor_path = self.dut.apps_name["distributor"]
-        self.app_test_path = self.dut.apps_name["test"]
+        self.sut_ports = self.sut_node.get_ports()
+        self.app_distributor_path = self.sut_node.apps_name["distributor"]
+        self.app_test_path = self.sut_node.apps_name["test"]
         # get dts output path
         if self.logger.log_path.startswith(os.sep):
             self.output_path = self.logger.log_path
@@ -32,7 +32,7 @@  class TestDistributor(TestCase):
             cur_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
             self.output_path = os.sep.join([cur_path, self.logger.log_path])
         # create an instance to set stream field setting
-        self.pktgen_helper = PacketGeneratorHelper()
+        self.pktgen_helper = TrafficGeneratorStream()
 
     def set_up(self):
         """
@@ -44,26 +44,26 @@  class TestDistributor(TestCase):
         """
         Run distributor unit test
         """
-        eal_para = self.dut.create_eal_parameters(cores=[0, 1, 2, 3])
-        self.dut.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
-        out = self.dut.send_expect("distributor_autotest", "RTE>>", 30)
-        self.dut.send_expect("quit", "# ")
+        eal_para = self.sut_node.create_eal_parameters(cores=[0, 1, 2, 3])
+        self.sut_node.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
+        out = self.sut_node.send_expect("distributor_autotest", "RTE>>", 30)
+        self.sut_node.send_expect("quit", "# ")
         self.verify("Test OK" in out, "Test failed")
 
     def test_distributor_unit_perf(self):
         """
         Run distributor unit perf test
         """
-        eal_para = self.dut.create_eal_parameters(cores=[0, 1, 2, 3])
-        self.dut.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
-        out = self.dut.send_expect("distributor_perf_autotest", "RTE>>", 120)
+        eal_para = self.sut_node.create_eal_parameters(cores=[0, 1, 2, 3])
+        self.sut_node.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
+        out = self.sut_node.send_expect("distributor_perf_autotest", "RTE>>", 120)
         cycles_single = self.strip_cycles(out, "single")
         cycles_burst = self.strip_cycles(out, "burst")
         self.logger.info(
             "Cycles for single mode is %d burst mode is %d"
             % (cycles_single, cycles_burst)
         )
-        self.dut.send_expect("quit", "# ")
+        self.sut_node.send_expect("quit", "# ")
         self.verify("Test OK" in out, "Test failed")
         self.verify(
             cycles_single > cycles_burst * 2, "Burst performance should be much better"
@@ -73,7 +73,7 @@  class TestDistributor(TestCase):
         """
         Run distributor perf test, recorded statistic of Rx/Enqueue/Sent/Dequeue/Tx
         """
-        self.verify(len(self.dut_ports) >= 1, "Not enough ports")
+        self.verify(len(self.sut_ports) >= 1, "Not enough ports")
         workers = [1, 2, 3, 4, 8, 16, 32]
         table_header = [
             "Number of workers",
@@ -88,14 +88,14 @@  class TestDistributor(TestCase):
 
         # output port is calculated from overall ports number
         cmd_fmt = "%s %s -- -p 0x1"
-        socket = self.dut.get_numa_id(self.dut_ports[0])
+        socket = self.sut_node.get_numa_id(self.sut_ports[0])
 
         pcap = os.sep.join([self.output_path, "distributor.pcap"])
-        self.tester.scapy_append('wrpcap("%s", [Ether()/IP()/("X"*26)])' % pcap)
-        self.tester.scapy_execute()
+        self.tg_node.scapy_append('wrpcap("%s", [Ether()/IP()/("X"*26)])' % pcap)
+        self.tg_node.scapy_execute()
         tgen_input = []
-        rx_port = self.tester.get_local_port(self.dut_ports[0])
-        tx_port = self.tester.get_local_port(self.dut_ports[0])
+        rx_port = self.tg_node.get_local_port(self.sut_ports[0])
+        tx_port = self.tg_node.get_local_port(self.sut_ports[0])
 
         pcap = os.sep.join([self.output_path, "distributor.pcap"])
         tgen_input.append((tx_port, rx_port, pcap))
@@ -103,27 +103,27 @@  class TestDistributor(TestCase):
         self.result_table_create(table_header)
         for worker_num in workers:
             # Rx core/distributor core/Tx core/stats core
-            cores = self.dut.get_core_list("1S/%dC/1T" % (worker_num + 4), socket)
+            cores = self.sut_node.get_core_list("1S/%dC/1T" % (worker_num + 4), socket)
             # If can't get enough core from one socket, just use all lcores
             if len(cores) < (worker_num + 4):
                 cores = self._get_thread_lcore(worker_num + 4)
 
-            eal_para = self.dut.create_eal_parameters(cores=cores, ports=[0])
+            eal_para = self.sut_node.create_eal_parameters(cores=cores, ports=[0])
             cmd = cmd_fmt % (self.app_distributor_path, eal_para)
-            self.dut.send_expect(cmd, "doing packet RX", timeout=30)
+            self.sut_node.send_expect(cmd, "doing packet RX", timeout=30)
 
             # clear streams before add new streams
-            self.tester.pktgen.clear_streams()
-            # run packet generator
+            self.tg_node.perf_tg.clear_streams()
+            # run traffic generator
             streams = self.pktgen_helper.prepare_stream_from_tginput(
-                tgen_input, 100, None, self.tester.pktgen
+                tgen_input, 100, None, self.tg_node.perf_tg
             )
-            _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
+            _, pps = self.tg_node.perf_tg.measure_throughput(stream_ids=streams)
 
             # get aap output after sending packet
-            self.app_output = self.dut.session.get_session_before(timeout=2)
+            self.app_output = self.sut_node.session.get_session_before(timeout=2)
 
-            self.dut.send_expect("^C", "#")
+            self.sut_node.send_expect("^C", "#")
 
             pps /= 1000000.0
             rx, enq, sent, deq, trans = self.strip_performance_data(self.app_output)
@@ -138,10 +138,10 @@  class TestDistributor(TestCase):
         """
         Check distributor app work fine with maximum workers
         """
-        self.verify(len(self.dut_ports) >= 1, "Not enough ports")
+        self.verify(len(self.sut_ports) >= 1, "Not enough ports")
 
         cmd_fmt = "%s %s -- -p 0x1"
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "sed -n '/#define RTE_DISTRIB_MAX_WORKERS/p' lib/distributor/distributor_private.h",
             "# ",
             trim_whitespace=False,
@@ -152,49 +152,49 @@  class TestDistributor(TestCase):
 
         max_workers = int(m.group(1))
         cores = self._get_thread_lcore(max_workers - 1 + 4)
-        eal_para = self.dut.create_eal_parameters(cores=cores, ports=[0])
+        eal_para = self.sut_node.create_eal_parameters(cores=cores, ports=[0])
         cmd = cmd_fmt % (self.app_distributor_path, eal_para)
-        self.dut.send_expect(cmd, "doing packet RX", timeout=30)
+        self.sut_node.send_expect(cmd, "doing packet RX", timeout=30)
 
-        tx_port = self.tester.get_local_port(self.dut_ports[0])
+        tx_port = self.tg_node.get_local_port(self.sut_ports[0])
         tgen_input = [(tx_port, tx_port)]
-        self.tester.check_random_pkts(tgen_input, pktnum=256, seq_check=True)
+        self.tg_node.check_random_pkts(tgen_input, pktnum=256, seq_check=True)
 
-        self.dut.send_expect("^C", "#")
+        self.sut_node.send_expect("^C", "#")
 
     def test_multiple_ports(self):
         """
         Check distributor app work fine with multiple ports
         """
-        self.verify(len(self.dut_ports) >= 2, "Not enough ports")
+        self.verify(len(self.sut_ports) >= 2, "Not enough ports")
 
         cmd_fmt = "%s %s -- -p 0x3"
-        socket = self.dut.get_numa_id(self.dut_ports[0])
-        cores = self.dut.get_core_list("1S/%dC/1T" % (2 + 4), socket)
+        socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        cores = self.sut_node.get_core_list("1S/%dC/1T" % (2 + 4), socket)
 
-        eal_para = self.dut.create_eal_parameters(cores=cores, ports=[0, 1])
+        eal_para = self.sut_node.create_eal_parameters(cores=cores, ports=[0, 1])
         cmd = cmd_fmt % (self.app_distributor_path, eal_para)
-        self.dut.send_expect(cmd, "doing packet RX", timeout=30)
+        self.sut_node.send_expect(cmd, "doing packet RX", timeout=30)
 
-        tx_port = self.tester.get_local_port(self.dut_ports[0])
-        rx_port = self.tester.get_local_port(self.dut_ports[1])
+        tx_port = self.tg_node.get_local_port(self.sut_ports[0])
+        rx_port = self.tg_node.get_local_port(self.sut_ports[1])
         tgen_input = [(tx_port, rx_port)]
-        self.tester.check_random_pkts(tgen_input, pktnum=256, seq_check=True)
+        self.tg_node.check_random_pkts(tgen_input, pktnum=256, seq_check=True)
 
         tgen_input = [(rx_port, tx_port)]
-        self.tester.check_random_pkts(tgen_input, pktnum=256, seq_check=True)
+        self.tg_node.check_random_pkts(tgen_input, pktnum=256, seq_check=True)
 
-        self.dut.send_expect("^C", "#")
+        self.sut_node.send_expect("^C", "#")
 
     def _get_thread_lcore(self, core_num):
         def strip_core(x):
             return int(x["thread"])
 
-        cores = list(map(strip_core, self.dut.cores[0:core_num]))
+        cores = list(map(strip_core, self.sut_node.cores[0:core_num]))
         return cores
 
     def hook_transmission_func(self):
-        self.app_output = self.dut.session.get_session_before(timeout=2)
+        self.app_output = self.sut_node.session.get_session_before(timeout=2)
 
     def strip_performance_data(self, output=""):
         """
diff --git a/tests/TestSuite_dpdk_gro_lib.py b/tests/TestSuite_dpdk_gro_lib.py
index 0c75334b..76edb6ae 100644
--- a/tests/TestSuite_dpdk_gro_lib.py
+++ b/tests/TestSuite_dpdk_gro_lib.py
@@ -22,15 +22,15 @@  class TestDPDKGROLib(TestCase):
     def set_up_all(self):
         # This suite will not use the port config in ports.cfg
         # it will use the port config in vhost_peer_conf.cfg
-        # And it need two interface reconnet in DUT
+        # And it need two interface reconnet in SUT
 
         # unbind the port which config in ports.cfg
-        self.dut_ports = self.dut.get_ports()
-        self.def_driver = self.dut.ports_info[self.dut_ports[0]][
+        self.sut_ports = self.sut_node.get_ports()
+        self.def_driver = self.sut_node.ports_info[self.sut_ports[0]][
             "port"
         ].get_nic_driver()
-        for i in self.dut_ports:
-            port = self.dut.ports_info[i]["port"]
+        for i in self.sut_ports:
+            port = self.sut_node.ports_info[i]["port"]
             port.bind_driver()
         # get and bind the port in config file
         self.pci = peer.get_pci_info()
@@ -44,11 +44,11 @@  class TestDPDKGROLib(TestCase):
             and len(self.nic_in_kernel) != 0,
             "Pls config the direct connection info in vhost_peer_conf.cfg",
         )
-        bind_script_path = self.dut.get_dpdk_bind_script()
-        self.dut.send_expect(
+        bind_script_path = self.sut_node.get_dpdk_bind_script()
+        self.sut_node.send_expect(
             "%s --bind=%s %s" % (bind_script_path, self.def_driver, self.pci), "# "
         )
-        self.path = self.dut.apps_name["test-pmd"]
+        self.path = self.sut_node.apps_name["test-pmd"]
         self.testpmd_name = self.path.split("/")[-1]
 
         # get the numa info about the pci info which config in peer cfg
@@ -60,24 +60,24 @@  class TestDPDKGROLib(TestCase):
         # get core list on this socket, 2 cores for testpmd, 1 core for qemu
         cores_config = "1S/3C/1T"
         self.verify(
-            self.dut.number_of_cores >= 3,
+            self.sut_node.number_of_cores >= 3,
             "There has not enought cores to test this case %s" % self.suite_name,
         )
-        cores_list = self.dut.get_core_list("1S/3C/1T", socket=self.socket)
+        cores_list = self.sut_node.get_core_list("1S/3C/1T", socket=self.socket)
         self.vhost_list = cores_list[0:2]
         self.qemu_cpupin = cores_list[2:3][0]
 
         # Set the params for VM
         self.virtio_ip1 = "1.1.1.2"
         self.virtio_mac1 = "52:54:00:00:00:01"
-        self.memory_channel = self.dut.get_memory_channels()
-        if len(set([int(core["socket"]) for core in self.dut.cores])) == 1:
+        self.memory_channel = self.sut_node.get_memory_channels()
+        if len(set([int(core["socket"]) for core in self.sut_node.cores])) == 1:
             self.socket_mem = "1024"
         else:
             self.socket_mem = "1024,1024"
         self.prepare_dpdk()
-        self.base_dir = self.dut.base_dir.replace("~", "/root")
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.base_dir = self.sut_node.base_dir.replace("~", "/root")
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
         # get cbdma device
         self.cbdma_dev_infos = []
         self.dmas_info = None
@@ -88,15 +88,15 @@  class TestDPDKGROLib(TestCase):
         # Run before each test case.
         #
         # Clean the execution ENV
-        self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def get_cbdma_ports_info_and_bind_to_dpdk(self, cbdma_num):
         """
         get all cbdma ports
         """
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --status-dev dma", "# ", 30
         )
         device_info = out.split("\n")
@@ -125,7 +125,7 @@  class TestDPDKGROLib(TestCase):
             dmas_info += dmas
         self.dmas_info = dmas_info[:-1]
         self.device_str = " ".join(self.cbdma_dev_infos)
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --force --bind=%s %s"
             % (self.drivername, self.device_str),
             "# ",
@@ -134,11 +134,11 @@  class TestDPDKGROLib(TestCase):
 
     def bind_cbdma_device_to_kernel(self):
         if self.device_str is not None:
-            self.dut.send_expect("modprobe ioatdma", "# ")
-            self.dut.send_expect(
+            self.sut_node.send_expect("modprobe ioatdma", "# ")
+            self.sut_node.send_expect(
                 "./usertools/dpdk-devbind.py -u %s" % self.device_str, "# ", 30
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "./usertools/dpdk-devbind.py --force --bind=ioatdma  %s"
                 % self.device_str,
                 "# ",
@@ -155,7 +155,7 @@  class TestDPDKGROLib(TestCase):
         # mode 5 : tcp traffice light mode with cdbma enable
         if mode == 5:
             self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=2)
-            eal_param = self.dut.create_eal_parameters(
+            eal_param = self.sut_node.create_eal_parameters(
                 cores=self.vhost_list,
                 vdevs=[
                     "'net_vhost0,iface=%s/vhost-net,queues=%s,dmas=[%s]'"
@@ -165,10 +165,10 @@  class TestDPDKGROLib(TestCase):
             self.testcmd_start = (
                 self.path + eal_param + " -- -i --txd=1024 --rxd=1024 --txq=2 --rxq=2"
             )
-            self.vhost_user = self.dut.new_session(suite="user")
+            self.vhost_user = self.sut_node.new_session(suite="user")
             self.vhost_user.send_expect(self.testcmd_start, "testpmd> ", 120)
         else:
-            eal_param = self.dut.create_eal_parameters(
+            eal_param = self.sut_node.create_eal_parameters(
                 cores=self.vhost_list,
                 vdevs=[
                     "net_vhost0,iface=%s/vhost-net,queues=%s" % (self.base_dir, queue)
@@ -180,7 +180,7 @@  class TestDPDKGROLib(TestCase):
                 + eal_param
                 + " -- -i  --enable-hw-vlan-strip --tx-offloads=0x00 --txd=1024 --rxd=1024"
             )
-            self.vhost_user = self.dut.new_session(suite="user")
+            self.vhost_user = self.sut_node.new_session(suite="user")
             self.vhost_user.send_expect(self.testcmd_start, "testpmd> ", 120)
             self.set_testpmd_params()
 
@@ -224,54 +224,54 @@  class TestDPDKGROLib(TestCase):
     def quit_testpmd(self):
         # Quit testpmd and close temp ssh session
         self.vhost_user.send_expect("quit", "#", 120)
-        self.dut.close_session(self.vhost_user)
+        self.sut_node.close_session(self.vhost_user)
 
     def config_kernel_nic_host(self, mode=1):
         if mode == 0:
-            self.dut.send_expect("ip netns del ns1", "#")
-            self.dut.send_expect("ip netns add ns1", "#")
-            self.dut.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
-            self.dut.send_expect(
+            self.sut_node.send_expect("ip netns del ns1", "#")
+            self.sut_node.send_expect("ip netns add ns1", "#")
+            self.sut_node.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
+            self.sut_node.send_expect(
                 "ip netns exec ns1 ifconfig %s 1.1.1.8 up" % self.nic_in_kernel, "#"
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "ip netns exec ns1 ethtool -K %s tso on" % self.nic_in_kernel, "#"
             )
         if mode == 1:
-            self.dut.send_expect("ip netns del ns1", "#")
-            self.dut.send_expect("ip netns add ns1", "#")
-            self.dut.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
-            self.dut.send_expect(
+            self.sut_node.send_expect("ip netns del ns1", "#")
+            self.sut_node.send_expect("ip netns add ns1", "#")
+            self.sut_node.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
+            self.sut_node.send_expect(
                 "ip netns exec ns1 ifconfig %s 1.1.2.4/24 up" % self.nic_in_kernel, "#"
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "ip netns exec ns1 ip link add vxlan1 type vxlan id 42 dev %s dstport 4789"
                 % self.nic_in_kernel,
                 "#",
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "ip netns exec ns1 bridge fdb append to 00:00:00:00:00:00 dst 1.1.2.3 dev vxlan1",
                 "#",
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "ip netns exec ns1 ip addr add 50.1.1.1/24 dev vxlan1", "#"
             )
-            self.dut.send_expect("ip netns exec ns1 ip link set up dev vxlan1", "#")
+            self.sut_node.send_expect("ip netns exec ns1 ip link set up dev vxlan1", "#")
 
     def prepare_dpdk(self):
         #
         # Changhe the testpmd checksum fwd code for mac change
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./app/test-pmd/csumonly.c ./app/test-pmd/csumonly_backup.c", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./drivers/net/vhost/rte_eth_vhost.c ./drivers/net/vhost/rte_eth_vhost-backup.c",
             "#",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/ether_addr_copy(&peer_eth/i\#if 0' ./app/test-pmd/csumonly.c", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/parse_ethernet(eth_hdr, &info/i\#endif' ./app/test-pmd/csumonly.c",
             "#",
         )
@@ -290,30 +290,30 @@  class TestDPDKGROLib(TestCase):
             + "DEV_RX_OFFLOAD_IPV4_CKSUM | "
             + "DEV_RX_OFFLOAD_TCP_LRO;"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i 's/DEV_TX_OFFLOAD_VLAN_INSERT;/%s/' drivers/net/vhost/rte_eth_vhost.c"
             % tx_offload,
             "#",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i 's/DEV_RX_OFFLOAD_VLAN_STRIP;/%s/' drivers/net/vhost/rte_eth_vhost.c"
             % rx_offload,
             "#",
         )
-        self.dut.build_install_dpdk(self.dut.target)
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     def unprepare_dpdk(self):
         # Recovery the DPDK code to original
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./app/test-pmd/csumonly_backup.c ./app/test-pmd/csumonly.c ", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./drivers/net/vhost/rte_eth_vhost-backup.c ./drivers/net/vhost/rte_eth_vhost.c ",
             "#",
         )
-        self.dut.send_expect("rm -rf ./app/test-pmd/csumonly_backup.c", "#")
-        self.dut.send_expect("rm -rf ./drivers/net/vhost/rte_eth_vhost-backup.c", "#")
-        self.dut.build_install_dpdk(self.dut.target)
+        self.sut_node.send_expect("rm -rf ./app/test-pmd/csumonly_backup.c", "#")
+        self.sut_node.send_expect("rm -rf ./drivers/net/vhost/rte_eth_vhost-backup.c", "#")
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     def set_vm_cpu_number(self, vm_config):
         # config the vcpu numbers = 1
@@ -325,7 +325,7 @@  class TestDPDKGROLib(TestCase):
                 vm_config.params[i]["cpu"][0]["cpupin"] = self.qemu_cpupin
 
     def start_vm(self, mode=1, queue=1):
-        self.vm1 = VM(self.dut, "vm0", "vhost_sample")
+        self.vm1 = VM(self.sut_node, "vm0", "vhost_sample")
         self.vm1.load_config()
         vm_params_1 = {}
         vm_params_1["driver"] = "vhost-user"
@@ -343,18 +343,18 @@  class TestDPDKGROLib(TestCase):
         self.vm1.set_vm_device(**vm_params_1)
         self.set_vm_cpu_number(self.vm1)
         try:
-            self.vm1_dut = self.vm1.start(load_config=False, set_target=False)
-            if self.vm1_dut is None:
+            self.vm1_sut = self.vm1.start(load_config=False, set_target=False)
+            if self.vm1_sut is None:
                 raise Exception("Set up VM ENV failed")
         except Exception as e:
             print((utils.RED("Failure for %s" % str(e))))
-        self.vm1_dut.restore_interfaces()
+        self.vm1_sut.restore_interfaces()
 
     def iperf_result_verify(self, run_info):
         """
         Get the iperf test result
         """
-        fmsg = self.dut.send_expect("cat /root/iperf_client.log", "#")
+        fmsg = self.sut_node.send_expect("cat /root/iperf_client.log", "#")
         print(fmsg)
         iperfdata = re.compile("[\d+]*.[\d+]* [M|G|K]bits/sec").findall(fmsg)
         print(iperfdata)
@@ -381,20 +381,20 @@  class TestDPDKGROLib(TestCase):
         self.launch_testpmd_gro_on()
         self.start_vm()
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("iperf -s", "", 10)
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("iperf -s", "", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 1 -t 10 -P 1> /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -403,10 +403,10 @@  class TestDPDKGROLib(TestCase):
         time.sleep(30)
         tc1_perfdata = self.iperf_result_verify("GRO lib")
         print(("the GRO lib %s " % (self.output_result)))
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
         # Turn off DPDK GRO lib and Kernel GRO off
         self.set_testpmd_gro_off()
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 1 -t 10  -P 1 > /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -415,10 +415,10 @@  class TestDPDKGROLib(TestCase):
         time.sleep(30)
         self.iperf_result_verify("Kernel GRO")
         print(("the Kernel GRO %s " % (self.output_result)))
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
-        self.dut.send_expect(
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect(
             "echo %s > /root/dpdk_gro_lib_on_iperf_tc1.log" % tc1_perfdata, "#", 10
         )
 
@@ -428,20 +428,20 @@  class TestDPDKGROLib(TestCase):
         self.launch_testpmd_gro_on(self.heavymode)
         self.start_vm()
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("iperf -s", "", 10)
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("iperf -s", "", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 1 -t 10 -P 1> /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -450,9 +450,9 @@  class TestDPDKGROLib(TestCase):
         time.sleep(30)
         self.iperf_result_verify("GRO lib")
         print(("the GRO lib %s " % (self.output_result)))
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_vhost_gro_tcp_heavymode_flush4(self):
         self.config_kernel_nic_host(0)
@@ -460,20 +460,20 @@  class TestDPDKGROLib(TestCase):
         self.launch_testpmd_gro_on(self.heavymode)
         self.start_vm()
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("iperf -s", "", 10)
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("iperf -s", "", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 1 -t 10 -P 1> /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -482,9 +482,9 @@  class TestDPDKGROLib(TestCase):
         time.sleep(30)
         self.iperf_result_verify("GRO lib")
         print(("the GRO lib %s " % (self.output_result)))
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_vhost_gro_tcp_ipv4_with_cbdma_enable(self):
         self.config_kernel_nic_host(0)
@@ -492,21 +492,21 @@  class TestDPDKGROLib(TestCase):
         self.launch_testpmd_gro_on(self.heavymode, queue=2)
         self.start_vm(mode=5, queue=2)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s up" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ethtool -L %s combined 2" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("ethtool -L %s combined 2" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
         self.set_testpmd_params()
-        self.vm1_dut.send_expect("iperf -s", "", 10)
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        out = self.dut.send_expect(
+        self.vm1_sut.send_expect("iperf -s", "", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
+        out = self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 1 -t 60 -m -P 2 > /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -516,10 +516,10 @@  class TestDPDKGROLib(TestCase):
         print(out)
         perfdata = self.iperf_result_verify("GRO lib")
         print(("the GRO lib %s " % (self.output_result)))
-        # self.dut.send_expect('rm /root/iperf_client.log', '#', 10)
+        # self.sut_node.send_expect('rm /root/iperf_client.log', '#', 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
-        exp_perfdata = self.dut.send_expect(
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
+        exp_perfdata = self.sut_node.send_expect(
             "cat /root/dpdk_gro_lib_on_iperf_tc5.log", "#"
         )
         self.verify(
@@ -541,20 +541,20 @@  class TestDPDKGROLib(TestCase):
         self.launch_testpmd_gro_on(mode=1, queue=2)
         self.start_vm(mode=1, queue=2)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("iperf -s", "", 10)
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("iperf -s", "", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 2 -t 60 -f g -m > /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -563,10 +563,10 @@  class TestDPDKGROLib(TestCase):
         time.sleep(60)
         perfdata = self.iperf_result_verify("GRO lib")
         print(("the GRO lib %s " % (self.output_result)))
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
         # Turn off DPDK GRO lib and Kernel GRO off
         self.set_testpmd_gro_off()
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 2 -t 60 -f g -m > /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -575,10 +575,10 @@  class TestDPDKGROLib(TestCase):
         time.sleep(60)
         self.iperf_result_verify("Kernel GRO")
         print(("the Kernel GRO %s " % (self.output_result)))
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
-        self.dut.send_expect(
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect(
             "echo %s > /root/dpdk_gro_lib_on_iperf_tc5.log" % perfdata, "#", 10
         )
 
@@ -586,15 +586,15 @@  class TestDPDKGROLib(TestCase):
         """
         Run after each test case.
         """
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
-        self.dut.send_expect("rm -rf %s/vhost-net" % self.base_dir, "#")
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("rm -rf %s/vhost-net" % self.base_dir, "#")
         time.sleep(2)
-        self.dut.send_expect("ip netns del ns1", "# ", 30)
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "# ", 30)
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -u %s" % (self.peer_pci), "# ", 30
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -b %s %s" % (self.pci_drv, self.peer_pci),
             "# ",
             30,
@@ -605,12 +605,12 @@  class TestDPDKGROLib(TestCase):
         """
         Run after each test suite.
         """
-        for i in self.dut_ports:
-            port = self.dut.ports_info[i]["port"]
+        for i in self.sut_ports:
+            port = self.sut_node.ports_info[i]["port"]
             port.bind_driver(self.def_driver)
         self.unprepare_dpdk()
-        self.dut.send_expect("ip netns del ns1", "# ", 30)
-        self.dut.send_expect("./usertools/dpdk-devbind.py -u %s" % (self.pci), "# ", 30)
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "# ", 30)
+        self.sut_node.send_expect("./usertools/dpdk-devbind.py -u %s" % (self.pci), "# ", 30)
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -b %s %s" % (self.pci_drv, self.pci), "# ", 30
         )
diff --git a/tests/TestSuite_dpdk_gro_lib_cbdma.py b/tests/TestSuite_dpdk_gro_lib_cbdma.py
index 50eb58c5..b571d00f 100644
--- a/tests/TestSuite_dpdk_gro_lib_cbdma.py
+++ b/tests/TestSuite_dpdk_gro_lib_cbdma.py
@@ -21,9 +21,9 @@  from framework.virt_common import VM
 
 class TestDPDKGROLibCbdma(TestCase):
     def set_up_all(self):
-        self.dut_ports = self.dut.get_ports()
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
-        self.def_driver = self.dut.ports_info[self.dut_ports[0]][
+        self.sut_ports = self.sut_node.get_ports()
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        self.def_driver = self.sut_node.ports_info[self.sut_ports[0]][
             "port"
         ].get_nic_driver()
         self.pci = peer.get_pci_info()
@@ -37,37 +37,37 @@  class TestDPDKGROLibCbdma(TestCase):
             and len(self.nic_in_kernel) != 0,
             "Pls config the direct connection info in vhost_peer_conf.cfg",
         )
-        bind_script_path = self.dut.get_dpdk_bind_script()
-        self.dut.send_expect(
+        bind_script_path = self.sut_node.get_dpdk_bind_script()
+        self.sut_node.send_expect(
             "%s --bind=%s %s" % (bind_script_path, self.def_driver, self.pci), "# "
         )
-        self.path = self.dut.apps_name["test-pmd"]
+        self.path = self.sut_node.apps_name["test-pmd"]
         self.testpmd_name = self.path.split("/")[-1]
-        cores_list = self.dut.get_core_list(config="all", socket=self.ports_socket)
+        cores_list = self.sut_node.get_core_list(config="all", socket=self.ports_socket)
         self.vhost_list = cores_list[0:3]
         self.qemu_cpupin = cores_list[3:4][0]
 
         # Set the params for VM
         self.virtio_ip1 = "1.1.1.2"
         self.virtio_mac1 = "52:54:00:00:00:01"
-        self.memory_channel = self.dut.get_memory_channels()
-        if len(set([int(core["socket"]) for core in self.dut.cores])) == 1:
+        self.memory_channel = self.sut_node.get_memory_channels()
+        if len(set([int(core["socket"]) for core in self.sut_node.cores])) == 1:
             self.socket_mem = "1024"
         else:
             self.socket_mem = "1024,1024"
         self.prepare_dpdk()
-        self.base_dir = self.dut.base_dir.replace("~", "/root")
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
-        self.vhost_user = self.dut.new_session(suite="vhost-user")
-        self.vhost_pmd = PmdOutput(self.dut, self.vhost_user)
+        self.base_dir = self.sut_node.base_dir.replace("~", "/root")
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        self.vhost_user = self.sut_node.new_session(suite="vhost-user")
+        self.vhost_pmd = PmdOutput(self.sut_node, self.vhost_user)
 
     def set_up(self):
         """
         Run before each test case.
         """
-        self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def get_cbdma_ports_info_and_bind_to_dpdk(self, cbdma_num, allow_diff_socket=False):
         """
@@ -76,7 +76,7 @@  class TestDPDKGROLibCbdma(TestCase):
         self.all_cbdma_list = []
         self.cbdma_list = []
         self.cbdma_str = ""
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --status-dev dma", "# ", 30
         )
         device_info = out.split("\n")
@@ -100,7 +100,7 @@  class TestDPDKGROLibCbdma(TestCase):
         )
         self.cbdma_list = self.all_cbdma_list[0:cbdma_num]
         self.cbdma_str = " ".join(self.cbdma_list)
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --force --bind=%s %s"
             % (self.drivername, self.cbdma_str),
             "# ",
@@ -108,11 +108,11 @@  class TestDPDKGROLibCbdma(TestCase):
         )
 
     def bind_cbdma_device_to_kernel(self):
-        self.dut.send_expect("modprobe ioatdma", "# ")
-        self.dut.send_expect(
+        self.sut_node.send_expect("modprobe ioatdma", "# ")
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -u %s" % self.cbdma_str, "# ", 30
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --force --bind=ioatdma  %s" % self.cbdma_str,
             "# ",
             60,
@@ -135,32 +135,32 @@  class TestDPDKGROLibCbdma(TestCase):
 
     def quit_testpmd(self):
         self.vhost_user.send_expect("quit", "#", 120)
-        self.dut.close_session(self.vhost_user)
+        self.sut_node.close_session(self.vhost_user)
 
     def config_kernel_nic_host(self):
-        self.dut.send_expect("ip netns del ns1", "#")
-        self.dut.send_expect("ip netns add ns1", "#")
-        self.dut.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "#")
+        self.sut_node.send_expect("ip netns add ns1", "#")
+        self.sut_node.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
+        self.sut_node.send_expect(
             "ip netns exec ns1 ifconfig %s 1.1.1.8 up" % self.nic_in_kernel, "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "ip netns exec ns1 ethtool -K %s tso on" % self.nic_in_kernel, "#"
         )
 
     def prepare_dpdk(self):
         # Changhe the testpmd checksum fwd code for mac change
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./app/test-pmd/csumonly.c ./app/test-pmd/csumonly_backup.c", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./drivers/net/vhost/rte_eth_vhost.c ./drivers/net/vhost/rte_eth_vhost-backup.c",
             "#",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/ether_addr_copy(&peer_eth/i\#if 0' ./app/test-pmd/csumonly.c", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/parse_ethernet(eth_hdr, &info/i\#endif' ./app/test-pmd/csumonly.c",
             "#",
         )
@@ -179,30 +179,30 @@  class TestDPDKGROLibCbdma(TestCase):
             + "RTE_ETH_RX_OFFLOAD_IPV4_CKSUM | "
             + "RTE_ETH_RX_OFFLOAD_TCP_LRO;"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i 's/RTE_ETH_TX_OFFLOAD_VLAN_INSERT;/%s/' drivers/net/vhost/rte_eth_vhost.c"
             % tx_offload,
             "#",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i 's/RTE_ETH_RX_OFFLOAD_VLAN_STRIP;/%s/' drivers/net/vhost/rte_eth_vhost.c"
             % rx_offload,
             "#",
         )
-        self.dut.build_install_dpdk(self.dut.target)
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     def unprepare_dpdk(self):
         # Recovery the DPDK code to original
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./app/test-pmd/csumonly_backup.c ./app/test-pmd/csumonly.c ", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./drivers/net/vhost/rte_eth_vhost-backup.c ./drivers/net/vhost/rte_eth_vhost.c ",
             "#",
         )
-        self.dut.send_expect("rm -rf ./app/test-pmd/csumonly_backup.c", "#")
-        self.dut.send_expect("rm -rf ./drivers/net/vhost/rte_eth_vhost-backup.c", "#")
-        self.dut.build_install_dpdk(self.dut.target)
+        self.sut_node.send_expect("rm -rf ./app/test-pmd/csumonly_backup.c", "#")
+        self.sut_node.send_expect("rm -rf ./drivers/net/vhost/rte_eth_vhost-backup.c", "#")
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     def set_vm_cpu_number(self, vm_config):
         # config the vcpu numbers = 1
@@ -214,7 +214,7 @@  class TestDPDKGROLibCbdma(TestCase):
                 vm_config.params[i]["cpu"][0]["cpupin"] = self.qemu_cpupin
 
     def start_vm(self, queue=1):
-        self.vm1 = VM(self.dut, "vm0", "vhost_sample")
+        self.vm1 = VM(self.sut_node, "vm0", "vhost_sample")
         self.vm1.load_config()
         vm_params_1 = {}
         vm_params_1["driver"] = "vhost-user"
@@ -227,18 +227,18 @@  class TestDPDKGROLibCbdma(TestCase):
         self.vm1.set_vm_device(**vm_params_1)
         self.set_vm_cpu_number(self.vm1)
         try:
-            self.vm1_dut = self.vm1.start(load_config=False, set_target=False)
-            if self.vm1_dut is None:
+            self.vm1_sut = self.vm1.start(load_config=False, set_target=False)
+            if self.vm1_sut is None:
                 raise Exception("Set up VM ENV failed")
         except Exception as e:
             print((utils.RED("Failure for %s" % str(e))))
-        self.vm1_dut.restore_interfaces()
+        self.vm1_sut.restore_interfaces()
 
     def iperf_result_verify(self, run_info):
         """
         Get the iperf test result
         """
-        fmsg = self.dut.send_expect("cat /root/iperf_client.log", "#")
+        fmsg = self.sut_node.send_expect("cat /root/iperf_client.log", "#")
         print(fmsg)
         iperfdata = re.compile("[\d+]*.[\d+]* [M|G|K]bits/sec").findall(fmsg)
         print(iperfdata)
@@ -260,8 +260,8 @@  class TestDPDKGROLibCbdma(TestCase):
             iperfdata_kb = float(tmp_value)
         return iperfdata_kb
 
-    def check_dut_perf_top_info(self, check_string):
-        self.dut.send_expect("perf top", "# ")
+    def check_sut_perf_top_info(self, check_string):
+        self.sut_node.send_expect("perf top", "# ")
 
     def test_vhost_gro_tcp_ipv4_with_cbdma_enable(self):
         """
@@ -295,17 +295,17 @@  class TestDPDKGROLibCbdma(TestCase):
         self.set_testpmd_params()
         self.start_vm(queue=2)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
-        for port in self.vm1_dut.ports_info:
+        self.sut_node.get_session_output(timeout=2)
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect(
             "ifconfig %s %s up" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ethtool -L %s combined 2" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("iperf -s", "", 10)
-        self.dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        out = self.dut.send_expect(
+        self.vm1_sut.send_expect("ethtool -L %s combined 2" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gro off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("iperf -s", "", 10)
+        self.sut_node.send_expect("rm /root/iperf_client.log", "#", 10)
+        out = self.sut_node.send_expect(
             "ip netns exec ns1 iperf -c %s -i 1 -t 60 -m -P 2 > /root/iperf_client.log &"
             % (self.virtio_ip1),
             "",
@@ -316,7 +316,7 @@  class TestDPDKGROLibCbdma(TestCase):
         perfdata = self.iperf_result_verify("GRO lib")
         print(("the GRO lib %s " % (self.output_result)))
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
         exp_perfdata = 10000000
         if exp_perfdata:
             self.verify(
@@ -329,15 +329,15 @@  class TestDPDKGROLibCbdma(TestCase):
         """
         Run after each test case.
         """
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
-        self.dut.send_expect("rm -rf %s/vhost-net" % self.base_dir, "#")
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("rm -rf %s/vhost-net" % self.base_dir, "#")
         time.sleep(2)
-        self.dut.send_expect("ip netns del ns1", "# ", 30)
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "# ", 30)
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -u %s" % (self.peer_pci), "# ", 30
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -b %s %s" % (self.pci_drv, self.peer_pci),
             "# ",
             30,
@@ -349,8 +349,8 @@  class TestDPDKGROLibCbdma(TestCase):
         Run after each test suite.
         """
         self.unprepare_dpdk()
-        self.dut.send_expect("ip netns del ns1", "# ", 30)
-        self.dut.send_expect("./usertools/dpdk-devbind.py -u %s" % (self.pci), "# ", 30)
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "# ", 30)
+        self.sut_node.send_expect("./usertools/dpdk-devbind.py -u %s" % (self.pci), "# ", 30)
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -b %s %s" % (self.pci_drv, self.pci), "# ", 30
         )
diff --git a/tests/TestSuite_dpdk_gso_lib.py b/tests/TestSuite_dpdk_gso_lib.py
index ee71bcd6..aae06e20 100644
--- a/tests/TestSuite_dpdk_gso_lib.py
+++ b/tests/TestSuite_dpdk_gso_lib.py
@@ -23,15 +23,15 @@  class TestDPDKGsoLib(TestCase):
     def set_up_all(self):
         # This suite will not use the port config in ports.cfg
         # it will use the port config in vhost_gro.cfg
-        # And it need two interface reconnet in DUT
+        # And it need two interface reconnet in SUT
 
         # unbind the port which config in ports.cfg
-        self.dut_ports = self.dut.get_ports()
-        self.def_driver = self.dut.ports_info[self.dut_ports[0]][
+        self.sut_ports = self.sut_node.get_ports()
+        self.def_driver = self.sut_node.ports_info[self.sut_ports[0]][
             "port"
         ].get_nic_driver()
-        for i in self.dut_ports:
-            port = self.dut.ports_info[i]["port"]
+        for i in self.sut_ports:
+            port = self.sut_node.ports_info[i]["port"]
             port.bind_driver()
 
         # get and bind the port in conf file
@@ -46,11 +46,11 @@  class TestDPDKGsoLib(TestCase):
             and len(self.nic_in_kernel) != 0,
             "Pls config the direct connection info in vhost_peer_conf.cfg",
         )
-        bind_script_path = self.dut.get_dpdk_bind_script()
-        self.dut.send_expect(
+        bind_script_path = self.sut_node.get_dpdk_bind_script()
+        self.sut_node.send_expect(
             "%s --bind=%s %s" % (bind_script_path, self.def_driver, self.pci), "# "
         )
-        self.path = self.dut.apps_name["test-pmd"]
+        self.path = self.sut_node.apps_name["test-pmd"]
         self.testpmd_name = self.path.split("/")[-1]
 
         # get the numa info about the pci info which config in peer cfg
@@ -62,33 +62,33 @@  class TestDPDKGsoLib(TestCase):
         # get core list on this socket, 2 cores for testpmd, 1 core for qemu
         cores_config = "1S/3C/1T"
         self.verify(
-            self.dut.number_of_cores >= 3,
+            self.sut_node.number_of_cores >= 3,
             "There has not enought cores to test this case %s" % self.suite_name,
         )
-        cores_list = self.dut.get_core_list("1S/3C/1T", socket=self.socket)
+        cores_list = self.sut_node.get_core_list("1S/3C/1T", socket=self.socket)
         self.vhost_list = cores_list[0:2]
         self.qemu_cpupin = cores_list[2:3][0]
 
         # Set the params for VM
         self.virtio_ip1 = "1.1.1.2"
         self.virtio_mac1 = "52:54:00:00:00:01"
-        self.memory_channel = self.dut.get_memory_channels()
+        self.memory_channel = self.sut_node.get_memory_channels()
         # set diff arg about mem_socket base on socket number
-        if len(set([int(core["socket"]) for core in self.dut.cores])) == 1:
+        if len(set([int(core["socket"]) for core in self.sut_node.cores])) == 1:
             self.socket_mem = "1024"
         else:
             self.socket_mem = "1024,1024"
 
         self.prepare_dpdk()
-        self.base_dir = self.dut.base_dir.replace("~", "/root")
+        self.base_dir = self.sut_node.base_dir.replace("~", "/root")
 
     def set_up(self):
         #
         # Run before each test case.
         # Clean the execution ENV
-        self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def launch_testpmd_gso_on(self, mode=0):
         # mode = 0: DPDK GSO for TCP Traffic
@@ -96,7 +96,7 @@  class TestDPDKGsoLib(TestCase):
         # mode = 2: DPDK GSO for Vxlan/GRE Traffic
         # mode = 3: TSO
         # mode = others: NO DPDK GSO/TSO
-        eal_param = self.dut.create_eal_parameters(
+        eal_param = self.sut_node.create_eal_parameters(
             cores=self.vhost_list,
             vdevs=["net_vhost0,iface=%s/vhost-net,queues=1" % self.base_dir],
             ports=[self.pci],
@@ -104,7 +104,7 @@  class TestDPDKGsoLib(TestCase):
         self.testcmd_start = (
             self.path + eal_param + " -- -i --tx-offloads=0x00 --txd=1024 --rxd=1024"
         )
-        self.vhost_user = self.dut.new_session(suite="user")
+        self.vhost_user = self.sut_node.new_session(suite="user")
         self.vhost_user.send_expect(self.testcmd_start, "testpmd> ", 120)
         self.vhost_user.send_expect("set fwd csum", "testpmd> ", 120)
         self.vhost_user.send_expect("stop", "testpmd> ", 120)
@@ -146,69 +146,69 @@  class TestDPDKGsoLib(TestCase):
     def quit_testpmd(self):
         # Quit testpmd and close temp ssh session
         self.vhost_user.send_expect("quit", "#", 120)
-        self.dut.close_session(self.vhost_user)
+        self.sut_node.close_session(self.vhost_user)
 
     def config_kernel_nic_host(self):
         #
-        self.dut.send_expect("ip netns del ns1", "#")
-        self.dut.send_expect("ip netns add ns1", "#")
-        self.dut.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "#")
+        self.sut_node.send_expect("ip netns add ns1", "#")
+        self.sut_node.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
+        self.sut_node.send_expect(
             "ip netns exec ns1 ifconfig %s 1.1.1.8 up" % self.nic_in_kernel, "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "ip netns exec ns1 ethtool -K %s gro on" % self.nic_in_kernel, "#"
         )
 
     def config_kernel_nic_host_for_vxlan(self):
-        self.dut.send_expect("ip netns del ns1", "#")
-        self.dut.send_expect("ip netns add ns1", "#")
-        self.dut.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "#")
+        self.sut_node.send_expect("ip netns add ns1", "#")
+        self.sut_node.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
+        self.sut_node.send_expect(
             "ip netns exec ns1 ifconfig %s 188.0.0.1 up" % self.nic_in_kernel, "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "ip netns exec ns1 ip link add vxlan100 type vxlan id 1000 remote 188.0.0.2 local 188.0.0.1 dstport 4789 dev %s"
             % self.nic_in_kernel,
             "#",
         )
-        self.dut.send_expect("ip netns exec ns1 ifconfig vxlan100 1.1.1.1/24 up", "#")
+        self.sut_node.send_expect("ip netns exec ns1 ifconfig vxlan100 1.1.1.1/24 up", "#")
 
     def config_kernel_nic_host_for_gre(self):
-        self.dut.send_expect("ip netns del ns1", "#")
-        self.dut.send_expect("ip netns add ns1", "#")
-        self.dut.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "#")
+        self.sut_node.send_expect("ip netns add ns1", "#")
+        self.sut_node.send_expect("ip link set %s netns ns1" % self.nic_in_kernel, "#")
+        self.sut_node.send_expect(
             "ip netns exec ns1 ifconfig %s 188.0.0.1 up" % self.nic_in_kernel, "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "ip netns exec ns1 ip tunnel add gre100 mode gre remote 188.0.0.2 local 188.0.0.1",
             "#",
         )
-        self.dut.send_expect("ip netns exec ns1 ifconfig gre100 1.1.1.1/24 up", "#")
+        self.sut_node.send_expect("ip netns exec ns1 ifconfig gre100 1.1.1.1/24 up", "#")
 
     def prepare_dpdk(self):
         # Changhe the testpmd checksum fwd code for mac change
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./app/test-pmd/csumonly.c ./app/test-pmd/csumonly_backup.c", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/ether_addr_copy(&peer_eth/i\#if 0' ./app/test-pmd/csumonly.c", "#"
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/parse_ethernet(eth_hdr, &info/i\#endif' ./app/test-pmd/csumonly.c",
             "#",
         )
-        self.dut.build_install_dpdk(self.dut.target)
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     def unprepare_dpdk(self):
         # Recovery the DPDK code to original
         time.sleep(5)
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "cp ./app/test-pmd/csumonly_backup.c ./app/test-pmd/csumonly.c ", "#"
         )
-        self.dut.send_expect("rm -rf ./app/test-pmd/csumonly_backup.c", "#")
-        self.dut.build_install_dpdk(self.dut.target)
+        self.sut_node.send_expect("rm -rf ./app/test-pmd/csumonly_backup.c", "#")
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     def set_vm_cpu_number(self, vm_config):
         # config the vcpu numbers = 1
@@ -225,7 +225,7 @@  class TestDPDKGsoLib(TestCase):
         mode 0 : VM will send big packet , above MTU
         mdoe 1:  VM only send packet under MTU
         """
-        self.vm1 = VM(self.dut, "vm0", "vhost_sample")
+        self.vm1 = VM(self.sut_node, "vm0", "vhost_sample")
         self.vm1.load_config()
         vm_params_1 = {}
         vm_params_1["driver"] = "vhost-user"
@@ -251,12 +251,12 @@  class TestDPDKGsoLib(TestCase):
 
         time.sleep(5)
         try:
-            self.vm1_dut = self.vm1.start(load_config=False, set_target=False)
-            if self.vm1_dut is None:
+            self.vm1_sut = self.vm1.start(load_config=False, set_target=False)
+            if self.vm1_sut is None:
                 raise Exception("Set up VM ENV failed")
         except Exception as e:
             print((utils.RED("Failure for %s" % str(e))))
-        self.vm1_dut.restore_interfaces()
+        self.vm1_sut.restore_interfaces()
 
     def iperf_result_verify(self, vm_client):
         """
@@ -284,29 +284,29 @@  class TestDPDKGsoLib(TestCase):
         self.launch_testpmd_gso_on(0)
         self.start_vm(0)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
-        self.vm1_dut.send_expect("sh /home/lei/dpdk/Guest_script.sh", "#", 60)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("sh /home/lei/dpdk/Guest_script.sh", "#", 60)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns exec ns1 iperf -s", "", 10)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns exec ns1 iperf -s", "", 10)
+        self.vm1_sut.send_expect(
             "iperf -c 1.1.1.8 -i 1 -t 10 -P 5 > /root/iperf_client.log &", "", 180
         )
         time.sleep(30)
-        self.dut.send_expect("^C", "#", 10)
-        self.iperf_result_verify(self.vm1_dut)
+        self.sut_node.send_expect("^C", "#", 10)
+        self.iperf_result_verify(self.vm1_sut)
         print(("the GSO lib for TCP traffic %s " % (self.output_result)))
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns del ns1", "#")
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns del ns1", "#")
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_vhost_gso_dpdk_udp(self):
         """
@@ -317,117 +317,117 @@  class TestDPDKGsoLib(TestCase):
         self.launch_testpmd_gso_on(1)
         self.start_vm(0)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns exec ns1 iperf -s -u", "", 10)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns exec ns1 iperf -s -u", "", 10)
+        self.vm1_sut.send_expect(
             "iperf -c 1.1.1.8 -i 1 -u -t 10 -l 9000 -b 10G -P 5 > /root/iperf_client.log &",
             "",
             60,
         )
         time.sleep(30)
-        self.dut.send_expect("^C", "#", 10)
-        self.iperf_result_verify(self.vm1_dut)
+        self.sut_node.send_expect("^C", "#", 10)
+        self.iperf_result_verify(self.vm1_sut)
         print(("the GSO lib for UDP traffic %s " % (self.output_result)))
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns del ns1", "#")
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns del ns1", "#")
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_vhost_tso_dpdk(self):
         self.config_kernel_nic_host()
         self.launch_testpmd_gso_on(3)
         self.start_vm(0)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns exec ns1 iperf -s", "", 10)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns exec ns1 iperf -s", "", 10)
+        self.vm1_sut.send_expect(
             "iperf -c 1.1.1.8 -i 1 -t 10 -P 5 > /root/iperf_client.log &", "", 180
         )
         time.sleep(30)
-        self.dut.send_expect("^C", "#", 10)
-        self.iperf_result_verify(self.vm1_dut)
+        self.sut_node.send_expect("^C", "#", 10)
+        self.iperf_result_verify(self.vm1_sut)
         print(("the TSO lib %s " % (self.output_result)))
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_kernel_gso_dpdk(self):
         self.config_kernel_nic_host()
         self.launch_testpmd_gso_on(4)
         self.start_vm(1)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gso on" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns exec ns1 iperf -s", "", 10)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gso on" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns exec ns1 iperf -s", "", 10)
+        self.vm1_sut.send_expect(
             "iperf -c 1.1.1.8 -i 1 -t 10 -P 5 > /root/iperf_client.log &", "", 180
         )
         time.sleep(30)
-        self.dut.send_expect("^C", "#", 10)
-        self.iperf_result_verify(self.vm1_dut)
+        self.sut_node.send_expect("^C", "#", 10)
+        self.iperf_result_verify(self.vm1_sut)
         print(("Kernel GSO %s " % (self.output_result)))
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_no_gso_dpdk(self):
         self.config_kernel_nic_host()
         self.launch_testpmd_gso_on(4)
         self.start_vm(1)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
         # Start the Iperf test
-        self.vm1_dut.send_expect("ifconfig -a", "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig -a", "#", 30)
+        self.vm1_sut.send_expect(
             "ifconfig %s %s" % (self.vm1_intf, self.virtio_ip1), "#", 10
         )
-        self.vm1_dut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
-        self.vm1_dut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns exec ns1 iperf -s", "", 10)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s up" % self.vm1_intf, "#", 10)
+        self.vm1_sut.send_expect("ethtool -K %s gso off" % (self.vm1_intf), "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns exec ns1 iperf -s", "", 10)
+        self.vm1_sut.send_expect(
             "iperf -c 1.1.1.8 -i 1 -t 10 -P 5 > /root/iperf_client.log &", "", 180
         )
         time.sleep(30)
-        self.dut.send_expect("^C", "#", 10)
-        self.iperf_result_verify(self.vm1_dut)
+        self.sut_node.send_expect("^C", "#", 10)
+        self.iperf_result_verify(self.vm1_sut)
         print(("NO GSO/TSO %s " % (self.output_result)))
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_vhost_gso_with_vxlan(self):
         """
@@ -437,32 +437,32 @@  class TestDPDKGsoLib(TestCase):
         self.launch_testpmd_gso_on(2)
         self.start_vm(2)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name and unbind virtio net
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
-        self.vm1_dut.send_expect("ifconfig %s 188.0.0.2 up" % self.vm1_intf, "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s 188.0.0.2 up" % self.vm1_intf, "#", 30)
+        self.vm1_sut.send_expect(
             "ip link add vxlan100 type vxlan id 1000 remote 188.0.0.1 local 188.0.0.2 dstport 4789 dev %s"
             % self.vm1_intf,
             "#",
             30,
         )
-        self.vm1_dut.send_expect("ifconfig vxlan100 1.1.1.2/24 up", "#", 30)
+        self.vm1_sut.send_expect("ifconfig vxlan100 1.1.1.2/24 up", "#", 30)
         # Start Iperf test
-        self.dut.send_expect("ip netns exec ns1 iperf -s ", "", 10)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.vm1_dut.send_expect(
+        self.sut_node.send_expect("ip netns exec ns1 iperf -s ", "", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.vm1_sut.send_expect(
             "iperf -c 1.1.1.1 -i 1 -t 10 -P 5 > /root/iperf_client.log &", "", 60
         )
         time.sleep(30)
-        self.dut.send_expect("^C", "#", 10)
-        self.iperf_result_verify(self.vm1_dut)
+        self.sut_node.send_expect("^C", "#", 10)
+        self.iperf_result_verify(self.vm1_sut)
         print(("the GSO lib for Vxlan traffic %s " % (self.output_result)))
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns del ns1", "#")
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns del ns1", "#")
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def test_vhost_gso_with_gre(self):
         """
@@ -472,38 +472,38 @@  class TestDPDKGsoLib(TestCase):
         self.launch_testpmd_gso_on(2)
         self.start_vm(2)
         time.sleep(5)
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         # Get the virtio-net device name and unbind virtio net
-        for port in self.vm1_dut.ports_info:
+        for port in self.vm1_sut.ports_info:
             self.vm1_intf = port["intf"]
-        self.vm1_dut.send_expect("ifconfig %s 188.0.0.2 up" % self.vm1_intf, "#", 30)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig %s 188.0.0.2 up" % self.vm1_intf, "#", 30)
+        self.vm1_sut.send_expect(
             "ip tunnel add gre100 mode gre remote 188.0.0.1 local 188.0.0.2", "#", 30
         )
-        self.vm1_dut.send_expect("ifconfig gre100 1.1.1.2/24 up", "#", 30)
-        self.dut.send_expect("ip netns exec ns1 iperf -s", "", 10)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.vm1_dut.send_expect(
+        self.vm1_sut.send_expect("ifconfig gre100 1.1.1.2/24 up", "#", 30)
+        self.sut_node.send_expect("ip netns exec ns1 iperf -s", "", 10)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.vm1_sut.send_expect(
             "iperf -c 1.1.1.1 -i 1 -t 10 -P 5 > /root/iperf_client.log &", "", 60
         )
         time.sleep(30)
-        self.dut.send_expect("^C", "#", 10)
-        self.iperf_result_verify(self.vm1_dut)
-        self.vm1_dut.send_expect("rm /root/iperf_client.log", "#", 10)
-        self.dut.send_expect("ip netns del ns1", "#")
+        self.sut_node.send_expect("^C", "#", 10)
+        self.iperf_result_verify(self.vm1_sut)
+        self.vm1_sut.send_expect("rm /root/iperf_client.log", "#", 10)
+        self.sut_node.send_expect("ip netns del ns1", "#")
         self.quit_testpmd()
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def tear_down(self):
         """
         Run after each test case.
         """
-        self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
-        self.dut.send_expect(
+        self.sut_node.send_expect("killall -s INT %s" % self.testpmd_name, "#")
+        self.sut_node.send_expect("killall -s INT qemu-system-x86_64", "#")
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -u %s" % (self.peer_pci), "# ", 30
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -b %s %s" % (self.pci_drv, self.peer_pci),
             "# ",
             30,
@@ -514,12 +514,12 @@  class TestDPDKGsoLib(TestCase):
         """
         Run after each test suite.
         """
-        for i in self.dut_ports:
-            port = self.dut.ports_info[i]["port"]
+        for i in self.sut_ports:
+            port = self.sut_node.ports_info[i]["port"]
             port.bind_driver(self.def_driver)
         self.unprepare_dpdk()
-        self.dut.send_expect("ip netns del ns1", "#", 30)
-        self.dut.send_expect("./usertools/dpdk-devbind.py -u %s" % (self.pci), "# ", 30)
-        self.dut.send_expect(
+        self.sut_node.send_expect("ip netns del ns1", "#", 30)
+        self.sut_node.send_expect("./usertools/dpdk-devbind.py -u %s" % (self.pci), "# ", 30)
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py -b %s %s" % (self.pci_drv, self.pci), "# ", 30
         )
diff --git a/tests/TestSuite_dpdk_hugetlbfs_mount_size.py b/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
index 6ab2bdbd..f7e85661 100644
--- a/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
+++ b/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
@@ -48,18 +48,18 @@  class DpdkHugetlbfsMountSize(TestCase):
         Run at the start of each test suite.
         """
         self.packet_num = 100
-        self.mem_channels = self.dut.get_memory_channels()
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
-        cores = self.dut.get_core_list("1S/6C/1T", socket=self.ports_socket)
+        self.mem_channels = self.sut_node.get_memory_channels()
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports for testing")
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        cores = self.sut_node.get_core_list("1S/6C/1T", socket=self.ports_socket)
         self.verify(len(cores) >= 6, "Insufficient cores for speed testing")
         self.core_list1 = ",".join(str(i) for i in cores[0:2])
         self.core_list2 = ",".join(str(i) for i in cores[2:4])
         self.core_list3 = ",".join(str(i) for i in cores[4:6])
-        self.pci_info_0 = self.dut.ports_info[0]["pci"]
-        self.pci_info_1 = self.dut.ports_info[1]["pci"]
-        self.numa_id = self.dut.get_numa_id(self.dut_ports[0])
+        self.pci_info_0 = self.sut_node.ports_info[0]["pci"]
+        self.pci_info_1 = self.sut_node.ports_info[1]["pci"]
+        self.numa_id = self.sut_node.get_numa_id(self.sut_ports[0])
         self.create_folder([MNT_PATH[0], MNT_PATH[1], MNT_PATH[2]])
         if self.numa_id == 0:
             self.socket_mem = "1024,0"
@@ -68,7 +68,7 @@  class DpdkHugetlbfsMountSize(TestCase):
             self.socket_mem = "0,1024"
             self.socket_mem2 = "0,2048"
         self.umount_huge([DEFAULT_MNT])
-        self.app_path = self.dut.apps_name["test-pmd"]
+        self.app_path = self.sut_node.apps_name["test-pmd"]
 
     def set_up(self):
         """
@@ -77,18 +77,18 @@  class DpdkHugetlbfsMountSize(TestCase):
         pass
 
     def close_session(self):
-        self.dut.close_session(self.session_first)
-        self.dut.close_session(self.session_secondary)
+        self.sut_node.close_session(self.session_first)
+        self.sut_node.close_session(self.session_secondary)
 
     def send_pkg(self, port_id):
-        tx_interface = self.tester.get_interface(
-            self.tester.get_local_port(self.dut_ports[port_id])
+        tx_interface = self.tg_node.get_interface(
+            self.tg_node.get_local_port(self.sut_ports[port_id])
         )
-        mac = self.dut.get_mac_address(self.dut_ports[port_id])
+        mac = self.sut_node.get_mac_address(self.sut_ports[port_id])
         cmd = 'sendp([Ether(dst="%s")/IP()/("X"*64)], iface="%s", count=%d)'
         excute_cmd = cmd % (mac, tx_interface, self.packet_num)
-        self.tester.scapy_append(excute_cmd)
-        self.tester.scapy_execute()
+        self.tg_node.scapy_append(excute_cmd)
+        self.tg_node.scapy_execute()
 
     def verify_result(self, session):
         out = session.send_expect("show port stats all", "testpmd> ", 120)
@@ -103,21 +103,21 @@  class DpdkHugetlbfsMountSize(TestCase):
     def create_folder(self, huges=[]):
         for huge in huges:
             cmd = "mkdir -p %s" % huge
-            self.dut.send_expect(cmd, "#", 15)
+            self.sut_node.send_expect(cmd, "#", 15)
 
     def del_folder(self, huges=[]):
         for huge in huges:
             cmd = "rm -rf %s" % huge
-            self.dut.send_expect(cmd, "#", 15)
+            self.sut_node.send_expect(cmd, "#", 15)
 
     def umount_huge(self, huges=[]):
         for huge in huges:
             cmd = "umount %s" % huge
-            self.dut.send_expect(cmd, "#", 15)
+            self.sut_node.send_expect(cmd, "#", 15)
 
     def test_default_hugepage_size(self):
         # Bind one nic port to igb_uio driver, launch testpmd
-        self.dut.send_expect("mount -t hugetlbfs hugetlbfs %s" % MNT_PATH[0], "#", 15)
+        self.sut_node.send_expect("mount -t hugetlbfs hugetlbfs %s" % MNT_PATH[0], "#", 15)
         self.logger.info("test default hugepage size start testpmd without numa")
         ttd = "%s -l %s -n %d --huge-dir %s --file-prefix=%s -a %s -- -i"
         launch_ttd = ttd % (
@@ -128,13 +128,13 @@  class DpdkHugetlbfsMountSize(TestCase):
             vhost_name[0],
             self.pci_info_0,
         )
-        self.dut.send_expect(launch_ttd, "testpmd> ", 120)
-        self.dut.send_expect("set promisc all off", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
-        self.dut.send_expect("clear port stats all", "testpmd> ", 120)
+        self.sut_node.send_expect(launch_ttd, "testpmd> ", 120)
+        self.sut_node.send_expect("set promisc all off", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("clear port stats all", "testpmd> ", 120)
         self.send_pkg(0)
-        self.verify_result(self.dut)
-        self.dut.send_expect("quit", "#", 15)
+        self.verify_result(self.sut_node)
+        self.sut_node.send_expect("quit", "#", 15)
 
         # resart testpmd with numa support
         self.logger.info("test default hugepage size start testpmd with numa")
@@ -149,23 +149,23 @@  class DpdkHugetlbfsMountSize(TestCase):
             vhost_name[0],
             self.pci_info_0,
         )
-        self.dut.send_expect(launch_ttd_secondary, "testpmd> ", 120)
-        self.dut.send_expect("set promisc all off", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
-        self.dut.send_expect("clear port stats all", "testpmd> ", 120)
+        self.sut_node.send_expect(launch_ttd_secondary, "testpmd> ", 120)
+        self.sut_node.send_expect("set promisc all off", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("clear port stats all", "testpmd> ", 120)
         self.send_pkg(0)
-        self.verify_result(self.dut)
-        self.dut.send_expect("quit", "#", 15)
+        self.verify_result(self.sut_node)
+        self.sut_node.send_expect("quit", "#", 15)
         self.umount_huge([MNT_PATH[0]])
 
     def test_mount_size_exactly_match_hugepage_size_two_mount_points(self):
         # Bind two nic ports to igb_uio driver, launch testpmd with numactl
-        self.session_first = self.dut.new_session(suite="session_first")
-        self.session_secondary = self.dut.new_session(suite="session_secondary")
-        self.dut.send_expect(
+        self.session_first = self.sut_node.new_session(suite="session_first")
+        self.session_secondary = self.sut_node.new_session(suite="session_secondary")
+        self.sut_node.send_expect(
             "mount -t hugetlbfs -o size=4G hugetlbfs %s" % MNT_PATH[0], "#", 15
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "mount -t hugetlbfs -o size=4G hugetlbfs %s" % MNT_PATH[1], "#", 15
         )
 
@@ -221,7 +221,7 @@  class DpdkHugetlbfsMountSize(TestCase):
 
     def test_mount_size_greater_than_hugepage_size_single_mount_point(self):
         # Bind one nic port to igb_uio driver
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "mount -t hugetlbfs -o size=9G hugetlbfs %s" % MNT_PATH[0], "#", 15
         )
         ttd = "%s -l %s -n %d --legacy-mem --huge-dir %s --file-prefix=%s -a %s -- -i"
@@ -233,26 +233,26 @@  class DpdkHugetlbfsMountSize(TestCase):
             vhost_name[0],
             self.pci_info_0,
         )
-        self.dut.send_expect(launch_ttd, "testpmd> ", 120)
-        self.dut.send_expect("set promisc all off", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
-        self.dut.send_expect("clear port stats all", "testpmd> ", 120)
+        self.sut_node.send_expect(launch_ttd, "testpmd> ", 120)
+        self.sut_node.send_expect("set promisc all off", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("clear port stats all", "testpmd> ", 120)
         self.send_pkg(0)
-        self.verify_result(self.dut)
-        self.dut.send_expect("quit", "#", 15)
+        self.verify_result(self.sut_node)
+        self.sut_node.send_expect("quit", "#", 15)
         self.umount_huge([MNT_PATH[0]])
 
     def test_mount_size_greater_than_hugepage_size_multiple_mount_points(self):
         # Bind one nic port to igb_uio driver, launch testpmd
-        self.session_first = self.dut.new_session(suite="session_first")
-        self.session_secondary = self.dut.new_session(suite="session_secondary")
-        self.dut.send_expect(
+        self.session_first = self.sut_node.new_session(suite="session_first")
+        self.session_secondary = self.sut_node.new_session(suite="session_secondary")
+        self.sut_node.send_expect(
             "mount -t hugetlbfs -o size=4G hugetlbfs %s" % MNT_PATH[0], "#", 15
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "mount -t hugetlbfs -o size=4G hugetlbfs %s" % MNT_PATH[1], "#", 15
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "mount -t hugetlbfs -o size=1G hugetlbfs %s" % MNT_PATH[2], "#", 15
         )
         # launch first testpmd
@@ -317,18 +317,18 @@  class DpdkHugetlbfsMountSize(TestCase):
             self.numa_id,
         )
         expect_str = "Not enough memory available on socket"
-        self.dut.get_session_output(timeout=2)
+        self.sut_node.get_session_output(timeout=2)
         try:
-            self.dut.send_expect(launch_ttd_third, expect_str, 120)
+            self.sut_node.send_expect(launch_ttd_third, expect_str, 120)
         except Exception as e:
             print(e)
-            self.dut.send_expect("quit", "#", 15)
+            self.sut_node.send_expect("quit", "#", 15)
             self.session_first.send_expect("quit", "#", 15)
             self.session_secondary.send_expect("quit", "#", 15)
             self.umount_huge([MNT_PATH[0], MNT_PATH[1], MNT_PATH[2]])
             self.verify(0, "the expect str: %s ,not in output info" % expect_str)
         self.logger.info("the third testpmd start failed as expect : %s" % expect_str)
-        result = self.dut.get_session_output(timeout=2)
+        result = self.sut_node.get_session_output(timeout=2)
         print(result)
 
         # start send packet and verify the session can receive the packet.
@@ -343,9 +343,9 @@  class DpdkHugetlbfsMountSize(TestCase):
 
     def test_run_dpdk_app_limited_hugepages_controlled_by_cgroup(self):
         # Bind one nic port to igb_uio driver, launch testpmd in limited hugepages
-        self.dut.send_expect("mount -t hugetlbfs nodev %s" % MNT_PATH[0], "#", 15)
-        self.dut.send_expect("cgcreate -g hugetlb:/test-subgroup", "# ", 15)
-        self.dut.send_expect(
+        self.sut_node.send_expect("mount -t hugetlbfs nodev %s" % MNT_PATH[0], "#", 15)
+        self.sut_node.send_expect("cgcreate -g hugetlb:/test-subgroup", "# ", 15)
+        self.sut_node.send_expect(
             "cgset -r hugetlb.1GB.limit_in_bytes=2147483648 test-subgroup", "#", 15
         )
         ttd = "cgexec -g hugetlb:test-subgroup numactl -m %d %s -l %s -n %d -a %s -- -i --socket-num=%d --no-numa"
@@ -357,13 +357,13 @@  class DpdkHugetlbfsMountSize(TestCase):
             self.pci_info_0,
             self.numa_id,
         )
-        self.dut.send_expect(launch_ttd, "testpmd> ", 120)
-        self.dut.send_expect("set promisc all off", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
-        self.dut.send_expect("clear port stats all", "testpmd> ", 120)
+        self.sut_node.send_expect(launch_ttd, "testpmd> ", 120)
+        self.sut_node.send_expect("set promisc all off", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("clear port stats all", "testpmd> ", 120)
         self.send_pkg(0)
-        self.verify_result(self.dut)
-        self.dut.send_expect("quit", "#", 15)
+        self.verify_result(self.sut_node)
+        self.sut_node.send_expect("quit", "#", 15)
         self.umount_huge([MNT_PATH[0]])
 
     def tear_down(self):
@@ -372,7 +372,7 @@  class DpdkHugetlbfsMountSize(TestCase):
         """
         # If case fails, the mount should be cancelled to avoid affecting next cases
         self.umount_huge([MNT_PATH[0], MNT_PATH[1], MNT_PATH[2]])
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         time.sleep(2)
 
     def tear_down_all(self):
@@ -381,4 +381,4 @@  class DpdkHugetlbfsMountSize(TestCase):
         """
         self.umount_huge([MNT_PATH[0], MNT_PATH[1], MNT_PATH[2]])
         self.del_folder([MNT_PATH[0], MNT_PATH[1], MNT_PATH[2]])
-        self.dut.send_expect("mount -t hugetlbfs nodev %s" % DEFAULT_MNT, "#", 15)
+        self.sut_node.send_expect("mount -t hugetlbfs nodev %s" % DEFAULT_MNT, "#", 15)
diff --git a/tests/TestSuite_dual_vlan.py b/tests/TestSuite_dual_vlan.py
index 99f47a82..ba8657f6 100644
--- a/tests/TestSuite_dual_vlan.py
+++ b/tests/TestSuite_dual_vlan.py
@@ -84,22 +84,22 @@  class TestDualVlan(TestCase):
 
         Vlan Prerequisites
         """
-        global dutRxPortId
-        global dutTxPortId
+        global sutRxPortId
+        global sutTxPortId
 
         # Based on h/w type, choose how many ports to use
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports")
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
 
-        cores = self.dut.get_core_list("1S/2C/2T")
+        cores = self.sut_node.get_core_list("1S/2C/2T")
         coreMask = utils.create_mask(cores)
-        valports = [_ for _ in self.dut_ports if self.tester.get_local_port(_) != -1]
+        valports = [_ for _ in self.sut_ports if self.tg_node.get_local_port(_) != -1]
         portMask = utils.create_mask(valports[:2])
-        dutRxPortId = valports[0]
-        dutTxPortId = valports[1]
+        sutRxPortId = valports[0]
+        sutTxPortId = valports[1]
 
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
         self.pmdout.start_testpmd(
             "Default", "--portmask=%s" % portMask, socket=self.ports_socket
         )
@@ -113,24 +113,24 @@  class TestDualVlan(TestCase):
             "I40E_10G-10G_BASE_T_BC",
             "I40E_10G-10G_BASE_T_X722",
         ]:
-            self.dut.send_expect("vlan set filter on all", "testpmd> ")
-            self.dut.send_expect("set promisc all off", "testpmd> ")
+            self.sut_node.send_expect("vlan set filter on all", "testpmd> ")
+            self.sut_node.send_expect("set promisc all off", "testpmd> ")
 
-        out = self.dut.send_expect("set fwd mac", "testpmd> ")
+        out = self.sut_node.send_expect("set fwd mac", "testpmd> ")
         self.verify("Set mac packet forwarding mode" in out, "set fwd mac error")
-        out = self.dut.send_expect("start", "testpmd> ", 120)
+        out = self.sut_node.send_expect("start", "testpmd> ", 120)
 
     def start_tcpdump(self, rxItf):
 
-        self.tester.send_expect("rm -rf ./getPackageByTcpdump.cap", "#")
-        self.tester.send_expect(
+        self.tg_node.send_expect("rm -rf ./getPackageByTcpdump.cap", "#")
+        self.tg_node.send_expect(
             "tcpdump -i %s -w ./getPackageByTcpdump.cap 2> /dev/null& " % rxItf, "#"
         )
 
     def get_tcpdump_package(self):
-        self.tester.send_expect("killall tcpdump", "#")
-        self.tester.send_expect(" ", "#")
-        return self.tester.send_expect(
+        self.tg_node.send_expect("killall tcpdump", "#")
+        self.tg_node.send_expect(" ", "#")
+        return self.tg_node.send_expect(
             "tcpdump -nn -e -v -r ./getPackageByTcpdump.cap", "#"
         )
 
@@ -138,12 +138,12 @@  class TestDualVlan(TestCase):
         """
         Send packet to portid
         """
-        txPort = self.tester.get_local_port(dutRxPortId)
-        rxPort = self.tester.get_local_port(dutTxPortId)
+        txPort = self.tg_node.get_local_port(sutRxPortId)
+        rxPort = self.tg_node.get_local_port(sutTxPortId)
 
-        txItf = self.tester.get_interface(txPort)
-        rxItf = self.tester.get_interface(rxPort)
-        mac = self.dut.get_mac_address(dutRxPortId)
+        txItf = self.tg_node.get_interface(txPort)
+        rxItf = self.tg_node.get_interface(rxPort)
+        mac = self.sut_node.get_mac_address(sutRxPortId)
 
         self.start_tcpdump(rxItf)
         vlanString = 'sendp([Ether(dst="%s")/' % mac
@@ -151,10 +151,10 @@  class TestDualVlan(TestCase):
             vlanString += "Dot1Q(id=0x8100,vlan=%s)/" % vid[i]
         vlanString += 'IP(len=46)],iface="%s", count=4)' % txItf
 
-        self.tester.scapy_append(vlanString)
+        self.tg_node.scapy_append(vlanString)
         # check link status before send pkg
-        self.pmdout.wait_link_status_up(self.dut_ports[0])
-        self.tester.scapy_execute()
+        self.pmdout.wait_link_status_up(self.sut_ports[0])
+        self.tg_node.scapy_execute()
 
     def mode_config(self, **modeName):
         """
@@ -174,28 +174,28 @@  class TestDualVlan(TestCase):
                 # Intel® Ethernet 700 Series NIC vlan filter can't close, if want close need remove rx_vlan
                 if mode == "filter":
                     if modeName[mode] == "off":
-                        self.dut.send_expect(
-                            "rx_vlan add %s %s" % (outvlan, dutRxPortId), "testpmd> "
+                        self.sut_node.send_expect(
+                            "rx_vlan add %s %s" % (outvlan, sutRxPortId), "testpmd> "
                         )
                         continue
                     else:
-                        self.dut.send_expect(
-                            "rx_vlan rm %s %s" % (outvlan, dutRxPortId), "testpmd> "
+                        self.sut_node.send_expect(
+                            "rx_vlan rm %s %s" % (outvlan, sutRxPortId), "testpmd> "
                         )
                         continue
 
             if mode == "stripq":
-                self.dut.send_expect(
-                    "vlan set %s %s %s,0" % (mode, modeName[mode], dutRxPortId),
+                self.sut_node.send_expect(
+                    "vlan set %s %s %s,0" % (mode, modeName[mode], sutRxPortId),
                     "testpmd> ",
                 )
             else:
-                self.dut.send_expect(
-                    "vlan set %s %s %s" % (mode, modeName[mode], dutRxPortId),
+                self.sut_node.send_expect(
+                    "vlan set %s %s %s" % (mode, modeName[mode], sutRxPortId),
                     "testpmd> ",
                 )
 
-        out = self.dut.send_expect("show port info %s" % dutRxPortId, "testpmd> ")
+        out = self.sut_node.send_expect("show port info %s" % sutRxPortId, "testpmd> ")
         for mode in modeName:
             if self.nic in [
                 "I40E_10G-SFP_XL710",
@@ -209,13 +209,13 @@  class TestDualVlan(TestCase):
                 # Intel® Ethernet 700 Series NIC vlan filter can't close, if want close need remove rx_vlan
                 if mode == "filter":
                     if modeName[mode] == "off":
-                        self.dut.send_expect(
-                            "rx_vlan add %s %s" % (outvlan, dutRxPortId), "testpmd> "
+                        self.sut_node.send_expect(
+                            "rx_vlan add %s %s" % (outvlan, sutRxPortId), "testpmd> "
                         )
                         continue
                     else:
-                        self.dut.send_expect(
-                            "rx_vlan rm %s %s" % (outvlan, dutRxPortId), "testpmd> "
+                        self.sut_node.send_expect(
+                            "rx_vlan rm %s %s" % (outvlan, sutRxPortId), "testpmd> "
                         )
                         continue
 
@@ -247,13 +247,13 @@  class TestDualVlan(TestCase):
         self.mode_config(strip=temp[0], filter=temp[1], extend=temp[2])
 
         if (caseDef & txCase) != 0:
-            self.dut.send_expect("stop", "testpmd> ")
-            self.dut.send_expect("port stop all", "testpmd> ")
-            self.dut.send_expect(
-                "tx_vlan set %s %s" % (dutTxPortId, txvlan), "testpmd> "
+            self.sut_node.send_expect("stop", "testpmd> ")
+            self.sut_node.send_expect("port stop all", "testpmd> ")
+            self.sut_node.send_expect(
+                "tx_vlan set %s %s" % (sutTxPortId, txvlan), "testpmd> "
             )
-            self.dut.send_expect("port start all", "testpmd> ")
-            self.dut.send_expect("start", "testpmd> ")
+            self.sut_node.send_expect("port start all", "testpmd> ")
+            self.sut_node.send_expect("start", "testpmd> ")
 
         configMode = "Strip %s, filter %s 0x1, extend %s, insert %s" % (
             temp[0],
@@ -263,49 +263,49 @@  class TestDualVlan(TestCase):
         )
 
         if (caseDef & filterCase) != 0:
-            self.dut.send_expect(
-                "rx_vlan add %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan add %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
             self.vlan_send_packet(outvlan, invlan)
             self.check_result(vlanCase[caseIndex][0], configMode + " result Error")
-            self.dut.send_expect(
-                "rx_vlan rm %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan rm %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
-            self.dut.send_expect(
-                "rx_vlan add %s %s" % (invlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan add %s %s" % (invlan, sutRxPortId), "testpmd> "
             )
             self.vlan_send_packet(outvlan, invlan)
             self.check_result(vlanCase[caseIndex][1], configMode + " result Error")
-            self.dut.send_expect(
-                "rx_vlan rm %s %s" % (invlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan rm %s %s" % (invlan, sutRxPortId), "testpmd> "
             )
             if (caseDef & txCase) != 0:
-                self.dut.send_expect("stop", "testpmd> ")
-                self.dut.send_expect("port stop all", "testpmd> ")
-                self.dut.send_expect("tx_vlan reset %s" % dutTxPortId, "testpmd> ")
-                self.dut.send_expect("port start all", "testpmd> ")
-                self.dut.send_expect("start", "testpmd> ")
+                self.sut_node.send_expect("stop", "testpmd> ")
+                self.sut_node.send_expect("port stop all", "testpmd> ")
+                self.sut_node.send_expect("tx_vlan reset %s" % sutTxPortId, "testpmd> ")
+                self.sut_node.send_expect("port start all", "testpmd> ")
+                self.sut_node.send_expect("start", "testpmd> ")
 
         else:
-            self.dut.send_expect(
-                "rx_vlan add %s %s" % (invlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan add %s %s" % (invlan, sutRxPortId), "testpmd> "
             )
-            self.dut.send_expect(
-                "rx_vlan add %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan add %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
             self.vlan_send_packet(outvlan, invlan)
             self.check_result(vlanCase[caseIndex], configMode + " result Error")
             if (caseDef & txCase) != 0:
-                self.dut.send_expect("stop", "testpmd> ")
-                self.dut.send_expect("port stop all", "testpmd> ")
-                self.dut.send_expect("tx_vlan reset %s" % dutTxPortId, "testpmd> ")
-                self.dut.send_expect("port start all", "testpmd> ")
-                self.dut.send_expect("start", "testpmd> ")
-            self.dut.send_expect(
-                "rx_vlan rm %s %s" % (invlan, dutRxPortId), "testpmd> "
+                self.sut_node.send_expect("stop", "testpmd> ")
+                self.sut_node.send_expect("port stop all", "testpmd> ")
+                self.sut_node.send_expect("tx_vlan reset %s" % sutTxPortId, "testpmd> ")
+                self.sut_node.send_expect("port start all", "testpmd> ")
+                self.sut_node.send_expect("start", "testpmd> ")
+            self.sut_node.send_expect(
+                "rx_vlan rm %s %s" % (invlan, sutRxPortId), "testpmd> "
             )
-            self.dut.send_expect(
-                "rx_vlan rm %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan rm %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
 
     def check_result(self, resultKey, errorString):
@@ -363,14 +363,14 @@  class TestDualVlan(TestCase):
             out = self.get_tcpdump_package()
             self.verify("vlan %s" % outvlan in out, "Vlan filter disable error: " + out)
         else:
-            self.dut.send_expect(
-                "rx_vlan add %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan add %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
             self.vlan_send_packet(outvlan)
             out = self.get_tcpdump_package()
             self.verify("vlan %s" % outvlan in out, "Vlan filter disable error: " + out)
-            self.dut.send_expect(
-                "rx_vlan rm %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan rm %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
 
     def test_vlan_filter_table(self):
@@ -382,14 +382,14 @@  class TestDualVlan(TestCase):
         self.mode_config(strip="off")
         self.mode_config(extend="off")
 
-        self.dut.send_expect("rx_vlan add %s %s" % (outvlan, dutRxPortId), "testpmd> ")
+        self.sut_node.send_expect("rx_vlan add %s %s" % (outvlan, sutRxPortId), "testpmd> ")
         self.vlan_send_packet(outvlan)
         out = self.get_tcpdump_package()
         self.verify(
             "vlan %s" % outvlan in out, "vlan filter table enable error: " + out
         )
 
-        self.dut.send_expect("rx_vlan rm %s %s" % (outvlan, dutRxPortId), "testpmd> ")
+        self.sut_node.send_expect("rx_vlan rm %s %s" % (outvlan, sutRxPortId), "testpmd> ")
         self.vlan_send_packet(outvlan)
         out = self.get_tcpdump_package()
         self.verify(
@@ -416,8 +416,8 @@  class TestDualVlan(TestCase):
             "I40E_10G-10G_BASE_T_BC",
             "I40E_10G-10G_BASE_T_X722",
         ]:
-            self.dut.send_expect(
-                "rx_vlan add %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan add %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
         self.vlan_send_packet(outvlan)
         out = self.get_tcpdump_package()
@@ -438,8 +438,8 @@  class TestDualVlan(TestCase):
             "I40E_10G-10G_BASE_T_BC",
             "I40E_10G-10G_BASE_T_X722",
         ]:
-            self.dut.send_expect(
-                "rx_vlan rm %s %s" % (outvlan, dutRxPortId), "testpmd> "
+            self.sut_node.send_expect(
+                "rx_vlan rm %s %s" % (outvlan, sutRxPortId), "testpmd> "
             )
 
     def test_vlan_stripq_config(self):
@@ -478,23 +478,23 @@  class TestDualVlan(TestCase):
 
         # IGB_1G-82574L need to set CTRL.VME for vlan insert
         if self.nic == "IGB_1G-82574L":
-            self.dut.send_expect("vlan set strip on %s" % dutTxPortId, "testpmd> ")
+            self.sut_node.send_expect("vlan set strip on %s" % sutTxPortId, "testpmd> ")
 
-        self.dut.send_expect("stop", "testpmd> ")
-        self.dut.send_expect("port stop all", "testpmd> ")
-        self.dut.send_expect("tx_vlan set %s %s" % (dutTxPortId, txvlan), "testpmd> ")
-        self.dut.send_expect("port start all", "testpmd> ")
-        self.dut.send_expect("start", "testpmd> ")
+        self.sut_node.send_expect("stop", "testpmd> ")
+        self.sut_node.send_expect("port stop all", "testpmd> ")
+        self.sut_node.send_expect("tx_vlan set %s %s" % (sutTxPortId, txvlan), "testpmd> ")
+        self.sut_node.send_expect("port start all", "testpmd> ")
+        self.sut_node.send_expect("start", "testpmd> ")
 
         self.vlan_send_packet()
         out = self.get_tcpdump_package()
         self.verify("vlan %s" % txvlan in out, "vlan insert enable error: " + out)
 
-        self.dut.send_expect("stop", "testpmd> ")
-        self.dut.send_expect("port stop all", "testpmd> ")
-        self.dut.send_expect("tx_vlan reset %s" % dutTxPortId, "testpmd> ")
-        self.dut.send_expect("port start all", "testpmd> ")
-        self.dut.send_expect("start", "testpmd> ")
+        self.sut_node.send_expect("stop", "testpmd> ")
+        self.sut_node.send_expect("port stop all", "testpmd> ")
+        self.sut_node.send_expect("tx_vlan reset %s" % sutTxPortId, "testpmd> ")
+        self.sut_node.send_expect("port start all", "testpmd> ")
+        self.sut_node.send_expect("start", "testpmd> ")
 
         self.vlan_send_packet()
         out = self.get_tcpdump_package()
@@ -520,14 +520,14 @@  class TestDualVlan(TestCase):
 
         self.mode_config(filter="on", strip="on", extend="on")
         # nic only support inner model, except Intel® Ethernet 700 Series nic
-        self.dut.send_expect("vlan set inner tpid 1234 %s" % dutRxPortId, "testpmd> ")
+        self.sut_node.send_expect("vlan set inner tpid 1234 %s" % sutRxPortId, "testpmd> ")
         self.vlan_send_packet(outvlan, invlan)
 
         out = self.get_tcpdump_package()
         self.verify("vlan %s" % outvlan in out, "vlan tpid disable error: " + out)
         self.verify("vlan %s" % invlan in out, "vlan tpid disable error: " + out)
 
-        self.dut.send_expect("vlan set inner tpid 0x8100 %s" % dutRxPortId, "testpmd> ")
+        self.sut_node.send_expect("vlan set inner tpid 0x8100 %s" % sutRxPortId, "testpmd> ")
         self.vlan_send_packet(outvlan, invlan)
 
         out = self.get_tcpdump_package()
@@ -566,5 +566,5 @@  class TestDualVlan(TestCase):
         """
         Run after each test suite.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         pass
diff --git a/tests/TestSuite_dynamic_config.py b/tests/TestSuite_dynamic_config.py
index 2812477a..16f35d50 100644
--- a/tests/TestSuite_dynamic_config.py
+++ b/tests/TestSuite_dynamic_config.py
@@ -38,26 +38,26 @@  class TestDynamicConfig(TestCase):
         """
 
         # Based on h/w type, choose how many ports to use
-        self.dut_ports = self.dut.get_ports(self.nic)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
 
         # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports")
 
         # Prepare cores and ports
-        self.portMask = utils.create_mask(self.dut_ports[:2])
-        self.path = self.dut.apps_name["test-pmd"]
+        self.portMask = utils.create_mask(self.sut_ports[:2])
+        self.path = self.sut_node.apps_name["test-pmd"]
         # launch app
-        self.eal_para = self.dut.create_eal_parameters(cores="1S/2C/2T")
-        self.dut.send_expect(
+        self.eal_para = self.sut_node.create_eal_parameters(cores="1S/2C/2T")
+        self.sut_node.send_expect(
             r"%s %s -- -i --rxpt=0 --rxht=0 --rxwt=0 --txpt=39 --txht=0 --txwt=0 --portmask=%s"
             % (self.path, self.eal_para, self.portMask),
             "testpmd>",
             120,
         )
         # get dest address from self.target port
-        out = self.dut.send_expect("show port info %d" % self.dut_ports[0], "testpmd> ")
+        out = self.sut_node.send_expect("show port info %d" % self.sut_ports[0], "testpmd> ")
 
-        self.dest = self.dut.get_mac_address(self.dut_ports[0])
+        self.dest = self.sut_node.get_mac_address(self.sut_ports[0])
         mac_scanner = r"MAC address: (([\dA-F]{2}:){5}[\dA-F]{2})"
 
         ret = utils.regexp(out, mac_scanner)
@@ -68,51 +68,51 @@  class TestDynamicConfig(TestCase):
             "Promiscuous mode: enabled" in out, "wrong default promiscuous value"
         )
 
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def dynamic_config_send_packet(self, portid, destMac="00:11:22:33:44:55"):
         """
         Send 1 packet to portid
         """
-        self.pmd_output = PmdOutput(self.dut)
+        self.pmd_output = PmdOutput(self.sut_node)
         res = self.pmd_output.wait_link_status_up("all", 30)
         self.verify(res is True, "there have port link is down")
 
-        itf = self.tester.get_interface(self.tester.get_local_port(portid))
+        itf = self.tg_node.get_interface(self.tg_node.get_local_port(portid))
 
-        self.tester.scapy_foreground()
-        self.tester.scapy_append(
+        self.tg_node.scapy_foreground()
+        self.tg_node.scapy_append(
             'sendp([Ether(dst="%s", src="52:00:00:00:00:00")/Raw(load="X"*26)], iface="%s", count=4)'
             % (destMac, itf)
         )
 
-        self.tester.scapy_execute()
+        self.tg_node.scapy_execute()
 
     def set_up(self):
         """
         Run before each test case.
         """
-        self.eal_para = self.dut.create_eal_parameters("1S/2C/2T")
-        self.dut.send_expect(
+        self.eal_para = self.sut_node.create_eal_parameters("1S/2C/2T")
+        self.sut_node.send_expect(
             r"%s %s -- -i --rxpt=0 --rxht=0 --rxwt=0 --txpt=39 --txht=0 --txwt=0 --portmask=%s"
             % (self.path, self.eal_para, self.portMask),
             "testpmd>",
             120,
         )
         time.sleep(5)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
 
     def test_dynamic_config_default_mode(self):
         """
         Dynamic config default mode test
         """
 
-        portid = self.dut_ports[0]
+        portid = self.sut_ports[0]
 
         # get the current rx statistic
-        out = self.dut.send_expect("clear port stats all", "testpmd> ")
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect("clear port stats all", "testpmd> ")
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
 
@@ -120,8 +120,8 @@  class TestDynamicConfig(TestCase):
         self.dynamic_config_send_packet(portid)
 
         pre_rxpkt = cur_rxpkt
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
 
@@ -134,8 +134,8 @@  class TestDynamicConfig(TestCase):
         self.dynamic_config_send_packet(portid, self.dest)
 
         pre_rxpkt = cur_rxpkt
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
 
@@ -149,25 +149,25 @@  class TestDynamicConfig(TestCase):
         Dynamic config disable promiscuous test
         """
 
-        portid = self.dut_ports[0]
+        portid = self.sut_ports[0]
 
-        self.dut.send_expect("set promisc all off", "testpmd> ")
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        self.sut_node.send_expect("set promisc all off", "testpmd> ")
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
 
         self.dynamic_config_send_packet(portid)
         pre_rxpkt = cur_rxpkt
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
         self.verify(int(cur_rxpkt) == int(pre_rxpkt), "1st packet increment error")
         self.dynamic_config_send_packet(portid, self.dest)
         pre_rxpkt = cur_rxpkt
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
         self.verify(int(cur_rxpkt) == int(pre_rxpkt) + 4, "2nd packet increment error")
@@ -179,23 +179,23 @@  class TestDynamicConfig(TestCase):
         and dst mac not port mac, dpdk will not received packet.
         """
 
-        self.dut.send_expect("set promisc all off", "testpmd> ")
-        self.dut.send_expect("set fwd io", "testpmd> ")
-        self.dut.send_expect("clear port stats all", "testpmd> ")
+        self.sut_node.send_expect("set promisc all off", "testpmd> ")
+        self.sut_node.send_expect("set fwd io", "testpmd> ")
+        self.sut_node.send_expect("clear port stats all", "testpmd> ")
 
-        self.dynamic_config_send_packet(self.dut_ports[0], "ff:ff:ff:ff:ff:ff")
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        self.dynamic_config_send_packet(self.sut_ports[0], "ff:ff:ff:ff:ff:ff")
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
 
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
         self.verify(int(cur_rxpkt) == 4, "not received broadcast packet")
 
-        self.dut.send_expect("clear port stats all", "testpmd> ")
+        self.sut_node.send_expect("clear port stats all", "testpmd> ")
 
-        self.dynamic_config_send_packet(self.dut_ports[0])
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        self.dynamic_config_send_packet(self.sut_ports[0])
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
 
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
@@ -210,14 +210,14 @@  class TestDynamicConfig(TestCase):
         disable multicast, dpdk not received this packet
         """
 
-        self.dut.send_expect("set promisc all off", "testpmd> ")
-        self.dut.send_expect("set fwd io", "testpmd> ")
-        self.dut.send_expect("clear port stats all", "testpmd> ")
-        self.dut.send_expect("set allmulti all on", "testpmd> ")
+        self.sut_node.send_expect("set promisc all off", "testpmd> ")
+        self.sut_node.send_expect("set fwd io", "testpmd> ")
+        self.sut_node.send_expect("clear port stats all", "testpmd> ")
+        self.sut_node.send_expect("set allmulti all on", "testpmd> ")
 
-        self.dynamic_config_send_packet(self.dut_ports[0], "01:00:00:33:00:01")
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        self.dynamic_config_send_packet(self.sut_ports[0], "01:00:00:33:00:01")
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
 
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
@@ -225,12 +225,12 @@  class TestDynamicConfig(TestCase):
             int(cur_rxpkt) == 4, "enable allmulti switch, not received allmulti packet"
         )
 
-        self.dut.send_expect("clear port stats all", "testpmd> ")
-        self.dut.send_expect("set allmulti all off", "testpmd> ")
+        self.sut_node.send_expect("clear port stats all", "testpmd> ")
+        self.sut_node.send_expect("set allmulti all off", "testpmd> ")
 
-        self.dynamic_config_send_packet(self.dut_ports[0], "01:00:00:33:00:01")
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        self.dynamic_config_send_packet(self.sut_ports[0], "01:00:00:33:00:01")
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
 
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
@@ -243,13 +243,13 @@  class TestDynamicConfig(TestCase):
         Dynamic config enable promiscuous test
         """
 
-        portid = self.dut_ports[0]
+        portid = self.sut_ports[0]
 
-        self.dut.send_expect("set promisc %d on" % portid, "testpmd> ")
+        self.sut_node.send_expect("set promisc %d on" % portid, "testpmd> ")
 
         # get the current rx statistic
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
 
@@ -257,8 +257,8 @@  class TestDynamicConfig(TestCase):
         self.dynamic_config_send_packet(portid)
 
         pre_rxpkt = cur_rxpkt
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
 
@@ -269,21 +269,21 @@  class TestDynamicConfig(TestCase):
         self.dynamic_config_send_packet(portid, self.dest)
 
         pre_rxpkt = cur_rxpkt
-        out = self.dut.send_expect(
-            "show port stats %d" % self.dut_ports[1], "testpmd> "
+        out = self.sut_node.send_expect(
+            "show port stats %d" % self.sut_ports[1], "testpmd> "
         )
         cur_rxpkt = utils.regexp(out, "TX-packets: ([0-9]+)")
 
         # check the packet increment
         self.verify(int(cur_rxpkt) == int(pre_rxpkt) + 4, "2nd packet increment error")
 
-        # self.dut.send_expect("quit", "# ", 30)
+        # self.sut_node.send_expect("quit", "# ", 30)
 
     def tear_down(self):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_dynamic_flowtype.py b/tests/TestSuite_dynamic_flowtype.py
index 0abc6068..20918432 100644
--- a/tests/TestSuite_dynamic_flowtype.py
+++ b/tests/TestSuite_dynamic_flowtype.py
@@ -5,7 +5,7 @@ 
 import re
 import time
 
-import framework.packet as packet
+import framework.scapy_packet_builder as scapy_pkt_builder
 import framework.utils as utils
 from framework.pmd_output import PmdOutput
 from framework.test_case import TestCase
@@ -19,15 +19,15 @@  class TestDynamicFlowtype(TestCase):
             self.is_eth_series_nic(700),
             "dynamic flow type mapping can not support %s nic" % self.nic,
         )
-        ports = self.dut.get_ports()
+        ports = self.sut_node.get_ports()
         self.verify(len(ports) >= 1, "Insufficient ports for testing")
-        valports = [_ for _ in ports if self.tester.get_local_port(_) != -1]
-        self.dut_port = valports[0]
-        tester_port = self.tester.get_local_port(self.dut_port)
-        self.tester_intf = self.tester.get_interface(tester_port)
+        valports = [_ for _ in ports if self.tg_node.get_local_port(_) != -1]
+        self.sut_port = valports[0]
+        tg_port = self.tg_node.get_local_port(self.sut_port)
+        self.tg_intf = self.tg_node.get_interface(tg_port)
         profile_file = "dep/gtp.pkgo"
         profile_dst = "/tmp/"
-        self.dut.session.copy_file_to(profile_file, profile_dst)
+        self.sut_node.session.copy_file_to(profile_file, profile_dst)
         PF_Q_strip = "RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF"
         self.PF_QUEUE = self.search_queue_number(PF_Q_strip)
 
@@ -35,8 +35,8 @@  class TestDynamicFlowtype(TestCase):
         """
         Run before each test case.
         """
-        self.dut_testpmd = PmdOutput(self.dut)
-        self.dut_testpmd.start_testpmd(
+        self.sut_testpmd = PmdOutput(self.sut_node)
+        self.sut_testpmd.start_testpmd(
             "Default",
             "--port-topology=chained --txq=%s --rxq=%s"
             % (self.PF_QUEUE, self.PF_QUEUE),
@@ -47,7 +47,7 @@  class TestDynamicFlowtype(TestCase):
         """
         Search max queue number from configuration.
         """
-        out = self.dut.send_expect("cat config/rte_config.h", "]# ", 10)
+        out = self.sut_node.send_expect("cat config/rte_config.h", "]# ", 10)
         pattern = "define (%s) (\d*)" % Q_strip
         s = re.compile(pattern)
         res = s.search(out)
@@ -64,17 +64,17 @@  class TestDynamicFlowtype(TestCase):
         profile will be stored in binary file and need to be passed to AQ to
         program Intel® Ethernet 700 Series during initialization stage.
         """
-        self.dut_testpmd.execute_cmd("port stop all")
+        self.sut_testpmd.execute_cmd("port stop all")
         time.sleep(1)
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
-        self.dut_testpmd.execute_cmd("ddp add 0 /tmp/gtp.pkgo,/tmp/gtp.bak")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("ddp add 0 /tmp/gtp.pkgo,/tmp/gtp.bak")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         self.verify("Profile number is: 1" in out, "Failed to load ddp profile!!!")
-        self.dut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.execute_cmd("port start all")
         time.sleep(1)
-        self.dut_testpmd.execute_cmd("set fwd rxonly")
-        self.dut_testpmd.execute_cmd("set verbose 1")
-        self.dut_testpmd.execute_cmd("start")
+        self.sut_testpmd.execute_cmd("set fwd rxonly")
+        self.sut_testpmd.execute_cmd("set verbose 1")
+        self.sut_testpmd.execute_cmd("start")
 
     def gtp_packets(self, flowtype=26, match_opt="matched"):
         """
@@ -194,9 +194,9 @@  class TestDynamicFlowtype(TestCase):
         """
         pkts = self.gtp_packets(flowtype, match_opt)
         for packet_type in list(pkts.keys()):
-            pkt = packet.Packet(pkts[packet_type])
-            pkt.send_pkt(crb=self.tester, tx_port=self.tester_intf)
-            out = self.dut.get_session_output(timeout=2)
+            scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder(pkts[packet_type])
+            scapy_pkt_builder.send_pkt(node=self.tg_node, tx_port=self.tg_intf)
+            out = self.sut_node.get_session_output(timeout=2)
             if match_opt == "matched":
                 self.verify(
                     "RTE_MBUF_F_RX_RSS_HASH" in out,
@@ -218,7 +218,7 @@  class TestDynamicFlowtype(TestCase):
         reset: If reset is true, reset the contents of flow type to pctype
                mapping. If reset is false, enable rss hash for new protocal.
         """
-        out = self.dut_testpmd.execute_cmd("show port 0 pctype mapping")
+        out = self.sut_testpmd.execute_cmd("show port 0 pctype mapping")
         self.verify(
             "pctype: 63  ->  flowtype: 14" in out,
             "Failed show flow type to pctype mapping!!!",
@@ -227,19 +227,19 @@  class TestDynamicFlowtype(TestCase):
             "pctype: %s  ->  flowtype: %s" % (pctype, flowtype) not in out,
             "Failed show flow type to pctype mapping!!!",
         )
-        self.dut_testpmd.execute_cmd(
+        self.sut_testpmd.execute_cmd(
             "port config 0 pctype mapping update %s %s" % (pctype, flowtype)
         )
-        out = self.dut_testpmd.execute_cmd("show port 0 pctype mapping")
+        out = self.sut_testpmd.execute_cmd("show port 0 pctype mapping")
         self.verify(
             "pctype: %s  ->  flowtype: %s" % (pctype, flowtype) in out,
             "Failed update flow type to pctype mapping!!!",
         )
         if reset is False:
-            self.dut_testpmd.execute_cmd("port config all rss %s" % flowtype)
+            self.sut_testpmd.execute_cmd("port config all rss %s" % flowtype)
         else:
-            self.dut_testpmd.execute_cmd("port config 0 pctype mapping reset")
-            out = self.dut_testpmd.execute_cmd("show port 0 pctype mapping")
+            self.sut_testpmd.execute_cmd("port config 0 pctype mapping reset")
+            out = self.sut_testpmd.execute_cmd("show port 0 pctype mapping")
             self.verify(
                 "pctype: %s  ->  flowtype: %s" % (pctype, flowtype) not in out,
                 "Failed reset flow type to pctype mapping!!!",
@@ -260,7 +260,7 @@  class TestDynamicFlowtype(TestCase):
         information correctness, includes used protocols, packet
         classification types, defined packet types and so on.
         """
-        out = self.dut_testpmd.execute_cmd("ddp get info /tmp/gtp.pkgo")
+        out = self.sut_testpmd.execute_cmd("ddp get info /tmp/gtp.pkgo")
         self.verify(
             "i40e Profile Version" in out, "Failed to verify profile version!!!"
         )
@@ -312,18 +312,18 @@  class TestDynamicFlowtype(TestCase):
         self.dynamic_flowtype_test(pctype=25, flowtype=25, reset=False)
 
     def tear_down(self):
-        self.dut_testpmd.execute_cmd("stop")
-        out = self.dut_testpmd.execute_cmd("ddp get list 0")
+        self.sut_testpmd.execute_cmd("stop")
+        out = self.sut_testpmd.execute_cmd("ddp get list 0")
         if "Profile number is: 0" not in out:
-            self.dut_testpmd.execute_cmd("port stop all")
+            self.sut_testpmd.execute_cmd("port stop all")
             time.sleep(1)
-            self.dut_testpmd.execute_cmd("ddp del 0 /tmp/gtp.bak")
-            out = self.dut_testpmd.execute_cmd("ddp get list 0")
+            self.sut_testpmd.execute_cmd("ddp del 0 /tmp/gtp.bak")
+            out = self.sut_testpmd.execute_cmd("ddp get list 0")
             self.verify(
                 "Profile number is: 0" in out, "Failed to delete ddp profile!!!"
             )
-            self.dut_testpmd.execute_cmd("port start all")
-        self.dut_testpmd.quit()
+            self.sut_testpmd.execute_cmd("port start all")
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
-        self.dut.kill_all()
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_dynamic_queue.py b/tests/TestSuite_dynamic_queue.py
index ebbe869c..cbd6469d 100644
--- a/tests/TestSuite_dynamic_queue.py
+++ b/tests/TestSuite_dynamic_queue.py
@@ -7,8 +7,8 @@  import re
 import time
 
 import framework.utils as utils
-from framework.packet import Packet
 from framework.pmd_output import PmdOutput
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.settings import get_nic_name
 from framework.test_case import TestCase
 
@@ -17,42 +17,42 @@  test_loop = 3
 
 class TestDynamicQueue(TestCase):
     def set_up_all(self):
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
-        out = self.dut.send_expect("cat config/rte_config.h", "]# ", 10)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
+        out = self.sut_node.send_expect("cat config/rte_config.h", "]# ", 10)
         self.PF_Q_strip = "RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF"
         pattern = "define (%s) (\d*)" % self.PF_Q_strip
         self.PF_QUEUE = self.element_strip(out, pattern, True)
-        self.used_dut_port = self.dut_ports[0]
-        tester_port = self.tester.get_local_port(self.used_dut_port)
-        self.tester_intf = self.tester.get_interface(tester_port)
-        self.dut_testpmd = PmdOutput(self.dut)
+        self.used_sut_port = self.sut_ports[0]
+        tg_port = self.tg_node.get_local_port(self.used_sut_port)
+        self.tg_intf = self.tg_node.get_interface(tg_port)
+        self.sut_testpmd = PmdOutput(self.sut_node)
 
     def set_up(self):
         # Intel® Ethernet Converged Network Adapter XL710-QDA1 needs more cores to run properly
         if self.nic in ["I40E_40G-QSFP_A"]:
             self.verify(
-                "len(self.dut.cores)>=7", "Less than seven cores can't run testpmd"
+                "len(self.sut_node.cores)>=7", "Less than seven cores can't run testpmd"
             )
-            self.dut_testpmd.start_testpmd(
+            self.sut_testpmd.start_testpmd(
                 "all",
                 "--port-topology=chained --txq=%s --rxq=%s"
                 % (self.PF_QUEUE, self.PF_QUEUE),
             )
         elif self.nic in ["cavium_a063", "cavium_a064"]:
             eal_opts = ""
-            for port in self.dut_ports:
+            for port in self.sut_ports:
                 eal_opts += "-a %s,max_pools=256 " % (
-                    self.dut.get_port_pci(self.dut_ports[port])
+                    self.sut_node.get_port_pci(self.sut_ports[port])
                 )
-            self.dut_testpmd.start_testpmd(
+            self.sut_testpmd.start_testpmd(
                 "Default",
                 "--port-topology=chained --txq=%s --rxq=%s"
                 % (self.PF_QUEUE, self.PF_QUEUE),
                 eal_param=eal_opts,
             )
         else:
-            self.dut_testpmd.start_testpmd(
+            self.sut_testpmd.start_testpmd(
                 "Default",
                 "--port-topology=chained --txq=%s --rxq=%s"
                 % (self.PF_QUEUE, self.PF_QUEUE),
@@ -73,13 +73,13 @@  class TestDynamicQueue(TestCase):
 
     def send_packet(self):
         """
-        Generate packets and send them to dut
+        Generate packets and send them to SUT
         """
-        mac = self.dut.get_mac_address(0)
+        mac = self.sut_node.get_mac_address(0)
         pktnum = self.PF_QUEUE * 4
-        pkt = Packet()
-        pkt.generate_random_pkts(mac, pktnum=pktnum, random_type=["IP_RAW"])
-        pkt.send_pkt(self.tester, tx_port=self.tester_intf)
+        scapy_pkt_builder = ScapyPacketBuilder()
+        scapy_pkt_builder.generate_random_pkts(mac, pktnum=pktnum, random_type=["IP_RAW"])
+        scapy_pkt_builder.send_pkt(self.tg_node, tx_port=self.tg_intf)
 
     def rxq_setup_test(self, chgflag=0):
         """
@@ -91,13 +91,13 @@  class TestDynamicQueue(TestCase):
         queue = list()
         for i in range(test_loop):
             queue.append(random.randint(1, self.PF_QUEUE - 1))
-            self.dut_testpmd.execute_cmd("port 0 rxq %d stop" % queue[i])
+            self.sut_testpmd.execute_cmd("port 0 rxq %d stop" % queue[i])
 
-        self.dut_testpmd.execute_cmd("set fwd rxonly")
-        self.dut_testpmd.execute_cmd("start")
+        self.sut_testpmd.execute_cmd("set fwd rxonly")
+        self.sut_testpmd.execute_cmd("start")
         self.send_packet()
-        self.dut.get_session_output(timeout=10)
-        out = self.dut_testpmd.execute_cmd("stop")
+        self.sut_node.get_session_output(timeout=10)
+        out = self.sut_testpmd.execute_cmd("stop")
 
         # Check Rx stopped queues can't receive packets
         for i in range(test_loop):
@@ -108,18 +108,18 @@  class TestDynamicQueue(TestCase):
 
         if chgflag == 1:
             for i in range(test_loop):
-                out = self.dut_testpmd.execute_cmd("show rxq info 0 %d" % queue[i])
+                out = self.sut_testpmd.execute_cmd("show rxq info 0 %d" % queue[i])
                 qring_strip = "Number of RXDs: "
                 pattern = "%s([0-9]+)" % qring_strip
                 qringsize = self.element_strip(out, pattern)
                 chg_qringsize = qringsize % 1024 + 256
                 if qringsize == 512:
                     chg_qringsize = 256
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "port config 0 rxq %d ring_size %d" % (queue[i], chg_qringsize)
                 )
-                self.dut_testpmd.execute_cmd("port 0 rxq %d setup" % queue[i])
-                out = self.dut_testpmd.execute_cmd("show rxq info 0 %d" % queue[i])
+                self.sut_testpmd.execute_cmd("port 0 rxq %d setup" % queue[i])
+                out = self.sut_testpmd.execute_cmd("show rxq info 0 %d" % queue[i])
                 chk_qringsize = self.element_strip(out, pattern)
                 self.verify(
                     chk_qringsize == chg_qringsize,
@@ -128,13 +128,13 @@  class TestDynamicQueue(TestCase):
 
         for i in range(test_loop):
             if chgflag == 0:
-                self.dut_testpmd.execute_cmd("port 0 rxq %d setup" % queue[i])
-            self.dut_testpmd.execute_cmd("port 0 rxq %d start" % queue[i])
+                self.sut_testpmd.execute_cmd("port 0 rxq %d setup" % queue[i])
+            self.sut_testpmd.execute_cmd("port 0 rxq %d start" % queue[i])
 
-        self.dut_testpmd.execute_cmd("start")
+        self.sut_testpmd.execute_cmd("start")
         self.send_packet()
-        self.dut.get_session_output(timeout=10)
-        out = self.dut_testpmd.execute_cmd("stop")
+        self.sut_node.get_session_output(timeout=10)
+        out = self.sut_testpmd.execute_cmd("stop")
 
         # Check Rx setup queues could receive packets
         for i in range(test_loop):
@@ -152,15 +152,15 @@  class TestDynamicQueue(TestCase):
         """
         for i in range(test_loop):
             queue = random.randint(1, self.PF_QUEUE - 1)
-            out = self.dut_testpmd.execute_cmd("show txq info 0 %d" % queue)
+            out = self.sut_testpmd.execute_cmd("show txq info 0 %d" % queue)
             qring_strip = "Number of TXDs: "
             pattern = "%s([0-9]+)" % qring_strip
             qringsize = self.element_strip(out, pattern)
-            self.dut_testpmd.execute_cmd("port 0 txq %d stop" % queue)
-            self.dut_testpmd.execute_cmd("set fwd txonly")
-            self.dut_testpmd.execute_cmd("start")
+            self.sut_testpmd.execute_cmd("port 0 txq %d stop" % queue)
+            self.sut_testpmd.execute_cmd("set fwd txonly")
+            self.sut_testpmd.execute_cmd("start")
             time.sleep(10)
-            out = self.dut_testpmd.execute_cmd("stop")
+            out = self.sut_testpmd.execute_cmd("stop")
             tx_num = qringsize - 1
 
             if self.nic in ["cavium_a063", "cavium_a064"]:
@@ -174,23 +174,23 @@  class TestDynamicQueue(TestCase):
                 chg_qringsize = qringsize % 1024 + 256
                 if qringsize == 512:
                     chg_qringsize = 256
-                self.dut_testpmd.execute_cmd(
+                self.sut_testpmd.execute_cmd(
                     "port config 0 txq %d ring_size %d" % (queue, chg_qringsize)
                 )
-                self.dut_testpmd.execute_cmd("port 0 txq %d setup" % queue)
-                out = self.dut_testpmd.execute_cmd("show txq info 0 %d" % queue)
+                self.sut_testpmd.execute_cmd("port 0 txq %d setup" % queue)
+                out = self.sut_testpmd.execute_cmd("show txq info 0 %d" % queue)
                 chk_qringsize = self.element_strip(out, pattern)
                 self.verify(
                     chk_qringsize == chg_qringsize,
                     "Fail to change ring size at runtime!",
                 )
             if chgflag == 0:
-                self.dut_testpmd.execute_cmd("port 0 txq %d setup" % queue)
+                self.sut_testpmd.execute_cmd("port 0 txq %d setup" % queue)
 
-            self.dut_testpmd.execute_cmd("port 0 txq %d start" % queue)
-            self.dut_testpmd.execute_cmd("start")
+            self.sut_testpmd.execute_cmd("port 0 txq %d start" % queue)
+            self.sut_testpmd.execute_cmd("start")
             time.sleep(10)
-            out = self.dut_testpmd.execute_cmd("stop")
+            out = self.sut_testpmd.execute_cmd("stop")
             """
             Check Tx setup queue could transmit packets normally, not only
             qringsize-1 packets
@@ -230,7 +230,7 @@  class TestDynamicQueue(TestCase):
         self.txq_setup_test(chgflag=1)
 
     def tear_down(self):
-        self.dut_testpmd.quit()
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
         pass
diff --git a/tests/TestSuite_eeprom_dump.py b/tests/TestSuite_eeprom_dump.py
index c9ffaf1c..eef924c3 100644
--- a/tests/TestSuite_eeprom_dump.py
+++ b/tests/TestSuite_eeprom_dump.py
@@ -19,9 +19,9 @@  class TestEEPROMDump(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.ports = self.dut.get_ports()
+        self.ports = self.sut_node.get_ports()
 
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
     def set_up(self):
         """
@@ -31,15 +31,15 @@  class TestEEPROMDump(TestCase):
 
     def clean_up_and_compare(self, testname, port):
         # comapre the two files
-        result = self.dut.send_expect(
+        result = self.sut_node.send_expect(
             f"diff testpmd_{testname}_{port}.txt ethtool_{testname}_{port}.txt", "#"
         )
 
         # Clean up files
-        self.dut.send_expect(f"rm ethtool_{testname}_raw_{port}.txt", "#")
-        self.dut.send_expect(f"rm ethtool_{testname}_hex_{port}.txt", "#")
-        self.dut.send_expect(f"rm ethtool_{testname}_{port}.txt", "#")
-        self.dut.send_expect(f"rm testpmd_{testname}_{port}.txt", "#")
+        self.sut_node.send_expect(f"rm ethtool_{testname}_raw_{port}.txt", "#")
+        self.sut_node.send_expect(f"rm ethtool_{testname}_hex_{port}.txt", "#")
+        self.sut_node.send_expect(f"rm ethtool_{testname}_{port}.txt", "#")
+        self.sut_node.send_expect(f"rm testpmd_{testname}_{port}.txt", "#")
 
         self.verify(not result, "Testpmd dumped is not same as linux dumped")
 
@@ -57,13 +57,13 @@  class TestEEPROMDump(TestCase):
                 n = n + 1
                 if n <= count:
                     line = line.replace(" ", "").lower()
-                    self.dut.send_expect(f"echo {line} >> {to}", "#")
+                    self.sut_node.send_expect(f"echo {line} >> {to}", "#")
 
         # Get testpmd output to have only hex value
         else:
             for line in re.findall(regex, get):
                 line = line.replace(" ", "").lower()
-                self.dut.send_expect(f"echo {line} >> {to}", "#")
+                self.sut_node.send_expect(f"echo {line} >> {to}", "#")
 
     def check_output(self, testname, ethcommand):
         self.pmdout.start_testpmd("Default")
@@ -71,7 +71,7 @@  class TestEEPROMDump(TestCase):
 
         for port in self.ports:
             # show port {port} eeprom has 10485760 bytes, and it takes about 13 minutes to show finish.
-            pmdout = self.dut.send_expect(
+            pmdout = self.sut_node.send_expect(
                 f"show port {port} {testname}", "testpmd>", timeout=800
             )
             self.verify("Finish --" in pmdout, f"{testname} dump failed")
@@ -83,11 +83,11 @@  class TestEEPROMDump(TestCase):
             portinfo = {"port": port, "length": length, "pmdout": pmdout}
             portsinfo.append(portinfo)
 
-        self.dut.send_expect("quit", "# ")
+        self.sut_node.send_expect("quit", "# ")
 
         # Bind to the default driver to use ethtool after quit testpmd
         for port in self.ports:
-            netdev = self.dut.ports_info[port]["port"]
+            netdev = self.sut_node.ports_info[port]["port"]
             portinfo = portsinfo[port]
 
             # strip original driver
@@ -108,15 +108,15 @@  class TestEEPROMDump(TestCase):
                 testname,
             )
 
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 f"ethtool {ethcommand} {iface} raw on length {portinfo['length']} >> ethtool_{testname}_raw_{port}.txt",
                 "#",
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 f"xxd ethtool_{testname}_raw_{port}.txt >> ethtool_{testname}_hex_{port}.txt",
                 "#",
             )
-            portinfo["ethout"] = self.dut.send_expect(
+            portinfo["ethout"] = self.sut_node.send_expect(
                 f"cat ethtool_{testname}_hex_{port}.txt", "# ", trim_whitespace=False
             )
 
@@ -143,11 +143,11 @@  class TestEEPROMDump(TestCase):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
-        self.dut.bind_interfaces_linux(self.drivername)
+        self.sut_node.kill_all()
+        self.sut_node.bind_interfaces_linux(self.drivername)
 
     def tear_down_all(self):
         """
         Run after each test suite.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_efd.py b/tests/TestSuite_efd.py
index 9d94a3d4..2096012e 100644
--- a/tests/TestSuite_efd.py
+++ b/tests/TestSuite_efd.py
@@ -9,8 +9,8 @@  import os
 import re
 
 import framework.utils as utils
-from framework.pktgen import PacketGeneratorHelper
 from framework.test_case import TestCase
+from framework.tg_perf import TrafficGeneratorStream
 
 
 class TestEFD(TestCase):
@@ -21,10 +21,10 @@  class TestEFD(TestCase):
 
         self.build_server_node_efd()
 
-        self.dut_ports = self.dut.get_ports()
-        self.node_app = self.dut.apps_name["node"]
-        self.server_app = self.dut.apps_name["server"]
-        self.app_test_path = self.dut.apps_name["test"]
+        self.sut_ports = self.sut_node.get_ports()
+        self.node_app = self.sut_node.apps_name["node"]
+        self.server_app = self.sut_node.apps_name["server"]
+        self.app_test_path = self.sut_node.apps_name["test"]
         # get dts output path
         if self.logger.log_path.startswith(os.sep):
             self.output_path = self.logger.log_path
@@ -32,12 +32,12 @@  class TestEFD(TestCase):
             cur_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
             self.output_path = os.sep.join([cur_path, self.logger.log_path])
         # create an instance to set stream field setting
-        self.pktgen_helper = PacketGeneratorHelper()
+        self.pktgen_helper = TrafficGeneratorStream()
 
     def build_server_node_efd(self):
         apps = ["node", "server"]
         for app in apps:
-            out = self.dut.build_dpdk_apps("./examples/server_node_efd/%s" % app)
+            out = self.sut_node.build_dpdk_apps("./examples/server_node_efd/%s" % app)
             self.verify("Error" not in out, "Compilation %s error" % app)
             self.verify("No such" not in out, "Compilation %s error" % app)
 
@@ -51,28 +51,28 @@  class TestEFD(TestCase):
         """
         Run EFD unit test
         """
-        eal_para = self.dut.create_eal_parameters(cores=[0, 1, 2, 3])
-        self.dut.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
-        out = self.dut.send_expect("efd_autotest", "RTE>>", 120)
-        self.dut.send_expect("quit", "# ")
+        eal_para = self.sut_node.create_eal_parameters(cores=[0, 1, 2, 3])
+        self.sut_node.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
+        out = self.sut_node.send_expect("efd_autotest", "RTE>>", 120)
+        self.sut_node.send_expect("quit", "# ")
         self.verify("Test OK" in out, "Test failed")
 
     def test_efd_unit_perf(self):
         """
         Run EFD unit perf test
         """
-        eal_para = self.dut.create_eal_parameters(cores=[0, 1, 2, 3])
-        self.dut.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
-        out = self.dut.send_expect("efd_perf_autotest", "RTE>>", 120)
+        eal_para = self.sut_node.create_eal_parameters(cores=[0, 1, 2, 3])
+        self.sut_node.send_expect("./%s %s" % (self.app_test_path, eal_para), "RTE>>", 60)
+        out = self.sut_node.send_expect("efd_perf_autotest", "RTE>>", 120)
         self.logger.info(out)
-        self.dut.send_expect("quit", "# ")
+        self.sut_node.send_expect("quit", "# ")
         self.verify("Test OK" in out, "Test failed")
 
     def test_perf_efd_nodenum(self):
         """
         Run EFD perf evaluation for number of nodes
         """
-        self.verify(len(self.dut_ports) >= 2, "Not enough ports")
+        self.verify(len(self.sut_ports) >= 2, "Not enough ports")
         node_nums = [1, 2, 3, 4, 5, 6, 7, 8]
 
         flow_num = 1024 * 1024 * 2
@@ -95,8 +95,8 @@  class TestEFD(TestCase):
         self.logger.warning(
             "Millions of flow required huge memory, please allocate 16G hugepage"
         )
-        self.dut.setup_memory_linux(hugepages=8192)
-        self.verify(len(self.dut_ports) >= 2, "Not enough ports")
+        self.sut_node.setup_memory_linux(hugepages=8192)
+        self.verify(len(self.sut_ports) >= 2, "Not enough ports")
         flow_nums = [
             1024 * 1024,
             1024 * 1024 * 2,
@@ -122,7 +122,7 @@  class TestEFD(TestCase):
         """
         Run EFD perf evaluation for different value size
         """
-        self.verify(len(self.dut_ports) >= 2, "Not enough ports")
+        self.verify(len(self.sut_ports) >= 2, "Not enough ports")
         val_bitnums = [8, 16, 24, 32]
         flow_num = 1024 * 1024 * 2
 
@@ -133,7 +133,7 @@  class TestEFD(TestCase):
         for val_bitnum in val_bitnums:
             # change value length and rebuild dpdk
             extra_options = "-Dc_args=-DRTE_EFD_VALUE_NUM_BITS=%d" % val_bitnum
-            self.dut.build_install_dpdk(self.target, extra_options=extra_options)
+            self.sut_node.build_install_dpdk(self.target, extra_options=extra_options)
             self.build_server_node_efd()
 
             pps = self._efd_perf_evaluate(2, flow_num)
@@ -141,7 +141,7 @@  class TestEFD(TestCase):
 
         self.result_table_print()
         extra_options = "-Dc_args=-DRTE_EFD_VALUE_NUM_BITS=8"
-        self.dut.build_install_dpdk(self.target, extra_options=extra_options)
+        self.sut_node.build_install_dpdk(self.target, extra_options=extra_options)
         self.build_server_node_efd()
 
     def _efd_perf_evaluate(self, node_num, flow_num):
@@ -150,27 +150,27 @@  class TestEFD(TestCase):
         # output port is calculated from overall ports number
         server_cmd_fmt = "%s %s -- -p 0x3 -n %d -f %s"
         node_cmd_fmt = "%s %s --proc-type=secondary -- -n %d"
-        socket = self.dut.get_numa_id(self.dut_ports[0])
+        socket = self.sut_node.get_numa_id(self.sut_ports[0])
 
         pcap = os.sep.join([self.output_path, "efd.pcap"])
-        self.tester.scapy_append(
+        self.tg_node.scapy_append(
             'wrpcap("%s", [Ether()/IP(src="0.0.0.0", dst="0.0.0.0")/("X"*26)])' % pcap
         )
-        self.tester.scapy_execute()
+        self.tg_node.scapy_execute()
 
         tgen_input = []
-        rx_port = self.tester.get_local_port(self.dut_ports[0])
-        tx_port = self.tester.get_local_port(self.dut_ports[1])
+        rx_port = self.tg_node.get_local_port(self.sut_ports[0])
+        tx_port = self.tg_node.get_local_port(self.sut_ports[1])
 
         pcap = os.sep.join([self.output_path, "efd.pcap"])
         tgen_input.append((tx_port, rx_port, pcap))
         tgen_input.append((rx_port, tx_port, pcap))
 
-        cores = self.dut.get_core_list("1S/%dC/1T" % (node_num + 2), socket)
+        cores = self.sut_node.get_core_list("1S/%dC/1T" % (node_num + 2), socket)
 
         self.verify(len(cores), "Can't find enough cores")
 
-        eal_para = self.dut.create_eal_parameters(cores=cores[0:2], ports=[0, 1])
+        eal_para = self.sut_node.create_eal_parameters(cores=cores[0:2], ports=[0, 1])
         server_cmd = server_cmd_fmt % (
             self.server_app,
             eal_para,
@@ -178,30 +178,30 @@  class TestEFD(TestCase):
             hex(flow_num),
         )
         # create table may need few minutes
-        self.dut.send_expect(server_cmd, "Finished Process Init", timeout=240)
+        self.sut_node.send_expect(server_cmd, "Finished Process Init", timeout=240)
 
         node_sessions = []
         for node in range(node_num):
 
-            eal_para = self.dut.create_eal_parameters(cores=[cores[2 + node]])
+            eal_para = self.sut_node.create_eal_parameters(cores=[cores[2 + node]])
             node_cmd = node_cmd_fmt % (self.node_app, eal_para, node)
-            node_session = self.dut.new_session(suite="node%d" % node)
+            node_session = self.sut_node.new_session(suite="node%d" % node)
             node_sessions.append(node_session)
             node_session.send_expect(node_cmd, "Finished Process Init", timeout=30)
 
         # clear streams before add new streams
-        self.tester.pktgen.clear_streams()
-        # run packet generator
+        self.tg_node.perf_tg.clear_streams()
+        # run traffic generator
         streams = self.pktgen_helper.prepare_stream_from_tginput(
-            tgen_input, 100, None, self.tester.pktgen
+            tgen_input, 100, None, self.tg_node.perf_tg
         )
-        _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
+        _, pps = self.tg_node.perf_tg.measure_throughput(stream_ids=streams)
 
         for node_session in node_sessions:
             node_session.send_expect("^C", "#")
-            self.dut.close_session(node_session)
+            self.sut_node.close_session(node_session)
 
-        self.dut.send_expect("^C", "#")
+        self.sut_node.send_expect("^C", "#")
 
         pps /= 1000000.0
         return pps
@@ -221,7 +221,7 @@  class TestEFD(TestCase):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         pass
 
     def tear_down_all(self):
diff --git a/tests/TestSuite_enable_package_download_in_ice_driver.py b/tests/TestSuite_enable_package_download_in_ice_driver.py
index beda14a8..a5aef3fa 100644
--- a/tests/TestSuite_enable_package_download_in_ice_driver.py
+++ b/tests/TestSuite_enable_package_download_in_ice_driver.py
@@ -16,30 +16,30 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
             self.nic in ["ICE_100G-E810C_QSFP", "ICE_25G-E810C_SFP"],
             "NIC Unsupported: " + str(self.nic),
         )
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports")
         self.PF_QUEUE = 16
 
-        localPort0 = self.tester.get_local_port(self.dut_ports[0])
-        localPort1 = self.tester.get_local_port(self.dut_ports[1])
-        self.tester_p0 = self.tester.get_interface(localPort0)
-        self.tester_p1 = self.tester.get_interface(localPort1)
-        self.tester.send_expect("ifconfig %s -promisc" % self.tester_p0, "#")
-        self.tester.send_expect("ifconfig %s -promisc" % self.tester_p1, "#")
+        localPort0 = self.tg_node.get_local_port(self.sut_ports[0])
+        localPort1 = self.tg_node.get_local_port(self.sut_ports[1])
+        self.tg_p0 = self.tg_node.get_interface(localPort0)
+        self.tg_p1 = self.tg_node.get_interface(localPort1)
+        self.tg_node.send_expect("ifconfig %s -promisc" % self.tg_p0, "#")
+        self.tg_node.send_expect("ifconfig %s -promisc" % self.tg_p1, "#")
 
-        self.dut_p0_mac = self.dut.get_mac_address(self.dut_ports[0])
-        self.tester_p0_mac = self.tester.get_mac(localPort0)
-        self.dut_testpmd = PmdOutput(self.dut)
-        self.path = self.dut.apps_name["test-pmd"]
+        self.sut_p0_mac = self.sut_node.get_mac_address(self.sut_ports[0])
+        self.tg_p0_mac = self.tg_node.get_mac(localPort0)
+        self.sut_testpmd = PmdOutput(self.sut_node)
+        self.path = self.sut_node.apps_name["test-pmd"]
 
         self.pkg_file1 = "/lib/firmware/intel/ice/ddp/ice.pkg"
         self.pkg_file2 = "/lib/firmware/updates/intel/ice/ddp/ice.pkg"
-        out = self.dut.send_expect("ls %s" % self.pkg_file1, "#")
+        out = self.sut_node.send_expect("ls %s" % self.pkg_file1, "#")
         self.verify(
             "No such file or directory" not in out,
             "Cannot find %s, please check you system/driver." % self.pkg_file1,
         )
-        out = self.dut.send_expect("ls %s" % self.pkg_file2, "#")
+        out = self.sut_node.send_expect("ls %s" % self.pkg_file2, "#")
         self.verify(
             "No such file or directory" not in out,
             "Cannot find %s, please check you system/driver." % self.pkg_file2,
@@ -56,10 +56,10 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         """
         backup_file = "/opt/ice.pkg_backup"
         if flag == "backup":
-            self.dut.send_expect("\cp %s %s" % (self.pkg_file1, backup_file), "#")
+            self.sut_node.send_expect("\cp %s %s" % (self.pkg_file1, backup_file), "#")
         else:
-            self.dut.send_expect("\cp %s %s" % (backup_file, self.pkg_file1), "#")
-            self.dut.send_expect("\cp %s %s" % (backup_file, self.pkg_file2), "#")
+            self.sut_node.send_expect("\cp %s %s" % (backup_file, self.pkg_file1), "#")
+            self.sut_node.send_expect("\cp %s %s" % (backup_file, self.pkg_file2), "#")
 
     def use_correct_ice_pkg(self, flag="true"):
         """
@@ -69,20 +69,20 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         if flag == "true":
             self.backup_recover_ice_pkg("recover")
         else:
-            self.dut.send_expect("rm -rf %s" % self.pkg_file1, "#")
-            self.dut.send_expect("touch %s" % self.pkg_file1, "#")
-            self.dut.send_expect("rm -rf %s" % self.pkg_file2, "#")
-            self.dut.send_expect("touch %s" % self.pkg_file2, "#")
+            self.sut_node.send_expect("rm -rf %s" % self.pkg_file1, "#")
+            self.sut_node.send_expect("touch %s" % self.pkg_file1, "#")
+            self.sut_node.send_expect("rm -rf %s" % self.pkg_file2, "#")
+            self.sut_node.send_expect("touch %s" % self.pkg_file2, "#")
 
     def start_testpmd(self, ice_pkg="true", safe_mode_support="false"):
         self.eal_param = ""
         if safe_mode_support == "true":
-            for i in range(len(self.dut_ports)):
+            for i in range(len(self.sut_ports)):
                 self.eal_param = (
                     self.eal_param
-                    + "-a %s,safe-mode-support=1 " % self.dut.ports_info[i]["pci"]
+                    + "-a %s,safe-mode-support=1 " % self.sut_node.ports_info[i]["pci"]
                 )
-        out = self.dut_testpmd.start_testpmd(
+        out = self.sut_testpmd.start_testpmd(
             "all",
             "--nb-cores=8 --rxq=%s --txq=%s --port-topology=chained"
             % (self.PF_QUEUE, self.PF_QUEUE),
@@ -105,13 +105,13 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
                     error_message in out,
                     "There should be error messages in out: %s" % out,
                 )
-        self.dut_testpmd.execute_cmd("set promisc all off")
-        self.dut_testpmd.execute_cmd("set verbose 1")
+        self.sut_testpmd.execute_cmd("set promisc all off")
+        self.sut_testpmd.execute_cmd("set verbose 1")
 
     def tcpdump_start_sniffing(self, ifaces=[]):
         """
-        Starts tcpdump in the background to sniff the tester interface where
-        the packets are transmitted to and from the self.dut.
+        Starts tcpdump in the background to sniff the TG interface where
+        the packets are transmitted to and from the self.sut_node.
         All the captured packets are going to be stored in a file for a
         post-analysis.
         """
@@ -121,30 +121,30 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
                 iface
             )
             del_cmd = ("rm -f tcpdump_{0}.pcap").format(iface)
-            self.tester.send_expect(del_cmd, "#")
-            self.tester.send_expect(command, "#")
+            self.tg_node.send_expect(del_cmd, "#")
+            self.tg_node.send_expect(command, "#")
 
     def tcpdump_stop_sniff(self):
         """
         Stops the tcpdump process running in the background.
         """
-        self.tester.send_expect("killall tcpdump", "#")
+        self.tg_node.send_expect("killall tcpdump", "#")
         time.sleep(1)
-        self.tester.send_expect('echo "Cleaning buffer"', "#")
+        self.tg_node.send_expect('echo "Cleaning buffer"', "#")
         time.sleep(1)
 
     def tcpdump_command(self, command):
         """
         Sends a tcpdump related command and returns an integer from the output
         """
-        result = self.tester.send_expect(command, "#")
+        result = self.tg_node.send_expect(command, "#")
         print(result)
         return int(result.strip())
 
     def number_of_packets(self, iface):
         """
         By reading the file generated by tcpdump it counts how many packets were
-        forwarded by the sample app and received in the self.tester. The sample app
+        forwarded by the sample app and received in the self.tg_node. The sample app
         will add a known MAC address for the test to look for.
         """
         command = (
@@ -157,7 +157,7 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         """
         Execute scanner to return results
         """
-        scanner_result = self.tester.send_expect(scanner, "#")
+        scanner_result = self.tg_node.send_expect(scanner, "#")
         fially_result = re.findall(r"length( \d+)", scanner_result)
         return list(fially_result)
 
@@ -166,114 +166,114 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         Sends packets.
         """
         self.loading_size = 30
-        self.tester.scapy_foreground()
-        self.tester.scapy_append('sys.path.append("./")')
-        self.tester.scapy_append("from sctp import *")
+        self.tg_node.scapy_foreground()
+        self.tg_node.scapy_append('sys.path.append("./")')
+        self.tg_node.scapy_append("from sctp import *")
         if tran_type == "ipv4-other":
             for i in range(1):
                 packet = (
                     r'sendp([Ether(dst="%s", src="%s")/IP(src="192.168.0.%d", dst="192.168.0.%d")/("X"*%s)], iface="%s")'
                     % (
-                        self.dut_p0_mac,
-                        self.tester_p0_mac,
+                        self.sut_p0_mac,
+                        self.tg_p0_mac,
                         i + 1,
                         i + 2,
                         self.loading_size,
-                        self.tester_p0,
+                        self.tg_p0,
                     )
                 )
-                self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+                self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         elif tran_type == "ipv4-tcp":
             for i in range(16):
                 packet = (
                     r'sendp([Ether(dst="%s", src="%s")/IP(src="192.168.0.%d", dst="192.168.0.%d")/TCP(sport=1024,dport=1024)], iface="%s")'
                     % (
-                        self.dut_p0_mac,
-                        self.tester_p0_mac,
+                        self.sut_p0_mac,
+                        self.tg_p0_mac,
                         i + 1,
                         i + 2,
-                        self.tester_p0,
+                        self.tg_p0,
                     )
                 )
-                self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+                self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         elif tran_type == "ipv4-udp":
             for i in range(16):
                 packet = (
                     r'sendp([Ether(dst="%s", src="%s")/IP(src="192.168.0.%d", dst="192.168.0.%d")/UDP(sport=1024,dport=1024)], iface="%s")'
                     % (
-                        self.dut_p0_mac,
-                        self.tester_p0_mac,
+                        self.sut_p0_mac,
+                        self.tg_p0_mac,
                         i + 1,
                         i + 2,
-                        self.tester_p0,
+                        self.tg_p0,
                     )
                 )
-                self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+                self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         elif tran_type == "ipv4-sctp":
             for i in range(16):
                 packet = (
                     r'sendp([Ether(dst="%s", src="%s")/IP(src="192.168.0.%d", dst="192.168.0.%d")/SCTP(sport=1024,dport=1024)], iface="%s")'
                     % (
-                        self.dut_p0_mac,
-                        self.tester_p0_mac,
+                        self.sut_p0_mac,
+                        self.tg_p0_mac,
                         i + 1,
                         i + 2,
-                        self.tester_p0,
+                        self.tg_p0,
                     )
                 )
-                self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+                self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         elif tran_type == "ipv6-tcp":
             for i in range(16):
                 packet = (
                     r'sendp([Ether(dst="%s", src="%s")/IPv6(src="::%d", dst="::%d")/TCP(sport=1024,dport=1024)], iface="%s")'
                     % (
-                        self.dut_p0_mac,
-                        self.tester_p0_mac,
+                        self.sut_p0_mac,
+                        self.tg_p0_mac,
                         i + 1,
                         i + 2,
-                        self.tester_p0,
+                        self.tg_p0,
                     )
                 )
-                self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+                self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         elif tran_type == "ipv6-udp":
             for i in range(16):
                 packet = (
                     r'sendp([Ether(dst="%s", src="%s")/IPv6(src="::%d", dst="::%d")/UDP(sport=1024,dport=1024)], iface="%s")'
                     % (
-                        self.dut_p0_mac,
-                        self.tester_p0_mac,
+                        self.sut_p0_mac,
+                        self.tg_p0_mac,
                         i + 1,
                         i + 2,
-                        self.tester_p0,
+                        self.tg_p0,
                     )
                 )
-                self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+                self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         elif tran_type == "ipv6-sctp":
             for i in range(16):
                 packet = (
                     r'sendp([Ether(dst="%s", src="%s")/IPv6(src="::%d", dst="::%d",nh=132)/SCTP(sport=1024,dport=1024)], iface="%s")'
                     % (
-                        self.dut_p0_mac,
-                        self.tester_p0_mac,
+                        self.sut_p0_mac,
+                        self.tg_p0_mac,
                         i + 1,
                         i + 2,
-                        self.tester_p0,
+                        self.tg_p0,
                     )
                 )
-                self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+                self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         else:
             print("\ntran_type error!\n")
@@ -287,11 +287,11 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         """
         if tran_type == "ipv4-other":
             self.tcpdump_stop_sniff()
-            p0_stats = self.number_of_packets(self.tester_p0)
-            p1_stats = self.number_of_packets(self.tester_p1)
-            self.verify(p0_stats == p1_stats, "tester p0 and p1: packet number match")
+            p0_stats = self.number_of_packets(self.tg_p0)
+            p1_stats = self.number_of_packets(self.tg_p1)
+            self.verify(p0_stats == p1_stats, "TG p0 and p1: packet number match")
         else:
-            out = self.dut.get_session_output()
+            out = self.sut_node.get_session_output()
             queue_list = []
             lines = out.split("\r\n")
             for line in lines:
@@ -325,14 +325,14 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         self.use_correct_ice_pkg(ice_pkg)
         self.start_testpmd(ice_pkg, safe_mode_support)
 
-        self.dut_testpmd.execute_cmd("set fwd mac")
-        self.dut_testpmd.execute_cmd("start")
-        self.tcpdump_start_sniffing([self.tester_p0, self.tester_p1])
+        self.sut_testpmd.execute_cmd("set fwd mac")
+        self.sut_testpmd.execute_cmd("start")
+        self.tcpdump_start_sniffing([self.tg_p0, self.tg_p1])
         self.send_packet(tran_type="ipv4-other", flag=ice_pkg)
 
-        self.dut_testpmd.execute_cmd("stop")
-        self.dut_testpmd.execute_cmd("set fwd rxonly")
-        self.dut_testpmd.execute_cmd("start")
+        self.sut_testpmd.execute_cmd("stop")
+        self.sut_testpmd.execute_cmd("set fwd rxonly")
+        self.sut_testpmd.execute_cmd("start")
         for tran_types in [
             "ipv4-tcp",
             "ipv4-udp",
@@ -366,7 +366,7 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
             + "-c 0x7 -n 4 -- -i --nb-cores=8 --rxq=%s --txq=%s --port-topology=chained"
             % (self.PF_QUEUE, self.PF_QUEUE)
         )
-        out = self.dut.send_expect(cmd, "#", 60)
+        out = self.sut_node.send_expect(cmd, "#", 60)
         error_messages = [
             "ice_load_pkg(): ice_copy_and_init_hw failed: -1",
             "ice_dev_init(): Failed to load the DDP package,Use safe-mode-support=1 to enter Safe Mode",
@@ -379,17 +379,17 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
 
     def get_sn(self, nic_pci):
         cmd = "lspci -vs %s | grep 'Device Serial Number'" % nic_pci
-        out = self.dut.send_expect(cmd, "#")
+        out = self.sut_node.send_expect(cmd, "#")
         sn_temp = re.findall(r"Device Serial Number (.*)", out)
         sn = re.sub("-", "", sn_temp[0])
         return sn
 
     def check_env(self):
         """
-        Check the DUT has two or more Intel® Ethernet 800 Series NICs. If not, return
+        Check the SUT has two or more Intel® Ethernet 800 Series NICs. If not, return
         "the case needs >=2 Intel® Ethernet 800 Series NICs with different Serial Numbers"
         """
-        self.nic_pci = [self.dut.ports_info[0]["pci"], self.dut.ports_info[-1]["pci"]]
+        self.nic_pci = [self.sut_node.ports_info[0]["pci"], self.sut_node.ports_info[-1]["pci"]]
         self.nic_sn = [self.get_sn(self.nic_pci[0]), self.get_sn(self.nic_pci[1])]
         self.verify(
             self.nic_sn[0] != self.nic_sn[1],
@@ -398,18 +398,18 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
 
     def copy_specify_ice_pkg(self, pkg_ver):
         """
-        Copy 2 different ``ice-xxx.pkg`` from dts/dep to dut /tmp/
+        Copy 2 different ``ice-xxx.pkg`` from dts/dep to SUT /tmp/
         pkg_files = ['ice-1.3.4.0.pkg', 'ice-1.3.10.0.pkg']
         """
         dst = "/tmp"
         pkg_file = "ice-%s.pkg" % pkg_ver
         src_file = r"./dep/%s" % pkg_file
-        self.dut.session.copy_file_to(src_file, dst)
+        self.sut_node.session.copy_file_to(src_file, dst)
 
     def generate_delete_specify_pkg(self, pkg_ver, sn, key="true"):
-        self.dut.send_expect("rm -rf /lib/firmware/intel/ice/ddp/ice-%s.pkg" % sn, "#")
+        self.sut_node.send_expect("rm -rf /lib/firmware/intel/ice/ddp/ice-%s.pkg" % sn, "#")
         if key == "true":
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "\cp /tmp/ice-%s.pkg /lib/firmware/intel/ice/ddp/ice-%s.pkg"
                 % (pkg_ver, sn),
                 "#",
@@ -434,8 +434,8 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         eal_param = (
             "-a %s " % self.nic_pci[0] + "-a %s " % self.nic_pci[1] + "--log-level=8"
         )
-        out = self.dut_testpmd.execute_cmd(self.path + eal_param + " -- -i ")
-        self.dut_testpmd.quit()
+        out = self.sut_testpmd.execute_cmd(self.path + eal_param + " -- -i ")
+        self.sut_testpmd.quit()
 
         # Delete ice-<interface serial number>.pkg to recover the ENV
         for i in range(len(self.new_pkgs)):
@@ -451,7 +451,7 @@  class TestEnable_Package_Download_In_Ice_Driver(TestCase):
         )
 
     def tear_down(self):
-        self.dut_testpmd.quit()
+        self.sut_testpmd.quit()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_ethtool_stats.py b/tests/TestSuite_ethtool_stats.py
index abaf05a3..a529caee 100644
--- a/tests/TestSuite_ethtool_stats.py
+++ b/tests/TestSuite_ethtool_stats.py
@@ -16,8 +16,8 @@  from functools import reduce
 from scapy.sendrecv import sendp
 
 from framework.exception import VerifyFailure
-from framework.packet import Packet
 from framework.pmd_output import PmdOutput
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.settings import HEADER_SIZE
 from framework.test_case import TestCase
 from framework.utils import create_mask as dts_create_mask
@@ -28,28 +28,28 @@  class TestEthtoolStats(TestCase):
     def target_dir(self):
         # get absolute directory of target source code
         target_dir = (
-            "/root" + self.dut.base_dir[1:]
-            if self.dut.base_dir.startswith("~")
-            else self.dut.base_dir
+            "/root" + self.sut_node.base_dir[1:]
+            if self.sut_node.base_dir.startswith("~")
+            else self.sut_node.base_dir
         )
         return target_dir
 
     def d_a_con(self, cmd):
         _cmd = [cmd, "# ", 10] if isinstance(cmd, str) else cmd
-        output = self.dut.alt_session.send_expect(*_cmd)
-        output2 = self.dut.alt_session.session.get_session_before(1)
+        output = self.sut_node.alt_session.send_expect(*_cmd)
+        output2 = self.sut_node.alt_session.session.get_session_before(1)
         return output + os.linesep + output2
 
     def send_packet(self, pkt_config, src_intf):
         for pkt_type in list(pkt_config.keys()):
-            pkt = Packet(pkt_type=pkt_type)
+            scapy_pkt_builder = ScapyPacketBuilder(pkt_type=pkt_type)
             # set packet every layer's input parameters
             if "layer_configs" in list(pkt_config[pkt_type].keys()):
                 pkt_configs = pkt_config[pkt_type]["layer_configs"]
                 if pkt_configs:
                     for layer in list(pkt_configs.keys()):
-                        pkt.config_layer(layer, pkt_configs[layer])
-            pkt.send_pkt(crb=self.tester, tx_port=src_intf, count=1)
+                        scapy_pkt_builder.config_layer(layer, pkt_configs[layer])
+            scapy_pkt_builder.send_pkt(node=self.tg_node, tx_port=src_intf, count=1)
             time.sleep(1)
 
     def traffic(self):
@@ -69,7 +69,7 @@  class TestEthtoolStats(TestCase):
             self.send_packet(pkt_config, src_intf)
 
     def init_testpmd(self):
-        self.testpmd = PmdOutput(self.dut)
+        self.testpmd = PmdOutput(self.sut_node)
         self.is_pmd_on = False
 
     def start_testpmd(self):
@@ -126,9 +126,9 @@  class TestEthtoolStats(TestCase):
             time.sleep(1)
 
     def init_proc_info(self):
-        ports_count = len(self.dut_ports)
+        ports_count = len(self.sut_ports)
         ports_mask = reduce(lambda x, y: x | y, [0x1 << x for x in range(ports_count)])
-        app_name = self.dut.apps_name["proc-info"].split("/")[-1]
+        app_name = self.sut_node.apps_name["proc-info"].split("/")[-1]
         self.query_tool = os.path.join(
             self.target_dir,
             self.target,
@@ -439,10 +439,10 @@  class TestEthtoolStats(TestCase):
         self.is_pmd_on = None
         # get link port pairs
         port_num = 0
-        local_port = self.tester.get_local_port(port_num)
+        local_port = self.tg_node.get_local_port(port_num)
         self.link_topo = [
-            self.tester.get_interface(local_port),
-            self.tester.get_mac(local_port),
+            self.tg_node.get_interface(local_port),
+            self.tg_node.get_mac(local_port),
         ]
         # set packet sizes for testing different type
         self.frame_sizes = [64, 72, 128, 256, 512, 1024]
@@ -455,9 +455,9 @@  class TestEthtoolStats(TestCase):
     #
 
     def set_up_all(self):
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
-        self.prefix = "dpdk_" + self.dut.prefix_subfix
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
+        self.prefix = "dpdk_" + self.sut_node.prefix_subfix
         self.preset_test_environment()
 
     def set_up(self):
diff --git a/tests/TestSuite_eventdev_perf.py b/tests/TestSuite_eventdev_perf.py
index 198b4553..6e814858 100644
--- a/tests/TestSuite_eventdev_perf.py
+++ b/tests/TestSuite_eventdev_perf.py
@@ -15,10 +15,10 @@  from time import sleep
 
 import framework.utils as utils
 import nics.perf_report as perf_report
-from framework.pktgen import PacketGeneratorHelper
 from framework.pmd_output import PmdOutput
 from framework.settings import FOLDERS, HEADER_SIZE
 from framework.test_case import TestCase
+from framework.tg_perf import TrafficGeneratorStream
 from nics.system_info import SystemInfo
 
 
@@ -54,33 +54,33 @@  class TestEventdevPerf(TestCase):
         self.blocklist = ""
 
         # Based on h/w type, choose how many ports to use
-        self.dut_ports = self.dut.get_ports()
-        if self.dut.get_os_type() == "linux":
-            # Get dut system information
-            port_num = self.dut_ports[0]
-            pci_device_id = self.dut.ports_info[port_num]["pci"]
-            ori_driver = self.dut.ports_info[port_num]["port"].get_nic_driver()
-            self.dut.ports_info[port_num]["port"].bind_driver()
+        self.sut_ports = self.sut_node.get_ports()
+        if self.sut_node.get_os_type() == "linux":
+            # Get SUT system information
+            port_num = self.sut_ports[0]
+            pci_device_id = self.sut_node.ports_info[port_num]["pci"]
+            ori_driver = self.sut_node.ports_info[port_num]["port"].get_nic_driver()
+            self.sut_node.ports_info[port_num]["port"].bind_driver()
 
-            self.dut.ports_info[port_num]["port"].bind_driver(ori_driver)
+            self.sut_node.ports_info[port_num]["port"].bind_driver(ori_driver)
 
         if self.nic == "cavium_a063":
             self.eventdev_device_bus_id = "0002:0e:00.0"
             self.eventdev_device_id = "a0f9"
 
             #### Bind evendev device ####
-            self.dut.bind_eventdev_port(port_to_bind=self.eventdev_device_bus_id)
+            self.sut_node.bind_eventdev_port(port_to_bind=self.eventdev_device_bus_id)
 
             #### Configuring evendev SS0 & SSOw limits ####
-            self.dut.set_eventdev_port_limits(
+            self.sut_node.set_eventdev_port_limits(
                 self.eventdev_device_id, self.eventdev_device_bus_id
             )
 
         self.headers_size = HEADER_SIZE["eth"] + HEADER_SIZE["ip"] + HEADER_SIZE["tcp"]
 
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
 
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
         self.build_eventdev_app()
 
@@ -90,19 +90,19 @@  class TestEventdevPerf(TestCase):
             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()
+        self.pktgen_helper = TrafficGeneratorStream()
 
     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
+            tgen_input, rate_percent, None, self.tg_node.perf_tg
         )
-        result = self.tester.pktgen.measure_throughput(stream_ids=streams)
+        result = self.tg_node.perf_tg.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.app_command = self.sut_node.apps_name["eventdev_pipeline"]
+        out = self.sut_node.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")
 
@@ -117,7 +117,7 @@  class TestEventdevPerf(TestCase):
         self.Port_pci_ids = []
         command_line1 = self.app_command + " -l %s -a %s"
         for i in range(0, nports):
-            self.Port_pci_ids.append(self.dut.ports_info[i]["pci"])
+            self.Port_pci_ids.append(self.sut_node.ports_info[i]["pci"])
             ## Adding core-list and pci-ids
             command_line1 = command_line1 + " -a %s "
         ## Adding test and stage types
@@ -133,19 +133,19 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -154,7 +154,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -172,7 +172,7 @@  class TestEventdevPerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -186,11 +186,11 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -199,7 +199,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -227,19 +227,19 @@  class TestEventdevPerf(TestCase):
         Evendev Performance Benchmarking with 1 ports with test_type=pipeline_atq and schedule_type=parallel.
         """
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -248,7 +248,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -266,7 +266,7 @@  class TestEventdevPerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -280,11 +280,11 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -293,7 +293,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -322,19 +322,19 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -343,7 +343,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -361,7 +361,7 @@  class TestEventdevPerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -375,11 +375,11 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -388,7 +388,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -417,19 +417,19 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -438,7 +438,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -456,7 +456,7 @@  class TestEventdevPerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -470,11 +470,11 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -483,7 +483,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -512,19 +512,19 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -533,7 +533,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -551,7 +551,7 @@  class TestEventdevPerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -565,11 +565,11 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -578,7 +578,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -607,19 +607,19 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -628,7 +628,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -646,7 +646,7 @@  class TestEventdevPerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -660,11 +660,11 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -673,7 +673,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -702,26 +702,26 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -730,7 +730,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -749,7 +749,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -762,21 +762,21 @@  class TestEventdevPerf(TestCase):
                 # create pcap file
                 self.logger.info("Running with frame size %d " % frame_size)
                 payload_size = frame_size - self.headers_size
-                self.tester.scapy_append(
+                self.tg_node.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)])'
                     % (
                         os.sep.join([self.output_path, "event_test1.pcap"]),
                         payload_size,
                     )
                 )
-                self.tester.scapy_append(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -785,7 +785,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -814,26 +814,26 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -842,7 +842,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -861,7 +861,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -875,16 +875,16 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -893,7 +893,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -922,26 +922,26 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -950,7 +950,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -969,7 +969,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -983,16 +983,16 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1001,7 +1001,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1030,26 +1030,26 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -1058,7 +1058,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1077,7 +1077,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1091,16 +1091,16 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1109,7 +1109,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1138,26 +1138,26 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -1166,7 +1166,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1185,7 +1185,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1199,16 +1199,16 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1217,7 +1217,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1246,26 +1246,26 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -1274,7 +1274,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1293,7 +1293,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1307,16 +1307,16 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1325,7 +1325,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1354,40 +1354,40 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -1396,7 +1396,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1417,7 +1417,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1431,26 +1431,26 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1459,7 +1459,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1487,40 +1487,40 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -1529,7 +1529,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1550,7 +1550,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1564,26 +1564,26 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1592,7 +1592,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1621,40 +1621,40 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -1663,7 +1663,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1684,7 +1684,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1698,26 +1698,26 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1726,7 +1726,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1755,40 +1755,40 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -1797,7 +1797,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1818,7 +1818,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1832,26 +1832,26 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1860,7 +1860,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1889,40 +1889,40 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -1930,7 +1930,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1951,7 +1951,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1965,26 +1965,26 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1993,7 +1993,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -2022,40 +2022,40 @@  class TestEventdevPerf(TestCase):
         """
 
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -2064,7 +2064,7 @@  class TestEventdevPerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -2085,7 +2085,7 @@  class TestEventdevPerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "Configured", 100)
+            self.sut_node.send_expect(command_line, "Configured", 100)
 
             info = "Executing Eventdev using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -2099,26 +2099,26 @@  class TestEventdevPerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -2127,7 +2127,7 @@  class TestEventdevPerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -2159,6 +2159,6 @@  class TestEventdevPerf(TestCase):
         """
         Run after each test suite.
         """
-        self.dut.send_expect("^C", "# ", 50)
-        self.dut.unbind_eventdev_port(port_to_unbind=self.eventdev_device_bus_id)
-        self.dut.kill_all()
+        self.sut_node.send_expect("^C", "# ", 50)
+        self.sut_node.unbind_eventdev_port(port_to_unbind=self.eventdev_device_bus_id)
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_eventdev_pipeline.py b/tests/TestSuite_eventdev_pipeline.py
index efd6605a..f81de864 100644
--- a/tests/TestSuite_eventdev_pipeline.py
+++ b/tests/TestSuite_eventdev_pipeline.py
@@ -14,7 +14,7 @@  import scapy.layers.inet
 from scapy.utils import rdpcap
 
 import framework.utils as utils
-from framework.packet import Packet
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.test_case import TestCase
 
 
@@ -28,11 +28,11 @@  class TestEventdevPipeline(TestCase):
         self.core_config = "1S/8C/1T"
         self.build_eventdev_app()
 
-        self.dut_ports = self.dut.get_ports()
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports for testing")
+        self.sut_ports = self.sut_node.get_ports()
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports for testing")
 
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
-        self.core_list = self.dut.get_core_list(
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        self.core_list = self.sut_node.get_core_list(
             self.core_config, socket=self.ports_socket
         )
         self.verify(len(self.core_list) >= 8, "sever no enough cores to run this suite")
@@ -47,11 +47,11 @@  class TestEventdevPipeline(TestCase):
 
         self.taskset_core_list = ",".join(self.core_list)
 
-        self.rx_port = self.tester.get_local_port(self.dut_ports[0])
+        self.rx_port = self.tg_node.get_local_port(self.sut_ports[0])
         self.tx_port = self.rx_port
-        self.rx_interface = self.tester.get_interface(self.rx_port)
-        self.tx_interface = self.tester.get_interface(self.tx_port)
-        self.d_mac = self.dut.get_mac_address(self.dut_ports[0])
+        self.rx_interface = self.tg_node.get_interface(self.rx_port)
+        self.tx_interface = self.tg_node.get_interface(self.tx_port)
+        self.d_mac = self.sut_node.get_mac_address(self.sut_ports[0])
 
     def set_up(self):
         """
@@ -60,8 +60,8 @@  class TestEventdevPipeline(TestCase):
         pass
 
     def build_eventdev_app(self):
-        self.app_command = self.dut.apps_name["eventdev_pipeline"]
-        out = self.dut.build_dpdk_apps("examples/eventdev_pipeline")
+        self.app_command = self.sut_node.apps_name["eventdev_pipeline"]
+        out = self.sut_node.build_dpdk_apps("examples/eventdev_pipeline")
         # self.verify('make: Leaving directory' in out, "Compilation failed")
         self.verify("Error" not in out, "compilation error 1")
         self.verify("No such file" not in out, "compilation error 2")
@@ -70,8 +70,8 @@  class TestEventdevPipeline(TestCase):
         """
         run eventdev_pipeline command
         """
-        eal_params = self.dut.create_eal_parameters(
-            cores=self.core_list, ports=[self.dut.ports_info[0]["pci"]]
+        eal_params = self.sut_node.create_eal_parameters(
+            cores=self.core_list, ports=[self.sut_node.ports_info[0]["pci"]]
         )
         command_line = (
             "taskset -c %s "
@@ -88,23 +88,23 @@  class TestEventdevPipeline(TestCase):
             self.core_mask_wk,
             cmd_type,
         )
-        self.dut.send_expect(command_line, "Port 0", 30)
+        self.sut_node.send_expect(command_line, "Port 0", 30)
 
-        out = self.dut.get_session_output()
+        out = self.sut_node.get_session_output()
         self.verify("executing NIC Rx" in out, "lcore of rx not right")
         self.verify("executing NIC Tx" in out, "lcore of tx not right")
         self.verify("executing scheduler" in out, "lcore of scheduler not right")
         self.verify("executing worker" in out, "lcore of worker not right")
 
     def remove_dhcp_from_revpackets(self, inst, timeout=3):
-        pkts = self.tester.load_tcpdump_sniff_packets(inst, timeout)
+        scapy_pkts = self.tg_node.load_tcpdump_sniff_packets(inst, timeout)
         i = 0
-        while len(pkts) != 0 and i <= len(pkts) - 1:
-            if pkts[i].haslayer("DHCP"):
-                pkts.pktgen.pkts.pop(i)
+        while len(scapy_pkts) != 0 and i <= len(scapy_pkts) - 1:
+            if scapy_pkts[i].haslayer("DHCP"):
+                scapy_pkts.scapy_pkt_util.pkts.pop(i)
                 i = i - 1
             i = i + 1
-        return pkts
+        return scapy_pkts
 
     def send_ordered_packet(self, count=1):
         """
@@ -116,7 +116,7 @@  class TestEventdevPipeline(TestCase):
         if has eight flow, the pcap has 8 couples with diff 5 tuple, and each couple load info from
         000001 to 000012
         """
-        pkt = Packet()
+        scapy_pkt_builder = ScapyPacketBuilder()
         for queue in range(self.queues):
             config_opt = [
                 ("ether", {"dst": self.d_mac, "src": self.s_mac, "src": self.s_mac}),
@@ -127,7 +127,7 @@  class TestEventdevPipeline(TestCase):
             # if multi queue, create self.packet_num with diff 5 tuple,
             # each tuple have (self.packet_num//self.queues) pkts
             pkt_num = self.packet_num // self.queues
-            pkt.generate_random_pkts(
+            scapy_pkt_builder.generate_random_pkts(
                 pktnum=pkt_num,
                 random_type=["UDP"],
                 ip_increase=False,
@@ -137,12 +137,12 @@  class TestEventdevPipeline(TestCase):
             # config raw info in pkts
             for i in range(pkt_num):
                 payload = "0000%.2d" % (i + 1)
-                pkt.pktgen.pkts[i + pkt_num * queue]["Raw"].load = payload
+                scapy_pkt_builder.scapy_pkt_util.pkts[i + pkt_num * queue]["Raw"].load = payload
 
         filt = [{"layer": "ether", "config": {"src": "%s" % self.s_mac}}]
-        inst = self.tester.tcpdump_sniff_packets(self.rx_interface, filters=filt)
-        pkt.send_pkt(
-            crb=self.tester, tx_port=self.tx_interface, count=count, timeout=300
+        inst = self.tg_node.tcpdump_sniff_packets(self.rx_interface, filters=filt)
+        scapy_pkt_builder.send_pkt(
+            node=self.tg_node, tx_port=self.tx_interface, count=count, timeout=300
         )
         self.pkts = self.remove_dhcp_from_revpackets(inst)
 
@@ -155,8 +155,8 @@  class TestEventdevPipeline(TestCase):
         self.send_ordered_packet(count=100)
         # exit the eventdev_pipeline app
         # and get the output info
-        self.dut.send_expect("^c", "Signal")
-        out = self.dut.get_session_output(timeout=3)
+        self.sut_node.send_expect("^c", "Signal")
+        out = self.sut_node.get_session_output(timeout=3)
         work_rx = []
         for wk in self.core_list_wk:
             one_info = re.search(
@@ -299,7 +299,7 @@  class TestEventdevPipeline(TestCase):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         time.sleep(5)
 
     def tear_down_all(self):
diff --git a/tests/TestSuite_eventdev_pipeline_perf.py b/tests/TestSuite_eventdev_pipeline_perf.py
index 1765e9fa..ba4f51d4 100644
--- a/tests/TestSuite_eventdev_pipeline_perf.py
+++ b/tests/TestSuite_eventdev_pipeline_perf.py
@@ -15,10 +15,10 @@  from time import sleep
 
 import framework.utils as utils
 import nics.perf_report as perf_report
-from framework.pktgen import PacketGeneratorHelper
 from framework.pmd_output import PmdOutput
 from framework.settings import FOLDERS, HEADER_SIZE
 from framework.test_case import TestCase
+from framework.tg_perf import TrafficGeneratorStream
 from nics.system_info import SystemInfo
 
 
@@ -54,33 +54,33 @@  class TestEventdevPipelinePerf(TestCase):
         self.blocklist = ""
 
         # Based on h/w type, choose how many ports to use
-        self.dut_ports = self.dut.get_ports()
-        if self.dut.get_os_type() == "linux":
-            # Get dut system information
-            port_num = self.dut_ports[0]
-            pci_device_id = self.dut.ports_info[port_num]["pci"]
-            ori_driver = self.dut.ports_info[port_num]["port"].get_nic_driver()
-            self.dut.ports_info[port_num]["port"].bind_driver()
+        self.sut_ports = self.sut_node.get_ports()
+        if self.sut_node.get_os_type() == "linux":
+            # Get SUT system information
+            port_num = self.sut_ports[0]
+            pci_device_id = self.sut_node.ports_info[port_num]["pci"]
+            ori_driver = self.sut_node.ports_info[port_num]["port"].get_nic_driver()
+            self.sut_node.ports_info[port_num]["port"].bind_driver()
 
-            self.dut.ports_info[port_num]["port"].bind_driver(ori_driver)
+            self.sut_node.ports_info[port_num]["port"].bind_driver(ori_driver)
 
         if self.nic == "cavium_a063":
             self.eventdev_device_bus_id = "0002:0e:00.0"
             self.eventdev_device_id = "a0f9"
 
             #### Bind evendev device ####
-            self.dut.bind_eventdev_port(port_to_bind=self.eventdev_device_bus_id)
+            self.sut_node.bind_eventdev_port(port_to_bind=self.eventdev_device_bus_id)
 
             #### Configuring evendev SS0 & SSOw limits ####
-            self.dut.set_eventdev_port_limits(
+            self.sut_node.set_eventdev_port_limits(
                 self.eventdev_device_id, self.eventdev_device_bus_id
             )
 
         self.headers_size = HEADER_SIZE["eth"] + HEADER_SIZE["ip"] + HEADER_SIZE["tcp"]
 
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
 
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
         self.build_eventdev_app()
 
@@ -90,19 +90,19 @@  class TestEventdevPipelinePerf(TestCase):
             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()
+        self.pktgen_helper = TrafficGeneratorStream()
 
     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
+            tgen_input, rate_percent, None, self.tg_node.perf_tg
         )
-        result = self.tester.pktgen.measure_throughput(stream_ids=streams)
+        result = self.tg_node.perf_tg.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.app_command = self.sut_node.apps_name["eventdev_pipeline"]
+        out = self.sut_node.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")
 
@@ -117,7 +117,7 @@  class TestEventdevPipelinePerf(TestCase):
         self.Port_pci_ids = []
         command_line1 = self.app_command + " -c %s -a %s"
         for i in range(0, nports):
-            self.Port_pci_ids.append(self.dut.ports_info[i]["pci"])
+            self.Port_pci_ids.append(self.sut_node.ports_info[i]["pci"])
             ## Adding core-list and pci-ids
             command_line1 = command_line1 + " -a %s "
         ## Adding test and stage types
@@ -129,19 +129,19 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline Performance Benchmarking with 1 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -150,7 +150,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -165,7 +165,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -179,11 +179,11 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -192,7 +192,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -220,19 +220,19 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline Performance Benchmarking with 1 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -241,7 +241,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -256,7 +256,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -270,11 +270,11 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -283,7 +283,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -311,19 +311,19 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline Performance Benchmarking with 1 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 1, "Insufficient ports for 1 ports performance test"
+            len(self.sut_ports) >= 1, "Insufficient ports for 1 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test.pcap"]),
             )
         )
@@ -332,7 +332,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -347,7 +347,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.eventdev_device_bus_id,
                 self.Port_pci_ids[0],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -361,11 +361,11 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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)
                 )
-                self.tester.scapy_execute()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -374,7 +374,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -402,26 +402,26 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline Performance Benchmarking with 2 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -430,7 +430,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -446,7 +446,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -460,16 +460,16 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -478,7 +478,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -506,26 +506,26 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline parallel schedule type Performance Benchmarking with 2 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -534,7 +534,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -550,7 +550,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -564,16 +564,16 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -582,7 +582,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -610,26 +610,26 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline Order schedule type Performance Benchmarking with 2 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 2, "Insufficient ports for 2 ports performance test"
+            len(self.sut_ports) >= 2, "Insufficient ports for 2 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 os.sep.join([self.output_path, "event_test2.pcap"]),
             )
         )
@@ -638,7 +638,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -654,7 +654,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.Port_pci_ids[0],
                 self.Port_pci_ids[1],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -668,16 +668,16 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -686,7 +686,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -714,40 +714,40 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline Performance Benchmarking with 4 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -756,7 +756,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -774,7 +774,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -788,26 +788,26 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -816,7 +816,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -844,40 +844,40 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline parallel schedule type Performance Benchmarking with 4 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -886,7 +886,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -904,7 +904,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -918,26 +918,26 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -946,7 +946,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -974,40 +974,40 @@  class TestEventdevPipelinePerf(TestCase):
         Evendev_Pipeline Order schedule type Performance Benchmarking with 4 ports.
         """
         self.verify(
-            len(self.dut_ports) >= 4, "Insufficient ports for 4 ports performance test"
+            len(self.sut_ports) >= 4, "Insufficient ports for 4 ports performance test"
         )
         self.perf_results["header"] = []
         self.perf_results["data"] = []
 
-        all_cores_mask = utils.create_mask(self.dut.get_core_list("all"))
+        all_cores_mask = utils.create_mask(self.sut_node.get_core_list("all"))
 
         # prepare traffic generator input
         tgen_input = []
         tgen_input.append(
             (
-                self.tester.get_local_port(self.dut_ports[0]),
-                self.tester.get_local_port(self.dut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[1]),
+                self.tg_node.get_local_port(self.sut_ports[0]),
                 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]),
+                self.tg_node.get_local_port(self.sut_ports[3]),
+                self.tg_node.get_local_port(self.sut_ports[2]),
                 os.sep.join([self.output_path, "event_test4.pcap"]),
             )
         )
@@ -1016,7 +1016,7 @@  class TestEventdevPipelinePerf(TestCase):
         for test_cycle in self.test_cycles:
             core_config = test_cycle["cores"]
 
-            core_list = self.dut.get_core_list(
+            core_list = self.sut_node.get_core_list(
                 core_config,
                 socket=self.ports_socket,
                 from_last=self.get_cores_from_last,
@@ -1034,7 +1034,7 @@  class TestEventdevPipelinePerf(TestCase):
                 self.Port_pci_ids[2],
                 self.Port_pci_ids[3],
             )
-            self.dut.send_expect(command_line, "eventdev port 0", 100)
+            self.sut_node.send_expect(command_line, "eventdev port 0", 100)
 
             info = "Executing Eventdev_pipeline using %s\n" % test_cycle["cores"]
             self.logger.info(info)
@@ -1048,26 +1048,26 @@  class TestEventdevPipelinePerf(TestCase):
                 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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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(
+                self.tg_node.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()
+                self.tg_node.scapy_execute()
 
                 # run traffic generator
                 _, pps = self.suite_measure_throughput(tgen_input, 100, 60)
@@ -1076,7 +1076,7 @@  class TestEventdevPipelinePerf(TestCase):
                 test_cycle["Mpps"][frame_size] = float("%.3f" % pps)
                 test_cycle["pct"][frame_size] = float("%.3f" % pct)
 
-            self.dut.send_expect("^C", "# ", 50)
+            self.sut_node.send_expect("^C", "# ", 50)
             sleep(5)
 
         for n in range(len(self.test_cycles)):
@@ -1108,6 +1108,6 @@  class TestEventdevPipelinePerf(TestCase):
         """
         Run after each test suite.
         """
-        self.dut.send_expect("^C", "# ", 50)
-        self.dut.unbind_eventdev_port(port_to_unbind=self.eventdev_device_bus_id)
-        self.dut.kill_all()
+        self.sut_node.send_expect("^C", "# ", 50)
+        self.sut_node.unbind_eventdev_port(port_to_unbind=self.eventdev_device_bus_id)
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_example_build.py b/tests/TestSuite_example_build.py
index 06680eba..bce0035c 100644
--- a/tests/TestSuite_example_build.py
+++ b/tests/TestSuite_example_build.py
@@ -30,12 +30,12 @@  class TestExamplebuild(TestCase):
         """
         Verify example applications compile successfully
         """
-        out = self.dut.send_expect("ls /root/intel-cmt-cat-master/lib", "#")
+        out = self.sut_node.send_expect("ls /root/intel-cmt-cat-master/lib", "#")
         if "No such file or directory" not in out:
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "export PQOS_INSTALL_PATH=/root/intel-cmt-cat-master/lib", "#"
             )
-        out = self.dut.build_dpdk_apps("./examples", "#")
+        out = self.sut_node.build_dpdk_apps("./examples", "#")
         verify_info = [
             "Error",
             "Stop",
diff --git a/tests/TestSuite_external_memory.py b/tests/TestSuite_external_memory.py
index 8163a7ec..782f21d5 100644
--- a/tests/TestSuite_external_memory.py
+++ b/tests/TestSuite_external_memory.py
@@ -20,10 +20,10 @@  class TestExternalMemory(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
-        self.pmdout = PmdOutput(self.dut)
-        self.app_testpmd_path = self.dut.apps_name["test-pmd"]
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports")
+        self.pmdout = PmdOutput(self.sut_node)
+        self.app_testpmd_path = self.sut_node.apps_name["test-pmd"]
 
     def set_up(self):
         """
@@ -36,39 +36,39 @@  class TestExternalMemory(TestCase):
         Insmod modProbe before run test case
         """
         if modename == "igb_uio":
-            self.dut.send_expect("modprobe uio", "#", 10)
-            out = self.dut.send_expect("lsmod | grep igb_uio", "#")
+            self.sut_node.send_expect("modprobe uio", "#", 10)
+            out = self.sut_node.send_expect("lsmod | grep igb_uio", "#")
             if "igb_uio" in out:
-                self.dut.send_expect("rmmod -f igb_uio", "#", 10)
-            self.dut.send_expect(
+                self.sut_node.send_expect("rmmod -f igb_uio", "#", 10)
+            self.sut_node.send_expect(
                 "insmod ./" + self.target + "/kmod/igb_uio.ko", "#", 10
             )
 
-            out = self.dut.send_expect("lsmod | grep igb_uio", "#")
+            out = self.sut_node.send_expect("lsmod | grep igb_uio", "#")
             assert "igb_uio" in out, "Failed to insmod igb_uio"
 
-            self.dut.bind_interfaces_linux(driver="igb_uio")
+            self.sut_node.bind_interfaces_linux(driver="igb_uio")
 
         if modename == "vfio-pci":
-            self.dut.send_expect("rmmod vfio_pci", "#", 10)
-            self.dut.send_expect("rmmod vfio_iommu_type1", "#", 10)
-            self.dut.send_expect("rmmod vfio", "#", 10)
-            self.dut.send_expect("modprobe vfio", "#", 10)
-            self.dut.send_expect("modprobe vfio_pci", "#", 10)
-            out = self.dut.send_expect("lsmod | grep vfio_iommu_type1", "#")
+            self.sut_node.send_expect("rmmod vfio_pci", "#", 10)
+            self.sut_node.send_expect("rmmod vfio_iommu_type1", "#", 10)
+            self.sut_node.send_expect("rmmod vfio", "#", 10)
+            self.sut_node.send_expect("modprobe vfio", "#", 10)
+            self.sut_node.send_expect("modprobe vfio_pci", "#", 10)
+            out = self.sut_node.send_expect("lsmod | grep vfio_iommu_type1", "#")
             if not out:
-                out = self.dut.send_expect("ls /sys/module |grep vfio_pci", "#")
+                out = self.sut_node.send_expect("ls /sys/module |grep vfio_pci", "#")
             assert "vfio_pci" in out, "Failed to insmod vfio_pci"
 
-            self.dut.bind_interfaces_linux(driver="vfio-pci")
+            self.sut_node.bind_interfaces_linux(driver="vfio-pci")
 
     def test_IGB_UIO_xmem(self):
         """
         Verifier IGB_UIO and anonymous memory allocation
         """
         self.insmod_modprobe(modename="igb_uio")
-        self.eal_para = self.dut.create_eal_parameters(cores="1S/4C/1T")
-        self.dut.send_expect(
+        self.eal_para = self.sut_node.create_eal_parameters(cores="1S/4C/1T")
+        self.sut_node.send_expect(
             r"./%s %s -- --mp-alloc=xmem -i" % (self.app_testpmd_path, self.eal_para),
             "testpmd>",
             60,
@@ -80,8 +80,8 @@  class TestExternalMemory(TestCase):
         Verifier IGB_UIO and anonymous hugepage memory allocation
         """
         self.insmod_modprobe(modename="igb_uio")
-        self.eal_para = self.dut.create_eal_parameters(cores="1S/4C/1T")
-        self.dut.send_expect(
+        self.eal_para = self.sut_node.create_eal_parameters(cores="1S/4C/1T")
+        self.sut_node.send_expect(
             r"./%s %s -- --mp-alloc=xmemhuge -i"
             % (self.app_testpmd_path, self.eal_para),
             "testpmd>",
@@ -94,14 +94,14 @@  class TestExternalMemory(TestCase):
         Verifier VFIO_PCI and anonymous memory allocation
         """
         self.insmod_modprobe(modename="vfio-pci")
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "echo 655359 > /sys/module/vfio_iommu_type1/parameters/dma_entry_limit",
             "#",
             10,
         )
 
-        self.eal_para = self.dut.create_eal_parameters(cores="1S/4C/1T")
-        self.dut.send_expect(
+        self.eal_para = self.sut_node.create_eal_parameters(cores="1S/4C/1T")
+        self.sut_node.send_expect(
             r"./%s %s -- --mp-alloc=xmem -i" % (self.app_testpmd_path, self.eal_para),
             "testpmd>",
             60,
@@ -115,8 +115,8 @@  class TestExternalMemory(TestCase):
         """
         self.insmod_modprobe(modename="vfio-pci")
 
-        self.eal_para = self.dut.create_eal_parameters(cores="1S/4C/1T")
-        self.dut.send_expect(
+        self.eal_para = self.sut_node.create_eal_parameters(cores="1S/4C/1T")
+        self.sut_node.send_expect(
             r"./%s %s -- --mp-alloc=xmemhuge -i"
             % (self.app_testpmd_path, self.eal_para),
             "testpmd>",
@@ -126,39 +126,39 @@  class TestExternalMemory(TestCase):
         self.verifier_result()
 
     def verifier_result(self):
-        self.dut.send_expect("start", "testpmd>", 10)
-        self.pmdout.wait_link_status_up(self.dut_ports[0])
+        self.sut_node.send_expect("start", "testpmd>", 10)
+        self.pmdout.wait_link_status_up(self.sut_ports[0])
         self.scapy_send_packet(20)
-        out = self.dut.send_expect("stop", "testpmd>", 10)
+        out = self.sut_node.send_expect("stop", "testpmd>", 10)
 
         p = re.compile(r"\d+")
         result = p.findall(out)
-        amount = 20 * len(self.dut_ports)
+        amount = 20 * len(self.sut_ports)
         self.verify(str(amount) in result, "Wrong: can't get <%d> package" % amount)
 
-        self.dut.send_expect("quit", "#", 10)
+        self.sut_node.send_expect("quit", "#", 10)
 
-        self.dut.unbind_interfaces_linux(self.dut_ports)
+        self.sut_node.unbind_interfaces_linux(self.sut_ports)
 
     def scapy_send_packet(self, nu):
         """
         Send a packet to port
         """
-        for i in range(len(self.dut_ports)):
-            txport = self.tester.get_local_port(self.dut_ports[i])
-            mac = self.dut.get_mac_address(self.dut_ports[i])
-            txItf = self.tester.get_interface(txport)
-            self.tester.scapy_append(
+        for i in range(len(self.sut_ports)):
+            txport = self.tg_node.get_local_port(self.sut_ports[i])
+            mac = self.sut_node.get_mac_address(self.sut_ports[i])
+            txItf = self.tg_node.get_interface(txport)
+            self.tg_node.scapy_append(
                 "sendp([Ether()/IP()/UDP()/Raw('X'*18)], iface=\"%s\",count=%s)"
                 % (txItf, nu)
             )
-            self.tester.scapy_execute()
+            self.tg_node.scapy_execute()
 
     def tear_down(self):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         time.sleep(2)
         pass
 
@@ -166,5 +166,5 @@  class TestExternalMemory(TestCase):
         """
         Run after each test suite.
         """
-        self.dut.bind_interfaces_linux(driver=self.drivername)
+        self.sut_node.bind_interfaces_linux(driver=self.drivername)
         pass
diff --git a/tests/TestSuite_external_mempool_handler.py b/tests/TestSuite_external_mempool_handler.py
index aa22a35a..5c39f5ce 100644
--- a/tests/TestSuite_external_mempool_handler.py
+++ b/tests/TestSuite_external_mempool_handler.py
@@ -17,13 +17,13 @@  class TestExternalMempool(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.dut_ports = self.dut.get_ports()
+        self.sut_ports = self.sut_node.get_ports()
 
-        self.verify(len(self.dut_ports) >= 2, "Not enough ports")
+        self.verify(len(self.sut_ports) >= 2, "Not enough ports")
 
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
-        self.app_test_path = self.dut.apps_name["test"]
+        self.app_test_path = self.sut_node.apps_name["test"]
 
     def set_up(self):
         """
@@ -32,19 +32,19 @@  class TestExternalMempool(TestCase):
         pass
 
     def verify_unit_func(self, ops=""):
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "./%s -n 4 -c f --mbuf-pool-ops-name %s" % (self.app_test_path, ops),
             "R.*T.*E.*>.*>",
             60,
         )
-        out = self.dut.send_expect("mempool_autotest", "RTE>>", 120)
-        self.dut.send_expect("quit", "# ")
+        out = self.sut_node.send_expect("mempool_autotest", "RTE>>", 120)
+        self.sut_node.send_expect("quit", "# ")
         self.verify("Test OK" in out, "Mempool autotest failed")
 
     def verify_unit_perf(self):
-        self.dut.send_expect("./%s -n 4 -c f" % self.app_test_path, "R.*T.*E.*>.*>", 60)
-        out = self.dut.send_expect("mempool_perf_autotest", "RTE>>", 1200)
-        self.dut.send_expect("quit", "# ")
+        self.sut_node.send_expect("./%s -n 4 -c f" % self.app_test_path, "R.*T.*E.*>.*>", 60)
+        out = self.sut_node.send_expect("mempool_perf_autotest", "RTE>>", 1200)
+        self.sut_node.send_expect("quit", "# ")
         # may need to compare performance
         self.verify("Test OK" in out, "Mempool performance autotest failed")
 
@@ -55,15 +55,15 @@  class TestExternalMempool(TestCase):
         self.pmdout.execute_cmd("start")
 
         tgen_input = []
-        tx_port = self.tester.get_local_port(self.dut_ports[0])
-        rx_port = self.tester.get_local_port(self.dut_ports[1])
+        tx_port = self.tg_node.get_local_port(self.sut_ports[0])
+        rx_port = self.tg_node.get_local_port(self.sut_ports[1])
         tgen_input.append((tx_port, rx_port))
 
-        tx_port = self.tester.get_local_port(self.dut_ports[1])
-        rx_port = self.tester.get_local_port(self.dut_ports[0])
+        tx_port = self.tg_node.get_local_port(self.sut_ports[1])
+        rx_port = self.tg_node.get_local_port(self.sut_ports[0])
         tgen_input.append((tx_port, rx_port))
 
-        result = self.tester.check_random_pkts(tgen_input, allow_miss=False)
+        result = self.tg_node.check_random_pkts(tgen_input, allow_miss=False)
 
         self.pmdout.quit()
 
@@ -108,7 +108,7 @@  class TestExternalMempool(TestCase):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
         pass
 
     def tear_down_all(self):
diff --git a/tests/TestSuite_fips_cryptodev.py b/tests/TestSuite_fips_cryptodev.py
index c84a047f..6c645224 100644
--- a/tests/TestSuite_fips_cryptodev.py
+++ b/tests/TestSuite_fips_cryptodev.py
@@ -11,12 +11,12 @@  from framework.test_case import TestCase
 
 class FipCryptodev(TestCase):
     def set_up_all(self):
-        out = self.dut.build_dpdk_apps("./examples/fips_validation")
+        out = self.sut_node.build_dpdk_apps("./examples/fips_validation")
         self.verify("Error" not in out, "Compilation error")
         self.verify("No such" not in out, "Compilation error")
         self.vf_driver = self.get_suite_cfg()["vf_driver"]
         cc.bind_qat_device(self, "vfio-pci")
-        self._app_path = self.dut.apps_name["fips_validation"]
+        self._app_path = self.sut_node.apps_name["fips_validation"]
         self._default_fips_opts = {
             "req-file": None,
             "rsp-file": None,
@@ -31,7 +31,7 @@  class FipCryptodev(TestCase):
         pass
 
     def tear_down(self):
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         pass
@@ -44,7 +44,7 @@  class FipCryptodev(TestCase):
         cmd_str = cc.get_dpdk_app_cmd_str(self._app_path, eal_opt_str, fips_opt_str)
         self.logger.info(cmd_str)
         try:
-            out = self.dut.send_expect(cmd_str, "#", 600)
+            out = self.sut_node.send_expect(cmd_str, "#", 600)
         except Exception as ex:
             self.logger.error(ex)
             raise ex
@@ -57,7 +57,7 @@  class FipCryptodev(TestCase):
         rep_list = re.findall(r"FIPS/(.*)/req/(.*).req", out)
 
         for alog_name, file_name in rep_list:
-            out = self.dut.send_expect(
+            out = self.sut_node.send_expect(
                 "diff %s/%s/resp/%s.rsp %s/%s/fax/%s.rsp | grep -v '#' | grep -v '\---'"
                 % (
                     self.FIP_path,
diff --git a/tests/TestSuite_firmware_version.py b/tests/TestSuite_firmware_version.py
index a5215c40..2634061a 100644
--- a/tests/TestSuite_firmware_version.py
+++ b/tests/TestSuite_firmware_version.py
@@ -17,9 +17,9 @@  class TestFirmwareVersion(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.ports = self.dut.get_ports()
+        self.ports = self.sut_node.get_ports()
 
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
     def set_up(self):
         """
@@ -70,7 +70,7 @@  class TestFirmwareVersion(TestCase):
         expected_version_info = expected_version_list[self.kdriver]
 
         for port in self.ports:
-            out = self.dut.send_expect(f"show port info {port}", "testpmd> ")
+            out = self.sut_node.send_expect(f"show port info {port}", "testpmd> ")
             self.verify("Firmware-version:" in out, "Firmware version not detected")
 
             version_info = self.pmdout.get_firmware_version(port)
@@ -147,10 +147,10 @@  class TestFirmwareVersion(TestCase):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
         Run after each test suite.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_flexible_rxd.py b/tests/TestSuite_flexible_rxd.py
index 06ea96ce..90820ce8 100644
--- a/tests/TestSuite_flexible_rxd.py
+++ b/tests/TestSuite_flexible_rxd.py
@@ -23,41 +23,41 @@  class TestFlexibleRxd(TestCase, FlexibleRxdBase):
         Modify the dpdk code.
         """
         cmds = [
-            "cd " + self.dut.base_dir,
+            "cd " + self.sut_node.base_dir,
             "cp ./app/test-pmd/util.c .",
             r"""sed -i "/if dpdk_conf.has('RTE_NET_IXGBE')/i\if dpdk_conf.has('RTE_NET_ICE')\n\tdeps += 'net_ice'\nendif" app/test-pmd/meson.build""",
             "sed -i '/#include <rte_flow.h>/a\#include <rte_pmd_ice.h>' app/test-pmd/util.c",
             "sed -i '/if (is_timestamp_enabled(mb))/i\                rte_net_ice_dump_proto_xtr_metadata(mb);' app/test-pmd/util.c",
         ]
-        [self.dut.send_expect(cmd, "#", 15, alt_session=True) for cmd in cmds]
-        self.dut.build_install_dpdk(self.dut.target)
+        [self.sut_node.send_expect(cmd, "#", 15, alt_session=True) for cmd in cmds]
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     def restore_compilation(self):
         """
         Resume editing operation.
         """
         cmds = [
-            "cd " + self.dut.base_dir,
+            "cd " + self.sut_node.base_dir,
             "cp ./util.c ./app/test-pmd/",
             "sed -i '/pmd_ice/d' app/test-pmd/meson.build",
             "rm -rf  ./util.c",
         ]
-        [self.dut.send_expect(cmd, "#", 15, alt_session=True) for cmd in cmds]
-        self.dut.build_install_dpdk(self.dut.target)
+        [self.sut_node.send_expect(cmd, "#", 15, alt_session=True) for cmd in cmds]
+        self.sut_node.build_install_dpdk(self.sut_node.target)
 
     @check_supported_nic(supported_nic)
     def set_up_all(self):
         """
         run at the start of each test suite.
         """
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports for testing")
-        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
-        self.cores = self.dut.get_core_list("1S/3C/1T", socket=self.ports_socket)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports for testing")
+        self.ports_socket = self.sut_node.get_numa_id(self.sut_ports[0])
+        self.cores = self.sut_node.get_core_list("1S/3C/1T", socket=self.ports_socket)
         self.verify(len(self.cores) >= 3, "Insufficient cpu cores for testing")
         self.preset_compilation()
-        self.pci = self.dut.ports_info[0]["pci"]
-        self.dst_mac = self.dut.get_mac_address(self.dut_ports[0])
+        self.pci = self.sut_node.ports_info[0]["pci"]
+        self.dst_mac = self.sut_node.get_mac_address(self.sut_ports[0])
         self.init_base(self.pci, self.dst_mac, "pf")
 
     def tear_down_all(self):
@@ -78,7 +78,7 @@  class TestFlexibleRxd(TestCase, FlexibleRxdBase):
         """
         self.close_testpmd()
         time.sleep(2)
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     @skip_unsupported_pkg("os default")
     def test_check_single_VLAN_fields_in_RXD_8021Q(self):
diff --git a/tests/TestSuite_floating_veb.py b/tests/TestSuite_floating_veb.py
index aabb9c27..22387b23 100644
--- a/tests/TestSuite_floating_veb.py
+++ b/tests/TestSuite_floating_veb.py
@@ -11,14 +11,14 @@  Test Floating VEB Features by Poll Mode Drivers.
 import re
 import time
 
-from framework.dut import Dut
-from framework.packet import Packet
 from framework.pmd_output import PmdOutput
-from framework.project_dpdk import DPDKdut
+from framework.project_dpdk import DPDKSut
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.settings import HEADER_SIZE
+from framework.sut_node import SutNode
 from framework.test_case import TestCase
 from framework.utils import RED
-from framework.virt_dut import VirtDut
+from framework.virt_sut import VirtSut
 
 
 class TestFloatingVEBSwitching(TestCase):
@@ -50,7 +50,7 @@  class TestFloatingVEBSwitching(TestCase):
         tx_bytes_prefix = "TX-bytes:"
 
         if dev == "first":
-            out = self.dut.send_expect("show port stats %d" % portid, "testpmd> ")
+            out = self.sut_node.send_expect("show port stats %d" % portid, "testpmd> ")
         elif dev == "second":
             out = self.session_secondary.send_expect(
                 "show port stats %d" % portid, "testpmd> "
@@ -88,19 +88,19 @@  class TestFloatingVEBSwitching(TestCase):
         """
         Send 1 packet
         """
-        self.dut.send_expect("start", "testpmd>")
-        mac = self.dut.get_mac_address(0)
+        self.sut_node.send_expect("start", "testpmd>")
+        mac = self.sut_node.get_mac_address(0)
 
         if tran_type == "vlan":
-            pkt = Packet(pkt_type="VLAN_UDP")
-            pkt.config_layer("ether", {"dst": vf_mac})
-            pkt.config_layer("vlan", {"vlan": 1})
-            pkt.send_pkt(self.tester, tx_port=itf)
+            scapy_pkt_builder = ScapyPacketBuilder(pkt_type="VLAN_UDP")
+            scapy_pkt_builder.config_layer("ether", {"dst": vf_mac})
+            scapy_pkt_builder.config_layer("vlan", {"vlan": 1})
+            scapy_pkt_builder.send_pkt(self.tg_node, tx_port=itf)
             time.sleep(0.5)
         else:
-            pkt = Packet(pkt_type="UDP")
-            pkt.config_layer("ether", {"dst": vf_mac})
-            pkt.send_pkt(self.tester, tx_port=itf)
+            scapy_pkt_builder = ScapyPacketBuilder(pkt_type="UDP")
+            scapy_pkt_builder.config_layer("ether", {"dst": vf_mac})
+            scapy_pkt_builder.send_pkt(self.tg_node, tx_port=itf)
             time.sleep(0.5)
 
     # Test cases.
@@ -119,13 +119,13 @@  class TestFloatingVEBSwitching(TestCase):
             ],
             "NIC Unsupported: " + str(self.nic),
         )
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
-        self.session_secondary = self.dut.new_session()
-        self.session_third = self.dut.new_session()
-        self.pmdout = PmdOutput(self.dut)
-        self.pmdout_2 = PmdOutput(self.dut, self.session_secondary)
-        self.pmdout_3 = PmdOutput(self.dut, self.session_third)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
+        self.session_secondary = self.sut_node.new_session()
+        self.session_third = self.sut_node.new_session()
+        self.pmdout = PmdOutput(self.sut_node)
+        self.pmdout_2 = PmdOutput(self.sut_node, self.session_secondary)
+        self.pmdout_3 = PmdOutput(self.sut_node, self.session_third)
 
         self.setup_1pf_ddriver_1vf_env_flag = 0
         self.setup_1pf_ddriver_2vf_env_flag = 0
@@ -135,25 +135,25 @@  class TestFloatingVEBSwitching(TestCase):
         self.vf2_mac = "00:11:22:33:44:13"
         self.vf3_mac = "00:11:22:33:44:14"
 
-        self.used_dut_port = self.dut_ports[0]
-        localPort = self.tester.get_local_port(self.dut_ports[0])
-        self.tester_itf = self.tester.get_interface(localPort)
-        self.pf_interface = self.dut.ports_info[self.used_dut_port]["intf"]
-        self.pf_mac_address = self.dut.get_mac_address(0)
-        self.pf_pci = self.dut.ports_info[self.used_dut_port]["pci"]
-        self.path = self.dut.apps_name["test-pmd"]
+        self.used_sut_port = self.sut_ports[0]
+        localPort = self.tg_node.get_local_port(self.sut_ports[0])
+        self.tg_itf = self.tg_node.get_interface(localPort)
+        self.pf_interface = self.sut_node.ports_info[self.used_sut_port]["intf"]
+        self.pf_mac_address = self.sut_node.get_mac_address(0)
+        self.pf_pci = self.sut_node.ports_info[self.used_sut_port]["pci"]
+        self.path = self.sut_node.apps_name["test-pmd"]
 
-        self.dut.init_reserved_core()
-        self.cores_vf0 = self.dut.get_reserved_core("2C", 0)
-        self.cores_vf1 = self.dut.get_reserved_core("2C", 0)
-        self.cores_vf2 = self.dut.get_reserved_core("2C", 0)
-        self.cores_vf3 = self.dut.get_reserved_core("2C", 0)
+        self.sut_node.init_reserved_core()
+        self.cores_vf0 = self.sut_node.get_reserved_core("2C", 0)
+        self.cores_vf1 = self.sut_node.get_reserved_core("2C", 0)
+        self.cores_vf2 = self.sut_node.get_reserved_core("2C", 0)
+        self.cores_vf3 = self.sut_node.get_reserved_core("2C", 0)
 
     def set_up(self):
         """
         This is to clear up environment before the case run.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def setup_env(self, driver, vf_num):
         """
@@ -161,8 +161,8 @@  class TestFloatingVEBSwitching(TestCase):
         dpdk driver, and nvfs(1,2,4)bond to dpdk driver.
         """
 
-        self.dut.generate_sriov_vfs_by_port(self.used_dut_port, vf_num, driver)
-        self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port]["vfs_port"]
+        self.sut_node.generate_sriov_vfs_by_port(self.used_sut_port, vf_num, driver)
+        self.sriov_vfs_port = self.sut_node.ports_info[self.used_sut_port]["vfs_port"]
         try:
 
             for port in self.sriov_vfs_port:
@@ -186,9 +186,9 @@  class TestFloatingVEBSwitching(TestCase):
         time.sleep(2)
         self.session_secondary.send_expect("quit", "# ")
         time.sleep(2)
-        self.dut.send_expect("quit", "# ")
+        self.sut_node.send_expect("quit", "# ")
         time.sleep(2)
-        self.dut.destroy_sriov_vfs_by_port(self.used_dut_port)
+        self.sut_node.destroy_sriov_vfs_by_port(self.used_sut_port)
         if vf_num == 1:
             self.setup_1pf_ddriver_1vf_env_flag = 0
         elif vf_num == 2:
@@ -210,9 +210,9 @@  class TestFloatingVEBSwitching(TestCase):
             ports=[self.pf_pci],
             port_options={self.pf_pci: "enable_floating_veb=1"},
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd>")
-        self.dut.send_expect("set promisc all off", "testpmd>")
-        self.dut.send_expect("start", "testpmd>")
+        self.sut_node.send_expect("set fwd rxonly", "testpmd>")
+        self.sut_node.send_expect("set promisc all off", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
         time.sleep(2)
         self.pmdout_2.start_testpmd(
             "Default",
@@ -226,7 +226,7 @@  class TestFloatingVEBSwitching(TestCase):
         time.sleep(2)
 
         self.session_secondary.send_expect("stop", "testpmd>", 2)
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
 
         vf0_tx_stats = self.veb_get_pmd_stats("second", 0, "tx")
         pf_rx_stats = self.veb_get_pmd_stats("first", 0, "rx")
@@ -237,7 +237,7 @@  class TestFloatingVEBSwitching(TestCase):
         )
         self.session_secondary.send_expect("quit", "# ")
         time.sleep(2)
-        self.dut.send_expect("quit", "# ")
+        self.sut_node.send_expect("quit", "# ")
         time.sleep(2)
 
         # PF->VF
@@ -248,8 +248,8 @@  class TestFloatingVEBSwitching(TestCase):
             port_options={self.pf_pci: "enable_floating_veb=1"},
             param="--eth-peer=0,%s" % self.vf0_mac,
         )
-        self.dut.send_expect("set fwd txonly", "testpmd>")
-        self.dut.send_expect("set promisc all off", "testpmd>")
+        self.sut_node.send_expect("set fwd txonly", "testpmd>")
+        self.sut_node.send_expect("set promisc all off", "testpmd>")
 
         self.pmdout_2.start_testpmd(
             "Default", prefix="test2", ports=[self.sriov_vfs_port[0].pci]
@@ -261,10 +261,10 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_secondary.send_expect("set promisc all off", "testpmd>")
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
-        self.dut.send_expect("start", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
         time.sleep(2)
 
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
         self.session_secondary.send_expect("stop", "testpmd>", 2)
 
         vf0_rx_stats = self.veb_get_pmd_stats("second", 0, "rx")
@@ -275,10 +275,10 @@  class TestFloatingVEBSwitching(TestCase):
             "VF0 can receive packet from PF, the floating VEB doesn't work",
         )
 
-    def test_floating_VEB_inter_tester_vf(self):
+    def test_floating_VEB_inter_tg_vf(self):
         """
         DPDK PF, then create 1VF, PF in the host running dpdk testpmd,
-        send traffic from tester to VF0.
+        send traffic from TG to VF0.
         In floating modeVF0 can't receive any packets;
         """
         # outside world ->VF
@@ -290,9 +290,9 @@  class TestFloatingVEBSwitching(TestCase):
             port_options={self.pf_pci: "enable_floating_veb=1"},
             param="--eth-peer=0,%s" % self.vf0_mac,
         )
-        self.dut.send_expect("set fwd mac", "testpmd>")
-        self.dut.send_expect("set promisc all on", "testpmd>")
-        self.dut.send_expect("start", "testpmd>")
+        self.sut_node.send_expect("set fwd mac", "testpmd>")
+        self.sut_node.send_expect("set promisc all on", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
         time.sleep(2)
 
         self.pmdout_2.start_testpmd(
@@ -306,9 +306,9 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
 
-        self.send_packet(self.vf0_mac, self.tester_itf)
+        self.send_packet(self.vf0_mac, self.tg_itf)
         time.sleep(2)
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
         self.session_secondary.send_expect("stop", "testpmd>", 2)
 
         vf0_rx_stats = self.veb_get_pmd_stats("second", 0, "rx")
@@ -333,7 +333,7 @@  class TestFloatingVEBSwitching(TestCase):
             ports=[self.pf_pci],
             port_options={self.pf_pci: "enable_floating_veb=1"},
         )
-        self.dut.send_expect("port start all", "testpmd>")
+        self.sut_node.send_expect("port start all", "testpmd>")
         time.sleep(2)
         # start VF0
         self.pmdout_2.start_testpmd(
@@ -371,15 +371,15 @@  class TestFloatingVEBSwitching(TestCase):
         )
 
         # PF link down, VF0 -> VF1
-        self.dut.send_expect("port stop all", "testpmd>", 10)
-        self.dut.send_expect("show port info 0", "Link status: down", 10)
+        self.sut_node.send_expect("port stop all", "testpmd>", 10)
+        self.sut_node.send_expect("show port info 0", "Link status: down", 10)
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_third.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_third.send_expect("stop", "testpmd>", 2)
         self.session_secondary.send_expect("stop", "testpmd>", 2)
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
 
         vf1_tx_stats_pfstop = self.veb_get_pmd_stats("third", 0, "tx")
         vf0_rx_stats_pfstop = self.veb_get_pmd_stats("second", 0, "rx")
@@ -413,8 +413,8 @@  class TestFloatingVEBSwitching(TestCase):
             + '-c 0xf -n 4 --socket-mem 1024,1024 -a "%s,enable_floating_veb=1,floating_veb_list=0;2-3" --file-prefix=test1 -- -i'
             % self.pf_pci
         )
-        self.dut.send_expect(cmd, "testpmd> ", 120)
-        self.dut.send_expect("port start all", "testpmd>")
+        self.sut_node.send_expect(cmd, "testpmd> ", 120)
+        self.sut_node.send_expect("port start all", "testpmd>")
         time.sleep(2)
         # VF1->VF0
         # start VF0
@@ -443,8 +443,8 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_third.send_expect("set promisc all off", "testpmd>")
 
         # PF link down
-        self.dut.send_expect("port stop all", "testpmd>", 30)
-        self.dut.send_expect("show port info 0", "Link status: down", 10)
+        self.sut_node.send_expect("port stop all", "testpmd>", 30)
+        self.sut_node.send_expect("show port info 0", "Link status: down", 10)
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_third.send_expect("start", "testpmd>")
@@ -483,7 +483,7 @@  class TestFloatingVEBSwitching(TestCase):
 
         # VF0->VF2
         # start VF0
-        self.dut.send_expect("port start all", "testpmd>")
+        self.sut_node.send_expect("port start all", "testpmd>")
         self.pmdout_2.start_testpmd(
             self.cores_vf0,
             prefix="test2",
@@ -504,8 +504,8 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_third.send_expect("set promisc all off", "testpmd>")
 
         # PF link down
-        self.dut.send_expect("port stop all", "testpmd>", 30)
-        self.dut.send_expect("show port info 0", "Link status: down", 10)
+        self.sut_node.send_expect("port stop all", "testpmd>", 30)
+        self.sut_node.send_expect("show port info 0", "Link status: down", 10)
         self.session_third.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_secondary.send_expect("start", "testpmd>")
@@ -531,7 +531,7 @@  class TestFloatingVEBSwitching(TestCase):
 
         # VF3->VF2
         # start VF3
-        self.dut.send_expect("port start all", "testpmd>")
+        self.sut_node.send_expect("port start all", "testpmd>")
         self.pmdout_2.start_testpmd(
             self.cores_vf3,
             prefix="test2",
@@ -552,8 +552,8 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_third.send_expect("set promisc all off", "testpmd>")
 
         # PF link down
-        self.dut.send_expect("port stop all", "testpmd>", 30)
-        self.dut.send_expect("show port info 0", "Link status: down", 10)
+        self.sut_node.send_expect("port stop all", "testpmd>", 30)
+        self.sut_node.send_expect("show port info 0", "Link status: down", 10)
         self.session_third.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_secondary.send_expect("start", "testpmd>")
@@ -579,10 +579,10 @@  class TestFloatingVEBSwitching(TestCase):
         1. Send traffic from VF0 to PF, then check PF will not see any traffic;
         2. Send traffic from VF1 to PF, then check PF will receive all the
            packets.
-        3. send traffic from tester to VF0, check VF0 can't receive traffic
-           from tester.
-        4. send traffic from tester to VF1, check VF1 can receive all the
-           traffic from tester.
+        3. send traffic from TG to VF0, check VF0 can't receive traffic
+           from TG.
+        4. send traffic from TG to VF1, check VF1 can receive all the
+           traffic from TG.
         5. send traffic from VF1 to VF2, check VF2 can receive all the traffic
            from VF1.
         """
@@ -593,10 +593,10 @@  class TestFloatingVEBSwitching(TestCase):
             + '-c 0xf -n 4 --socket-mem 1024,1024 -a "%s,enable_floating_veb=1,floating_veb_list=0;3" --file-prefix=test1 -- -i'
             % self.pf_pci
         )
-        self.dut.send_expect(cmd, "testpmd> ", 120)
-        self.dut.send_expect("set fwd rxonly", "testpmd>")
-        self.dut.send_expect("set promisc all off", "testpmd>")
-        self.dut.send_expect("start", "testpmd>")
+        self.sut_node.send_expect(cmd, "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd>")
+        self.sut_node.send_expect("set promisc all off", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
         time.sleep(2)
         self.pmdout_2.start_testpmd(
             "Default",
@@ -610,7 +610,7 @@  class TestFloatingVEBSwitching(TestCase):
         time.sleep(2)
 
         self.session_secondary.send_expect("stop", "testpmd>", 2)
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
 
         vf0_tx_stats = self.veb_get_pmd_stats("second", 0, "tx")
         pf_rx_stats = self.veb_get_pmd_stats("first", 0, "rx")
@@ -631,13 +631,13 @@  class TestFloatingVEBSwitching(TestCase):
         )
         self.session_secondary.send_expect("set fwd txonly", "testpmd>")
         self.session_secondary.send_expect("set promisc all off", "testpmd>")
-        self.dut.send_expect("start", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
 
         self.session_secondary.send_expect("stop", "testpmd>", 2)
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
 
         vf1_tx_stats = self.veb_get_pmd_stats("second", 0, "tx")
         pf_rx_stats = self.veb_get_pmd_stats("first", 0, "rx")
@@ -653,10 +653,10 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_secondary.send_expect("quit", "# ")
         time.sleep(2)
 
-        # tester->VF0
-        self.dut.send_expect("set fwd mac", "testpmd>")
-        self.dut.send_expect("set promisc all off", "testpmd>")
-        self.dut.send_expect("start", "testpmd>")
+        # TG->VF0
+        self.sut_node.send_expect("set fwd mac", "testpmd>")
+        self.sut_node.send_expect("set promisc all off", "testpmd>")
+        self.sut_node.send_expect("start", "testpmd>")
         time.sleep(2)
 
         self.pmdout_2.start_testpmd(
@@ -670,10 +670,10 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
 
-        self.send_packet(self.vf0_mac, self.tester_itf)
+        self.send_packet(self.vf0_mac, self.tg_itf)
         time.sleep(2)
         self.session_secondary.send_expect("stop", "testpmd>", 2)
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
 
         vf0_rx_stats = self.veb_get_pmd_stats("second", 0, "rx")
         self.verify(
@@ -683,7 +683,7 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_secondary.send_expect("quit", "# ")
         time.sleep(2)
 
-        # tester->VF1
+        # TG->VF1
         self.pmdout_2.start_testpmd(
             "Default", prefix="test2", ports=[self.sriov_vfs_port[1].pci]
         )
@@ -695,10 +695,10 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
 
-        self.send_packet(self.vf1_mac, self.tester_itf)
+        self.send_packet(self.vf1_mac, self.tg_itf)
         time.sleep(2)
         self.session_secondary.send_expect("stop", "testpmd>", 2)
-        self.dut.send_expect("stop", "testpmd>", 2)
+        self.sut_node.send_expect("stop", "testpmd>", 2)
 
         vf1_rx_stats = self.veb_get_pmd_stats("second", 0, "rx")
         self.verify(
@@ -769,8 +769,8 @@  class TestFloatingVEBSwitching(TestCase):
         self.session_third.send_expect("set fwd txonly", "testpmd>")
         self.session_third.send_expect("set promisc all off", "testpmd>")
 
-        self.dut.send_expect("port stop all", "testpmd>", 10)
-        self.dut.send_expect("show port info 0", "Link status: down", 10)
+        self.sut_node.send_expect("port stop all", "testpmd>", 10)
+        self.sut_node.send_expect("show port info 0", "Link status: down", 10)
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_third.send_expect("start", "testpmd>")
@@ -802,16 +802,16 @@  class TestFloatingVEBSwitching(TestCase):
         if self.setup_1pf_ddriver_4vf_env_flag == 1:
             self.destroy_env(4)
 
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
         Run after each test suite.
         """
-        self.dut.kill_all()
-        self.dut.close_session(self.session_secondary)
-        self.dut.close_session(self.session_third)
-        # Marvin recommended that all the dut ports should be bound to igb_uio.
-        for port_id in self.dut_ports:
-            port = self.dut.ports_info[port_id]["port"]
+        self.sut_node.kill_all()
+        self.sut_node.close_session(self.session_secondary)
+        self.sut_node.close_session(self.session_third)
+        # Marvin recommended that all the SUT ports should be bound to igb_uio.
+        for port_id in self.sut_ports:
+            port = self.sut_node.ports_info[port_id]["port"]
             port.bind_driver(driver=self.drivername)
diff --git a/tests/TestSuite_flow_classify.py b/tests/TestSuite_flow_classify.py
index ad0cd410..88e5e6a9 100644
--- a/tests/TestSuite_flow_classify.py
+++ b/tests/TestSuite_flow_classify.py
@@ -12,15 +12,15 @@  from functools import reduce
 from scapy.sendrecv import sendp
 
 from framework.exception import VerifyFailure
-from framework.packet import Packet
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.settings import HEADER_SIZE
 from framework.test_case import TestCase
 from framework.utils import create_mask as dts_create_mask
 
 
 class TestFlowClassify(TestCase):
-    def is_existed_on_crb(self, check_path, crb="dut"):
-        alt_session = self.dut.alt_session if crb == "dut" else self.tester.alt_session
+    def is_existed_on_node(self, check_path, node="sut"):
+        alt_session = self.sut_node.alt_session if node == "sut" else self.tg_node.alt_session
         alt_session.send_expect("ls %s > /dev/null 2>&1" % check_path, "# ")
         cmd = "echo $?"
         output = alt_session.send_expect(cmd, "# ")
@@ -28,10 +28,10 @@  class TestFlowClassify(TestCase):
         return ret
 
     def get_cores_mask(self, config="all"):
-        sockets = [self.dut.get_numa_id(index) for index in self.dut_ports]
+        sockets = [self.sut_node.get_numa_id(index) for index in self.sut_ports]
         socket_count = Counter(sockets)
         port_socket = list(socket_count.keys())[0] if len(socket_count) == 1 else -1
-        mask = dts_create_mask(self.dut.get_core_list(config, socket=port_socket))
+        mask = dts_create_mask(self.sut_node.get_core_list(config, socket=port_socket))
         return mask
 
     @property
@@ -48,25 +48,25 @@  class TestFlowClassify(TestCase):
         return output_path
 
     def get_ixia_peer_port(self):
-        for cnt in self.dut_ports:
-            if self.tester.get_local_port_type(cnt) != "ixia":
+        for cnt in self.sut_ports:
+            if self.tg_node.get_local_port_type(cnt) != "ixia":
                 continue
-            tester_port = self.tester.get_local_port(cnt)
-            return tester_port
+            tg_port = self.tg_node.get_local_port(cnt)
+            return tg_port
 
     def d_console(self, cmds):
-        return self.execute_cmds(cmds, con_name="dut")
+        return self.execute_cmds(cmds, con_name="sut")
 
     def d_a_console(self, cmds):
-        return self.execute_cmds(cmds, con_name="dut_alt")
+        return self.execute_cmds(cmds, con_name="sut_alt")
 
     def get_console(self, name):
-        if name == "dut":
-            console = self.dut.send_expect
-            msg_pipe = self.dut.get_session_output
-        elif name == "dut_alt":
-            console = self.dut.alt_session.send_expect
-            msg_pipe = self.dut.alt_session.session.get_output_all
+        if name == "sut":
+            console = self.sut_node.send_expect
+            msg_pipe = self.sut_node.get_session_output
+        elif name == "sut_alt":
+            console = self.sut_node.alt_session.send_expect
+            msg_pipe = self.sut_node.alt_session.session.get_output_all
         else:
             msg = "not support <{}> session".format(name)
             raise VerifyFailure(msg)
@@ -225,19 +225,19 @@  class TestFlowClassify(TestCase):
             savePath = os.sep.join([self.output_path, "pkt_{0}.pcap".format(stm_name)])
             pkt_type = values.get("type")
             pkt_layers = values.get("pkt_layers")
-            pkt = Packet(pkt_type=pkt_type)
+            scapy_pkt_builder = ScapyPacketBuilder(pkt_type=pkt_type)
             for layer in list(pkt_layers.keys()):
-                pkt.config_layer(layer, pkt_layers[layer])
-            pkt.pktgen.pkt.show()
-            streams.append(pkt.pktgen.pkt)
+                scapy_pkt_builder.config_layer(layer, pkt_layers[layer])
+            scapy_pkt_builder.scapy_pkt_util.pkt.show()
+            streams.append(scapy_pkt_builder.scapy_pkt_util.pkt)
         return streams
 
     def send_packet_by_scapy(self, config):
         tx_iface = config.get("tx_intf")
         cmd = "ifconfig {0} up".format(tx_iface)
-        self.tester.send_expect(cmd, "# ", 30)
+        self.tg_node.send_expect(cmd, "# ", 30)
         self.verify(
-            self.tester.is_interface_up(intf=tx_iface),
+            self.tg_node.is_interface_up(intf=tx_iface),
             "Wrong link status, should be up",
         )
         pkts = config.get("stream")
@@ -262,19 +262,19 @@  class TestFlowClassify(TestCase):
     def target_dir(self):
         """get absolute directory of target source code"""
         target_dir = (
-            "/root" + self.dut.base_dir[1:]
-            if self.dut.base_dir.startswith("~")
-            else self.dut.base_dir
+            "/root" + self.sut_node.base_dir[1:]
+            if self.sut_node.base_dir.startswith("~")
+            else self.sut_node.base_dir
         )
         return target_dir
 
     @property
     def target_name(self):
-        return self.dut.target
+        return self.sut_node.target
 
     def prepare_binary(self, name):
         example_dir = "examples/" + name
-        out = self.dut.build_dpdk_apps("./" + example_dir)
+        out = self.sut_node.build_dpdk_apps("./" + example_dir)
         self.verify("Error" not in out, "Compilation error")
         self.verify("No such" not in out, "Compilation error")
         binary_dir = os.path.join(self.target_dir, example_dir, "build")
@@ -288,10 +288,10 @@  class TestFlowClassify(TestCase):
         rule_config = os.sep.join(
             [self.target_dir, "examples", "flow_classify", "ipv4_rules_file.txt"]
         )
-        if not self.is_existed_on_crb(rule_config):
+        if not self.is_existed_on_node(rule_config):
             raise VerifyFailure("rules file doesn't existed")
         core = "1S/1C/1T"
-        eal_params = self.dut.create_eal_parameters()
+        eal_params = self.sut_node.create_eal_parameters()
         # option = r" -c {0} - n 4  --file-prefix=test {1} -- --rule_ipv4={2}".format(self.get_cores_mask(core),eal_params,rule_config)
         option = r" {0} -- --rule_ipv4={1}".format(eal_params, rule_config)
         prompt = "table_entry_delete succeeded"
@@ -300,7 +300,7 @@  class TestFlowClassify(TestCase):
         return output
 
     def close_flow_classify(self):
-        output = self.dut.get_session_output()
+        output = self.sut_node.get_session_output()
         dt = datetime.now()
         timestamp = dt.strftime("%Y-%m-%d_%H%M%S")
         self.test_data = "{0}/{1}_{2}.log".format(
@@ -326,7 +326,7 @@  class TestFlowClassify(TestCase):
         tx_port = (
             self.get_ixia_peer_port()
             if pktgen_name == "ixia"
-            else self.tester.get_interface(self.tester.get_local_port(0))
+            else self.tg_node.get_interface(self.tg_node.get_local_port(0))
         )
         # set traffic configuration
         ports_topo = {
@@ -456,8 +456,8 @@  class TestFlowClassify(TestCase):
         supported_drivers = ["i40e", "ixgbe", "igc", "igb", "ice"]
         result = all(
             [
-                self.dut.ports_info[index]["port"].default_driver in supported_drivers
-                for index in self.dut_ports
+                self.sut_node.ports_info[index]["port"].default_driver in supported_drivers
+                for index in self.sut_ports
             ]
         )
         msg = "current nic is not supported"
@@ -472,11 +472,11 @@  class TestFlowClassify(TestCase):
         Run before each test suite
         """
         # initialize ports topology
-        self.dut_ports = self.dut.get_ports()
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        self.sut_ports = self.sut_node.get_ports()
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports")
         # set binary process setting
         self.prepare_binary("flow_classify")
-        self.flow_classify = self.dut.apps_name["flow_classify"]
+        self.flow_classify = self.sut_node.apps_name["flow_classify"]
         self.verify_supported_nic()
 
     def set_up(self):
diff --git a/tests/TestSuite_flow_classify_softnic.py b/tests/TestSuite_flow_classify_softnic.py
index a3a0eed5..4a06e62f 100644
--- a/tests/TestSuite_flow_classify_softnic.py
+++ b/tests/TestSuite_flow_classify_softnic.py
@@ -20,43 +20,42 @@  from scapy.sendrecv import sendp, sniff
 from scapy.utils import hexstr, rdpcap, wrpcap
 
 import framework.utils as utils
-from framework.crb import Crb
-from framework.dut import Dut
 from framework.exception import VerifyFailure
-from framework.packet import Packet
+from framework.node import Node
 from framework.pmd_output import PmdOutput
-from framework.project_dpdk import DPDKdut
+from framework.project_dpdk import DPDKSut
 from framework.settings import DRIVERS, HEADER_SIZE
+from framework.sut_node import SutNode
 from framework.test_case import TestCase
-from framework.virt_dut import VirtDut
+from framework.virt_sut import VirtSut
 
 
 class TestFlowClassifySoftnic(TestCase):
-    def copy_config_files_to_dut(self):
+    def copy_config_files_to_sut(self):
         """
-        Copy firmware.cli from tester to DUT.
+        Copy firmware.cli from TG to SUT.
         """
         file = "flow_classify_softnic.tar.gz"
         src_file = r"./dep/%s" % file
         dst1 = "/tmp"
         dst2 = "/root/dpdk/drivers/net/softnic"
-        self.dut.session.copy_file_to(src_file, dst1)
-        self.dut.send_expect("tar xf %s/%s -C %s" % (dst1, file, dst2), "#", 30)
+        self.sut_node.session.copy_file_to(src_file, dst1)
+        self.sut_node.send_expect("tar xf %s/%s -C %s" % (dst1, file, dst2), "#", 30)
 
     def start_testpmd(self, filename, port_num):
         """
         Start testpmd.
         """
-        self.cores = self.dut.get_core_list("all")
+        self.cores = self.sut_node.get_core_list("all")
         self.set_ports(filename, port_num)
-        TESTPMD = self.dut.apps_name["test-pmd"]
-        cmd = "cat /sys/bus/pci/devices/%s/numa_node" % self.dut_p0_pci
-        numa_node = int(self.dut.send_expect(cmd, "# ", 60))
+        TESTPMD = self.sut_node.apps_name["test-pmd"]
+        cmd = "cat /sys/bus/pci/devices/%s/numa_node" % self.sut_p0_pci
+        numa_node = int(self.sut_node.send_expect(cmd, "# ", 60))
         cpu_id = numa_node if numa_node > 0 else 0
         ports_info = []
         for i in range(port_num):
             ports_info.append(i)
-        eal_params = self.dut.create_eal_parameters(cores=self.cores, ports=ports_info)
+        eal_params = self.sut_node.create_eal_parameters(cores=self.cores, ports=ports_info)
         VDEV = (
             "--vdev 'net_softnic0,firmware=./drivers/net/softnic/flow_classify_softnic/%s,cpu_id=%s,conn_port=8086'"
             % (filename, cpu_id)
@@ -71,13 +70,13 @@  class TestFlowClassifySoftnic(TestCase):
             )
         else:
             raise Exception("The number of port is wrong!")
-        self.dut.send_expect(cmd, "testpmd> ", 60)
+        self.sut_node.send_expect(cmd, "testpmd> ", 60)
 
     def set_ports(self, filename, port_num):
         """
         Set actual ports.
         """
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/^link LINK/d' ./drivers/net/softnic/flow_classify_softnic/%s"
             % filename,
             "# ",
@@ -85,26 +84,26 @@  class TestFlowClassifySoftnic(TestCase):
         )
         cmd = (
             "sed -i '1i\link LINK0 dev %s' ./drivers/net/softnic/flow_classify_softnic/%s"
-            % (self.dut_p0_pci, filename)
+            % (self.sut_p0_pci, filename)
         )
-        self.dut.send_expect(cmd, "# ", 20)
+        self.sut_node.send_expect(cmd, "# ", 20)
         cmd = (
             "sed -i '2i\link LINK1 dev %s' ./drivers/net/softnic/flow_classify_softnic/%s"
-            % (self.dut_p1_pci, filename)
+            % (self.sut_p1_pci, filename)
         )
-        self.dut.send_expect(cmd, "# ", 20)
+        self.sut_node.send_expect(cmd, "# ", 20)
         if port_num == 4:
             cmd = (
                 "sed -i '3i\link LINK2 dev %s' ./drivers/net/softnic/flow_classify_softnic/%s"
-                % (self.dut_p2_pci, filename)
+                % (self.sut_p2_pci, filename)
             )
-            self.dut.send_expect(cmd, "# ", 20)
+            self.sut_node.send_expect(cmd, "# ", 20)
             cmd = (
                 "sed -i '4i\link LINK3 dev %s' ./drivers/net/softnic/flow_classify_softnic/%s"
-                % (self.dut_p3_pci, filename)
+                % (self.sut_p3_pci, filename)
             )
-            self.dut.send_expect(cmd, "# ", 20)
-        self.dut.send_expect(
+            self.sut_node.send_expect(cmd, "# ", 20)
+        self.sut_node.send_expect(
             "sed -i 's/^thread 4 pipeline/thread %d pipeline/g' ./drivers/net/softnic/flow_classify_softnic/%s"
             % (self.port_num, filename),
             "# ",
@@ -115,7 +114,7 @@  class TestFlowClassifySoftnic(TestCase):
         """
         Set pipeline table.
         """
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "sed -i '/^pipeline RX table match/d' ./drivers/net/softnic/flow_classify_softnic/%s"
             % filename,
             "# ",
@@ -126,7 +125,7 @@  class TestFlowClassifySoftnic(TestCase):
             + cmd
             + "' ./drivers/net/softnic/flow_classify_softnic/%s" % filename
         )
-        self.dut.send_expect(command, "# ", 20)
+        self.sut_node.send_expect(command, "# ", 20)
 
     def get_flow_direction_param_of_tcpdump(self):
         """
@@ -134,7 +133,7 @@  class TestFlowClassifySoftnic(TestCase):
         """
         param = ""
         direct_param = r"(\s+)\[ (\S+) in\|out\|inout \]"
-        out = self.tester.send_expect("tcpdump -h", "# ", trim_whitespace=False)
+        out = self.tg_node.send_expect("tcpdump -h", "# ", trim_whitespace=False)
         for line in out.split("\n"):
             m = re.match(direct_param, line)
             if m:
@@ -154,20 +153,20 @@  class TestFlowClassifySoftnic(TestCase):
         Starts tcpdump in the background to sniff packets that received by interface.
         """
         command = "rm -f /tmp/tcpdump_{0}.pcap".format(interface)
-        self.tester.send_expect(command, "#")
+        self.tg_node.send_expect(command, "#")
         command = "tcpdump -n -e {0} -w /tmp/tcpdump_{1}.pcap -i {1} {2} 2>/tmp/tcpdump_{1}.out &".format(
             self.param_flow_dir, interface, filters
         )
-        self.tester.send_expect(command, "# ")
+        self.tg_node.send_expect(command, "# ")
 
     def tcpdump_stop_sniff(self):
         """
         Stops the tcpdump process running in the background.
         """
-        self.tester.send_expect("killall tcpdump", "# ")
+        self.tg_node.send_expect("killall tcpdump", "# ")
         # For the [pid]+ Done tcpdump... message after killing the process
         sleep(1)
-        self.tester.send_expect('echo "Cleaning buffer"', "# ")
+        self.tg_node.send_expect('echo "Cleaning buffer"', "# ")
         sleep(3)
 
     def write_pcap_file(self, pcap_file, pkts):
@@ -191,27 +190,27 @@  class TestFlowClassifySoftnic(TestCase):
         Return the sniff pkts.
         """
         self.pmdout.wait_link_status_up("all")
-        tx_port = self.tester.get_local_port(self.dut_ports[from_port % self.port_num])
-        rx_port = self.tester.get_local_port(self.dut_ports[to_port % self.port_num])
+        tx_port = self.tg_node.get_local_port(self.sut_ports[from_port % self.port_num])
+        rx_port = self.tg_node.get_local_port(self.sut_ports[to_port % self.port_num])
 
-        tx_interface = self.tester.get_interface(tx_port)
-        rx_interface = self.tester.get_interface(rx_port)
-        # check tester's link status before send packet
+        tx_interface = self.tg_node.get_interface(tx_port)
+        rx_interface = self.tg_node.get_interface(rx_port)
+        # check TG's link status before send packet
         for iface in [tx_interface, rx_interface]:
             self.verify(
-                self.tester.is_interface_up(intf=iface),
+                self.tg_node.is_interface_up(intf=iface),
                 "Wrong link status, should be up",
             )
 
         self.tcpdump_start_sniff(rx_interface, filters)
 
         # Prepare the pkts to be sent
-        self.tester.scapy_foreground()
-        self.tester.scapy_append('pkt = rdpcap("%s")' % (pcap_file))
-        self.tester.scapy_append(
+        self.tg_node.scapy_foreground()
+        self.tg_node.scapy_append('pkt = rdpcap("%s")' % (pcap_file))
+        self.tg_node.scapy_append(
             'sendp(pkt, iface="%s", count=%d)' % (tx_interface, count)
         )
-        self.tester.scapy_execute()
+        self.tg_node.scapy_execute()
 
         self.tcpdump_stop_sniff()
 
@@ -221,16 +220,16 @@  class TestFlowClassifySoftnic(TestCase):
         """
         Sent pkts that read from the pcap_file.
         """
-        tx_port = self.tester.get_local_port(self.dut_ports[from_port])
-        tx_interface = self.tester.get_interface(tx_port)
+        tx_port = self.tg_node.get_local_port(self.sut_ports[from_port])
+        tx_interface = self.tg_node.get_interface(tx_port)
 
         # Prepare the pkts to be sent
-        self.tester.scapy_foreground()
-        self.tester.scapy_append('pkt = rdpcap("%s")' % (pcap_file))
-        self.tester.scapy_append(
+        self.tg_node.scapy_foreground()
+        self.tg_node.scapy_append('pkt = rdpcap("%s")' % (pcap_file))
+        self.tg_node.scapy_append(
             'sendp(pkt, iface="%s", count=%d)' % (tx_interface, count)
         )
-        self.tester.scapy_execute()
+        self.tg_node.scapy_execute()
 
     def send_and_check_packets(
         self, pcap_file, pkt, ltype, src_dst, addr_port, from_port, to_port
@@ -272,7 +271,7 @@  class TestFlowClassifySoftnic(TestCase):
         rx_num = 0
         tx_num = 0
         for i in range(port):
-            stats = self.pmdout.get_pmd_stats(self.dut_ports[i])
+            stats = self.pmdout.get_pmd_stats(self.sut_ports[i])
             rx_num = rx_num + stats["RX-packets"]
             tx_num = tx_num + stats["TX-packets"]
         self.verify(
@@ -324,7 +323,7 @@  class TestFlowClassifySoftnic(TestCase):
             actions = "rss queues %s end" % queue_idx
 
         if l4type == "":
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow %s %d group %d ingress pattern eth / %s proto mask %d src mask %s dst mask %s src spec %s dst spec %s / end actions %s / end"
                 % (
                     operation,
@@ -342,7 +341,7 @@  class TestFlowClassifySoftnic(TestCase):
                 60,
             )
         else:
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow %s %d group %d ingress pattern eth / %s proto mask %d src mask %s dst mask %s src spec %s dst spec %s proto spec %d / %s src mask %d dst mask %d src spec %d dst spec %d / end actions %s / end"
                 % (
                     operation,
@@ -372,9 +371,9 @@  class TestFlowClassifySoftnic(TestCase):
         """
         self.pmdout.wait_link_status_up("all")
         self.verify(
-            self.tester.is_interface_up(intf=itf), "Wrong link status, should be up"
+            self.tg_node.is_interface_up(intf=itf), "Wrong link status, should be up"
         )
-        self.tester.scapy_foreground()
+        self.tg_node.scapy_foreground()
         if src_dst == "src":
             if ptype == "ipv4":
                 var = src_addr.split(".")
@@ -383,10 +382,10 @@  class TestFlowClassifySoftnic(TestCase):
                 for i in range(32):
                     packet = (
                         r'sendp([Ether(dst="%s", src=get_if_hwaddr("%s"))/IP(src="%s.%d", dst="%s", proto=17)/UDP(sport=100, dport=200)], iface="%s")'
-                        % (self.dut_p0_mac, itf, ipaddr, i, dst_addr, itf)
+                        % (self.sut_p0_mac, itf, ipaddr, i, dst_addr, itf)
                     )
-                    self.tester.scapy_append(packet)
-                self.tester.scapy_execute()
+                    self.tg_node.scapy_append(packet)
+                self.tg_node.scapy_execute()
             elif ptype == "ipv6":
                 var = src_addr.split(":")
                 string = ":"
@@ -397,10 +396,10 @@  class TestFlowClassifySoftnic(TestCase):
                 for i in range(16):
                     packet = (
                         r'sendp([Ether(dst="%s", src=get_if_hwaddr("%s"))/IPv6(src="%s:%d", dst="%s", nh=17)/UDP(sport=100, dport=200)], iface="%s")'
-                        % (self.dut_p0_mac, itf, ipaddr, i, dst_addr, itf)
+                        % (self.sut_p0_mac, itf, ipaddr, i, dst_addr, itf)
                     )
-                    self.tester.scapy_append(packet)
-                self.tester.scapy_execute()
+                    self.tg_node.scapy_append(packet)
+                self.tg_node.scapy_execute()
 
         elif src_dst == "dst":
             if ptype == "ipv4":
@@ -410,10 +409,10 @@  class TestFlowClassifySoftnic(TestCase):
                 for i in range(32):
                     packet = (
                         r'sendp([Ether(dst="%s", src=get_if_hwaddr("%s"))/IP(src="%s", dst="%s.%d", proto=17)/UDP(sport=100, dport=100)], iface="%s")'
-                        % (self.dut_p0_mac, itf, src_addr, ipaddr, i, itf)
+                        % (self.sut_p0_mac, itf, src_addr, ipaddr, i, itf)
                     )
-                    self.tester.scapy_append(packet)
-                self.tester.scapy_execute()
+                    self.tg_node.scapy_append(packet)
+                self.tg_node.scapy_execute()
             elif ptype == "ipv6":
                 var = dst_addr.split(":")
                 string = ":"
@@ -424,10 +423,10 @@  class TestFlowClassifySoftnic(TestCase):
                 for i in range(16):
                     packet = (
                         r'sendp([Ether(dst="%s", src=get_if_hwaddr("%s"))/IPv6(src="%s", dst="%s:%d", nh=17)/UDP(sport=100, dport=200)], iface="%s")'
-                        % (self.dut_p0_mac, itf, src_addr, ipaddr, i, itf)
+                        % (self.sut_p0_mac, itf, src_addr, ipaddr, i, itf)
                     )
-                    self.tester.scapy_append(packet)
-                self.tester.scapy_execute()
+                    self.tg_node.scapy_append(packet)
+                self.tg_node.scapy_execute()
 
     def check_packet_queue(self, queues=[], out=""):
         """
@@ -465,37 +464,37 @@  class TestFlowClassifySoftnic(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.dut_ports = self.dut.get_ports()
-        self.port_num = len(self.dut_ports)
+        self.sut_ports = self.sut_node.get_ports()
+        self.port_num = len(self.sut_ports)
         self.verify(
             self.port_num == 2 or self.port_num == 4,
             "Insufficient ports for speed testing",
         )
 
-        self.dut_p0_pci = self.dut.get_port_pci(self.dut_ports[0])
-        self.dut_p1_pci = self.dut.get_port_pci(self.dut_ports[1])
-        self.dut_p0_mac = self.dut.get_mac_address(self.dut_ports[0])
-        self.dut_p1_mac = self.dut.get_mac_address(self.dut_ports[1])
-        self.pf0_interface = self.dut.ports_info[self.dut_ports[0]]["intf"]
-        self.pf1_interface = self.dut.ports_info[self.dut_ports[1]]["intf"]
+        self.sut_p0_pci = self.sut_node.get_port_pci(self.sut_ports[0])
+        self.sut_p1_pci = self.sut_node.get_port_pci(self.sut_ports[1])
+        self.sut_p0_mac = self.sut_node.get_mac_address(self.sut_ports[0])
+        self.sut_p1_mac = self.sut_node.get_mac_address(self.sut_ports[1])
+        self.pf0_interface = self.sut_node.ports_info[self.sut_ports[0]]["intf"]
+        self.pf1_interface = self.sut_node.ports_info[self.sut_ports[1]]["intf"]
 
         if self.port_num == 4:
-            self.dut_p2_pci = self.dut.get_port_pci(self.dut_ports[2])
-            self.dut_p3_pci = self.dut.get_port_pci(self.dut_ports[3])
-            self.dut_p2_mac = self.dut.get_mac_address(self.dut_ports[2])
-            self.dut_p3_mac = self.dut.get_mac_address(self.dut_ports[3])
-            self.pf2_interface = self.dut.ports_info[self.dut_ports[2]]["intf"]
-            self.pf3_interface = self.dut.ports_info[self.dut_ports[3]]["intf"]
+            self.sut_p2_pci = self.sut_node.get_port_pci(self.sut_ports[2])
+            self.sut_p3_pci = self.sut_node.get_port_pci(self.sut_ports[3])
+            self.sut_p2_mac = self.sut_node.get_mac_address(self.sut_ports[2])
+            self.sut_p3_mac = self.sut_node.get_mac_address(self.sut_ports[3])
+            self.pf2_interface = self.sut_node.ports_info[self.sut_ports[2]]["intf"]
+            self.pf3_interface = self.sut_node.ports_info[self.sut_ports[3]]["intf"]
 
         self.ipv4_mask = "255.255.255.255"
         self.ipv6_mask = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
         self.portmask = 65535
         self.protomask = 255
 
-        self.pmdout = PmdOutput(self.dut)
-        localPort = self.tester.get_local_port(self.dut_ports[0])
-        self.tester_itf = self.tester.get_interface(localPort)
-        self.copy_config_files_to_dut()
+        self.pmdout = PmdOutput(self.sut_node)
+        localPort = self.tg_node.get_local_port(self.sut_ports[0])
+        self.tg_itf = self.tg_node.get_interface(localPort)
+        self.copy_config_files_to_sut()
 
         self.param_flow_dir = self.get_flow_direction_param_of_tcpdump()
 
@@ -567,12 +566,12 @@  class TestFlowClassifySoftnic(TestCase):
             dportspec=200,
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="2.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -582,7 +581,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="2.64.0.0", proto=6)
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -592,7 +591,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="2.128.0.0", dst="0.0.0.0", proto=132)
             / SCTP(sport=100, dport=200)
             / ("X" * 48)
@@ -602,7 +601,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="4.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -612,7 +611,7 @@  class TestFlowClassifySoftnic(TestCase):
         # send another 3 packets
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="3.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -622,7 +621,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="2.64.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -632,7 +631,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="2.128.0.0", dst="0.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -643,13 +642,13 @@  class TestFlowClassifySoftnic(TestCase):
         self.check_status(7, 4, self.port_num)
 
         # query rule
-        out = self.dut.send_expect("flow query %d 3 queue" % self.port_num, "QUEUE", 60)
+        out = self.sut_node.send_expect("flow query %d 3 queue" % self.port_num, "QUEUE", 60)
 
         # destroy rule 1
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow destroy %d rule 1" % self.port_num, "Flow rule #1 destroyed", 60
         )
-        destroy_out = self.dut.send_expect(
+        destroy_out = self.sut_node.send_expect(
             "flow list %d" % self.port_num, "testpmd> ", 60
         )
         self.verify("1" not in destroy_out, "destroy rule fail")
@@ -657,7 +656,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="2.64.0.0", proto=6)
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -671,17 +670,17 @@  class TestFlowClassifySoftnic(TestCase):
         self.verify("2.64.0.0" not in dst_ip_list, "rule 1 test fail")
 
         # flush rules
-        self.dut.send_expect("flow flush %d" % self.port_num, "testpmd> ", 60)
-        flush_out = self.dut.send_expect(
+        self.sut_node.send_expect("flow flush %d" % self.port_num, "testpmd> ", 60)
+        flush_out = self.sut_node.send_expect(
             "flow list %d" % self.port_num, "testpmd> ", 60
         )
         self.verify("Rule" not in flush_out, "flush rule fail")
-        self.dut.send_expect("clear port stats all", "testpmd> ", 60)
+        self.sut_node.send_expect("clear port stats all", "testpmd> ", 60)
 
         # test all the rules
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="2.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -691,7 +690,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="2.64.0.0", proto=6)
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -701,7 +700,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="2.128.0.0", dst="0.0.0.0", proto=132)
             / SCTP(sport=100, dport=200)
             / ("X" * 48)
@@ -711,7 +710,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="4.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -720,7 +719,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
 
         self.check_status(4, 0, self.port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv4_5tuple_hash_table(self):
         """
@@ -782,12 +781,12 @@  class TestFlowClassifySoftnic(TestCase):
             dportspec=204,
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.1", dst="200.0.0.1", proto=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -797,7 +796,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.2", dst="200.0.0.2", proto=17)
             / UDP(sport=102, dport=202)
             / ("X" * 48)
@@ -807,7 +806,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.3", dst="200.0.0.3", proto=132)
             / SCTP(sport=103, dport=203)
             / ("X" * 48)
@@ -817,14 +816,14 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.4", dst="200.0.0.4", proto=17)
             / UDP(sport=104, dport=204)
             / ("X" * 48)
         ]
         self.send_and_check_packets(pcap_file, pkt, "ipv4", "dst", "200.0.0.4", 0, 0)
 
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv4_addr_hash_table(self):
         """
@@ -870,12 +869,12 @@  class TestFlowClassifySoftnic(TestCase):
             dportspec=200,
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.1", dst="200.0.0.1", proto=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -885,7 +884,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.2", dst="200.0.0.2", proto=17)
             / UDP(sport=102, dport=202)
             / ("X" * 48)
@@ -895,7 +894,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.3", dst="200.0.0.3", proto=132)
             / SCTP(sport=103, dport=203)
             / ("X" * 48)
@@ -905,12 +904,12 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.4", dst="200.0.0.4")
             / ("X" * 48)
         ]
         self.send_and_check_packets(pcap_file, pkt, "ipv4", "src", "100.0.0.4", 0, 0)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         # match ipv4 dst_addr
         cmd = "pipeline RX table match hash ext key 8 mask FFFFFF0000000000 offset 286 buckets 16K size 64K action AP0"
@@ -953,12 +952,12 @@  class TestFlowClassifySoftnic(TestCase):
             l4type="",
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.1", dst="200.0.0.1", proto=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -968,7 +967,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.2", dst="200.0.1.2", proto=17)
             / UDP(sport=102, dport=202)
             / ("X" * 48)
@@ -978,7 +977,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.3", dst="200.0.2.3", proto=132)
             / SCTP(sport=103, dport=203)
             / ("X" * 48)
@@ -988,12 +987,12 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.4", dst="200.0.3.4")
             / ("X" * 48)
         ]
         self.send_and_check_packets(pcap_file, pkt, "ipv4", "dst", "200.0.3.4", 0, 0)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         # match sport
         cmd = "pipeline RX table match hash ext key 8 mask FFFF000000000000 offset 290 buckets 16K size 64K action AP0"
@@ -1037,12 +1036,12 @@  class TestFlowClassifySoftnic(TestCase):
             dportspec=200,
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.1", dst="200.0.0.1", proto=6)
             / TCP(sport=100, dport=201)
             / ("X" * 48)
@@ -1052,7 +1051,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.2", dst="200.0.1.2", proto=17)
             / UDP(sport=101, dport=202)
             / ("X" * 48)
@@ -1062,7 +1061,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.3", dst="200.0.2.3", proto=132)
             / SCTP(sport=102, dport=203)
             / ("X" * 48)
@@ -1072,7 +1071,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.2", dst="200.0.1.2", proto=17)
             / UDP(sport=103, dport=202)
             / ("X" * 48)
@@ -1082,7 +1081,7 @@  class TestFlowClassifySoftnic(TestCase):
         # send a packet without l4 info
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.4", dst="200.0.3.4")
             / ("X" * 48)
         ]
@@ -1090,7 +1089,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
         self.check_status(5, 4, self.port_num)
 
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_acl_table(self):
         """
@@ -1134,12 +1133,12 @@  class TestFlowClassifySoftnic(TestCase):
             sportspec=100,
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789", dst="2001::2", nh=17)
             / UDP(sport=101, dport=201)
             / ("X" * 48)
@@ -1157,7 +1156,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:6789", dst="2001::2", nh=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -1175,7 +1174,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:7789", dst="2001::2", nh=132)
             / SCTP(sport=101, dport=201)
             / ("X" * 48)
@@ -1193,7 +1192,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:8789", dst="2001::2", nh=17)
             / UDP(sport=100, dport=201)
             / ("X" * 48)
@@ -1203,7 +1202,7 @@  class TestFlowClassifySoftnic(TestCase):
         # send another 3 packets
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:9789", dst="2001::2", nh=17)
             / UDP(sport=101, dport=201)
             / ("X" * 48)
@@ -1213,7 +1212,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:8789", dst="2001::2", nh=17)
             / UDP(sport=101, dport=201)
             / ("X" * 48)
@@ -1223,7 +1222,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:6789", dst="2001::2", nh=17)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -1232,7 +1231,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
 
         self.check_status(7, 4, self.port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_addr_hash_table(self):
         """
@@ -1270,12 +1269,12 @@  class TestFlowClassifySoftnic(TestCase):
             src_spec="ABCD:EF01:2345:6789:ABCD:EF01:2345:8789",
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789", dst="2001::2", nh=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -1293,7 +1292,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:6789", dst="2001::2", nh=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -1311,7 +1310,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:7789", dst="2001::2", nh=132)
             / SCTP(sport=101, dport=201)
             / ("X" * 48)
@@ -1329,7 +1328,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:8789", dst="2001::2", nh=17)
             / UDP(sport=100, dport=201)
             / ("X" * 48)
@@ -1346,7 +1345,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:9789", dst="2001::2", nh=17)
             / UDP(sport=101, dport=201)
             / ("X" * 48)
@@ -1354,7 +1353,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.write_pcap_file(pcap_file, pkt)
         self.send_pkts(0, pcap_file)
         self.check_status(5, 4, self.port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         # match ipv6 dst_addr
         cmd = "pipeline RX table match hash ext key 16 mask FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF offset 294 buckets 16K size 64K action AP0"
@@ -1386,12 +1385,12 @@  class TestFlowClassifySoftnic(TestCase):
             dst_spec="ABCD:EF01:2345:6789:ABCD:EF01:2345:8789",
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789", src="2001::2", nh=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -1409,7 +1408,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:6789", src="2001::2", nh=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -1427,7 +1426,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:7789", src="2001::2", nh=132)
             / SCTP(sport=101, dport=201)
             / ("X" * 48)
@@ -1445,7 +1444,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:8789", src="2001::2", nh=17)
             / UDP(sport=100, dport=201)
             / ("X" * 48)
@@ -1462,7 +1461,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:9789", src="2001::2", nh=17)
             / UDP(sport=101, dport=201)
             / ("X" * 48)
@@ -1470,7 +1469,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.write_pcap_file(pcap_file, pkt)
         self.send_pkts(0, pcap_file)
         self.check_status(5, 4, self.port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_5tuple_hash_table(self):
         """
@@ -1538,12 +1537,12 @@  class TestFlowClassifySoftnic(TestCase):
             dportspec=204,
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::1", dst="0::1", nh=17)
             / UDP(sport=101, dport=201)
             / ("X" * 48)
@@ -1553,7 +1552,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::2", dst="0::2", nh=6)
             / TCP(sport=102, dport=202)
             / ("X" * 48)
@@ -1563,7 +1562,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::3", dst="0::3", nh=132)
             / SCTP(sport=103, dport=203)
             / ("X" * 48)
@@ -1573,7 +1572,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::4", dst="0::4", nh=17)
             / UDP(sport=104, dport=204)
             / ("X" * 48)
@@ -1582,7 +1581,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::1", dst="0::1", nh=6)
             / TCP(sport=101, dport=201)
             / ("X" * 48)
@@ -1590,7 +1589,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.write_pcap_file(pcap_file, pkt)
         self.send_pkts(0, pcap_file)
         self.check_status(5, 4, self.port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_inconsistent_rules(self):
         """
@@ -1603,44 +1602,44 @@  class TestFlowClassifySoftnic(TestCase):
         self.start_testpmd(filename, self.port_num)
 
         # create rule
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask 0.0.0.0 dst mask 255.255.255.255 src spec 100.0.0.1 dst spec 200.0.0.1 proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end actions queue index 3 / end",
             "error",
             60,
         )
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         cmd = "pipeline RX table match hash ext key 8 mask FFFFFF0000000000 offset 286 buckets 16K size 64K action AP0"
         self.set_table(cmd, filename)
         self.start_testpmd(filename, self.port_num)
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask 0.0.0.0 dst mask 255.255.255.255 src spec 100.0.0.1 dst spec 200.0.0.1 proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end actions queue index 3 / end",
             "error",
             60,
         )
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         # ipv6
         filename = "flow_ipv6_5tuple_hash_firmware.cli"
         cmd = "pipeline RX table match hash ext key 64 mask 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 offset 274 buckets 16K size 64K action AP0"
         self.set_table(cmd, filename)
         self.start_testpmd(filename, self.port_num)
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src spec 2001::1 dst spec 0::1 proto spec 17 / udp src mask 0 dst mask 65535 src spec 31 dst spec 41 / end actions queue index 3 / end",
             "error",
             60,
         )
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         cmd = "pipeline RX table match hash ext key 16 mask FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF offset 294 buckets 16K size 64K action AP0"
         self.set_table(cmd, filename)
         self.start_testpmd(filename, self.port_num)
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  src mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec ABCD:EF01:2345:6789:ABCD:EF01:2345:5789 dst spec 0:0:0:0:0:0:0:0 proto spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue index 3 / end",
             "error",
             60,
         )
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv4_hash_rss_action(self):
         """
@@ -1714,12 +1713,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="rss",
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.1", dst="200.0.0.1", proto=6)
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -1729,7 +1728,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.2", dst="200.0.0.2", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -1739,7 +1738,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.3", dst="200.0.0.3", proto=132)
             / SCTP(sport=100, dport=200)
             / ("X" * 48)
@@ -1749,7 +1748,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.4", dst="200.0.0.4", proto=6)
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -1759,7 +1758,7 @@  class TestFlowClassifySoftnic(TestCase):
         # not match test
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="100.0.0.4", dst="200.0.0.4", proto=6)
             / TCP(sport=101, dport=200)
             / ("X" * 48)
@@ -1767,7 +1766,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.write_pcap_file(pcap_file, pkt)
         self.send_pkts(0, pcap_file)
         self.check_status(5, 4, self.port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         # match ipv4 src_addr
         cmd = "pipeline RX table match hash ext key 16 mask 00FF0000FFFFFF00FFFFFFFFFFFFFFFF offset 278 buckets 16K size 64K action AP0"
@@ -1800,20 +1799,20 @@  class TestFlowClassifySoftnic(TestCase):
             action="rss",
             index=[0, 1, 2, 3],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         self.send_continuous_packet(
-            "ipv4", "src", "100.0.0.1", "200.0.0.1", self.tester_itf
+            "ipv4", "src", "100.0.0.1", "200.0.0.1", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([0, 1, 2, 3], out)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         self.send_continuous_packet(
-            "ipv4", "src", "100.0.1.2", "200.0.0.1", self.tester_itf
+            "ipv4", "src", "100.0.1.2", "200.0.0.1", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([0, 1, 2, 3], out)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         # match ipv4 src_addr
         cmd = "pipeline RX table match hash ext key 8 mask FFFF0000FFFFFFFF offset 282 buckets 16K size 64K action AP0"
@@ -1850,27 +1849,27 @@  class TestFlowClassifySoftnic(TestCase):
             action="rss",
             index=[1, 2],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         self.send_continuous_packet(
-            "ipv4", "src", "100.0.0.1", "200.0.0.1", self.tester_itf
+            "ipv4", "src", "100.0.0.1", "200.0.0.1", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([0], out)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         self.send_continuous_packet(
-            "ipv4", "src", "100.0.1.1", "200.0.0.2", self.tester_itf
+            "ipv4", "src", "100.0.1.1", "200.0.0.2", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([2, 3], out)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         self.send_continuous_packet(
-            "ipv4", "src", "200.0.0.1", "200.0.0.2", self.tester_itf
+            "ipv4", "src", "200.0.0.1", "200.0.0.2", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([1, 2], out)
 
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_hash_rss_action(self):
         """
@@ -1948,12 +1947,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="rss",
             index=[0],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::1", dst="1001::1", nh=6)
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -1963,7 +1962,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::2", dst="1001::2", nh=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -1973,7 +1972,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::3", dst="1001::3", nh=132)
             / SCTP(sport=100, dport=200)
             / ("X" * 48)
@@ -1983,7 +1982,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::4", dst="1001::4", nh=6)
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -1993,7 +1992,7 @@  class TestFlowClassifySoftnic(TestCase):
         # not match test
         pcap_file = "/tmp/route_4.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="2001::1", dst="1001::1", nh=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2001,7 +2000,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.write_pcap_file(pcap_file, pkt)
         self.send_pkts(0, pcap_file)
         self.check_status(5, 4, self.port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         cmd = "pipeline RX table match hash ext key 64 mask 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 offset 274 buckets 16K size 64K action AP0"
         self.set_table(cmd, filename)
@@ -2036,28 +2035,28 @@  class TestFlowClassifySoftnic(TestCase):
             action="rss",
             index=[0, 1, 2, 3],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         self.send_continuous_packet(
             "ipv6",
             "src",
             "ABCD:EF01:2345:6789:ABCD:EF01:2345:0",
             "0::1",
-            self.tester_itf,
+            self.tg_itf,
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([0, 1, 2, 3], out)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         self.send_continuous_packet(
             "ipv6",
             "src",
             "ABCD:EF01:2345:6789:ABCD:EF01:2346:0",
             "0::1",
-            self.tester_itf,
+            self.tg_itf,
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([0, 1, 2, 3], out)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
         cmd = "pipeline RX table match hash ext key 64 mask 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000000000000000000000000000000000000000000000000 offset 274 buckets 16K size 64K action AP0"
         self.set_table(cmd, filename)
@@ -2103,26 +2102,26 @@  class TestFlowClassifySoftnic(TestCase):
             action="rss",
             index=[1, 2],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         self.send_continuous_packet(
-            "ipv6", "dst", "2001::1", "1001::1", self.tester_itf
+            "ipv6", "dst", "2001::1", "1001::1", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([0], out)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         self.send_continuous_packet(
-            "ipv6", "dst", "2001::2", "1001::1", self.tester_itf
+            "ipv6", "dst", "2001::2", "1001::1", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([2, 3], out)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         self.send_continuous_packet(
-            "ipv6", "dst", "2001::1", "1002::1", self.tester_itf
+            "ipv6", "dst", "2001::1", "1002::1", self.tg_itf
         )
-        out = self.dut.send_expect("stop", "testpmd> ", 120)
+        out = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.check_packet_queue([1, 2], out)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv4_acl_jump(self):
         """
@@ -2181,12 +2180,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="200.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2196,7 +2195,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="200.64.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2204,15 +2203,15 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_and_check_packets(pcap_file, pkt, "ipv4", "dst", "200.64.0.0", 0, 1)
 
         # destroy rules of group 1
-        self.dut.send_expect("flow destroy 2 rule 0", "testpmd> ", 60)
-        self.dut.send_expect("flow destroy 2 rule 1", "testpmd> ", 60)
-        destroy_out = self.dut.send_expect("flow list 2", "testpmd> ", 60)
+        self.sut_node.send_expect("flow destroy 2 rule 0", "testpmd> ", 60)
+        self.sut_node.send_expect("flow destroy 2 rule 1", "testpmd> ", 60)
+        destroy_out = self.sut_node.send_expect("flow list 2", "testpmd> ", 60)
         self.verify("QUEUE" not in destroy_out, "destroy rule fail")
 
         # rule 2 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="0.0.0.0", dst="200.0.0.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2225,7 +2224,7 @@  class TestFlowClassifySoftnic(TestCase):
             dst_ip_list.append(packet.getlayer(1).dst)
         self.verify("200.0.0.0" not in dst_ip_list, "rule 2 test fail")
 
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv4_hash_jump(self):
         """
@@ -2284,12 +2283,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.0", dst="2.20.21.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2299,7 +2298,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.1", dst="2.20.21.1", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2307,15 +2306,15 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_and_check_packets(pcap_file, pkt, "ipv4", "dst", "2.20.21.1", 0, 1)
 
         # destroy rules of group 1
-        self.dut.send_expect("flow destroy 2 rule 0", "Flow rule #0 destroyed", 60)
-        self.dut.send_expect("flow destroy 2 rule 1", "Flow rule #1 destroyed", 60)
-        destroy_out = self.dut.send_expect("flow list 2", "testpmd> ", 60)
+        self.sut_node.send_expect("flow destroy 2 rule 0", "Flow rule #0 destroyed", 60)
+        self.sut_node.send_expect("flow destroy 2 rule 1", "Flow rule #1 destroyed", 60)
+        destroy_out = self.sut_node.send_expect("flow list 2", "testpmd> ", 60)
         self.verify("QUEUE" not in destroy_out, "destroy rule fail")
 
         # rule 2 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.1", dst="2.20.21.1", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2328,7 +2327,7 @@  class TestFlowClassifySoftnic(TestCase):
             dst_ip_list.append(packet.getlayer(1).dst)
         self.verify("2.20.21.1" not in dst_ip_list, "rule 3 test fail")
 
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv4_acl_hash_jump(self):
         """
@@ -2391,12 +2390,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.0", dst="2.20.21.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2406,7 +2405,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.1", dst="2.20.21.1", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2416,7 +2415,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.0", dst="2.20.21.0", proto=17)
             / UDP(sport=101, dport=200)
             / ("X" * 48)
@@ -2427,7 +2426,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.1", dst="2.20.21.1", proto=17)
             / UDP(sport=100, dport=201)
             / ("X" * 48)
@@ -2436,7 +2435,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
 
         self.check_status(4, 2, port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv4_hash_acl_jump(self):
         """
@@ -2499,12 +2498,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.0", dst="2.20.21.0", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2514,7 +2513,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.1", dst="2.20.21.1", proto=17)
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2524,7 +2523,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.0", dst="2.20.21.2", proto=17)
             / UDP(sport=101, dport=200)
             / ("X" * 48)
@@ -2535,7 +2534,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 3 test
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IP(src="1.10.11.1", dst="2.20.21.3", proto=17)
             / UDP(sport=100, dport=201)
             / ("X" * 48)
@@ -2544,7 +2543,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
 
         self.check_status(4, 2, port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_acl_jump(self):
         """
@@ -2608,12 +2607,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::1", dst="2001::1")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2623,7 +2622,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::1", dst="2001::2")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2632,7 +2631,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::2", dst="2001::1")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2641,7 +2640,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::2", dst="2001::2")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2650,7 +2649,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
 
         self.check_status(4, 3, port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_hash_jump(self):
         """
@@ -2725,12 +2724,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::1", dst="2001::1")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2740,7 +2739,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::2", dst="2001::2")
             / TCP(sport=100, dport=200)
             / ("X" * 48)
@@ -2748,15 +2747,15 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_and_check_packets(pcap_file, pkt, "ipv6", "dst", "2001::2", 0, 1)
 
         # destroy rules of group 1
-        self.dut.send_expect("flow destroy 2 rule 0", "Flow rule #0 destroyed", 60)
-        self.dut.send_expect("flow destroy 2 rule 1", "Flow rule #1 destroyed", 60)
-        destroy_out = self.dut.send_expect("flow list 2", "testpmd> ", 60)
+        self.sut_node.send_expect("flow destroy 2 rule 0", "Flow rule #0 destroyed", 60)
+        self.sut_node.send_expect("flow destroy 2 rule 1", "Flow rule #1 destroyed", 60)
+        destroy_out = self.sut_node.send_expect("flow list 2", "testpmd> ", 60)
         self.verify("QUEUE" not in destroy_out, "destroy rule fail")
 
         # rule 2 test
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::1", dst="2001::1")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2769,7 +2768,7 @@  class TestFlowClassifySoftnic(TestCase):
             dst_ip_list.append(packet.getlayer(1).dst)
         self.verify("2001::1" not in dst_ip_list, "rule 2 test fail")
 
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_acl_hash_jump(self):
         """
@@ -2834,12 +2833,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::1", dst="2001::1")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2849,7 +2848,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::2", dst="2001::2")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2858,7 +2857,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::3", dst="2001::1")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2868,7 +2867,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::4", dst="2001::2")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2877,7 +2876,7 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
 
         self.check_status(4, 2, port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def test_ipv6_hash_acl_jump(self):
         """
@@ -2944,12 +2943,12 @@  class TestFlowClassifySoftnic(TestCase):
             action="jump",
             index=[1],
         )
-        self.dut.send_expect("start", "testpmd> ", 60)
+        self.sut_node.send_expect("start", "testpmd> ", 60)
 
         # rule 0 test
         pcap_file = "/tmp/route_0.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::1", dst="2001::1")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2959,7 +2958,7 @@  class TestFlowClassifySoftnic(TestCase):
         # rule 1 test
         pcap_file = "/tmp/route_1.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::2", dst="2001::2")
             / UDP(sport=100, dport=200)
             / ("X" * 48)
@@ -2968,7 +2967,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_2.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::1", dst="2001::1")
             / UDP(sport=100, dport=201)
             / ("X" * 48)
@@ -2978,7 +2977,7 @@  class TestFlowClassifySoftnic(TestCase):
 
         pcap_file = "/tmp/route_3.pcap"
         pkt = [
-            Ether(dst=self.dut_p0_mac)
+            Ether(dst=self.sut_p0_mac)
             / IPv6(src="1001::2", dst="2001::2")
             / UDP(sport=100, dport=202)
             / ("X" * 48)
@@ -2987,14 +2986,14 @@  class TestFlowClassifySoftnic(TestCase):
         self.send_pkts(0, pcap_file)
 
         self.check_status(4, 2, port_num)
-        self.dut.send_expect("quit", "# ", 60)
+        self.sut_node.send_expect("quit", "# ", 60)
 
     def tear_down(self):
 
         """
         Run after each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_flow_filtering.py b/tests/TestSuite_flow_filtering.py
index cae2d9ac..472eaf2e 100644
--- a/tests/TestSuite_flow_filtering.py
+++ b/tests/TestSuite_flow_filtering.py
@@ -6,7 +6,7 @@  import os
 import re
 import time
 
-import framework.packet as packet
+import framework.scapy_packet_builder as scapy_pkt_builder
 import framework.utils as utils
 from framework.settings import HEADER_SIZE
 from framework.test_case import TestCase
@@ -18,47 +18,47 @@  class TestFlowFiltering(TestCase):
         Run before each test suite
         """
         # initialize ports topology
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.dts_mac = self.dut.get_mac_address(self.dut_ports[0])
-        self.txitf = self.tester.get_interface(
-            self.tester.get_local_port(self.dut_ports[0])
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.dts_mac = self.sut_node.get_mac_address(self.sut_ports[0])
+        self.txitf = self.tg_node.get_interface(
+            self.tg_node.get_local_port(self.sut_ports[0])
         )
         # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports for testing")
-        out = self.dut.build_dpdk_apps("./examples/flow_filtering")
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports for testing")
+        out = self.sut_node.build_dpdk_apps("./examples/flow_filtering")
         self.verify("Error" not in out, "Compilation failed")
 
     def set_up(self):
         """
         Run before each test case.
         """
-        self.eal_para = self.dut.create_eal_parameters(cores=[1])
-        cmd = self.dut.apps_name["flow_filtering"] + self.eal_para
-        out = self.dut.send_command(cmd, timeout=15)
+        self.eal_para = self.sut_node.create_eal_parameters(cores=[1])
+        cmd = self.sut_node.apps_name["flow_filtering"] + self.eal_para
+        out = self.sut_node.send_command(cmd, timeout=15)
         self.verify("Error" not in out, "flow launch failed")
 
     def send_packet(self, pkg):
         """
         Send packets according to parameters.
         """
-        self.pkt = packet.Packet()
+        self.scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder()
         for packet_type in list(pkg.keys()):
-            self.pkt.append_pkt(pkg[packet_type])
-        self.pkt.send_pkt(crb=self.tester, tx_port=self.txitf, count=1)
+            self.scapy_pkt_builder.append_pkt(pkg[packet_type])
+        self.scapy_pkt_builder.send_pkt(node=self.tg_node, tx_port=self.txitf, count=1)
 
         time.sleep(2)
 
     def check_flow_queue(self):
         """
-        Get dut flow result
+        Get SUT flow result
         """
-        result = self.dut.get_session_output(timeout=2)
+        result = self.sut_node.get_session_output(timeout=2)
         if str.upper(self.dts_mac) in result:
-            self.verify("queue" in result, "Dut receive flow failed!")
+            self.verify("queue" in result, "Sut receive flow failed!")
             queue_result = re.findall(r"queue=(\S+)", result)
             return queue_result
         else:
-            raise Exception("Dut not receive correct package!")
+            raise Exception("Sut not receive correct package!")
 
     def test_flow_filtering_match_rule(self):
         pkg = {
@@ -69,7 +69,7 @@  class TestFlowFiltering(TestCase):
         }
         self.send_packet(pkg)
         queue_list = self.check_flow_queue()
-        self.verify(len(queue_list) == 2, "Dut receive flow queue error!")
+        self.verify(len(queue_list) == 2, "Sut receive flow queue error!")
         self.verify(
             queue_list[0] == queue_list[1] and queue_list[0] == "0x1",
             "Flow filter not match rule!",
@@ -90,10 +90,10 @@  class TestFlowFiltering(TestCase):
         """
         Run after each test case.
         """
-        self.dut.send_expect("^C", "#")
+        self.sut_node.send_expect("^C", "#")
 
     def tear_down_all(self):
         """
         Run after each test suite.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
diff --git a/tests/TestSuite_generic_flow_api.py b/tests/TestSuite_generic_flow_api.py
index 1f1c5d0f..b0fd0853 100644
--- a/tests/TestSuite_generic_flow_api.py
+++ b/tests/TestSuite_generic_flow_api.py
@@ -17,16 +17,16 @@  import time
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
-import framework.packet as packet
+import framework.scapy_packet_builder as scapy_pkt_builder
 import framework.utils as utils
-from framework.crb import Crb
-from framework.dut import Dut
 from framework.exception import VerifyFailure
+from framework.node import Node
 from framework.pmd_output import PmdOutput
-from framework.project_dpdk import DPDKdut
+from framework.project_dpdk import DPDKSut
 from framework.settings import DRIVERS, HEADER_SIZE
+from framework.sut_node import SutNode
 from framework.test_case import TestCase, check_supported_nic
-from framework.virt_dut import VirtDut
+from framework.virt_sut import VirtSut
 
 MAX_VLAN = 4095
 MAX_QUEUE = 15
@@ -59,37 +59,37 @@  class TestGeneric_flow_api(TestCase):
         elif self.nic in ["IGC-I225_LM"]:
             MAX_QUEUE = 3
         # Based on h/w type, choose how many ports to use
-        self.dut_ports = self.dut.get_ports(self.nic)
+        self.sut_ports = self.sut_node.get_ports(self.nic)
         global valports
-        valports = [_ for _ in self.dut_ports if self.tester.get_local_port(_) != -1]
+        valports = [_ for _ in self.sut_ports if self.tg_node.get_local_port(_) != -1]
         global portMask
         portMask = utils.create_mask(valports[:2])
         # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
         self.cores = "1S/8C/1T"
         self.pf_cores = "1S/8C/1T"
-        self.pmdout = PmdOutput(self.dut)
+        self.pmdout = PmdOutput(self.sut_node)
 
-        localPort = self.tester.get_local_port(self.dut_ports[0])
-        self.tester_itf = self.tester.get_interface(localPort)
-        self.pf_interface = self.dut.ports_info[self.dut_ports[0]]["intf"]
-        self.pf_mac = self.dut.get_mac_address(0)
-        self.pf_pci = self.dut.ports_info[self.dut_ports[0]]["pci"]
+        localPort = self.tg_node.get_local_port(self.sut_ports[0])
+        self.tg_itf = self.tg_node.get_interface(localPort)
+        self.pf_interface = self.sut_node.ports_info[self.sut_ports[0]]["intf"]
+        self.pf_mac = self.sut_node.get_mac_address(0)
+        self.pf_pci = self.sut_node.ports_info[self.sut_ports[0]]["pci"]
 
-        self.session_secondary = self.dut.new_session()
-        self.session_third = self.dut.new_session()
+        self.session_secondary = self.sut_node.new_session()
+        self.session_third = self.sut_node.new_session()
         self.outer_mac = "00:11:22:33:44:55"
         self.inner_mac = "00:11:22:33:44:66"
         self.wrong_mac = "00:11:22:33:44:77"
         self.vf_flag = 0
-        self.pkt_obj = packet.Packet()
-        self.app_path = self.dut.apps_name["test-pmd"]
+        self.scapy_pkt_builder = scapy_pkt_builder.ScapyPacketBuilder()
+        self.app_path = self.sut_node.apps_name["test-pmd"]
 
     def set_up(self):
         """
         Run before each test case.
         """
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def setup_env(self):
         """
@@ -99,13 +99,13 @@  class TestGeneric_flow_api(TestCase):
         self.vf_flag = 1
 
         # PF is bound to igb_uio, while VF is bound to vfio-pci.
-        self.dut.send_expect("modprobe uio", "#", 70)
-        self.dut.send_expect("insmod ./" + self.target + "/kmod/igb_uio.ko", "#", 60)
-        self.dut.send_expect("modprobe vfio-pci", "#", 70)
+        self.sut_node.send_expect("modprobe uio", "#", 70)
+        self.sut_node.send_expect("insmod ./" + self.target + "/kmod/igb_uio.ko", "#", 60)
+        self.sut_node.send_expect("modprobe vfio-pci", "#", 70)
 
         # create two vfs
-        self.dut.generate_sriov_vfs_by_port(self.dut_ports[0], 2, "igb_uio")
-        self.sriov_vfs_port = self.dut.ports_info[self.dut_ports[0]]["vfs_port"]
+        self.sut_node.generate_sriov_vfs_by_port(self.sut_ports[0], 2, "igb_uio")
+        self.sriov_vfs_port = self.sut_node.ports_info[self.sut_ports[0]]["vfs_port"]
         try:
             for port in self.sriov_vfs_port:
                 port.bind_driver(driver="vfio-pci")
@@ -122,11 +122,11 @@  class TestGeneric_flow_api(TestCase):
             time.sleep(2)
             self.session_secondary.send_expect("quit", "# ")
             time.sleep(2)
-            self.dut.send_expect("quit", "# ")
+            self.sut_node.send_expect("quit", "# ")
             time.sleep(2)
-            self.dut.destroy_sriov_vfs_by_port(self.dut_ports[0])
+            self.sut_node.destroy_sriov_vfs_by_port(self.sut_ports[0])
         else:
-            self.dut.send_expect("quit", "# ")
+            self.sut_node.send_expect("quit", "# ")
             time.sleep(2)
         self.vf_flag = 0
 
@@ -143,7 +143,7 @@  class TestGeneric_flow_api(TestCase):
         verify the packet to the expected queue or be dropped
         : check_fdir=[exist|non-exist]
         """
-        # self.tester.scapy_execute()
+        # self.tg_node.scapy_execute()
         # time.sleep(2)
         verify_mac = verify_mac.upper()
 
@@ -154,8 +154,8 @@  class TestGeneric_flow_api(TestCase):
             outstring_vf1 = self.session_third.send_expect("stop", "testpmd> ", 120)
             self.logger.info("vf0: %s" % out_vf0)
             self.logger.info("vf1: %s" % out_vf1)
-        out_pf = self.dut.get_session_output(timeout=2)
-        outstring_pf = self.dut.send_expect("stop", "testpmd> ", 120)
+        out_pf = self.sut_node.get_session_output(timeout=2)
+        outstring_pf = self.sut_node.send_expect("stop", "testpmd> ", 120)
         self.logger.info("pf: %s" % out_pf)
         time.sleep(2)
 
@@ -167,7 +167,7 @@  class TestGeneric_flow_api(TestCase):
             else:
                 self.verify(verify_mac not in out_vf1, "the packet is not dropped.")
         else:
-            result_scanner = r"port\s*%s/queue\s?[0-9]+" % self.dut_ports[0]
+            result_scanner = r"port\s*%s/queue\s?[0-9]+" % self.sut_ports[0]
             scanner = re.compile(result_scanner, re.DOTALL)
             if pf_vf == "pf":
                 self.verify(
@@ -215,7 +215,7 @@  class TestGeneric_flow_api(TestCase):
             )
         elif check_fdir == "non-exist":
             self.verify("FDIR" not in out_pf, "FDIR information should not be printed.")
-        self.dut.send_expect("start", "testpmd> ")
+        self.sut_node.send_expect("start", "testpmd> ")
 
         if self.vf_flag == 1:
             self.session_secondary.send_expect("start", "testpmd> ")
@@ -255,14 +255,14 @@  class TestGeneric_flow_api(TestCase):
             self.pmdout.execute_cmd("set verbose 1")
         self.pmdout.execute_cmd("start")
         self.pmdout.execute_cmd("show port info all")
-        self.pmdout.wait_link_status_up(self.dut_ports[0])
+        self.pmdout.wait_link_status_up(self.sut_ports[0])
 
     def compare_memory_rules(self, expectedRules):
         """
         dump all flow rules that have been created in memory and compare that total rules number with the given expected number
         to see if they are equal, as to get your conclusion after you have deleted any flow rule entry.
         """
-        outstring = self.dut.send_expect("flow list 0", "testpmd> ")
+        outstring = self.sut_node.send_expect("flow list 0", "testpmd> ")
         result_scanner = r"\d*.*?\d*.*?\d*.*?=>*"
         scanner = re.compile(result_scanner, re.DOTALL)
         m = scanner.findall(outstring)
@@ -306,10 +306,10 @@  class TestGeneric_flow_api(TestCase):
         # check if there are expected flow rules have been created
         self.compare_memory_rules(rule_num)
         # check if one rule destoried with success
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
         self.compare_memory_rules(rule_num - 1)
         # check if all flow rules have been removed with success
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
         self.compare_memory_rules(0)
 
     def flow_test_process(self, flow_process, flow_action):
@@ -342,7 +342,7 @@  class TestGeneric_flow_api(TestCase):
                     "IGB_1G-I350_COPPER",
                     "I40E_10G-10G_BASE_T_BC",
                 ]:
-                    self.dut.send_expect(flow_cmd, "error")
+                    self.sut_node.send_expect(flow_cmd, "error")
             elif "type is 0x8100" in flow_cmd:
                 if self.nic in [
                     "I40E_10G-SFP_XL710",
@@ -352,7 +352,7 @@  class TestGeneric_flow_api(TestCase):
                     "I40E_10G-10G_BASE_T_X722",
                     "I40E_10G-10G_BASE_T_BC",
                 ]:
-                    self.dut.send_expect(flow_cmd, "error")
+                    self.sut_node.send_expect(flow_cmd, "error")
             # vf queue id exceeds max vf queue number.
             elif (
                 ("vf0" in flow_action["flows"])
@@ -360,9 +360,9 @@  class TestGeneric_flow_api(TestCase):
                 or ("vf0" in flow_action["actions"])
                 or ("vf1" in flow_action["actions"])
             ) and (("index %s" % str(MAX_VFQUEUE + 1)) in flow_cmd):
-                self.dut.send_expect(flow_cmd, "error")
+                self.sut_node.send_expect(flow_cmd, "error")
             else:
-                self.dut.send_expect(flow_cmd, "validated")
+                self.sut_node.send_expect(flow_cmd, "validated")
         elif "create" in flow_cmd:
             # ethertype invalid or queue id exceeds max queue number.
             if (
@@ -385,7 +385,7 @@  class TestGeneric_flow_api(TestCase):
                     "IGB_1G-I350_COPPER",
                     "I40E_10G-10G_BASE_T_BC",
                 ]:
-                    self.dut.send_expect(flow_cmd, "error")
+                    self.sut_node.send_expect(flow_cmd, "error")
             elif "type is 0x8100" in flow_cmd:
                 if self.nic in [
                     "I40E_10G-SFP_XL710",
@@ -395,7 +395,7 @@  class TestGeneric_flow_api(TestCase):
                     "I40E_10G-10G_BASE_T_X722",
                     "I40E_10G-10G_BASE_T_BC",
                 ]:
-                    self.dut.send_expect(flow_cmd, "error")
+                    self.sut_node.send_expect(flow_cmd, "error")
             # vf queue id exceeds max vf queue number.
             elif (
                 ("vf0" in flow_action["flows"])
@@ -403,9 +403,9 @@  class TestGeneric_flow_api(TestCase):
                 or ("vf0" in flow_action["actions"])
                 or ("vf1" in flow_action["actions"])
             ) and (("index %s" % str(MAX_VFQUEUE + 1)) in flow_cmd):
-                self.dut.send_expect(flow_cmd, "error")
+                self.sut_node.send_expect(flow_cmd, "error")
             else:
-                self.dut.send_expect(flow_cmd, "created")
+                self.sut_node.send_expect(flow_cmd, "created")
                 rule_created = 1
 
                 # The rule is created successfully, so send the consistent packet.
@@ -817,11 +817,11 @@  class TestGeneric_flow_api(TestCase):
 
         py_version = sys.version
         if py_version.startswith("3."):
-            self.pkt_obj.pktgen.pkts.clear()
+            self.scapy_pkt_builder.scapy_pkt_util.pkts.clear()
         else:
-            del self.pkt_obj.pktgen.pkts[:]
-        self.pkt_obj.append_pkt(pktstr)
-        self.pkt_obj.send_pkt(self.tester, tx_port=self.tester_itf, count=count)
+            del self.scapy_pkt_builder.scapy_pkt_util.pkts[:]
+        self.scapy_pkt_builder.append_pkt(pktstr)
+        self.scapy_pkt_builder.send_pkt(self.tg_node, tx_port=self.tg_itf, count=count)
 
     def send_packet(self, itf, tran_type, enable=None):
         """
@@ -830,9 +830,9 @@  class TestGeneric_flow_api(TestCase):
         global reta_lines
         global name
         global value
-        self.tester.scapy_foreground()
-        self.dut.send_expect("start", "testpmd>")
-        mac = self.dut.get_mac_address(0)
+        self.tg_node.scapy_foreground()
+        self.sut_node.send_expect("start", "testpmd>")
+        mac = self.sut_node.get_mac_address(0)
 
         # send packet with different source and dest ip
         if tran_type == "l2_payload":
@@ -851,14 +851,14 @@  class TestGeneric_flow_api(TestCase):
                     r'sendp([Ether(dst="%s", src=get_if_hwaddr("%s"))/Dot1Q(id=0x8100,vlan=1)/Dot1Q(id=0x8100,vlan=2,type=0xaaaa)/Raw(load="x"*60)], iface="%s")'
                     % (mac, itf, itf)
                 )
-            self.tester.scapy_append(packet)
-            self.tester.scapy_execute()
+            self.tg_node.scapy_append(packet)
+            self.tg_node.scapy_execute()
             time.sleep(0.5)
         else:
             print("\ntran_type error!\n")
 
-        out = self.dut.get_session_output(timeout=1)
-        self.dut.send_expect("stop", "testpmd>")
+        out = self.sut_node.get_session_output(timeout=1)
+        self.sut_node.send_expect("stop", "testpmd>")
         lines = out.split("\r\n")
         reta_line = {}
         # collect the hash result and the queue id
@@ -929,18 +929,18 @@  class TestGeneric_flow_api(TestCase):
             "%s" % self.cores,
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # validate and create the flow rules
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 3 / end",
             "validated",
         )
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 3 / end",
             "created",
         )
@@ -962,17 +962,17 @@  class TestGeneric_flow_api(TestCase):
         )
 
         # the ipv6 rule is conflicted with ipv4 rule.
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
 
         # validate and create the flow rules
         q_idx = "2" if self.nic == "IGC-I225_LM" else "4"
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth / ipv6 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index %s / end"
             % (q_idx),
             "validated",
         )
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv6 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index %s / end"
             % (q_idx),
             "created",
@@ -1015,9 +1015,9 @@  class TestGeneric_flow_api(TestCase):
             "%s" % self.cores,
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
         # create the flow rules
         basic_flow_actions = [
@@ -1124,9 +1124,9 @@  class TestGeneric_flow_api(TestCase):
             "%s" % self.cores,
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # i350 and 82580 only support 2-tuple, and don't support SCTP
@@ -1238,9 +1238,9 @@  class TestGeneric_flow_api(TestCase):
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # i40e,ixgbe and igb support different packet types.
@@ -1356,9 +1356,9 @@  class TestGeneric_flow_api(TestCase):
             "--rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         basic_flow_actions = [
@@ -1389,7 +1389,7 @@  class TestGeneric_flow_api(TestCase):
                 pktstr='Ether(src="%s",dst="%s")/IP()/TCP()' % (src_mac, dst_mac)
             )
 
-        out_pf = self.dut.get_session_output(timeout=2)
+        out_pf = self.sut_node.get_session_output(timeout=2)
         if mark == 1:
             self.verify(mark_info in out_pf, "the packet not mark the expect index.")
         else:
@@ -1424,21 +1424,21 @@  class TestGeneric_flow_api(TestCase):
             "--rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("port config all rss all", "testpmd> ", 120)
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("port config all rss all", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # only dst mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1454,7 +1454,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-other"
@@ -1464,13 +1464,13 @@  class TestGeneric_flow_api(TestCase):
 
         # only src mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1486,7 +1486,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-other"
@@ -1496,13 +1496,13 @@  class TestGeneric_flow_api(TestCase):
 
         # dst mac and src mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1524,7 +1524,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # destroy
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
 
         self.sendpkt_check_result("99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0)
 
@@ -1556,21 +1556,21 @@  class TestGeneric_flow_api(TestCase):
             "--rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("port config all rss all", "testpmd> ", 120)
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("port config all rss all", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # only dst mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / udp / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / udp / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1586,7 +1586,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-udp"
@@ -1596,13 +1596,13 @@  class TestGeneric_flow_api(TestCase):
 
         # only src mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / udp / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / udp / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1618,7 +1618,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-udp"
@@ -1628,13 +1628,13 @@  class TestGeneric_flow_api(TestCase):
 
         # dst mac and src mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / udp / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / udp / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1656,7 +1656,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # destroy
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-udp"
@@ -1690,21 +1690,21 @@  class TestGeneric_flow_api(TestCase):
             "--rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("port config all rss all", "testpmd> ", 120)
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("port config all rss all", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # only dst mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / tcp / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / tcp / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1720,7 +1720,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-tcp"
@@ -1730,13 +1730,13 @@  class TestGeneric_flow_api(TestCase):
 
         # only src mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / tcp / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / tcp / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1752,7 +1752,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # flush
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-tcp"
@@ -1762,13 +1762,13 @@  class TestGeneric_flow_api(TestCase):
 
         # dst mac and src mac
         # validate
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / tcp / end actions mark id 1 / rss / end",
             "validated",
         )
 
         # create
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / tcp / end actions mark id 1 / rss / end",
             "created",
         )
@@ -1790,7 +1790,7 @@  class TestGeneric_flow_api(TestCase):
         self.compare_memory_rules(1)
 
         # destroy
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-tcp"
@@ -1824,22 +1824,22 @@  class TestGeneric_flow_api(TestCase):
             "--rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("port config all rss all", "testpmd> ", 120)
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("port config all rss all", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # delete the first rule of three rules
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 22:22:22:22:22:22 / ipv4 / end actions mark id 2 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 33:33:33:33:33:33 / ipv4 / end actions mark id 3 / rss / end",
             "created",
         )
@@ -1856,7 +1856,7 @@  class TestGeneric_flow_api(TestCase):
             "99:99:99:99:99:99", "33:33:33:33:33:33", 1, 3, 1, "ipv4-other"
         )
 
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ", 120)
 
         self.compare_memory_rules(2)
 
@@ -1870,7 +1870,7 @@  class TestGeneric_flow_api(TestCase):
             "99:99:99:99:99:99", "33:33:33:33:33:33", 1, 3, 1, "ipv4-other"
         )
 
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         self.sendpkt_check_result(
             "99:99:99:99:99:99", "11:11:11:11:11:11", 0, 1, 0, "ipv4-other"
@@ -1883,20 +1883,20 @@  class TestGeneric_flow_api(TestCase):
         )
 
         # delete the second rule of three rules
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 22:22:22:22:22:22 / ipv4 / end actions mark id 2 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 33:33:33:33:33:33 / ipv4 / end actions mark id 3 / rss / end",
             "created",
         )
 
-        self.dut.send_expect("flow destroy 0 rule 1", "testpmd> ", 120)
+        self.sut_node.send_expect("flow destroy 0 rule 1", "testpmd> ", 120)
 
         self.compare_memory_rules(2)
 
@@ -1910,23 +1910,23 @@  class TestGeneric_flow_api(TestCase):
             "99:99:99:99:99:99", "33:33:33:33:33:33", 1, 3, 1, "ipv4-other"
         )
 
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
         # delete the third rule of three rules
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 22:22:22:22:22:22 / ipv4 / end actions mark id 2 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 33:33:33:33:33:33 / ipv4 / end actions mark id 3 / rss / end",
             "created",
         )
 
-        self.dut.send_expect("flow destroy 0 rule 2", "testpmd> ", 120)
+        self.sut_node.send_expect("flow destroy 0 rule 2", "testpmd> ", 120)
 
         self.compare_memory_rules(2)
 
@@ -1940,7 +1940,7 @@  class TestGeneric_flow_api(TestCase):
             "99:99:99:99:99:99", "33:33:33:33:33:33", 0, 3, 0, "ipv4-other"
         )
 
-        self.dut.send_expect("flow flush 0", "testpmd> ")
+        self.sut_node.send_expect("flow flush 0", "testpmd> ")
 
     def test_fdir_L2_mac_filter_negative(self):
         """
@@ -1968,68 +1968,68 @@  class TestGeneric_flow_api(TestCase):
             "--rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=test1" % self.pf_pci,
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # ip in command
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 dst is 1.1.1.1 / end actions mark id 2 / rss / end",
             "error",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 dst is 1.1.1.1 / end actions mark id 2 / rss / end",
             "error",
         )
 
         # udp in command
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / udp dst is 111 / end actions mark id 2 / rss / end",
             "error",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / udp dst is 111 / end actions mark id 2 / rss / end",
             "error",
         )
 
         # tcp in command
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / tcp dst is 111 / end actions mark id 2 / rss / end",
             "error",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / tcp dst is 111 / end actions mark id 2 / rss / end",
             "error",
         )
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 3 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / end actions mark id 1 / rss / end",
             "Invalid",
         )
 
-        self.dut.send_expect("flow flush 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow flush 0", "testpmd> ", 120)
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "Invalid",
         )
 
-        self.dut.send_expect("flow flush 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow flush 0", "testpmd> ", 120)
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth src is 99:99:99:99:99:99 dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 1 / rss / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / end actions mark id 3 / rss / end",
             "Invalid",
         )
@@ -2061,9 +2061,9 @@  class TestGeneric_flow_api(TestCase):
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci,
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
         # start testpmd on vf0
         self.session_secondary.send_expect(
@@ -2407,9 +2407,9 @@  class TestGeneric_flow_api(TestCase):
                 "-a %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem"
                 % self.pf_pci,
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
             # start testpmd on vf0
             self.session_secondary.send_expect(
@@ -2666,9 +2666,9 @@  class TestGeneric_flow_api(TestCase):
                 "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d"
                 % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
 
             if self.nic in ["IXGBE_10G-X550EM_X_10G_T", "IXGBE_10G-X550T"]:
@@ -2829,9 +2829,9 @@  class TestGeneric_flow_api(TestCase):
                 "-a %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem"
                 % self.pf_pci,
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
             self.session_secondary.send_expect(
                 "%s -c 0x1e0000 -n 4 --socket-mem 1024,1024 --legacy-mem -a %s --file-prefix=vf1 -- -i --rxq=4 --txq=4 --disable-rss"
@@ -3102,9 +3102,9 @@  class TestGeneric_flow_api(TestCase):
                 "--pkt-filter-mode=signature --disable-rss --rxq=%d --txq=%d"
                 % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
             if self.nic in ["IXGBE_10G-82599_SFP"]:
                 # create the flow rules
@@ -3229,11 +3229,11 @@  class TestGeneric_flow_api(TestCase):
                     },
                 ]
                 extrapkt_rulenum = self.all_flows_process(basic_flow_actions)
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow validate 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end",
                     "validated",
                 )
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow create 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end",
                     "created",
                 )
@@ -3396,11 +3396,11 @@  class TestGeneric_flow_api(TestCase):
                     },
                 ]
                 extrapkt_rulenum = self.all_flows_process(basic_flow_actions)
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow validate 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end",
                     "validated",
                 )
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow create 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end",
                     "created",
                 )
@@ -3469,96 +3469,96 @@  class TestGeneric_flow_api(TestCase):
                 "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
                 "-a %s --file-prefix=pf" % self.pf_pci,
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
 
             # creat the flow rules
             # l2-payload exceeds the  max length of raw match is 16bytes
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnopq / end actions queue index 1 / end",
                 "error",
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnopq / end actions queue index 1 / end",
                 "Exceeds maximal payload limit",
             )
             # l2-payload equal the max length of raw match is 16bytes
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnop / end actions queue index 1 / end",
                 "validated",
             )
 
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnop / end actions queue index 1 / end",
                 "created",
             )
             # ipv4-other the most 3 fields can be matched, and the max sum bytes of the three fields is 16 bytes.
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth / vlan tci is 4095 / ipv4 proto is 255 ttl is 40 / raw relative is 1 offset is 2 pattern is ab / raw relative is 1 offset is 10 pattern is abcdefghij / raw relative is 1 offset is 0 pattern is abcd / end actions queue index 2 / end",
                 "validated",
             )
 
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / vlan tci is 4095 / ipv4 proto is 255 ttl is 40 / raw relative is 1 offset is 2 pattern is ab / raw relative is 1 offset is 10 pattern is abcdefghij / raw relative is 1 offset is 0 pattern is abcd / end actions queue index 2 / end",
                 "created",
             )
             # ipv4-udp
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / udp src is 22 dst is 23 / raw relative is 1 offset is 2 pattern is fhds / end actions queue index 3 / end",
                 "validated",
             )
 
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / udp src is 22 dst is 23 / raw relative is 1 offset is 2 pattern is fhds / end actions queue index 3 / end",
                 "created",
             )
             # ipv4-tcp
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 tos is 4 ttl is 3 / tcp src is 32 dst is 33 / raw relative is 1 offset is 2 pattern is hijk / end actions queue index 4 / end",
                 "validated",
             )
 
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 tos is 4 ttl is 3 / tcp src is 32 dst is 33 / raw relative is 1 offset is 2 pattern is hijk / end actions queue index 4 / end",
                 "created",
             )
             # ipv4-sctp
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is abcd / end actions queue index 5 / end",
                 "validated",
             )
 
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is abcd / end actions queue index 5 / end",
                 "created",
             )
 
             # flush all the rules, then re-create the rules, fix DPDK-23826
-            self.dut.send_expect("flow flush 0", "testpmd> ")
+            self.sut_node.send_expect("flow flush 0", "testpmd> ")
             # l2-payload equal the max length of raw match is 16bytes
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnop / end actions queue index 1 / end",
                 "created",
             )
             # ipv4-other the most 3 fields can be matched, and the max sum bytes of the three fields is 16 bytes.
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / vlan tci is 4095 / ipv4 proto is 255 ttl is 40 / raw relative is 1 offset is 2 pattern is ab / raw relative is 1 offset is 10 pattern is abcdefghij / raw relative is 1 offset is 0 pattern is abcd / end actions queue index 2 / end",
                 "created",
             )
             # ipv4-udp
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / udp src is 22 dst is 23 / raw relative is 1 offset is 2 pattern is fhds / end actions queue index 3 / end",
                 "created",
             )
             # ipv4-tcp
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 tos is 4 ttl is 3 / tcp src is 32 dst is 33 / raw relative is 1 offset is 2 pattern is hijk / end actions queue index 4 / end",
                 "created",
             )
             # ipv4-sctp
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is abcd / end actions queue index 5 / end",
                 "created",
             )
@@ -3612,7 +3612,7 @@  class TestGeneric_flow_api(TestCase):
 
             self.verify_rulenum(5)
 
-            self.dut.send_expect("quit", "# ")
+            self.sut_node.send_expect("quit", "# ")
             time.sleep(2)
 
             self.pmdout.start_testpmd(
@@ -3620,18 +3620,18 @@  class TestGeneric_flow_api(TestCase):
                 "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
                 "-a %s --file-prefix=pf --socket-mem 1024,1024" % self.pf_pci,
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
 
             # ipv6-tcp
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth / vlan tci is 1 / ipv6 src is 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8 pattern is abcdefgh / end actions queue index 6 / end",
                 "validated",
             )
 
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / vlan tci is 1 / ipv6 src is 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8 pattern is abcdefgh / end actions queue index 6 / end",
                 "created",
             )
@@ -3646,8 +3646,8 @@  class TestGeneric_flow_api(TestCase):
             )
 
             # destroy the rule, then re-create the rule, fix DPDK-23826
-            self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
-            self.dut.send_expect(
+            self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / vlan tci is 1 / ipv6 src is 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8 pattern is abcdefgh / end actions queue index 6 / end",
                 "created",
             )
@@ -3666,17 +3666,17 @@  class TestGeneric_flow_api(TestCase):
                 "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d"
                 % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
 
             # ipv4-udp-flexbytes
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / udp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 44 limit is 0 pattern is 86 / end actions queue index 1 / end",
                 "validated",
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / udp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 44 limit is 0 pattern is 86 / end actions queue index 1 / end",
                 "created",
             )
@@ -3690,7 +3690,7 @@  class TestGeneric_flow_api(TestCase):
                 "pf", expect_rxpkts="1", expect_queue="1", verify_mac=self.outer_mac
             )
 
-            self.dut.send_expect("quit", "# ")
+            self.sut_node.send_expect("quit", "# ")
             time.sleep(2)
 
             # the second flexbytes rule should be created after the testpmd reset, because the flexbytes rule is global bit masks
@@ -3699,23 +3699,23 @@  class TestGeneric_flow_api(TestCase):
                 "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d"
                 % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
 
             # ipv4-tcp-flexbytes spec-mask
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / tcp src is 22 dst is 23 / raw relative spec 0 relative mask 1 search spec 0 search mask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask 0xffff pattern is ab pattern is cd / end actions queue index 2 / end",
                 "validated",
             )
-            self.dut.send_expect(
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / tcp src is 22 dst is 23 / raw relative spec 0 relative mask 1 search spec 0 search mask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask 0xffff pattern is ab pattern is cd / end actions queue index 2 / end",
                 "created",
             )
             # destroy the rule, then re-create the rule, fix DPDK-23826
-            self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
-            self.dut.send_expect(
+            self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / tcp src is 22 dst is 23 / raw relative spec 0 relative mask 1 search spec 0 search mask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask 0xffff pattern is ab pattern is cd / end actions queue index 2 / end",
                 "created",
             )
@@ -3736,7 +3736,7 @@  class TestGeneric_flow_api(TestCase):
                 "pf", expect_rxpkts="1", expect_queue="2", verify_mac=self.outer_mac
             )
 
-            self.dut.send_expect("quit", "# ")
+            self.sut_node.send_expect("quit", "# ")
             time.sleep(2)
 
             # signature mode
@@ -3745,27 +3745,27 @@  class TestGeneric_flow_api(TestCase):
                 "--pkt-filter-mode=signature --disable-rss --rxq=%d --txq=%d"
                 % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             )
-            self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-            self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-            self.dut.send_expect("start", "testpmd> ", 120)
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+            self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+            self.sut_node.send_expect("start", "testpmd> ", 120)
             time.sleep(2)
 
             # ipv4-sctp-flexbytes
             if self.nic in ["IXGBE_10G-X550EM_X_10G_T", "IXGBE_10G-X550T"]:
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow validate 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end",
                     "validated",
                 )
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow create 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end",
                     "created",
                 )
             else:
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow validate 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end",
                     "validated",
                 )
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow create 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end",
                     "created",
                 )
@@ -3788,7 +3788,7 @@  class TestGeneric_flow_api(TestCase):
 
             # ipv6-other-flexbytes
             if self.nic in ["IXGBE_10G-82599_SFP"]:
-                self.dut.send_expect("quit", "# ")
+                self.sut_node.send_expect("quit", "# ")
                 time.sleep(2)
 
                 self.pmdout.start_testpmd(
@@ -3796,16 +3796,16 @@  class TestGeneric_flow_api(TestCase):
                     "--pkt-filter-mode=signature --disable-rss --rxq=%d --txq=%d"
                     % (MAX_QUEUE + 1, MAX_QUEUE + 1),
                 )
-                self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-                self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-                self.dut.send_expect("start", "testpmd> ", 120)
+                self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+                self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+                self.sut_node.send_expect("start", "testpmd> ", 120)
                 time.sleep(2)
 
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow validate 0 ingress pattern fuzzy thresh is 6 / ipv6 src is 2001::1 dst is 2001::2 / raw relative is 0 search is 0 offset is 56 limit is 0 pattern is 86 / end actions queue index 4 / end",
                     "validated",
                 )
-                self.dut.send_expect(
+                self.sut_node.send_expect(
                     "flow create 0 ingress pattern fuzzy thresh is 6 / ipv6 src is 2001::1 dst is 2001::2 / raw relative is 0 search is 0 offset is 56 limit is 0 pattern is 86 / end actions queue index 4 / end",
                     "created",
                 )
@@ -3837,63 +3837,63 @@  class TestGeneric_flow_api(TestCase):
             "%s" % self.pf_cores,
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # create the flow rules
         # l2_payload
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 14 pattern is fhds / end actions queue index 1 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 14 pattern is fhds / end actions queue index 1 / end",
             "created",
         )
         # ipv4 packet
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 34 pattern is ab / end actions queue index 2 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 34 pattern is ab / end actions queue index 2 / end",
             "created",
         )
         # ipv6 packet
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 58 pattern is efgh / end actions queue index 3 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 58 pattern is efgh / end actions queue index 3 / end",
             "created",
         )
         # 3 fields relative is 0
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 38 pattern is ab / raw relative is 0 offset is 34 pattern is cd / raw relative is 0 offset is 42 pattern is efgh / end actions queue index 4 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 38 pattern is ab / raw relative is 0 offset is 34 pattern is cd / raw relative is 0 offset is 42 pattern is efgh / end actions queue index 4 / end",
             "created",
         )
         # 4 fields relative is 0 and 1
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 48 pattern is ab / raw relative is 1 offset is 0 pattern is cd / raw relative is 0 offset is 44 pattern is efgh / raw relative is 1 offset is 10 pattern is hijklmnopq / end actions queue index 5 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 48 pattern is ab / raw relative is 1 offset is 0 pattern is cd / raw relative is 0 offset is 44 pattern is efgh / raw relative is 1 offset is 10 pattern is hijklmnopq / end actions queue index 5 / end",
             "created",
         )
         # 3 fields offset confilict
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 64 pattern is ab / raw relative is 1 offset is 4 pattern is cdefgh / raw relative is 0 offset is 68 pattern is klmn / end actions queue index 6 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 64 pattern is ab / raw relative is 1 offset is 4 pattern is cdefgh / raw relative is 0 offset is 68 pattern is klmn / end actions queue index 6 / end",
             "created",
         )
@@ -3957,47 +3957,47 @@  class TestGeneric_flow_api(TestCase):
             "pf", expect_rxpkts="1", expect_queue="0", verify_mac=self.outer_mac
         )
 
-        self.dut.send_expect("flow flush 0", "testpmd> ", 120)
+        self.sut_node.send_expect("flow flush 0", "testpmd> ", 120)
 
         # 1 field 128bytes
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 128 pattern is ab / end actions queue index 1 / end",
             "error",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 128 pattern is ab / end actions queue index 1 / end",
             "Failed to create flow",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 126 pattern is abcd / end actions queue index 1 / end",
             "error",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 126 pattern is abcd / end actions queue index 1 / end",
             "Failed to create flow",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 126 pattern is ab / end actions queue index 1 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 126 pattern is ab / end actions queue index 1 / end",
             "created",
         )
         # 2 field 128bytes
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 58 pattern is cd / end actions queue index 2 / end",
             "error",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 58 pattern is cd / end actions queue index 2 / end",
             "Failed to create flow",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 56 pattern is cd / end actions queue index 2 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 56 pattern is cd / end actions queue index 2 / end",
             "created",
         )
@@ -4058,11 +4058,11 @@  class TestGeneric_flow_api(TestCase):
             "--pkt-filter-mode=perfect-mac-vlan --disable-rss --rxq=%d --txq=%d"
             % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("vlan set strip off 0", "testpmd> ", 120)
-        self.dut.send_expect("vlan set filter off 0", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("vlan set strip off 0", "testpmd> ", 120)
+        self.sut_node.send_expect("vlan set filter off 0", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # create the flow rules
@@ -4127,9 +4127,9 @@  class TestGeneric_flow_api(TestCase):
             "--pkt-filter-mode=perfect-tunnel --disable-rss --rxq=%d --txq=%d"
             % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # create the flow rules
@@ -4173,9 +4173,9 @@  class TestGeneric_flow_api(TestCase):
             "--pkt-filter-mode=perfect-tunnel --disable-rss --rxq=%d --txq=%d"
             % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
         # create the flow rules
@@ -4232,10 +4232,10 @@  class TestGeneric_flow_api(TestCase):
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci,
         )
-        self.dut.send_expect("rx_vxlan_port add 4789 0", "testpmd> ", 120)
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("rx_vxlan_port add 4789 0", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
         self.session_secondary.send_expect(
             "%s -c 0x1e0000 -n 4 --socket-mem 1024,1024 --legacy-mem -a %s --file-prefix=vf1 -- -i --rxq=4 --txq=4 --disable-rss"
@@ -4403,9 +4403,9 @@  class TestGeneric_flow_api(TestCase):
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
             "-a %s --file-prefix=pf --socket-mem 1024,1024  --legacy-mem" % self.pf_pci,
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
         self.session_secondary.send_expect(
             "%s -c 0x1e0000 -n 4 --socket-mem 1024,1024  --legacy-mem -a %s --file-prefix=vf1 -- -i --rxq=4 --txq=4 --disable-rss"
@@ -4552,22 +4552,22 @@  class TestGeneric_flow_api(TestCase):
             "%s" % self.cores,
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 20)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 20)
-        self.dut.send_expect("start", "testpmd> ", 20)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 20)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 20)
+        self.sut_node.send_expect("start", "testpmd> ", 20)
         time.sleep(2)
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp src is 32 / end actions queue index 2 / end",
             "created",
         )
 
-        out = self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
+        out = self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
         p = re.compile(r"Flow rule #(\d+) destroyed")
         m = p.search(out)
         self.verify(m, "flow rule 0 delete failed")
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp src is 32 / end actions queue index 2 / end",
             "created",
         )
@@ -4591,22 +4591,22 @@  class TestGeneric_flow_api(TestCase):
             "%s" % self.cores,
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 20)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 20)
-        self.dut.send_expect("start", "testpmd> ", 20)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 20)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 20)
+        self.sut_node.send_expect("start", "testpmd> ", 20)
         time.sleep(2)
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp src is 32 / end actions queue index 2 / end",
             "created",
         )
 
-        out = self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
+        out = self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
         p = re.compile(r"Flow rule #(\d+) destroyed")
         m = p.search(out)
         self.verify(m, "flow rule 0 delete failed")
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / udp dst is 32 / end actions queue index 2 / end",
             "created",
         )
@@ -4646,33 +4646,33 @@  class TestGeneric_flow_api(TestCase):
                 "Default", "  --portmask=0x1 --rxq=%d --txq=%d" % (queue, queue)
             )
 
-            self.dut.send_expect("set verbose 8", "testpmd> ")
-            self.dut.send_expect("set fwd rxonly", "testpmd> ")
+            self.sut_node.send_expect("set verbose 8", "testpmd> ")
+            self.sut_node.send_expect("set fwd rxonly", "testpmd> ")
 
-            self.dut.send_expect("port stop all", "testpmd> ")
-            self.dut.send_expect("vlan set extend on 0", "testpmd> ")
-            self.dut.send_expect(
+            self.sut_node.send_expect("port stop all", "testpmd> ")
+            self.sut_node.send_expect("vlan set extend on 0", "testpmd> ")
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / end actions rss types l2-payload end queues end func toeplitz / end",
                 "testpmd> ",
             )
-            self.dut.send_expect("port start all", "testpmd> ")
+            self.sut_node.send_expect("port start all", "testpmd> ")
             res = self.pmdout.wait_link_status_up("all")
             self.verify(res is True, "link is down")
 
-            self.send_packet(self.tester_itf, "l2_payload")
+            self.send_packet(self.tg_itf, "l2_payload")
 
-            # set flow rss type s-vlan c-vlan set by testpmd on dut
-            self.dut.send_expect(
+            # set flow rss type s-vlan c-vlan set by testpmd on SUT
+            self.sut_node.send_expect(
                 "flow create 0 ingress pattern eth / end actions rss types s-vlan c-vlan end key_len 0 queues end / end",
                 "testpmd> ",
             )
-            self.send_packet(self.tester_itf, "l2_payload")
+            self.send_packet(self.tg_itf, "l2_payload")
 
-            self.send_packet(self.tester_itf, "l2_payload", enable="ovlan")
+            self.send_packet(self.tg_itf, "l2_payload", enable="ovlan")
 
-            self.send_packet(self.tester_itf, "l2_payload", enable="ivlan")
+            self.send_packet(self.tg_itf, "l2_payload", enable="ivlan")
 
-            self.dut.send_expect("quit", "# ", 30)
+            self.sut_node.send_expect("quit", "# ", 30)
 
         self.result_table_print()
         result_rows = self.result_table_getrows()
@@ -4724,32 +4724,32 @@  class TestGeneric_flow_api(TestCase):
             "%s" % self.cores,
             "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE + 1, MAX_QUEUE + 1),
         )
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 1 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth type is 0x0806  / end actions queue index 2 /  end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth / ipv4 dst is 2.2.2.5 src is 2.2.2.4 proto is 17 / udp dst is 1 src is 1  / end actions queue index 3 /  end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 1 / end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth type is 0x0806  / end actions queue index 2 /  end",
             "created",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 dst is 2.2.2.5 src is 2.2.2.4 proto is 17 / udp dst is 1 src is 1  / end actions queue index 3 /  end",
             "create",
         )
@@ -4777,7 +4777,7 @@  class TestGeneric_flow_api(TestCase):
             "pf", expect_rxpkts="1", expect_queue="3", verify_mac=self.pf_mac
         )
         # destroy rule 2
-        out = self.dut.send_expect("flow destroy 0 rule 2", "testpmd> ")
+        out = self.sut_node.send_expect("flow destroy 0 rule 2", "testpmd> ")
         p = re.compile(r"Flow rule #(\d+) destroyed")
         m = p.search(out)
         self.verify(m, "flow rule 2 delete failed")
@@ -4804,7 +4804,7 @@  class TestGeneric_flow_api(TestCase):
             "pf", expect_rxpkts="1", expect_queue="0", verify_mac=self.pf_mac
         )
         # destroy rule 1
-        out = self.dut.send_expect("flow destroy 0 rule 1", "testpmd> ")
+        out = self.sut_node.send_expect("flow destroy 0 rule 1", "testpmd> ")
         p = re.compile(r"Flow rule #(\d+) destroyed")
         m = p.search(out)
         self.verify(m, "flow rule 1 delete failed")
@@ -4824,7 +4824,7 @@  class TestGeneric_flow_api(TestCase):
             "pf", expect_rxpkts="1", expect_queue="1", verify_mac=self.pf_mac
         )
         # destroy rule 0
-        out = self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
+        out = self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
         p = re.compile(r"Flow rule #(\d+) destroyed")
         m = p.search(out)
         self.verify(m, "flow rule 0 delete failed")
@@ -4836,7 +4836,7 @@  class TestGeneric_flow_api(TestCase):
         self.verify_result(
             "pf", expect_rxpkts="1", expect_queue="0", verify_mac=self.pf_mac
         )
-        self.dut.send_expect("stop", "testpmd> ")
+        self.sut_node.send_expect("stop", "testpmd> ")
 
     def test_jumbo_frame_size(self):
 
@@ -4866,23 +4866,23 @@  class TestGeneric_flow_api(TestCase):
                 "--disable-rss --rxq=4 --txq=4 --portmask=%s --nb-cores=4 --nb-ports=1 --mbcache=200 --mbuf-size=2048 --max-pkt-len=9600"
                 % portMask,
             )
-        port = self.tester.get_local_port(valports[0])
-        txItf = self.tester.get_interface(port)
-
-        port = self.tester.get_local_port(valports[1])
-        rxItf = self.tester.get_interface(port)
-        self.tester.send_expect("ifconfig %s mtu %s" % (txItf, 9200), "# ")
-        self.tester.send_expect("ifconfig %s mtu %s" % (rxItf, 9200), "# ")
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 120)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 120)
-        self.dut.send_expect("start", "testpmd> ", 120)
+        port = self.tg_node.get_local_port(valports[0])
+        txItf = self.tg_node.get_interface(port)
+
+        port = self.tg_node.get_local_port(valports[1])
+        rxItf = self.tg_node.get_interface(port)
+        self.tg_node.send_expect("ifconfig %s mtu %s" % (txItf, 9200), "# ")
+        self.tg_node.send_expect("ifconfig %s mtu %s" % (rxItf, 9200), "# ")
+        self.sut_node.send_expect("set fwd rxonly", "testpmd> ", 120)
+        self.sut_node.send_expect("set verbose 1", "testpmd> ", 120)
+        self.sut_node.send_expect("start", "testpmd> ", 120)
         time.sleep(2)
 
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow validate 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 2 / end",
             "validated",
         )
-        self.dut.send_expect(
+        self.sut_node.send_expect(
             "flow create 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 2 / end",
             "created",
         )
@@ -4902,7 +4902,7 @@  class TestGeneric_flow_api(TestCase):
             "pf", expect_rxpkts="1", expect_queue="0", verify_mac="ff:ff:ff:ff:ff:ff"
         )
         # destroy rule
-        self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ")
+        self.sut_node.send_expect("flow destroy 0 rule 0", "testpmd> ")
         self.sendpkt(
             pktstr='Ether(dst="%s")/IP(src="2.2.2.5",dst="2.2.2.4")/TCP(dport=80,flags="S")/Raw(load="\x50"*8962)'
             % self.pf_mac
@@ -4911,10 +4911,10 @@  class TestGeneric_flow_api(TestCase):
         self.verify_result(
             "pf", expect_rxpkts="1", expect_queue="0", verify_mac=self.pf_mac
         )
-        self.dut.send_expect("stop", "testpmd> ")
+        self.sut_node.send_expect("stop", "testpmd> ")
 
-        self.tester.send_expect("ifconfig %s mtu %s" % (txItf, 1500), "# ")
-        self.tester.send_expect("ifconfig %s mtu %s" % (rxItf, 1500), "# ")
+        self.tg_node.send_expect("ifconfig %s mtu %s" % (txItf, 1500), "# ")
+        self.tg_node.send_expect("ifconfig %s mtu %s" % (rxItf, 1500), "# ")
 
     def test_64_queues(self):
 
@@ -4928,16 +4928,16 @@  class TestGeneric_flow_api(TestCase):
                 "--disable-rss --rxq=64 --txq=64 --portmask=%s --nb-cores=4 --total-num-mbufs=%d"
                 % (portMask, total_mbufs),
             )
-            self.dut.send_expect("set stat_qmap rx %s 0 0" % valports[0], "testpmd> ")
-            self.dut.send_expect("set stat_qmap rx %s 0 0" % valports[1], "testpmd> ")
-            self.dut.send_expect("vlan set strip off %s" % valports[0], "testpmd> ")
-            self.dut.send_expect("vlan set strip off %s" % valports[1], "testpmd> ")
-            self.dut.send_expect("vlan set filter off %s" % valports[0], "testpmd> ")
-            self.dut.send_expect("vlan set filter off %s" % valports[1], "testpmd> ")
+            self.sut_node.send_expect("set stat_qmap rx %s 0 0" % valports[0], "testpmd> ")
+            self.sut_node.send_expect("set stat_qmap rx %s 0 0" % valports[1], "testpmd> ")
+            self.sut_node.send_expect("vlan set strip off %s" % valports[0], "testpmd> ")
+            self.sut_node.send_expect("vlan set strip off %s" % valports[1], "testpmd> ")
+            self.sut_node.send_expect("vlan set filter off %s" % valports[0], "testpmd> ")
+            self.sut_node.send_expect("vlan set filter off %s" % valports[1], "testpmd> ")
             queue = ["16", "32", "64"]
             for i in [0, 1, 2]:
                 if i == 2:
-                    out = self.dut.send_expect(
+                    out = self.sut_node.send_expect(
                         "set stat_qmap rx %s %s %s" % (valports[0], queue[i], (i + 1)),
                         "testpmd> ",
                     )
@@ -4951,13 +4951,13 @@  class TestGeneric_flow_api(TestCase):
                         )
                         + "end actions queue index {} / end".format(queue[i])
                     )
-                    out = self.dut.send_expect(cmd, "testpmd> ")
+                    out = self.sut_node.send_expect(cmd, "testpmd> ")
                     if "Invalid argument" not in out:
                         set_filter_flag = 0
                         break
                     continue
                 else:
-                    self.dut.send_expect(
+                    self.sut_node.send_expect(
                         "set stat_qmap rx %s %s %s" % (valports[0], queue[i], (i + 1)),
                         "testpmd> ",
                     )
@@ -4968,8 +4968,8 @@  class TestGeneric_flow_api(TestCase):
                         )
                         + "end actions queue index {} / end".format(queue[i])
                     )
-                    self.dut.send_expect(cmd, "testpmd> ")
-                    self.dut.send_expect("start", "testpmd> ", 120)
+                    self.sut_node.send_expect(cmd, "testpmd> ")
+                    self.sut_node.send_expect("start", "testpmd> ", 120)
                 global filters_index
                 filters_index = i
                 if filters_index == 0:
@@ -4983,14 +4983,14 @@  class TestGeneric_flow_api(TestCase):
                         % self.pf_mac
                     )
                 time.sleep(1)
-                out = self.dut.send_expect("stop", "testpmd> ")
+                out = self.sut_node.send_expect("stop", "testpmd> ")
                 p = re.compile(r"Forward Stats for RX Port= \d+/Queue=(\s?\d+)")
                 res = p.findall(out)
                 queues = [int(i) for i in res]
                 if queues[0] != int(queue[i]):
                     packet_flag = 0
                     break
-            self.dut.send_expect("quit", "#", timeout=30)
+            self.sut_node.send_expect("quit", "#", timeout=30)
             self.verify(set_filter_flag == 1, "set filters error")
             self.verify(packet_flag == 1, "packet pass assert error")
         else:
@@ -5164,12 +5164,12 @@  class TestGeneric_flow_api(TestCase):
         Run after each test case.
         """
         self.destroy_env()
-        self.dut.kill_all()
+        self.sut_node.kill_all()
 
     def tear_down_all(self):
         """
         Run after each test suite.
         """
-        self.dut.kill_all()
-        self.dut.close_session(self.session_secondary)
-        self.dut.close_session(self.session_third)
+        self.sut_node.kill_all()
+        self.sut_node.close_session(self.session_secondary)
+        self.sut_node.close_session(self.session_third)
diff --git a/tests/TestSuite_hello_world.py b/tests/TestSuite_hello_world.py
index 6f931d92..dc1c6f64 100644
--- a/tests/TestSuite_hello_world.py
+++ b/tests/TestSuite_hello_world.py
@@ -18,8 +18,8 @@  class TestHelloWorld(TestCase):
         hello_world Prerequisites:
             helloworld build pass
         """
-        out = self.dut.build_dpdk_apps("examples/helloworld")
-        self.app_helloworld_path = self.dut.apps_name["helloworld"]
+        out = self.sut_node.build_dpdk_apps("examples/helloworld")
+        self.app_helloworld_path = self.sut_node.apps_name["helloworld"]
 
         self.verify("Error" not in out, "compilation error 1")
         self.verify("No such file" not in out, "compilation error 2")
@@ -38,10 +38,10 @@  class TestHelloWorld(TestCase):
         """
 
         # get the mask for the first core
-        cores = self.dut.get_core_list("1S/1C/1T")
-        eal_para = self.dut.create_eal_parameters(cores="1S/1C/1T")
+        cores = self.sut_node.get_core_list("1S/1C/1T")
+        eal_para = self.sut_node.create_eal_parameters(cores="1S/1C/1T")
         cmdline = "./%s %s" % (self.app_helloworld_path, eal_para)
-        out = self.dut.send_expect(cmdline, "# ", 30)
+        out = self.sut_node.send_expect(cmdline, "# ", 30)
         self.verify(
             "hello from core %s" % cores[0] in out,
             "EAL not started on core%s" % cores[0],
@@ -54,11 +54,11 @@  class TestHelloWorld(TestCase):
         """
 
         # get the maximum logical core number
-        cores = self.dut.get_core_list("all")
-        eal_para = self.dut.create_eal_parameters(cores=cores)
+        cores = self.sut_node.get_core_list("all")
+        eal_para = self.sut_node.create_eal_parameters(cores=cores)
 
         cmdline = "./%s %s " % (self.app_helloworld_path, eal_para)
-        out = self.dut.send_expect(cmdline, "# ", 50)
+        out = self.sut_node.send_expect(cmdline, "# ", 50)
         for core in cores:
             self.verify(
                 "hello from core %s" % core in out,
diff --git a/tests/TestSuite_hotplug.py b/tests/TestSuite_hotplug.py
index 0f1e17fd..11099a81 100644
--- a/tests/TestSuite_hotplug.py
+++ b/tests/TestSuite_hotplug.py
@@ -12,7 +12,7 @@  import re
 import time
 
 import framework.utils as utils
-from framework.packet import Packet
+from framework.scapy_packet_builder import ScapyPacketBuilder
 from framework.test_case import TestCase
 
 
@@ -25,24 +25,24 @@  class TestPortHotPlug(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
-        cores = self.dut.get_core_list("1S/4C/1T")
-        self.eal_para = self.dut.create_eal_parameters(cores="1S/4C/1T")
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 2, "Insufficient ports")
+        cores = self.sut_node.get_core_list("1S/4C/1T")
+        self.eal_para = self.sut_node.create_eal_parameters(cores="1S/4C/1T")
         self.coremask = utils.create_mask(cores)
-        self.port = len(self.dut_ports) - 1
+        self.port = len(self.sut_ports) - 1
         if self.drivername == "vfio-pci:noiommu":
             self.driver_name = "vfio-pci"
         else:
             self.driver_name = self.drivername
-        self.path = self.dut.apps_name["test-pmd"]
+        self.path = self.sut_node.apps_name["test-pmd"]
 
     def set_up(self):
         """
         Run before each test case.
         """
-        self.dut.send_expect(
-            "./usertools/dpdk-devbind.py -u %s" % self.dut.ports_info[self.port]["pci"],
+        self.sut_node.send_expect(
+            "./usertools/dpdk-devbind.py -u %s" % self.sut_node.ports_info[self.port]["pci"],
             "#",
             60,
         )
@@ -52,25 +52,25 @@  class TestPortHotPlug(TestCase):
         attach port
         """
         # dpdk hotplug discern NIC by pci bus and include domid
-        out = self.dut.send_expect(
-            "port attach %s" % self.dut.ports_info[port]["pci"], "testpmd>", 60
+        out = self.sut_node.send_expect(
+            "port attach %s" % self.sut_node.ports_info[port]["pci"], "testpmd>", 60
         )
         self.verify("is attached" in out, "Failed to attach")
-        out = self.dut.send_expect("port start %s" % port, "testpmd>", 120)
+        out = self.sut_node.send_expect("port start %s" % port, "testpmd>", 120)
         self.verify("Configuring Port" in out, "Failed to start port")
         # sleep 10 seconds for Intel® Ethernet 700 Series update link stats
         time.sleep(10)
-        self.dut.send_expect("show port info %s" % port, "testpmd>", 60)
+        self.sut_node.send_expect("show port info %s" % port, "testpmd>", 60)
 
     def detach(self, port):
         """
         detach port
         """
-        out = self.dut.send_expect("port stop %s" % port, "testpmd>", 60)
+        out = self.sut_node.send_expect("port stop %s" % port, "testpmd>", 60)
         self.verify("Stopping ports" in out, "Failed to stop port")
         # sleep 10 seconds for Intel® Ethernet 700 Series update link stats
         time.sleep(10)
-        out = self.dut.send_expect("port detach %s" % port, "testpmd>", 60)
+        out = self.sut_node.send_expect("port detach %s" % port, "testpmd>", 60)
         self.verify("is detached" in out, "Failed to detach port")
 
     def test_after_attach(self):
@@ -78,114 +78,114 @@  class TestPortHotPlug(TestCase):
         first run testpmd after attach port
         """
         cmd = "%s %s -- -i" % (self.path, self.eal_para)
-        self.dut.send_expect(cmd, "testpmd>", 60)
-        session_secondary = self.dut.new_session()
+        self.sut_node.send_expect(cmd, "testpmd>", 60)
+        session_secondary = self.sut_node.new_session()
         session_secondary.send_expect(
             "./usertools/dpdk-devbind.py --bind=%s %s"
-            % (self.driver_name, self.dut.ports_info[self.port]["pci"]),
+            % (self.driver_name, self.sut_node.ports_info[self.port]["pci"]),
             "#",
             60,
         )
-        self.dut.close_session(session_secondary)
+        self.sut_node.close_session(session_secondary)
         self.attach(self.port)
-        self.dut.send_expect("start", "testpmd>", 60)
-        out = self.dut.send_expect("port detach %s" % self.port, "testpmd>", 60)
+        self.sut_node.send_expect("start", "testpmd>", 60)
+        out = self.sut_node.send_expect("port detach %s" % self.port, "testpmd>", 60)
         self.verify("Port not stopped" in out, "able to detach port without stopping")
-        self.dut.send_expect("stop", "testpmd>", 60)
+        self.sut_node.send_expect("stop", "testpmd>", 60)
         self.detach(self.port)
         self.attach(self.port)
 
-        self.dut.send_expect("start", "testpmd>", 60)
-        out = self.dut.send_expect("port detach %s" % self.port, "testpmd>", 60)
+        self.sut_node.send_expect("start", "testpmd>", 60)
+        out = self.sut_node.send_expect("port detach %s" % self.port, "testpmd>", 60)
         self.verify("Port not stopped" in out, "able to detach port without stopping")
-        self.dut.send_expect("clear port stats %s" % self.port, "testpmd>", 60)
+        self.sut_node.send_expect("clear port stats %s" % self.port, "testpmd>", 60)
         self.send_packet(self.port)
-        out = self.dut.send_expect("show port stats %s" % self.port, "testpmd>", 60)
+        out = self.sut_node.send_expect("show port stats %s" % self.port, "testpmd>", 60)
         packet = re.search("RX-packets:\s*(\d*)", out)
         sum_packet = packet.group(1)
         self.verify(int(sum_packet) == 1, "Insufficient the received package")
-        self.dut.send_expect("quit", "#", 60)
+        self.sut_node.send_expect("quit", "#", 60)
 
     def send_packet(self, port):
         """
         Send a packet to port
         """
-        self.dmac = self.dut.get_mac_address(port)
-        txport = self.tester.get_local_port(port)
-        self.txItf = self.tester.get_interface(txport)
-        pkt = Packet(pkt_type="UDP")
-        pkt.config_layer(
+        self.dmac = self.sut_node.get_mac_address(port)
+        txport = self.tg_node.get_local_port(port)
+        self.txItf = self.tg_node.get_interface(txport)
+        scapy_pkt_builder = ScapyPacketBuilder(pkt_type="UDP")
+        scapy_pkt_builder.config_layer(
             "ether",
             {
                 "dst": self.dmac,
             },
         )
-        pkt.send_pkt(self.tester, tx_port=self.txItf)
+        scapy_pkt_builder.send_pkt(self.tg_node, tx_port=self.txItf)
 
     def test_before_attach(self):
         """
         first attach port after run testpmd
         """
-        session_secondary = self.dut.new_session()
+        session_secondary = self.sut_node.new_session()
         session_secondary.send_expect(
             "./usertools/dpdk-devbind.py --bind=%s %s"
-            % (self.driver_name, self.dut.ports_info[self.port]["pci"]),
+            % (self.driver_name, self.sut_node.ports_info[self.port]["pci"]),
             "#",
             60,
         )
-        self.dut.close_session(session_secondary)
+        self.sut_node.close_session(session_secondary)
         cmd = "%s %s -- -i" % (self.path, self.eal_para)
-        self.dut.send_expect(cmd, "testpmd>", 60)
+        self.sut_node.send_expect(cmd, "testpmd>", 60)
         self.detach(self.port)
         self.attach(self.port)
 
-        self.dut.send_expect("start", "testpmd>", 60)
-        out = self.dut.send_expect("port detach %s" % self.port, "testpmd>", 60)
+        self.sut_node.send_expect("start", "testpmd>", 60)
+        out = self.sut_node.send_expect("port detach %s" % self.port, "testpmd>", 60)
         self.verify("Port not stopped" in out, "able to detach port without stopping")
-        self.dut.send_expect("clear port stats %s" % self.port, "testpmd>", 60)
+        self.sut_node.send_expect("clear port stats %s" % self.port, "testpmd>", 60)
         self.send_packet(self.port)
-        out = self.dut.send_expect("show port stats %s" % self.port, "testpmd>", 60)
+        out = self.sut_node.send_expect("show port stats %s" % self.port, "testpmd>", 60)
         packet = re.search("RX-packets:\s*(\d*)", out)
         sum_packet = packet.group(1)
         self.verify(int(sum_packet) == 1, "Insufficient the received package")
-        self.dut.send_expect("quit", "#", 60)
+        self.sut_node.send_expect("quit", "#", 60)
 
     def test_port_detach_attach_for_vhost_user_virtio_user(self):
         vdev = "eth_vhost0,iface=vhost-net,queues=1"
         iface = "vhost-net1"
-        path = self.dut.base_dir + os.path.sep + iface
+        path = self.sut_node.base_dir + os.path.sep + iface
         path = path.replace("~", "/root")
-        self.dut.send_expect("rm -rf %s" % iface, "# ")
-        cores = self.dut.get_core_list("all")
+        self.sut_node.send_expect("rm -rf %s" % iface, "# ")
+        cores = self.sut_node.get_core_list("all")
         self.verify(len(cores) > 8, "insufficient cores for this case")
-        eal_param = self.dut.create_eal_parameters(
+        eal_param = self.sut_node.create_eal_parameters(
             no_pci=True, cores=cores[1:5], vdevs=[vdev], prefix="vhost"
         )
         testpmd_cmd = "%s " % self.path + eal_param + " -- -i"
-        self.dut.send_expect(testpmd_cmd, "testpmd>", timeout=60)
-        self.dut.send_expect("port stop 0", "testpmd>")
-        out = self.dut.send_expect("port detach 0", "testpmd>")
+        self.sut_node.send_expect(testpmd_cmd, "testpmd>", timeout=60)
+        self.sut_node.send_expect("port stop 0", "testpmd>")
+        out = self.sut_node.send_expect("port detach 0", "testpmd>")
         self.verify("Device is detached" in out, "Failed to detach")
-        stats = self.dut.send_expect(
+        stats = self.sut_node.send_expect(
             "ls %s" % path, "#", timeout=3, alt_session=True, verify=True
         )
         self.verify(stats == 2, "port detach failed")
         time.sleep(1)
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "port attach eth_vhost1,iface=%s,queues=1" % iface, "testpmd>"
         )
         self.verify("Port 0 is attached." in out, "Failed to attach")
-        self.dut.send_expect("port start 0", "testpmd>")
-        out = self.dut.send_expect(
+        self.sut_node.send_expect("port start 0", "testpmd>")
+        out = self.sut_node.send_expect(
             "ls %s" % path, "#", timeout=3, alt_session=True, verify=True
         )
         self.verify(iface in out, "port attach failed")
 
-        self.session2 = self.dut.create_session(name="virtio_user")
-        eal_param = self.dut.create_eal_parameters(
+        self.session2 = self.sut_node.create_session(name="virtio_user")
+        eal_param = self.sut_node.create_eal_parameters(
             no_pci=True, fixed_prefix="virtio1", cores=cores[5:9]
         )
-        testpmd_cmd2 = "%s/%s " % (self.dut.base_dir, self.path) + eal_param + " -- -i"
+        testpmd_cmd2 = "%s/%s " % (self.sut_node.base_dir, self.path) + eal_param + " -- -i"
         self.session2.send_expect(testpmd_cmd2, "testpmd>", timeout=60)
         self.session2.send_expect(
             "port attach net_virtio_user1,mac=00:01:02:03:04:05,path=%s,queues=1,packed_vq=1,mrg_rxbuf=1,in_order=0"
@@ -193,11 +193,11 @@  class TestPortHotPlug(TestCase):
             "testpmd",
         )
         self.session2.send_expect("port start 0", "testpmd>", timeout=60)
-        out = self.dut.send_expect(
+        out = self.sut_node.send_expect(
             "ls %s" % path, "#", timeout=3, alt_session=True, verify=True
         )
         self.verify(iface in out, "port attach failed")
-        self.dut.send_expect("start", "testpmd")
+        self.sut_node.send_expect("start", "testpmd")
         self.session2.send_expect("start tx_first 32", "testpmd")
         out = self.session2.send_expect("show port stats 0", "testpmd")
         rx_pkts = int(re.search("RX-packets: (\d+)", out).group(1))
@@ -210,18 +210,18 @@  class TestPortHotPlug(TestCase):
         self.session2.send_expect("show port stats 0", "testpmd", timeout=2)
         self.session2.send_expect("stop", "testpmd", timeout=2)
         self.session2.send_expect("quit", "#", timeout=2)
-        self.dut.send_expect("stop", "testpmd", timeout=2)
-        self.dut.send_expect("quit", "#", timeout=2)
+        self.sut_node.send_expect("stop", "testpmd", timeout=2)
+        self.sut_node.send_expect("quit", "#", timeout=2)
         self.session2.close()
 
     def tear_down(self):
         """
         Run after each test case.
         """
-        self.dut.kill_all()
-        self.dut.send_expect(
+        self.sut_node.kill_all()
+        self.sut_node.send_expect(
             "./usertools/dpdk-devbind.py --bind=%s %s"
-            % (self.driver_name, self.dut.ports_info[self.port]["pci"]),
+            % (self.driver_name, self.sut_node.ports_info[self.port]["pci"]),
             "#",
             60,
         )
diff --git a/tests/TestSuite_hotplug_mp.py b/tests/TestSuite_hotplug_mp.py
index 444f60a4..0ba79b07 100644
--- a/tests/TestSuite_hotplug_mp.py
+++ b/tests/TestSuite_hotplug_mp.py
@@ -21,21 +21,21 @@  class TestHotplugMp(TestCase):
         """
         Run at the start of each test suite.
         """
-        self.dut_ports = self.dut.get_ports(self.nic)
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
-        self.intf0 = self.dut.ports_info[0]["intf"]
-        self.pci0 = self.dut.ports_info[0]["pci"]
-        out = self.dut.build_dpdk_apps("./examples/multi_process/hotplug_mp")
-        self.app_path = self.dut.apps_name["hotplug_mp"]
+        self.sut_ports = self.sut_node.get_ports(self.nic)
+        self.verify(len(self.sut_ports) >= 1, "Insufficient ports")
+        self.intf0 = self.sut_node.ports_info[0]["intf"]
+        self.pci0 = self.sut_node.ports_info[0]["pci"]
+        out = self.sut_node.build_dpdk_apps("./examples/multi_process/hotplug_mp")
+        self.app_path = self.sut_node.apps_name["hotplug_mp"]
         self.verify("Error" not in out, "Compilation failed")
         # Start one new session to run primary process
-        self.session_pri = self.dut.new_session()
+        self.session_pri = self.sut_node.new_session()
         # Start two new sessions to run secondary process
-        self.session_sec_1 = self.dut.new_session()
-        self.session_sec_2 = self.dut.new_session()
-        self.session_vhost = self.dut.new_session()
+        self.session_sec_1 = self.sut_node.new_session()
+        self.session_sec_2 = self.sut_node.new_session()
+        self.session_vhost = self.sut_node.new_session()
         if self.drivername != "":
-            self.dut.bind_interfaces_linux(self.kdriver)
+            self.sut_node.bind_interfaces_linux(self.kdriver)
 
     def set_up(self):
         """
@@ -178,9 +178,9 @@  class TestHotplugMp(TestCase):
         #  bound to pmd
         if opt_plug in ["plugin",