vpp_device: TAP 46/20046/8
authorPeter Mikus <pmikus@cisco.com>
Sun, 9 Jun 2019 06:44:04 +0000 (06:44 +0000)
committerPeter Mikus <pmikus@cisco.com>
Mon, 10 Jun 2019 17:39:07 +0000 (17:39 +0000)
Change-Id: Ife31921daaa5a87f64e61d2eebb98bfdded1dc76
Signed-off-by: Peter Mikus <pmikus@cisco.com>
resources/libraries/robot/shared/default.robot
tests/vpp/device/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-dev.robot [moved from tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot with 86% similarity]
tests/vpp/device/interfaces/eth2p-ethip4-ip4base-eth-1tap-dev.robot [moved from tests/vpp/func/interfaces/eth2p-ethip4-ip4base-eth-1tap-func.robot with 91% similarity]
tests/vpp/func/interfaces/api-crud-tap-func.robot [deleted file]
tests/vpp/func/interfaces/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot [deleted file]
tests/vpp/func/ip4/eth2p-ethip4-ip4base-func.robot [deleted file]
tests/vpp/func/ip6/eth2p-ethip6-ip6base-func.robot [deleted file]
tests/vpp/func/l2bd/eth2p-eth-l2bdbasemaclrn-func.robot [deleted file]
tests/vpp/func/l2bd/eth2p-eth-l2bdbasemacstc-func.robot [deleted file]

index 81ebc83..897b3be 100644 (file)
 | | Tear down QEMU
 | | Verify VPP PID in Teardown
 
-| Set up TAP functional test
-| | [Documentation] | Common test setup for functional tests with TAP.
-| | ...
-| | Set up functional test
-| | Clean Up Namespaces | ${nodes['DUT1']}
-
 | Set up functional test with containers
 | | [Documentation]
 | | ... | Common test setup for functional tests with containers.
 | | Start VPP in all '${container_group}' containers
 | | Append To List | ${container_groups} | ${container_group}
 
-| Tear down TAP functional test
-| | [Documentation] | Common test teardown for functional tests with TAP.
-| | ...
-| | Tear down functional test
-| | Clean Up Namespaces | ${nodes['DUT1']}
-
-| Tear down TAP functional test with Linux bridge
-| | [Documentation] | Common test teardown for functional tests with TAP and
-| | ... | a Linux bridge.
-| | ...
-| | ... | *Arguments:*
-| | ... | - bid_TAP - Bridge name. Type: string
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Tear down TAP functional test with Linux bridge \| ${bid_TAP} \|
-| | ...
-| | [Arguments] | ${bid_TAP}
-| | ...
-| | Tear down functional test
-| | Linux Del Bridge | ${nodes['DUT1']} | ${bid_TAP}
-| | Clean Up Namespaces | ${nodes['DUT1']}
-
 | Tear down functional test with container
 | | [Documentation]
 | | ... | Common test teardown for functional tests which uses containers.
@@ -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:
 | 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
 | ${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
@@ -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:
 | 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
 | ${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\
 | | ... | ${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 (file)
index 53c9038..0000000
+++ /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 (file)
index cc73ffa..0000000
+++ /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 (file)
index 1b4f8cd..0000000
+++ /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 (file)
index d4b7939..0000000
+++ /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 (file)
index 43e092d..0000000
+++ /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 (file)
index ce99a35..0000000
+++ /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}