aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/robot/shared
diff options
context:
space:
mode:
authorPeter Mikus <pmikus@cisco.com>2020-02-21 22:09:02 +0000
committerPeter Mikus <pmikus@cisco.com>2020-04-06 08:27:39 +0000
commit14a71b74b414df7616ccb5ada3d50ecb90d96bae (patch)
treebfee617c9a4b20ce4c6467ffbbe6c0a15199ba52 /resources/libraries/robot/shared
parent8e601d0f37f715ca4ce55dded8bc27cadfe175c2 (diff)
Improve pf layer
+ Merge single/double link + Introduce _pf{n}[0] variables so we can access physical function same way as virtual function + Cleanup code by moving complex logic to python + Prepare code for multiple vf functions Signed-off-by: Peter Mikus <pmikus@cisco.com> Change-Id: Ic2e74a38bfa146441357de8f0916aeb638941c49
Diffstat (limited to 'resources/libraries/robot/shared')
-rw-r--r--resources/libraries/robot/shared/container.robot52
-rw-r--r--resources/libraries/robot/shared/default.robot100
-rw-r--r--resources/libraries/robot/shared/interfaces.robot666
-rw-r--r--resources/libraries/robot/shared/suite_setup.robot261
-rw-r--r--resources/libraries/robot/shared/suite_teardown.robot2
-rw-r--r--resources/libraries/robot/shared/test_setup.robot1
-rw-r--r--resources/libraries/robot/shared/testing_path.robot380
-rw-r--r--resources/libraries/robot/shared/vm.robot6
8 files changed, 513 insertions, 955 deletions
diff --git a/resources/libraries/robot/shared/container.robot b/resources/libraries/robot/shared/container.robot
index dbe2ae73a4..b2b3d01a4e 100644
--- a/resources/libraries/robot/shared/container.robot
+++ b/resources/libraries/robot/shared/container.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2019 Cisco and/or its affiliates.
+# Copyright (c) 2020 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -209,26 +209,40 @@
| | ${dut1_if2} = | Get Variable Value | \${dut1_if2} | ${None}
| | ${dut2_if2} = | Get Variable Value | \${dut2_if2} | ${None}
| | Run Keyword If | '${container_chain_topology}' == 'chain_ip4'
-| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology}
-| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac}
+| | ... | ${group}.Configure VPP In All Containers
+| | ... | ${container_chain_topology}
+| | ... | tg_if1_mac=${TG_pf1_mac}
+| | ... | tg_if2_mac=${TG_pf2_mac}
| | ... | nodes=${nf_nodes}
| | ... | ELSE IF | '${container_chain_topology}' == 'chain_ipsec'
-| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology}
-| | ... | tg_if1_ip4=${tg_if1_ip4} | tg_if1_mac=${tg_if1_mac}
-| | ... | tg_if2_ip4=${tg_if2_ip4} | tg_if2_mac=${tg_if2_mac}
-| | ... | dut1_if1_ip4=${dut1_if1_ip4} | dut1_if2_ip4=${dut1_if2_ip4}
-| | ... | dut2_if1_ip4=${dut2_if1_ip4} | dut2_if2_ip4=${dut2_if2_ip4}
-| | ... | raddr_ip4=${raddr_ip4} | laddr_ip4=${laddr_ip4}
-| | ... | nodes=${nodes} | nf_nodes=${nf_nodes}
+| | ... | ${group}.Configure VPP In All Containers
+| | ... | ${container_chain_topology}
+| | ... | tg_if1_ip4=${tg_if1_ip4}
+| | ... | tg_if1_mac=${TG_pf1_mac}[0]
+| | ... | tg_if2_ip4=${tg_if2_ip4}
+| | ... | tg_if2_mac=${TG_pf2_mac}[0]
+| | ... | dut1_if1_ip4=${dut1_if1_ip4}
+| | ... | dut1_if2_ip4=${dut1_if2_ip4}
+| | ... | dut2_if1_ip4=${dut2_if1_ip4}
+| | ... | dut2_if2_ip4=${dut2_if2_ip4}
+| | ... | raddr_ip4=${raddr_ip4}
+| | ... | laddr_ip4=${laddr_ip4}
+| | ... | nodes=${nodes}
+| | ... | nf_nodes=${nf_nodes}
| | ... | ELSE IF | '${container_chain_topology}' == 'pipeline_ip4'
-| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology}
-| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac}
+| | ... | ${group}.Configure VPP In All Containers
+| | ... | ${container_chain_topology}
+| | ... | tg_if1_mac=${TG_pf1_mac}[0]
+| | ... | tg_if2_mac=${TG_pf2_mac}[0]
| | ... | nodes=${nf_nodes}
| | ... | ELSE IF | '${container_chain_topology}' == 'cross_horiz'
-| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology}
-| | ... | dut1_if=${dut1_if2} | dut2_if=${dut2_if2}
+| | ... | ${group}.Configure VPP In All Containers
+| | ... | ${container_chain_topology}
+| | ... | dut1_if=${DUT1_${int}2}[0]
+| | ... | dut2_if=${DUT2_${int}2}[0]
| | ... | ELSE
-| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology}
+| | ... | ${group}.Configure VPP In All Containers
+| | ... | ${container_chain_topology}
| Stop all '${group}' containers
| | [Documentation] | Stop all container(s) in specific container group on all
@@ -324,11 +338,11 @@
| | ... | ELSE | Set variable | ${rxq_count_int}
| | VSWITCH.Configure VPP in all containers | chain_vswitch
| | ... | rxq=${rxq_count_int} | n_instances=${n_instances} | node=${dut}
-| | ... | dut1_if1=${dut1_if1} | dut1_if2=${dut1_if2}
-| | ... | dut2_if1=${dut2_if1} | dut2_if2=${dut2_if2}
+| | ... | dut1_if1=${DUT1_${int}1}[0] | dut1_if2=${DUT1_${int}2}[0]
+| | ... | dut2_if1=${DUT2_${int}1}[0] | dut2_if2=${DUT2_${int}2}[0]
| | ... | dut2_if2_ip4=${dut2_if2_ip4}
-| | ... | tg_if1_ip4=${tg_if1_ip4} | tg_if1_mac=${tg_if1_mac}
-| | ... | tg_if2_ip4=${tg_if2_ip4} | tg_if2_mac=${tg_if2_mac}
+| | ... | tg_if1_ip4=${tg_if1_ip4} | tg_if1_mac=${TG_pf1_mac}[0]
+| | ... | tg_if2_ip4=${tgi_f2_ip4} | tg_if2_mac=${TG_pf2_mac}[0]
| | ... | nodes=${nodes}
| | Start VPP in all '${container_group}' containers
diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot
index 64365f352b..0a3efc285a 100644
--- a/resources/libraries/robot/shared/default.robot
+++ b/resources/libraries/robot/shared/default.robot
@@ -58,7 +58,6 @@
| Resource | resources/libraries/robot/overlay/lisp.robot
| Resource | resources/libraries/robot/overlay/lispgpe.robot
| Resource | resources/libraries/robot/overlay/lisp_api.robot
-| Resource | resources/libraries/robot/performance/performance_configuration.robot
| Resource | resources/libraries/robot/performance/performance_limits.robot
| Resource | resources/libraries/robot/performance/performance_utils.robot
| Resource | resources/libraries/robot/shared/interfaces.robot
@@ -68,7 +67,6 @@
| Resource | resources/libraries/robot/shared/suite_setup.robot
| Resource | resources/libraries/robot/shared/test_teardown.robot
| Resource | resources/libraries/robot/shared/test_setup.robot
-| Resource | resources/libraries/robot/shared/testing_path.robot
| Resource | resources/libraries/robot/shared/traffic.robot
| Resource | resources/libraries/robot/shared/vm.robot
@@ -188,18 +186,8 @@
| | ${rxd_count_int}= | Set variable | ${rxd}
| | ${txd_count_int}= | Set variable | ${txd}
| | FOR | ${dut} | IN | @{duts}
-| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
-| | | ... | Variable Should Exist | ${${dut}_if1}
-| | | @{if_list}= | Run Keyword If | '${if1_status}' == 'PASS'
-| | | ... | Create List | ${${dut}_if1}
-| | | ... | ELSE | Create List | ${${dut}_if1_1} | ${${dut}_if1_2}
-| | | ${if2_status} | ${value}= | Run Keyword And Ignore Error
-| | | ... | Variable Should Exist | ${${dut}_if2}
-| | | Run Keyword If | '${if2_status}' == 'PASS'
-| | | ... | Append To List | ${if_list} | ${${dut}_if2}
-| | | ... | ELSE
-| | | ... | Append To List | ${if_list} | ${${dut}_if2_1} | ${${dut}_if2_2}
-| | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']} | @{if_list}
+| | | ${numa}= | Get interfaces numa node
+| | | ... | ${nodes['${dut}']} | @{${dut}_pf_pci}
| | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']}
| | | ${skip_cnt}= | Set variable | ${CPU_CNT_SYSTEM}
| | | ${cpu_main}= | Cpu list per node str | ${nodes['${dut}']} | ${numa}
@@ -239,80 +227,23 @@
| | Set Test Variable | ${rxd_count_int}
| | Set Test Variable | ${txd_count_int}
-| Add DPDK pci devices to all DUTs
-| | [Documentation]
-| | ... | Add PCI devices to VPP configuration file.
-| |
-| | FOR | ${dut} | IN | @{duts}
-| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
-| | | ... | Variable Should Exist | ${${dut}_if1}
-| | | ${if1_pci}= | Run Keyword If | '${if1_status}' == 'PASS'
-| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1}
-| | | ${if1_1_pci}= | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1_1}
-| | | ${if1_2_pci}= | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1_2}
-| | | ${if2_status} | ${value}= | Run Keyword And Ignore Error
-| | | ... | Variable Should Exist | ${${dut}_if2}
-| | | ${if2_pci}= | Run Keyword If | '${if2_status}' == 'PASS'
-| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if2}
-| | | ${if2_1_pci}= | Run Keyword Unless | '${if2_status}' == 'PASS'
-| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if2_1}
-| | | ${if2_2_pci}= | Run Keyword Unless | '${if2_status}' == 'PASS'
-| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if2_2}
-| | | @{pci_devs}= | Run Keyword If | '${if1_status}' == 'PASS'
-| | | ... | Create List | ${if1_pci}
-| | | ... | ELSE
-| | | ... | Create List | ${if1_1_pci} | ${if1_2_pci}
-| | | Run Keyword If | '${if2_status}' == 'PASS'
-| | | ... | Append To List | ${pci_devs} | ${if2_pci}
-| | | ... | ELSE
-| | | ... | Append To List | ${pci_devs} | ${if2_1_pci} | ${if2_2_pci}
-| | | Run keyword | ${dut}.Add DPDK Dev | @{pci_devs}
-| | | Run Keyword If | '${if1_status}' == 'PASS'
-| | | ... | Set Test Variable | ${${dut}_if1_pci} | ${if1_pci}
-| | | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | | ... | Set Test Variable | ${${dut}_if1_1_pci} | ${if1_1_pci}
-| | | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | | ... | Set Test Variable | ${${dut}_if1_2_pci} | ${if1_2_pci}
-| | | Run Keyword If | '${if2_status}' == 'PASS'
-| | | ... | Set Test Variable | ${${dut}_if2_pci} | ${if2_pci}
-| | | Run Keyword Unless | '${if2_status}' == 'PASS'
-| | | ... | Set Test Variable | ${${dut}_if2_1_pci} | ${if2_1_pci}
-| | | Run Keyword Unless | '${if2_status}' == 'PASS'
-| | | ... | Set Test Variable | ${${dut}_if2_2_pci} | ${if2_2_pci}
-| | END
-
-| Add DPDK no PCI to all DUTs
-| | [Documentation] | Add DPDK no-pci to VPP startup configuration to all DUTs.
-| |
-| | FOR | ${dut} | IN | @{duts}
-| | | Run keyword | ${dut}.Add DPDK no PCI
-| | END
-
-| Add VLAN strip offload switch off between DUTs in 3-node single link topology
+| Add DPDK VLAN strip offload switch off between DUTs
| | [Documentation]
| | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP
| | ... | configuration file.
| |
-| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_pci}
-| | ... | vlan-strip-offload | off
-| | Run keyword | DUT2.Add DPDK Dev Parameter | ${dut2_if1_pci}
-| | ... | vlan-strip-offload | off
-
-| Add VLAN strip offload switch off between DUTs in 3-node double link topology
-| | [Documentation]
-| | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP
-| | ... | configuration file
-| |
-| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_1_pci}
-| | ... | vlan-strip-offload | off
-| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_2_pci}
-| | ... | vlan-strip-offload | off
-| | Run keyword | DUT2.Add DPDK Dev Parameter | ${dut2_if1_1_pci}
-| | ... | vlan-strip-offload | off
-| | Run keyword | DUT2.Add DPDK Dev Parameter | ${dut2_if1_2_pci}
-| | ... | vlan-strip-offload | off
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | ${_even}= | Evaluate | ${pf} % 2
+| | | Run Keyword Unless | ${even}
+| | | ... | DUT1.Add DPDK Dev Parameter | ${DUT1_${int}${pf}_pci}[0]
+| | | ... | vlan-strip-offload | off
+| | END
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | ${_even}= | Evaluate | ${pf} % 2
+| | | Run Keyword If | ${even}
+| | | ... | DUT2.Add DPDK Dev Parameter | ${DUT2_${int}${pf}_pci}[0]
+| | | ... | vlan-strip-offload | off
+| | END
| Add NAT to all DUTs
| | [Documentation] | Add NAT configuration to all DUTs.
@@ -374,7 +305,6 @@
| |
| | ${setup_vpp_pids}= | Get VPP PIDs | ${nodes}
| | ${keys}= | Get Dictionary Keys | ${setup_vpp_pids}
-| | ${duts}= | Get Matches | ${nodes} | DUT*
| | FOR | ${key} | IN | @{keys}
| | | ${pid}= | Get From Dictionary | ${setup_vpp_pids} | ${key}
| | | Run Keyword If | $pid is None | FAIL | No VPP PID found on node ${key}
diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot
index 18bb0d3568..f1dc89d300 100644
--- a/resources/libraries/robot/shared/interfaces.robot
+++ b/resources/libraries/robot/shared/interfaces.robot
@@ -19,147 +19,79 @@
| ${dpdk_no_tx_checksum_offload}= | ${True}
*** Keywords ***
-| Set interfaces in path up
+| Set single interfaces in path up
| | [Documentation]
-| | ... | *Set UP state on VPP interfaces in path on all DUT nodes and set
-| | ... | maximal MTU.*
-| |
-| | FOR | ${dut} | IN | @{duts}
-| | | Set interfaces in path up on DUT | ${dut}
-| | END
-| | All VPP Interfaces Ready Wait | ${nodes} | retries=${300}
-
-| Set interfaces in path up on DUT
-| | [Documentation]
-| | ... | *Set UP state on VPP interfaces in path on specified DUT node and
-| | ... | set maximal MTU.*
+| | ... | *Set UP state on single physical VPP interfaces in path on all DUT
+| | ... | nodes and set maximal MTU.*
| |
| | ... | *Arguments:*
-| | ... | - dut - DUT node on which to set the interfaces up.
-| | ... | Type: string
+| | ... | - pf - NIC physical function (physical port).
+| | ... | Type: integer
| |
| | ... | *Example:*
| |
-| | ... | \| Set interfaces in path up on DUT \| DUT1 \|
+| | ... | \| Set single interfaces in path \| 1 \|
| |
-| | [Arguments] | ${dut}
-# TODO: Rework KW to set all interfaces in path UP and set MTU (including
-# software interfaces. Run KW at the start phase of VPP setup to split
-# from other "functional" configuration. This will allow modularity of this
-# library
-| | ${if1_status} | ${value}= | Run Keyword And Ignore Error
-| | ... | Variable Should Exist | ${${dut}_if1}
-| | Run Keyword If | '${if1_status}' == 'PASS'
-| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1} | up
-| | ... | ELSE
-| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_1} | up
-| | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_2} | up
-| | ${if2_status} | ${value}= | Run Keyword And Ignore Error
-| | ... | Variable Should Exist | ${${dut}_if2}
-| | Run Keyword If | '${if2_status}' == 'PASS'
-| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2} | up
-| | ... | ELSE
-| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_1} | up
-| | Run Keyword Unless | '${if2_status}' == 'PASS'
-| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_2} | up
-| | ${if1_status} | ${value}= | Run Keyword And Ignore Error
-| | ... | Variable Should Exist | ${${dut}_if1}
-| | Run Keyword If | '${if1_status}' == 'PASS'
-| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1}
-| | ... | ELSE
-| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_1}
-| | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_2}
-| | ${if2_status} | ${value}= | Run Keyword And Ignore Error
-| | ... | Variable Should Exist | ${${dut}_if2}
-| | Run Keyword If | '${if2_status}' == 'PASS'
-| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2}
-| | ... | ELSE
-| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_1}
-| | Run Keyword Unless | '${if2_status}' == 'PASS'
-| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_2}
+| | [Arguments] | ${pf}=${1}
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Set interfaces in path up on node on PF | ${dut} | ${pf}
+| | END
+| | All VPP Interfaces Ready Wait | ${nodes} | retries=${60}
-| Set single interfaces in path up
+| Set interfaces in path up
| | [Documentation]
-| | ... | *Set UP state on single VPP interfaces in path on all DUT nodes and set
+| | ... | *Set UP state on VPP interfaces in path on all DUT nodes and set
| | ... | maximal MTU.*
| |
-# TODO: Rework KW to set all interfaces in path UP and set MTU (including
-# software interfaces. Run KW at the start phase of VPP setup to split
-# from other "functional" configuration. This will allow modularity of this
-# library
| | FOR | ${dut} | IN | @{duts}
-| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
-| | | ... | Variable Should Exist | ${${dut}_if1}
-| | | Run Keyword If | '${if1_status}' == 'PASS'
-| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1} | up
-| | | ... | ELSE
-| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_1} | up
-| | | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_2} | up
+| | | Set interfaces in path up on node | ${dut}
| | END
-| | FOR | ${dut} | IN | @{duts}
-| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
-| | | ... | Variable Should Exist | ${${dut}_if1}
-| | | Run Keyword If | '${if1_status}' == 'PASS'
-| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1}
-| | | ... | ELSE
-| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_1}
-| | | Run Keyword Unless | '${if1_status}' == 'PASS'
-| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_2}
-| | END
-| | All VPP Interfaces Ready Wait | ${nodes}
+| | All VPP Interfaces Ready Wait | ${nodes} | retries=${60}
-| Get Vhost dump
-| | [Documentation] | Get vhost-user dump.
-| |
-| | ... | *Arguments:*
-| | ... | - node - DUT node data. Type: dictionary
-| |
-| | [Arguments] | ${dut_node}
-| |
-| | [Return] | ${vhost_dump}
-| |
-| | ${vhost_dump}= | Vhost User Dump | ${dut_node}
-
-| Initialize layer interface on node
+| Set interfaces in path up on node
| | [Documentation]
-| | ... | Baseline interfaces variables to be created.
+| | ... | *Set UP state on VPP interfaces in path on specified DUT node and
+| | ... | set maximal MTU.*
| |
| | ... | *Arguments:*
-| | ... | - dut - DUT node. Type: string
-| | ... | - count - Number of baseline interface variables. Type: integer
+| | ... | - dut - DUT node on which to set the interfaces up.
+| | ... | Type: string
| |
| | ... | *Example:*
| |
-| | ... | \| Initialize layer interface on node \| DUT1 \| 1 \|
+| | ... | \| Set interfaces in path up on node \| DUT1 \|
| |
-| | [Arguments] | ${dut} | ${count}=${1}
+| | [Arguments] | ${dut}
| |
-| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
-| | | Set Test Variable | ${${dut_str}_if_${id}_1} | ${${dut_str}_if1}
-| | | Set Test Variable | ${${dut_str}_if_${id}_2} | ${${dut_str}_if2}
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | Set interfaces in path up on node on PF | ${dut} | ${pf}
| | END
-| Initialize layer interface
+| Set interfaces in path up on node on PF
| | [Documentation]
-| | ... | Physical interfaces variables to be created on all DUTs.
+| | ... | *Set UP state on VPP interfaces in path on specified DUT node and
+| | ... | set maximal MTU.*
| |
| | ... | *Arguments:*
-| | ... | - count - Number of untagged interfaces variables. Type: integer
+| | ... | - dut - DUT node on which to set the interfaces up.
+| | ... | Type: string
+| | ... | - pf - NIC physical function (physical port).
+| | ... | Type: integer
| |
| | ... | *Example:*
| |
-| | ... | \| Initialize layer interface \| 1 \|
+| | ... | \| Set interfaces in path up on node on PF \| DUT1 \| 1 \|
| |
-| | [Arguments] | ${count}=${1}
+| | [Arguments] | ${dut} | ${pf}
| |
-| | FOR | ${dut} | IN | @{duts}
-| | | Initialize layer interface on node | ${dut} | count=${count}
+| | ${_chains} | ${value}= | Run Keyword And Ignore Error
+| | ... | Variable Should Exist | @{${dut}_${int}${pf}_1}
+| | ${_id}= | Set Variable If | '${_chains}' == 'PASS' | _1 | ${EMPTY}
+| | FOR | ${if} | IN | @{${dut}_${int}${pf}${_id}}
+| | | Set Interface State | ${nodes['${dut}']} | ${if} | up
+| | | VPP Set Interface MTU | ${nodes['${dut}']} | ${if}
| | END
-| | Set Test Variable | ${prev_layer} | if
| Pre-initialize layer driver
| | [Documentation]
@@ -182,8 +114,8 @@
| | ... | Pre-initialize vfio-pci driver by adding related sections to startup
| | ... | config on all DUTs.
| |
-| | Add DPDK pci devices to all DUTs
| | FOR | ${dut} | IN | @{duts}
+| | | Run keyword | ${dut}.Add DPDK Dev | @{${dut}_pf_pci}
| | | Run Keyword If | ${dpdk_no_tx_checksum_offload}
| | | ... | ${dut}.Add DPDK No Tx Checksum Offload
| | | Run Keyword | ${dut}.Add DPDK Log Level | debug
@@ -198,6 +130,10 @@
| | | Run Keyword If | '${crypto_type}' != '${None}'
| | | ... | ${dut}.Add DPDK Cryptodev | ${thr_count_int}
| | END
+| | ${_vlan_strip} | ${value}= | Run Keyword And Ignore Error
+| | ... | Variable Should Exist | ${vlan_strip_off}
+| | Run keyword If | '${_vlan_strip}' == 'PASS' and ${duts_count} == 2
+| | ... | Add DPDK VLAN strip offload switch off between DUTs
| Pre-initialize layer avf on all DUTs
| | [Documentation]
@@ -213,7 +149,7 @@
| Initialize layer driver
| | [Documentation]
-| | ... | Initialize driver based interfaces on each DUT. Interfaces are
+| | ... | Initialize driver based interfaces on all DUT. Interfaces are
| | ... | brought up.
| |
| | ... | *Arguments:*
@@ -227,91 +163,205 @@
| | [Arguments] | ${driver}
| |
| | FOR | ${dut} | IN | @{duts}
-| | | Run Keyword | Initialize layer ${driver} on node | ${dut}
+| | | Initialize layer driver on node | ${dut} | ${driver}
| | END
-| | Set Test Variable | ${prev_layer} | vf
+| | Set Test Variable | ${int} | vf
| | Set interfaces in path up
+| Initialize layer driver on node
+| | [Documentation]
+| | ... | Initialize driver based interfaces on DUT.
+| |
+| | ... | *Arguments:*
+| | ... | - dut - DUT node.
+| | ... | Type: string
+| | ... | - driver - NIC driver used in test [vfio-pci|avf|rdma-core].
+| | ... | Type: string
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Initialize layer driver \| DUT1 \| vfio-pci \|
+| |
+| | [Arguments] | ${dut} | ${driver}
+| |
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | ${_vf}=
+| | | ... | Copy List | ${${dut}_${int}${pf}}
+| | | ${_ip4_addr}=
+| | | ... | Copy List | ${${dut}_${int}${pf}_ip4_addr}
+| | | ${_ip4_prefix}=
+| | | ... | Copy List | ${${dut}_${int}${pf}_ip4_prefix}
+| | | ${_mac}=
+| | | ... | Copy List | ${${dut}_${int}${pf}_mac}
+| | | ${_pci}=
+| | | ... | Copy List | ${${dut}_${int}${pf}_pci}
+| | | ${_vlan}=
+| | | ... | Copy List | ${${dut}_${int}${pf}_vlan}
+| | | Set Test Variable
+| | | ... | ${${dut}_vf${pf}} | ${_vf}
+| | | Set Test Variable
+| | | ... | ${${dut}_vf${pf}_ip4_addr} | ${_ip4_addr}
+| | | Set Suite Variable
+| | | ... | ${${dut}_vf${pf}_ip4_prefix} | ${_ip4_prefix}
+| | | Set Test Variable
+| | | ... | ${${dut}_vf${pf}_mac} | ${_mac}
+| | | Set Test Variable
+| | | ... | ${${dut}_vf${pf}_pci} | ${_pci}
+| | | Set Test Variable
+| | | ... | ${${dut}_vf${pf}_vlan} | ${_vlan}
+| | | Run Keyword | Initialize layer ${driver} on node | ${dut} | ${pf}
+| | END
+
| Initialize layer vfio-pci on node
| | [Documentation]
-| | ... | Initialize vfio-pci interfaces on DUT. Currently no operation.
+| | ... | Initialize vfio-pci interfaces on DUT on NIC PF.
+| | ... | Currently no operation.
| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
+| | ... | - pf - NIC physical function (physical port). Type: integer
| |
| | ... | *Example:*
| |
-| | ... | \| Initialize layer vfio-pci on node \| DUT1 \|
+| | ... | \| Initialize layer vfio-pci on node \| DUT1 \| 1 \|
| |
-| | [Arguments] | ${dut}
+| | [Arguments] | ${dut} | ${pf}
| |
| | No operation
| Initialize layer avf on node
| | [Documentation]
-| | ... | Initialize AVF interfaces on DUT.
+| | ... | Initialize AVF (Intel) interfaces on DUT on NIC PF.
| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
+| | ... | - pf - NIC physical function (physical port). Type: integer
| |
| | ... | *Example:*
| |
-| | ... | \| Initialize layer avf on node \| DUT1 \|
+| | ... | \| Initialize layer avf on node \| DUT1 \| 1 \|
+| |
+| | [Arguments] | ${dut} | ${pf}
+| |
+| | FOR | ${vf} | IN RANGE | 0 | ${nic_vfs}
+| | | ${_avf}= | VPP Create AVF Interface
+| | | ... | ${nodes['${dut}']} | ${${dut}_vf${pf}}[${vf}]
+| | | ... | num_rx_queues=${rxq_count_int}
+| | | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size}
+| | | ${_ip4}=
+| | | ... | Get Interface IP4 | ${nodes['${dut}']} | ${_avf}
+| | | ${_ip4_prefix}=
+| | | ... | Get Interface IP4 Prefix Length | ${nodes['${dut}']} | ${_avf}
+| | | ${_mac}=
+| | | ... | Get Interface MAC | ${nodes['${dut}']} | ${_avf}
+| | | ${_pci}=
+| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${_avf}
+| | | ${_vlan}=
+| | | ... | Get Interface VLAN | ${nodes['${dut}']} | ${_avf}
+| | | Set List Value | ${${dut}_vf${pf}} | ${vf} | ${_avf}
+| | | Set List Value | ${${dut}_vf${pf}_ip4_addr} | ${vf} | ${_ip4}
+| | | Set List Value | ${${dut}_vf${pf}_ip4_prefix} | ${vf} | ${_ip4_prefix}
+| | | Set List Value | ${${dut}_vf${pf}_mac} | ${vf} | ${_mac}
+| | | Set List Value | ${${dut}_vf${pf}_pci} | ${vf} | ${_pci}
+| | | Set List Value | ${${dut}_vf${pf}_vlan} | ${vf} | ${_vlan}
+| | END
+
+| Initialize layer rdma-core on node
+| | [Documentation]
+| | ... | Initialize rdma-core (Mellanox VPP) interfaces on DUT on NIC PF.
| |
-| | [Arguments] | ${dut}
+| | ... | *Arguments:*
+| | ... | - dut - DUT node. Type: string
+| | ... | - pf - NIC physical function (physical port). Type: integer
| |
-| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | ${if1_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if1}
-| | ${if2_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if2}
-| | Set Test Variable | ${${dut_str}_vlan1} | ${if1_vlan}
-| | Set Test Variable | ${${dut_str}_vlan2} | ${if2_vlan}
-| | ${dut_new_if1}= | VPP Create AVF Interface | ${nodes['${dut}']}
-| | ... | ${${dut}_if1_vf0} | num_rx_queues=${rxq_count_int}
-| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size}
-| | ${dut_new_if1_mac}= | Get Interface MAC | ${nodes['${dut}']}
-| | ... | ${dut_new_if1}
-| | ${dut_new_if2}= | VPP Create AVF Interface | ${nodes['${dut}']}
-| | ... | ${${dut}_if2_vf0} | num_rx_queues=${rxq_count_int}
+| | ... | *Example:*
+| |
+| | ... | \| Initialize layer rdma-core on node \| DUT1 \| 1 \|
+| |
+| | [Arguments] | ${dut} | ${pf}
+| |
+| | ${_rdma}= | VPP Create Rdma Interface
+| | ... | ${nodes['${dut}']} | ${${dut}_vf${pf}}[0]
+| | ... | num_rx_queues=${rxq_count_int}
| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size}
-| | ${dut_new_if2_mac}= | Get Interface MAC | ${nodes['${dut}']}
-| | ... | ${dut_new_if2}
-| | Set Test Variable | ${${dut_str}_if1} | ${dut_new_if1}
-| | Set Test Variable | ${${dut_str}_if2} | ${dut_new_if2}
-| | Set Test Variable | ${${dut_str}_if1_mac} | ${dut_new_if1_mac}
-| | Set Test Variable | ${${dut_str}_if2_mac} | ${dut_new_if2_mac}
+| | Set List Value | ${${dut}_vf${pf}} | 0 | ${_rdma}
-| Initialize layer rdma-core on node
+| Initialize layer interface
| | [Documentation]
-| | ... | Initialize rdma-core (MLX) interfaces on DUT.
+| | ... | Physical interfaces variables to be created on all DUTs.
+| |
+| | ... | *Arguments:*
+| | ... | - count - Number of untagged interfaces variables. Type: integer
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Initialize layer interface \| 1 \|
+| |
+| | [Arguments] | ${count}=${1}
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Initialize layer interface on node | ${dut} | count=${count}
+| | END
+
+| Initialize layer interface on node
+| | [Documentation]
+| | ... | Physical interfaces variables to be created on all DUTs.
| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
+| | ... | - count - Number of baseline interface variables. Type: integer
| |
| | ... | *Example:*
| |
-| | ... | \| Initialize layer rdma-core on node \| DUT1 \|
+| | ... | \| Initialize layer interface on node \| DUT1 \| 1 \|
| |
-| | [Arguments] | ${dut}
+| | [Arguments] | ${dut} | ${count}=${1}
| |
-| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | ${if1_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if1}
-| | ${if2_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if2}
-| | Set Test Variable | ${${dut_str}_vlan1} | ${if1_vlan}
-| | Set Test Variable | ${${dut_str}_vlan2} | ${if2_vlan}
-| | ${dut_new_if1}= | VPP Create Rdma Interface | ${nodes['${dut}']}
-| | ... | ${${dut}_if1} | num_rx_queues=${rxq_count_int}
-| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size}
-| | ${dut_new_if1_mac}= | Get Interface MAC | ${nodes['${dut}']}
-| | ... | ${dut_new_if1}
-| | ${dut_new_if2}= | VPP Create Rdma Interface | ${nodes['${dut}']}
-| | ... | ${${dut}_if2} | num_rx_queues=${rxq_count_int}
-| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size}
-| | ${dut_new_if2_mac}= | Get Interface MAC | ${nodes['${dut}']}
-| | ... | ${dut_new_if2}
-| | Set Test Variable | ${${dut_str}_if1} | ${dut_new_if1}
-| | Set Test Variable | ${${dut_str}_if2} | ${dut_new_if2}
-| | Set Test Variable | ${${dut_str}_if1_mac} | ${dut_new_if1_mac}
-| | Set Test Variable | ${${dut_str}_if2_mac} | ${dut_new_if2_mac}
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | Initialize layer interface on node on PF | ${dut} | ${pf} | count=${count}
+| | END
+
+| Initialize layer interface on node on PF
+| | [Documentation]
+| | ... | Baseline interfaces variables to be created.
+| |
+| | ... | *Arguments:*
+| | ... | - dut - DUT node. Type: string
+| | ... | - pf - NIC physical function (physical port). Type: integer
+| | ... | - count - Number of baseline interface variables. Type: integer
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Initialize layer interface on node on PF \| DUT1 \| 1 \| 1 \|
+| |
+| | [Arguments] | ${dut} | ${pf} | ${count}=${1}
+| |
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| | | Set Test Variable
+| | | ... | ${${dut}_${int}${pf}_${id}} | ${${dut}_${int}${pf}}
+| | END
+
+| Initialize layer bonding
+| | [Documentation]
+| | ... | Bonded interfaces and variables to be created on all DUT's interfaces.
+| |
+| | ... | *Arguments:*
+| | ... | - bond_mode - Link bonding mode. Type: string
+| | ... | - lb_mode - Load balance mode. Type: string
+| | ... | - count - Number of bond interface variables. Type: integer
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Initialize layer bonding \| xor \| l34 \| 1 \|
+| |
+| | [Arguments] | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1}
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Initialize layer bonding on node
+| | | ... | ${dut} | bond_mode=${bond_mode} | lb_mode=${lb_mode}
+| | | ... | count=${count}
+| | END
+| | Set Test Variable | ${int} | bond
| Initialize layer bonding on node
| | [Documentation]
@@ -330,101 +380,80 @@
| |
| | [Arguments] | ${dut} | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1}
| |
-| | ${dut_str}= | Convert To Lowercase | ${dut}
| | ${if_index}= | VPP Create Bond Interface
| | ... | ${nodes['${dut}']} | ${bond_mode} | load_balance=${lb_mode}
| | ... | mac=00:00:00:01:01:01
| | Set Interface State | ${nodes['${dut}']} | ${if_index} | up
| | VPP Enslave Physical Interface
-| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_1} | ${if_index}
+| | ... | ${nodes['${dut}']} | ${${dut}_${int}1_1} | ${if_index}
| | VPP Enslave Physical Interface
-| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_2} | ${if_index}
+| | ... | ${nodes['${dut}']} | ${${dut}_${int}2_1} | ${if_index}
| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
-| | | Set Test Variable | ${${dut_str}_bond_${id}_1} | ${if_index}
-| | | Set Test Variable | ${${dut_str}_bond_${id}_2} | ${if_index}
+| | | Set Test Variable | ${${dut}_bond1_${id}} | ${if_index}
+| | | Set Test Variable | ${${dut}_bond2_${id}} | ${if_index}
| | END
-| Initialize layer bonding
+| Initialize layer dot1q
| | [Documentation]
-| | ... | Bonded interfaces and variables to be created on all DUT's interfaces.
+| | ... | Dot1q interfaces and variables to be created on all DUTs.
| |
| | ... | *Arguments:*
-| | ... | - bond_mode - Link bonding mode. Type: string
-| | ... | - lb_mode - Load balance mode. Type: string
-| | ... | - count - Number of bond interface variables. Type: integer
+| | ... | - count - Number of chains.
+| | ... | Type: integer
+| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
+| | ... | Type: boolean
+| | ... | - start - Id of first chain, allows adding chains during test.
+| | ... | Type: integer
| |
-| | ... | *Example:*
+| | ... | \| Initialize layer dot1q \| 1 \| True \| 1 \|
| |
-| | ... | \| Initialize layer bonding \| xor \| l34 \| 1 \|
-| |
-| | [Arguments] | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1}
+| | [Arguments] | ${count}=${1} | ${vlan_per_chain}=${True} | ${start}=${1}
| |
| | FOR | ${dut} | IN | @{duts}
-| | | Initialize layer bonding on node
-| | | ... | ${dut} | bond_mode=${bond_mode} | lb_mode=${lb_mode}
-| | | ... | count=${count}
+| | | Initialize layer dot1q on node
+| | | ... | ${dut} | count=${count} | vlan_per_chain=${vlan_per_chain}
+| | | ... | start=${start}
| | END
-| | Set Test Variable | ${prev_layer} | bond
+| | Set Test Variable | ${int} | dot1q
-| Initialize layer dot1q on node for chain
+| Initialize layer dot1q on node
| | [Documentation]
-| | ... | Optionally create tag popping subinterface per chain.
-| | ... | Return interface indices for dot1q layer interfaces,
-| | ... | or Nones if subinterfaces are not created.
+| | ... | Dot1q interfaces and variables to be created on all DUT's node.
| |
| | ... | *Arguments:*
-| | ... | - dut - DUT node. Type: string
-| | ... | - id - Positive index of the chain. Type: integer
+| | ... | - dut - DUT node.
+| | ... | Type: string
+| | ... | - count - Number of chains.
+| | ... | Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
| | ... | Type: boolean
+| | ... | - start - Id of first chain, allows adding chains during test.
+| | ... | Type: integer
| |
| | ... | *Example:*
| |
-| | ... | \| Initialize layer dot1q on node for chain \| DUT1 \| 1 \| True \|
+| | ... | \| Initialize layer dot1q on node \| DUT1 \| 1 \| True \| 1 \|
| |
-| | [Arguments] | ${dut} | ${id} | ${vlan_per_chain}=${True}
+| | [Arguments] | ${dut} | ${count}=${1} | ${vlan_per_chain}=${True}
+| | ... | ${start}=${1}
| |
-| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | Return From Keyword If | ${id} != ${1} and not ${vlan_per_chain}
-| | ... | ${NONE} | ${NONE}
-| | # TODO: Is it worth creating Get Variable Value If Not None keyword?
-| | ${default}= | Evaluate | ${100} + ${id} - ${1}
-| | ${if1_vlan}= | Get Variable Value | \${${dut_str}_vlan1}
-| | ${if1_vlan}= | Set Variable If | '${if1_vlan}' != '${NONE}'
-| | ... | ${if1_vlan} | ${default}
-| | ${default}= | Evaluate | ${200} + ${id} - ${1}
-| | ${if2_vlan}= | Get Variable Value | \${${dut_str}_vlan2}
-| | ${if2_vlan}= | Set Variable If | '${if2_vlan}' != '${NONE}'
-| | ... | ${if2_vlan} | ${default}
-| | ${if1_name} | ${if1_index}= | Create Vlan Subinterface
-| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1}
-| | ... | ${if1_vlan}
-| | ${if2_name} | ${if2_index}= | Create Vlan Subinterface
-| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2}
-| | ... | ${if2_vlan}
-| | Set Interface State | ${nodes['${dut}']} | ${if1_index} | up
-| | Set Interface State | ${nodes['${dut}']} | ${if2_index} | up
-| | Configure L2 tag rewrite method on interfaces
-| | ... | ${nodes['${dut}']} | ${if1_index} | TAG_REWRITE_METHOD=pop-1
-| | Configure L2 tag rewrite method on interfaces
-| | ... | ${nodes['${dut}']} | ${if2_index} | TAG_REWRITE_METHOD=pop-1
-| | Return From Keyword | ${if1_index} | ${if2_index}
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | Initialize layer dot1q on node on PF | ${dut} | pf=${pf} | count=${count}
+| | | ... | vlan_per_chain=${vlan_per_chain} | start=${start}
+| | END
-| Initialize layer dot1q on node
+| Initialize layer dot1q on node on PF
| | [Documentation]
| | ... | Dot1q interfaces and variables to be created on all DUT's node
| | ... | interfaces.
| |
-| | ... | TODO: Unify names for number of chains/pipelines/instances/interfaces.
-| | ... | Chose names and descriptions that makes sense for both
-| | ... | nf_density and older tests.
-| | ... | Note that with vlan_per_chain=False it is not a number of interfaces.
-| | ... | At least not number of real interfaces, just number of aliases.
-| | ... | This TODO applies also to all keywords with nf_chains argument.
-| |
| | ... | *Arguments:*
-| | ... | - dut - DUT node. Type: string
-| | ... | - count - Number of chains. Type: integer
+| | ... | - dut - DUT node.
+| | ... | Type: string
+| | ... | - pf - NIC physical function (physical port).
+| | ... | Type: integer
+| | ... | - count - Number of chains.
+| | ... | Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
| | ... | Type: boolean
| | ... | - start - Id of first chain, allows adding chains during test.
@@ -432,44 +461,76 @@
| |
| | ... | *Example:*
| |
-| | ... | \| Initialize layer dot1q on node \| DUT1 \| 3 \| True \| 2 \|
+| | ... | \| Initialize layer dot1q on node on PF \| DUT1 \| 3 \| True \| 2 \|
| |
-| | [Arguments] | ${dut} | ${count}=${1} | ${vlan_per_chain}=${True}
-| | ... | ${start}=${1}
+| | [Arguments] | ${dut} | ${pf}=${1} | ${count}=${1}
+| | ... | ${vlan_per_chain}=${True} | ${start}=${1}
| |
-| | ${dut_str}= | Convert To Lowercase | ${dut}
| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1
-| | | ${if1_index} | ${if2_index}= | Initialize layer dot1q on node for chain
-| | | ... | dut=${dut} | id=${id} | vlan_per_chain=${vlan_per_chain}
+| | | ${_dot1q} | Initialize layer dot1q on node on PF for chain
+| | | ... | dut=${dut} | pf=${pf} | id=${id} | vlan_per_chain=${vlan_per_chain}
| | | # First id results in non-None indices, after that _1_ are defined.
-| | | ${if1_index}= | Set Variable If | '${if1_index}' == '${NONE}'
-| | | ... | ${${dut_str}_dot1q_1_1} | ${if1_index}
-| | | ${if2_index}= | Set Variable If | '${if2_index}' == '${NONE}'
-| | | ... | ${${dut_str}_dot1q_1_2} | ${if2_index}
-| | | Set Test Variable | ${${dut_str}_dot1q_${id}_1} | ${if1_index}
-| | | Set Test Variable | ${${dut_str}_dot1q_${id}_2} | ${if2_index}
+| | | ${_dot1q}= | Set Variable If | '${_dot1q}' == '${NONE}'
+| | | ... | ${${dut}_dot1q${pf}_1} | ${_dot1q}
+| | | ${_dot1q}= | Create List | ${_dot1q}
+| | | Set Test Variable | ${${dut}_dot1q${pf}_${id}} | ${_dot1q}
| | END
-| Initialize layer dot1q
+| Initialize layer dot1q on node on PF for chain
| | [Documentation]
-| | ... | Dot1q interfaces and variables to be created on all DUT's interfaces.
+| | ... | Optionally create tag popping subinterface per chain.
+| | ... | Return interface indices for dot1q layer interfaces,
+| | ... | or Nones if subinterfaces are not created.
| |
| | ... | *Arguments:*
-| | ... | - count - Number of chains. Type: integer
+| | ... | - dut - DUT node.
+| | ... | Type: string
+| | ... | - pf - NIC physical function (physical port).
+| | ... | Type: integer
+| | ... | - id - Positive index of the chain.
+| | ... | Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
| | ... | Type: boolean
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Initialize layer dot1q on node on PF for chain \| DUT1 \
+| | ... | \| 1 \| 1 \| True \|
+| |
+| | [Arguments] | ${dut} | ${pf} | ${id} | ${vlan_per_chain}=${True}
+| |
+| | Return From Keyword If | ${id} != ${1} and not ${vlan_per_chain}
+| | ... | ${NONE} | ${NONE}
+| | ${_default}= | Evaluate | ${pf} * ${100} + ${id} - ${1}
+| | ${_vlan}= | Get Variable Value | \${${dut}_pf${pf}_vlan}
+| | ${_vlan}= | Set Variable If | '${_vlan}[0]' != '${NONE}'
+| | ... | ${_vlan}[0] | ${_default}
+| | ${_name} | ${_index}= | Create Vlan Subinterface
+| | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_${id}}[0] | ${_vlan}
+| | Set Interface State | ${nodes['${dut}']} | ${_index} | up
+| | Configure L2 tag rewrite method on interfaces
+| | ... | ${nodes['${dut}']} | ${_index} | TAG_REWRITE_METHOD=pop-1
+| | Return From Keyword | ${_index}
+
+| Initialize layer ip4vxlan
+| | [Documentation]
+| | ... | VXLAN interfaces and variables to be created on all DUT's interfaces.
+| |
+| | ... | *Arguments:*
+| | ... | - count - Number of vxlan interfaces.
+| | ... | Type: integer
| | ... | - start - Id of first chain, allows adding chains during test.
| | ... | Type: integer
| |
-| | ... | \| Initialize layer dot1q \| 3 \| True \| 2 \|
+| | ... | \| Initialize layer ip4vxlan \| 3 \| 2 \|
| |
-| | [Arguments] | ${count}=${1} | ${vlan_per_chain}=${True} | ${start}=${1}
+| | [Arguments] | ${count}=${1} | ${start}=${1}
| |
| | FOR | ${dut} | IN | @{duts}
-| | | Initialize layer dot1q on node | ${dut} | count=${count}
-| | | ... | vlan_per_chain=${vlan_per_chain} | start=${start}
+| | | Initialize layer ip4vxlan on node | ${dut} | count=${count}
+| | | ... | start=${start}
| | END
-| | Set Test Variable | ${prev_layer} | dot1q
+| | Set Test Variable | ${int} | ip4vxlan
| Initialize layer ip4vxlan on node
| | [Documentation]
@@ -479,8 +540,10 @@
| | ... | towards TG. VXLAN sub-interfaces has same IPv4 address as interfaces.
| |
| | ... | *Arguments:*
-| | ... | - dut - DUT node. Type: string
-| | ... | - count - Number of vxlan interfaces. Type: integer
+| | ... | - dut - DUT node.
+| | ... | Type: string
+| | ... | - count - Number of vxlan interfaces.
+| | ... | Type: integer
| | ... | - start - Id of first chain, allows adding chains during test.
| | ... | Type: integer
| |
@@ -490,75 +553,75 @@
| |
| | [Arguments] | ${dut} | ${count}=${1} | ${start}=${1}
| |
-| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address
-| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_1}
-| | ... | 172.16.0.1 | 24
-| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address
-| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_2}
-| | ... | 172.26.0.1 | 24
-| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1
-| | | ${subnet}= | Evaluate | ${id} - 1
-| | | ${vni}= | Evaluate | ${id} - 1
-| | | ${ip4vxlan_1}= | Create VXLAN interface
-| | | ... | ${nodes['${dut}']} | ${vni} | 172.16.0.1 | 172.17.${subnet}.2
-| | | ${ip4vxlan_2}= | Create VXLAN interface
-| | | ... | ${nodes['${dut}']} | ${vni} | 172.26.0.1 | 172.27.${subnet}.2
-| | | ${prev_mac}= | Set Variable If | '${dut}' == 'DUT1'
-| | | ... | ${tg_if1_mac} | ${dut1_if2_mac}
-| | | ${next_mac}= | Set Variable If | '${dut}' == 'DUT1' and ${duts_count} == 2
-| | | ... | ${dut2_if1_mac} | ${tg_if2_mac}
-| | | VPP Add IP Neighbor
-| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1}
-| | | ... | 172.16.${subnet}.2 | ${prev_mac}
-| | | VPP Add IP Neighbor
-| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2}
-| | | ... | 172.26.${subnet}.2 | ${next_mac}
-| | | VPP Route Add
-| | | ... | ${nodes['${dut}']} | 172.17.${subnet}.0 | 24
-| | | ... | gateway=172.16.${subnet}.2
-| | | ... | interface=${${dut_str}_${prev_layer}_${id}_1}
-| | | VPP Route Add
-| | | ... | ${nodes['${dut}']} | 172.27.${subnet}.0 | 24
-| | | ... | gateway=172.26.${subnet}.2
-| | | ... | interface=${${dut_str}_${prev_layer}_${id}_2}
-| | | Set VXLAN Bypass
-| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1}
-| | | Set VXLAN Bypass
-| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2}
-| | | Set Test Variable
-| | | ... | ${${dut_str}_ip4vxlan_${id}_1} | ${ip4vxlan_1}
-| | | Set Test Variable
-| | | ... | ${${dut_str}_ip4vxlan_${id}_2} | ${ip4vxlan_2}
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | Initialize layer ip4vxlan on node on PF | ${dut} | pf=${pf}
+| | | ... | count=${count} | start=${start}
| | END
-| Initialize layer ip4vxlan
+| Initialize layer ip4vxlan on node on PF
| | [Documentation]
-| | ... | VXLAN interfaces and variables to be created on all DUT's interfaces.
+| | ... | Setup VXLANoIPv4 between TG and DUTs and DUT to DUT by connecting
+| | ... | physical and vxlan interfaces on each DUT. All interfaces are brought
+| | ... | up. IPv4 addresses with prefix /24 are configured on interfaces
+| | ... | towards TG. VXLAN sub-interfaces has same IPv4 address as interfaces.
| |
| | ... | *Arguments:*
-| | ... | - count - Number of vxlan interfaces. Type: integer
+| | ... | - dut - DUT node.
+| | ... | Type: string
+| | ... | - pf - NIC physical function (physical port).
+| | ... | Type: integer
+| | ... | - count - Number of vxlan interfaces.
+| | ... | Type: integer
| | ... | - start - Id of first chain, allows adding chains during test.
| | ... | Type: integer
| |
-| | ... | \| Initialize layer ip4vxlan \| 3 \| 2 \|
+| | ... | *Example:*
| |
-| | [Arguments] | ${count}=${1} | ${start}=${1}
+| | ... | \| Initialize layer ip4vxlan on node on PF \| DUT1 \| 3 \| 2 \|
| |
-| | FOR | ${dut} | IN | @{duts}
-| | | Initialize layer ip4vxlan on node | ${dut} | count=${count}
-| | ... | start=${start}
+| | [Arguments] | ${dut} | ${pf}=${1} | ${count}=${1} | ${start}=${1}
+| |
+| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address
+| | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_1}[0]
+| | ... | 172.${pf}6.0.1 | 24
+| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1
+| | | ${_subnet}= | Evaluate | ${id} - 1
+| | | ${_vni}= | Evaluate | ${id} - 1
+| | | ${_ip4vxlan}= | Create VXLAN interface
+| | | ... | ${nodes['${dut}']} | ${_vni}
+| | | ... | 172.${pf}6.0.1 | 172.${pf}7.${_subnet}.2
+| | | ${_prev_mac}= | Set Variable If | '${dut}' == 'DUT1'
+| | | ... | ${tg_if1_mac} | ${dut1_if2_mac}
+| | | ${_next_mac}= | Set Variable If | '${dut}' == 'DUT1' and ${duts_count} == 2
+| | | ... | ${dut2_if1_mac} | ${tg_if2_mac}
+| | | ${_even}= | Evaluate | ${pf} % 2
+| | | ${_mac}= | Set Variable If | ${_even}
+| | | ... | ${_prev_mac} | ${_next_mac}
+| | | VPP Add IP Neighbor
+| | | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_${id}}[0]
+| | | ... | 172.${pf}6.${_subnet}.2 | ${_mac}
+| | | VPP Route Add
+| | | ... | ${nodes['${dut}']} | 172.${pf}7.${_subnet}.0 | 24
+| | | ... | gateway=172.${pf}6.${_subnet}.2
+| | | ... | interface=${${dut}_${int}${pf}_${id}}[0]
+| | | Set VXLAN Bypass
+| | | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_${id}}[0]
+| | | ${_ip4vxlan}= | Create List | ${_ip4vxlan}
+| | | Set Test Variable
+| | | ... | ${${dut}_ip4vxlan${pf}_${id}} | ${_ip4vxlan}
| | END
-| | Set Test Variable | ${prev_layer} | ip4vxlan
| Configure vhost interfaces
| | [Documentation]
| | ... | Create two Vhost-User interfaces on defined VPP node.
| |
| | ... | *Arguments:*
-| | ... | - ${dut_node} - DUT node. Type: dictionary
-| | ... | - ${sock1} - Socket path for first Vhost-User interface. Type: string
-| | ... | - ${sock2} - Socket path for second Vhost-User interface. Type: string
+| | ... | - ${dut_node} - DUT node.
+| | ... | Type: dictionary
+| | ... | - ${sock1} - Socket path for first Vhost-User interface.
+| | ... | Type: string
+| | ... | - ${sock2} - Socket path for second Vhost-User interface.
+| | ... | Type: string
| | ... | - ${vhost_if1} - Name of the first Vhost-User interface (Optional).
| | ... | Type: string
| | ... | - ${vhost_if2} - Name of the second Vhost-User interface (Optional).
@@ -576,9 +639,6 @@
| |
| | ... | \| Configure vhost interfaces \
| | ... | \| ${nodes['DUT1']} \| /tmp/sock1 \| /tmp/sock2 \|
-| | ... | \| Configure vhost interfaces \
-| | ... | \| ${nodes['DUT2']} \| /tmp/sock1 \| /tmp/sock2 \| dut2_vhost_if1 \
-| | ... | \| dut2_vhost_if2 \|
| |
| | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vhost_if1}=vhost_if1
| | ... | ${vhost_if2}=vhost_if2 | ${is_server}=${False}
@@ -600,3 +660,15 @@
| | Set Test Variable | ${${vhost_if2}} | ${vhost_2}
| | Set Test Variable | ${${vhost_if1}_mac} | ${vhost_1_mac}
| | Set Test Variable | ${${vhost_if2}_mac} | ${vhost_2_mac}
+
+| Get Vhost dump
+| | [Documentation] | Get vhost-user dump.
+| |
+| | ... | *Arguments:*
+| | ... | - dut - DUT node data.
+| | ... | Type: dictionary
+| |
+| | [Arguments] | ${dut}
+| |
+| | ${vhost_dump}= | Vhost User Dump | ${dut}
+| | Return From Keyword | ${vhost_dump}
diff --git a/resources/libraries/robot/shared/suite_setup.robot b/resources/libraries/robot/shared/suite_setup.robot
index 7cfb38bcf7..5f8c3c5b2f 100644
--- a/resources/libraries/robot/shared/suite_setup.robot
+++ b/resources/libraries/robot/shared/suite_setup.robot
@@ -26,27 +26,40 @@
| Documentation | Suite setup keywords.
*** Keywords ***
-| Setup suite single link
+| Setup suite topology interfaces
| | [Documentation]
-| | ... | Common suite setup for single link tests.
+| | ... | Common suite setup for one to multiple link tests.
| | ... |
-| | ... | Compute path for testing on two given nodes in circular topology
+| | ... | Compute path for testing on given topology nodes in circular topology
| | ... | based on interface model provided as an argument and set
| | ... | corresponding suite variables.
| |
-| | ... | _NOTE:_ This KW sets following suite variables:
-| | ... | - duts - List of DUT nodes
+| | ... | _NOTE:_ This KW sets various suite variables based on filtered
+| | ... | topology. All variables are set with also backward compatibility
+| | ... | format dut{m}_if{n} (where the value type is string).
+| | ... | List type allows to access physical interfaces in same way as
+| | ... | virtual interface (e.g. SRIOV). This keeps abstracted compatibility
+| | ... | between existing L1 and L2 KWs library and underlaying physical
+| | ... | topology.
+| |
+| | ... | - duts - List of DUT nodes (name as seen in topology file).
| | ... | - duts_count - Number of DUT nodes.
-| | ... | - tg - TG node
-| | ... | - tg_if1 - 1st TG interface towards DUT.
-| | ... | - tg_if1_mac - 1st TG interface MAC address.
-| | ... | - tg_if2 - 2nd TG interface towards DUT.
-| | ... | - tg_if2_mac - 2nd TG interface MAC address.
-| | ... | - dut{n} - DUTx node
-| | ... | - dut{n}_if1 - 1st DUT interface.
-| | ... | - dut{n}_if1_mac - 1st DUT interface MAC address.
-| | ... | - dut{n}_if2 - 2nd DUT interface.
-| | ... | - dut{n}_if2_mac - 2nd DUT interface MAC address.
+| | ... | - int - Interfacy type (layer).
+| | ... | Type: string
+| | ... | - dut{n} - DUTx node.
+| | ... | Type: dictionary
+| | ... | - dut{m}_pf{n} - Nth interface of Mth DUT.
+| | ... | Type: list
+| | ... | - dut{m}_pf{n}_mac - Nth interface of Mth DUT - MAC address.
+| | ... | Type: list
+| | ... | - dut{m}_pf{n}_vlan - Nth interface of Mth DUT - VLAN id.
+| | ... | Type: list
+| | ... | - dut{m}_pf{n}_pci - Nth interface of Mth DUT - PCI address.
+| | ... | Type: list
+| | ... | - dut{m}_pf{n}_ip4_addr - Nth interface of Mth DUT - IPv4 address.
+| | ... | Type: list
+| | ... | - dut{m}_pf{n}_ip4_prefix - Nth interface of Mth DUT - IPv4 prefix.
+| | ... | Type: list
| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional setup action. Type: list
@@ -54,37 +67,13 @@
| | [Arguments] | @{actions}
| |
| | ${nic_model_list}= | Create list | ${nic_name}
-| | Append Node | ${nodes['TG']}
-| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | FOR | ${dut} | IN | @{duts}
-| | | Append Node | ${nodes['${dut}']} | filter_list=${nic_model_list}
-| | END
-| | Append Node | ${nodes['TG']}
-| | Compute Path | always_same_link=${FALSE}
-| | ${tg_if1} | ${tg}= | Next Interface
-| | FOR | ${dut} | IN | @{duts}
-| | | ${dutx_if1} | ${dutx}= | Next Interface
-| | | ${dutx_if2} | ${dutx}= | Next Interface
-| | | ${dutx_if1_mac}= | Get Interface MAC | ${dutx} | ${dutx_if1}
-| | | ${dutx_if2_mac}= | Get Interface MAC | ${dutx} | ${dutx_if2}
-| | | ${dut_str}= | Convert To Lowercase | ${dut}
-| | | Set Suite Variable | ${${dut_str}} | ${dutx}
-| | | Set Suite Variable | ${${dut_str}_if1} | ${dutx_if1}
-| | | Set Suite Variable | ${${dut_str}_if2} | ${dutx_if2}
-| | | Set Suite Variable | ${${dut_str}_if1_mac} | ${dutx_if1_mac}
-| | | Set Suite Variable | ${${dut_str}_if2_mac} | ${dutx_if2_mac}
+| | &{info}= | Compute Circular Topology
+| | ... | ${nodes} | filter_list=${nic_model_list} | nic_pfs=${nic_pfs}
+| | ${variables}= | Get Dictionary Keys | ${info}
+| | FOR | ${variable} | IN | @{variables}
+| | | ${value}= | Get From Dictionary | ${info} | ${variable}
+| | | Set Suite Variable | ${${variable}} | ${value}
| | END
-| | ${tg_if2} | ${tg}= | Next Interface
-| | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
-| | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
-| | ${duts_count}= | Get Length | ${duts}
-| | Set Suite Variable | ${duts}
-| | Set Suite Variable | ${duts_count}
-| | Set Suite Variable | ${tg}
-| | Set Suite Variable | ${tg_if1}
-| | Set Suite Variable | ${tg_if1_mac}
-| | Set Suite Variable | ${tg_if2}
-| | Set Suite Variable | ${tg_if2_mac}
| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite setup Action For ${action}
| | END
@@ -147,152 +136,84 @@
| | | Run Keyword | Additional Suite setup Action For ${action}
| | END
-| Setup suite double link
-| | [Documentation]
-| | ... | Common suite setup for double link tests.
-| | ... |
-| | ... | Compute path for testing on three given nodes in circular topology
-| | ... | with double link between DUTs based on interface model provided as an
-| | ... | argument and set corresponding suite variables.
-| |
-| | ... | *Arguments:*
-| | ... | - ${actions} - Additional setup action. Type: list
-| |
-| | ... | _NOTE:_ This KW sets following suite variables:
-| | ... | - duts - List of DUT nodes
-| | ... | - duts_count - Number of DUT nodes.
-| | ... | - tg - TG node
-| | ... | - tg_if1 - 1st TG interface towards DUT.
-| | ... | - tg_if1 - 1st TG interface MAC address.
-| | ... | - tg_if2 - 2nd TG interface towards DUT.
-| | ... | - tg_if2 - 2nd TG interface MAC address.
-| | ... | - dut1 - DUT1 node
-| | ... | - dut1_if1 - DUT1 interface towards TG.
-| | ... | - dut1_if2_1 - DUT1 interface 1 towards DUT2.
-| | ... | - dut1_if2_2 - DUT1 interface 2 towards DUT2.
-| | ... | - dut2 - DUT2 node
-| | ... | - dut2_if1_1 - DUT2 interface 1 towards DUT1.
-| | ... | - dut2_if1_2 - DUT2 interface 2 towards DUT1.
-| | ... | - dut2_if2 - DUT2 interface towards TG.
-| |
-| | [Arguments] | @{actions}
-| |
-| | ${nic_model_list}= | Create list | ${nic_name}
-| | # Compute path TG - DUT1 with single link in between
-| | Append Node | ${nodes['TG']}
-| | Append Node | ${nodes['DUT1']} | filter_list=${nic_model_list}
-| | Append Node | ${nodes['TG']}
-| | Compute Path
-| | ${tg_if1} | ${tg}= | Next Interface
-| | ${dut1_if1} | ${dut1}= | Next Interface
-| | # Compute path TG - DUT2 with single link in between
-| | Clear Path
-| | Append Node | ${nodes['TG']}
-| | Append Node | ${nodes['DUT2']} | filter_list=${nic_model_list}
-| | Append Node | ${nodes['TG']}
-| | Compute Path
-| | ${tg_if2} | ${tg}= | Next Interface
-| | ${dut2_if2} | ${dut2}= | Next Interface
-| | # Compute path DUT1 - DUT2 with double link in between
-| | Clear Path
-| | Append Node | ${nodes['DUT1']} | filter_list=${nic_model_list}
-| | Append Node | ${nodes['DUT2']} | filter_list=${nic_model_list}
-| | Append Node | ${nodes['DUT1']} | filter_list=${nic_model_list}
-| | Compute Path | always_same_link=${FALSE}
-| | ${dut1_if2_1} | ${dut1}= | First Interface
-| | ${dut1_if2_2} | ${dut1}= | Last Interface
-| | ${dut2_if1_1} | ${dut2}= | First Ingress Interface
-| | ${dut2_if1_2} | ${dut2}= | Last Egress Interface
-| | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
-| | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
-| | ${duts_count}= | Set Variable | 2
-| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | # Set suite variables
-| | Set Suite Variable | ${duts}
-| | Set Suite Variable | ${duts_count}
-| | Set Suite Variable | ${tg}
-| | Set Suite Variable | ${tg_if1}
-| | Set Suite Variable | ${tg_if1_mac}
-| | Set Suite Variable | ${tg_if2}
-| | Set Suite Variable | ${tg_if2_mac}
-| | Set Suite Variable | ${dut1}
-| | Set Suite Variable | ${dut1_if1}
-| | Set Suite Variable | ${dut1_if2_1}
-| | Set Suite Variable | ${dut1_if2_2}
-| | Set Suite Variable | ${dut2}
-| | Set Suite Variable | ${dut2_if1_1}
-| | Set Suite Variable | ${dut2_if1_2}
-| | Set Suite Variable | ${dut2_if2}
-| | FOR | ${action} | IN | @{actions}
-| | | Run Keyword | Additional Suite setup Action For ${action}
-| | END
-
| Additional Suite Setup Action For scapy
| | [Documentation]
| | ... | Additional Setup for suites which uses scapy as Traffic generator.
| |
-| | Set Interface State | ${tg} | ${tg_if1} | up
-| | Set Interface State | ${tg} | ${tg_if2} | up
+| | FOR | ${dut} | IN | @{duts}
+| | | Set Suite Variable | ${${dut}_vf1} | ${${dut}_${int}1}
+| | | Set Suite Variable | ${${dut}_vf2} | ${${dut}_${int}2}
+| | END
+| | Set Interface State | ${tg} | ${TG_pf1}[0] | up
+| | Set Interface State | ${tg} | ${TG_pf2}[0] | up
| Additional Suite Setup Action For dpdk
| | [Documentation]
| | ... | Additional Setup for suites which uses dpdk.
| |
| | FOR | ${dut} | IN | @{duts}
-| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | Initialize DPDK Environment | ${nodes['${dut}']}
-| | | ... | ${${dut_str}_if1} | ${${dut_str}_if2}
+| | | ... | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0]
| | END
-| Additional Suite Setup Action For performance
+| Additional Suite Setup Action For performance vf
| | [Documentation]
-| | ... | Additional Setup for suites which uses performance measurement.
-| | ...
-| | Run Keyword If | ${duts_count} == 1
-| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
-| | ... | ${dut1} | ${dut1_if1} | ${dut1} | ${dut1_if2} | ${osi_layer}
-| | Run Keyword If | ${duts_count} == 2
-| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
-| | ... | ${dut1} | ${dut1_if1} | ${dut2} | ${dut2_if2} | ${osi_layer}
-
-| Additional Suite Setup Action For performance_rdma
-| | [Documentation]
-| | ... | Additional Setup for suites which uses performance measurement with
-| | ... | RDMA-core driver.
-| | ...
-# TODO: Add functionality for tests that need some.
-| | Additional Suite Setup Action For performance
-
-| Additional Suite Setup Action For performance_avf
-| | [Documentation]
-| | ... | Additional Setup for suites which uses performance measurement over
-| | ... | SRIOV AVF.
+| | ... | Additional Setup for suites which uses performance measurement for
+| | ... | single DUT (inner loop).
| |
-| | FOR | ${dut} | IN | @{duts}
-| | | ${if1_avf_arr}= | Init AVF interface | ${nodes['${dut}']} | ${${dut}_if1}
-| | | ... | numvfs=${1} | osi_layer=${osi_layer}
-| | | ${if2_avf_arr}= | Init AVF interface | ${nodes['${dut}']} | ${${dut}_if2}
-| | | ... | numvfs=${1} | osi_layer=${osi_layer}
-| | # Currently only one AVF is supported.
-| | | Set Suite Variable | ${${dut}_if1_vf0} | ${if1_avf_arr[0]}
-| | | Set Suite Variable | ${${dut}_if2_vf0} | ${if2_avf_arr[0]}
+| | ... | *Arguments:*
+| | ... | - dut - DUT node. Type: string
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Additional Suite Setup Action For performance_dut \| DUT1 \|
+| |
+| | [Arguments] | ${dut}
+| |
+| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
+| | | ${_vf}=
+| | | ... | Run Keyword | Init ${nic_driver} interface
+| | | ... | ${nodes['${dut}']} | ${${dut}_pf${pf}}[0] | numvfs=${nic_vfs}
+| | | ... | osi_layer=${osi_layer}
+| | | ${_mac}=
+| | | ... | Create List | ${EMPTY}
+| | | ${_ip4_addr}=
+| | | ... | Create List | ${EMPTY}
+| | | ${_ip4_prefix}=
+| | | ... | Create List | ${EMPTY}
+| | | ${_pci}=
+| | | ... | Create List | ${EMPTY}
+| | | ${_vlan}=
+| | | ... | Create List | ${EMPTY}
+| | | Set Suite Variable
+| | | ... | ${${dut}_prevf${pf}} | ${_vf}
+| | | Set Suite Variable
+| | | ... | ${${dut}_prevf${pf}_ip4_addr} | ${_ip4_addr}
+| | | Set Suite Variable
+| | | ... | ${${dut}_prevf${pf}_ip4_prefix} | ${_ip4_prefix}
+| | | Set Suite Variable
+| | | ... | ${${dut}_prevf${pf}_mac} | ${_mac}
+| | | Set Suite Variable
+| | | ... | ${${dut}_prevf${pf}_pci} | ${_pci}
+| | | Set Suite Variable
+| | | ... | ${${dut}_prevf${pf}_vlan} | ${_vlan}
| | END
-| | Run Keyword If | ${duts_count} == 1
-| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
-| | ... | ${dut1} | ${dut1_if1_vf0} | ${dut1} | ${dut1_if2_vf0} | ${osi_layer}
-| | Run Keyword If | ${duts_count} == 2
-| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
-| | ... | ${dut1} | ${dut1_if1_vf0} | ${dut2} | ${dut2_if2_vf0} | ${osi_layer}
+| | Set Suite Variable
+| | ... | ${int} | prevf
-| Additional Suite Setup Action For avf
+| Additional Suite Setup Action For performance
| | [Documentation]
-| | ... | Additional Setup for suites which uses SRIOV AVF.
+| | ... | Additional Setup for suites which uses performance measurement.
| |
| | FOR | ${dut} | IN | @{duts}
-| | # Currently only one AVF is supported.
-| | | Set Suite Variable | ${${dut}_if1_vf0} | ${${dut}_if1}
-| | | Set Suite Variable | ${${dut}_if2_vf0} | ${${dut}_if2}
+| | | Run Keyword If | ${nic_vfs} > 0
+| | | ... | Additional Suite Setup Action For performance vf | ${dut}
| | END
+| | Initialize traffic generator
+| | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0]
+| | ... | ${dut1} | ${DUT1_${int}1}[0]
+| | ... | ${dut${duts_count}} | ${DUT${duts_count}_${int}2}[0]
+| | ... | ${osi_layer}
| Additional Suite Setup Action For ipsechw
| | [Documentation]
diff --git a/resources/libraries/robot/shared/suite_teardown.robot b/resources/libraries/robot/shared/suite_teardown.robot
index 362c7366e9..38683658d7 100644
--- a/resources/libraries/robot/shared/suite_teardown.robot
+++ b/resources/libraries/robot/shared/suite_teardown.robot
@@ -47,7 +47,7 @@
| |
| | FOR | ${dut} | IN | @{duts}
| | | Cleanup DPDK Environment
-| | | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${${dut}_if2}
+| | | ... | ${nodes['${dut}']} | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0]
| | END
| Additional Suite Tear Down Action For wrk
diff --git a/resources/libraries/robot/shared/test_setup.robot b/resources/libraries/robot/shared/test_setup.robot
index 5ebe048cd9..b5b9e57cf7 100644
--- a/resources/libraries/robot/shared/test_setup.robot
+++ b/resources/libraries/robot/shared/test_setup.robot
@@ -29,6 +29,7 @@
| | [Arguments] | @{actions}
| |
| | Reset PAPI History On All DUTs | ${nodes}
+| | ${int} = | Set Variable If | ${nic_vfs} > 0 | prevf | pf
| | Create base startup configuration of VPP on all DUTs
| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Test Setup Action For ${action}
diff --git a/resources/libraries/robot/shared/testing_path.robot b/resources/libraries/robot/shared/testing_path.robot
deleted file mode 100644
index 696e7397a5..0000000000
--- a/resources/libraries/robot/shared/testing_path.robot
+++ /dev/null
@@ -1,380 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.NodePath
-
-*** Keywords ***
-| Configure path in 2-node circular topology
-| | [Documentation] | Compute path for testing on two given nodes in circular
-| | ... | topology and set corresponding test case variables.
-| |
-| | ... | *Arguments:*
-| | ... | - ${tg_node} - TG node. Type: dictionary
-| | ... | - ${dut_node} - DUT node. Type: dictionary
-| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node
-| | ... | parameter in circular topology. Type: dictionary
-| |
-| | ... | *Return:*
-| | ... | - No value returned
-| |
-| | ... | _NOTE:_ This KW sets following test case variables:
-| | ... | - ${tg_node} - TG node.
-| | ... | - ${tg_to_dut_if1} - 1st TG interface towards DUT.
-| | ... | - ${tg_to_dut_if2} - 2nd TG interface towards DUT.
-| | ... | - ${dut_node} - DUT node.
-| | ... | - ${dut_to_tg_if1} - 1st DUT interface towards TG.
-| | ... | - ${dut_to_tg_if2} - 2nd DUT interface towards TG.
-| | ... | - ${tg_to_dut_if1_mac}
-| | ... | - ${tg_to_dut_if2_mac}
-| | ... | - ${dut_to_tg_if1_mac}
-| | ... | - ${dut_to_tg_if2_mac}
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Given Configure path in 2-node circular topology \| ${nodes['TG']} \
-| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
-| |
-| | [Arguments] | ${tg_node} | ${dut_node} | ${tg2_node}
-| | Should Be Equal | ${tg_node} | ${tg2_node}
-| | Append Nodes | ${tg_node} | ${dut_node} | ${tg_node}
-| | Compute Path | always_same_link=${FALSE}
-| | ${tg_to_dut_if1} | ${tmp}= | First Interface
-| | ${tg_to_dut_if2} | ${tmp}= | Last Interface
-| | ${dut_to_tg_if1} | ${tmp}= | First Ingress Interface
-| | ${dut_to_tg_if2} | ${tmp}= | Last Egress Interface
-| | ${tg_to_dut_if1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut_if1}
-| | ${tg_to_dut_if2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut_if2}
-| | ${dut_to_tg_if1_mac}= | Get interface mac | ${dut_node} | ${dut_to_tg_if1}
-| | ${dut_to_tg_if2_mac}= | Get interface mac | ${dut_node} | ${dut_to_tg_if2}
-| | Set Test Variable | ${tg_to_dut_if1}
-| | Set Test Variable | ${tg_to_dut_if2}
-| | Set Test Variable | ${dut_to_tg_if1}
-| | Set Test Variable | ${dut_to_tg_if2}
-| | Set Test Variable | ${tg_to_dut_if1_mac}
-| | Set Test Variable | ${tg_to_dut_if2_mac}
-| | Set Test Variable | ${dut_to_tg_if1_mac}
-| | Set Test Variable | ${dut_to_tg_if2_mac}
-| | Set Test Variable | ${tg_node}
-| | Set Test Variable | ${dut_node}
-
-| Set interfaces in 2-node circular topology up
-| | [Documentation] | Set UP state on interfaces in 2-node path on nodes and
-| | ... | wait for all interfaces are ready. Requires more than one link
-| | ... | between nodes.
-| |
-| | ... | *Arguments:*
-| | ... | - No arguments.
-| |
-| | ... | *Return:*
-| | ... | - No value returned.
-| |
-| | ... | _NOTE:_ This KW uses test variables sets in
-| | ... | "Configure path in 2-node circular topology" KW.
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Given Configure path in 2-node circular topology \| ${nodes['TG']} \
-| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
-| | ... | \| And Set interfaces in 2-node circular topology up \|
-| |
-| | Set Interface State | ${tg_node} | ${tg_to_dut_if1} | up
-| | Set Interface State | ${tg_node} | ${tg_to_dut_if2} | up
-| | Set Interface State | ${dut_node} | ${dut_to_tg_if1} | up
-| | Set Interface State | ${dut_node} | ${dut_to_tg_if2} | up
-| | Vpp Node Interfaces Ready Wait | ${dut_node}
-
-| Configure path in 3-node circular topology
-| | [Documentation] | Compute path for testing on three given nodes in circular
-| | ... | topology and set corresponding test case variables.
-| |
-| | ... | *Arguments:*
-| | ... | - ${tg_node} - TG node. Type: dictionary
-| | ... | - ${dut1_node} - DUT1 node. Type: dictionary
-| | ... | - ${dut2_node} - DUT2 node. Type: dictionary
-| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node
-| | ... | parameter in circular topology. Type: dictionary
-| |
-| | ... | *Return:*
-| | ... | - No value returned
-| | ... |
-| | ... | _NOTE:_ This KW sets following test case variables:
-| | ... | - ${tg_node} - TG node.
-| | ... | - ${tg_to_dut1} - TG interface towards DUT1.
-| | ... | - ${tg_to_dut2} - TG interface towards DUT2.
-| | ... | - ${dut1_node} - DUT1 node.
-| | ... | - ${dut1_to_tg} - DUT1 interface towards TG.
-| | ... | - ${dut1_to_dut2} - DUT1 interface towards DUT2.
-| | ... | - ${dut2_node} - DUT2 node.
-| | ... | - ${dut2_to_tg} - DUT2 interface towards TG.
-| | ... | - ${dut2_to_dut1} - DUT2 interface towards DUT1.
-| | ... | - ${tg_to_dut1_mac}
-| | ... | - ${tg_to_dut2_mac}
-| | ... | - ${dut1_to_tg_mac}
-| | ... | - ${dut1_to_dut2_mac}
-| | ... | - ${dut2_to_tg_mac}
-| | ... | - ${dut2_to_dut1_mac}
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Given Configure path in 3-node circular topology \| ${nodes['TG']} \
-| | ... | \| ${nodes['DUT1']} \| ${nodes['DUT2']} \| ${nodes['TG']} \|
-| |
-| | [Arguments] | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg2_node}
-| | Should Be Equal | ${tg_node} | ${tg2_node}
-| | Append Nodes | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg_node}
-| | Compute Path
-| | ${tg_to_dut1} | ${tmp}= | Next Interface
-| | ${dut1_to_tg} | ${tmp}= | Next Interface
-| | ${dut1_to_dut2} | ${tmp}= | Next Interface
-| | ${dut2_to_dut1} | ${tmp}= | Next Interface
-| | ${dut2_to_tg} | ${tmp}= | Next Interface
-| | ${tg_to_dut2} | ${tmp}= | Next Interface
-| | ${tg_to_dut1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut1}
-| | ${tg_to_dut2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut2}
-| | ${dut1_to_tg_mac}= | Get interface mac | ${dut1_node} | ${dut1_to_tg}
-| | ${dut1_to_dut2_mac}= | Get interface mac | ${dut1_node} | ${dut1_to_dut2}
-| | ${dut2_to_tg_mac}= | Get interface mac | ${dut2_node} | ${dut2_to_tg}
-| | ${dut2_to_dut1_mac}= | Get interface mac | ${dut2_node} | ${dut2_to_dut1}
-| | Set Test Variable | ${tg_to_dut1}
-| | Set Test Variable | ${dut1_to_tg}
-| | Set Test Variable | ${tg_to_dut2}
-| | Set Test Variable | ${dut2_to_tg}
-| | Set Test Variable | ${dut1_to_dut2}
-| | Set Test Variable | ${dut2_to_dut1}
-| | Set Test Variable | ${tg_to_dut1_mac}
-| | Set Test Variable | ${tg_to_dut2_mac}
-| | Set Test Variable | ${dut1_to_tg_mac}
-| | Set Test Variable | ${dut1_to_dut2_mac}
-| | Set Test Variable | ${dut2_to_tg_mac}
-| | Set Test Variable | ${dut2_to_dut1_mac}
-| | Set Test Variable | ${tg_node}
-| | Set Test Variable | ${dut1_node}
-| | Set Test Variable | ${dut2_node}
-
-| Set interfaces in 3-node circular topology up
-| | [Documentation]
-| | ... | Set UP state on interfaces in 3-node path on nodes and \
-| | ... | wait until all interfaces are ready.
-| |
-| | ... | *Arguments:*
-| | ... | - No arguments.
-| |
-| | ... | *Return:*
-| | ... | - No value returned.
-| |
-| | ... | _NOTE:_ This KW uses test variables sets in
-| | ... | "Configure path in 3-node circular topology" KW.
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Given Configure path in 3-node circular topology \| ${nodes['TG']} \
-| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
-| | ... | \| And Set interfaces in 3-node circular topology up \|
-| |
-| | Set Interface State | ${tg_node} | ${tg_to_dut1} | up
-| | Set Interface State | ${tg_node} | ${tg_to_dut2} | up
-| | Set Interface State | ${dut1_node} | ${dut1_to_tg} | up
-| | Set Interface State | ${dut1_node} | ${dut1_to_dut2} | up
-| | Set Interface State | ${dut2_node} | ${dut2_to_tg} | up
-| | Set Interface State | ${dut2_node} | ${dut2_to_dut1} | up
-| | Vpp Node Interfaces Ready Wait | ${dut1_node}
-| | Vpp Node Interfaces Ready Wait | ${dut2_node}
-
-| Configure path in double-link 3-node circular topology
-| | [Documentation]
-| | ... | Compute path for testing on three given nodes in circular \
-| | ... | topology with double link and set corresponding \
-| | ... | test case variables.
-| |
-| | ... | *Arguments:*
-| | ... | - ${tg_node} - TG node. Type: dictionary
-| | ... | - ${dut1_node} - DUT1 node. Type: dictionary
-| | ... | - ${dut2_node} - DUT2 node. Type: dictionary
-| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node
-| | ... | parameter in circular topology. Type: dictionary
-| |
-| | ... | *Return:*
-| | ... | - No value returned.
-| | ... |
-| | ... | _NOTE:_ This KW sets following test case variables:
-| | ... | - ${tg_node} - TG node.
-| | ... | - ${tg_to_dut1_if1} - TG interface towards DUT1 interface 1.
-| | ... | - ${tg_to_dut1_if2} - TG interface towards DUT1 interface 2.
-| | ... | - ${tg_to_dut1_mac_if1} - TG towards DUT1 MAC address interface 1.
-| | ... | - ${tg_to_dut1_mac_if2} - TG towards DUT1 MAC address interface 2.
-| | ... | - ${tg_to_dut2_if1} - TG interface towards DUT2 interface 1.
-| | ... | - ${tg_to_dut2_if2} - TG interface towards DUT2 interface 2.
-| | ... | - ${tg_to_dut2_mac_if1} - TG towards DUT2 MAC address interface 1.
-| | ... | - ${tg_to_dut2_mac_if2} - TG towards DUT2 MAC address interface 2.
-| | ... | - ${dut1_node} - DUT1 node.
-| | ... | - ${dut1_to_tg_if1} - DUT1 interface towards TG interface 1.
-| | ... | - ${dut1_to_tg_if2} - DUT1 interface towards TG interface 2.
-| | ... | - ${dut1_to_tg_mac_if1} - DUT1 towards TG MAC address interface 1.
-| | ... | - ${dut1_to_tg_mac_if2} - DUT1 towards TG MAC address interface 2.
-| | ... | - ${dut1_to_dut2_if1} - DUT1 interface towards DUT2 interface 1.
-| | ... | - ${dut1_to_dut2_if2} - DUT1 interface towards DUT2 interface 2.
-| | ... | - ${dut1_to_dut2_mac_if1} - DUT1 towards DUT2 MAC address interface 1.
-| | ... | - ${dut1_to_dut2_mac_if2} - DUT1 towards DUT2 MAC address interface 2.
-| | ... | - ${dut2_node} - DUT2 node.
-| | ... | - ${dut2_to_tg_if1} - DUT2 interface towards TG interface 1.
-| | ... | - ${dut2_to_tg_if2} - DUT2 interface towards TG interface 2.
-| | ... | - ${dut2_to_tg_mac_if1} - DUT2 towards TG MAC address interface 1.
-| | ... | - ${dut2_to_tg_mac_if2} - DUT2 towards TG MAC address interface 2.
-| | ... | - ${dut2_to_dut1_if1} - DUT2 interface towards DUT1 interface 1.
-| | ... | - ${dut2_to_dut1_if2} - DUT2 interface towards DUT1 interface 2.
-| | ... | - ${dut2_to_dut1_mac_if1} - DUT2 towards DUT1 MAC address interface 1.
-| | ... | - ${dut2_to_dut1_mac_if2} - DUT2 towards DUT1 MAC address interface 2.
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Configure path in double-link 3-node circular topology \| ${nodes['TG']} \
-| | ... | \| ${nodes['DUT1']} \| ${nodes['DUT2']} \| ${nodes['TG']} \|
-| |
-| | [Arguments] | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg2_node}
-| | Should Be Equal | ${tg_node} | ${tg2_node}
-| | # Compute path TG - DUT1 with two links in between
-| | Append Nodes | ${tg_node} | ${dut1_node} | ${tg_node}
-| | Compute Path | always_same_link=${FALSE}
-| | ${tg_to_dut1_if1} | ${tmp}= | First Interface
-| | ${tg_to_dut1_if2} | ${tmp}= | Last Interface
-| | ${dut1_to_tg_if1} | ${tmp}= | First Ingress Interface
-| | ${dut1_to_tg_if2} | ${tmp}= | Last Egress Interface
-| | # Compute path TG - DUT2 with two links in between
-| | Clear Path
-| | Append Nodes | ${tg_node} | ${dut2_node} | ${tg_node}
-| | Compute Path | always_same_link=${FALSE}
-| | ${tg_to_dut2_if1} | ${tmp}= | First Interface
-| | ${tg_to_dut2_if2} | ${tmp}= | Last Interface
-| | ${dut2_to_tg_if1} | ${tmp}= | First Ingress Interface
-| | ${dut2_to_tg_if2} | ${tmp}= | Last Egress Interface
-| | # Compute path DUT1 - DUT2 with one link in between
-| | Clear Path
-| | Append Nodes | ${dut1_node} | ${dut2_node} | ${dut1_node}
-| | Compute Path | always_same_link=${FALSE}
-| | ${dut1_to_dut2_if1} | ${tmp}= | First Interface
-| | ${dut1_to_dut2_if2} | ${tmp}= | Last Interface
-| | ${dut2_to_dut1_if1} | ${tmp}= | First Ingress Interface
-| | ${dut2_to_dut1_if2} | ${tmp}= | Last Egress Interface
-| | # Set test variables
-| | Set Test Variable | ${tg_to_dut1_if1}
-| | Set Test Variable | ${tg_to_dut1_if2}
-| | Set Test Variable | ${tg_to_dut2_if1}
-| | Set Test Variable | ${tg_to_dut2_if2}
-| | Set Test Variable | ${dut1_to_tg_if1}
-| | Set Test Variable | ${dut1_to_tg_if2}
-| | Set Test Variable | ${dut2_to_tg_if1}
-| | Set Test Variable | ${dut2_to_tg_if2}
-| | Set Test Variable | ${dut1_to_dut2_if1}
-| | Set Test Variable | ${dut1_to_dut2_if2}
-| | Set Test Variable | ${dut2_to_dut1_if1}
-| | Set Test Variable | ${dut2_to_dut1_if2}
-| | Set Test Variable | ${tg_node}
-| | Set Test Variable | ${dut1_node}
-| | Set Test Variable | ${dut2_node}
-| | # Set Mac Addresses
-| | ${tg_to_dut1_if1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut1_if1}
-| | ${tg_to_dut1_if2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut1_if2}
-| | ${tg_to_dut2_if1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut2_if1}
-| | ${tg_to_dut2_if2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut2_if2}
-| | ${dut1_to_tg_if1_mac}= | Get interface mac | ${dut1_node}
-| | ... | ${dut1_to_tg_if1}
-| | ${dut1_to_tg_if2_mac}= | Get interface mac | ${dut1_node}
-| | ... | ${dut1_to_tg_if2}
-| | ${dut1_to_dut2_if1_mac}= | Get interface mac | ${dut1_node}
-| | ... | ${dut1_to_dut2_if1}
-| | ${dut1_to_dut2_if2_mac}= | Get interface mac | ${dut1_node}
-| | ... | ${dut1_to_dut2_if2}
-| | ${dut2_to_tg_if1_mac}= | Get interface mac | ${dut2_node}
-| | ... | ${dut2_to_tg_if1}
-| | ${dut2_to_tg_if2_mac}= | Get interface mac | ${dut2_node}
-| | ... | ${dut2_to_tg_if2}
-| | ${dut2_to_dut1_if1_mac}= | Get interface mac | ${dut2_node}
-| | ... | ${dut2_to_dut1_if1}
-| | ${dut2_to_dut1_if2_mac}= | Get interface mac | ${dut2_node}
-| | ... | ${dut2_to_dut1_if2}
-| | Set Test Variable | ${tg_to_dut1_if1_mac}
-| | Set Test Variable | ${tg_to_dut1_if2_mac}
-| | Set Test Variable | ${tg_to_dut2_if1_mac}
-| | Set Test Variable | ${tg_to_dut2_if2_mac}
-| | Set Test Variable | ${dut1_to_tg_if1_mac}
-| | Set Test Variable | ${dut1_to_tg_if2_mac}
-| | Set Test Variable | ${dut1_to_dut2_if1_mac}
-| | Set Test Variable | ${dut1_to_dut2_if2_mac}
-| | Set Test Variable | ${dut2_to_tg_if1_mac}
-| | Set Test Variable | ${dut2_to_tg_if2_mac}
-| | Set Test Variable | ${dut2_to_dut1_if1_mac}
-| | Set Test Variable | ${dut2_to_dut1_if2_mac}
-
-| Set interfaces in double-link 3-node circular topology up
-| | [Documentation]
-| | ... | Set UP state on interfaces in 3-node double link path \
-| | ... | wait until all interfaces are ready.
-| |
-| | ... | *Arguments:*
-| | ... | - No arguments.
-| |
-| | ... | *Return:*
-| | ... | - No value returned.
-| |
-| | ... | _NOTE:_ This KW uses test variables sets in
-| | ... | "Configure path in double-link 3-node circular topology" KW.
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Configure path in double-link 3-node circular topology \| ${nodes['TG']} \
-| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
-| | ... | \| Interfaces in Double-Link 3-node testing are UP \|
-| |
-| | Set Interface State | ${tg_node} | ${tg_to_dut1_if1} | up
-| | Set Interface State | ${tg_node} | ${tg_to_dut1_if2} | up
-| | Set Interface State | ${tg_node} | ${tg_to_dut2_if1} | up
-| | Set Interface State | ${tg_node} | ${tg_to_dut2_if2} | up
-| | Set Interface State | ${dut1_node} | ${dut1_to_tg_if1} | up
-| | Set Interface State | ${dut1_node} | ${dut1_to_tg_if2} | up
-| | Set Interface State | ${dut2_node} | ${dut2_to_tg_if1} | up
-| | Set Interface State | ${dut2_node} | ${dut2_to_tg_if2} | up
-| | Set Interface State | ${dut1_node} | ${dut1_to_dut2_if1} | up
-| | Set Interface State | ${dut1_node} | ${dut1_to_dut2_if2} | up
-| | Set Interface State | ${dut2_node} | ${dut2_to_dut1_if1} | up
-| | Set Interface State | ${dut2_node} | ${dut2_to_dut1_if2} | up
-| | Vpp Node Interfaces Ready Wait | ${dut1_node}
-| | Vpp Node Interfaces Ready Wait | ${dut2_node}
-
-| Configure interfaces in path up
-| | [Documentation]
-| | ... | Set UP state on interfaces in 2-node or 3-node path on nodes and \
-| | ... | wait until all interfaces are ready.
-| |
-| | ... | *Arguments:*
-| | ... | - No arguments.
-| |
-| | ... | *Return:*
-| | ... | - No value returned.
-| |
-| | ... | _NOTE:_ This KW uses test variables sets in\
-| | ... | "Configure path in 2-node circular topology" or\
-| | ... | "Configure path in 3-node circular topology" KW.
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Configure interfaces in path up \|
-| |
-| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
-| | ... | Variable Should Exist | ${dut2}
-| |
-| | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Set interfaces in 3-node circular topology up
-| | ... | ELSE
-| | ... | Set interfaces in 2-node circular topology up
diff --git a/resources/libraries/robot/shared/vm.robot b/resources/libraries/robot/shared/vm.robot
index b0fe5cf457..5963287335 100644
--- a/resources/libraries/robot/shared/vm.robot
+++ b/resources/libraries/robot/shared/vm.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2019 Cisco and/or its affiliates.
+# Copyright (c) 2020 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -50,7 +50,7 @@
| | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | jumbo=${jumbo}
| | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs}
| | ... | auto_scale=${auto_scale} | vnf=${vnf}
-| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac}
+| | ... | tg_if1_mac=${TG_pf1_mac} | tg_if2_mac=${TG_pf2_mac}
| | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr}
| | ... | rxq_count_int=${rxq_count_int} | enable_csum=${False}
| | ... | enable_gso=${False}
@@ -96,7 +96,7 @@
| | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | jumbo=${jumbo}
| | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs}
| | ... | auto_scale=${auto_scale} | vnf=${vnf}
-| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac}
+| | ... | tg_if1_mac=${TG_pf1_mac} | tg_if2_mac=${TG_pf2_mac}
| | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr}
| | ... | rxq_count_int=${rxq_count_int} | enable_csum=${False}
| | ... | enable_gso=${False}