diff options
Diffstat (limited to 'resources')
-rw-r--r-- | resources/libraries/python/DpdkUtil.py | 10 | ||||
-rw-r--r-- | resources/libraries/python/QemuUtils.py | 13 | ||||
-rw-r--r-- | resources/libraries/robot/performance/performance_configuration.robot | 161 |
3 files changed, 117 insertions, 67 deletions
diff --git a/resources/libraries/python/DpdkUtil.py b/resources/libraries/python/DpdkUtil.py index 79e7209364..b8c1d15a9f 100644 --- a/resources/libraries/python/DpdkUtil.py +++ b/resources/libraries/python/DpdkUtil.py @@ -79,8 +79,11 @@ class DpdkUtil(object): # Set the hexadecimal bitmask of TX queue flags. pmd_txqflags = '--txqflags=0xf00 ' # Set the number of mbufs to be allocated in the mbuf pools. - pmd_total_num_mbufs = '--total-num-mbufs={} '.format(\ + pmd_total_num_mbufs = '--total-num-mbufs={} '.format( args['pmd_num_mbufs']) if args.get('pmd_num_mbufs', '') else '' + # Set the max packet length. + pmd_max_pkt_len = "--max-pkt-len={0}".format(args["pmd_max_pkt_len"]) \ + if args.get("pmd_max_pkt_len", "") else "" # Set the hexadecimal bitmask of the ports for forwarding. pmd_portmask = '--portmask={} '.format(args['pmd_portmask'])\ if args.get('pmd_portmask', '') else '' @@ -96,7 +99,7 @@ class DpdkUtil(object): pmd_eth_peer_1 = '--eth-peer={} '.format(args['pmd_eth_peer_1'])\ if args.get('pmd_eth_peer_1', '') else '' # Set the number of forwarding cores based on coremask. - pmd_nb_cores = '--nb-cores={} '.format(\ + pmd_nb_cores = '--nb-cores={} '.format( bin(int(args['eal_coremask'], 0)).count('1')-1)\ if args.get('eal_coremask', '') else '' pmd_options = '-- '\ @@ -113,7 +116,8 @@ class DpdkUtil(object): + pmd_disable_rss\ + pmd_eth_peer_0\ + pmd_eth_peer_1\ - + pmd_nb_cores + + pmd_nb_cores\ + + pmd_max_pkt_len return pmd_options @staticmethod diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py index aa45ce08ef..a8c26d6898 100644 --- a/resources/libraries/python/QemuUtils.py +++ b/resources/libraries/python/QemuUtils.py @@ -192,16 +192,19 @@ class QemuUtils(object): arch = Topology.get_node_arch(node) self._qemu_bin = 'qemu-system-{arch}'.format(arch=arch) - def qemu_add_vhost_user_if(self, socket, server=True, mac=None): + def qemu_add_vhost_user_if(self, socket, server=True, mac=None, + jumbo_frames=False): """Add Vhost-user interface. :param socket: Path of the unix socket. :param server: If True the socket shall be a listening socket. :param mac: Vhost-user interface MAC address (optional, otherwise is - used auto-generated MAC 52:54:00:00:xx:yy). + used auto-generated MAC 52:54:00:00:xx:yy). + :param jumbo_frames: Set True if jumbo frames are used in the test. :type socket: str :type server: bool :type mac: str + :type jumbo_frames: bool """ self._vhost_id += 1 # Create unix socket character device. @@ -221,7 +224,11 @@ class QemuUtils(object): mac = '52:54:00:00:{0:02x}:{1:02x}'.\ format(self._qemu_id, self._vhost_id) extend_options = 'mq=on,csum=off,gso=off,guest_tso4=off,'\ - 'guest_tso6=off,guest_ecn=off,mrg_rxbuf=off' + 'guest_tso6=off,guest_ecn=off' + if jumbo_frames: + extend_options += ",mrg_rxbuf=on" + else: + extend_options += ",mrg_rxbuf=off" # Create Virtio network device. device = ' -device virtio-net-pci,netdev=vhost{0},mac={1},{2}'.format( self._vhost_id, mac, extend_options) diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot index ba6c7967bb..43e1a3265b 100644 --- a/resources/libraries/robot/performance/performance_configuration.robot +++ b/resources/libraries/robot/performance/performance_configuration.robot @@ -890,40 +890,40 @@ | | ${port_limit}= | Set Variable | ${65535} | | ${acl}= | Set Variable | ipv4 permit | | :FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number} -| | | ${src_ip_int} = | Evaluate | $src_ip_int + $ip_step -| | | ${dst_ip_int} = | Evaluate | $dst_ip_int + $ip_step -| | | ${sport}= | Evaluate | $sport + $port_step -| | | ${dport}= | Evaluate | $dport + $port_step -| | | ${ipv4_limit_reached}= | Set Variable If -| | | ... | $src_ip_int > $ip_limit_int or $src_ip_int > $ip_limit_int -| | | ... | ${True} -| | | ${udp_limit_reached}= | Set Variable If -| | | ... | $sport > $port_limit or $dport > $port_limit | ${True} -| | | Run Keyword If | $ipv4_limit_reached is True | Log -| | | ... | Can't do more iterations - IPv4 address limit has been reached. -| | | ... | WARN -| | | Run Keyword If | $udp_limit_reached is True | Log -| | | ... | Can't do more iterations - UDP port limit has been reached. -| | | ... | WARN -| | | ${src_ip} = | Run Keyword If | $ipv4_limit_reached is True -| | | ... | Set Variable | ${ip_limit} -| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($src_ip_int)) -| | | ... | modules=ipaddress -| | | ${dst_ip} = | Run Keyword If | $ipv4_limit_reached is True -| | | ... | Set Variable | ${ip_limit} -| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($dst_ip_int)) -| | | ... | modules=ipaddress -| | | ${sport}= | Set Variable If | ${sport} > $port_limit | $port_limit -| | | ... | ${sport} -| | | ${dport}= | Set Variable If | ${dport} > $port_limit | $port_limit -| | | ... | ${dport} -| | | ${acl}= | Catenate | ${acl} | src ${src_ip}/32 dst ${dst_ip}/32 -| | | ... | sport ${sport} | dport ${dport}, -| | | Exit For Loop If -| | | ... | $ipv4_limit_reached is True or $udp_limit_reached is True +| | | ${src_ip_int} = | Evaluate | $src_ip_int + $ip_step +| | | ${dst_ip_int} = | Evaluate | $dst_ip_int + $ip_step +| | | ${sport}= | Evaluate | $sport + $port_step +| | | ${dport}= | Evaluate | $dport + $port_step +| | | ${ipv4_limit_reached}= | Set Variable If +| | | ... | $src_ip_int > $ip_limit_int or $src_ip_int > $ip_limit_int +| | | ... | ${True} +| | | ${udp_limit_reached}= | Set Variable If +| | | ... | $sport > $port_limit or $dport > $port_limit | ${True} +| | | Run Keyword If | $ipv4_limit_reached is True | Log +| | | ... | Can't do more iterations - IPv4 address limit has been reached. +| | | ... | WARN +| | | Run Keyword If | $udp_limit_reached is True | Log +| | | ... | Can't do more iterations - UDP port limit has been reached. +| | | ... | WARN +| | | ${src_ip} = | Run Keyword If | $ipv4_limit_reached is True +| | | ... | Set Variable | ${ip_limit} +| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($src_ip_int)) +| | | ... | modules=ipaddress +| | | ${dst_ip} = | Run Keyword If | $ipv4_limit_reached is True +| | | ... | Set Variable | ${ip_limit} +| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($dst_ip_int)) +| | | ... | modules=ipaddress +| | | ${sport}= | Set Variable If | ${sport} > $port_limit | $port_limit +| | | ... | ${sport} +| | | ${dport}= | Set Variable If | ${dport} > $port_limit | $port_limit +| | | ... | ${dport} +| | | ${acl}= | Catenate | ${acl} | src ${src_ip}/32 dst ${dst_ip}/32 +| | | ... | sport ${sport} | dport ${dport}, +| | | Exit For Loop If +| | | ... | $ipv4_limit_reached is True or $udp_limit_reached is True | | ${acl}= | Catenate | ${acl} -| | ... | ipv4 ${acl_action} src ${trex_stream1_subnet}, -| | ... | ipv4 ${acl_action} src ${trex_stream2_subnet} +| | ... | ipv4 ${acl_action} src ${trex_stream1_subnet}, +| | ... | ipv4 ${acl_action} src ${trex_stream2_subnet} | | Add Replace Acl Multi Entries | ${dut} | rules=${acl} | | @{acl_list}= | Create List | ${0} | | Run Keyword If | 'input' in $acl_apply_type and $dut_if1 is not None @@ -1433,6 +1433,8 @@ | | ... | Type: integer | | ... | - qemu_id - Qemu Id when starting more then one guest VM on DUT node. | | ... | Type: integer +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1444,7 +1446,7 @@ | | ... | \| qemu_id=${2} \| | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | ${skip}=${6} -| | ... | ${count}=${5} | ${qemu_id}=${1} +| | ... | ${count}=${5} | ${qemu_id}=${1} | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | qemu_id=${qemu_id} | | ... | WITH NAME | ${vm_name} @@ -1458,7 +1460,9 @@ | | ${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} +| | ... | jumbo_frames=${jumbo_frames} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} | | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} @@ -1471,9 +1475,11 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | eal_mem_channels=4 | | ... | pmd_fwd_mode=io | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure '${nr}' guest VMs with dpdk-testpmd connected via vhost-user in 3-node circular topology @@ -1488,10 +1494,12 @@ | | ... | - ${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. +| | ... | - ${jumbo_frames} - Jumbo frames are used (True) or are not used +| | ... | (False) in the test. | | ... | | ... | *Example:* | | ... -| | ... | \| Configure '2' guest VMs with dpdk-testpmd connected via vhost-user \ +| | ... | \| Configure '2' guest VMs with dpdk-testpmd connected via vhost-user\ | | ... | in 3-node circular topology \| | | ... | | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 @@ -1501,10 +1509,12 @@ | | | ${vm1}= | Configure guest VM with dpdk-testpmd connected via vhost-user | | | ... | ${dut1} | ${sock1} | ${sock2} | DUT1_VM${number} | | | ... | skip=${skip_cpus} | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut1_vm_refs} | DUT1_VM${number} | ${vm1} | | | ${vm2}= | Configure guest VM with dpdk-testpmd connected via vhost-user | | | ... | ${dut2} | ${sock1} | ${sock2} | DUT2_VM${number} | | | ... | skip=${skip_cpus} | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut2_vm_refs} | DUT2_VM${number} | ${vm2} | | | Run Keyword Unless | ${qemu_built} | Set Suite Variable | ${qemu_built} | | | ... | ${True} @@ -1524,6 +1534,8 @@ | | ... | - 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 +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1532,7 +1544,7 @@ | | ... | \| ${6} \| ${5} \| | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | ${skip}=${6} -| | ... | ${count}=${5} +| | ... | ${count}=${5} | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | | ... | WITH NAME | ${vm_name} @@ -1542,6 +1554,10 @@ | | ... | skip_cnt=${skip} | cpu_cnt=${count} | smt_used=${True} | | 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 Add Vhost User If | ${sock1} +| | ... | jumbo_frames=${jumbo_frames} +| | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} | | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} @@ -1554,9 +1570,11 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | eal_mem_channels=4 | | ... | pmd_fwd_mode=io | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure guest VM with dpdk-testpmd-mac connected via vhost-user @@ -1579,6 +1597,8 @@ | | ... | Type: integer | | ... | - qemu_id - Qemu Id when starting more then one guest VM on DUT node. | | ... | Type: integer +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1592,7 +1612,7 @@ | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | | ... | ${eth0_mac} | ${eth1_mac} | ${skip}=${6} | ${count}=${5} -| | ... | ${qemu_id}=${1} +| | ... | ${qemu_id}=${1} | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | qemu_id=${qemu_id} | | ... | WITH NAME | ${vm_name} @@ -1607,6 +1627,10 @@ | | ... | 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 Add Vhost User If | ${sock1} +| | ... | jumbo_frames=${jumbo_frames} +| | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} | | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} @@ -1619,10 +1643,12 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | | ... | eal_mem_channels=4 | pmd_fwd_mode=mac | pmd_eth_peer_0=0,${eth0_mac} | | ... | pmd_eth_peer_1=1,${eth1_mac} | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure '${nr}' guest VMs with dpdk-testpmd-mac connected via vhost-user in 3-node circular topology @@ -1638,10 +1664,12 @@ | | ... | - ${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. +| | ... | - ${jumbo_frames} - Jumbo frames are used (True) or are not used +| | ... | (False) in the test. | | ... | | ... | *Example:* | | ... -| | ... | \| Configure '2' guest VMs with dpdk-testpmd-mac connected via vhost-user \ +| | ... | \| Configure '2' guest VMs with dpdk-testpmd-mac connected via vhost-user\ | | ... | in 3-node circular topology \| | | ... | | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 @@ -1654,6 +1682,7 @@ | | | ... | ${dut1-vhost-${number}-if1_mac} | | | ... | ${dut1-vhost-${number}-if2_mac} | skip=${skip_cpus} | | | ... | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut1_vm_refs} | DUT1_VM${number} | ${vm1} | | | ${vm2}= | | | ... | Configure guest VM with dpdk-testpmd-mac connected via vhost-user @@ -1661,6 +1690,7 @@ | | | ... | ${dut2-vhost-${number}-if1_mac} | | | ... | ${dut2-vhost-${number}-if2_mac} | skip=${skip_cpus} | | | ... | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut2_vm_refs} | DUT2_VM${number} | ${vm2} | | | Run Keyword Unless | ${qemu_built} | Set Suite Variable | ${qemu_built} | | | ... | ${True} @@ -1682,6 +1712,8 @@ | | ... | - eth1_mac - MAC address of second Vhost interface. Type: string | | ... | - skip - number of cpus which will be skipped. Type: int | | ... | - count - number of cpus which will be allocated for qemu. Type: int +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1691,6 +1723,7 @@ | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | | ... | ${eth0_mac} | ${eth1_mac} | ${skip}=${6} | ${count}=${5} +| | ... | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | | ... | WITH NAME | ${vm_name} @@ -1700,6 +1733,10 @@ | | ... | skip_cnt=${skip} | cpu_cnt=${count} | smt_used=${True} | | 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 Add Vhost User If | ${sock1} +| | ... | jumbo_frames=${jumbo_frames} +| | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} | | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} @@ -1712,10 +1749,12 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | | ... | eal_mem_channels=4 | pmd_fwd_mode=mac | pmd_eth_peer_0=0,${eth0_mac} | | ... | pmd_eth_peer_1=1,${eth1_mac} | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure guest VM with linux bridge connected via vhost-user @@ -2103,29 +2142,29 @@ | | Set Interface State | ${dut2} | ${dut2_if1} | up | | Set Interface State | ${dut2} | ${dut2_if2} | up | | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | ${sock1}= | Set Variable | memif-DUT1_VNF -| | | ${sock2}= | Set Variable | memif-DUT1_VNF -| | | ${prev_index}= | Evaluate | ${number}-1 -| | | Set up memif interfaces on DUT node | ${dut1} -| | | ... | ${sock1} | ${sock2} | ${number} | dut1-memif-${number}-if1 -| | | ... | dut1-memif-${number}-if2 -| | | ${dut1_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut1_if1} -| | | ... | ${dut1-memif-${prev_index}-if2} -| | | Configure L2XC | ${dut1} | ${dut1_xconnect_if1} -| | | ... | ${dut1-memif-${number}-if1} -| | | ${sock1}= | Set Variable | memif-DUT2_VNF -| | | ${sock2}= | Set Variable | memif-DUT2_VNF -| | | Set up memif interfaces on DUT node | ${dut2} -| | | ... | ${sock1} | ${sock2} | ${number} | dut2-memif-${number}-if1 -| | | ... | dut2-memif-${number}-if2 -| | | ${dut2_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut2_if1} -| | | ... | ${dut2-memif-${prev_index}-if2} -| | | Configure L2XC | ${dut2} | ${dut2_xconnect_if1} -| | | ... | ${dut2-memif-${number}-if1} -| | | Run Keyword If | ${number}==${nr} | Configure L2XC -| | | ... | ${dut1} | ${dut1-memif-${number}-if2} | ${dut1_if2} -| | | Run Keyword If | ${number}==${nr} | Configure L2XC -| | | ... | ${dut2} | ${dut2-memif-${number}-if2} | ${dut2_if2} +| | | ${sock1}= | Set Variable | memif-DUT1_VNF +| | | ${sock2}= | Set Variable | memif-DUT1_VNF +| | | ${prev_index}= | Evaluate | ${number}-1 +| | | Set up memif interfaces on DUT node | ${dut1} +| | | ... | ${sock1} | ${sock2} | ${number} | dut1-memif-${number}-if1 +| | | ... | dut1-memif-${number}-if2 +| | | ${dut1_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut1_if1} +| | | ... | ${dut1-memif-${prev_index}-if2} +| | | Configure L2XC | ${dut1} | ${dut1_xconnect_if1} +| | | ... | ${dut1-memif-${number}-if1} +| | | ${sock1}= | Set Variable | memif-DUT2_VNF +| | | ${sock2}= | Set Variable | memif-DUT2_VNF +| | | Set up memif interfaces on DUT node | ${dut2} +| | | ... | ${sock1} | ${sock2} | ${number} | dut2-memif-${number}-if1 +| | | ... | dut2-memif-${number}-if2 +| | | ${dut2_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut2_if1} +| | | ... | ${dut2-memif-${prev_index}-if2} +| | | Configure L2XC | ${dut2} | ${dut2_xconnect_if1} +| | | ... | ${dut2-memif-${number}-if1} +| | | Run Keyword If | ${number}==${nr} | Configure L2XC +| | | ... | ${dut1} | ${dut1-memif-${number}-if2} | ${dut1_if2} +| | | Run Keyword If | ${number}==${nr} | Configure L2XC +| | | ... | ${dut2} | ${dut2-memif-${number}-if2} | ${dut2_if2} | Initialize L2 Bridge Domain for '${nr}' memif pairs in 3-node circular topology | | [Documentation] |