+| | ... | \| ${nodes['DUT1']} \| /tmp/sock1 \| /tmp/sock2 \| DUT1_VM \| ${6} \
+| | ... | \| ${5} \|
+| | ... | \| Guest VM with dpdk-testpmd connected via vhost-user is setup \
+| | ... | \| ${nodes['DUT1']} \| /tmp/sock-2-1 \| /tmp/sock-2-2 \| DUT1_VM2 \
+| | ... | \| qemu_id=${2} \|
+| | ...
+| | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | ${skip}=${6}
+| | ... | ${count}=${5} | ${qemu_id}=${1}
+| | ...
+| | Import Library | resources.libraries.python.QemuUtils | qemu_id=${qemu_id}
+| | ... | WITH NAME | ${vm_name}
+| | ${serial_port}= | Evaluate | ${qemu_id} + ${4555}
+| | Run keyword | ${vm_name}.Qemu Set Serial Port | ${serial_port}
+| | ${ssh_fwd_port}= | Evaluate | ${qemu_id} + ${10021}
+| | Run keyword | ${vm_name}.Qemu Set Ssh Fwd Port | ${ssh_fwd_port}
+| | ${dut_numa}= | Get interfaces numa node | ${dut_node}
+| | ... | ${dut1_if1} | ${dut1_if2}
+| | ${skip_cnt}= | Evaluate | ${skip} + (${qemu_id} - 1) * ${count}
+| | ${qemu_cpus}= | Cpu slice of list per node | ${dut_node} | ${dut_numa}
+| | ... | skip_cnt=${skip_cnt} | cpu_cnt=${count} | smt_used=${False}
+| | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1}
+| | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2}
+| | Run keyword | ${vm_name}.Qemu Set Node | ${dut_node}
+| | Run keyword | ${vm_name}.Qemu Set Smp | ${count} | ${count} | 1 | 1
+| | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048
+| | Run keyword | ${vm_name}.Qemu Set Disk Image | ${perf_vm_image}
+| | ${vm}= | Run keyword | ${vm_name}.Qemu Start
+| | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus}
+| | Run keyword | ${vm_name}.Qemu Set Scheduler Policy
+| | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | eal_mem_channels=4
+| | ... | pmd_fwd_mode=io | pmd_disable_hw_vlan=${True}
+| | Return From Keyword | ${vm}
+
+| '${nr}' Guest VMs with dpdk-testpmd connected via vhost-user is setup in a 3-node circular topology
+| | [Documentation]
+| | ... | Start QEMU guests with two vhost-user interfaces and interconnecting
+| | ... | DPDK testpmd for defined number of VMs on all defined VPP nodes.
+| | ...
+| | ... | *Arguments:*
+| | ... | _None_
+| | ...
+| | ... | _NOTE:_ This KW expects following test case variables to be set:
+| | ... | - ${system_cpus} - Number of CPUs allocated for OS itself.
+| | ... | - ${vpp_cpus} - Number of CPUs allocated for VPP.
+| | ... | - ${vm_cpus} - Number of CPUs to be allocated per QEMU instance.
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| '2' Guest VM with dpdk-testpmd connected via vhost-user is setup \
+| | ... | in a 3-node circular topology \|
+| | ...
+| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1
+| | | ${sock1}= | Set Variable | /tmp/sock-${number}-1
+| | | ${sock2}= | Set Variable | /tmp/sock-${number}-2
+| | | ${skip_cpus}= | Evaluate | ${vpp_cpus}+${system_cpus}
+| | | ${vm1}= | Guest VM with dpdk-testpmd connected via vhost-user is setup
+| | | ... | ${dut1} | ${sock1} | ${sock2} | DUT1_VM${number}
+| | | ... | skip=${skip_cpus} | count=${vm_cpus} | qemu_id=${number}
+| | | Set To Dictionary | ${dut1_vm_refs} | DUT1_VM${number} | ${vm1}
+| | | ${vm2}= | Guest VM with dpdk-testpmd connected via vhost-user is setup
+| | | ... | ${dut2} | ${sock1} | ${sock2} | DUT2_VM${number}
+| | | ... | skip=${skip_cpus} | count=${vm_cpus} | qemu_id=${number}
+| | | Set To Dictionary | ${dut2_vm_refs} | DUT2_VM${number} | ${vm2}
+
+| Guest VM with dpdk-testpmd using SMT connected via vhost-user is setup
+| | [Documentation]
+| | ... | Start QEMU guest with two vhost-user interfaces and interconnecting
+| | ... | DPDK testpmd. Qemu Guest uses by default 5 cores and 2048M. Testpmd
+| | ... | uses 5 cores (1 main core and 4 cores dedicated to io) mem-channel=4,
+| | ... | txq/rxq=256, burst=64, disable-hw-vlan, disable-rss,
+| | ... | driver usr/lib/librte_pmd_virtio.so and fwd mode is io.
+| | ...
+| | ... | *Arguments:*
+| | ... | - dut_node - DUT node to start guest VM on. Type: dictionary
+| | ... | - sock1 - Socket path for first Vhost-User interface. Type: string
+| | ... | - sock2 - Socket path for second Vhost-User interface. Type: string
+| | ... | - vm_name - QemuUtil instance name. Type: string
+| | ... | - skip - number of cpus which will be skipped. Type: int
+| | ... | - count - number of cpus which will be allocated for qemu. Type: int
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Guest VM with dpdk-testpmd using SMT connected via vhost-user is \
+| | ... | setup \| ${nodes['DUT1']} \| /tmp/sock1 \| /tmp/sock2 \| DUT1_VM \
+| | ... | \| ${6} \| ${5} \|
+| | ...
+| | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | ${skip}=${6}
+| | ... | ${count}=${5}
+| | ...