aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/robot/shared
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries/robot/shared')
-rw-r--r--resources/libraries/robot/shared/container.robot121
-rw-r--r--resources/libraries/robot/shared/default.robot98
-rw-r--r--resources/libraries/robot/shared/interfaces.robot225
-rw-r--r--resources/libraries/robot/shared/memif.robot26
-rw-r--r--resources/libraries/robot/shared/suite_setup.robot57
-rw-r--r--resources/libraries/robot/shared/suite_teardown.robot18
-rw-r--r--resources/libraries/robot/shared/test_setup.robot16
-rw-r--r--resources/libraries/robot/shared/test_teardown.robot45
-rw-r--r--resources/libraries/robot/shared/testing_path.robot96
-rw-r--r--resources/libraries/robot/shared/traffic.robot711
-rw-r--r--resources/libraries/robot/shared/vm.robot20
11 files changed, 442 insertions, 991 deletions
diff --git a/resources/libraries/robot/shared/container.robot b/resources/libraries/robot/shared/container.robot
index f440768df5..0b5cd3ee2b 100644
--- a/resources/libraries/robot/shared/container.robot
+++ b/resources/libraries/robot/shared/container.robot
@@ -13,7 +13,7 @@
*** Settings ***
| Documentation | Keywords related to linux containers
-| ...
+|
| Library | resources.libraries.python.CpuUtils
| Library | resources.libraries.python.topology.Topology
| Variables | resources/libraries/python/Constants.py
@@ -21,7 +21,7 @@
*** Keywords ***
| Construct container on all DUTs
| | [Documentation] | Construct 1 CNF of specific technology on all DUT nodes.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains: Total number of chains (Optional). Type: integer, default
| | ... | value: ${1}
@@ -30,27 +30,28 @@
| | ... | - nf_chain: Chain ID (Optional). Type: integer, default value: ${1}
| | ... | - nf_node: Node ID (Optional). Type: integer, default value: ${1}
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct container on all DUTs \| 1 \| 1 \| 1 \| 1 \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${nf_chain}=${1}
| | ... | ${nf_node}=${1} | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword | Construct container on DUT | ${dut}
| | | ... | ${nf_chains} | ${nf_nodes} | ${nf_chain}
| | | ... | ${nf_node} | ${auto_scale} | ${pinning}
+| | END
| Construct container on DUT
| | [Documentation] | Construct 1 CNF of specific technology on specific DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to construct the CNF on. Type: string
| | ... | - nf_chains: Total number of chains (Optional). Type: integer, default
@@ -60,20 +61,20 @@
| | ... | - nf_chain: Chain ID (Optional). Type: integer, default value: ${1}
| | ... | - nf_node: Node ID (Optional). Type: integer, default value: ${1}
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct container on DUT \| DUT1 \| 1 \| 1 \| 1 \| 1 \|
| | ... | \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${dut}
| | ... | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${nf_chain}=${1}
| | ... | ${nf_node}=${1} | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
+| |
| | ${nf_dtcr_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${nf_dtcr}
| | ${nf_dtcr}= | Run Keyword If | '${nf_dtcr_status}' == 'PASS'
@@ -112,27 +113,27 @@
| Construct chain of containers
| | [Documentation] | Construct 1 chain of 1..N CNFs on selected/all DUT nodes.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to start the containers on. Run on all nodes if None.
-| | ... | Type: string or None
+| | ... | Type: string or None
| | ... | - nf_chains: Total number of chains. Type: integer
| | ... | - nf_nodes: Total number of nodes per chain. Type: integer
| | ... | - nf_chain: Chain ID. Type: integer
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct chain of containers \| 1 \| 1 \| 1 \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${dut}=${None} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${nf_chain}=${1} | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
-| | :FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
+| |
+| | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
| | | Run Keyword If | '${dut}' == '${None}'
| | | ... | Construct container on all DUTs
| | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | nf_chain=${nf_chain}
@@ -141,68 +142,70 @@
| | | ... | Construct container on DUT | ${dut}
| | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | nf_chain=${nf_chain}
| | | ... | nf_node=${nf_node} | auto_scale=${auto_scale} | pinning=${pinning}
+| | END
| Construct chains of containers
| | [Documentation] | Construct 1..N chains of 1..N CNFs on selected/all DUT
| | ... | nodes.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to start the containers on. Run on all nodes if None.
-| | ... | Type: string or None
+| | ... | Type: string or None
| | ... | - nf_chains: Total number of chains (Optional). Type: integer, default
-| | ... | value: ${1}
+| | ... | value: ${1}
| | ... | - nf_nodes: Total number of nodes per chain (Optional). Type: integer,
-| | ... | default value: ${1}
+| | ... | default value: ${1}
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${True}
-| | ...
+| | ... | containers. Type: boolean, default value: ${True}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct chains of containers \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut}=${None} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
-| | :FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
+| |
+| | FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
| | | Construct chain of containers
| | | ... | dut=${dut} | nf_chains=${nf_chains} | nf_nodes=${nf_nodes}
| | | ... | nf_chain=${nf_chain} | auto_scale=${auto_scale} | pinning=${pinning}
+| | END
| Acquire all '${group}' containers
| | [Documentation] | Acquire all container(s) in specific container group on
| | ... | all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Acquire all containers
| Create all '${group}' containers
| | [Documentation] | Create/deploy all container(s) in specific container group
| | ... | on all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Create all containers
| Start VPP in all '${group}' containers
| | [Documentation] | Start VPP on all container(s) in specific container
| | ... | group on all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Start VPP In All Containers
| Restart VPP in all '${group}' containers
| | [Documentation] | Restart VPP on all container(s) in specific container
| | ... | group on all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Restart VPP In All Containers
| Configure VPP in all '${group}' containers
| | [Documentation] | Configure VPP on all container(s) in specific container
| | ... | group on all DUT nodes.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
-| | ... | - container_chain_topology - Topology type used for configuring CNF
-| | ... | (VPP) in container. Type: string
-| | ...
+| | ... | - container_chain_topology - Topology type used for configuring CNF
+| | ... | (VPP) in container. Type: string
+| |
| | ${dut1_if2} = | Get Variable Value | \${dut1_if2} | ${None}
| | ${dut2_if2} = | Get Variable Value | \${dut2_if2} | ${None}
| | Run Keyword If | '${container_chain_topology}' == 'chain_ip4'
@@ -227,37 +230,37 @@
| Stop all '${group}' containers
| | [Documentation] | Stop all container(s) in specific container group on all
| | ... | DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Stop all containers
| Destroy all '${group}' containers
| | [Documentation] | Destroy all container(s) in specific container group on
| | ... | all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Destroy all containers
| Start containers for test
| | [Documentation]
| | ... | Start containers for test.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to start the containers on. Run on all nodes if None.
-| | ... | Type: string or None
+| | ... | Type: string or None
| | ... | - nf_chains: Total number of chains. Type: integer
| | ... | - nf_nodes: Total number of nodes per chain. Type: integer
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start containers for test \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut}=${None} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
+| |
| | Set Test Variable | @{container_groups} | @{EMPTY}
| | Set Test Variable | ${container_group} | CNF
| | Set Test Variable | ${nf_nodes}
diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot
index c0b61fcea9..26fcbb0c3f 100644
--- a/resources/libraries/robot/shared/default.robot
+++ b/resources/libraries/robot/shared/default.robot
@@ -15,11 +15,11 @@
| Variables | resources/libraries/python/topology.py
| Variables | resources/libraries/python/PapiHistory.py
| Variables | resources/libraries/python/Constants.py
-| ...
+|
| Library | Collections
| Library | OperatingSystem
| Library | String
-| ...
+|
| Library | resources.libraries.python.Classify
| Library | resources.libraries.python.CpuUtils
| Library | resources.libraries.python.CoreDumpUtil
@@ -40,7 +40,7 @@
| Library | resources.libraries.python.Trace
| Library | resources.libraries.python.VppCounters
| Library | resources.libraries.python.VPPUtil
-| ...
+|
| Resource | resources/libraries/robot/lb/load_balancer.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
| Resource | resources/libraries/robot/features/acl.robot
@@ -77,45 +77,46 @@
| | [Documentation] | Verify if Crypto QAT device virtual functions are
| | ... | initialized on all DUTs. If parameter force_init is set to True, then
| | ... | try to initialize/disable.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - crypto_type - Crypto device type - HW_DH895xcc or HW_C3xxx.
| | ... | Type: string, default value: HW_DH895xcc
| | ... | - numvfs - Number of VFs to initialize, 0 - disable the VFs
| | ... | Type: integer, default value: ${32}
| | ... | - force_init - Force to initialize. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure crypto device on all DUTs \| HW_DH895xcc \| ${32} \|
-| | ...
+| |
| | [Arguments] | ${crypto_type} | ${numvfs} | ${force_init}=${False}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Crypto Device Verify | ${nodes['${dut}']} | ${crypto_type}
| | | ... | ${numvfs} | force_init=${force_init}
+| | END
| Configure kernel module on all DUTs
| | [Documentation] | Verify if specific kernel module is loaded on all DUTs.
| | ... | If parameter force_load is set to True, then try to load.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - module - Module to verify. Type: string
| | ... | - force_load - Try to load module. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure kernel module on all DUTs \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${module} | ${force_load}=${False}
-| | ...
+| |
| | Verify Kernel Module on All DUTs | ${nodes} | ${module}
| | ... | force_load=${force_load}
| Create base startup configuration of VPP on all DUTs
| | [Documentation] | Create base startup configuration of VPP to all DUTs.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Import Library | resources.libraries.python.VppConfigGenerator
| | | ... | WITH NAME | ${dut}
| | | Run keyword | ${dut}.Set Node | ${nodes['${dut}']}
@@ -132,6 +133,7 @@
| | | Run keyword | ${dut}.Add IP6 Hash Buckets | 2000000
| | | Run keyword | ${dut}.Add IP6 Heap Size | 4G
| | | Run keyword | ${dut}.Add IP Heap Size | 4G
+| | END
| Add worker threads to all DUTs
| | [Documentation] | Setup worker threads in vpp startup configuration on all
@@ -142,25 +144,25 @@
| | ... | RXQ are computed automatically by dividing thread count with number 2
| | ... | (TODO: Add division by actual number of interfaces). User can manually
| | ... | override RX, RXD, TXD parameters if needed.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - phy_cores - Number of physical cores to use. Type: integer
| | ... | - rx_queues - Number of RX queues. Type: integer
| | ... | - rxd - Number of RX descriptors. Type: integer
| | ... | - txd - Number of TX descriptors. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Add worker threads to all DUTs \| ${1} \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${rxd}=${None}
| | ... | ${txd}=${None}
-| | ...
+| |
| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
| | ${thr_count_int} | Convert to Integer | ${phy_cores}
| | ${rxd_count_int}= | Set variable | ${rxd}
| | ${txd_count_int}= | Set variable | ${txd}
-| | :FOR | ${dut} | IN | @{duts}
+| | 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'
@@ -201,6 +203,7 @@
| | | Run keyword if | ${thr_count_int} > 1
| | | ... | Set Tags | MTHREAD | ELSE | Set Tags | STHREAD
| | | Set Tags | ${thr_count_int}T${cpu_count_int}C
+| | END
| | Set Test Variable | ${smt_used}
| | Set Test Variable | ${thr_count_int}
| | Set Test Variable | ${cpu_count_int}
@@ -211,8 +214,8 @@
| Add DPDK pci devices to all DUTs
| | [Documentation]
| | ... | Add PCI devices to VPP configuration file.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | 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'
@@ -250,18 +253,20 @@
| | | ... | 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}
+| |
+| | 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
| | [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}
@@ -271,7 +276,7 @@
| | [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}
@@ -283,33 +288,36 @@
| Add NAT to all DUTs
| | [Documentation] | Add NAT configuration to all DUTs.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run keyword | ${dut}.Add NAT
+| | END
| Write startup configuration on all VPP DUTs
| | [Documentation] | Write VPP startup configuration without restarting VPP.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run keyword | ${dut}.Write Config
+| | END
| Apply startup configuration on all VPP DUTs
| | [Documentation] | Write VPP startup configuration and restart VPP on all
| | ... | DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - with_trace - Enable packet trace after VPP restart Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Apply startup configuration on all VPP DUTs \| False \|
-| | ...
+| |
| | [Arguments] | ${with_trace}=${False}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run keyword | ${dut}.Apply Config
| | | Add New Socket | ${nodes['${dut}']} | PAPI | ${dut} | ${SOCKSVR_PATH}
| | | Add New Socket | ${nodes['${dut}']} | STATS | ${dut} | ${SOCKSTAT_PATH}
+| | END
| | Save VPP PIDs
| | Enable Coredump Limit VPP on All DUTs | ${nodes}
| | Update All Interface Data On All Nodes | ${nodes} | skip_tg=${True}
@@ -319,20 +327,21 @@
| | [Documentation] | Get PIDs of VPP processes from all DUTs in topology and\
| | ... | set it as a test variable. The PIDs are stored as dictionary items\
| | ... | where the key is the host and the value is the PID.
-| | ...
+| |
| | ${setup_vpp_pids}= | Get VPP PIDs | ${nodes}
| | ${keys}= | Get Dictionary Keys | ${setup_vpp_pids}
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${key} | IN | @{keys}
+| | 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}
+| | END
| | Set Test Variable | ${setup_vpp_pids}
| Verify VPP PID in Teardown
| | [Documentation] | Check if the VPP PIDs on all DUTs are the same at the end\
| | ... | of test as they were at the begining. If they are not, only a message\
| | ... | is printed on console and to log. The test will not fail.
-| | ...
+| |
| | ${teardown_vpp_pids}= | Get VPP PIDs | ${nodes}
| | ${err_msg}= | Catenate | ${SUITE NAME} - ${TEST NAME}
| | ... | \nThe VPP PIDs are not equal!\nTest Setup VPP PIDs:
@@ -346,7 +355,7 @@
# TODO: Cleanup when VIRL is gone.
| Set up functional test
| | [Documentation] | Common test setup for functional tests.
-| | ...
+| |
| | Restart Vpp Service On All Duts | ${nodes}
| | Verify Vpp On All Duts | ${nodes}
| | VPP Enable Traces On All Duts | ${nodes}
@@ -355,14 +364,15 @@
| | Update All Interface Data On All Nodes | ${nodes}
| | Reset PAPI History On All DUTs | ${nodes}
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Add New Socket | ${nodes['${dut}']} | PAPI | ${dut} | ${SOCKSVR_PATH}
| | | Add New Socket | ${nodes['${dut}']} | STATS | ${dut} | ${SOCKSTAT_PATH}
+| | END
# TODO: Cleanup when VIRL is gone.
| Tear down functional test
| | [Documentation] | Common test teardown for functional tests.
-| | ...
+| |
| | Remove All Added Ports On All DUTs From Topology | ${nodes}
| | Show Packet Trace on All DUTs | ${nodes}
| | Show PAPI History On All DUTs | ${nodes}
diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot
index 74f10c4ef6..3d2b70d065 100644
--- a/resources/libraries/robot/shared/interfaces.robot
+++ b/resources/libraries/robot/shared/interfaces.robot
@@ -13,18 +13,19 @@
*** Settings ***
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.VhostUser
*** Keywords ***
| Set interfaces in path up
| | [Documentation]
| | ... | *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}
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -41,7 +42,8 @@
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_1} | up
| | | Run Keyword Unless | '${if2_status}' == 'PASS'
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_2} | up
-| | :FOR | ${dut} | IN | @{duts}
+| | END
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -58,18 +60,19 @@
| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_1}
| | | Run Keyword Unless | '${if2_status}' == 'PASS'
| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_2}
+| | END
| | All VPP Interfaces Ready Wait | ${nodes} | retries=${300}
| Set single interfaces in path up
| | [Documentation]
| | ... | *Set UP state on single 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}
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -78,7 +81,8 @@
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_1} | up
| | | Run Keyword Unless | '${if1_status}' == 'PASS'
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_2} | up
-| | :FOR | ${dut} | IN | @{duts}
+| | END
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -87,79 +91,82 @@
| | | ... | 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}
| 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
| | [Documentation]
| | ... | Baseline interfaces variables to be created.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of baseline interface variables. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer interface on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| | 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}
+| | END
| Initialize layer interface
| | [Documentation]
| | ... | 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}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer interface on node | ${dut} | count=${count}
+| | END
| | Set Test Variable | ${prev_layer} | if
| Pre-initialize layer driver
| | [Documentation]
| | ... | Pre-initialize driver based interfaces on each DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - driver - NIC driver used in test [vfio-pci|avf|rdma-core].
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Pre-initialize layer driver \| vfio-pci \|
-| | ...
+| |
| | [Arguments] | ${driver}
-| | ...
+| |
| | Run Keyword | Pre-initialize layer ${driver} on all DUTs
| Pre-initialize layer vfio-pci on all DUTs
| | [Documentation]
| | ... | 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}
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword | ${dut}.Add DPDK No Tx Checksum Offload
| | | Run Keyword | ${dut}.Add DPDK Log Level | debug
| | | Run Keyword | ${dut}.Add DPDK Uio Driver | vfio-pci
@@ -172,67 +179,69 @@
| | | ... | ${dut}.Add DPDK Dev Default TXD | ${txd_count_int}
| | | Run Keyword If | '${crypto_type}' != '${None}'
| | | ... | ${dut}.Add DPDK Cryptodev | ${thr_count_int}
+| | END
| Pre-initialize layer avf on all DUTs
| | [Documentation]
| | ... | Pre-initialize avf driver. Currently no operation.
-| | ...
+| |
| | No operation
| Pre-initialize layer rdma-core on all DUTs
| | [Documentation]
| | ... | Pre-initialize rdma-core driver. Currently no operation.
-| | ...
+| |
| | No operation
| Initialize layer driver
| | [Documentation]
| | ... | Initialize driver based interfaces on each DUT. Interfaces are
| | ... | brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - driver - NIC driver used in test [vfio-pci|avf|rdma-core].
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer driver \| vfio-pci \|
-| | ...
+| |
| | [Arguments] | ${driver}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword | Initialize layer ${driver} on node | ${dut}
+| | END
| | Set Test Variable | ${prev_layer} | vf
| | Set interfaces in path up
| Initialize layer vfio-pci on node
| | [Documentation]
| | ... | Initialize vfio-pci interfaces on DUT. Currently no operation.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer vfio-pci on node \| DUT1 \|
-| | ...
+| |
| | [Arguments] | ${dut}
-| | ...
+| |
| | No operation
| Initialize layer avf on node
| | [Documentation]
| | ... | Initialize AVF interfaces on DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer avf on node \| DUT1 \|
-| | ...
+| |
| | [Arguments] | ${dut}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
| | ${if1_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if1}
| | ${if2_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if2}
@@ -258,16 +267,16 @@
| Initialize layer rdma-core on node
| | [Documentation]
| | ... | Initialize rdma-core (MLX) interfaces on DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer rdma-core on node \| DUT1 \|
-| | ...
+| |
| | [Arguments] | ${dut}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
| | ${if1_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if1}
| | ${if2_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if2}
@@ -294,19 +303,19 @@
| | [Documentation]
| | ... | Bonded interface and variables to be created on across east and
| | ... | west DUT's node interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - 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 on node \| DUT1 \| xor \| l34 \| 1 \|
-| | ...
+| |
| | [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}
@@ -316,29 +325,31 @@
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_1} | ${if_index}
| | VPP Enslave Physical Interface
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_2} | ${if_index}
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| | 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}
+| | 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}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer bonding on node
| | | ... | ${dut} | bond_mode=${bond_mode} | lb_mode=${lb_mode}
| | | ... | count=${count}
+| | END
| | Set Test Variable | ${prev_layer} | bond
| Initialize layer dot1q on node for chain
@@ -346,19 +357,19 @@
| | ... | Optionally create tag popping subinterface per chain.
| | ... | Return interface indices for dot1q layer interfaces,
| | ... | or Nones if subinterfaces are not created.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - id - Positive index of the chain. Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
-| | ... | Type: boolean
-| | ...
+| | ... | Type: boolean
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer dot1q on node for chain \| DUT1 \| 1 \| True \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${id} | ${vlan_per_chain}=${True}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
| | Return From Keyword If | ${id} != ${1} and not ${vlan_per_chain}
| | ... | ${NONE} | ${NONE}
@@ -389,31 +400,31 @@
| | [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
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
-| | ... | Type: boolean
+| | ... | Type: boolean
| | ... | - start - Id of first chain, allows adding chains during test.
-| | ... | Type: integer
-| | ...
+| | ... | Type: integer
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer dot1q on node \| DUT1 \| 3 \| True \| 2 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1} | ${vlan_per_chain}=${True}
| | ... | ${start}=${1}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | :FOR | ${id} | IN RANGE | ${start} | ${count} + 1
+| | 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}
| | | # First id results in non-None indices, after that _1_ are defined.
@@ -423,25 +434,27 @@
| | | ... | ${${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}
+| | END
| Initialize layer dot1q
| | [Documentation]
| | ... | Dot1q interfaces and variables to be created on all DUT's interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of chains. Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
-| | ... | Type: boolean
+| | ... | Type: boolean
| | ... | - start - Id of first chain, allows adding chains during test.
-| | ... | Type: integer
-| | ...
+| | ... | Type: integer
+| |
| | ... | \| Initialize layer dot1q \| 3 \| True \| 2 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1} | ${vlan_per_chain}=${True} | ${start}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer dot1q on node | ${dut} | count=${count}
| | | ... | vlan_per_chain=${vlan_per_chain} | start=${start}
+| | END
| | Set Test Variable | ${prev_layer} | dot1q
| Initialize layer ip4vxlan on node
@@ -450,19 +463,19 @@
| | ... | 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:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of vxlan interfaces. Type: integer
| | ... | - start - Id of first chain, allows adding chains during test.
-| | ... | Type: integer
-| | ...
+| | ... | Type: integer
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer ip4vxlan on node \| DUT1 \| 3 \| 2 \|
-| | ...
+| |
| | [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}
@@ -470,7 +483,7 @@
| | 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
+| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1
| | | ${subnet}= | Evaluate | ${id} - 1
| | | ${vni}= | Evaluate | ${id} - 1
| | | ${ip4vxlan_1}= | Create VXLAN interface
@@ -503,29 +516,31 @@
| | | ... | ${${dut_str}_ip4vxlan_${id}_1} | ${ip4vxlan_1}
| | | Set Test Variable
| | | ... | ${${dut_str}_ip4vxlan_${id}_2} | ${ip4vxlan_2}
+| | END
| 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
-| | ...
+| | ... | Type: integer
+| |
| | ... | \| Initialize layer ip4vxlan \| 3 \| 2 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1} | ${start}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer ip4vxlan on node | ${dut} | count=${count}
| | ... | start=${start}
+| | 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
@@ -534,22 +549,22 @@
| | ... | Type: string
| | ... | - ${vhost_if2} - Name of the second Vhost-User interface (Optional).
| | ... | Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - ${${vhost_if1}} - First Vhost-User interface.
| | ... | - ${${vhost_if2}} - Second Vhost-User interface.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| 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
-| | ...
+| |
| | ${vhost_1}= | Vpp Create Vhost User Interface | ${dut_node} | ${sock1}
| | ${vhost_2}= | Vpp Create Vhost User Interface | ${dut_node} | ${sock2}
| | ${vhost_1_key}= | Get Interface By SW Index | ${dut_node} | ${vhost_1}
diff --git a/resources/libraries/robot/shared/memif.robot b/resources/libraries/robot/shared/memif.robot
index a0fae656f9..50051ca413 100644
--- a/resources/libraries/robot/shared/memif.robot
+++ b/resources/libraries/robot/shared/memif.robot
@@ -13,14 +13,14 @@
*** Settings ***
| Documentation | Memif interface keyword library.
-| ...
+|
| Library | resources.libraries.python.Memif
| Variables | resources/libraries/python/Constants.py
*** Keywords ***
| Set up memif interfaces on DUT node
| | [Documentation] | Create two Memif interfaces on given VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - filename1 - Socket filename for 1st Memif interface. Type: string
@@ -35,13 +35,13 @@
| | ... | - txq - TX queues; 0 means do not set (Optional). Type: integer,
| | ... | default value: ${1}
| | ... | - role - Memif role (Optional). Type: string, default value: SLAVE
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - ${${memif_if1}} - 1st Memif interface.
| | ... | - ${${memif_if2}} - 2nd Memif interface.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set up memif interfaces on DUT node \
| | ... | \| ${nodes['DUT1']} \| sock1 \| sock2 \| 1 \|
| | ... | \| Set up memif interfaces on DUT node \
@@ -49,11 +49,11 @@
| | ... | \| dut2_memif_if1 \| dut2_memif_if2 \| 1 \| 1 \| SLAVE \|
| | ... | \| ${nodes['DUT2']} \| sock1 \| sock2 \| 1 \| rxq=0 \| txq=0 \
| | ... | \| dcr_uuid=_a5730a0a-2ba1-4fe9-91bd-79b9828e968e \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${filename1} | ${filename2} | ${mid}=${1}
| | ... | ${memif_if1}=memif_if1 | ${memif_if2}=memif_if2 | ${rxq}=${1}
| | ... | ${txq}=${1} | ${role}=SLAVE
-| | ...
+| |
| | ${sid_1}= | Evaluate | (${mid}*2)-1
| | ${sid_2}= | Evaluate | (${mid}*2)
| | ${memif_1}= | Create memif interface | ${dut_node}
@@ -69,7 +69,7 @@
| Set up single memif interface on DUT node
| | [Documentation] | Create single Memif interface on given VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - filename - Socket filename for Memif interface. Type: string
@@ -80,19 +80,19 @@
| | ... | - rxq - RX queues (Optional). Type: integer
| | ... | - txq - TX queues (Optional). Type: integer
| | ... | - role - Memif role (Optional). Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - ${${memif_if}} - Memif interface.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set up single memif interface on DUT node \
| | ... | \| ${nodes['DUT1']} \| sock1 \| 1 \| dut1_memif_if1 \| 1 \| 1 \
| | ... | \| SLAVE \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${filename} | ${mid}=${1} | ${sid}=${1}
| | ... | ${memif_if}=memif_if1 | ${rxq}=${1} | ${txq}=${1} | ${role}=SLAVE
-| | ...
+| |
| | ${memif}= | Create memif interface | ${dut_node} | ${filename}${mid}-${sid}
| | ... | ${mid} | ${sid} | rxq=${rxq} | txq=${txq} | role=${role}
| | Set Interface State | ${dut_node} | ${memif} | up
diff --git a/resources/libraries/robot/shared/suite_setup.robot b/resources/libraries/robot/shared/suite_setup.robot
index d5cc5836fb..513cfe8045 100644
--- a/resources/libraries/robot/shared/suite_setup.robot
+++ b/resources/libraries/robot/shared/suite_setup.robot
@@ -20,7 +20,7 @@
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.TrafficGenerator
| Library | resources.tools.wrk.wrk
-| ...
+|
| Documentation | Suite setup keywords.
*** Keywords ***
@@ -31,7 +31,7 @@
| | ... | Compute path for testing on two given 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
| | ... | - duts_count - Number of DUT nodes.
@@ -45,21 +45,22 @@
| | ... | - dut{n}_if1_mac - 1st DUT interface MAC address.
| | ... | - dut{n}_if2 - 2nd DUT interface.
| | ... | - dut{n}_if2_mac - 2nd DUT interface MAC address.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional setup action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
+| |
| | ${nic_model_list}= | Create list | ${nic_name}
| | Append Node | ${nodes['TG']}
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | 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}
+| | FOR | ${dut} | IN | @{duts}
| | | ${dutx_if1} | ${dutx}= | Next Interface
| | | ${dutx_if2} | ${dutx}= | Next Interface
| | | ${dutx_if1_mac}= | Get Interface MAC | ${dutx} | ${dutx_if1}
@@ -70,6 +71,7 @@
| | | 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}
+| | END
| | ${tg_if2} | ${tg}= | Next Interface
| | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
| | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
@@ -81,8 +83,9 @@
| | Set Suite Variable | ${tg_if1_mac}
| | Set Suite Variable | ${tg_if2}
| | Set Suite Variable | ${tg_if2_mac}
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite setup Action For ${action}
+| | END
| Setup suite double link
| | [Documentation]
@@ -91,10 +94,10 @@
| | ... | 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.
@@ -111,9 +114,9 @@
| | ... | - 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']}
@@ -160,13 +163,14 @@
| | Set Suite Variable | ${dut2_if1_1}
| | Set Suite Variable | ${dut2_if1_2}
| | Set Suite Variable | ${dut2_if2}
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite setup Action For ${action}
+| | END
| Additional Suite Setup Action For performance
| | [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}
@@ -177,32 +181,34 @@
| 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
| Additional Suite Setup Action For dpdk
| | [Documentation]
| | ... | Additional Setup for suites which uses dpdk.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | Initialize DPDK Environment | ${nodes['${dut}']}
| | | ... | ${${dut_str}_if1} | ${${dut_str}_if2}
+| | END
| Additional Suite Setup Action For performance_avf
| | [Documentation]
| | ... | Additional Setup for suites which uses performance measurement over
| | ... | SRIOV AVF.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | 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.
+| | # 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]}
+| | 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}
@@ -213,16 +219,17 @@
| Additional Suite Setup Action For avf
| | [Documentation]
| | ... | Additional Setup for suites which uses SRIOV AVF.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
-# Currently only one AVF is supported.
+| |
+| | 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}
+| | END
| Additional Suite Setup Action For ipsechw
| | [Documentation]
| | ... | Additional Setup for suites which uses QAT HW.
-| | ...
+| |
| | ${numvfs}= | Set Variable If
| | ... | '${crypto_type}' == 'HW_DH895xcc' | ${32}
| | ... | '${crypto_type}' == 'HW_C3xxx' | ${16}
@@ -233,7 +240,7 @@
| Additional Suite Setup Action For wrk
| | [Documentation]
| | ... | Additional Setup for suites which uses WRK TG.
-| | ...
+| |
| | Iface update numa node | ${tg}
# Make sure TRex is stopped
| | ${running}= | Is TRex running | ${tg}
diff --git a/resources/libraries/robot/shared/suite_teardown.robot b/resources/libraries/robot/shared/suite_teardown.robot
index 3d976106f4..993d83838f 100644
--- a/resources/libraries/robot/shared/suite_teardown.robot
+++ b/resources/libraries/robot/shared/suite_teardown.robot
@@ -16,33 +16,35 @@
*** Settings ***
| Library | resources.libraries.python.DPDK.DPDKTools
| Library | resources.libraries.python.TrafficGenerator
-| ...
+|
| Documentation | Suite teardown keywords.
*** Keywords ***
| Tear down suite
| | [Documentation]
| | ... | Common suite teardown for tests.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional teardown action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
-| | :FOR | ${action} | IN | @{actions}
+| |
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite Tear Down Action For ${action}
+| | END
| | Remove All Added VIF Ports On All DUTs From Topology | ${nodes}
| Additional Suite Tear Down Action For performance
| | [Documentation]
| | ... | Additional teardown for suites which uses performance measurement.
-| | ...
+| |
| | Teardown traffic generator | ${tg}
| Additional Suite Tear Down Action For dpdk
| | [Documentation]
| | ... | Additional teardown for suites which uses dpdk.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Cleanup DPDK Environment
| | | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${${dut}_if2}
+| | END
diff --git a/resources/libraries/robot/shared/test_setup.robot b/resources/libraries/robot/shared/test_setup.robot
index c90ed68a79..941b90490a 100644
--- a/resources/libraries/robot/shared/test_setup.robot
+++ b/resources/libraries/robot/shared/test_setup.robot
@@ -15,27 +15,29 @@
*** Settings ***
| Library | resources.libraries.python.PapiHistory
-| ...
+|
| Documentation | Test Setup keywords.
*** Keywords ***
| Setup test
| | [Documentation]
| | ... | Common test setup for tests.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional setup action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
+| |
| | Reset PAPI History On All DUTs | ${nodes}
| | Create base startup configuration of VPP on all DUTs
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Test Setup Action For ${action}
+| | END
| Additional Test Setup Action For namespace
| | [Documentation]
| | ... | Additional Setup for tests which uses namespace.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Clean Up Namespaces | ${nodes['${dut}']}
+| | END
diff --git a/resources/libraries/robot/shared/test_teardown.robot b/resources/libraries/robot/shared/test_teardown.robot
index 336cff5dad..1e7d011fca 100644
--- a/resources/libraries/robot/shared/test_teardown.robot
+++ b/resources/libraries/robot/shared/test_teardown.robot
@@ -18,19 +18,19 @@
| Library | resources.libraries.python.PapiHistory
| Library | resources.libraries.python.topology.Topology
| Variables | resources/libraries/python/Constants.py
-| ...
+|
| Documentation | Test teardown keywords.
*** Keywords ***
| Tear down test
| | [Documentation]
| | ... | Common test teardown for tests.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional teardown action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
+| |
| | Remove All Added Ports On All DUTs From Topology | ${nodes}
| | Show PAPI History On All DUTs | ${nodes}
| | Show Log On All DUTs | ${nodes}
@@ -38,14 +38,15 @@
| | ... | Get Core Files on All Nodes | ${nodes}
| | Run Keyword If Test Failed
| | ... | Verify VPP PID in Teardown
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Test Tear Down Action For ${action}
+| | END
| | Clean Sockets On All Nodes | ${nodes}
| Additional Test Tear Down Action For performance
| | [Documentation]
| | ... | Additional teardown for tests which uses performance measurement.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Send traffic at specified rate | ${PERF_TRIAL_DURATION} | 10000pps
| | ... | ${frame_size} | ${traffic_profile} | pkt_trace=${True}
@@ -53,20 +54,21 @@
| Additional Test Tear Down Action For packet_trace
| | [Documentation]
| | ... | Additional teardown for tests which uses packet trace.
-| | ...
+| |
| | Show Packet Trace on All DUTs | ${nodes}
| Additional Test Tear Down Action For container
| | [Documentation]
| | ... | Additional teardown for tests which uses containers.
-| | ...
-| | :FOR | ${container_group} | IN | @{container_groups}
+| |
+| | FOR | ${container_group} | IN | @{container_groups}
| | | Destroy all '${container_group}' containers
+| | END
| Additional Test Tear Down Action For vhost
| | [Documentation]
| | ... | Additional teardown for tests which uses vhost(s) and VM(s).
-| | ...
+| |
| | Show VPP vhost on all DUTs | ${nodes}
| | ${vnf_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Keyword Should Exist | vnf_manager.Kill All VMs
@@ -75,29 +77,32 @@
| Additional Test Tear Down Action For nat
| | [Documentation]
| | ... | Additional teardown for tests which uses NAT feature.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword If Test Failed
| | | ... | Show NAT verbose | ${nodes['${dut}']}
+| | END
| Additional Test Tear Down Action For namespace
| | [Documentation]
| | ... | Additional teardown for tests which uses namespace.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Clean Up Namespaces | ${nodes['${dut}']}
+| | END
| Additional Test Tear Down Action For linux_bridge
| | [Documentation]
| | ... | Additional teardown for tests which uses linux_bridge.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Linux Del Bridge | ${nodes['${dut}']} | ${bid_TAP}
+| | END
| Additional Test Tear Down Action For acl
| | [Documentation]
| | ... | Additional teardown for tests which uses ACL feature.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Vpp Log Plugin Acl Settings | ${dut1}
| | Run Keyword If Test Failed
@@ -106,7 +111,7 @@
| Additional Test Tear Down Action For macipacl
| | [Documentation]
| | ... | Additional teardown for tests which uses MACIP ACL feature.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Vpp Log Macip Acl Settings | ${dut1}
| | Run Keyword If Test Failed
@@ -115,14 +120,14 @@
| Additional Test Tear Down Action For classify
| | [Documentation]
| | ... | Additional teardown for tests which uses classify tables.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Show Classify Tables Verbose on all DUTs | ${nodes}
| Additional Test Tear Down Action For srv6
| | [Documentation]
| | ... | Additional teardown for tests which uses SRv6.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Show SR Policies on all DUTs | ${nodes}
| | Run Keyword If Test Failed
diff --git a/resources/libraries/robot/shared/testing_path.robot b/resources/libraries/robot/shared/testing_path.robot
index 2bd0d9f938..696e7397a5 100644
--- a/resources/libraries/robot/shared/testing_path.robot
+++ b/resources/libraries/robot/shared/testing_path.robot
@@ -18,17 +18,17 @@
*** 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.
-| | ...
+| | ... | 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
-| | ...
+| | ... | 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.
@@ -40,12 +40,12 @@
| | ... | - ${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}
@@ -71,24 +71,24 @@
| 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.
-| | ...
+| | ... | 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.
-| | ...
+| | ... | "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
@@ -97,15 +97,15 @@
| 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.
-| | ...
+| | ... | 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
-| | ...
+| | ... | parameter in circular topology. Type: dictionary
+| |
| | ... | *Return:*
| | ... | - No value returned
| | ... |
@@ -125,12 +125,12 @@
| | ... | - ${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}
@@ -167,22 +167,22 @@
| | [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
@@ -197,14 +197,14 @@
| | ... | 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.
| | ... |
@@ -236,12 +236,12 @@
| | ... | - ${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
@@ -321,22 +321,22 @@
| | [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
@@ -356,24 +356,24 @@
| | [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
diff --git a/resources/libraries/robot/shared/traffic.robot b/resources/libraries/robot/shared/traffic.robot
index df74017f6a..9358daf2d7 100644
--- a/resources/libraries/robot/shared/traffic.robot
+++ b/resources/libraries/robot/shared/traffic.robot
@@ -20,7 +20,7 @@
| Library | resources.libraries.python.Policer
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.TrafficScriptExecutor
-| ...
+|
| Documentation | Traffic keywords
*** Keywords ***
@@ -28,12 +28,12 @@
| | [Documentation] | Sends packet from IP (with source mac) to IP\
| | ... | (with dest mac). There has to be 4 MAC addresses when using\
| | ... | 2-node + xconnect (one for each eth).
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -55,23 +55,23 @@
| | ... | Type: integer
| | ... | - traffic_script - Scapy Traffic script used for validation.
| | ... | Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify headers \| ${nodes['TG']} \| 10.0.0.1 \
| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_dst_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${encaps_tx}=${EMPTY} | ${vlan_tx}=${EMPTY}
| | ... | ${vlan_outer_tx}=${EMPTY} | ${encaps_rx}=${EMPTY}
| | ... | ${vlan_rx}=${EMPTY} | ${vlan_outer_rx}=${EMPTY}
| | ... | ${traffic_script}=send_ip_check_headers
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_dst_port}
| | ${args}= | Catenate | --tg_src_mac ${tx_src_mac}
@@ -98,12 +98,12 @@
| | [Documentation] | Sends packet from ip (with specified mac) to ip\
| | ... | (with dest mac). Using keyword : Send packet And Check Headers\
| | ... | and subsequently checks the return value.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -113,12 +113,12 @@
| | ... | - rx_port - Interface of TG-if1. Type: string
| | ... | - rx_src_mac - MAC address of DUT1-if2. Type: string
| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Packet transmission from port to port should fail \
| | ... | \| ${nodes['TG']} \| 10.0.0.1 \ \| 32.0.0.1 \| eth2 \
| | ... | \| 08:00:27:a2:52:5b \| eth3 \| 08:00:27:4d:ca:7a \
@@ -126,7 +126,7 @@
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac ${tx_src_mac}
@@ -137,425 +137,9 @@
| | ... | Run Traffic Script On Node | send_ip_check_headers.py
| | ... | ${tg_node} | ${args}
-| Send packet and verify ARP request
-| | [Documentation] | Send IP packet from tx_port and check if ARP Request\
-| | ... | packet is received on rx_port.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_src_ip - Source IP address of transferred packet (TG-if1).
-| | ... | Type: string
-| | ... | - tx_dst_ip - Destination IP address of transferred packet (TG-if2).
-| | ... | Type: string
-| | ... | - tx_port - Interface from which the IP packet is sent (TG-if1).
-| | ... | Type: string
-| | ... | - tx_dst_mac - Destination MAC address of IP packet (DUT-if1).
-| | ... | Type: string
-| | ... | - rx_port - Interface where the IP packet is received (TG-if2).
-| | ... | Type: string
-| | ... | - rx_src_mac - Source MAC address of ARP packet (DUT-if2).
-| | ... | Type: string
-| | ... | - rx_arp_src_ip - Source IP address of ARP packet (DUT-if2).
-| | ... | Type: string
-| | ... | - rx_arp_dst_ip - Destination IP address of ARP packet. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send Packet And Check ARP Packet \| ${nodes['TG']} \| 16.0.0.1 \
-| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:cc:4f:54 \
-| | ... | \| eth4 \| 08:00:27:5b:49:dd \| 192.168.2.1 \| 192.168.2.2 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_src_ip} | ${tx_dst_ip} | ${tx_port}
-| | ... | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac} | ${rx_arp_src_ip}
-| | ... | ${rx_arp_dst_ip}
-| | ...
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate | --tx_dst_mac ${tx_dst_mac}
-| | ... | --rx_src_mac ${rx_src_mac} | --tx_src_ip ${tx_src_ip}
-| | ... | --tx_dst_ip ${tx_dst_ip} | --tx_if ${tx_port_name}
-| | ... | --rx_if ${rx_port_name} | --rx_arp_src_ip ${rx_arp_src_ip}
-| | ... | --rx_arp_dst_ip ${rx_arp_dst_ip}
-| | Run Traffic Script On Node | send_icmp_check_arp.py | ${tg_node} | ${args}
-
-| Send TCP or UDP packet and verify received packet
-| | [Documentation] | Sends TCP or UDP packet with specified source\
-| | ... | and destination port.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - src_ip - IP of source interface (TG-if1). Type: integer
-| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer
-| | ... | - tx_port - Source interface (TG-if1). Type: string
-| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string
-| | ... | - rx_port - Destionation interface (TG-if1). Type: string
-| | ... | - rx_mac - MAC address of destination interface (TG-if1). Type: string
-| | ... | - protocol - Type of protocol. Type: string
-| | ... | - source_port - Source TCP/UDP port. Type: string or integer
-| | ... | - destination_port - Destination TCP/UDP port. Type: string or integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send TCP or UDP packet and verify received packet \
-| | ... | \| ${nodes['TG']} \| 16.0.0.1 \| 32.0.0.1 \| eth2 \
-| | ... | \| 08:00:27:cc:4f:54 \| eth4 \| 08:00:27:c9:6a:d5 \| TCP \| 20 \
-| | ... | 80 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} | ${tx_mac}
-| | ... | ${rx_port} | ${rx_mac} | ${protocol} | ${source_port}
-| | ... | ${destination_port}
-| | ...
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate | --tx_mac ${tx_mac} | --rx_mac ${rx_mac}
-| | ... | --src_ip ${src_ip} | --dst_ip ${dst_ip}
-| | ... | --tx_if ${tx_port_name} | --rx_if ${rx_port_name}
-| | ... | --protocol ${protocol} | --source_port ${source_port}
-| | ... | --destination_port ${destination_port}
-| | Run Traffic Script On Node | send_tcp_udp.py
-| | ... | ${tg_node} | ${args}
-
-| TCP or UDP packet transmission should fail
-| | [Documentation] | Sends TCP or UDP packet with specified source\
-| | ... | and destination port.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - src_ip - IP of source interface (TG-if1). Type: integer
-| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer
-| | ... | - tx_port - Source interface (TG-if1). Type: string
-| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string
-| | ... | - rx_port - Destionation interface (TG-if1). Type: string
-| | ... | - rx_mac - MAC address of destination interface (TG-if1). Type: string
-| | ... | - protocol - Type of protocol. Type: string
-| | ... | - source_port - Source TCP/UDP port. Type: string or integer
-| | ... | - destination_port - Destination TCP/UDP port. Type: string or integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| TCP or UDP packet transmission should fail \| ${nodes['TG']} \
-| | ... | \| 16.0.0.1 \| 32.0.0.1 \| eth2 \| 08:00:27:cc:4f:54 \
-| | ... | \| eth4 \| 08:00:27:c9:6a:d5 \| TCP \| 20 \| 80 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} | ${tx_mac}
-| | ... | ${rx_port} | ${rx_mac} | ${protocol} | ${source_port}
-| | ... | ${destination_port}
-| | ...
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate | --tx_mac ${tx_mac} | --rx_mac ${rx_mac}
-| | ... | --src_ip ${src_ip} | --dst_ip ${dst_ip} | --tx_if ${tx_port_name}
-| | ... | --rx_if ${rx_port_name} | --protocol ${protocol}
-| | ... | --source_port ${source_port} | --destination_port ${destination_port}
-| | Run Keyword And Expect Error | TCP/UDP Rx timeout
-| | ... | Run Traffic Script On Node | send_tcp_udp.py
-| | ... | ${tg_node} | ${args}
-
-| Receive and verify router advertisement packet
-| | [Documentation] | Wait until RA packet is received and then verify\
-| | ... | specific fields of received RA packet.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - node - Node where to check for RA packet. Type: dictionary
-| | ... | - rx_port - Interface where the packet is received. Type: string
-| | ... | - src_mac - MAC address of source interface from which the link-local\
-| | ... | IPv6 address is constructed and checked. Type: string
-| | ... | - interval - Configured retransmit interval. Optional. Type: integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Receive and verify router advertisement packet \
-| | ... | \| ${nodes['DUT1']} \| eth2 \| 08:00:27:cc:4f:54 \|
-| | ...
-| | [Arguments] | ${node} | ${rx_port} | ${src_mac} | ${interval}=${0}
-| | ...
-| | ${rx_port_name}= | Get interface name | ${node} | ${rx_port}
-| | ${args}= | Catenate | --rx_if ${rx_port_name} | --src_mac ${src_mac}
-| | ... | --interval ${interval}
-| | Run Traffic Script On Node | check_ra_packet.py | ${node} | ${args}
-
-| Send router solicitation and verify response
-| | [Documentation] | Send RS packet, wait for response and then verify\
-| | ... | specific fields of received RA packet.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - tg_node - TG node to send RS packet from. Type: dictionary
-| | ... | - dut_node - DUT node to send RS packet to. Type: dictionary
-| | ... | - rx_port - Interface where the packet is sent from. Type: string
-| | ... | - tx_port - Interface where the packet is sent to. Type: string
-| | ... | - src_ip - Source IP address of RS packet. Optional. If not provided,\
-| | ... | link local address will be used. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send router solicitation and verify response \
-| | ... | \| ${nodes['TG']} \| ${nodes['DUT1']} \| eth2 \
-| | ... | \| GigabitEthernet0/8/0 \| 10::10 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${dut_node} | ${tx_port} | ${rx_port}
-| | ... | ${src_ip}=''
-| | ...
-| | ${src_mac}= | Get Interface Mac | ${tg_node} | ${tx_port}
-| | ${dst_mac}= | Get Interface Mac | ${dut_node} | ${rx_port}
-| | ${src_int_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${dst_int_name}= | Get interface name | ${dut_node} | ${rx_port}
-| | ${args}= | Catenate | --rx_if ${dst_int_name} | --tx_if ${src_int_name}
-| | ... | --src_mac ${src_mac} | --dst_mac ${dst_mac} | --src_ip ${src_ip}
-| | Run Traffic Script On Node | send_rs_check_ra.py
-| | ... | ${tg_node} | ${args}
-
-| Send ARP Request
-| | [Documentation] | Send ARP Request and check if the ARP Response is\
-| | ... | received.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)<->(if1)DUT
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_port - Interface from which the ARP packet is sent (TG-if1).
-| | ... | Type: string
-| | ... | - src_mac - Source MAC address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_mac - Target MAC address which is expected in the response
-| | ... | (DUT-if1). Type: string
-| | ... | - src_ip - Source IP address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_ip - Target IP address of ARP packet (DUT-if1).
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send ARP Request \| ${nodes['TG']} \| eth3 \
-| | ... | \| 08:00:27:cc:4f:54 \| 08:00:27:c9:6a:d5 \
-| | ... | \| 10.0.0.100 \| 192.168.1.5 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_port} | ${src_mac} | ${tgt_mac} | ${src_ip}
-| | ... | ${tgt_ip}
-| | ...
-| | ${args}= | Catenate | --tx_if ${tx_port} | --src_mac ${src_mac}
-| | ... | --dst_mac ${tgt_mac} | --src_ip ${src_ip} | --dst_ip ${tgt_ip}
-| | Run Traffic Script On Node | arp_request.py | ${tg_node} | ${args}
-
-| ARP request should fail
-| | [Documentation] | Send ARP Request and the ARP Response should not\
-| | ... | be received.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)<->(if1)DUT
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_port - Interface from which the ARP packet is sent (TG-if1).
-| | ... | Type: string
-| | ... | - src_mac - Source MAC address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_mac - Target MAC address which is expected in the response
-| | ... | (DUT-if1). Type: string
-| | ... | - src_ip - Source IP address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_ip - Target IP address of ARP packet (DUT-if1).
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| ARP request should fail \| ${nodes['TG']} \| eth3 \
-| | ... | \| 08:00:27:cc:4f:54 \| 08:00:27:c9:6a:d5 \
-| | ... | \| 10.0.0.100 \| 192.168.1.5 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_port} | ${src_mac} | ${tgt_mac} | ${src_ip}
-| | ... | ${tgt_ip}
-| | ...
-| | ${args}= | Catenate | --tx_if ${tx_port} | --src_mac ${src_mac}
-| | ... | --dst_mac ${tgt_mac} | --src_ip ${src_ip} | --dst_ip ${tgt_ip}
-| | Run Keyword And Expect Error | ARP reply timeout
-| | ... | Run Traffic Script On Node | arp_request.py | ${tg_node} | ${args}
-
-| Send packets and verify multipath routing
-| | [Documentation] | Send 100 IP ICMP packets traffic and check if it is\
-| | ... | divided into two paths.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - src_port - Interface of TG-if1. Type: string
-| | ... | - dst_port - Interface of TG-if2. Type: string
-| | ... | - src_ip - IP of source interface (TG-if1). Type: string
-| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
-| | ... | - tx_src_mac - MAC address of TG-if1. Type: string
-| | ... | - tx_dst_mac - MAC address of DUT-if1. Type: string
-| | ... | - rx_src_mac - MAC address of DUT-if2. Type: string
-| | ... | - rx_dst_mac_1 - MAC address of interface for path 1. Type: string
-| | ... | - rx_dst_mac_2 - MAC address of interface for path 2. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send Packet And Check Multipath Routing \| ${nodes['TG']} \
-| | ... | \| eth2 \| eth3 \| 16.0.0.1 \| 32.0.0.1 \
-| | ... | \| 08:00:27:cc:4f:54 \| 08:00:27:c9:6a:d5 \| 08:00:27:54:59:f9 \
-| | ... | \| 02:00:00:00:00:02 \| 02:00:00:00:00:03 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_port} | ${dst_port} | ${src_ip} | ${dst_ip}
-| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_src_mac} | ${rx_dst_mac_1}
-| | ... | ${rx_dst_mac_2}
-| | ...
-| | ${src_port_name}= | Get interface name | ${tg_node} | ${src_port}
-| | ${dst_port_name}= | Get interface name | ${tg_node} | ${dst_port}
-| | ${args}= | Catenate | --tx_if ${src_port_name}
-| | ... | --rx_if ${dst_port_name} | --src_ip ${src_ip} | --dst_ip ${dst_ip}
-| | ... | --tg_if1_mac ${tx_src_mac} | --dut_if1_mac ${tx_dst_mac}
-| | ... | --dut_if2_mac ${rx_src_mac} | --path_1_mac ${rx_dst_mac_1}
-| | ... | --path_2_mac ${rx_dst_mac_2}
-| | Run Traffic Script On Node | send_icmp_check_multipath.py | ${tg_node}
-| | ... | ${args}
-
-| Send IPv4 ping packet and verify headers
-| | [Documentation] | Send ICMP Echo Request message from source port of source\
-| | ... | node to destination port of destination node and check the received\
-| | ... | ICMP Echo Reply message for correctness inlcuding source and\
-| | ... | destination IPv4 and MAC addresses and ttl value. If the destination\
-| | ... | node is TG type the ttl of received ICMP Echo Request message is\
-| | ... | checked too and corresponding ICMP Echo Reply message is created.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tx_node - Source node to execute scripts on (mostly TG).
-| | ... | Type: dictionary
-| | ... | - tx_port - Source interface of tx_node. Type: string
-| | ... | - rx_node - Destinantion node. Type: dictionary
-| | ... | - rx_port - Destination interface of rx_node. Type: string
-| | ... | - src_ip - IP address of source interface or source remote host.
-| | ... | Type: string
-| | ... | - dst_ip - IP address of destination interface or destination remote
-| | ... | host. Type: string
-| | ... | - first_hop_mac - Destination MAC address for the first hop in
-| | ... | the path. Type: string
-| | ... | - hops - Expected number of hops. Type: string or integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send IPv4 ping packet and verify headers \| ${nodes['TG']} \
-| | ... | \| eth2 \| ${nodes['DUT1']} \| eth3 \| 16.0.0.1 \| 32.0.0.1 \
-| | ... | \| 08:00:27:cc:4f:54 \| 1 \|
-| | ...
-| | [Arguments] | ${tx_node} | ${tx_port} | ${rx_node} | ${rx_port}
-| | ... | ${src_ip} | ${dst_ip} | ${first_hop_mac} | ${hops}
-| | ...
-| | ${src_mac}= | Get interface MAC | ${tx_node} | ${tx_port}
-| | ${dst_mac}= | Get interface MAC | ${rx_node} | ${rx_port}
-| | ${is_dst_tg}= | Is TG node | ${rx_node}
-| | ${tx_port_name}= | Get interface name | ${tx_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${rx_node} | ${rx_port}
-| | ${args}= | Traffic Script Gen Arg | ${rx_port_name} | ${tx_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --hops ${hops}
-| | ... | --first_hop_mac ${first_hop_mac} | --is_dst_tg ${is_dst_tg}
-| | Run Traffic Script On Node | ipv4_ping_ttl_check.py | ${tx_node} | ${args}
-
-| Send IPv6 echo request packet and verify headers
-| | [Documentation] | Send ICMPv6 Echo Request message from source port of\
-| | ... | source node to destination port of destination node and check\
-| | ... | the received ICMPv6 Echo Reply message for correctness inlcuding\
-| | ... | source and destination IPv4 and MAC addresses and hlim value. If\
-| | ... | the destination node is TG type the hlim of received ICMP Echo\
-| | ... | Request message is checked too and corresponding ICMP Echo Reply\
-| | ... | message is created and sent.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tx_node - Source node to execute scripts on (mostly TG).
-| | ... | Type: dictionary
-| | ... | - tx_port - Source interface of tx_node. Type: string
-| | ... | - rx_node - Destinantion node. Type: dictionary
-| | ... | - rx_port - Destination interface of rx_node. Type: string
-| | ... | - src_ip - IPv6 address of source interface or source remote host.
-| | ... | Type: string
-| | ... | - dst_ip - IPv6 address of destination interface or destination remote
-| | ... | host. Type: string
-| | ... | - src_nh_mac - Destination MAC address for the first hop in
-| | ... | the path in direction from source node. Type: string
-| | ... | - hops - Expected number of hops. Type: string or integer
-| | ... | - dst_nh_mac - Destination MAC address for the first hop in
-| | ... | the path in direction from destination node (Optional). Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send IPv6 echo request packet and verify headers \
-| | ... | \| ${nodes['TG']} \| eth2 \| ${nodes['DUT1']} \| eth3 \| 3ffe:5f::1 \
-| | ... | \| 3ffe:5f::2 \| 08:00:27:cc:4f:54 \| 1 \|
-| | ...
-| | [Arguments] | ${tx_node} | ${tx_port} | ${rx_node} | ${rx_port} | ${src_ip}
-| | ... | ${dst_ip} | ${src_nh_mac} | ${hops} | ${dst_nh_mac}=${NONE}
-| | ...
-| | ${src_mac}= | Get interface MAC | ${tx_node} | ${tx_port}
-| | ${dst_mac}= | Get interface MAC | ${rx_node} | ${rx_port}
-| | ${is_dst_tg}= | Is TG node | ${rx_node}
-| | ${tx_port_name}= | Get interface name | ${tx_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${rx_node} | ${rx_port}
-| | ${args}= | Traffic Script Gen Arg | ${rx_port_name} | ${tx_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --h_num ${hops} | --src_nh_mac ${src_nh_mac}
-| | ... | --dst_nh_mac ${dst_nh_mac} | --is_dst_tg ${is_dst_tg}
-| | Run Traffic Script On Node | icmpv6_echo_req_resp.py | ${tx_node} | ${args}
-
| Send packet and verify marking
| | [Documentation] | Send packet and verify DSCP of the received packet.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - TG node. Type: dictionary
| | ... | - tx_if - TG transmit interface. Type: string
@@ -564,15 +148,15 @@
| | ... | - dst_mac - Packet destination MAC. Type: string
| | ... | - src_ip - Packet source IP address. Type: string
| | ... | - dst_ip - Packet destination IP address. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Send packet and verify marking \| ${nodes['TG']} \| eth1 \| eth2 \
| | ... | \| 08:00:27:87:4d:f7 \| 52:54:00:d4:d8:22 \| 192.168.122.2 \
| | ... | \| 192.168.122.1 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${tx_if} | ${rx_if} | ${src_mac} | ${dst_mac}
| | ... | ${src_ip} | ${dst_ip}
-| | ...
+| |
| | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_if}
| | ${rx_if_name}= | Get Interface Name | ${node} | ${rx_if}
| | ${args}= | Traffic Script Gen Arg | ${rx_if_name} | ${tx_if_name}
@@ -584,7 +168,7 @@
| Send VXLAN encapsulated packet and verify received packet
| | [Documentation] | Send VXLAN encapsulated Ethernet frame and check \
| | ... | received one.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_node - Node where to run traffic script. Type: dictionary
| | ... | - tx_if - Interface from where send VXLAN packet. Type: string
@@ -599,17 +183,17 @@
| | ... | - rx_dst_ip - Destination IP address of received VXLAN packet.
| | ... | Type: string
| | ... | - rx_vni - VNI of received VXLAN packet. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send VXLAN encapsulated packet and verify received packet \
| | ... | \| ${tg_node} \| port4 \| port4 \
| | ... | \| fa:16:3e:6d:f9:c5 \| fa:16:3e:e6:6d:9a \| 192.168.0.1 \
| | ... | \| 192.168.0.2 \| ${101} \| 192.168.0.2 \| 192.168.0.1 \| ${102} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
| | ... | ${tx_src_mac} | ${tx_dst_mac}
| | ... | ${tx_src_ip} | ${tx_dst_ip} | ${tx_vni}
@@ -630,187 +214,10 @@
| | Run Traffic Script On Node | send_vxlan_check_vxlan.py | ${tg_node}
| | ... | ${args}
-| Send Packet And Check Received Copies
-| | [Documentation] | Sends an ARP or ICMP packet from TG to DUT using one\
-| | ... | link, then receive a copy of both the sent packet and the DUT's reply\
-| | ... | on the second link.
-| | ...
-| | ... | Used by Honeycomb.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_src_port - First interface on TG. Type: string
-| | ... | - tx_src_mac - MAC address of the first interface on TG. Type: string
-| | ... | - tx_dst_mac - MAC address of the first interface on DUT. Type: string
-| | ... | - rx_port - Second interface on TG. Type: string
-| | ... | - src_ip - Packet source IP address. Type: string
-| | ... | - dst_ip - Packet destination IP address. Type: string
-| | ... | - ptype - Type of payload, ARP, ICMP or ICMPv6. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send Packet And Check Received Copies \| ${nodes['TG']} \| eth1 \
-| | ... | \| 8:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
-| | ... | \| eth3 \| 192.168.0.2 \| 192.168.0.3 \| ARP \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_src_port}
-| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port}
-| | ... | ${src_ip} | ${dst_ip} | ${ptype}
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate
-| | ... | --tg_src_mac ${tx_src_mac} --dut_if1_mac ${tx_dst_mac}
-| | ... | --src_ip ${src_ip} --dst_ip ${dst_ip}
-| | ... | --tx_if ${tx_port_name} --rx_if | ${rx_port_name}
-| | ... | --ptype ${ptype}
-| | Run Traffic Script On Node | span_check.py | ${tg_node} |
-| | ... | ${args}
-
-| Send ICMPv4 and check received GRE header
-| | [Documentation] | Send ICMPv4 packet and check if received packed contains \
-| | ... | correct GRE, IP, MAC headers.
-| | ...
-| | ... | *Arguments:*
-| | ... | - tg_node - Node where to run traffic script. Type: dictionary
-| | ... | - tx_if - Interface from where send ICPMv4 packet. Type: string
-| | ... | - rx_if - Interface where to receive GRE packet. Type: string
-| | ... | - tx_dst_mac - Destination MAC address of ICMP packet. Type: string
-| | ... | - rx_dst_mac - Expected destination MAC address of GRE packet.
-| | ... | Type: string
-| | ... | - inner_src_ip - Source IP address of ICMP packet. Type: string
-| | ... | - inner_dst_ip - Destination IP address of ICMP packet.
-| | ... | Type: string
-| | ... | - outer_src_ip - Source IP address of GRE packet. Type: string
-| | ... | - outer_dst_ip - Destination IP address of GRE packet.
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send ICMPv4 and check received GRE header \
-| | ... | \| ${tg_node} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \
-| | ... | \| ${tx_dst_mac} \| ${rx_dst_mac} \| ${net1_host_address} \
-| | ... | \| ${net2_host_address} \| ${dut1_ip_address} \| ${dut2_ip_address} \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
-| | ... | ${tx_dst_mac} | ${rx_dst_mac}
-| | ... | ${inner_src_ip} | ${inner_dst_ip}
-| | ... | ${outer_src_ip} | ${outer_dst_ip}
-| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if}
-| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if}
-| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name}
-| | ... | --tx_dst_mac | ${tx_dst_mac} | --rx_dst_mac | ${rx_dst_mac}
-| | ... | --inner_src_ip | ${inner_src_ip} | --inner_dst_ip | ${inner_dst_ip}
-| | ... | --outer_src_ip | ${outer_src_ip} | --outer_dst_ip | ${outer_dst_ip}
-| | Run Traffic Script On Node
-| | ... | send_icmp_check_gre_headers.py | ${tg_node} | ${args}
-
-| Send GRE and check received ICMPv4 header
-| | [Documentation] | Send IPv4 ICMPv4 packet encapsulated into GRE and \
-| | ... | check IP, MAC headers on received packed.
-| | ...
-| | ... | *Arguments:*
-| | ... | - tg_node - Node where to run traffic script. Type: dictionary
-| | ... | - tx_if - Interface from where send ICPMv4 packet. Type: string
-| | ... | - rx_if - Interface where receive GRE packet. Type: string
-| | ... | - tx_dst_mac - Destination MAC address of GRE packet. Type: string
-| | ... | - rx_dst_mac - Expected destination MAC address of ICMP packet.
-| | ... | Type: string
-| | ... | - inner_src_ip - Source IP address of ICMP packet. Type: string
-| | ... | - inner_dst_ip - Destination IP address of ICMP packet.
-| | ... | Type: string
-| | ... | - outer_src_ip - Source IP address of GRE packet. Type: string
-| | ... | - outer_dst_ip - Destination IP address of GRE packet.
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send GRE and check received ICMPv4 header \| ${tg_node} \
-| | ... | \| ${tg_to_dut_if2} \| ${tg_to_dut_if1} \| ${tx_dst_mac} \
-| | ... | \| ${rx_dst_mac} \| ${net2_host_address} \| ${net1_host_address} \
-| | ... | \| ${dut2_ip_address} \| ${dut1_ip_address} \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
-| | ... | ${tx_dst_mac} | ${rx_dst_mac}
-| | ... | ${inner_src_ip} | ${inner_dst_ip}
-| | ... | ${outer_src_ip} | ${outer_dst_ip}
-| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if}
-| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if}
-| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name}
-| | ... | --tx_dst_mac | ${tx_dst_mac} | --rx_dst_mac | ${rx_dst_mac}
-| | ... | --inner_src_ip | ${inner_src_ip} | --inner_dst_ip | ${inner_dst_ip}
-| | ... | --outer_src_ip | ${outer_src_ip} | --outer_dst_ip | ${outer_dst_ip}
-| | Run Traffic Script On Node
-| | ... | send_gre_check_icmp_headers.py | ${tg_node} | ${args}
-
-| Send GRE and check received GRE header
-| | [Documentation] | Send IPv4 UDP packet encapsulated into GRE and \
-| | ... | check if received packed contains correct MAC GRE, IP, UDP headers.
-| | ...
-| | ... | *Arguments:*
-| | ... | - tg_node - Node where to run traffic script. Type: dictionary
-| | ... | - tx_if - Interface from where send GRE packet. Type: string
-| | ... | - rx_if - Interface where to receive GRE packet. Type: string
-| | ... | - tx_dst_mac - Destination MAC address of transferred packet.
-| | ... | Type: string
-| | ... | - tx_src_mac - Source MAC address of transferred packet. Type: string
-| | ... | - tx_outer_dst_ip - Destination IP address of GRE packet. Type: string
-| | ... | - tx_outer_src_ip - Source IP address of GRE packet. Type: string
-| | ... | - tx_inner_dst_ip - Destination IP address of UDP packet. Type: string
-| | ... | - tx_inner_src_ip - Source IP address of UDP packet. Type: string
-| | ... | - rx_dst_mac - Expected destination MAC address. Type: string
-| | ... | - rx_src_mac - Expected source MAC address. Type: string
-| | ... | - rx_outer_dst_ip - Expected destination IP address of received GRE
-| | ... | packet. Type: string
-| | ... | - rx_outer_src_ip - Expected source IP address of received GRE
-| | ... | packet. Type: string
-| | ...
-| | ... | __Note:__
-| | ... | rx_inner_dst_ip and rx_inner_src_ip should be same as transferred
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ... | \| Send GRE and check received GRE header \| ${tg_node} \
-| | ... | \| port3 \| port3 \| 08:00:27:f3:be:f0 \| 08:00:27:46:2b:4c \
-| | ... | \| 10.0.0.1 \| 10.0.0.2 \| 192.168.3.100 \| 192.168.2.100 \
-| | ... | \| 08:00:27:46:2b:4c \| 08:00:27:f3:be:f0 \| 10.0.0.3 \| 10.0.0.1 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
-| | ... | ${tx_dst_mac} | ${tx_src_mac}
-| | ... | ${tx_outer_dst_ip} | ${tx_outer_src_ip}
-| | ... | ${tx_inner_dst_ip} | ${tx_inner_src_ip}
-| | ... | ${rx_dst_mac} | ${rx_src_mac}
-| | ... | ${rx_outer_dst_ip} | ${rx_outer_src_ip}
-| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if}
-| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if}
-| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name}
-| | ... | --tx_dst_mac | ${tx_dst_mac} | --tx_src_mac | ${tx_src_mac}
-| | ... | --tx_outer_dst_ip | ${tx_outer_dst_ip}
-| | ... | --tx_outer_src_ip | ${tx_outer_src_ip}
-| | ... | --tx_inner_dst_ip | ${tx_inner_dst_ip}
-| | ... | --tx_inner_src_ip | ${tx_inner_src_ip}
-| | ... | --rx_dst_mac | ${rx_dst_mac}
-| | ... | --rx_src_mac | ${rx_src_mac}
-| | ... | --rx_outer_dst_ip | ${rx_outer_dst_ip}
-| | ... | --rx_outer_src_ip | ${rx_outer_src_ip}
-| | Run Traffic Script On Node
-| | ... | send_gre_check_gre_headers.py | ${tg_node} | ${args}
-
| Send ICMP echo request and verify answer
| | [Documentation] | Run traffic script that waits for ICMP reply and ignores
| | ... | all other packets.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_node - TG node where run traffic script. Type: dictionary
| | ... | - tg_interface - TG interface where send ICMP echo request.
@@ -820,17 +227,17 @@
| | ... | - dst_ip - Destination IP address. Type: string
| | ... | - src_ip - Source IP address. Type: string
| | ... | - timeout - Wait timeout in seconds (Default: 10). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send ICMP echo request and verify answer \
| | ... | \| ${nodes['TG']} \| eth2 \
| | ... | \| 08:00:27:46:2b:4c \| 08:00:27:66:b8:57 \
| | ... | \| 192.168.23.10 \| 192.168.23.1 \| 10 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${tg_interface}
| | ... | ${dst_mac} | ${src_mac} | ${dst_ip} | ${src_ip} | ${timeout}=${10}
-| | ...
+| |
| | ${tg_interface_name}= | Get interface name | ${tg_node} | ${tg_interface}
| | ${args}= | Catenate | --rx_if ${tg_interface_name}
| | ... | --tx_if ${tg_interface_name} | --dst_mac ${dst_mac}
@@ -842,7 +249,7 @@
| Send IPsec Packet and verify ESP encapsulation in received packet
| | [Documentation] | Send IPsec packet from TG to DUT. Receive IPsec packet\
| | ... | from DUT on TG and verify ESP encapsulation.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - TG node. Type: dictionary
| | ... | - tx_interface - TG Interface 1. Type: string
@@ -861,7 +268,7 @@
| | ... | - r_ip - Remote IP address. Type: string
| | ... | - l_tunnel - Local tunnel IP address (optional). Type: string
| | ... | - r_tunnel - Remote tunnel IP address (optional). Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| ${encr_alg}= \| Crypto Alg AES CBC 128 \|
| | ... | \| ${auth_alg}= \| Integ Alg SHA1 96 \|
@@ -871,12 +278,12 @@
| | ... | \| sixteenbytes_key \| ${auth_alg} \| twentybytessecretkey \
| | ... | \| ${1001} \| ${1000} \| 192.168.3.3 \| 192.168.4.4 \| 192.168.100.2 \
| | ... | \| 192.168.100.3 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${tx_interface} | ${rx_interface} | ${tx_dst_mac}
| | ... | ${rx_src_mac} | ${crypto_alg} | ${crypto_key} | ${integ_alg}
| | ... | ${integ_key} | ${l_spi} | ${r_spi} | ${l_ip} | ${r_ip}
| | ... | ${l_tunnel}=${None} | ${r_tunnel}=${None}
-| | ...
+| |
| | ${tx_src_mac}= | Get Interface Mac | ${node} | ${tx_interface}
| | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_interface}
| | ${rx_dst_mac}= | Get Interface Mac | ${node} | ${tx_interface}
@@ -899,12 +306,12 @@
| Send packet and verify LISP encap
| | [Documentation] | Send ICMP packet to DUT out one interface and receive\
| | ... | a LISP encapsulated packet on the other interface.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -916,21 +323,21 @@
| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string
| | ... | - src_rloc - configured RLOC source address. Type: string
| | ... | - dst_rloc - configured RLOC destination address. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify LISP encap \| ${nodes['TG']} \| 10.0.0.1 \
| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \| 10.0.1.1 \
| | ... | \| 10.0.1.2 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac
@@ -944,12 +351,12 @@
| Send packet and verify LISP GPE encap
| | [Documentation] | Send ICMP packet to DUT out one interface and receive\
| | ... | a LISP-GPE encapsulated packet on the other interface.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -961,22 +368,22 @@
| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string
| | ... | - src_rloc - configured RLOC source address. Type: string
| | ... | - dst_rloc - configured RLOC destination address. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify LISP GPE encap \| ${nodes['TG']} \
| | ... | \| 10.0.0.1 \| 32.0.0.1 \
| | ... | \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \
| | ... | \| 10.0.1.1 \| 10.0.1.2 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port} |
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac
@@ -990,12 +397,12 @@
| Send packet and verify LISPoTunnel encap
| | [Documentation] | Send ICMP packet to DUT out one interface and receive\
| | ... | a LISP encapsulated packet on the other interface.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -1008,21 +415,21 @@
| | ... | - src_rloc - configured RLOC source address. Type: string
| | ... | - dst_rloc - configured RLOC destination address. Type: string
| | ... | - ot_mode - overlay tunnel mode. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify LISP encap \| ${nodes['TG']} \| 10.0.0.1 \
| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \| 10.0.1.1 \
| | ... | \| 10.0.1.2 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc} | ${ot_mode}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac
diff --git a/resources/libraries/robot/shared/vm.robot b/resources/libraries/robot/shared/vm.robot
index c6e5373c8b..bdb1964bd3 100644
--- a/resources/libraries/robot/shared/vm.robot
+++ b/resources/libraries/robot/shared/vm.robot
@@ -21,7 +21,7 @@
| | [Documentation]
| | ... | Start 1..N chains of 1..N QEMU guests (VNFs) with two vhost-user\
| | ... | interfaces and interconnecting NF.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of chains of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
@@ -34,16 +34,16 @@
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
| | ... | - vnf - Network function as a payload. Type: string
| | ... | - pinning - Whether to pin QEMU VMs to specific cores
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure chains of VMs connected via vhost-user
| | ... | \| 1 \| 1 \| False \| 1024 \| False \| False \| vpp \| True \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${jumbo}=${False}
| | ... | ${perf_qemu_qsz}=${1024} | ${use_tuned_cfs}=${False}
| | ... | ${auto_scale}=${True} | ${vnf}=vpp | ${pinning}=${True}
-| | ...
+| |
| | Import Library | resources.libraries.python.QemuManager | ${nodes}
| | ... | WITH NAME | vnf_manager
| | Run Keyword | vnf_manager.Construct VMs on all nodes
@@ -61,7 +61,7 @@
| | [Documentation]
| | ... | Start 1..N chains of 1..N QEMU guests (VNFs) with two vhost-user\
| | ... | interfaces and interconnecting NF on single DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node. Type: dictionary
| | ... | - nf_chains - Number of chains of NFs. Type: integer
@@ -75,18 +75,18 @@
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
| | ... | - vnf - Network function as a payload. Type: string
| | ... | - pinning - Whether to pin QEMU VMs to specific cores
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure chains of NFs connected via vhost-user on single node
| | ... | \| DUT1 \| 1 \| 1 \| False \| 1024 \| False \| False \| vpp \|
| | ... | True \|
-| | ...
+| |
| | [Arguments] | ${node} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${jumbo}=${False} | ${perf_qemu_qsz}=${1024}
| | ... | ${use_tuned_cfs}=${False} | ${auto_scale}=${True} | ${vnf}=vpp
| | ... | ${pinning}=${True}
-| | ...
+| |
| | Import Library | resources.libraries.python.QemuManager | ${nodes}
| | ... | WITH NAME | vnf_manager
| | Run Keyword | vnf_manager.Initialize