aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/robot
diff options
context:
space:
mode:
authorJan Gelety <jgelety@cisco.com>2019-11-12 05:27:43 +0100
committerJan Gelety <jgelety@cisco.com>2019-11-28 18:26:21 +0100
commitd68951ac245150eeefa6e0f4156e4c1b5c9e9325 (patch)
tree487554a7547218d27f0a61ec02b70502c32cdcb4 /resources/libraries/robot
parented0258a440cfad7023d643f717ab78ac568dc59b (diff)
Python3: resources and libraries
Change-Id: I1392c06b1d64f62b141d24c0d42a8e36913b15e2 Signed-off-by: Jan Gelety <jgelety@cisco.com>
Diffstat (limited to 'resources/libraries/robot')
-rw-r--r--resources/libraries/robot/crypto/ipsec.robot40
-rw-r--r--resources/libraries/robot/dpdk/default.robot26
-rw-r--r--resources/libraries/robot/features/acl.robot70
-rw-r--r--resources/libraries/robot/features/gbp.robot28
-rw-r--r--resources/libraries/robot/features/policer.robot27
-rw-r--r--resources/libraries/robot/ip/ip4.robot122
-rw-r--r--resources/libraries/robot/ip/ip6.robot73
-rw-r--r--resources/libraries/robot/ip/nat.robot44
-rw-r--r--resources/libraries/robot/l2/l2_bridge_domain.robot312
-rw-r--r--resources/libraries/robot/l2/l2_patch.robot2
-rw-r--r--resources/libraries/robot/l2/l2_traffic.robot86
-rw-r--r--resources/libraries/robot/l2/l2_xconnect.robot125
-rw-r--r--resources/libraries/robot/l2/tagging.robot36
-rw-r--r--resources/libraries/robot/lb/load_balancer.robot64
-rw-r--r--resources/libraries/robot/overlay/lisp.robot32
-rw-r--r--resources/libraries/robot/overlay/lisp_api.robot172
-rw-r--r--resources/libraries/robot/overlay/lisp_static_adjacency.robot20
-rw-r--r--resources/libraries/robot/overlay/lispgpe.robot12
-rw-r--r--resources/libraries/robot/overlay/srv6.robot121
-rw-r--r--resources/libraries/robot/overlay/vxlan.robot10
-rw-r--r--resources/libraries/robot/performance/performance_configuration.robot50
-rw-r--r--resources/libraries/robot/performance/performance_limits.robot40
-rw-r--r--resources/libraries/robot/performance/performance_utils.robot179
-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
-rw-r--r--resources/libraries/robot/tcp/tcp_setup.robot14
-rw-r--r--resources/libraries/robot/wrk/wrk_utils.robot32
36 files changed, 1314 insertions, 1856 deletions
diff --git a/resources/libraries/robot/crypto/ipsec.robot b/resources/libraries/robot/crypto/ipsec.robot
index a37c18db77..33702a43ae 100644
--- a/resources/libraries/robot/crypto/ipsec.robot
+++ b/resources/libraries/robot/crypto/ipsec.robot
@@ -17,28 +17,28 @@
| Library | resources.libraries.python.IPsecUtil
| Library | resources.libraries.python.IPUtil
| Library | resources.libraries.python.IPv6Util
-| ...
+|
| Documentation | IPsec keywords.
*** Keywords ***
| Generate keys for IPSec
| | [Documentation] | Generate keys for IPsec.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - crypto_alg - Encryption algorithm. Type: enum
| | ... | - integ_alg - Integrity algorithm. Type: enum
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - encr_key - Encryption key. Type: string
| | ... | - auth_key - Integrity key. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| ${encr_alg}= \| Crypto Alg AES CBC 128 \|
| | ... | \| ${auth_alg}= \| Integ Alg SHA1 96 \|
| | ... | \| Generate keys for IPSec \| ${encr_alg} \| ${auth_alg} \|
-| | ...
+| |
| | [Arguments] | ${crypto_alg} | ${integ_alg}
-| | ...
+| |
| | ${encr_key_len}= | Get Crypto Alg Key Len | ${crypto_alg}
| | ${encr_key}= | Generate Random String | ${encr_key_len}
| | ${auth_key_len}= | Get Integ Alg Key Len | ${integ_alg}
@@ -48,26 +48,26 @@
| Configure path for IPSec test
| | [Documentation] | Setup path for IPsec testing TG<-->DUT1.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure path for IPSec test \|
-| | ...
+| |
| | Set Interface State | ${dut1} | ${dut1_if1} | up
| | Set Interface State | ${dut1} | ${dut1_if2} | up
| | Vpp Node Interfaces Ready Wait | ${dut1}
| Configure topology for IPv4 IPsec testing
| | [Documentation] | Setup topology for IPv4 IPsec testing.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - dut_tun_ip - DUT tunnel IP address. Type: string
| | ... | - dut_src_ip - DUT source IP address. Type: string
| | ... | - tg_tun_ip - TG tunnel IP address. Type: string
| | ... | - tg_src_ip - TG source IP address. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv4 IPsec testing \|
-| | ...
+| |
| | Configure path for IPSec test
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen}
@@ -87,16 +87,16 @@
| Configure topology for IPv6 IPsec testing
| | [Documentation] | Setup topology fo IPv6 IPsec testing.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - dut_tun_ip - DUT tunnel IP address. Type: string
| | ... | - dut_src_ip - DUT source IP address. Type: string
| | ... | - tg_tun_ip - TG tunnel IP address. Type: string
| | ... | - tg_src_ip - TG source IP address. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv6 IPsec testing \|
-| | ...
+| |
| | Configure path for IPSec test
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen}
@@ -117,7 +117,7 @@
| Configure manual keyed connection for IPSec
| | [Documentation] | Setup IPsec manual keyed connection on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - VPP node to setup IPsec on. Type: dictionary
| | ... | - interface - Interface to enable IPsec on. Type: string
@@ -131,11 +131,11 @@
| | ... | - 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
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variables:
| | ... | - l_sa_id
| | ... | - r_sa_id
-| | ...
+| |
| | ... | *Example:*
| | ... | \| ${encr_alg}= \| Crypto Alg AES CBC 128 \|
| | ... | \| ${auth_alg}= \| Integ Alg SHA1 96 \|
@@ -143,12 +143,12 @@
| | ... | \| GigabitEthernet0/8/0 \| ${encr_alg} \| sixteenbytes_key \
| | ... | \| ${auth_alg} \| twentybytessecretkey \| ${1000} \| ${1001} \
| | ... | \| 192.168.4.4 \| 192.168.3.3 \| 192.168.100.3 \| 192.168.100.2 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${interface} | ${crypto_alg} | ${crypto_key}
| | ... | ${integ_alg} | ${integ_key} | ${l_spi} | ${r_spi} | ${l_ip}
| | ... | ${r_ip} | ${l_tunnel}=${None} | ${r_tunnel}=${None}
| | ... | ${is_ipv6}=${FALSE}
-| | ...
+| |
| | Set Test Variable | ${l_sa_id} | ${10}
| | Set Test Variable | ${r_sa_id} | ${20}
| | ${spd_id}= | Set Variable | ${1}
@@ -185,7 +185,7 @@
| | ... | DUT1-DUT2 links. Set routing for encrypted traffic on both DUT nodes
| | ... | with prefix /8 and next hop of neighbour DUT or TG interface IPv4
| | ... | address.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | ${dut1_if1_ip4} | 24
diff --git a/resources/libraries/robot/dpdk/default.robot b/resources/libraries/robot/dpdk/default.robot
index 4b8ec0b08b..00c0691864 100644
--- a/resources/libraries/robot/dpdk/default.robot
+++ b/resources/libraries/robot/dpdk/default.robot
@@ -22,23 +22,23 @@
| Start L2FWD on all DUTs
| | [Documentation] | Start the l2fwd with M worker threads and rxqueues N and
| | ... | jumbo support frames on/off on all DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - phy_cores - Number of physical cores to use. Type: integer
| | ... | - rx_queues - Number of RX queues. Type: integer
| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start L2FWD on all DUTs \| ${1} \| ${1} \| ${False} \|
-| | ...
+| |
| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ...
+| |
| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
| | ${thr_count_int} | Convert to Integer | ${phy_cores}
| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']}
| | | ... | ${${dut}_if1} | ${${dut}_if2}
| | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']}
@@ -58,27 +58,28 @@
| | | 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
| Start L3FWD on all DUTs
| | [Documentation] | Start the l3fwd with M worker threads and rxqueues N and
| | ... | jumbo support frames on/off on all DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - phy_cores - Number of physical cores to use. Type: integer
| | ... | - rx_queues - Number of RX queues. Type: integer
| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start L3FWD on all DUTs \| ${1} \| ${1} \| ${False} \|
-| | ...
+| |
| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ...
+| |
| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
| | ${thr_count_int} | Convert to Integer | ${phy_cores}
| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']}
| | | ... | ${${dut}_if1} | ${${dut}_if2}
| | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']}
@@ -99,3 +100,4 @@
| | | 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
diff --git a/resources/libraries/robot/features/acl.robot b/resources/libraries/robot/features/acl.robot
index a70a34c2db..fa94507994 100644
--- a/resources/libraries/robot/features/acl.robot
+++ b/resources/libraries/robot/features/acl.robot
@@ -19,17 +19,17 @@
| | [Documentation]
| | ... | Configure MACIP ACL with required number of not-hitting permit ACEs
| | ... | plus two hitting ACEs for both traffic directions.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - dut_if1 - DUT node interface1 name (Optional). Type: string
| | ... | - dut_if2 - DUT node interface2 name (Optional). Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure MACIP ACLs \| ${nodes['DUT1']} \| GigabitEthernet0/7/0 \
| | ... | \| GigabitEthernet0/8/0 \|
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - src_ip_start - Source IP address start. Type: string
| | ... | - ip_step - IP address step. Type: string
@@ -52,23 +52,23 @@
| | ... | Type: string
| | ... | - tg_mac_mask - MAC address mask for traffic streams.
| | ... | 00:00:00:00:00:00 is a wildcard mask. Type: string
-| | ...
+| |
| | [Arguments] | ${dut} | ${dut_if1}=${NONE} | ${dut_if2}=${NONE}
-| | ...
+| |
| | ${src_ip_int} = | IP To Int | ${src_ip_start}
| | ${src_ip_int} = | Evaluate | ${src_ip_int} - ${ip_step}
-| | ...
+| |
| | ${ip_limit} = | Set Variable | 255.255.255.255
| | ${ip_limit_int} = | IP To Int | ${ip_limit}
-| | ...
+| |
| | ${src_mac_int} = | Mac To Int | ${src_mac_start}
| | ${src_mac_int} = | Evaluate | ${src_mac_int} - ${src_mac_step}
-| | ...
+| |
| | ${mac_limit} = | Set Variable | ff:ff:ff:ff:ff:ff
| | ${mac_limit_int} = | Mac To Int | ${mac_limit}
-| | ...
+| |
| | ${acl}= | Set Variable | ipv4 permit
-| | :FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
+| | FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
| | | ${src_ip_int} = | Evaluate | ${src_ip_int} + ${ip_step}
| | | ${src_mac_int} = | Evaluate | ${src_mac_int} + ${src_mac_step}
| | | ${ipv4_limit_reached}= | Set Variable If
@@ -90,6 +90,7 @@
| | | ${acl}= | Catenate | ${acl} | ip ${src_ip}/32
| | | ... | mac ${src_mac} | mask ${src_mac_mask},
| | | Exit For Loop If | '${ipv4_limit_reached}' == '${TRUE}' or '${mac_limit_reached}' == '${TRUE}'
+| | END
| | ${acl0}= | Catenate | ${acl}
| | ... | ipv4 ${acl_action} ip ${tg_stream1_subnet} mac ${tg_stream1_mac}
| | ... | mask ${tg_mac_mask}
@@ -109,17 +110,17 @@
| | [Documentation]
| | ... | Configure ACL with required number of not-hitting permit ACEs plus two
| | ... | hitting ACEs for both traffic directions.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - dut_if1 - DUT node interface1 name (Optional). Type: string
| | ... | - dut_if2 - DUT node interface2 name (Optional). Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure IPv4 ACLs \| ${nodes['DUT1']} \| GigabitEthernet0/7/0 \
| | ... | \| GigabitEthernet0/8/0 \|
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - src_ip_start - Source IP address start. Type: string
| | ... | - dst_ip_start - Destination IP address start. Type: string
@@ -137,7 +138,7 @@
| | ... | Type: string
| | ... | - trex_stream2_subnet - IP subnet used by T-Rex in direction 1->0.
| | ... | Type: string
-| | ...
+| |
| | [Arguments] | ${dut} | ${dut_if1}=${NONE} | ${dut_if2}=${NONE}
| | ${src_ip_int} = | Evaluate
| | ... | int(ipaddress.ip_address(unicode($src_ip_start))) - $ip_step
@@ -152,7 +153,7 @@
| | ${dport}= | Evaluate | $dport_start - $port_step
| | ${port_limit}= | Set Variable | ${65535}
| | ${acl}= | Set Variable | ipv4 permit
-| | :FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
+| | FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
| | | ${src_ip_int} = | Evaluate | $src_ip_int + $ip_step
| | | ${dst_ip_int} = | Evaluate | $dst_ip_int + $ip_step
| | | ${sport}= | Evaluate | $sport + $port_step
@@ -184,6 +185,7 @@
| | | ... | sport ${sport} | dport ${dport},
| | | Exit For Loop If
| | | ... | $ipv4_limit_reached is True or $udp_limit_reached is True
+| | END
| | ${acl}= | Catenate | ${acl}
| | ... | ipv4 ${acl_action} src ${trex_stream1_subnet},
| | ... | ipv4 ${acl_action} src ${trex_stream2_subnet}
@@ -203,28 +205,29 @@
| Configure ACLs on a single interface
| | [Documentation]
| | ... | Configure ACL
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - dut_if - DUT node interface name. Type: string
| | ... | - acl_apply_type - To what path apply the ACL - input or output.
| | ... | - acl_action - Action for the rule - deny, permit, permit+reflect.
| | ... | - subnets - Subnets to apply the specific ACL. Type: list
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure ACLs on a single interface \| ${nodes['DUT1']}
| | ... | \| ... \| GigabitEthernet0/7/0 \| input \| permit | 0.0.0.0/0
-| | ...
+| |
| | [Arguments] | ${dut} | ${dut_if} | ${acl_apply_type} | ${acl_action}
| | ... | @{subnets}
| | Set Test variable | ${acl} | ${EMPTY}
-| | :FOR | ${subnet} | IN | @{subnets}
+| | FOR | ${subnet} | IN | @{subnets}
| | | ${acl} = | Run Keyword If | '${acl}' == '${EMPTY}'
| | | ... | Set Variable | ipv4 ${acl_action} src ${subnet}
| | | ... | ELSE
| | | ... | Catenate | SEPARATOR=", " | ${acl}
| | | ... | ipv4 ${acl_action} src ${subnet}
+| | END
| | Add Replace Acl Multi Entries | ${dut} | rules=${acl}
| | @{acl_list} = | Create List | ${0}
| | Set Acl List For Interface | ${dut} | ${dut_if} | ${acl_apply_type}
@@ -239,17 +242,17 @@
| | ... | on DUT1-DUT2 link and set routing on both DUT nodes with prefix /24
| | ... | and next hop of neighbour DUT interface IPv4 address.
| | ... | Apply required ACL rules to DUT1 interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ip_nr - Number of IPs to be used. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 routing fwith IPv4 ACLs on DUT1 \
| | ... | in 3-node circular topology \|
-| | ...
+| |
| | [Arguments] | ${ip_nr}=${1}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -258,21 +261,22 @@
| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
-| | :FOR | ${number} | IN RANGE | 2 | ${ip_nr}+2
+| |
+| | FOR | ${number} | IN RANGE | 2 | ${ip_nr}+2
| | | VPP Add IP Neighbor
| | | ... | ${dut1} | ${dut1_if1} | 10.10.10.${number} | ${tg_if1_mac}
| | | VPP Add IP Neighbor
| | | ... | ${dut} | ${dut_if2} | 20.20.20.${number} | ${tg_if2_mac}
+| | END
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
| | ... | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
| | ... | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac}
-| | ...
+| |
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | 10.10.10.1 | 24
| | VPP Interface Set IP Address
@@ -283,12 +287,12 @@
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address
| | ... | ${dut2} | ${dut2_if1} | 1.1.1.2 | 30
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | gateway=1.1.1.2
| | ... | interface=${dut1_if2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Configure IPv4 ACLs | ${dut1} | ${dut1_if1} | ${dut1_if2}
diff --git a/resources/libraries/robot/features/gbp.robot b/resources/libraries/robot/features/gbp.robot
index 8495475639..57ddf6dd1a 100644
--- a/resources/libraries/robot/features/gbp.robot
+++ b/resources/libraries/robot/features/gbp.robot
@@ -13,26 +13,26 @@
*** Settings ***
| Library | resources.libraries.python.GBP
-| ...
+|
| Documentation | GBP keywords.
*** Keywords ***
| Initialize GBP routing domains on node
| | [Documentation]
| | ... | Initialize GBP routing domains on node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of baseline interface variables. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize GBP routing domains 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
| | | ${hexa_id}= | Convert To Hex | ${id} | length=2 | lowercase=yes
| | | ${dut_lo}= | VPP Create Loopback | ${nodes['${dut}']}
| | | ... | mac=ba:dc:00:ff:ee:${hexa_id}
@@ -80,20 +80,22 @@
| | | ... | ${nodes['${dut}']} | ${200} | ${300} | acl_index=${0}
| | | GBP Contract Add Del
| | | ... | ${nodes['${dut}']} | ${300} | ${200} | acl_index=${0}
+| | END
| Initialize GBP routing domains
| | [Documentation]
| | ... | Initialize GBP routing domains on all DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of GBP routing domains. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize GBP routing domains \| 1 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize GBP routing domains on node | ${dut} | count=${count}
+| | END
| | Set interfaces in path up
diff --git a/resources/libraries/robot/features/policer.robot b/resources/libraries/robot/features/policer.robot
index 962f4cf2be..bbabdd7632 100644
--- a/resources/libraries/robot/features/policer.robot
+++ b/resources/libraries/robot/features/policer.robot
@@ -14,7 +14,7 @@
*** Settings ***
| Library | resources.libraries.python.Classify
| Library | resources.libraries.python.Policer
-| ...
+|
| Documentation | Policer keywords
*** Keywords ***
@@ -23,7 +23,7 @@
| | ... | Setup of 2r3c color-aware or color-blind policer with dst IPv4 match
| | ... | on all DUT nodes in 2-node / 3-node circular topology. Policer is
| | ... | applied on links TG - DUTx.
-| | ...
+| |
| | ${policer_index}= | Policer Set Configuration | ${dut1} | policer1 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
| | ... | Mark_and_Transmit | Transmit | ${t} | exceed_dscp=${dscp}
@@ -35,7 +35,7 @@
| | ... | hit_next_index=${policer_index} | opaque_index=${pre_color}
| | Policer Classify Set Interface | ${dut1} | ${dut1_if1}
| | ... | ip4_table_index=${table_idx}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -44,7 +44,7 @@
| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
-| | ...
+| |
| | ${policer_index}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Policer Set Configuration | ${dut} | policer2 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
@@ -65,7 +65,7 @@
| | ... | Setup of 2r3c color-aware or color-blind policer with dst IPv6 match
| | ... | on all DUT nodes in 2-node / 3-node circular topology. Policer is
| | ... | applied on links TG - DUTx.
-| | ...
+| |
| | ${policer_index}= | Policer Set Configuration | ${dut1} | policer1 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
| | ... | Mark_and_Transmit | Transmit | ${t} | exceed_dscp=${dscp}
@@ -77,7 +77,7 @@
| | ... | hit_next_index=${policer_index} | opaque_index=${pre_color}
| | Policer Classify Set Interface | ${dut1} | ${dut1_if1}
| | ... | ip6_table_index=${table_idx}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -86,7 +86,7 @@
| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
-| | ...
+| |
| | ${policer_index}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Policer Set Configuration | ${dut} | policer2 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
@@ -105,16 +105,17 @@
| Show Classify Tables Verbose on all DUTs
| | [Documentation] | Show classify tables verbose on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show Classify Tables Verbose on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show Classify Tables Verbose | ${nodes['${dut}']}
+| | END
diff --git a/resources/libraries/robot/ip/ip4.robot b/resources/libraries/robot/ip/ip4.robot
index 84f422e8bc..961c0b3c43 100644
--- a/resources/libraries/robot/ip/ip4.robot
+++ b/resources/libraries/robot/ip/ip4.robot
@@ -14,7 +14,7 @@
*** Settings ***
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.IPUtil
-| ...
+|
| Documentation | IPv4 keywords
*** Keywords ***
@@ -26,25 +26,25 @@
| | ... | links. In case of 3-node topology setup IPv4 adresses with /30 prefix
| | ... | on DUT1-DUT2 link and set routing on both DUT nodes with prefix /24
| | ... | and next hop of neighbour DUT interface IPv4 address.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - remote_host1_ip - IP address of remote host1 (Optional).
| | ... | Type: string
| | ... | - remote_host2_ip - IP address of remote host2 (Optional).
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 forwarding in circular topology \
| | ... | \| 192.168.0.1 \| 192.168.0.2 \|
-| | ...
+| |
| | [Arguments] | ${remote_host1_ip}=${NONE} | ${remote_host2_ip}=${NONE}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -59,7 +59,7 @@
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 20.20.20.2 | ${tg_if2_mac}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 10.10.10.1 | 24
| | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -70,14 +70,14 @@
| | ... | 1.1.1.2 | 30
| | VPP Interface Set IP Address | ${dut} | ${dut_if2}
| | ... | 20.20.20.1 | 24
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | gateway=1.1.1.2
| | ... | interface=${dut1_if2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 32
| | ... | gateway=10.10.10.2 | interface=${dut1_if1}
@@ -97,25 +97,25 @@
| | [Documentation]
| | ... | Custom setup of IPv4 topology with scalability of ip routes on all
| | ... | DUT nodes in 2-node / 3-node circular topology
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - IP route count. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 forwarding with scaling in 3-node circular \
| | ... | topology \| 100000 \|
-| | ...
+| |
| | [Arguments] | ${count}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -154,18 +154,19 @@
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each
| | ... | Memif interface to separate IPv4 VRF with one physical or
| | ... | virtual interface to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 routing with memif pairs \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize IPv4 routing with memif pairs on DUT node | ${dut} | ${count}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -175,28 +176,28 @@
| | ... | Create pairs of Memif interfaces on DUT node. Put each Memif interface
| | ... | to separate IPv4 VRF with one physical or virtual interface
| | ... | to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: dictionary
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-\${dut}_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 routing with memif pairs on DUT node \
| | ... | \| ${dut} \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}
-| | ...
+| |
| | ${dut_index}= | Get Index From List | ${duts} | ${dut}
| | ${last_dut_index}= | Evaluate | ${duts_count} - ${1}
-| | ...
+| |
| | ${tg_if1_net}= | Set Variable | 10.10.10.0
| | ${tg_if2_net}= | Set Variable | 20.20.20.0
-| | ...
+| |
| | ${fib_table_1}= | Set Variable | ${10}
| | Run Keyword If | ${fib_table_1} > ${0}
| | ... | Add Fib Table | ${nodes['${dut}']} | ${fib_table_1}
@@ -220,7 +221,7 @@
| | ... | ${${prev_node}_${prev_if}}
| | VPP Add IP Neighbor
| | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${ip_net_if1}.1 | ${prev_if_mac}
-| | ...
+| |
| | ${fib_table_2}= | Evaluate | ${fib_table_1} + ${count}
| | Add Fib Table | ${nodes['${dut}']} | ${fib_table_2}
| | ${ip_base_if2}= | Evaluate | ${ip_base_if1} + ${1}
@@ -243,10 +244,10 @@
| | ... | ${${next_node}_${next_if}}
| | VPP Add IP Neighbor
| | ... | ${nodes['${dut}']} | ${${dut}_if2} | ${ip_net_if2}.2 | ${next_if_mac}
-| | ...
+| |
| | ${fib_table_1}= | Evaluate | ${fib_table_1} - ${1}
| | ${ip_base_start}= | Set Variable | ${31}
-| | :FOR | ${number} | IN RANGE | 1 | ${count+${1}}
+| | FOR | ${number} | IN RANGE | 1 | ${count+${1}}
| | | ${sock1}= | Set Variable | memif-${dut}_CNF
| | | ${sock2}= | Set Variable | memif-${dut}_CNF
| | | Set up memif interfaces on DUT node | ${nodes['${dut}']}
@@ -291,6 +292,7 @@
| | | ... | ${memif1} | ${ip_net_memif2}.1 | ${memif_if2_mac}
| | | VPP Add IP Neighbor | ${nodes['${dut}']}
| | | ... | ${memif2} | ${ip_net_memif1}.1 | ${memif_if1_mac}
+| | END
| Initialize IPv4 forwarding with vhost in 2-node circular topology
| | [Documentation]
@@ -302,24 +304,24 @@
| | ... | DUT-TG links. Set routing on DUT nodes in all FIB tables with prefix
| | ... | /8 and next hop of neighbour IPv4 address. Setup ARP on all VPP
| | ... | interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - Number of guest VMs. Type: integer
| | ... | - testpmd_mac - Switch for testpmd_mac test configuration.
| | ... | Type: boolean
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-${VM_ID}-1
| | ... | - /var/run/vpp/sock-${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| IPv4 forwarding with Vhost-User initialized in a 2-node circular\
| | ... | topology \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1} | ${testpmd_mac}=${FALSE}
-| | ...
+| |
| | Set interfaces in path up
| | ${fib_table_1}= | Set Variable | ${101}
| | ${fib_table_2}= | Evaluate | ${fib_table_1}+${nf_nodes}
@@ -337,7 +339,7 @@
| | ... | interface=${dut1_if1} | vrf=${fib_table_1}
| | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=200.0.0.2
| | ... | interface=${dut1_if2} | vrf=${fib_table_2}
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${fib_table_1}= | Evaluate | ${100}+${number}
| | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1}
| | | Configure vhost interfaces | ${dut1}
@@ -373,6 +375,7 @@
| | | Run Keyword If | ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=1.1.1.2
| | | ... | interface=${dut1-vhost-${number}-if2} | vrf=${fib_table_2}
+| | END
| Initialize IPv4 forwarding with vhost in 3-node circular topology
| | [Documentation]
@@ -384,22 +387,22 @@
| | ... | DUT-TG links and /30 prefix on DUT1-DUT2 link. Set routing on all DUT
| | ... | nodes in all FIB tables with prefix /8 and next hop of neighbour IPv4
| | ... | address. Setup ARP on all VPP interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - Number of guest VMs. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-\${VM_ID}-1
| | ... | - /var/run/vpp/sock-\${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| IPv4 forwarding with Vhost-User initialized in a 3-node circular\
| | ... | topology \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1} | ${testpmd_mac}=${FALSE}
-| | ...
+| |
| | Set interfaces in path up
| | ${fib_table_1}= | Set Variable | ${101}
| | ${fib_table_2}= | Evaluate | ${fib_table_1}+${nf_nodes}
@@ -429,7 +432,7 @@
| | ... | interface=${dut2_if1} | vrf=${fib_table_1}
| | Vpp Route Add | ${dut2} | 20.0.0.0 | 8 | gateway=200.0.0.2
| | ... | interface=${dut2_if2} | vrf=${fib_table_2}
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${fib_table_1}= | Evaluate | ${100}+${number}
| | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1}
| | | Configure vhost interfaces | ${dut1}
@@ -498,6 +501,7 @@
| | | Run Keyword If | ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut2} | 10.0.0.0 | 8 | gateway=1.1.1.2
| | | ... | interface=${dut2-vhost-${number}-if2} | vrf=${fib_table_2}
+| | END
| Initialize IPv4 forwarding with VLAN dot1q sub-interfaces in circular topology
| | [Documentation]
@@ -510,7 +514,7 @@
| | ... | with /30 prefix on VLAN and set routing on both DUT nodes with prefix
| | ... | /30. Set next hop of neighbour DUT interface IPv4 address. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_if1_net - TG interface 1 IP subnet used by traffic generator.
| | ... | Type: integer
@@ -518,25 +522,25 @@
| | ... | Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - dut1 - DUT1 node.
| | ... | - dut2 - DUT2 node.
| | ... | - dut1_if2 - DUT1 interface towards DUT2.
| | ... | - dut2_if1 - DUT2 interface towards DUT1.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 forwarding with VLAN dot1q sub-interfaces\
| | ... | in circular topology \| 10.10.10.0 \| 20.20.20.0 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${tg_if1_net} | ${tg_if2_net} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -547,7 +551,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
diff --git a/resources/libraries/robot/ip/ip6.robot b/resources/libraries/robot/ip/ip6.robot
index c4ef0b7c1f..715a5dd353 100644
--- a/resources/libraries/robot/ip/ip6.robot
+++ b/resources/libraries/robot/ip/ip6.robot
@@ -16,7 +16,7 @@
| Library | resources.libraries.python.IPUtil
| Library | resources.libraries.python.IPv6Util
| Library | resources.libraries.python.NodePath
-| ...
+|
| Documentation | IPv6 keywords
*** Keywords ***
@@ -28,25 +28,25 @@
| | ... | links. In case of 3-node topology setup IPv6 adresses with /64 prefix
| | ... | on DUT1-DUT2 link and set routing on both DUT nodes with prefix /64
| | ... | and next hop of neighbour DUT interface IPv4 address.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - remote_host1_ip - IP address of remote host1 (Optional).
| | ... | Type: string
| | ... | - remote_host2_ip - IP address of remote host2 (Optional).
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv6 forwarding in circular topology \
| | ... | \| 3ffe:5f::1 \| 3ffe:5f::2 \|
-| | ...
+| |
| | [Arguments] | ${remote_host1_ip}=${NONE} | ${remote_host2_ip}=${NONE}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -61,23 +61,23 @@
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 2001:2::2 | ${tg_if2_mac}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:1::1 | 64
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 2001:3::1 | 64
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 2001:3::2 | 64
| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 2001:2::1 | 64
-| | ...
+| |
| | Vpp All Ra Suppress Link Layer | ${nodes}
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | 2001:2::0 | 64 | gateway=2001:3::2
| | ... | interface=${dut1_if2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 2001:1::0 | 64 | gateway=2001:3::1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 128
| | ... | gateway=2001:1::2 | interface=${dut1_if1}
@@ -97,25 +97,25 @@
| | [Documentation]
| | ... | Custom setup of IPv6 topology with scalability of ip routes on all
| | ... | DUT nodes in 2-node / 3-node circular topology
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - IP route count. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv6 forwarding with scaling in circular \
| | ... | topology \| 100000 \|
-| | ...
+| |
| | [Arguments] | ${count}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${prefix}= | Set Variable | 64
| | ${host_prefix}= | Set Variable | 128
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:3::1 | ${prefix}
@@ -162,22 +162,22 @@
| | ... | DUT-TG links. Set routing on DUT nodes in all FIB tables with \
| | ... | prefix /64 and next hop of neighbour IPv6 address. Setup neighbours \
| | ... | on all VPP interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - Number of guest VMs. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-${VM_ID}-1
| | ... | - /var/run/vpp/sock-${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| IPv6 forwarding with Vhost-User initialized in a 2-node circular\
| | ... | topology \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1}
-| | ...
+| |
| | Vpp All Ra Suppress Link Layer | ${nodes}
| | Set interfaces in path up
| | ${prefix}= | Set Variable | 64
@@ -199,7 +199,7 @@
| | ... | interface=${dut1_if1} | vrf=${fib_table_1}
| | Vpp Route Add | ${dut1} | 2001:2::0 | 64 | gateway=2001:200::2
| | ... | interface=${dut1_if2} | vrf=${fib_table_2}
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${fib_table_1}= | Evaluate | ${100}+${number}
| | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1}
| | | Configure vhost interfaces | ${dut1}
@@ -221,6 +221,7 @@
| | | ... | interface=${dut1-vhost-${number}-if1} | vrf=${fib_table_1}
| | | Vpp Route Add | ${dut1} | 2001:1::0 | 64 | gateway=1:2::1
| | | ... | interface=${dut1-vhost-${number}-if2} | vrf=${fib_table_2}
+| | END
| Initialize IPv6 forwarding with VLAN dot1q sub-interfaces in circular topology
| | [Documentation]
@@ -233,7 +234,7 @@
| | ... | with /64 prefix on VLAN and set routing on both DUT nodes with prefix
| | ... | /64. Set next hop of neighbour DUT interface IPv6 address. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_if1_net - TG interface 1 IPv6 subnet used by traffic generator.
| | ... | Type: integer
@@ -241,25 +242,25 @@
| | ... | Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - dut1 - DUT1 node.
| | ... | - dut2 - DUT2 node.
| | ... | - dut1_if2 - DUT1 interface towards DUT2.
| | ... | - dut2_if1 - DUT2 interface towards DUT1.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv6 forwarding with VLAN dot1q sub-interfaces\
| | ... | in circular topology \| 2001:1::0 \| 2001:2::0 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${tg_if1_net} | ${tg_if2_net} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -270,7 +271,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | ${prefix}= | Set Variable | 64
| | ${host_prefix}= | Set Variable | 64
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2002:1::1 | ${tg_if1_mac}
diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot
index bff8b27dbf..bb44fa1a18 100644
--- a/resources/libraries/robot/ip/nat.robot
+++ b/resources/libraries/robot/ip/nat.robot
@@ -13,32 +13,32 @@
*** Settings ***
| Library | resources.libraries.python.NATUtil
-| ...
+|
| Documentation | Keywords for NAT feature in VPP.
*** Keywords ***
| Configure inside and outside interfaces
| | [Documentation] | Configure inside and outside interfaces for NAT44.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node to set NAT44 interfaces on. Type: dictionary
| | ... | - int_in - Inside interface. Type: string
| | ... | - int_out - Outside interface. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure inside and outside interfaces \| ${nodes['DUT1']} \
| | ... | \| FortyGigabitEtherneta/0/0 \| FortyGigabitEtherneta/0/1 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${int_in} | ${int_out}
-| | ...
+| |
| | ${int_in_name}= | Set variable | ${node['interfaces']['${int_in}']['name']}
| | ${int_out_name}= | Set variable | ${node['interfaces']['${int_out}']['name']}
| | Set NAT44 Interfaces | ${node} | ${int_in_name} | ${int_out_name}
| Configure deterministic mode for NAT44
| | [Documentation] | Set deterministic behaviour of NAT44.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node to set deterministic mode for NAT44 on.
| | ... | Type: dictionary
@@ -46,29 +46,29 @@
| | ... | - subnet_in - Inside IP subnet. Type: string
| | ... | - ip_out - Outside IP. Type: string
| | ... | - subnet_out - Outside IP subnet. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure deterministic mode for NAT44 \| ${nodes['DUT1']} \
| | ... | \| 100.0.0.0 \| 12 \| 12.1.1.0 \| 24 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} | ${subnet_out}
-| | ...
+| |
| | Set NAT44 deterministic | ${node} | ${ip_in} | ${subnet_in} | ${ip_out}
| | ... | ${subnet_out}
| Show NAT verbose
| | [Documentation] | Get the NAT settings on the node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node to show NAT. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show NAT verbose \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${node}
-| | ...
+| |
| | Show NAT | ${node}
| Initialize NAT44 in circular topology
@@ -79,12 +79,12 @@
| | ... | - set ARP
| | ... | - create routes
| | ... | - set NAT44 - only on DUT1
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 10.0.0.1 | 20
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
@@ -99,7 +99,7 @@
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 12.0.0.1 | 20
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.0.0.2 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -108,7 +108,7 @@
| | ... | VPP Add IP Neighbor
| | ... | ${dut2} | ${dut2_if1} | 11.0.0.1 | ${dut1_if2_mac}
| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 12.0.0.2 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 20.0.0.0 | 18 | gateway=10.0.0.2
| | ... | interface=${dut1_if1}
| | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -120,7 +120,7 @@
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 200.0.0.0 | 30 | gateway=11.0.0.1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Configure inside and outside interfaces
| | ... | ${dut1} | ${dut1_if1} | ${dut1_if2}
| | Configure deterministic mode for NAT44
diff --git a/resources/libraries/robot/l2/l2_bridge_domain.robot b/resources/libraries/robot/l2/l2_bridge_domain.robot
index 6c16ed447f..a85cb70ab9 100644
--- a/resources/libraries/robot/l2/l2_bridge_domain.robot
+++ b/resources/libraries/robot/l2/l2_bridge_domain.robot
@@ -21,28 +21,29 @@
*** Keywords ***
| Show Bridge Domain Data On All DUTs
| | [Documentation] | Show Bridge Domain data on all DUTs.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | VPP Get Bridge Domain Data | ${nodes['${dut}']}
+| | END
| Create bridge domain
| | [Documentation]
| | ... | Create bridge domain on given VPP node with defined learning status.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${dut_node} - DUT node. Type: dictionary
| | ... | - ${bd_id} - Bridge domain ID. Type: integer
| | ... | - ${learn} - Enable/disable MAC learn. Type: boolean, \
| | ... | default value: ${TRUE}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Create bridge domain \| ${nodes['DUT1']} \| 2 \|
| | ... | \| Create bridge domain \| ${nodes['DUT1']} \| 5 \
| | ... | \| learn=${FALSE} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${bd_id} | ${learn}=${TRUE}
-| | ...
+| |
| | ${learn} = | Set Variable If | ${learn} == ${TRUE} | ${1} | ${0}
| | Create L2 BD | ${dut_node} | ${bd_id} | learn=${learn}
@@ -50,20 +51,20 @@
| | [Documentation]
| | ... | Set given interface admin state to up and add this
| | ... | interface to required L2 bridge domain on defined VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${dut_node} - DUT node. Type: dictionary
| | ... | - ${dut_if} - DUT node interface name. Type: string
| | ... | - ${bd_id} - Bridge domain ID. Type: integer
| | ... | - ${shg} - Split-horizon group ID. Type: integer, default value: 0
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Add interface to bridge domain \| ${nodes['DUT2']} \
| | ... | \| GigabitEthernet0/8/0 \| 3 \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${dut_if} | ${bd_id} | ${shg}=0
-| | ...
+| |
| | Set Interface State | ${dut_node} | ${dut_if} | up
| | Add Interface To L2 BD | ${dut_node} | ${dut_if} | ${bd_id} | ${shg}
@@ -72,41 +73,43 @@
| | ... | Setup L2 bridge domain topology by adding two interfaces on DUT into
| | ... | separate bridge domains that are created automatically starting with
| | ... | index 1. Learning is enabled. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of bridge domains interfaces. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domain on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1}
-| | ...
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| |
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | Add Interface To L2 BD
| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} | ${id}
| | | Add Interface To L2 BD
| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} | ${id}
+| | END
| Initialize L2 bridge domain
| | [Documentation]
| | ... | Setup L2 bridge domain topology by adding two interfaces on each DUT
| | ... | into separate bridge domains that are created automatically starting
| | ... | with index 1. Learning is enabled. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of bridge domains. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domain \| 1 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 bridge domain on node | ${dut} | count=${count}
+| | END
| Initialize L2 bridge domains with Vhost-User on node
| | [Documentation]
@@ -114,24 +117,24 @@
| | ... | defined VPP node. Add each Vhost-User interface into L2 bridge
| | ... | domains with learning enabled with physical inteface or Vhost-User
| | ... | interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-\${VM_ID}-1
| | ... | - /var/run/vpp/sock-\${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with Vhost-User on node \| DUT1 \
| | ... | \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${nf_chain}=${1} | ${nf_nodes}=${1}
-| | ...
+| |
| | ${bd_id1}= | Evaluate | ${nf_nodes} * (${nf_chain} - 1) + ${nf_chain}
| | ${bd_id2}= | Evaluate | ${nf_nodes} * ${nf_chain} + ${nf_chain}
| | ${dut_str}= | Convert To Lowercase | ${dut}
@@ -141,7 +144,7 @@
| | Add interface to bridge domain
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_2}
| | ... | ${bd_id2}
-| | :FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes} + 1
+| | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes} + 1
| | | ${qemu_id}= | Evaluate | (${nf_chain} - ${1}) * ${nf_nodes} + ${nf_node}
| | | Configure vhost interfaces
| | | ... | ${nodes['${dut}']}
@@ -153,6 +156,7 @@
| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${qemu_id}-if1} | ${bd_id1}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${qemu_id}-if2} | ${bd_id2}
+| | END
| Initialize L2 bridge domains with Vhost-User
| | [Documentation]
@@ -160,20 +164,21 @@
| | ... | on all defined VPP nodes. Add each Vhost-User interface into L2 bridge
| | ... | domains with learning enabled with physical inteface or Vhost-User
| | ... | interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with Vhost-User \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chain}=${1} | ${nf_nodes}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 bridge domains with Vhost-User on node
| | | ... | ${dut} | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
+| | END
| Initialize L2 bridge domains for multiple chains with Vhost-User
| | [Documentation]
@@ -182,24 +187,25 @@
| | ... | Vhost-User interface into L2 bridge domains with learning enabled
| | ... | with physical inteface or Vhost-User interface of another VM.
| | ... | Put all interfaces in path up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of chains of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - start - Id of first chain, allows to add chains during test.
| | ... | Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains for multiple chains with Vhost-User \
| | ... | \| 3 \| 1 \| 2 \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${start}=${1}
-| | ...
+| |
| | Set interfaces in path up
-| | :FOR | ${nf_chain} | IN RANGE | ${start} | ${nf_chains} + 1
+| | FOR | ${nf_chain} | IN RANGE | ${start} | ${nf_chains} + 1
| | | Initialize L2 bridge domains with Vhost-User
| | | ... | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
+| | END
| Initialize L2 bridge domain with VXLANoIPv4 in 3-node circular topology
| | [Documentation]
@@ -208,7 +214,7 @@
| | ... | up. IPv4 addresses with prefix /24 are configured on interfaces
| | ... | between DUTs. VXLAN sub-interfaces has same IPv4 address as
| | ... | interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1
| | ... | 24
@@ -232,26 +238,26 @@
| | ... | domain on each DUT. All interfaces are brought up. IPv4 addresses
| | ... | with prefix /32 are configured on interfaces between DUTs. VXLAN
| | ... | sub-interfaces has same IPv4 address as interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - vxlan_count - VXLAN count. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domain with VLAN and VXLANoIPv4 in 3-node \
| | ... | \| circular topology \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${vxlan_count}=${1}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${bd_id_start}= | Set Variable | ${1}
| | ${vni_start} = | Set Variable | ${20}
-| | ...
+| |
| | ${ip_step} = | Set Variable | ${2}
| | ${dut1_ip_start}= | Set Variable | 172.16.0.1
| | ${dut2_ip_start}= | Set Variable | 172.16.0.2
-| | ...
+| |
| | Vpp create multiple VXLAN IPv4 tunnels | node=${dut1}
| | ... | node_vxlan_if=${dut1_if2} | node_vlan_if=${dut1_if1}
| | ... | op_node=${dut2} | op_node_if=${dut2_if1} | n_tunnels=${vxlan_count}
@@ -274,18 +280,18 @@
| | ... | interfaces on each DUT. All interfaces are brought up.
| | ... | IPv4 addresses with prefix /24 are configured on interfaces between
| | ... | DUTs. VXLAN sub-interfaces has same IPv4 address as interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| L2 bridge domains with Vhost-User and VXLANoIPv4 initialized in a\
| | ... | 3-node circular topology \| 1 \| 2 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1
| | ... | 24
| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2
@@ -317,38 +323,38 @@
| | ... | interfaces on the DUT. All interfaces are brought up.
| | ... | IPv4 addresses with prefix /24 are configured on interfaces between
| | ... | DUT and TG.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_address - Address of physical interface on DUT1. Type: string
| | ... | - dut1_address_subnet - Subnet of the address of physical interface on
-| | ... | DUT1. Type: string
+| | ... | DUT1. Type: string
| | ... | - dut2_address - Address of physical interface on DUT2. Type: string
| | ... | - dut2_address_subnet - Subnet of the address of physical interface on
-| | ... | DUT2. Type: string
+| | ... | DUT2. Type: string
| | ... | - dut1_gw - Address of the _gateway_ to which the traffic will be
-| | ... | forwarded on DUT1. Type: string
+| | ... | forwarded on DUT1. Type: string
| | ... | - dut2_gw - Address of the _gateway_ to which the traffic will be
-| | ... | forwarded on DUT2. Type: string
+| | ... | forwarded on DUT2. Type: string
| | ... | - dut1_vxlans - List of VXLAN params to be configured on DUT1.
-| | ... | Type: list of dicts, dict params vni, vtep
+| | ... | Type: list of dicts, dict params vni, vtep
| | ... | - dut2_vxlans - List of VXLAN params to be configured on DUT2.
-| | ... | Type: list of dicts, dict params vni, vtep
-| | ... | - dut1_route_subnet - Subnet address to forward to _gateway_ on DUT1.
-| | ... | Type: string
-| | ... | - dut1_route_mask - Subnet address mask to forward to _gateway_
-| | ... | on DUT1. Type: string
-| | ... | - dut2_route_subnet - Subnet address to forward to _gateway_ on DUT2.
-| | ... | Type: string
-| | ... | - dut2_route_mask - Subnet address mask to forward to _gateway_
-| | ... | on DUT2. Type: string
-| | ...
+| | ... | Type: list of dicts, dict params vni, vtep
+| | ... | - dut1_route_subnet - Subnet address to forward to _gateway_ on DUT1.
+| | ... | Type: string
+| | ... | - dut1_route_mask - Subnet address mask to forward to _gateway_
+| | ... | on DUT1. Type: string
+| | ... | - dut2_route_subnet - Subnet address to forward to _gateway_ on DUT2.
+| | ... | Type: string
+| | ... | - dut2_route_mask - Subnet address mask to forward to _gateway_
+| | ... | on DUT2. Type: string
+| |
| | ... | *Example:*
-| | ...
+| |
| | [Arguments] | ${dut1_address} | ${dut1_address_subnet} |
| | ... | ${dut2_address} | ${dut2_address_subnet} | ${dut1_gw} | ${dut2_gw} |
| | ... | ${dut1_vxlans} | ${dut2_vxlans} | ${dut1_route_subnet} |
| | ... | ${dut1_route_mask} | ${dut2_route_subnet} | ${dut2_route_mask}
-| | ...
+| |
| | Configure vhost interfaces | ${dut1}
| | ... | /var/run/vpp/sock-1-${dut1_bd_id1}
| | ... | /var/run/vpp/sock-1-${dut1_bd_id2}
@@ -359,14 +365,16 @@
| | ${dut1_bd_id1}= | Set Variable | 1
| | ${dut1_bd_id2}= | Set Variable | 2
| | ${dut2_bd_id1}= | Set Variable | 1
-| | :FOR | ${vxlan} | IN | @{dut1_vxlans}
+| | FOR | ${vxlan} | IN | @{dut1_vxlans}
| | | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | ${vxlan.vni}
| | | ... | ${dut1_address} | ${vxlan.vtep}
| | | Add interface to bridge domain | ${dut1} | ${dut1s_vxlan} | ${dut1_bd_id1}
-| | :FOR | ${vxlan} | IN | @{dut2_vxlans}
+| | END
+| | FOR | ${vxlan} | IN | @{dut2_vxlans}
| | | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | ${vxlan.vni}
| | | ... | ${dut2_address} | ${vxlan.vtep}
| | | Add interface to bridge domain | ${dut2} | ${dut2s_vxlan} | ${dut2_bd_id1}
+| | END
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | ${dut1_gw} | ${tg_if1_mac}
| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | ${dut2_gw} | ${tg_if2_mac}
| | Vpp Route Add | ${dut1} | ${dut1_route_subnet} | ${dut1_route_mask}
@@ -385,31 +393,31 @@
| | ... | topology create VLAN sub-interfaces between DUTs. In case of 2-node
| | ... | topology create VLAN sub-interface on dut1-if2 interface. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - dut1 - DUT1 node.
| | ... | - dut2 - DUT2 node.
| | ... | - dut1_if2 - DUT1 interface towards DUT2.
| | ... | - dut2_if1 - DUT2 interface towards DUT1.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with VLAN dot1q sub-interfaces
| | ... | in a 3-node circular topology \| 1 \| 2 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -420,7 +428,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1}
| | Add interface to bridge domain | ${dut1} | ${subif_index_1} | ${bd_id1}
| | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -437,25 +445,25 @@
| | ... | with physical inteface. In case of 3-node topology create VLAN
| | ... | sub-interfaces between DUTs. In case of 2-node topology create VLAN
| | ... | sub-interface on dut1-if2 interface. All interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| L2 bridge domains with Vhost-User and VLAN initialized in circular\
| | ... | topology \| 1 \| 2 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -466,7 +474,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | Configure vhost interfaces | ${dut1}
| | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2}
| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1}
@@ -496,7 +504,7 @@
| | ... | interface towards TG and other Vhost-User interface into L2 bridge
| | ... | domains with learning enabled with VLAN sub-interface. All interfaces
| | ... | are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
@@ -504,16 +512,16 @@
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
| | ... | - bond_mode - Link bonding mode. Type: string
| | ... | - lb_mode - Load balance mode. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with Vhost-User and VLAN with VPP\
| | ... | link bonding in a 3-node circular topology \| 1 \| 2 \
| | ... | \| 10 \| pop-1 \| xor \| l34 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
| | ... | ${bond_mode} | ${lb_mode}
-| | ...
+| |
| | Set interfaces in path up
| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface | ${dut1} | ${bond_mode}
| | ... | ${lb_mode}
@@ -570,26 +578,26 @@
| | ... | Create pairs of Memif interfaces on DUT node. Put each Memif interface
| | ... | to separate L2 bridge domain with one physical or memif interface
| | ... | to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: dictionary
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-\${dut}_CNF\${nf_id}-\${sid}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain with memif pairs on DUT node \
| | ... | \| ${dut} \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${nf_chain}=${1} | ${nf_nodes}=${1}
| | ... | ${auto_scale}=${True}
-| | ...
+| |
| | ${rxq}= | Run Keyword If | ${auto_scale} == ${True}
| | ... | Set Variable | ${rxq_count_int}
| | ... | ELSE | Set Variable | ${1}
@@ -602,7 +610,7 @@
| | Add interface to bridge domain
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_2}
| | ... | ${bd_id2}
-| | :FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${nf_id}= | Evaluate | (${nf_chain} - ${1}) * ${nf_nodes} + ${nf_node}
| | | ${sock1}= | Set Variable | memif-${dut}_CNF
| | | ${sock2}= | Set Variable | memif-${dut}_CNF
@@ -615,29 +623,31 @@
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id}-if1} | ${bd_id1}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id}-if2} | ${bd_id2}
+| | END
| Initialize L2 Bridge Domain with memif pairs
| | [Documentation]
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each
| | ... | Memif interface to separate L2 bridge domain with one physical or
| | ... | virtual interface to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain with memif pairs \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chain}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 Bridge Domain with memif pairs on DUT node | ${dut}
| | | ... | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
| | | ... | auto_scale=${auto_scale}
+| | END
| Initialize L2 Bridge Domain for multiple chains with memif pairs
| | [Documentation]
@@ -645,23 +655,24 @@
| | ... | with defined number of NF nodes on all defined VPP nodes. Add each
| | ... | Memif interface into L2 bridge domains with learning enabled
| | ... | with physical inteface or Memif interface of another NF.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of chains of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for multiple chains with memif pairs \
| | ... | \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
-| | :FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
+| |
+| | FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
| | | Initialize L2 Bridge Domain with memif pairs | nf_chain=${nf_chain}
| | | ... | nf_nodes=${nf_nodes} | auto_scale=${auto_scale}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -671,26 +682,26 @@
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each
| | ... | Memif interface to separate L2 bridge domain with one physical or
| | ... | virtual interface to create a service pipeline on DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chain - NF pipe. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per pipeline. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for pipeline with memif pairs \
| | ... | \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chain}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
+| |
| | ${rxq}= | Run Keyword If | ${auto_scale} == ${True}
| | ... | Set Variable | ${rxq_count_int}
| | ... | ELSE | Set Variable | ${1}
| | ${bd_id1}= | Evaluate | ${nf_nodes} * (${nf_chain} - 1) + ${nf_chain}
| | ${bd_id2}= | Evaluate | ${nf_nodes} * ${nf_chain} + ${nf_chain}
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_1}
@@ -714,6 +725,7 @@
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id_frst}-if1} | ${bd_id1}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id_last}-if2} | ${bd_id2}
+| | END
| Initialize L2 Bridge Domain for multiple pipelines with memif pairs
| | [Documentation]
@@ -721,24 +733,25 @@
| | ... | with defined number of NF nodes on all defined VPP nodes. Add each
| | ... | Memif interface into L2 bridge domains with learning enabled
| | ... | with physical inteface or Memif interface of another NF.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of pipelines of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per pipeline. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for multiple pipelines with memif \
| | ... | pairs \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
-| | :FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
+| |
+| | FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
| | | Initialize L2 Bridge Domain for pipeline with memif pairs
| | | ... | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
| | | ... | auto_scale=${auto_scale}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -751,25 +764,25 @@
| | ... | 3-node topology create VLAN sub-interfaces between DUTs. In case of
| | ... | 2-node topology create VLAN sub-interface on dut1-if2 interface. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain with memif pairs and VLAN in circular\
| | ... | topology \| 1 \| 2 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -780,7 +793,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | ${number}= | Set Variable | ${1}
| | ${sock1}= | Set Variable | memif-DUT1_CNF
| | ${sock2}= | Set Variable | memif-DUT1_CNF
@@ -816,7 +829,7 @@
| | ... | ${bd_id2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2}
-| | ...
+| |
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -824,24 +837,24 @@
| | [Documentation]
| | ... | Create single Memif interface on all defined VPP nodes. Put Memif
| | ... | interface to separate L2 bridge domain with one physical interface.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - number - Memif ID. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-DUT1_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for single memif \| 1 \|
-| | ...
+| |
| | [Arguments] | ${number}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${sock}= | Set Variable | memif-${dut}_CNF
| | | ${sid}= | Evaluate | (${number} * ${2}) - ${1}
| | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock}
@@ -851,6 +864,7 @@
| | | ... | ${number}
| | | Add interface to bridge domain | ${nodes['${dut}']}
| | | ... | ${${dut}-memif-${number}-if1} | ${number}
+| | END
| | Set single interfaces in path up
| | Show Memif on all DUTs | ${nodes}
@@ -860,7 +874,7 @@
| | ... | domain that is created automatically with index 1. Learning is
| | ... | enabled. Interfaces are brought up. Apply required MACIP ACL rules to
| | ... | DUT1 interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Add L2 Bridge Domain | ${dut1} | ${1} | ${dut1_if1} | ${dut1_if2}
| | Configure L2XC | ${dut2} | ${dut2_if1} | ${dut2_if2}
@@ -872,7 +886,7 @@
| | ... | domain that is created automatically with index 1. Learning is
| | ... | enabled. Interfaces are brought up. Apply required ACL rules to DUT1
| | ... | interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Add L2 Bridge Domain | ${dut1} | ${1} | ${dut1_if1} | ${dut1_if2}
| | Configure L2XC | ${dut2} | ${dut2_if1} | ${dut2_if2}
diff --git a/resources/libraries/robot/l2/l2_patch.robot b/resources/libraries/robot/l2/l2_patch.robot
index 196d9e5d7e..836e281758 100644
--- a/resources/libraries/robot/l2/l2_patch.robot
+++ b/resources/libraries/robot/l2/l2_patch.robot
@@ -20,7 +20,7 @@
| | [Documentation]
| | ... | Setup L2 patch topology by cross connecting two interfaces on
| | ... | each DUT. Interfaces are brought up.
-| | ...
+| |
| | Set interfaces in path up
| | :FOR | ${dut} | IN | @{duts}
| | | VPP Setup Bidirectional L2 patch
diff --git a/resources/libraries/robot/l2/l2_traffic.robot b/resources/libraries/robot/l2/l2_traffic.robot
index 93506d585e..eac0be446b 100644
--- a/resources/libraries/robot/l2/l2_traffic.robot
+++ b/resources/libraries/robot/l2/l2_traffic.robot
@@ -22,9 +22,9 @@
| | [Documentation] | Send IPv4/IPv6 packet from source interface to \
| | ... | destination interface. Packet can be set with Dot1q or
| | ... | Dot1ad tag(s) when required.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | - tg_node - TG node. Type: dictionary
| | ... | - src_int - Source interface. Type: string
| | ... | - dst_int - Destination interface. Type: string
@@ -37,15 +37,15 @@
| | ... | (Optional). Type: string
| | ... | - vlan1_rx - VLAN (outer) tag on RX side (Optional). Type: integer
| | ... | - vlan2_rx - VLAN inner tag on RX side (Optional). Type: integer
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | _NOTE:_ Default IP is IPv4
-| | ...
+| |
| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
@@ -59,12 +59,12 @@
| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut1} \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=110 \
| | ... | \| encaps_rx=Dot1q \| vlan1_rx=120 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${tx_src_port} | ${rx_dst_port}
| | ... | ${src_ip}=192.168.100.1 | ${dst_ip}=192.168.100.2
| | ... | ${encaps}=${EMPTY} | ${vlan1}=${EMPTY} | ${vlan2}=${EMPTY}
| | ... | ${encaps_rx}=${EMPTY} | ${vlan1_rx}=${EMPTY} | ${vlan2_rx}=${EMPTY}
-| | ...
+| |
| | ${tx_src_mac}= | Get Interface Mac | ${tg_node} | ${tx_src_port}
| | ${rx_dst_mac}= | Get Interface Mac | ${tg_node} | ${rx_dst_port}
| | Then Send packet and verify headers
@@ -75,66 +75,30 @@
| | ... | encaps_rx=${encaps_rx} | vlan_rx=${vlan1_rx}
| | ... | vlan_outer_rx=${vlan2_rx}
-| ICMP packet transmission should fail
-| | [Documentation] | Send ICMPv4/ICMPv6 echo request from source interface to
-| | ... | destination interface and expect failure with
-| | ... | ICMP echo Rx timeout error message.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - tg_node - TG node. Type: dictionary
-| | ... | - src_int - Source interface. Type: string
-| | ... | - dst_int - Destination interface. Type: string
-| | ... | - src_ip - Source IP address (Optional). Type: string
-| | ... | - dst_ip - Destination IP address (Optional). Type: string
-| | ...
-| | ... | *Return:*
-| | ...
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | _NOTE:_ Default IP is IPv4
-| | ...
-| | ... | \| ICMP packet transmission should fail\| ${nodes['TG']} \
-| | ... | \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_int} | ${dst_int} |
-| | ... | ${src_ip}=192.168.100.1 | ${dst_ip}=192.168.100.2
-| | ...
-| | ${src_mac}= | Get Interface Mac | ${tg_node} | ${src_int}
-| | ${dst_mac}= | Get Interface Mac | ${tg_node} | ${dst_int}
-| | ${src_int_name}= | Get interface name | ${tg_node} | ${src_int}
-| | ${dst_int_name}= | Get interface name | ${tg_node} | ${dst_int}
-| | ${args}= | Traffic Script Gen Arg | ${dst_int_name} | ${src_int_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Keyword And Expect Error | IP echo Rx timeout |
-| | ... | Run Traffic Script On Node | send_ip_icmp.py | ${tg_node} | ${args}
-
| Send IPv4 bidirectionally and verify received packets
| | [Documentation] | Send IPv4 packets from both directions,
| | ... | from interface1 to interface2 and from interface2 to interface1.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | - tg_node - TG node. Type: dictionary
| | ... | - src_int - Source interface. Type: string
| | ... | - dst_int - Destination interface. Type: string
| | ... | - src_ip - Source IP address (Optional). Type: string
| | ... | - dst_ip - Destination IP address (Optional). Type: string
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send IPv4 bidirectionally and verify received packets \
| | ... | \| ${nodes['TG']} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${int1} | ${int2} | ${src_ip}=192.168.100.1 |
| | ... | ${dst_ip}=192.168.100.2
-| | ...
+| |
| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int1} | ${int2} | ${src_ip} | ${dst_ip}
| | Send IP packet and verify received packet
@@ -143,27 +107,27 @@
| Send IPv6 bidirectionally and verify received packets
| | [Documentation] | Send IPv6 packets from both directions,
| | ... | from interface1 to interface2 and from interface2 to interface1.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | - tg_node - TG node. Type: dictionary
| | ... | - src_int - Source interface. Type: string
| | ... | - dst_int - Destination interface. Type: string
| | ... | - src_ip - Source IP address (Optional). Type: string
| | ... | - dst_ip - Destination IP address (Optional). Type: string
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send IPv6 bidirectionally and verify received packets \
| | ... | \| ${nodes['TG']} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${int1} | ${int2} | ${src_ip}=3ffe:63::1 |
| | ... | ${dst_ip}=3ffe:63::2
-| | ...
+| |
| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int1} | ${int2} | ${src_ip} | ${dst_ip}
| | Send IP packet and verify received packet
diff --git a/resources/libraries/robot/l2/l2_xconnect.robot b/resources/libraries/robot/l2/l2_xconnect.robot
index 42fe837676..a0c1c24a5d 100644
--- a/resources/libraries/robot/l2/l2_xconnect.robot
+++ b/resources/libraries/robot/l2/l2_xconnect.robot
@@ -27,45 +27,47 @@
| | [Documentation]
| | ... | Setup L2 cross connect topology by connecting RX/TX of two interfaces
| | ... | on each DUT. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of interfaces pairs to connect. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 cross connect on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1}
-| | ...
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| |
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | VPP Setup Bidirectional Cross Connect | ${nodes['${dut}']}
| | | ... | ${${dut_str}_${prev_layer}_${id}_1}
| | | ... | ${${dut_str}_${prev_layer}_${id}_2}
+| | END
| Initialize L2 cross connect
| | [Documentation]
| | ... | Setup L2 cross connect topology by connecting RX/TX of two interfaces
| | ... | on each DUT. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of interfaces pairs to connect. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 cross connect \| 1 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 cross connect on node | ${dut} | count=${count}
+| | END
| Initialize L2 xconnect in 2-node circular topology
| | [Documentation]
| | ... | Setup L2 xconnect topology by cross connecting two interfaces on
| | ... | each DUT. Interfaces are brought up.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Setup Bidirectional Cross Connect | ${dut1} | ${dut1_if1} | ${dut1_if2}
@@ -85,7 +87,7 @@
| | ... | up. IPv4 addresses with prefix /24 are configured on interfaces
| | ... | between DUTs. VXLAN sub-interfaces has same IPv4 address as
| | ... | interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1 | 24
| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2 | 24
@@ -103,23 +105,23 @@
| | ... | Create pairs of Vhost-User interfaces for defined number of VMs on
| | ... | defined VPP node. Add each Vhost-User interface into L2 cross-connect
| | ... | with with physical inteface or Vhost-User interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - nf_nodes - VM count. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /tmp/sock-\${VM_ID}-1
| | ... | - /tmp/sock-\${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with Vhost-User on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${nf_nodes}=${1}
-| | ...
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| |
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${sock1}= | Set Variable | /var/run/vpp/sock-${number}-1
| | | ${sock2}= | Set Variable | /var/run/vpp/sock-${number}-2
| | | ${prev_index}= | Evaluate | ${number}-1
@@ -132,43 +134,45 @@
| | | ... | ${${dut}-vhost-${number}-if1}
| | | Run Keyword If | ${number}==${nf_nodes} | Configure L2XC
| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${number}-if2} | ${${dut}_if2}
+| | END
| Initialize L2 xconnect with Vhost-User
| | [Documentation]
| | ... | Create pairs of Vhost-User interfaces for defined number of VMs on
| | ... | all VPP nodes. Add each Vhost-User interface into L2 cross-connect
| | ... | with with physical inteface or Vhost-User interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - VM count. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with Vhost-User \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 xconnect with Vhost-User on node | ${dut}
| | | ... | nf_nodes=${nf_nodes}
+| | END
| Initialize L2 xconnect with Vhost-User and VLAN in 3-node circular topology
| | [Documentation]
| | ... | Create two Vhost-User interfaces on all defined VPP nodes. Cross
| | ... | connect each Vhost interface with one physical interface.
| | ... | Setup VLAN between DUTs. All interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| L2 xconnect with Vhost-User and VLAN initialized in a 3-node\
| | ... | circular topology \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | Set interfaces in path up
| | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -192,20 +196,20 @@
| | ... | VLAN on BondEthernet interfaces between DUTs. Cross connect one Vhost
| | ... | interface with physical interface towards TG and other Vhost interface
| | ... | with VLAN sub-interface. All interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
| | ... | - bond_mode - Link bonding mode. Type: string
| | ... | - lb_mode - Load balance mode. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with Vhost-User and VLAN with VPP link\
| | ... | bonding in 3-node circular topology \| 10 \| pop-1 \| xor \| l34 \|
-| | ...
+| |
| | [Arguments] | ${subid} | ${tag_rewrite} | ${bond_mode} | ${lb_mode}
-| | ...
+| |
| | Set interfaces in path up
| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface | ${dut1} | ${bond_mode}
| | ... | ${lb_mode}
@@ -258,26 +262,26 @@
| | ... | Create pairs of Memif interfaces on DUT node. Cross connect each Memif
| | ... | interface with one physical interface or virtual interface to create
| | ... | a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: dictionary
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-\${dut}_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | KW uses test variable \${rxq_count_int} set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with memif pairs on DUT node \| ${dut} \
| | ... | \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}
-| | ...
-| | :FOR | ${number} | IN RANGE | 1 | ${count}+1
+| |
+| | FOR | ${number} | IN RANGE | 1 | ${count}+1
| | | ${sock1}= | Set Variable | memif-${dut}_CNF
| | | ${sock2}= | Set Variable | memif-${dut}_CNF
| | | ${prev_index}= | Evaluate | ${number}-1
@@ -290,24 +294,26 @@
| | | ... | ${${dut}-memif-${number}-if1}
| | | Run Keyword If | ${number}==${count} | Configure L2XC
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${number}-if2} | ${${dut}_if2}
+| | END
| Initialize L2 xconnect with memif pairs
| | [Documentation]
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Cross
| | ... | connect each Memif interface with one physical interface or virtual
| | ... | interface to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with memif pairs \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 xconnect with memif pairs on DUT node | ${dut} | ${count}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -316,24 +322,24 @@
| | [Documentation]
| | ... | Create single Memif interface on all defined VPP nodes. Cross
| | ... | connect Memif interface with one physical interface.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - number - Memif ID. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-DUT1_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect for single memif \| 1 \|
-| | ...
+| |
| | [Arguments] | ${number}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${sock}= | Set Variable | memif-${dut}_CNF
| | | ${sid}= | Evaluate | (${number} * ${2}) - ${1}
| | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock}
@@ -341,6 +347,7 @@
| | | ... | rxq=${rxq_count_int} | txq=${rxq_count_int}
| | | Configure L2XC | ${nodes['${dut}']} | ${${dut}_if1}
| | | ... | ${${dut}-memif-${number}-if1}
+| | END
| | Set single interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
diff --git a/resources/libraries/robot/l2/tagging.robot b/resources/libraries/robot/l2/tagging.robot
index a48e10c427..273384c5cc 100644
--- a/resources/libraries/robot/l2/tagging.robot
+++ b/resources/libraries/robot/l2/tagging.robot
@@ -15,7 +15,7 @@
| Library | resources.libraries.python.L2Util
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.NodePath
-| ...
+|
| Documentation | Keywords for VLAN tests
*** Keywords ***
@@ -23,7 +23,7 @@
| | [Arguments] | ${DUT1} | ${INT1} | ${DUT2} | ${INT2} | ${SUB_ID}
| | ... | ${OUTER_VLAN_ID} | ${INNER_VLAN_ID} | ${TYPE_SUBIF}
| | [Documentation] | Create two subinterfaces on DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - DUT1 - Node to add sub-interface.
| | ... | - INT1 - Interface key on which create sub-interface.
@@ -33,13 +33,13 @@
| | ... | - OUTER_VLAN_ID - Outer VLAN ID.
| | ... | - INNER_VLAN_ID - Inner VLAN ID.
| | ... | - TYPE_SUBIF - Type of sub-interface.
-| | ...
+| |
| | ... | _Set testcase variables with name and index of created interfaces:_
| | ... | - subif_name_1
| | ... | - subif_index_1
| | ... | - subif_name_2
| | ... | - subif_index_2
-| | ...
+| |
| | Set Interface State | ${DUT1} | ${INT1} | up
| | Set Interface State | ${DUT2} | ${INT2} | up
| | ${INT1_name}= | Get interface name | ${DUT1} | ${INT1}
@@ -61,26 +61,26 @@
| | [Arguments] | ${DUT1} | ${INT1} | ${DUT2}=${None} | ${INT2}=${None}
| | ... | ${SUB_ID}=10
| | [Documentation] | Create two dot1q subinterfaces on DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - DUT1 - Node to add sub-interface.
| | ... | - INT1 - Interface key on which create VLAN sub-interface.
| | ... | - DUT2 - Node to add sub-interface.
| | ... | - INT2 - Interface key on which create VLAN sub-interface.
| | ... | - SUB_ID - ID of the sub-interface to be created.
-| | ...
+| |
| | ... | _Set testcase variables with name and index of created interfaces:_
| | ... | - subif_name_1
| | ... | - subif_index_1
| | ... | - subif_name_2
| | ... | - subif_index_2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize VLAN dot1q sub-interfaces in circular topology \
| | ... | \| ${nodes['DUT1']} \| ${dut1_if2} \| ${nodes['DUT2']} \
| | ... | \| ${dut1_if2} \| 10 \|
-| | ...
+| |
| | Set Interface State | ${DUT1} | ${INT1} | up
| | Run Keyword Unless | ${DUT2} == ${None}
| | ... | Set Interface State | ${DUT2} | ${INT2} | up
@@ -106,21 +106,21 @@
| | [Arguments] | ${DUT1} | ${SUB_INT1} | ${DUT2}=${None} | ${SUB_INT2}=${None}
| | ... | ${TAG_REWRITE_METHOD}=${None}
| | [Documentation] | Setup tag rewrite on sub-interfaces on DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - DUT1 - Node to rewrite tags.
| | ... | - SUB_INT1 - Interface on which rewrite tags.
| | ... | - DUT2 - Node to rewrite tags.
| | ... | - SUB_INT2 - Interface on which rewrite tags.
| | ... | - TAG_REWRITE_METHOD - Method of tag rewrite.
-| | ...
+| |
| | L2 Vlan tag rewrite | ${DUT1} | ${SUB_INT1} | ${TAG_REWRITE_METHOD}
| | Run Keyword Unless | ${DUT2} == ${None}
| | ... | L2 Vlan tag rewrite | ${DUT2} | ${SUB_INT2} | ${TAG_REWRITE_METHOD}
| Configure L2 tag rewrite method on interface
| | [Documentation] | Set L2 tag rewrite on (sub-)interface on DUT
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - Node to set L2 tag rewrite method. Type: dictionary
| | ... | - interface - (Sub-)interface name or SW index to set L2 tag rewrite
@@ -130,22 +130,22 @@
| | ... | Dot1ad (Optional). Type: boolean
| | ... | - tag1_id - VLAN tag1 ID (Optional). Type: integer
| | ... | - tag2_id - VLAN tag2 ID (Optional). Type: integer
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure L2 tag rewrite method on interface \| ${nodes['DUT1']} \
| | ... | \| 9 \| pop-1 \|
| | ... | \| Configure L2 tag rewrite method on interface \| ${nodes['DUT2']} \
| | ... | \| 10 \| translate-1-2 \| push_dot1q=${False} \| tag1_id=10 \
| | ... | \| tag1_id=20 \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${interface} | ${tag_rewrite_method}
| | ... | ${push_dot1q}=${True} | ${tag1_id}=${None} | ${tag2_id}=${None}
-| | ...
+| |
| | ${result}= | Evaluate | isinstance($interface, int)
| | ${interface_name}= | Run Keyword If | ${result}
| | ... | Set Variable | ${interface}
diff --git a/resources/libraries/robot/lb/load_balancer.robot b/resources/libraries/robot/lb/load_balancer.robot
index 42cac6ae2e..a254acd0f8 100644
--- a/resources/libraries/robot/lb/load_balancer.robot
+++ b/resources/libraries/robot/lb/load_balancer.robot
@@ -20,9 +20,9 @@
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.LoadBalancerUtil
| Library | resources.libraries.python.NodePath
-| ...
+|
| Resource | resources/libraries/robot/shared/interfaces.robot
-| ...
+|
| Documentation | LoadBalancer suite keywords - configuration
*** Keywords ***
@@ -32,23 +32,23 @@
| | ... | circular topology. Get the interface MAC addresses and setup ARP on
| | ... | all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG
| | ... | links.
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${fib_table}= | Set Variable | ${0}
| | Add Fib Table | ${dut1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 192.168.50.72 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
| | ... | 192.168.60.73 | 24
-| | ...
+| |
| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2}
-| | ...
+| |
| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128}
| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${0}
| | ... | new_len=${1024}
@@ -60,23 +60,23 @@
| | ... | circular topology. Get the interface MAC addresses and setup ARP on
| | ... | all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG
| | ... | links.
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${fib_table}= | Set Variable | ${0}
| | Add Fib Table | ${dut1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 192.168.50.72 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
| | ... | 192.168.60.73 | 24
-| | ...
+| |
| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2}
-| | ...
+| |
| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128}
| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${2} | dscp=${7}
| | ... | new_len=${1024}
@@ -88,25 +88,25 @@
| | ... | circular topology. Get the interface MAC addresses and setup ARP on
| | ... | all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG
| | ... | links.
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${fib_table}= | Set Variable | ${0}
| | Add Fib Table | ${dut1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 192.168.50.72 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
| | ... | 192.168.60.73 | 24
-| | ...
+| |
| | Add Ip Neighbors | ${dut1} | ${dut1_if1} | 192.168.50 | ${tg_if1_mac}
| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 192.168.50.0 | 24 | interface=${dut1_if1}
| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2}
-| | ...
+| |
| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128}
| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${3}
| | ... | protocol=${17} | port=${20000} | target_port=${3307} | new_len=${1024}
@@ -116,26 +116,27 @@
| Add Ip Neighbors
| | [Documentation] | Add IP neighbors to physical interface on DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - VPP node. Type: dictionary
| | ... | - interface - Interface key. Type: string
| | ... | - ip_addr - IP address of the interface. Type: string
| | ... | - mac_addr - MAC address of the interface. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Add Ip Neighbors \| ${dut1} \| ${dut1_if1} \| 192.168.50 \
| | ... | \| ${tg_if1_mac}
-| | ...
+| |
| | [Arguments] | ${node} | ${interface} | ${ip_addr} | ${mac_addr}
-| | ...
-| | :FOR | ${number} | IN RANGE | 74 | 80
+| |
+| | FOR | ${number} | IN RANGE | 74 | 80
| | | VPP Add IP Neighbor
| | | ... | ${node} | ${interface} | ${ip_addr}.${number} | ${mac_addr}
+| | END
| Add Lb As Addresses
| | [Documentation] | Add Lb As Addresses on Vpp node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - VPP node. Type: dictionary
| | ... | - vip_addr - IPv4 address to be used as source for IPv4 traffic.
@@ -143,18 +144,19 @@
| | ... | - as_addr - The application server address. Type: string
| | ... | - protocol - tcp or udp. Type: integer
| | ... | - port - destination port. Type: integer
-| | ... | - is_del - 1 if the VIP should be removed otherwise 0. Type: integer
+| | ... | - is_del - 1 if the VIP should be removed otherwise 0. Type: integer
| | ... | - is_flush - 1 if the sessions related to this AS should be flushed
| | ... | otherwise 0. Type: integer
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Add Lb As Addresses \| ${dut1} \| 90.1.2.1 \| 192.168.60 \
| | ... | \| protocol=${17} \| port=${20000} \|
-| | ...
+| |
| | [Arguments] | ${node} | ${vip_addr} | ${as_addr} | ${protocol}=${255}
| | ... | ${port}=${0} | ${is_del}=${0} | ${is_flush}=${0}
-| | ...
-| | :FOR | ${number} | IN RANGE | 74 | 80
+| |
+| | FOR | ${number} | IN RANGE | 74 | 80
| | | VPP Lb Add Del As
| | | ... | ${node} | vip_addr=${vip_addr} | protocol=${protocol}
| | | ... | port=${port} | as_addr=${as_addr}.${number}
+| | END
diff --git a/resources/libraries/robot/overlay/lisp.robot b/resources/libraries/robot/overlay/lisp.robot
index 826cc3a7b1..f9da0be399 100644
--- a/resources/libraries/robot/overlay/lisp.robot
+++ b/resources/libraries/robot/overlay/lisp.robot
@@ -23,10 +23,10 @@
*** Keywords ***
| Configure topology for IPv4 LISP testing
| | [Documentation] | Setup topology for IPv4 LISP testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv4 LISP testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen}
@@ -41,10 +41,10 @@
| Configure topology for IPv6 LISP testing
| | [Documentation] | Setup topology fo IPv6 LISP testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv6 LISP testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen}
@@ -59,7 +59,7 @@
| Configure LISP in 2-node circular topology
| | [Documentation] | Configure LISP topology in 2-node circular topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1 - DUT1 node. Type: dictionary
| | ... | - dut1_if - DUT1 node interface. Type: string
@@ -70,27 +70,27 @@
| | ... | - is_gpe - To enable GPE. Other than zero to enable Type: integer
| | ... | - vni_table - vni table Eid Table Mapping Type: integer
| | ... | - vrf_table - vrf table Eid Table Mapping Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure LISP in 2-node circular topology \
| | ... | \| ${dut1} \| ${interface_name} \
| | ... | \| None \| ${locator_set} \| ${dut1_eid} \
| | ... | \| ${dut1_static_adjacency} \|
-| | ...
+| |
| | [Arguments]
| | ... | ${dut1} | ${dut1_if} | ${dut1_int_index}
| | ... | ${locator_set} | ${dut1_eid}
| | ... | ${dut1_static_adjacency}
| | ... | ${is_gpe}=0
| | ... | ${vni_table}=0 | ${vrf_table}=0
-| | ...
-# DUT1 settings:
+| |
+| | # DUT1 settings:
| | ${dut1_int_index}= | Run Keyword If | ${dut1_int_index} is None
-| | ... | Get Interface Sw Index | ${dut1} | ${dut1_if}
-| | ... | ELSE | Set Variable | ${dut1_int_index}
+| | ... | Get Interface Sw Index | ${dut1} | ${dut1_if}
+| | ... | ELSE | Set Variable | ${dut1_int_index}
| | Enable Lisp | ${dut1}
| | Run keyword if | ${is_gpe} != 0
| | ... | Enable Lisp GPE | ${dut1}
@@ -118,10 +118,10 @@
| Configure topology for IPv6 LISPoIP4 testing
| | [Documentation] | Setup topology fo IPv6 LISPoIPV4 testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv6 LISPoIP4 testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen}
@@ -136,10 +136,10 @@
| Configure topology for IPv4 LISPoIP6 testing
| | [Documentation] | Setup topology fo IPv4 LISPoIPV6 testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv4 LISPoIP6 testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen}
diff --git a/resources/libraries/robot/overlay/lisp_api.robot b/resources/libraries/robot/overlay/lisp_api.robot
index b858ef48a7..21f17d51f1 100644
--- a/resources/libraries/robot/overlay/lisp_api.robot
+++ b/resources/libraries/robot/overlay/lisp_api.robot
@@ -24,24 +24,24 @@
| Generate LISP locator_set data
| | [Documentation] | Generate lisp locator_set data for test
| | ... | the lisp locator_set and locator API.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - locator_set_number - Number how many locator_set data
| | ... | will be generated. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variables:
| | ... | - locator_set_values - New generated locator_set data.
| | ... | - locator_set_values_vat - New generated locator_set data expected\
| | ... | from VAT.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Given Generate LISP locator_set data \| ${nodes['DUT1']} \
| | ... | \| ${locator_set_number} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${locator_set_number}
| | ${locator_set_values} | ${locator_set_values_vat}=
| | ... | Generate Unique Lisp Locator Set Data
@@ -51,40 +51,40 @@
| Configure LISP locator_set data
| | [Documentation] | Set the lisp locator_set and locator on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - locator_set_values - Generated locator_set data from
| | ... | KW locator_set data is prepared, which will be set on the VPP node.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Configure LISP locator_set data \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Set Lisp Locator Set | ${dut_node} | ${locator_set_values}
| LISP locator_set shpuld be configured correctly
| | [Documentation] | Test if the locator_set is set correctly on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - locator_set_values_vat - Generated locator_set data from
| | ... | KW locator_set data is prepared, which are expected from VPP via VAT.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP locator_set should be configured correctly \
| | ... | \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_locator_set}= | Vpp Show Lisp Locator Set | ${dut_node} | local
| | Lisp Locator S Should Be Equal
@@ -92,36 +92,36 @@
| Delete all LISP locator_set from VPP
| | [Documentation] | Delete all lisp locator_set on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - locator_set_values - Generated locator_set data from
| | ... | KW locator_set data is prepared, which was set on the VPP node.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Delete all LISP locator_set from VPP \
| | ... | \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Unset Lisp Locator Set | ${dut_node} | ${locator_set_values}
| LISP locator_set should be unset
| | [Documentation] | Test if all locator_set are unset from VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP locator_set should be unset \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_locator_set}= | Vpp Show Lisp Locator Set | ${dut_node} | ${EMPTY}
| | Lisp Is Empty | ${show_locator_set}
@@ -129,24 +129,24 @@
| Lisp locator_set data use for test reset locator_set are prepared
| | [Documentation] | Generate lisp special type of locator_set data.
| | ... | This data will be use for test reset locator_set.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - locator_set_number - Number how many locator_set data
| | ... | it will generate. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variables:
| | ... | - locator_set_values - New generate locator_set data.
| | ... | - locator_set_values_vat - New generated locator_set data expected\
| | ... | from VAT.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Given Lisp locator_set data use for test reset locator_set \
| | ... | are prepared \| ${nodes['DUT1']} \| ${locator_set_number} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${locator_set_number}
| | ${locator_set_values} | ${locator_set_values_vat}=
| | ... | Generate Duplicate Lisp Locator Set Data
@@ -156,244 +156,244 @@
| Configure LISP eid address
| | [Documentation] | Set the lisp eid address on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_eid - Test eid data. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Configure LISP eid address \| ${nodes['DUT1']} \
| | ... | \| ${eid_table} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_eid}
| | Vpp Set Lisp Eid Table | ${dut_node} | ${set_eid}
| LISP eid address should be set correctly to eid table
| | [Documentation] | Test if the locator_set is set correctly on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_eid - Example eid data, which was set to the VPP node.
| | ... | Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - set_eid - Generated eid data, which will be set to the VPP node.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP eid address should be set correctly to eid table \
| | ... | \| ${nodes['DUT1']} \| ${eid_table} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_eid}
| | ${show_eid}= | Vpp Show Lisp Eid Table | ${dut_node}
| | Lisp Should Be Equal | ${set_eid} | ${show_eid}
| Delete all LISP eid address from VPP
| | [Documentation] | Delete all lisp eid address from the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_eid - Eid data which will be removed from the VPP node.
| | ... | Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Delete all LISP eid address from VPP \
| | ... | \| ${nodes['DUT1']} \| ${eid_table} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_eid}
| | Vpp Unset Lisp Eid Table | ${dut_node} | ${set_eid}
| LISP eid table should be empty
| | [Documentation] | Test if the eid table is empty.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP eid table should be empty \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_eid}= | Vpp Show Lisp Eid Table | ${dut_node}
| | Lisp Is Empty | ${show_eid}
| Configure LISP map resolver address
| | [Documentation] | Set the lisp map resolver address in the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_map_resolver - Map resolver data, which will be set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Configure LISP map resolver address \| ${nodes['DUT1']} \
| | ... | \| ${map_resolver} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_map_resolver}
| | Vpp Set Lisp Map Resolver | ${dut_node} | ${set_map_resolver}
| LISP map resolver address should be configured correctly
| | [Documentation] | Test if the map resolver address is set correctly
| | ... | on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_map_resolver - Map resolver data, which was set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP map resolver address should be configured correctly \
| | ... | \| ${nodes['DUT1']} \| ${map_resolver} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_map_resolver}
| | ${show_map_resolver}= | Vpp Show Lisp Map Resolver | ${dut_node}
| | Lisp Should Be Equal | ${set_map_resolver} | ${show_map_resolver}
| Delete all LISP map resolver address from VPP
| | [Documentation] | Delete all lisp map resolver address on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - map_resolver - Map resolver data, which will be remove from
| | ... | the VPP. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Delete all LISP map resolver address from VPP \
| | ... | \| ${nodes['DUT1']} \| ${map_resolver} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_map_resolver}
| | Vpp Unset Lisp Map Resolver | ${dut_node} | ${set_map_resolver}
| LISP map resolver address should be empty
| | [Documentation] | Test if the map resolver are empty.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP map resolver address should be empty \
| | ... | \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_map_resolver}= | Vpp Show Lisp Map Resolver | ${dut_node}
| | Lisp Is Empty | ${show_map_resolver}
| Enable LISP
| | [Documentation] | Enable LISP on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Enable LISP \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Enable Disable | ${dut_node} | enable
| LISP should be enabled
| | [Documentation] | Check if the lisp is enabled.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - lisp_status_data - Lisp status data, which was set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| LISP should be enabled \| ${nodes['DUT1']} \
| | ... | \| ${lisp_status_data} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${lisp_status_data}
| | ${show_lisp_stat}= | Vpp Show Lisp State | ${dut_node}
| | Lisp Should Be Equal | ${show_lisp_stat} | ${lisp_status_data[1]}
| Disable LISP
| | [Documentation] | Disable LISP on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Disable LISP \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Enable Disable | ${dut_node} | disable
| LISP Should be disabled
| | [Documentation] | LISP Should be disabled.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - lisp_status_data - Lisp status data, which was set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| LISP Should be disabled \| ${nodes['DUT1']} \
| | ... | \| ${lisp_status_data} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${lisp_status_data}
| | ${show_lisp_stat}= | Vpp Show Lisp State | ${dut_node}
| | Lisp Should Be Equal | ${show_lisp_stat} | ${lisp_status_data[0]}
| Enable Lisp Gpe
| | [Documentation] | Enable Lisp Gpe on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Enable Lisp Gpe \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Gpe Enable Disable | ${dut_node} | enable
| Disable Lisp Gpe
| | [Documentation] | Disable Lisp Gpe on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Disable Lisp Gpe \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Gpe Enable Disable | ${dut_node} | disable
diff --git a/resources/libraries/robot/overlay/lisp_static_adjacency.robot b/resources/libraries/robot/overlay/lisp_static_adjacency.robot
index 55dab37d10..a68bb7e747 100644
--- a/resources/libraries/robot/overlay/lisp_static_adjacency.robot
+++ b/resources/libraries/robot/overlay/lisp_static_adjacency.robot
@@ -18,15 +18,15 @@
| Library | resources.libraries.python.LispSetup.LispLocalEid
| Library | resources.libraries.python.LispSetup.LispLocatorSet
| Library | resources.libraries.python.LispSetup.LispRemoteMapping
-| ...
+|
| Resource | resources/libraries/robot/overlay/lisp_api.robot
-| ...
+|
| Documentation | Lisp static adjacency suite keywords
*** Keywords ***
| Configure LISP topology in 3-node circular topology
| | [Documentation] | Set up Lisp static adjacency topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_node - DUT1 node. Type: dictionary
| | ... | - dut1_int_name - DUT1 node interface name. Type: string
@@ -39,17 +39,17 @@
| | ... | - dut2_eid - Dut2 node eid address. Type: dictionary
| | ... | - dut1_static_adjacency - Dut1 static adjacency. Type: dictionary
| | ... | - dut2_static_adjacency - Dut2 static address. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure LISP topology in 3-node circular topology \
| | ... | \| ${dut1_node} \| ${interface_name} \| None \
| | ... | \| ${dut2_node} \| ${interface_name} \| None \
| | ... | \| ${locator_set} \| ${dut1_eid} \| ${dut2_eid} \
| | ... | \| ${dut1_static_adjacency} \| ${dut2_static_adjacency} \|
-| | ...
+| |
| | [Arguments] | ${dut1_node} | ${dut1_int_name} | ${dut1_int_index}
| | ... | ${dut2_node} | ${dut2_int_name} | ${dut2_int_index}
| | ... | ${locator_set} | ${dut1_eid} | ${dut2_eid}
@@ -99,7 +99,7 @@
| Change LISP Configuration
| | [Documentation] | Change configuration of the Lisp protocol.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_node - DUT1 node. Type: dictionary
| | ... | - dut2_node - DUT2 node. Type: dictionary
@@ -118,16 +118,16 @@
| | ... | Type: dictionary
| | ... | - new_dut1_static_adjacency - New DUT1 static adjacency.
| | ... | Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Change LISP Configuration \| ${dut1_node} \| ${dut2_node} \
| | ... | \| ${dut1_to_dut2} \| ${dut2_to_dut1} | "08:00:27:20:e0:0d" \
| | ... | \| "08:00:27:b1:94:b1" \| "6.3.0.1" \| "6.3.0.20" \| "24" \
| | ... | \| ${old_dut1_static_adjacency} \| ${new_dut1_static_adjacency} \|
-| | ...
+| |
| | [Arguments] | ${dut1_node} | ${dut2_node} | ${dut1_to_dut2}
| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_mac} | ${dut2_to_dut1_mac}
| | ... | ${new_dut1_ip} | ${new_dut2_ip} | ${prefix}
diff --git a/resources/libraries/robot/overlay/lispgpe.robot b/resources/libraries/robot/overlay/lispgpe.robot
index 5c611a56a9..1fa84da721 100644
--- a/resources/libraries/robot/overlay/lispgpe.robot
+++ b/resources/libraries/robot/overlay/lispgpe.robot
@@ -25,7 +25,7 @@
*** Keywords ***
| Configure LISP GPE topology in 3-node circular topology
| | [Documentation] | Configure LISP GPE topology in 3-node circular topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_node - DUT1 node. Type: dictionary
| | ... | - dut1_if - DUT1 node interface. Type: string
@@ -38,23 +38,23 @@
| | ... | - dut2_eid - DUT2 node eid address. Type: dictionary
| | ... | - dut1_static_adjacency - DUT1 static adjacency. Type: dictionary
| | ... | - dut2_static_adjacency - DUT2 static adjacency. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure LISP GPE topology in 3-node circular topology \| ${dut1_node} \| ${interface_name} \
| | ... | \| None \| ${dut2_node} \| ${interface_name} \| None \
| | ... | \| ${locator_set} \| ${dut1_eid} \| ${dut2_eid} \
| | ... | \| ${dut1_static_adjacency} \| ${dut2_static_adjacency} \|
-| | ...
+| |
| | [Arguments]
| | ... | ${dut1_node} | ${dut1_if} | ${dut1_int_index}
| | ... | ${dut2_node} | ${dut2_if} | ${dut2_int_index}
| | ... | ${locator_set} | ${dut1_eid} | ${dut2_eid}
| | ... | ${dut1_static_adjacency} | ${dut2_static_adjacency}
| | ... | ${vni_table}=0 | ${vrf_table}=0
-| | ...
+| |
# DUT1 settings:
| | ${dut1_int_index}= | Run Keyword If | ${dut1_int_index} is None
| | | ... | Get Interface Sw Index | ${dut1_node} | ${dut1_if}
@@ -89,7 +89,7 @@
| | ... | ${dut1_static_adjacency['prefix']}
| | ... | ${dut1_static_adjacency['seid']}
| | ... | ${dut1_static_adjacency['prefix']}
-| | ...
+| |
# DUT2 settings:
| | ${dut2_int_index}= | Run Keyword If | ${dut2_int_index} is None
| | | ... | Get Interface Sw Index | ${dut2_node} | ${dut2_if}
diff --git a/resources/libraries/robot/overlay/srv6.robot b/resources/libraries/robot/overlay/srv6.robot
index dafc0fe566..8ac0343f9a 100644
--- a/resources/libraries/robot/overlay/srv6.robot
+++ b/resources/libraries/robot/overlay/srv6.robot
@@ -19,7 +19,7 @@
| Configure SR LocalSID on DUT
| | [Documentation] | Create SRv6 LocalSID and binds it to a particular\
| | ... | behavior on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to create localSID on. Type: dictionary
| | ... | - local_sid - LocalSID IPv6 address. Type: string
@@ -42,9 +42,9 @@
| | ... | to SR-unaware appliance via static proxy). Type: string
| | ... | - sid_list - SID list (Optional, default value: []; required for SRv6
| | ... | endpoint to SR-unaware appliance via static proxy). Type: list
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure SR LocalSID on DUT \| ${nodes['DUT1']} \| B:: \| end \|
| | ... | \| Configure SR LocalSID on DUT \| ${nodes['DUT1']} \| C:: \
| | ... | \| end.dx2 \| interface=GigabitEthernet0/10/0 \|
@@ -58,12 +58,12 @@
| | ... | \| Configure SR LocalSID on DUT \| ${nodes['DUT2']} \| E:: \
| | ... | \| end.as \| next_hop=10.0.0.1 \| out_if=DUT2_VHOST1 \
| | ... | \| in_if=DUT2_VHOST2 \| src_addr=B:: \| sid_list=['C::', 'D::'] \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${local_sid} | ${behavior}
| | ... | ${interface}=${None} | ${next_hop}=${None} | ${fib_table}=${None}
| | ... | ${out_if}=${None} | ${in_if}=${None} | ${src_addr}=${None}
| | ... | @{sid_list}
-| | ...
+| |
| | Configure SR LocalSID | ${dut_node} | ${local_sid} | ${behavior}
| | ... | interface=${interface} | next_hop=${next_hop} | fib_table=${fib_table}
| | ... | out_if=${out_if} | in_if=${in_if} | src_addr=${src_addr}
@@ -71,55 +71,55 @@
| Show SR LocalSIDs on DUT
| | [Documentation] | Show SRv6 LocalSIDs on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to show SR localSIDs on. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR LocalSIDs on DUT \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
-| | ...
+| |
| | Show SR LocalSIDs | ${dut_node}
| Configure SR Policy on DUT
| | [Documentation] | Create SRv6 policy on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to create SRv6 policy on. Type: dictionary
| | ... | - bsid - BindingSID - local SID IPv6 address. Type: string
| | ... | - mode - Encapsulation / insertion mode. Type: string
| | ... | - sid_list - SID list. Type: list
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure SR Policy on DUT \| ${nodes['DUT2']} \| A:: \| encap \
| | ... | \| B::\| C:: \|
| | ... | \| Configure SR Policy on DUT \| ${nodes['DUT2']} \| D:: \| insert \
| | ... | \| E::\| F:: \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${bsid} | ${mode} | @{sid_list}
-| | ...
+| |
| | Configure SR Policy | ${dut_node} | ${bsid} | ${sid_list} | mode=${mode}
| Show SR Policies on DUT
| | [Documentation] | Show SRv6 policies on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to show SR policies on. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Policies on DUT \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
-| | ...
+| |
| | Show SR Policies | ${dut_node}
| Configure SR Steer on DUT
| | [Documentation] | Create SRv6 steering policy on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to create SR steering policy on.
| | ... | Type: dictionary
@@ -131,99 +131,102 @@
| | ... | in case of L3 mode). Type: string
| | ... | - prefix - IP address prefix (Optional, default value: None; required
| | ... | for L3 mode). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure SR Steer on DUT \| ${nodes['DUT1']} \| L2 \| B:: \
| | ... | \| interface=GigabitEthernet0/10/0 \|
| | ... | \| Configure SR Steer on DUT \| ${nodes['DUT1']} \| L3 \| C:: \
| | ... | \| ip_address=2001::1 \| prefix=64 \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${mode} | ${bsid}
| | ... | ${interface}=${None} | ${ip_addr}=${None} | ${prefix}=${None}
-| | ...
+| |
| | Configure SR Steer | ${dut_node} | ${mode} | ${bsid}
| | ... | interface=${interface} | ip_addr=${ip_addr} | prefix=${prefix}
| Show SR Steering Policies on DUT
| | [Documentation] | Show SRv6 steering policies on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to show SR steering policies on.
| | ... | Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Steering Policies on DUT \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
-| | ...
+| |
| | Show SR Steering Policies | ${dut_node}
| Set SR Encaps Source Address on DUT
| | [Documentation] | Set SRv6 encapsulation source address on the given DUT
| | ... | node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to set SRv6 encapsulation source address
| | ... | on. Type: dictionary
| | ... | - ip6_addr - Local SID IPv6 address. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set SR Encaps Source Address on DUT \| ${nodes['DUT1']} \| B:: \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${ip6_addr}
-| | ...
+| |
| | Set SR Encaps Source Address | ${dut_node} | ip6_addr=${ip6_addr}
| Show SR Policies on all DUTs
| | [Documentation] | Show SRv6 policies on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Policies on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show SR Policies | ${nodes['${dut}']}
+| | END
| Show SR Steering Policies on all DUTs
| | [Documentation] | Show SRv6 steering policies on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Steering Policies on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show SR Steering Policies | ${nodes['${dut}']}
+| | END
| Show SR LocalSIDs on all DUTs
| | [Documentation] | Show SRv6 LocalSIDs on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR LocalSIDs on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show SR LocalSIDs | ${nodes['${dut}']}
+| | END
| Initialize IPv6 forwarding over SRv6 with encapsulation with '${n}' x SID '${prepos}' decapsulation in 3-node circular topology
| | [Documentation]
@@ -232,7 +235,7 @@
| | ... | VPP interfaces. Setup IPv6 addresses on all interfaces. Set segment
| | ... | routing for IPv6 for required number of SIDs and configure IPv6 routes
| | ... | on both DUT nodes.
-| | ...
+| |
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
| | VPP Interface Set IP Address
@@ -242,12 +245,13 @@
| | VPP Interface Set IP Address
| | ... | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix}
| | Vpp All Ra Suppress Link Layer | ${nodes}
-| | :FOR | ${number} | IN RANGE | 2 | ${dst_addr_nr}+2
+| | FOR | ${number} | IN RANGE | 2 | ${dst_addr_nr}+2
| | | ${hexa_nr}= | Convert To Hex | ${number}
| | | VPP Add IP Neighbor | ${dut1}
| | | ... | ${dut1_if1} | ${tg_if1_ip6_subnet}${hexa_nr} | ${tg_if1_mac}
| | | VPP Add IP Neighbor | ${dut2}
| | | ... | ${dut2_if2} | ${tg_if2_ip6_subnet}${hexa_nr} | ${tg_if2_mac}
+| | END
| | VPP Add IP Neighbor
| | ... | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac}
| | VPP Add IP Neighbor
@@ -314,11 +318,11 @@
| | ... | interfaces. Setup IPv6 addresses on all interfaces. Set segment
| | ... | routing for IPv6 with defined behaviour function and configure IPv6
| | ... | routes on both DUT nodes.
-| | ...
+| |
| | ... | *Note:*
| | ... | KW uses test variable rxq_count_int set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ${sock1}= | Set Variable | memif-DUT1_CNF
| | ${sock2}= | Set Variable | memif-DUT2_CNF
| | Set up memif interfaces on DUT node | ${dut1} | ${sock1} | ${sock1}
@@ -331,8 +335,9 @@
| | ... | ${rxq_count_int}
| | VPP Set interface MTU | ${dut2} | ${dut2-memif-1-if1}
| | VPP Set interface MTU | ${dut2} | ${dut2-memif-1-if2}
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show Memif | ${nodes['${dut}']}
+| | END
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
| | VPP Interface Set IP Address
diff --git a/resources/libraries/robot/overlay/vxlan.robot b/resources/libraries/robot/overlay/vxlan.robot
index f03abdc11a..f98514e2a2 100644
--- a/resources/libraries/robot/overlay/vxlan.robot
+++ b/resources/libraries/robot/overlay/vxlan.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Library | resources.libraries.python.InterfaceUtil
-| ...
+|
| Documentation | VXLAN keywords.
*** Keywords ***
| Get VXLAN dump
| | [Documentation] | Get VXLAN dump.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node data. Type: dictionary
| | ... | - interface - Interface on the VPP node (Optional). Type: string
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${interface}=${None}
-| | ...
+| |
| | [Return] | ${vxlan_dump}
-| | ...
+| |
| | ${vxlan_dump}= | VXLAN Dump | ${dut_node} | ${interface}
diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot
index 7c7c7bbceb..13acce1524 100644
--- a/resources/libraries/robot/performance/performance_configuration.robot
+++ b/resources/libraries/robot/performance/performance_configuration.robot
@@ -18,25 +18,25 @@
| Initialize LISP IPv4 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv4 addresses on all DUT nodes and TG \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - duts_prefix - ip prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Initialize LISP IPv4 forwarding in 3-node circular topology \
| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \
| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address}
| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${duts_prefix}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg_if1_mac}
| | VPP Add IP Neighbor
@@ -55,20 +55,20 @@
| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology
| | [Documentation] | Setup Lisp GPE IPv4 forwarding over IPsec.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - encr_alg - Encryption algorithm. Type: string
| | ... | - auth_alg - Authentication algorithm. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology\
| | ... | \| ${encr_alg} \| ${auth_alg}
-| | ...
+| |
| | [Arguments] | ${encr_alg} | ${auth_alg}
-| | ...
+| |
| | Generate keys for IPSec | ${encr_alg} | ${auth_alg}
| | Initialize LISP IPv4 forwarding in 3-node circular topology
| | ... | ${dut1_to_dut2_ip4} | ${dut1_to_tg_ip4} | ${dut2_to_dut1_ip4}
@@ -90,25 +90,25 @@
| Initialize LISP IPv6 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv6 topology on all DUT nodes \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - duts_prefix - ip prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Initialize LISP IPv6 forwarding in 3-node circular topology \
| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \
| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address}
| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${prefix}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_address} | ${prefix}
@@ -129,7 +129,7 @@
| Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_ip6_address - IPv6 address from DUT1 to DUT2.
| | ... | Type: string
@@ -139,20 +139,20 @@
| | ... | - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string
| | ... | - prefix4 - IPv4 prefix. Type: int
| | ... | - prefix6 - IPv6 prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Lisp IPv4 over IPv6 forwarding initialized in a 3-node circular \
| | ... | topology \| ${dut1_dut2_ip6_address} \| ${dut1_tg_ip4_address} \
| | ... | \| ${dut2_dut1_ip6_address} \| ${dut2_tg_ip4_address} \
| | ... | \| ${prefix4} \| ${prefix6} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_ip6_address} | ${dut1_tg_ip4_address}
| | ... | ${dut2_dut1_ip6_address} | ${dut2_tg_ip4_address}
| | ... | ${prefix4} | ${prefix6}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | ${dut1_tg_ip4_address} | ${prefix4}
@@ -173,7 +173,7 @@
| Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_ip4_address - IPv4 address from DUT1 to DUT2.
| | ... | Type: string
@@ -183,20 +183,20 @@
| | ... | - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string
| | ... | - prefix4 - IPv4 prefix. Type: int
| | ... | - prefix6 - IPv6 prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Lisp IPv6 over IPv4 forwarding initialized in a 3-node circular \
| | ... | topology \| ${dut1_dut2_ip4_address} \| ${dut1_tg_ip6_address} \
| | ... | \| ${dut2_dut1_ip4_address} \| ${dut2_tg_ip6_address} \
| | ... | \| ${prefix6} \| ${prefix4} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_ip4_address} | ${dut1_tg_ip6_address}
| | ... | ${dut2_dut1_ip4_address} | ${dut2_tg_ip6_address}
| | ... | ${prefix6} | ${prefix4}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_ip6_address} | ${prefix6}
diff --git a/resources/libraries/robot/performance/performance_limits.robot b/resources/libraries/robot/performance/performance_limits.robot
index a80ca2f8d5..82688ac9c6 100644
--- a/resources/libraries/robot/performance/performance_limits.robot
+++ b/resources/libraries/robot/performance/performance_limits.robot
@@ -21,19 +21,19 @@
| | [Documentation]
| | ... | Framesize can be either integer in case of a single packet
| | ... | in stream, or set of packets in case of IMIX type or simmilar.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize. Type: integer or string
-| | ...
+| |
| | ... | *Returns:*
| | ... | Average frame size. Type: float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Get Average Frame Size \| IMIX_v4_1 \|
-| | ...
+| |
| | [Arguments] | ${frame_size}
-| | ...
+| |
| | Return From Keyword If | '${frame_size}' == 'IMIX_v4_1' | ${353.83333}
| | ${frame_size} = | Convert To Number | ${frame_size}
| | Return From Keyword | ${frame_size}
@@ -50,31 +50,31 @@
| | ... | whitelisted NIC names.
| | ... | The mapping is hardcoded in nic_limits.yaml
| | ... | TODO: Make the mapping from NIC names case insensistive.
-| | ...
+| |
| | ... | TODO: Make pps limit also definable per NIC.
-| | ...
+| |
| | ... | This keyword computes maximal unidirectional transmit rate
| | ... | and jumbo boolean (some suites need that for configuration decisions).
| | ... | To streamline suite autogeneration, both input and output values
| | ... | are communicated as test (or broader scope) variables,
| | ... | instead of explicit arguments and return values.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
-| | ... | - nic_name - Name of bottleneck NIC. Type: string
-| | ... | - overhead - Overhead in bytes. Default: 0. Type: integer
-| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
-| | ...
+| | ... | - nic_name - Name of bottleneck NIC. Type: string
+| | ... | - overhead - Overhead in bytes. Default: 0. Type: integer
+| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
+| |
| | ... | *Test variables set:*
-| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
-| | ... | Type: float
-| | ... | - jumbo - Jumbo boolean, true if jumbo packet support
-| | ... | has to be enabled. Type: boolean
-| | ...
+| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
+| | ... | Type: float
+| | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
+| | ... | enabled. Type: boolean
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set test Variable \| \${frame_size} \| IMIX_v4_1 \|
| | ... | \| Set Max Rate And Jumbo \|
-| | ...
+| |
| | # Negative overhead is possible, if DUT-DUT traffic is less encapsulated
| | # than TG-DUT traffic.
| | # TODO: Re-check overhead values in suites with both traffics encapsulated.
diff --git a/resources/libraries/robot/performance/performance_utils.robot b/resources/libraries/robot/performance/performance_utils.robot
index f917a0c0cd..eac7fe0075 100644
--- a/resources/libraries/robot/performance/performance_utils.robot
+++ b/resources/libraries/robot/performance/performance_utils.robot
@@ -24,7 +24,7 @@
| Library | resources.libraries.python.TrafficGenerator.TGDropRateSearchImpl
| Library | resources.libraries.python.Trace
| Variables | resources/libraries/python/Constants.py
-| ...
+|
| Documentation
| ... | Performance suite keywords - utilities to find and verify NDR and PDR.
@@ -38,19 +38,19 @@
| | ... | Input rates are understood as uni-directional,
| | ... | reported result contains aggregate rates.
| | ... | Currently, the min_rate value is hardcoded to match test teardowns.
-| | ...
+| |
| | ... | TODO: Should the trial duration of the additional
| | ... | measurements be configurable?
-| | ...
+| |
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - packet_loss_ratio - Accepted loss during search. Type: float
| | ... | - final_relative_width - Maximal width multiple of upper. Type: float
@@ -61,19 +61,19 @@
| | ... | - doublings - How many doublings to do when expanding [1]. Type: int
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Find NDR and PDR intervals using optimized search \| \${0.005} \
| | ... | \| \${0.005} \| \${30.0} \| \${1.0} \| \${2} \| \${600.0} \| \${2} \
| | ... | \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${packet_loss_ratio}=${0.005}
| | ... | ${final_relative_width}=${0.005} | ${final_trial_duration}=${30.0}
| | ... | ${initial_trial_duration}=${1.0}
| | ... | ${number_of_intermediate_phases}=${2} | ${timeout}=${720.0}
| | ... | ${doublings}=${2} | ${traffic_directions}=${2}
-| | ...
+| |
| | ${result} = | Perform optimized ndrpdr search | ${frame_size}
| | ... | ${traffic_profile} | ${10000} | ${max_rate}
| | ... | ${packet_loss_ratio} | ${final_relative_width}
@@ -91,17 +91,17 @@
| | [Documentation]
| | ... | Display the number of packets lost (bidirectionally)
| | ... | due to reconfiguration under traffic.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - result - Result of bidirectional measurtement.
-| | ... | Type: ReceiveRateMeasurement
-| | ...
+| | ... | Type: ReceiveRateMeasurement
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display Reconfig Test Message \| \${result} \|
-| | ...
+| |
| | [Arguments] | ${result}
-| | ...
+| |
| | Set Test Message | Packets lost due to reconfig: ${result.loss_count}
| | ${time_lost} = | Evaluate | ${result.loss_count} / ${result.target_tr}
| | Set Test Message | ${\n}Implied time lost: ${time_lost} | append=yes
@@ -112,19 +112,19 @@
| | ... | aggregate throughput using MLRsearch algorithm.
| | ... | Input rates are understood as uni-directional.
| | ... | Currently, the min_rate value is hardcoded to match test teardowns.
-| | ...
+| |
| | ... | TODO: Should the trial duration of the additional
| | ... | measurements be configurable?
-| | ...
+| |
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - packet_loss_ratio - Accepted loss during search. Type: float
| | ... | - final_relative_width - Maximal width multiple of upper. Type: float
@@ -135,22 +135,22 @@
| | ... | - doublings - How many doublings to do when expanding [1]. Type: int
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Returns:*
| | ... | - Lower bound for bi-directional throughput at given PLR. Type: float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| \${throughpt}= \| Find Throughput Using MLRsearch \| \${0} \
| | ... | \| \${0.001} \| \${10.0}\| \${1.0} \| \${1} \| \${720.0} \| \${2} \
| | ... | \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${packet_loss_ratio}=${0.0}
| | ... | ${final_relative_width}=${0.001} | ${final_trial_duration}=${10.0}
| | ... | ${initial_trial_duration}=${1.0}
| | ... | ${number_of_intermediate_phases}=${1} | ${timeout}=${720.0}
| | ... | ${doublings}=${2} | ${traffic_directions}=${2}
-| | ...
+| |
| | ${result} = | Perform optimized ndrpdr search | ${frame_size}
| | ... | ${traffic_profile} | ${10000} | ${max_rate}
| | ... | ${packet_loss_ratio} | ${final_relative_width}
@@ -169,28 +169,28 @@
| | ... | reported result contains aggregate rates.
| | ... | Currently, the min_rate value is hardcoded to match test teardowns.
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - packet_loss_ratio - Accepted loss during search. Type: float
| | ... | - timeout - Stop when search duration is longer [s]. Type: float
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Find critical load using PLR search \| \${1e-7} \| \${120} \
| | ... | \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${packet_loss_ratio}=${1e-7} | ${timeout}=${1800.0}
| | ... | ${traffic_directions}=${2}
-| | ...
+| |
| | ${min_rate} = | Set Variable | ${10000}
| | ${average} | ${stdev} = | Perform soak search | ${frame_size}
| | ... | ${traffic_profile} | ${min_rate} | ${max_rate}
@@ -211,20 +211,20 @@
| | ... | Bandwidth is calculated as:
| | ... | (Throughput * (L2 Frame Size + IPG) * 8)
| | ... | The given result should contain latency data as well.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - text - Flavor text describing which bound is this. Type: string
| | ... | - rate_total - Total (not per stream) measured Tr [pps]. Type: float
| | ... | - frame_size - L2 Frame Size [B]. Type: integer
| | ... | - latency - Latency data to display if non-empty. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display single bound \| NDR lower bound \| \${12345.67} \
| | ... | \| \${64} \| show_latency=\${EMPTY} \|
-| | ...
+| |
| | [Arguments] | ${text} | ${rate_total} | ${frame_size} | ${latency}=${EMPTY}
-| | ...
+| |
| | ${bandwidth_total} = | Evaluate | ${rate_total} * (${frame_size}+20)*8 / 1e9
| | Set Test Message | ${\n}${text}: ${rate_total} pps, | append=yes
| | Set Test Message | ${bandwidth_total} Gbps (initial) | append=yes
@@ -242,18 +242,18 @@
| | ... | Bandwidth is calculated as:
| | ... | (Throughput * (L2 Frame Size + IPG) * 8)
| | ... | The given result should contain latency data as well.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | *Arguments:*
| | ... | - result - Measured result data per stream [pps]. Type: NdrPdrResult
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display result of NDRPDR search \| \${result} \|
-| | ...
+| |
| | [Arguments] | ${result}
-| | ...
+| |
| | ${frame_size} = | Get Average Frame Size | ${frame_size}
| | Display single bound | NDR_LOWER
| | ... | ${result.ndr_interval.measured_low.transmit_rate} | ${frame_size}
@@ -277,22 +277,22 @@
| | ... | (Throughput * (L2 Frame Size + IPG) * 8)
| | ... | TODO: Do we want to report some latency data,
| | ... | even if not measured at the reported bounds?.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | *Arguments:*
| | ... | - avg - Estimated average critical load [pps]. Type: float
| | ... | - stdev - Standard deviation of critical load [pps]. Type: float
-| | ...
+| |
| | ... | *Returns:*
| | ... | - Lower and upper bound of critical load [pps]. Type: 2-tuple of float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display result of soak search \| \${100000} \| \${100} \|
-| | ...
+| |
| | [Arguments] | ${avg} | ${stdev}
-| | ...
+| |
| | ${frame_size} = | Get Average Frame Size | ${frame_size}
| | ${avg} = | Convert To Number | ${avg}
| | ${stdev} = | Convert To Number | ${stdev}
@@ -306,18 +306,18 @@
| | [Documentation]
| | ... | Extract loss ratio of lower bound of the interval.
| | ... | Fail if it does not reach the allowed value.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - interval - Measured interval. Type: ReceiveRateInterval
| | ... | - packet_loss_ratio - Accepted loss (0.0 for NDR). Type: float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Check NDRPDR interval validity \| \${result.pdr_interval} \
| | ... | \| \${0.005} \|
-| | ...
+| |
| | [Arguments] | ${interval} | ${packet_loss_ratio}=${0.0}
-| | ...
+| |
| | ${lower_bound} = | Set Variable | ${interval.measured_low}
| | ${lower_bound_lf} = | Set Variable | ${lower_bound.loss_fraction}
| | Return From Keyword If | ${lower_bound_lf} <= ${packet_loss_ratio}
@@ -337,21 +337,21 @@
| | ... | additional data for debug purposes.
| | ... | Currently, just "Traffic should pass with no loss" is called.
| | ... | TODO: Move latency measurements from optimized search here.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - result - Measured result data per stream [pps]. Type: NdrPdrResult
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - traffic_profile - Topology profile. Type: string
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Perform additional measurements based on NDRPDR result \
| | ... | \| \${result} \| \${64} \| 3-node-IPv4 \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${result} | ${framesize} | ${traffic_profile}
| | ... | ${traffic_directions}=${2}
-| | ...
+| |
| | ${duration}= | Set Variable | ${2.0}
| | ${rate_sum}= | Set Variable | ${result.ndr_interval.measured_low.target_tr}
| | ${rate_per_stream}= | Evaluate | ${rate_sum} / float(${traffic_directions})
@@ -363,7 +363,7 @@
| | [Documentation]
| | ... | Send traffic at specified rate. No packet loss is accepted at loss
| | ... | evaluation.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - duration - Duration of traffic run [s]. Type: integer
| | ... | - rate - Rate for sending packets. Type: string
@@ -374,15 +374,15 @@
| | ... | Type: boolean
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Traffic should pass with no loss \| \${10} \| 4.0mpps \| \${64} \
| | ... | \| 3-node-IPv4 \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${duration} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | ${fail_on_loss}=${True} | ${traffic_directions}=${2}
-| | ...
+| |
| | Send traffic at specified rate | ${duration} | ${rate} | ${frame_size}
| | ... | ${traffic_profile} | traffic_directions=${traffic_directions}
| | Run Keyword If | ${fail_on_loss} | No traffic loss occurred
@@ -390,16 +390,16 @@
| Traffic should pass with maximum rate
| | [Documentation]
| | ... | Send traffic at maximum rate.
-| | ...
+| |
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - subsamples - How many trials in this measurement. Type: int
| | ... | - trial_duration - Duration of single trial [s]. Type: float
@@ -408,16 +408,16 @@
| | ... | Type: int
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Traffic should pass with maximum rate \| \${1} \| \${10.0} \
| | ... | \| \${False} \| \${2} \| \${0} \| \${1} \|
-| | ...
+| |
| | [Arguments] | ${trial_duration}=${PERF_TRIAL_DURATION}
| | ... | ${fail_no_traffic}=${True} | ${subsamples}=${PERF_TRIAL_MULTIPLICITY}
| | ... | ${traffic_directions}=${2} | ${tx_port}=${0} | ${rx_port}=${1}
-| | ...
+| |
| | ${results} = | Send traffic at specified rate | ${trial_duration}
| | ... | ${max_rate}pps | ${frame_size} | ${traffic_profile} | ${subsamples}
| | ... | ${traffic_directions} | ${tx_port} | ${rx_port}
@@ -433,7 +433,7 @@
| | ... | Send traffic at specified rate.
| | ... | Return list of measured receive rates.
| | ... | The rate argument should be TRex friendly, so it should include "pps".
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - trial_duration - Duration of single trial [s]. Type: float
| | ... | - rate - Rate for sending packets. Type: string
@@ -446,16 +446,16 @@
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
| | ... | - pkt_trace - True to enable packet trace. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send traffic at specified rate \| \${1.0} \| 4.0mpps \| \${64} \
| | ... | \| 3-node-IPv4 \| \${10} \| \${2} \| \${0} | \${1} \| \${False}
-| | ...
+| |
| | [Arguments] | ${trial_duration} | ${rate} | ${frame_size}
| | ... | ${traffic_profile} | ${subsamples}=${1} | ${traffic_directions}=${2}
| | ... | ${tx_port}=${0} | ${rx_port}=${1} | ${pkt_trace}=${False}
-| | ...
+| |
| | Clear and show runtime counters with running traffic | ${trial_duration}
| | ... | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | ${traffic_directions} | ${tx_port} | ${rx_port}
@@ -466,7 +466,7 @@
| | Run Keyword If | ${dut_stats}==${True}
| | ... | VPP enable elog traces on all DUTs | ${nodes}
| | ${results} = | Create List
-| | :FOR | ${i} | IN RANGE | ${subsamples}
+| | FOR | ${i} | IN RANGE | ${subsamples}
| | | # The following line is skipping some default arguments,
| | | # that is why subsequent arguments have to be named.
| | | Send traffic on tg | ${trial_duration} | ${rate} | ${frame_size}
@@ -476,6 +476,7 @@
| | | ${rx} = | Get Received
| | | ${rr} = | Evaluate | ${rx} / ${trial_duration}
| | | Append To List | ${results} | ${rr}
+| | END
| | Run Keyword If | ${dut_stats}==${True} | Show event logger on all DUTs
| | ... | ${nodes}
| | Run Keyword If | ${dut_stats}==${True} | Show statistics on all DUTs
@@ -489,7 +490,7 @@
| | ... | Start traffic at specified rate then clear runtime counters on all
| | ... | DUTs. Wait for specified amount of time and capture runtime counters
| | ... | on all DUTs. Finally stop traffic
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - duration - Duration of traffic run [s]. Type: integer
| | ... | - rate - Unidirectional rate for sending packets. Type: string
@@ -500,15 +501,15 @@
| | ... | Type: int
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Clear and show runtime counters with running traffic \| \${10} \
| | ... | \| 4.0mpps \| \${64} \| 3-node-IPv4 \| \${2} \| \${0} \| \${1} \|
-| | ...
+| |
| | [Arguments] | ${duration} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | ${traffic_directions}=${2} | ${tx_port}=${0} | ${rx_port}=${1}
-| | ...
+| |
| | # Duration of -1 means we will stop traffic manually.
| | Send traffic on tg | ${-1} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | warmup_time=${0} | async_call=${True} | latency=${False}
@@ -524,13 +525,13 @@
| Start Traffic on Background
| | [Documentation]
| | ... | Start traffic at specified rate then return control to Robot.
-| | ...
+| |
| | ... | This keyword is useful if the test needs to do something
| | ... | while traffic is running.
| | ... | Just a wrapper around L1 keyword.
| | ... |
| | ... | TODO: How to make sure the traffic is stopped on any failure?
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
@@ -541,15 +542,15 @@
| | ... | Type: int
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start Traffic on Background \| 4.0mpps \| \${2} \| \${0} \
| | ... | \| \${1} \|
-| | ...
+| |
| | [Arguments] | ${rate} | ${traffic_directions}=${2} | ${tx_port}=${0}
| | ... | ${rx_port}=${1}
-| | ...
+| |
| | # Duration of -1 means we will stop traffic manually.
| | Send traffic on tg | ${-1} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | warmup_time=${0} | async_call=${True} | latency=${False}
@@ -560,17 +561,17 @@
| | [Documentation]
| | ... | Stop the running traffic, return measurement result.
| | ... | For bidirectional traffic, the reported values are bi-directional.
-| | ...
+| |
| | ... | Just a wrapper around L1 keyword.
| | ... |
| | ... | TODO: Tolerate if traffic was not started.
-| | ...
+| |
| | ... | *Returns:*
| | ... | - Measurement result. Type: ReceiveRateMeasurement
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \${result}= \| Stop Running Traffic \|
-| | ...
+| |
| | ${result}= | Stop traffic on tg
| | Return From Keyword | ${result}
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
diff --git a/resources/libraries/robot/tcp/tcp_setup.robot b/resources/libraries/robot/tcp/tcp_setup.robot
index 91192639c1..718070979f 100644
--- a/resources/libraries/robot/tcp/tcp_setup.robot
+++ b/resources/libraries/robot/tcp/tcp_setup.robot
@@ -15,9 +15,9 @@
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.IPUtil
| Library | resources.libraries.python.tcp.TCPUtils
-| ...
+|
| Resource | resources/libraries/robot/ip/ip4.robot
-| ...
+|
| Documentation | L2 keywords to set up VPP to test tcp.
*** Keywords ***
@@ -25,7 +25,7 @@
| | [Documentation]
| | ... | Configure IP address on the port, set it up and start HTTP server on
| | ... | the VPP.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - http_static_plugin - Use the HTTP static plugin http server.
| | ... | Type: boolean
@@ -34,15 +34,15 @@
| | ... | - fifo_size - FIFO size in kB. Type: string
| | ... | - private_segment_size - Private segment size. Number + unit.
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set up HTTP server with paramters on the VPP node \| ${true}\
| | ... | \| 400 \| 4096 \| 2g \|
-| | ...
+| |
| | [Arguments] | ${http_static_plugin} | ${prealloc_fifos} | ${fifo_size}
| | ... | ${private_segment_size}
-| | ...
+| |
| | Set Interface State | ${dut1} | ${dut1_if1} | up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.10.2 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.20.2 | 24
diff --git a/resources/libraries/robot/wrk/wrk_utils.robot b/resources/libraries/robot/wrk/wrk_utils.robot
index 1c65228130..1f6261af5a 100644
--- a/resources/libraries/robot/wrk/wrk_utils.robot
+++ b/resources/libraries/robot/wrk/wrk_utils.robot
@@ -17,7 +17,7 @@
| Library | resources.libraries.python.DUTSetup
| Library | resources.libraries.python.TrafficGenerator
| Library | resources.libraries.python.topology.Topology
-| ...
+|
| Documentation | L2 keywords to set up wrk and to measure performance
| ... | parameters using wrk.
@@ -25,17 +25,17 @@
| Measure throughput
| | [Documentation]
| | ... | Measure throughput using wrk.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${profile} - The name of the wrk traffic profile defining the
| | ... | traffic. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Measure throughput \| wrk-bw-1url-1core-50con \|
-| | ...
+| |
| | [Arguments] | ${profile}
-| | ...
+| |
| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2}
| | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | bw
| | Set test message | ${output}
@@ -43,17 +43,17 @@
| Measure requests per second
| | [Documentation]
| | ... | Measure number of requests per second using wrk.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${profile} - The name of the wrk traffic profile defining the
| | ... | traffic. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Measure requests per second \| wrk-bw-1url-1core-50con \|
-| | ...
+| |
| | [Arguments] | ${profile}
-| | ...
+| |
| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2}
| | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | rps
| | Set test message | ${output}
@@ -61,17 +61,17 @@
| Measure connections per second
| | [Documentation]
| | ... | Measure number of connections per second using wrk.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${profile} - The name of the wrk traffic profile defining the
| | ... | traffic. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Measure connections per second \| wrk-bw-1url-1core-50con \|
-| | ...
+| |
| | [Arguments] | ${profile}
-| | ...
+| |
| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2}
| | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | cps
| | Set test message | ${output}