diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/vpp/device/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-dev.robot (renamed from tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot) | 18 | ||||
-rw-r--r-- | tests/vpp/device/interfaces/eth2p-ethip4-ip4base-eth-1tap-dev.robot (renamed from tests/vpp/func/interfaces/eth2p-ethip4-ip4base-eth-1tap-func.robot) | 19 | ||||
-rw-r--r-- | tests/vpp/func/interfaces/api-crud-tap-func.robot | 70 | ||||
-rw-r--r-- | tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot | 176 | ||||
-rw-r--r-- | tests/vpp/func/ip4/eth2p-ethip4-ip4base-func.robot | 140 | ||||
-rw-r--r-- | tests/vpp/func/ip6/eth2p-ethip6-ip6base-func.robot | 120 | ||||
-rw-r--r-- | tests/vpp/func/l2bd/eth2p-eth-l2bdbasemaclrn-func.robot | 91 | ||||
-rw-r--r-- | tests/vpp/func/l2bd/eth2p-eth-l2bdbasemacstc-func.robot | 85 |
8 files changed, 19 insertions, 700 deletions
diff --git a/tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot b/tests/vpp/device/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-dev.robot index 7be9227a3e..f7a0fbe153 100644 --- a/tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot +++ b/tests/vpp/device/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-dev.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. +# Copyright (c) 2019 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -24,11 +24,15 @@ | Library | resources.libraries.python.Namespaces | Library | resources.libraries.python.IPUtil | ... -| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_TEST +| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV +| ... | FUNCTEST | L2BD | BASE | ETH | TAP | ... -| Test Setup | Set up TAP functional test +| Test Setup | Run Keywords | Set up VPP device test +| ... | AND | Clean Up Namespaces | ${nodes['DUT1']} | ... -| Test Teardown | Tear down TAP functional test with Linux bridge | ${bid_TAP} +| Test Teardown | Run Keywords | Tear down VPP device test +| ... | AND | Clean Up Namespaces | ${nodes['DUT1']} +| ... | AND | Linux Del Bridge | ${nodes['DUT1']} | ${bid_TAP} | ... | Documentation | *Tap Interface Traffic Tests* | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links @@ -53,10 +57,8 @@ | ${tap_int2}= | tap1 *** Test Cases *** -| TC01: Tap Interface Simple BD +| tc01-eth2p-ethicmpv4-l2bdbasemaclrn-eth-2tap-device_tap-simple-bd | | [Documentation] -| | ... | [Top] TG-DUT1-TG. -| | ... | [Enc] Eth-IPv4-ICMPv4. | | ... | [Cfg] On DUT1 configure two L2BD with two if's for each L2BD with MAC\ | | ... | learning and one L2BD joining two linux-TAP interfaces created by VPP\ | | ... | located in namespace. @@ -85,4 +87,4 @@ | | And Add interface to bridge domain | ${dut_node} | | ... | ${dut_to_tg_if2} | ${bid_from_TG} | 0 | | Then Send ICMP packet and verify received packet | ${tg_node} -| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if2} +| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if2}
\ No newline at end of file diff --git a/tests/vpp/func/interfaces/eth2p-ethip4-ip4base-eth-1tap-func.robot b/tests/vpp/device/interfaces/eth2p-ethip4-ip4base-eth-1tap-dev.robot index b3bcee0029..e97ccaf1fb 100644 --- a/tests/vpp/func/interfaces/eth2p-ethip4-ip4base-eth-1tap-func.robot +++ b/tests/vpp/device/interfaces/eth2p-ethip4-ip4base-eth-1tap-dev.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. +# Copyright (c) 2019 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -24,11 +24,14 @@ | Library | resources.libraries.python.Namespaces | Library | resources.libraries.python.IPUtil | ... -| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_TEST +| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV +| ... | FUNCTEST | IP4FWD | BASE | ETH | IP4BASE | TAP | ... -| Test Setup | Set up TAP functional test +| Test Setup | Run Keywords | Set up VPP device test +| ... | AND | Clean Up Namespaces | ${nodes['DUT1']} | ... -| Test Teardown | Tear down TAP functional test +| Test Teardown | Run Keywords | Tear down VPP device test +| ... | AND | Clean Up Namespaces | ${nodes['DUT1']} | ... | Documentation | *Tap Interface Traffic Tests* | ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links @@ -58,10 +61,8 @@ | ${prefix}= | 24 *** Test Cases *** -| TC01: Tap Interface IP Ping Without Namespace +| tc01-eth2p-ethicmpv4-ip4base-device_tap-no-namespace | | [Documentation] -| | ... | [Top] TG-DUT1-TG. -| | ... | [Enc] Eth-IPv4-ICMPv4. | | ... | [Cfg] On DUT1 configure two interface addresses with IPv4 of which\ | | ... | one is TAP interface (dut_to_tg_if and TAP) and one is linux-TAP. | | ... | [Ver] Packet sent from TG gets to the destination and ICMP-reply is\ @@ -89,10 +90,8 @@ | | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac} | | ... | ${tap1_NM_ip} | ${tg_ip_address} -| TC02: Tap Interface IP Ping With Namespace +| tc02-eth2p-ethicmpv4-ip4base-device_tap-namespace | | [Documentation] -| | ... | [Top] TG-DUT1-TG. -| | ... | [Enc] Eth-IPv4-ICMPv4. | | ... | [Cfg] On DUT1 configure two interface addresses with IPv4 of which\ | | ... | one is TAP interface (dut_to_tg_if and TAP) and one is linux-TAP in\ | | ... | namespace. diff --git a/tests/vpp/func/interfaces/api-crud-tap-func.robot b/tests/vpp/func/interfaces/api-crud-tap-func.robot deleted file mode 100644 index 53c9038507..0000000000 --- a/tests/vpp/func/interfaces/api-crud-tap-func.robot +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Resource | resources/libraries/robot/shared/default.robot -| Resource | resources/libraries/robot/ip/ip4.robot -| Resource | resources/libraries/robot/ip/ip6.robot -| Resource | resources/libraries/robot/shared/interfaces.robot -| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot -| Resource | resources/libraries/robot/shared/testing_path.robot -| Resource | resources/libraries/robot/shared/traffic.robot -| Library | resources.libraries.python.Trace -| Library | resources.libraries.python.Tap -| Library | resources.libraries.python.Namespaces -| Library | resources.libraries.python.IPUtil -| ... -| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO -| ... -| Test Setup | Set up TAP functional test -| ... -| Test Teardown | Tear down TAP functional test -| ... -| Documentation | *Tap Interface CRUD Tests* -| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links -| ... | between nodes. -| ... | *[Enc] Packet Encapsulations:* No packet sent. -| ... | *[Cfg] DUT configuration:* Add/Modify/Delete linux-TAP on DUT1. -| ... | *[Ver] Verification:* Check dump of tap interfaces for correctness. -| ... | *[Ref] Applicable standard specifications:* - -*** Variables *** -| ${tap_int1}= | tap0 -| ${tap_int2}= | tap1 - -*** Test Cases *** -| TC01: Tap Interface Modify And Delete -| | [Documentation] -| | ... | [Top] TG-DUT1-TG. -| | ... | [Enc] Eth-IPv4-ICMPv4. -| | ... | [Cfg] Set two TAP interfaces. -| | ... | [Ver] Verify that TAP interface can be modified, deleted, and no\ -| | ... | other TAP interface is affected. -| | ... -| | Given Configure path in 2-node circular topology | ${nodes['TG']} -| | ... | ${nodes['DUT1']} | ${nodes['TG']} -| | And Set interfaces in 2-node circular topology up -| | ${int1}= | When Add Tap Interface | ${dut_node} | ${tap_int1} -| | ${int2}= | And Add Tap Interface | ${dut_node} | ${tap_int2} -| | And Set Interface State | ${dut_node} | ${int1} | up -| | And Set Interface State | ${dut_node} | ${int2} | up -| | Then Check Tap Present | ${dut_node} | ${tap_int1} -| | When Delete Tap Interface | ${dut_node} | ${int1} -| | Then Run Keyword And Expect Error -| | ... | Tap interface :${tap_int1} does not exist -| | ... | Check Tap Present | ${dut_node} | ${tap_int1} -| | And Check Tap Present | ${dut_node} | ${tap_int2} -| | When Delete Tap Interface | ${dut_node} | ${int2} -| | Then Run Keyword And Expect Error -| | ... | Tap interface :${tap_int2} does not exist -| | ... | Check Tap Present | ${dut_node} | ${tap_int2} diff --git a/tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot b/tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot deleted file mode 100644 index cc73ffad02..0000000000 --- a/tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot +++ /dev/null @@ -1,176 +0,0 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Resource | resources/libraries/robot/shared/default.robot -| Resource | resources/libraries/robot/ip/ip4.robot -| Resource | resources/libraries/robot/ip/ip6.robot -| Resource | resources/libraries/robot/shared/interfaces.robot -| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot -| Resource | resources/libraries/robot/shared/testing_path.robot -| Resource | resources/libraries/robot/shared/traffic.robot -| Library | resources.libraries.python.Trace -| Library | resources.libraries.python.Tap -| Library | resources.libraries.python.Namespaces -| Library | resources.libraries.python.IPUtil -| ... -| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SKIP_TEST -| ... -| Test Setup | Set up TAP functional test -| ... -| Test Teardown | Tear down TAP functional test -| ... -| Documentation | *Tap Interface Traffic Tests* -| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links -| ... | between nodes. -| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of -| ... | IPv4. -| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2 -| ... | bridge-domain (L2BD) MAC learning enabled; Split Horizon Groups (SHG) -| ... | are set depending on test case; Namespaces (NM) -| ... | are set on DUT1 with attached linux-TAP. -| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets -| ... | are sent by TG on link to DUT1; On receipt TG verifies packets -| ... | for correctness and their IPv4 src-addr, dst-addr, and MAC addresses. -| ... | *[Ref] Applicable standard specifications:* - -*** Variables *** -| ${tap1_NM_ip}= | 16.0.10.2 -| ${tap2_NM_SHG}= | 16.0.10.3 - -| ${bd_id1}= | 21 -| ${shg1}= | 2 -| ${shg2}= | 3 - -| ${tap1_NM_mac}= | 02:00:00:00:00:02 -| ${tap2_NM_mac}= | 02:00:00:00:00:04 - -| ${tap_int1}= | tap0 -| ${tap_int2}= | tap1 - -| ${namespace1}= | nmspace1 -| ${namespace2}= | nmspace2 - -| ${tg_ip_address_SHG}= | 16.0.10.20 -| ${prefix}= | 24 - -*** Test Cases *** -| TC01: Tap Interface BD - Different Split Horizon -| | [Documentation] -| | ... | [Top] TG-DUT1-TG. -| | ... | [Enc] Eth-IPv4-ICMPv4. -| | ... | [Cfg] On DUT1 configure one if into L2BD with MAC learning. Add two\ -| | ... | TAP interfaces into this L2BD and assign them different SHG. Setup\ -| | ... | two namespaces and assign two linux-TAP interfaces to it respectively. -| | ... | [Ver] Packet is sent from TG to both linux-TAP interfaces and reply\ -| | ... | is checked. Ping from First linux-TAP to another should pass. -| | ... -| | Given Configure path in 2-node circular topology | ${nodes['TG']} -| | ... | ${nodes['DUT1']} | ${nodes['TG']} -| | And Set interfaces in 2-node circular topology up -| | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} -| | ${int2}= | And Add Tap Interface | ${dut_node} | ${tap_int2} -| | And Set Interface State | ${dut_node} | ${int1} | up -| | And Set Interface State | ${dut_node} | ${int2} | up -| | When Create Namespace | ${dut_node} | ${namespace1} -| | And Attach Interface To Namespace | ${dut_node} -| | ... | ${namespace1} | ${tap_int1} -| | And Create Namespace | ${dut_node} | ${namespace2} -| | And Attach Interface To Namespace | ${dut_node} -| | ... | ${namespace2} | ${tap_int2} -| | And Set Linux Interface IP | ${dut_node} | ${tap_int1} -| | ... | ${tap1_NM_ip} | ${prefix} | ${namespace1} -| | And Set Linux Interface IP | ${dut_node} | ${tap_int2} -| | ... | ${tap2_NM_SHG} | ${prefix} | ${namespace2} -| | And Set Linux Interface MAC | ${dut_node} -| | ... | ${tap_int1} | ${tap1_NM_mac} | ${namespace1} -| | And Set Linux Interface MAC | ${dut_node} -| | ... | ${tap_int2} | ${tap2_NM_mac} | ${namespace2} -| | And Set Linux Interface ARP | ${dut_node} | ${tap_int1} -| | ... | ${tg_ip_address_SHG} | ${tg_to_dut_if1_mac} | ${namespace1} -| | And Set Linux Interface ARP | ${dut_node} | ${tap_int2} -| | ... | ${tg_ip_address_SHG} | ${tg_to_dut_if1_mac} | ${namespace2} -| | And Create bridge domain | ${dut_node} -| | ... | ${bd_id1} | learn=${TRUE} -| | And Add interface to bridge domain | ${dut_node} | ${dut_to_tg_if1} -| | ... | ${bd_id1} -| | And Add interface to bridge domain | ${dut_node} | ${int1} -| | ... | ${bd_id1} | ${shg1} -| | And Add interface to bridge domain | ${dut_node} | ${int2} -| | ... | ${bd_id1} | ${shg2} -| | Then Send ICMP echo request and verify answer | ${tg_node} -| | ... | ${tg_to_dut_if1} | ${tap1_NM_mac} | ${tg_to_dut_if1_mac} -| | ... | ${tap1_NM_ip} | ${tg_ip_address_SHG} -| | And Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut_if1} -| | ... | ${tap2_NM_mac} | ${tg_to_dut_if1_mac} -| | ... | ${tap2_NM_SHG} | ${tg_ip_address_SHG} -| | And Send Ping From Node To Dst | ${dut_node} | ${tap1_NM_ip} -| | ... | namespace=${namespace2} -| | And Send Ping From Node To Dst | ${dut_node} | ${tap2_NM_SHG} -| | ... | namespace=${namespace1} - -| TC02: Tap Interface BD - Same Split Horizon -| | [Documentation] -| | ... | [Top] TG-DUT1-TG. -| | ... | [Enc] Eth-IPv4-ICMPv4. -| | ... | [Cfg] On DUT1 configure one if into L2BD with MAC learning. Add two\ -| | ... | TAP interfaces into this L2BD and assign them same SHG. Setup two\ -| | ... | namespaces and assign two linux-TAP interfaces to it respectively. -| | ... | [Ver] Packet is sent from TG to both linux-TAP interfaces and reply\ -| | ... | is checked. Ping from First linux-TAP to another should fail. -| | ... -| | Given Configure path in 2-node circular topology | ${nodes['TG']} -| | ... | ${nodes['DUT1']} | ${nodes['TG']} -| | And Set interfaces in 2-node circular topology up -| | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} -| | ${int2}= | And Add Tap Interface | ${dut_node} | ${tap_int2} -| | And Set Interface State | ${dut_node} | ${int1} | up -| | And Set Interface State | ${dut_node} | ${int2} | up -| | When Create Namespace | ${dut_node} | ${namespace1} -| | And Attach Interface To Namespace | ${dut_node} -| | ... | ${namespace1} | ${tap_int1} -| | And Create Namespace | ${dut_node} | ${namespace2} -| | And Attach Interface To Namespace | ${dut_node} -| | ... | ${namespace2} | ${tap_int2} -| | And Set Linux Interface IP | ${dut_node} | ${tap_int1} -| | ... | ${tap1_NM_ip} | ${prefix} | ${namespace1} -| | And Set Linux Interface IP | ${dut_node} | ${tap_int2} -| | ... | ${tap2_NM_SHG} | ${prefix} | ${namespace2} -| | And Set Linux Interface MAC | ${dut_node} -| | ... | ${tap_int1} | ${tap1_NM_mac} | ${namespace1} -| | And Set Linux Interface MAC | ${dut_node} -| | ... | ${tap_int2} | ${tap2_NM_mac} | ${namespace2} -| | And Set Linux Interface ARP | ${dut_node} | ${tap_int1} -| | ... | ${tg_ip_address_SHG} | ${tg_to_dut_if1_mac} | ${namespace1} -| | And Set Linux Interface ARP | ${dut_node} | ${tap_int2} -| | ... | ${tg_ip_address_SHG} | ${tg_to_dut_if1_mac} | ${namespace2} -| | And Create bridge domain | ${dut_node} -| | ... | ${bd_id1} | learn=${TRUE} -| | And Add interface to bridge domain | ${dut_node} | ${dut_to_tg_if1} -| | ... | ${bd_id1} -| | And Add interface to bridge domain | ${dut_node} | ${int1} -| | ... | ${bd_id1} | ${shg1} -| | And Add interface to bridge domain | ${dut_node} | ${int2} -| | ... | ${bd_id1} | ${shg1} -| | Then Send ICMP echo request and verify answer | ${tg_node} -| | ... | ${tg_to_dut_if1} | ${tap1_NM_mac} | ${tg_to_dut_if1_mac} -| | ... | ${tap1_NM_ip} | ${tg_ip_address_SHG} -| | And Send ICMP echo request and verify answer | ${tg_node} | ${tg_to_dut_if1} -| | ... | ${tap2_NM_mac} | ${tg_to_dut_if1_mac} -| | ... | ${tap2_NM_SHG} | ${tg_ip_address_SHG} -| | And Run Keyword And Expect Error | Ping Not Successful -| | ... | Send Ping From Node To Dst | ${dut_node} | ${tap2_NM_SHG} -| | ... | namespace=${namespace1} -| | And Run Keyword And Expect Error | Ping Not Successful -| | ... | Send Ping From Node To Dst | ${dut_node} | ${tap1_NM_ip} -| | ... | namespace=${namespace2} diff --git a/tests/vpp/func/ip4/eth2p-ethip4-ip4base-func.robot b/tests/vpp/func/ip4/eth2p-ethip4-ip4base-func.robot deleted file mode 100644 index 1b4f8cdb4a..0000000000 --- a/tests/vpp/func/ip4/eth2p-ethip4-ip4base-func.robot +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Library | resources.libraries.python.NodePath -| Library | resources.libraries.python.Trace -| Resource | resources/libraries/robot/shared/default.robot -| Resource | resources/libraries/robot/shared/interfaces.robot -| Resource | resources/libraries/robot/ip/ip4.robot -| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | SKIP_VPP_PATCH -| Suite Setup | Run Keywords -| ... | Restart Vpp Service On All Duts | ${nodes} | AND -| ... | Verify Vpp On All Duts | ${nodes} | AND -| ... | VPP Enable Traces On All Duts | ${nodes} | AND -| ... | Configure all TGs for traffic script | AND -| ... | Update All Interface Data On All Nodes | ${nodes} | AND -| ... | Configure DUT nodes for IPv4 testing -| Test Setup | Run Keywords | Save VPP PIDs | AND -| ... | Reset PAPI History On All DUTs | ${nodes} | AND -| ... | Clear interface counters on all vpp nodes in topology | ${nodes} -| Test Teardown | Run Keywords -| ... | Show packet trace on all DUTs | ${nodes} | AND -| ... | Show PAPI History On All DUTs | ${nodes} | AND -| ... | Verify VPP PID in Teardown -| Documentation | *IPv4 routing test cases* -| ... -| ... | RFC791 IPv4, RFC826 ARP, RFC792 ICMPv4. Encapsulations: Eth-IPv4-ICMPv4 -| ... | on links TG-DUT1, TG-DUT2, DUT1-DUT2. IPv4 routing tests use circular -| ... | 3-node topology TG - DUT1 - DUT2 - TG with one link between the nodes. -| ... | DUT1 and DUT2 are configured with IPv4 routing and static routes. Test -| ... | ICMPv4 Echo Request packets are sent in both directions by TG on links -| ... | to DUT1 and DUT2 and received on TG links on the other side of circular -| ... | topology. On receive TG verifies packets IPv4 src-addr, dst-addr and MAC -| ... | addresses. - -*** Test Cases *** - -| TC01: DUT replies to ICMPv4 Echo Req to its ingress interface -| | [Documentation] -| | ... | Make TG send ICMPv4 Echo Req to DUT ingress interface. Make TG\ -| | ... | verify ICMP Echo Reply is correct. -| | [Tags] | VM_ENV -| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} -| | Compute Path -| | ${src_port} | ${src_node}= | First Interface -| | ${dst_port} | ${dst_node}= | Last Interface -| | ${hops}= | Set Variable | ${0} -| | Route traffic from interface '${src_port}' on node '${src_node}' to interface '${dst_port}' on node '${dst_node}' '${hops}' hops away using IPv4 - -| TC02: DUT routes IPv4 to its egress interface -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv4 Echo Req towards DUT1 egress interface\ -| | ... | connected to DUT2. Make TG verify ICMPv4 Echo Reply is correct. -| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} -| | Compute Path -| | ${src_port} | ${src_node}= | First Interface -| | ${dst_port} | ${dst_node}= | Last Egress Interface -| | ${hops}= | Set Variable | ${0} -| | Route traffic from interface '${src_port}' on node '${src_node}' to interface '${dst_port}' on node '${dst_node}' '${hops}' hops away using IPv4 - -| TC03: DUT1 routes IPv4 to DUT2 ingress interface -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv4 Echo Req towards DUT2 ingress interface\ -| | ... | connected to DUT1. Make TG verify ICMPv4 Echo Reply is correct. -| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} -| | Compute Path -| | ${src_port} | ${src_node}= | First Interface -| | ${dst_port} | ${dst_node}= | Last Interface -| | ${hops}= | Set Variable | ${1} -| | Route traffic from interface '${src_port}' on node '${src_node}' to interface '${dst_port}' on node '${dst_node}' '${hops}' hops away using IPv4 - -| TC04: DUT1 routes IPv4 to DUT2 egress interface -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv4 Echo Req towards DUT2 egress interface\ -| | ... | connected to TG. Make TG verify ICMPv4 Echo Reply is correct. -| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']} -| | Compute Path -| | ${src_port} | ${src_node}= | First Interface -| | ${dst_port} | ${dst_node}= | Last Egress Interface -| | ${hops}= | Set Variable | ${1} -| | Route traffic from interface '${src_port}' on node '${src_node}' to interface '${dst_port}' on node '${dst_node}' '${hops}' hops away using IPv4 - -| TC05: DUT1 and DUT2 route IPv4 between TG interfaces -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv4 Echo Req between its interfaces across DUT1\ -| | ... | and DUT2. Make TG verify ICMPv4 Echo Replies are correct. -| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']} -| | Compute Path -| | ${src_port} | ${src_node}= | First Interface -| | ${dst_port} | ${dst_node}= | Last Interface -| | ${hops}= | Set Variable | ${2} -| | Route traffic from interface '${src_port}' on node '${src_node}' to interface '${dst_port}' on node '${dst_node}' '${hops}' hops away using IPv4 - -| TC06: DUT replies to ICMPv4 Echo Reqs with size 64B-to-1500B-incr-1B -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv4 Echo Reqs to DUT ingress interface,\ -| | ... | incrementating frame size from 64B to 1500B with increment step -| | ... | of 1Byte. Make TG verify ICMP Echo Replies are correct. -| | Execute IPv4 ICMP echo sweep | ${nodes['TG']} | ${nodes['DUT1']} | 0 | 1452 | 1 - -| TC07: DUT replies to ICMPv4 Echo Reqs with size 1500B-to-9000B-incr-10B -| | [Documentation] -| | ... | Make TG send ICMPv4 Echo Reqs to DUT ingress interface,\ -| | ... | incrementating frame size from 1500B to 9000B with increment -| | ... | step of 10Bytes. Make TG verify ICMPv4 Echo Replies are correct. -| | [Setup] | Configure MTU on TG based on MTU on DUT | ${nodes['TG']} | ${nodes['DUT1']} -| | [Teardown] | Run keywords -| | ... | Set default Ethernet MTU on all interfaces on node | ${nodes['TG']} -| | ... | AND | Verify VPP PID in Teardown -| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} -| | Compute Path -| | ${dut_port} | ${dut_node}= | Last Interface -| | ${mtu}= | Get Interface MTU | ${dut_node} | ${dut_port} -| | # ICMP payload size is frame size minus size of Ehternet header, FCS, -| | # IPv4 header and ICMP header -| | ${end_size}= | Evaluate | ${mtu} - 14 - 4 - 20 - 8 -| | Run Keyword If | ${mtu} > 1518 -| | ... | Execute IPv4 ICMP echo sweep | ${nodes['TG']} | ${nodes['DUT1']} -| | ... | 1452 | ${end_size} | 10 - -| TC08: DUT replies to ARP request -| | [Tags] | VM_ENV | SKIP_VPP_PATCH -| | [Documentation] -| | ... | Make TG send ARP Request to DUT and verify ARP Reply is correct.\ -| | Send ARP request and verify response | ${nodes['TG']} | ${nodes['DUT1']} diff --git a/tests/vpp/func/ip6/eth2p-ethip6-ip6base-func.robot b/tests/vpp/func/ip6/eth2p-ethip6-ip6base-func.robot deleted file mode 100644 index d4b7939a9b..0000000000 --- a/tests/vpp/func/ip6/eth2p-ethip6-ip6base-func.robot +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Library | resources.libraries.python.Trace -| Resource | resources/libraries/robot/shared/interfaces.robot -| Resource | resources/libraries/robot/ip/ip6.robot -| Resource | resources/libraries/robot/shared/counters.robot -| Resource | resources/libraries/robot/shared/default.robot -| Variables | resources/libraries/python/IPv6NodesAddr.py | ${nodes} -| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | SKIP_VPP_PATCH -| Suite Setup | Run Keywords -| ... | Configure IPv6 on all DUTs in topology | ${nodes} | ${nodes_ipv6_addr} | AND -| ... | Suppress ICMPv6 router advertisement message | ${nodes} | AND -| ... | Configure IPv6 routing on all DUTs | ${nodes} | ${nodes_ipv6_addr} | AND -| ... | Configure all TGs for traffic script -| Test Setup | Run Keywords | Save VPP PIDs | AND -| ... | Reset PAPI History On All DUTs | ${nodes} | AND -| ... | Clear interface counters on all vpp nodes in topology | ${nodes} -| Test Teardown | Run Keywords -| ... | Show packet trace on all DUTs | ${nodes} | AND -| ... | Show PAPI History On All DUTs | ${nodes} | AND -| ... | Verify VPP PID in Teardown -| Documentation | *IPv6 routing test cases* -| ... -| ... | RFC2460 IPv6, RFC4443 ICMPv6, RFC4861 Neighbor Discovery. -| ... | Encapsulations: Eth-IPv6-ICMPv6 on links TG-DUT1, TG-DUT2, DUT1-DUT2; -| ... | Eth-IPv6-NS/NA on links TG-DUT. IPv6 routing tests use circular 3-node -| ... | topology TG - DUT1 - DUT2 - TG with one link between the nodes. DUT1 and -| ... | DUT2 are configured with IPv6 routing and static routes. Test ICMPv6 -| ... | Echo Request packets are sent in both directions by TG on links to DUT1 -| ... | and DUT2 and received on TG links on the other side of circular -| ... | topology. On receive TG verifies packets IPv6 src-addr, dst-addr and MAC -| ... | addresses. - -*** Test Cases *** -| TC01: DUT replies to ICMPv6 Echo Req to its ingress interface -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv6 Echo Req to DUT ingress interface. Make TG\ -| | ... | verify ICMPv6 Echo Reply is correct. -| | Send IPv6 icmp echo request to DUT1 ingress inteface and verify answer | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes_ipv6_addr} - -| TC02: DUT replies to ICMPv6 Echo Req pkt with size 64B-to-1500B-incr-1B -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv6 Echo Reqs to DUT ingress interface,\ -| | ... | incrementating frame size from 64B to 1500B with increment step -| | ... | of 1Byte. Make TG verify ICMP Echo Replies are correct. -| | Execute IPv6 ICMP echo sweep | ${nodes['TG']} | ${nodes['DUT1']} | 0 | 1452 | 1 | ${nodes_ipv6_addr} - -| TC03: DUT replies to ICMPv6 Echo Req pkt with size 1500B-to-9000B-incr-10B -| | [Documentation] -| | ... | Make TG send ICMPv6 Echo Reqs to DUT ingress interface,\ -| | ... | incrementating frame size from 1500B to 9000B with increment -| | ... | step of 10Bytes. Make TG verify ICMPv6 Echo Replies are correct. -| | [Setup] | Configure MTU on TG based on MTU on DUT | ${nodes['TG']} | ${nodes['DUT1']} -| | [Teardown] | Run keywords -| | ... | Set default Ethernet MTU on all interfaces on node | ${nodes['TG']} -| | ... | AND | Verify VPP PID in Teardown -| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} -| | Compute Path -| | ${dut_port} | ${dut_node}= | Last Interface -| | ${mtu}= | Get Interface MTU | ${dut_node} | ${dut_port} -| | # ICMPv6 payload size is frame size minus size of Ehternet header, FCS, -| | # IPv6 header and ICMPv6 header -| | ${end_size}= | Evaluate | ${mtu} - 14 - 4 - 40 - 8 -| | Run Keyword If | ${mtu} > 1518 -| | ... | Execute IPv6 ICMP echo sweep | ${nodes['TG']} | ${nodes['DUT1']} -| | ... | 1452 | ${end_size} | 10 | ${nodes_ipv6_addr} - -| TC04: DUT routes to its egress interface -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv6 Echo Req towards DUT1 egress interface\ -| | ... | connected to DUT2. Make TG verify ICMPv6 Echo Reply is correct. -| | Send IPv6 ICMP echo request to DUT1 egress interface and verify answer | ${nodes['TG']} | ${nodes['DUT1']} | -| | ... | ${nodes['DUT2']} | ${nodes_ipv6_addr} - -| TC05: DUT1 routes to DUT2 ingress interface -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv6 Echo Req towards DUT2 ingress interface\ -| | ... | connected to DUT1. Make TG verify ICMPv6 Echo Reply is correct. -| | Send IPv6 ICMP echo request to DUT2 via DUT1 and verify answer | ${nodes['TG']} | ${nodes['DUT1']} -| | ... | ${nodes['DUT2']} | ${nodes_ipv6_addr} - -| TC06: DUT1 routes to DUT2 egress interface -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv6 Echo Req towards DUT2 egress interface\ -| | ... | connected to TG. Make TG verify ICMPv6 Echo Reply is correct. -| | Send IPv6 ICMP echo request to DUT2 egress interface via DUT1 and verify answer | ${nodes['TG']} | ${nodes['DUT1']} -| | ... | ${nodes['DUT2']} | ${nodes_ipv6_addr} - -| TC07: DUT1 and DUT2 route between TG interfaces -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | Make TG send ICMPv6 Echo Req between its interfaces across DUT1\ -| | ... | and DUT2. Make TG verify ICMPv6 Echo Replies are correct. -| | Ipv6 tg to tg routed | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} -| | ... | ${nodes_ipv6_addr} - -| TC08: DUT replies to IPv6 Neighbor Solicitation -| | [Tags] | VM_ENV -| | [Documentation] -| | ... | On DUT configure interface IPv6 address in the main routing\ -| | ... | domain. Make TG send Neighbor Solicitation message on the link -| | ... | to DUT and verify DUT Neighbor Advertisement reply is correct. -| | Send IPv6 neighbor solicitation and verify answer | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes_ipv6_addr} diff --git a/tests/vpp/func/l2bd/eth2p-eth-l2bdbasemaclrn-func.robot b/tests/vpp/func/l2bd/eth2p-eth-l2bdbasemaclrn-func.robot deleted file mode 100644 index 43e092dae2..0000000000 --- a/tests/vpp/func/l2bd/eth2p-eth-l2bdbasemaclrn-func.robot +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Resource | resources/libraries/robot/shared/default.robot -| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot -| Resource | resources/libraries/robot/shared/testing_path.robot -| Resource | resources/libraries/robot/vm/qemu.robot -| Resource | resources/libraries/robot/shared/interfaces.robot -| Library | resources.libraries.python.Trace -| Force Tags | HW_ENV | VM_ENV | SKIP_VPP_PATCH -| Test Setup | Set up functional test -| Test Teardown | Tear down functional test -| Documentation | *L2 bridge-domain test cases* -| ... -| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links -| ... | between nodes; TG-DUT1-DUT2-TG 3-node circular topology with -| ... | single links between nodes. -| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of -| ... | IPv4; Eth-IPv6-ICMPv6 for L2 switching of IPv6 use. Both apply -| ... | to all links. -| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2 -| ... | bridge-domain (L2BD) switching combined with MAC learning enabled. -| ... | *[Ver] TG verification:* Test ICMPv4 (or ICMPv6) Echo Request packets -| ... | are sent in both directions by TG on links to DUT1 and DUT2; on -| ... | receive TG verifies packets for correctness and their IPv4 (IPv6) -| ... | src-addr, dst-addr and MAC addresses. -| ... | *[Ref] Applicable standard specifications:* - -*** Variables *** -| ${bd_id1}= | 1 -| ${bd_id2}= | 2 - -*** Test Cases *** -| TC01: DUT reports active interfaces -| | [Documentation] -| | ... | [Top] TG=DUT1; TG-DUT1-DUT2-TG. [Enc] None. [Cfg] Discovered \ -| | ... | active interfaces. [Ver] Report active interfaces on DUT. [Ref] -| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO | 3_NODE_SINGLE_LINK_TOPO -| | VPP reports interfaces through VAT on '${nodes['DUT1']}' - -| TC02: DUT with L2BD (MAC learning) switch ICMPv4 between two TG links -| | [Documentation] -| | ... | [Top] TG=DUT1. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 configure \ -| | ... | two i/fs into L2BD with MAC learning. [Ver] Make TG verify -| | ... | ICMPv4 Echo Req pkts are switched thru DUT1 in both directions -| | ... | and are correct on receive. [Ref] -| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO -| | Given Configure path in 2-node circular topology -| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']} -| | And Set interfaces in 2-node circular topology up -| | When Create bridge domain | ${dut_node} | ${bd_id1} -| | And Add interface to bridge domain | ${dut_node} | ${dut_to_tg_if1} -| | ... | ${bd_id1} -| | And Add interface to bridge domain | ${dut_node} | ${dut_to_tg_if2} -| | ... | ${bd_id1} -| | Then Send ICMPv4 bidirectionally and verify received packets | ${tg_node} -| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if2} - -| TC03: DUT1 and DUT2 with L2BD (MAC learning) switch between two TG links -| | [Documentation] -| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 and DUT2 \ -| | ... | configure two i/fs into L2BD with MAC learning. [Ver] Make TG -| | ... | verify ICMPv4 Echo Req pkts are switched thru DUT1 and DUT2 in -| | ... | both directions and are correct on receive. [Ref] -| | [Tags] | 3_NODE_SINGLE_LINK_TOPO -| | Given Configure path in 3-node circular topology -| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']} -| | And Set interfaces in 3-node circular topology up -| | When Create bridge domain | ${dut1_node} | ${bd_id1} -| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg} -| | ... | ${bd_id1} -| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_dut2} -| | ... | ${bd_id1} -| | And Create bridge domain | ${dut2_node} | ${bd_id2} -| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg} -| | ... | ${bd_id2} -| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_dut1} -| | ... | ${bd_id2} -| | Then Send ICMPv4 bidirectionally and verify received packets | ${tg_node} -| | ... | ${tg_to_dut1} | ${tg_to_dut2} diff --git a/tests/vpp/func/l2bd/eth2p-eth-l2bdbasemacstc-func.robot b/tests/vpp/func/l2bd/eth2p-eth-l2bdbasemacstc-func.robot deleted file mode 100644 index ce99a35fcb..0000000000 --- a/tests/vpp/func/l2bd/eth2p-eth-l2bdbasemacstc-func.robot +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Resource | resources/libraries/robot/shared/default.robot -| Resource | resources/libraries/robot/l2/l2_bridge_domain.robot -| Resource | resources/libraries/robot/shared/testing_path.robot -| Resource | resources/libraries/robot/vm/qemu.robot -| Library | resources.libraries.python.Trace -| Force Tags | HW_ENV | VM_ENV | SKIP_VPP_PATCH -| Test Setup | Set up functional test -| Test Teardown | Tear down functional test -| Documentation | *L2 bridge-domain test cases* -| ... -| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology -| ... | with single links between nodes. -| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of -| ... | IPv4; Eth-IPv6-ICMPv6 for L2 switching of IPv6 use. Both apply -| ... | to all links. -| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2 -| ... | bridge-domain (L2BD) switching combined with static MACs. -| ... | *[Ver] TG verification:* Test ICMPv4 (or ICMPv6) Echo Request packets -| ... | are sent in both directions by TG on links to DUT1 and DUT2; on -| ... | receive TG verifies packets for correctness and their IPv4 (IPv6) -| ... | src-addr, dst-addr and MAC addresses. -| ... | *[Ref] Applicable standard specifications:* - -*** Variables *** -| ${bd_id1}= | 1 -| ${bd_id2}= | 2 - -*** Test Cases *** -| TC01: DUT1 and DUT2 with L2BD (static MACs) switch between two TG links -| | [Documentation] -| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 and \ -| | ... | DUT2 configure two i/fs into L2BD with static MACs. [Ver] Make -| | ... | TG verify ICMPv4 Echo Req pkts are switched thru DUT1 and DUT2 -| | ... | in both directions and are correct on receive. [Ref] -| | [Tags] | 3_NODE_SINGLE_LINK_TOPO -| | Given Configure path in 3-node circular topology -| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']} -| | And Set interfaces in 3-node circular topology up -| | When Create bridge domain | ${dut1_node} | ${bd_id1} | learn=${FALSE} -| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_tg} -| | ... | ${bd_id1} -| | And Add interface to bridge domain | ${dut1_node} | ${dut1_to_dut2} -| | ... | ${bd_id1} -| | And Add destination port to L2FIB | ${tg_node} -| | ... | ${tg_to_dut1} -| | ... | ${dut1_node} -| | ... | ${dut1_to_tg} -| | ... | ${bd_id1} -| | And Add destination port to L2FIB | ${tg_node} -| | ... | ${tg_to_dut2} -| | ... | ${dut1_node} -| | ... | ${dut1_to_dut2} -| | ... | ${bd_id1} -| | And Create bridge domain | ${dut2_node} | ${bd_id2} -| | ... | learn=${FALSE} -| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_tg} -| | ... | ${bd_id2} -| | And Add interface to bridge domain | ${dut2_node} | ${dut2_to_dut1} -| | ... | ${bd_id2} -| | And Add destination port to L2FIB | ${tg_node} -| | ... | ${tg_to_dut1} -| | ... | ${dut2_node} -| | ... | ${dut2_to_dut1} -| | ... | ${bd_id2} -| | And Add destination port to L2FIB | ${tg_node} -| | ... | ${tg_to_dut2} -| | ... | ${dut2_node} -| | ... | ${dut2_to_tg} -| | ... | ${bd_id2} -| | Then Send ICMPv4 bidirectionally and verify received packets | ${tg_node} | ${tg_to_dut1} -| | ... | ${tg_to_dut2} |