From 14a71b74b414df7616ccb5ada3d50ecb90d96bae Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Fri, 21 Feb 2020 22:09:02 +0000 Subject: 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 Change-Id: Ic2e74a38bfa146441357de8f0916aeb638941c49 --- resources/libraries/robot/shared/container.robot | 52 +- resources/libraries/robot/shared/default.robot | 100 +--- resources/libraries/robot/shared/interfaces.robot | 666 ++++++++++++--------- resources/libraries/robot/shared/suite_setup.robot | 261 +++----- .../libraries/robot/shared/suite_teardown.robot | 2 +- resources/libraries/robot/shared/test_setup.robot | 1 + .../libraries/robot/shared/testing_path.robot | 380 ------------ resources/libraries/robot/shared/vm.robot | 6 +- 8 files changed, 513 insertions(+), 955 deletions(-) delete mode 100644 resources/libraries/robot/shared/testing_path.robot (limited to 'resources/libraries/robot/shared') 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} -- cgit 1.2.3-korg