SSH_OPTIONS="-i ${VIRL_PKEY} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o LogLevel=error"
-TEST_GROUPS=("bridge_domain,dhcp,gre,honeycomb,l2_xconnect,lisp,softwire" "cop,telemetry,ipsec,ipv6,rpf,tap,vrf" "fds,iacl,ipv4,policer,vlan,vxlan")
+TEST_GROUPS=("l2bd_base,dhcp,gre,honeycomb,l2xc_base,lisp,softwire" "cop_base,telemetry,ipsec,ipv6_base,rpf,tap,vrf" "fds,iacl_base,ipv4_base,policer,vlan,vxlan")
SUITE_PATH="tests.func"
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+++ /dev/null
-# 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/default.robot
-| Resource | resources/libraries/robot/bridge_domain.robot
-| Resource | resources/libraries/robot/testing_path.robot
-| Resource | resources/libraries/robot/qemu.robot
-| Library | resources.libraries.python.Trace
-| Force Tags | HW_ENV | VM_ENV
-| Test Setup | Func Test Setup
-| Test Teardown | Func Test Teardown
-| 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; TG=DUT1=DUT2=TG 3-node circular
-| ... | topology with double parallel links and TG=DUT=VM 3-node topology
-| ... | with VM and double parallel links.
-| ... | *[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; MAC
-| ... | learning enabled and Split Horizon Groups (SHG) depending on
-| ... | test case.
-| ... | *[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
-| ${shg1}= | 3
-| ${shg2}= | 4
-| ${sock1}= | /tmp/sock1
-| ${sock2}= | /tmp/sock2
-
-*** 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 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 Path for 2-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
-| | And Interfaces in 2-node path are up
-| | When Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
-| | ... | ${bd_id1}
-| | Then Send and receive ICMPv4 bidirectionally | ${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 Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | When Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_dut1}
-| | ... | ${bd_id2}
-| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2}
-
-| TC04: 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 Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | When Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | ... | learn=${FALSE}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut1}
-| | ... | ${dut1_node}
-| | ... | ${dut1_to_tg}
-| | ... | ${bd_id1}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut2}
-| | ... | ${dut1_node}
-| | ... | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
-| | ... | learn=${FALSE}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_dut1}
-| | ... | ${bd_id2}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut1}
-| | ... | ${dut2_node}
-| | ... | ${dut2_to_dut1}
-| | ... | ${bd_id2}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut2}
-| | ... | ${dut2_node}
-| | ... | ${dut2_to_tg}
-| | ... | ${bd_id2}
-| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2}
-
-| TC05: DUT1 and DUT2 with L2BD (MAC learn) and SHG switch between four TG links
-| | [Documentation]
-| | ... | [Top] TG=DUT1=DUT2=TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 and \
-| | ... | DUT2 configure four i/fs into L2BD with MAC learning and the
-| | ... | same SHG on i/fs towards TG. [Ver] Make TG verify ICMPv4 Echo
-| | ... | Req pkts are switched thru DUT1 and DUT2 in both directions and
-| | ... | are correct on receive; verify no pkts are switched thru SHG
-| | ... | isolated interfaces. [Ref]
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
-| | ... | ${nodes['DUT1']}
-| | ... | ${nodes['DUT2']}
-| | And Interfaces in 3-node BD-SHG testing are up
-| | When Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ... | ${bd_id1} | ${shg1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ... | ${bd_id1} | ${shg1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ... | ${bd_id2} | ${shg2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ... | ${bd_id2} | ${shg2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_dut1}
-| | ... | ${bd_id2}
-| | Then Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if2}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if2}
-| | And Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMPv4 bidirectionally
-| | | ... | ${tg_node} | ${tg_to_dut1_if1}
-| | | ... | ${tg_to_dut1_if2}
-| | And Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMPv4 bidirectionally
-| | | ... | ${tg_node} | ${tg_to_dut2_if1}
-| | | ... | ${tg_to_dut2_if2}
-
-| TC06: DUT with two L2BDs (MAC learn) switches ICMPv4 between TG and VM links
-| | [Documentation]
-| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 configure \
-| | ... | two L2BDs with MAC learning, each with vhost-user i/f to local
-| | ... | VM and i/f to TG; configure VM to loop pkts back betwen its two
-| | ... | virtio i/fs. [Ver] Make TG verify ICMPv4 Echo Req pkts are
-| | ... | switched thru DUT1 and VM in both directions and are correct on
-| | ... | receive. [Ref]
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO | VPP_VM_ENV
-| | Given Path for 2-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
-| | And Interfaces in 2-node path are up
-| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
-| | ... | ${bd_id2}
-| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
-| | ... | ${sock2}
-| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
-| | ... | ${tg_to_dut_if2}
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Stop and Clear QEMU | ${dut_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-
-| TC07: DUT with two L2BDs (MAC learn) switches ICMPv6 between TG and VM links
-| | [Documentation]
-| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 configure \
-| | ... | two L2BDs with MAC learning, each with vhost-user i/f to local
-| | ... | VM and i/f to TG; configure VM to loop pkts back betwen its two
-| | ... | virtio i/fs. [Ver] Make TG verify ICMPv6 Echo Req pkts are
-| | ... | switched thru DUT1 and VM in both directions and are correct on
-| | ... | receive. [Ref]
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO | VPP_VM_ENV
-| | Given Path for 2-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
-| | And Interfaces in 2-node path are up
-| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
-| | ... | ${bd_id2}
-| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
-| | ... | ${sock2}
-| | Then Send and receive ICMPv6 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
-| | ... | ${tg_to_dut_if2}
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Stop and Clear QEMU | ${dut_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-
-| TC08: DUT with two L2BDs (static MACs) switches ICMPv4 between TG and VM links
-| | [Documentation]
-| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 configure \
-| | ... | two L2BDs with static MACs, each with vhost-user i/f to local VM
-| | ... | and i/f to TG; configure VM to loop pkts back betwen its two
-| | ... | virtio i/fs. [Ver] Make TG verify ICMPv4 Echo Req pkts are
-| | ... | switched thru DUT1 and VM in both directions and are correct on
-| | ... | receive. [Ref]
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO | VPP_VM_ENV
-| | Given Path for 2-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
-| | And Interfaces in 2-node path are up
-| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
-| | ... | learn=${FALSE}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
-| | ... | ${bd_id1}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if1}
-| | ... | ${dut_node}
-| | ... | ${dut_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if2}
-| | ... | ${dut_node}
-| | ... | ${vhost_if1}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
-| | ... | learn=${FALSE}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
-| | ... | ${bd_id2}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if2}
-| | ... | ${dut_node}
-| | ... | ${dut_to_tg_if2}
-| | ... | ${bd_id2}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if1}
-| | ... | ${dut_node}
-| | ... | ${vhost_if2}
-| | ... | ${bd_id2}
-| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
-| | ... | ${sock2}
-| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
-| | ... | ${tg_to_dut_if2}
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Stop and Clear QEMU | ${dut_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-
-| TC09: DUT with two L2BDs (static MACs) switches ICMPv6 between TG and VM links
-| | [Documentation]
-| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 configure \
-| | ... | two L2BDs with static MACs, each with vhost-user i/f to local VM
-| | ... | and i/f to TG; configure VM to loop pkts back betwen its two
-| | ... | virtio i/fs. [Ver] Make TG verify ICMPv6 Echo Req pkts are
-| | ... | switched thru DUT1 and VM in both directions and are correct on
-| | ... | receive. [Ref]
-| | ...
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO | VPP_VM_ENV
-| | ...
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Stop and Clear QEMU | ${dut_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | Given Path for 2-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
-| | And Interfaces in 2-node path are up
-| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
-| | ... | learn=${FALSE}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
-| | ... | ${bd_id1}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if1}
-| | ... | ${dut_node}
-| | ... | ${dut_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if2}
-| | ... | ${dut_node}
-| | ... | ${vhost_if1}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
-| | ... | learn=${FALSE}
-| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
-| | ... | ${bd_id2}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if2}
-| | ... | ${dut_node}
-| | ... | ${dut_to_tg_if2}
-| | ... | ${bd_id2}
-| | And Destination port is added to L2FIB on DUT node | ${tg_node}
-| | ... | ${tg_to_dut_if1}
-| | ... | ${dut_node}
-| | ... | ${vhost_if2}
-| | ... | ${bd_id2}
-| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
-| | ... | ${sock2}
-| | Then Send and receive ICMPv6 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
-| | ... | ${tg_to_dut_if2}
--- /dev/null
+# 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
+| Library | resources.libraries.python.Cop
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/l2_xconnect.robot
+| Variables | resources/libraries/python/IPv4NodeAddress.py | ${nodes}
+| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *COP Security IPv4 Blacklist Tests*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 on all links.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv4 routing and
+| ... | static routes. COP security black-lists are applied on DUT1 ingress
+| ... | interface from TG. DUT2 is configured with L2XC.
+| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are sent in
+| ... | one direction by TG on link to DUT1; on receive TG verifies packets for
+| ... | correctness and drops as applicable.
+| ... | *[Ref] Applicable standard specifications:*
+
+*** Variables ***
+| ${tg_node}= | ${nodes['TG']}
+| ${dut1_node}= | ${nodes['DUT1']}
+| ${dut2_node}= | ${nodes['DUT2']}
+
+| ${dut1_if1_ip}= | 192.168.1.1
+| ${dut1_if2_ip}= | 192.168.2.1
+| ${dut1_if1_ip_GW}= | 192.168.1.2
+| ${dut1_if2_ip_GW}= | 192.168.2.2
+
+| ${test_dst_ip}= | 32.0.0.1
+| ${test_src_ip}= | 16.0.0.1
+
+| ${cop_dut_ip}= | 16.0.0.0
+
+| ${ip_prefix}= | 24
+| ${nodes_ipv4_addresses}= | ${nodes_ipv4_addr}
+
+| ${fib_table_number}= | 1
+
+*** Test Cases ***
+| TC01: DUT drops IPv4 pkts with COP blacklist set with IPv4 src-addr
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 \
+| | ... | configure interface IPv4 addresses and routes in the main
+| | ... | routing domain, add COP blacklist on interface to TG with IPv4
+| | ... | src-addr matching packets generated by TG; on DUT2 configure L2
+| | ... | xconnect. [Ver] Make TG send ICMPv4 Echo Req on its interface to
+| | ... | DUT1; verify no ICMPv4 Echo Req pkts are received. [Ref]
+| | Given Path for 3-node testing is set
+| | ... | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg_node}
+| | And Interfaces in 3-node path are up
+| | And L2 setup xconnect on DUT
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
+| | And Set Interface Address
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
+| | And Set Interface Address
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
+| |Â And Add Arp On Dut
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
+| |Â And Add Arp On Dut
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
+| | And Vpp Route Add | ${dut1_node}
+| | ... | ${test_dst_ip} | ${ip_prefix} | ${dut1_if2_ip_GW} | ${dut1_to_dut2}
+| | And Add fib table | ${dut1_node}
+| | ... | ${cop_dut_ip} | ${ip_prefix} | ${fib_table_number} |Â drop
+| | When COP Add whitelist Entry
+| | ... | ${dut1_node} | ${dut1_to_tg} | ip4 | ${fib_table_number}
+| | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
+| | Then Send packet from Port to Port should failed | ${tg_node}
+| | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1} | ${tg_to_dut1_mac}
+| | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
+| | ... | ${tg_to_dut2_mac}
| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *COP Security IPv4 Blacklist and Whitelist Tests*
+| Documentation | *COP Security IPv4 Whitelist Tests*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1} | ${tg_to_dut1_mac}
| | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
| | ... | ${tg_to_dut2_mac}
-
-| TC02: DUT drops IPv4 pkts with COP blacklist set with IPv4 src-addr
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 \
-| | ... | configure interface IPv4 addresses and routes in the main
-| | ... | routing domain, add COP blacklist on interface to TG with IPv4
-| | ... | src-addr matching packets generated by TG; on DUT2 configure L2
-| | ... | xconnect. [Ver] Make TG send ICMPv4 Echo Req on its interface to
-| | ... | DUT1; verify no ICMPv4 Echo Req pkts are received. [Ref]
-| | Given Path for 3-node testing is set
-| | ... | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg_node}
-| | And Interfaces in 3-node path are up
-| | And L2 setup xconnect on DUT
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | And Set Interface Address
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
-| | And Set Interface Address
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
-| |Â And Add Arp On Dut
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
-| |Â And Add Arp On Dut
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${test_dst_ip} | ${ip_prefix} | ${dut1_if2_ip_GW} | ${dut1_to_dut2}
-| | And Add fib table | ${dut1_node}
-| | ... | ${cop_dut_ip} | ${ip_prefix} | ${fib_table_number} |Â drop
-| | When COP Add whitelist Entry
-| | ... | ${dut1_node} | ${dut1_to_tg} | ip4 | ${fib_table_number}
-| | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
-| | Then Send packet from Port to Port should failed | ${tg_node}
-| | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1} | ${tg_to_dut1_mac}
-| | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
-| | ... | ${tg_to_dut2_mac}
--- /dev/null
+# 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
+| Library | resources.libraries.python.Cop
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/l2_xconnect.robot
+| Variables | resources/libraries/python/IPv6NodesAddr.py | ${nodes}
+| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *COP Security IPv6 Blacklist Tests*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-ICMPv6 on all links.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with IPv6 routing and
+| ... | static routes. COP security black-lists are applied on DUT1 ingress
+| ... | interface from TG. DUT2 is configured with L2XC.
+| ... | *[Ver] TG verification:* Test ICMPv6 Echo Request packets are sent in
+| ... | one direction by TG on link to DUT1; on receive TG verifies packets for
+| ... | correctness and drops as applicable.
+| ... | *[Ref] Applicable standard specifications:*
+
+*** Variables ***
+| ${tg_node}= | ${nodes['TG']}
+| ${dut1_node}= | ${nodes['DUT1']}
+| ${dut2_node}= | ${nodes['DUT2']}
+
+| ${dut1_if1_ip}= | 3ffe:62::1
+| ${dut1_if2_ip}= | 3ffe:63::1
+| ${dut1_if1_ip_GW}= | 3ffe:62::2
+| ${dut1_if2_ip_GW}= | 3ffe:63::2
+
+| ${dut2_if1_ip}= | 3ffe:72::1
+| ${dut2_if2_ip}= | 3ffe:73::1
+
+| ${test_dst_ip}= | 3ffe:64::1
+| ${test_src_ip}= | 3ffe:61::1
+
+| ${cop_dut_ip}= | 3ffe:61::
+
+| ${ip_prefix}= | 64
+
+| ${nodes_ipv6_addresses}= | ${nodes_ipv6_addr}
+
+| ${fib_table_number}= | 1
+
+*** Test Cases ***
+| TC01: DUT drops IPv6 pkts with COP blacklist set with IPv6 src-addr
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 \
+| | ... | configure interface IPv6 addresses and routes in the main
+| | ... | routing domain, add COP blacklist on interface to TG with IPv6
+| | ... | src-addr matching packets generated by TG; on DUT2 configure L2
+| | ... | xconnect. [Ver] Make TG send ICMPv6 Echo Req on its interface to
+| | ... | DUT1; verify no ICMPv6 Echo Req pkts are received. [Ref]
+| | Given Path for 3-node testing is set
+| | ... | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg_node}
+| | And Interfaces in 3-node path are up
+| | And L2 setup xconnect on DUT
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
+| | And VPP Set IF IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
+| | And VPP Set IF IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
+| | And VPP Set IF IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip} | ${ip_prefix}
+| | And VPP Set IF IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip} | ${ip_prefix}
+| |Â And Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
+| |Â And Add IP Neighbor
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
+| | And Vpp Route Add | ${dut1_node}
+| | ... | ${test_dst_ip} | ${ip_prefix} | ${dut1_if2_ip_GW} | ${dut1_to_dut2}
+| | And Vpp All Ra Suppress Link Layer | ${nodes}
+| | And Add fib table | ${dut1_node}
+| | ... | ${cop_dut_ip} | ${ip_prefix} | ${fib_table_number} |Â drop
+| | When COP Add whitelist Entry
+| | ... | ${dut1_node} | ${dut1_to_tg} | ip6 | ${fib_table_number}
+| | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
+| | Then Send packet from Port to Port should failed | ${tg_node}
+| | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1} | ${tg_to_dut1_mac}
+| | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
+| | ... | ${tg_to_dut2_mac}
| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *COP Security IPv6 Blacklist and Whitelist Tests*
+| Documentation | *COP Security IPv6 Whitelist Tests*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1} | ${tg_to_dut1_mac}
| | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
| | ... | ${tg_to_dut2_mac}
-
-| TC02: DUT drops IPv6 pkts with COP blacklist set with IPv6 src-addr
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 \
-| | ... | configure interface IPv6 addresses and routes in the main
-| | ... | routing domain, add COP blacklist on interface to TG with IPv6
-| | ... | src-addr matching packets generated by TG; on DUT2 configure L2
-| | ... | xconnect. [Ver] Make TG send ICMPv6 Echo Req on its interface to
-| | ... | DUT1; verify no ICMPv6 Echo Req pkts are received. [Ref]
-| | Given Path for 3-node testing is set
-| | ... | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg_node}
-| | And Interfaces in 3-node path are up
-| | And L2 setup xconnect on DUT
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | And VPP Set IF IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip} | ${ip_prefix}
-| | And VPP Set IF IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip} | ${ip_prefix}
-| |Â And Add IP Neighbor
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip_GW} | ${tg_to_dut1_mac}
-| |Â And Add IP Neighbor
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip_GW} | ${tg_to_dut2_mac}
-| | And Vpp Route Add | ${dut1_node}
-| | ... | ${test_dst_ip} | ${ip_prefix} | ${dut1_if2_ip_GW} | ${dut1_to_dut2}
-| | And Vpp All Ra Suppress Link Layer | ${nodes}
-| | And Add fib table | ${dut1_node}
-| | ... | ${cop_dut_ip} | ${ip_prefix} | ${fib_table_number} |Â drop
-| | When COP Add whitelist Entry
-| | ... | ${dut1_node} | ${dut1_to_tg} | ip6 | ${fib_table_number}
-| | And COP interface enable or disable | ${dut1_node} | ${dut1_to_tg} | enable
-| | Then Send packet from Port to Port should failed | ${tg_node}
-| | ... | ${test_src_ip} | ${test_dst_ip} | ${tg_to_dut1} | ${tg_to_dut1_mac}
-| | ... | ${dut1_to_tg_mac} | ${tg_to_dut2} | ${dut1_to_dut2_mac}
-| | ... | ${tg_to_dut2_mac}
| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *DHCP Client related test cases*
+| Documentation | *DHCPv4 Client related test cases*
*** Variables ***
| ${client_hostname}= | dhcp-client
*** Test Cases ***
| VPP sends a DHCP DISCOVER
-| | [Documentation] | Configure DHCP client on interface to TG without hostname
-| | ... | and check if DHCP DISCOVER message contains all required
-| | ... | fields with expected values.
+| | [Documentation] | Configure DHCPv4 client on interface to TG without
+| | ... | hostname and check if DHCPv4 DISCOVER message contains all
+| | ... | required fields with expected values.
| | ...
| | Given Path for 2-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | Then Check DHCP DISCOVER header | ${tg_node}
| | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac}
-| VPP sends a DHCP DISCOVER with hostname
-| | [Documentation] | Configure DHCP client on interface to TG with hostname
-| | ... | and check if DHCP DISCOVER message contains all required
+| VPP sends a DHCPv4 DISCOVER with hostname
+| | [Documentation] | Configure DHCPv4 client on interface to TG with hostname
+| | ... | and check if DHCPv4 DISCOVER message contains all required
| | ... | fields with expected values.
| | ...
| | Given Path for 2-node testing is set
| | Then Check DHCP DISCOVER header | ${tg_node}
| | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac} | ${client_hostname}
-| VPP sends DHCP REQUEST after OFFER
-| | [Documentation] | Configure DHCP client on interface to TG and check if
-| | ... | DHCP REQUEST message contains all required fields.
+| VPP sends DHCPv4 REQUEST after OFFER
+| | [Documentation] | Configure DHCPv4 client on interface to TG and check if
+| | ... | DHCPv4 REQUEST message contains all required fields.
| | ...
| | Given Path for 2-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | ... | ${tg_to_dut_if1_mac} | ${server_ip}
| | ... | ${dut_to_tg_if1_mac} | ${client_ip} | ${client_mask}
-| VPP doesn't send DHCP REQUEST after OFFER with wrong XID
+| VPP doesn't send DHCPv4 REQUEST after OFFER with wrong XID
| | [ Tags ] | EXPECTED_FAILING
-| | [Documentation] | Configure DHCP client on interface to TG. If server sends
-| | ... | DHCP OFFER with different XID as in DHCP DISCOVER,
-| | ... | DHCP REQUEST message shouldn't be sent.
+| | [Documentation] | Configure DHCPv4 client on interface to TG. If server
+| | ... | sends DHCPv4 OFFER with different XID as in DHCPv4
+| | ... | DISCOVER, DHCPv4 REQUEST message shouldn't be sent.
| | ...
| | Given Path for 2-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | ... | offer_xid=${own_xid}
| VPP honors DHCPv4 lease time
-| | [Documentation] | Send IP configuration to the VPP client via DHCP. Address
-| | ... | is checked with ICMP echo request and there should be no
-| | ... | reply for echo request when lease has expired.
+| | [Documentation] | Send IP configuration to the VPP client via DHCPv4.
+| | ... | Address is checked with ICMP echo request and there should
+| | ... | be no reply for echo request when lease has expired.
| | ...
| | Given Path for 2-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *DHCP proxy test cases*
+| Documentation | *DHCPv4 proxy test cases*
| ...
| ... | *[Top] Network Topologies:* TG = DUT
| ... | with two links between the nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP-BOOTP-DHCP
-| ... | *[Cfg] DUT configuration:* DUT is configured with DHCP proxy.
-| ... | *[Ver] TG verification:* Test DHCP packets are sent
+| ... | *[Cfg] DUT configuration:* DUT is configured with DHCPv4 proxy.
+| ... | *[Ver] TG verification:* Test DHCPv4 packets are sent
| ... | on TG on first link to DUT and received on TG on second link.
-| ... | On receive TG verifies if DHCP packets are valid.
+| ... | On receive TG verifies if DHCPv4 packets are valid.
*** Variables ***
| ${dut_to_tg_if1_ip}= | 172.16.0.1
| | [Documentation] |
| | ... | [Top] TG=DUT \
| | ... | [Enc] Eth-IPv4-UDP-BOOTP-DHCP
-| | ... | [Cfg] On DUT setup DHCP proxy.
-| | ... | [Ver] Make TG verify matching DHCP packets between client and DHCP
+| | ... | [Cfg] On DUT setup DHCPv4 proxy.
+| | ... | [Ver] Make TG verify matching DHCPv4 packets between client and DHCPv4
| | ... | server through DHCP proxy.
| | ...
| | Given Path for 2-node testing is set
| | [Documentation] |
| | ... | [Top] TG=DUT \
| | ... | [Enc] Eth-IPv4-UDP-BOOTP-DHCP
-| | ... | [Cfg] On DUT setup DHCP proxy.
-| | ... | [Ver] Make TG verify matching invalid DHCP packets are dropped.
+| | ... | [Cfg] On DUT setup DHCPv4 proxy.
+| | ... | [Ver] Make TG verify matching invalid DHCPv4 packets are dropped.
| | ...
| | Given Path for 2-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| ...
| ... | *[Top] Network Topologies:* TG = DUT
| ... | with two links between the nodes.
-| ... | *[Cfg] DUT configuration:* DUT is configured with DHCP proxy.
-| ... | *[Ver] TG verification:*Test DHCP packets are sent
+| ... | *[Cfg] DUT configuration:* DUT is configured with DHCPv6 proxy.
+| ... | *[Ver] TG verification:* Test DHCPv6 packets are sent
| ... | on TG on first link to DUT and received on TG on second link.
-| ... | On receive TG verifies if DHCP packets are valid
+| ... | On receive TG verifies if DHCPv6 packets are valid
| ... | *[Ref] Applicable standard specifications:* RFC 3315
| | [Documentation] |
| | ... | [Top] TG=DUT
| | ... | [Cfg] On DUT setup DHCP proxy.
-| | ... | [Ver] Make TG verify matching DHCPv6 packets between client and DHCP \
-| | ... | server through DHCP proxy.
+| | ... | [Ver] Make TG verify matching DHCPv6 packets between client and \
+| | ... | DHCPv6 server through DHCPv6 proxy.
| | ... | [Ref] RFC 3315
| | ...
| | Given Path for 2-node testing is set
| Library | resources.libraries.python.Classify.Classify
| Library | resources.libraries.python.Trace
| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
-| ... | 3_NODE_DOUBLE_LINK_TOPO
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
| Documentation | *Ingress ACL test cases*
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_DOUBLE_LINK_TOPO | HW_ENV | VM_ENV | VPP_VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2 bridge-domain test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG=DUT=VM 3-node topology with VM
+| ... | and double parallel links.
+| ... | *[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 is configured with two L2 bridge-domains
+| ... | (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 via VM; 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
+
+| ${sock1}= | /tmp/sock1
+| ${sock2}= | /tmp/sock2
+
+*** Test Cases ***
+| TC01: DUT with two L2BDs (MAC learn) switches ICMPv4 between TG and VM links
+| | [Documentation]
+| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 configure \
+| | ... | two L2BDs with MAC learning, each with vhost-user i/f to local
+| | ... | VM and i/f to TG; configure VM to loop pkts back betwen its two
+| | ... | virtio i/fs. [Ver] Make TG verify ICMPv4 Echo Req pkts are
+| | ... | switched thru DUT1 and VM in both directions and are correct on
+| | ... | receive. [Ref]
+| | ...
+| | [Teardown] | Run Keywords | Stop and Clear QEMU | ${dut_node} | ${vm_node}
+| | ... | AND | Func Test Teardown
+| | ...
+| | Given Path for 2-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
+| | And Interfaces in 2-node path are up
+| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
+| | ... | ${bd_id2}
+| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
+| | ... | ${sock2}
+| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
+| | ... | ${tg_to_dut_if2}
+
+| TC02: DUT with two L2BDs (MAC learn) switches ICMPv6 between TG and VM links
+| | [Documentation]
+| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 configure \
+| | ... | two L2BDs with MAC learning, each with vhost-user i/f to local
+| | ... | VM and i/f to TG; configure VM to loop pkts back betwen its two
+| | ... | virtio i/fs. [Ver] Make TG verify ICMPv6 Echo Req pkts are
+| | ... | switched thru DUT1 and VM in both directions and are correct on
+| | ... | receive. [Ref]
+| | ...
+| | [Teardown] | Run Keywords | Stop and Clear QEMU | ${dut_node} | ${vm_node}
+| | ... | AND | Func Test Teardown
+| | ...
+| | Given Path for 2-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
+| | And Interfaces in 2-node path are up
+| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
+| | ... | ${bd_id2}
+| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
+| | ... | ${sock2}
+| | Then Send and receive ICMPv6 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
+| | ... | ${tg_to_dut_if2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| 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 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 Path for 2-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
+| | And Interfaces in 2-node path are up
+| | When Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${bd_id1}
+| | Then Send and receive ICMPv4 bidirectionally | ${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 Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | When Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_dut1}
+| | ... | ${bd_id2}
+| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_DOUBLE_LINK_TOPO | HW_ENV | VM_ENV | VPP_VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2 bridge-domain test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG=DUT=VM 3-node topology with VM
+| ... | and double parallel links.
+| ... | *[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 is configured with two L2 bridge-domains
+| ... | (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 via VM; 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
+
+| ${sock1}= | /tmp/sock1
+| ${sock2}= | /tmp/sock2
+
+*** Test Cases ***
+| TC01: DUT with two L2BDs (static MACs) switches ICMPv4 between TG and VM links
+| | [Documentation]
+| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 configure \
+| | ... | two L2BDs with static MACs, each with vhost-user i/f to local VM
+| | ... | and i/f to TG; configure VM to loop pkts back betwen its two
+| | ... | virtio i/fs. [Ver] Make TG verify ICMPv4 Echo Req pkts are
+| | ... | switched thru DUT1 and VM in both directions and are correct on
+| | ... | receive. [Ref]
+| | ...
+| | [Teardown] | Run Keywords | Stop and Clear QEMU | ${dut_node} | ${vm_node}
+| | ... | AND | Func Test Teardown
+| | ...
+| | Given Path for 2-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
+| | And Interfaces in 2-node path are up
+| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
+| | ... | learn=${FALSE}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
+| | ... | ${bd_id1}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if1}
+| | ... | ${dut_node}
+| | ... | ${dut_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if2}
+| | ... | ${dut_node}
+| | ... | ${vhost_if1}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
+| | ... | learn=${FALSE}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
+| | ... | ${bd_id2}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if2}
+| | ... | ${dut_node}
+| | ... | ${dut_to_tg_if2}
+| | ... | ${bd_id2}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if1}
+| | ... | ${dut_node}
+| | ... | ${vhost_if2}
+| | ... | ${bd_id2}
+| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
+| | ... | ${sock2}
+| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
+| | ... | ${tg_to_dut_if2}
+
+| TC02: DUT with two L2BDs (static MACs) switches ICMPv6 between TG and VM links
+| | [Documentation]
+| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 configure \
+| | ... | two L2BDs with static MACs, each with vhost-user i/f to local VM
+| | ... | and i/f to TG; configure VM to loop pkts back betwen its two
+| | ... | virtio i/fs. [Ver] Make TG verify ICMPv6 Echo Req pkts are
+| | ... | switched thru DUT1 and VM in both directions and are correct on
+| | ... | receive. [Ref]
+| | ...
+| | [Teardown] | Run Keywords | Stop and Clear QEMU | ${dut_node} | ${vm_node}
+| | ... | AND | Func Test Teardown
+| | ...
+| | Given Path for 2-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
+| | And Interfaces in 2-node path are up
+| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id1}
+| | ... | learn=${FALSE}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if1}
+| | ... | ${bd_id1}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if1}
+| | ... | ${dut_node}
+| | ... | ${dut_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if2}
+| | ... | ${dut_node}
+| | ... | ${vhost_if1}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut_node} | ${bd_id2}
+| | ... | learn=${FALSE}
+| | And Interface is added to bridge domain | ${dut_node} | ${dut_to_tg_if2}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut_node} | ${vhost_if2}
+| | ... | ${bd_id2}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if2}
+| | ... | ${dut_node}
+| | ... | ${dut_to_tg_if2}
+| | ... | ${bd_id2}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut_if1}
+| | ... | ${dut_node}
+| | ... | ${vhost_if2}
+| | ... | ${bd_id2}
+| | And VM for Vhost L2BD forwarding is setup | ${dut_node} | ${sock1}
+| | ... | ${sock2}
+| | Then Send and receive ICMPv6 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
+| | ... | ${tg_to_dut_if2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| 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 Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | When Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | ... | learn=${FALSE}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut1}
+| | ... | ${dut1_node}
+| | ... | ${dut1_to_tg}
+| | ... | ${bd_id1}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut2}
+| | ... | ${dut1_node}
+| | ... | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
+| | ... | learn=${FALSE}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_dut1}
+| | ... | ${bd_id2}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut1}
+| | ... | ${dut2_node}
+| | ... | ${dut2_to_dut1}
+| | ... | ${bd_id2}
+| | And Destination port is added to L2FIB on DUT node | ${tg_node}
+| | ... | ${tg_to_dut2}
+| | ... | ${dut2_node}
+| | ... | ${dut2_to_tg}
+| | ... | ${bd_id2}
+| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2 bridge-domain test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG=DUT1=DUT2=TG 3-node circular topology
+| ... | with double parallel links.
+| ... | *[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
+| ... | and Split Horizon Groups (SHG).
+| ... | *[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
+
+| ${shg1}= | 3
+| ${shg2}= | 4
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD (MAC learn) and SHG switch between four TG links
+| | [Documentation]
+| | ... | [Top] TG=DUT1=DUT2=TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 and \
+| | ... | DUT2 configure four i/fs into L2BD with MAC learning and the
+| | ... | same SHG on i/fs towards TG. [Ver] Make TG verify ICMPv4 Echo
+| | ... | Req pkts are switched thru DUT1 and DUT2 in both directions and
+| | ... | are correct on receive; verify no pkts are switched thru SHG
+| | ... | isolated interfaces. [Ref]
+| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
+| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
+| | ... | ${nodes['DUT1']}
+| | ... | ${nodes['DUT2']}
+| | And Interfaces in 3-node BD-SHG testing are up
+| | When Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
+| | ... | ${bd_id1} | ${shg1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
+| | ... | ${bd_id1} | ${shg1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
+| | ... | ${bd_id2} | ${shg2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
+| | ... | ${bd_id2} | ${shg2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_dut1}
+| | ... | ${bd_id2}
+| | Then Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if2}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if2}
+| | And Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMPv4 bidirectionally
+| | | ... | ${tg_node} | ${tg_to_dut1_if1}
+| | | ... | ${tg_to_dut1_if2}
+| | And Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMPv4 bidirectionally
+| | | ... | ${tg_node} | ${tg_to_dut2_if1}
+| | | ... | ${tg_to_dut2_if2}
| Resource | resources/libraries/robot/qemu.robot
| Library | resources.libraries.python.Trace
| Library | resources.libraries.python.NodePath
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
+| Force Tags | 3_NODE_DOUBLE_LINK_TOPO | HW_ENV | VM_ENV | VPP_VM_ENV
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
| Documentation | *L2 cross-connect test cases*
| ...
-| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology with
-| ... | single links between nodes; TG=DUT1=DUT2=TG 3-node circular topology
-| ... | with double parallel links and TG=DUT=VM 3-node topology with VM and
+| ... | *[Top] Network Topologies:* TG=DUT=VM 3-node topology with VM and
| ... | double parallel links.
| ... | *[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
-| ... | cross-connect (L2XC) switching.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect
+| ... | (L2XC) switching.
| ... | *[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
+| ... | sent in both directions by TG on links to DUT1 via VM; on receive TG
| ... | verifies packets for correctness and their IPv4 (IPv6) src-addr,
| ... | dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:*
| ${sock2}= | /tmp/sock2
*** Test Cases ***
-| TC01: DUT1 and DUT2 with L2XC switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 and \
-| | ... | DUT2 configure L2 cross-connect (L2XC), each with one interface
-| | ... | to TG and one Ethernet interface towards the other DUT. [Ver]
-| | ... | Make TG send ICMPv4 Echo Req in both directions between two of
-| | ... | its interfaces to be switched by DUT1 and DUT2; verify all
-| | ... | packets are received. [Ref]
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And L2 setup xconnect on DUT
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_dut2}
-| | And L2 setup xconnect on DUT
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | When All Vpp Interfaces Ready Wait | ${nodes}
-| | Then Send and receive ICMPv4 bidirectionally
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
-
-| TC02: DUT1 and DUT2 with L2XC switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 and \
-| | ... | DUT2 configure L2 cross-connect (L2XC), each with one interface
-| | ... | to TG and one Ethernet interface towards the other DUT. [Ver]
-| | ... | Make TG send ICMPv6 Echo Req in both directions between two of
-| | ... | its interfaces to be switched by DUT1 and DUT2; verify all
-| | ... | packets are received. [Ref]
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And L2 setup xconnect on DUT
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_dut2}
-| | And L2 setup xconnect on DUT
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
-| | When All Vpp Interfaces Ready Wait | ${nodes}
-| | Then Send and receive ICMPv6 bidirectionally
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
-
-| TC03: DUT with two L2XCs switches ICMPv4 between TG and local VM links
+| TC01: DUT with two L2XCs switches ICMPv4 between TG and local VM links
| | [Documentation]
| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT configure \
| | ... | two L2 cross-connects (L2XC), each with one untagged interface
| | ... | TG send ICMPv4 Echo Reqs in both directions between two of its
| | ... | i/fs to be switched by DUT to and from VM; verify all packets
| | ... | are received. [Ref]
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO | VPP_VM_ENV
+| | ...
+| | [Teardown] | Run Keywords | Stop and Clear QEMU | ${dut_node} | ${vm_node}
+| | ... | AND | Func Test Teardown
+| | ...
| | Given Path for 2-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | And Interfaces in 2-node path are up
| | ... | ${sock2}
| | Then Send and receive ICMPv4 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
| | ... | ${tg_to_dut_if2}
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Stop and Clear QEMU | ${dut_node} | ${vm_node}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Check VPP PID in Teardown
-| TC04: DUT with two L2XCs switches ICMPv6 between TG and local VM links
+| TC02: DUT with two L2XCs switches ICMPv6 between TG and local VM links
| | [Documentation]
| | ... | [Top] TG=DUT=VM. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT configure \
| | ... | two L2 cross-connects (L2XC), each with one untagged i/f to TG
| | ... | ICMPv6 Echo Reqs in both directions between two of its i/fs to
| | ... | be switched by DUT to and from VM; verify all packets are
| | ... | received. [Ref]
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO | VPP_VM_ENV
+| | ...
+| | [Teardown] | Run Keywords | Stop and Clear QEMU | ${dut_node} | ${vm_node}
+| | ... | AND | Func Test Teardown
+| | ...
| | Given Path for 2-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | And Interfaces in 2-node path are up
| | ... | ${sock2}
| | Then Send and receive ICMPv6 bidirectionally | ${tg_node} | ${tg_to_dut_if1}
| | ... | ${tg_to_dut_if2}
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Stop and Clear QEMU | ${dut_node} | ${vm_node}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Check VPP PID in Teardown
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/l2_xconnect.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.NodePath
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2 cross-connect 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
+| ... | cross-connect (L2XC) switching.
+| ... | *[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:*
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2XC switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-ICMPv4. [Cfg] On DUT1 and \
+| | ... | DUT2 configure L2 cross-connect (L2XC), each with one interface
+| | ... | to TG and one Ethernet interface towards the other DUT. [Ver]
+| | ... | Make TG send ICMPv4 Echo Req in both directions between two of
+| | ... | its interfaces to be switched by DUT1 and DUT2; verify all
+| | ... | packets are received. [Ref]
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And L2 setup xconnect on DUT
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_dut2}
+| | And L2 setup xconnect on DUT
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
+| | When All Vpp Interfaces Ready Wait | ${nodes}
+| | Then Send and receive ICMPv4 bidirectionally
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
+
+| TC02: DUT1 and DUT2 with L2XC switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv6-ICMPv6. [Cfg] On DUT1 and \
+| | ... | DUT2 configure L2 cross-connect (L2XC), each with one interface
+| | ... | to TG and one Ethernet interface towards the other DUT. [Ver]
+| | ... | Make TG send ICMPv6 Echo Req in both directions between two of
+| | ... | its interfaces to be switched by DUT1 and DUT2; verify all
+| | ... | packets are received. [Ref]
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And L2 setup xconnect on DUT
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_dut2}
+| | And L2 setup xconnect on DUT
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_tg}
+| | When All Vpp Interfaces Ready Wait | ${nodes}
+| | Then Send and receive ICMPv6 bidirectionally
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.LispUtil
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.QemuUtils
+| Library | resources.libraries.python.VPPUtil
+| Library | resources.libraries.python.IPsecUtil
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/ipsec.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/lisp/l2lisp.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv4_ipsec_lispgpe_ipv4/ipv4_ipsec_lispgpe_ipv4.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Func Test Setup
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *IPv4-ip4-ipsec-lispgpe-ip4 - main fib, vrf (gpe_vni-to-vrf)*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* ICMPv4-IPv4-IPSec-LISPGPE-IPv4-ICMPv4.
+| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
+| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
+| ... | on RLOC interface or lisp_gpe0 interface.
+| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1\
+| ... | via VM to DUT2 where it is forwarded to TG(if2).
+| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
+
+*** Variables ***
+| ${dut2_spi}= | ${1000}
+| ${dut1_spi}= | ${1001}
+
+| ${ESP_PROTO}= | ${50}
+
+| ${sock1}= | /tmp/sock1
+| ${sock2}= | /tmp/sock2
+
+| ${bid}= | 10
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv4-ICMP on DUT1-DUT2, Eth-IPv4-ICMP\
+| | ... | on TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS. Create Qemu vm on DUT1 and configure bridge\
+| | ... | between two vhosts.
+| | ... | [Ver] Case: ip4-ipsec-lispgpe-ip4 - main fib, virt2lisp\
+| | ... | Make TG send ICMPv4 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
+| | ... | AND | Show VPP Settings | ${dut1_node}
+| | ... | AND | Show VPP Settings | ${dut2_node}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup 3-node Topology
+| | And Add IP Neighbors
+| | And Setup Qemu DUT1
+| | And Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
+| | ... | ${dut1_to_dut2_ip4_static_adjacency}
+| | ... | ${dut2_to_dut1_ip4_static_adjacency}
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+| TC02: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2,\
+| | ... | Eth-IPv4-ICMPv4 on TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Case: ip4-ipsec-lispgpe-ip4 - main fib, virt2lisp\
+| | ... | Make TG send ICMPv4 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
+| | ... | AND | Show VPP Settings | ${dut1_node}
+| | ... | AND | Show VPP Settings | ${dut2_node}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup 3-node Topology
+| | And Add IP Neighbors
+| | And Setup Qemu DUT1
+| | And Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
+| | ... | ${dut1_to_dut2_ip4_static_adjacency}
+| | ... | ${dut2_to_dut1_ip4_static_adjacency}
+| | ${lisp1_if_idx}= | resources.libraries.python.InterfaceUtil.Get Sw If Index
+| | ... | ${dut1_node} | lisp_gpe0
+| | ${lisp2_if_idx}= | resources.libraries.python.InterfaceUtil.Get Sw If Index
+| | ... | ${dut2_node} | lisp_gpe0
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${lisp1_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${lisp2_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup 3-node Topology
+| | [Documentation]
+| | ... | Setup 3-node topology for this test suite. Set all physical\
+| | ... | interfaces up and assing IP adresses to them.\
+| | ... | You can specify fib table ID where the DUT-TG interfaces assign to.\
+| | ... | Default is 0.
+| | ...
+| | [Arguments] | ${fib_table}=0
+| | Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | Interfaces in 3-node path are up
+| | Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${fib_table}
+| | Assign Interface To Fib Table | ${dut2_node}
+| | ... | ${dut2_to_tg} | ${fib_table}
+| | Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4}
+| | ... | ${prefix4}
+| | Set Interface Address | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4}
+| | ... | ${prefix4}
+| | Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4}
+| | ... | ${prefix4}
+| | Set Interface Address | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4}
+| | ... | ${prefix4}
+
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
+| | ... | ${dut1_to_dut2_mac}
+
+| Setup Qemu DUT1
+| | [Documentation] | Setup Vhosts on DUT1 and setup IP to one of them. Setup \
+| | ... | Qemu and bridge the vhosts.
+| | ${vhost1}= | And Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
+| | ${vhost2}= | And Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
+| | Set Interface Address | ${dut1_node} | ${vhost2} | 6.6.1.9
+| | ... | ${prefix4}
+| | Set Interface State | ${dut1_node} | ${vhost1} | up
+| | Set Interface State | ${dut1_node} | ${vhost2} | up
+| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${bid} | 0
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${vhost1} | ${bid} | 0
+| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
+| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
+| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
| ... | AND | Check VPP PID in Teardown
| ...
-| Documentation | *IPv4-ip4-ipsec-lispgpe-ip4 - main fib, vrf (gpe_vni-to-vrf)
+| Documentation | *IPv4-ip4-ipsec-lispgpe-ip4 - main fib, vrf (gpe_vni-to-vrf)*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
*** Variables ***
| ${dut2_spi}= | ${1000}
| ${dut1_spi}= | ${1001}
+
| ${ESP_PROTO}= | ${50}
-| ${sock1}= | /tmp/sock1
-| ${sock2}= | /tmp/sock2
+
| ${bid}= | 10
*** Test Cases ***
| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-| TC05: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv4-ICMP on DUT1-DUT2, Eth-IPv4-ICMP\
-| | ... | on TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS. Create Qemu vm on DUT1 and configure bridge\
-| | ... | between two vhosts.
-| | ... | [Ver] Case: ip4-ipsec-lispgpe-ip4 - main fib, virt2lisp\
-| | ... | Make TG send ICMPv4 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
-| | ... | AND | Show VPP Settings | ${dut1_node}
-| | ... | AND | Show VPP Settings | ${dut2_node}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup 3-node Topology
-| | And Add IP Neighbors
-| | And Setup Qemu DUT1
-| | And Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
-| | ... | ${dut1_to_dut2_ip4_static_adjacency}
-| | ... | ${dut2_to_dut1_ip4_static_adjacency}
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC06: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2,\
-| | ... | Eth-IPv4-ICMPv4 on TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Case: ip4-ipsec-lispgpe-ip4 - main fib, virt2lisp\
-| | ... | Make TG send ICMPv4 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
-| | ... | AND | Show VPP Settings | ${dut1_node}
-| | ... | AND | Show VPP Settings | ${dut2_node}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup 3-node Topology
-| | And Add IP Neighbors
-| | And Setup Qemu DUT1
-| | And Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
-| | ... | ${dut1_to_dut2_ip4_static_adjacency}
-| | ... | ${dut2_to_dut1_ip4_static_adjacency}
-| | ${lisp1_if_idx}= | resources.libraries.python.InterfaceUtil.Get Sw If Index
-| | ... | ${dut1_node} | lisp_gpe0
-| | ${lisp2_if_idx}= | resources.libraries.python.InterfaceUtil.Get Sw If Index
-| | ... | ${dut2_node} | lisp_gpe0
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${lisp1_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${lisp2_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
*** Keywords ***
| Setup 3-node Topology
| | [Documentation]
| | ... | ${dut2_to_dut1_mac}
| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
| | ... | ${dut1_to_dut2_mac}
-
-| Setup Qemu DUT1
-| | [Documentation] | Setup Vhosts on DUT1 and setup IP to one of them. Setup \
-| | ... | Qemu and bridge the vhosts.
-| | ${vhost1}= | And Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
-| | ${vhost2}= | And Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
-| | Set Interface Address | ${dut1_node} | ${vhost2} | 6.6.1.9
-| | ... | ${prefix4}
-| | Set Interface State | ${dut1_node} | ${vhost1} | up
-| | Set Interface State | ${dut1_node} | ${vhost2} | up
-| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
-| | Interface is added to bridge domain | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${bid} | 0
-| | Interface is added to bridge domain | ${dut1_node}
-| | ... | ${vhost1} | ${bid} | 0
-| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
-| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
-| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:*Eth-IPv4-LISPGPE-IPSec-IPv6-ICMP,\
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISPGPE-IPSec-IPv6-ICMP,\
| ... | Eth-IPv4-IPSec-LISPGPE-IPv6-ICMP
| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
| ... | on RLOC interface or lisp_gpe0 interface.
-| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1 to\
-| ... | DUT2 where it is forwarded to TG(if2).
+| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1\
+| ... | via VM to DUT2 where it is forwarded to TG(if2).
| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
*** Test Cases ***
-| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on RLOC Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-LISPGPE-IPSec-IPv6-ICMP on DUT1-DUT2, Eth-IPv6-ICMP\
-| | ... | on TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup Topology And Lisp
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC02: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMP\
-| | ... | on TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup Topology And Lisp
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | ${lisp_if_idx}= | resources.libraries.python.InterfaceUtil.get sw if index
-| | ... | ${dut1_node} | ${lisp_gpe_int}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC03: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
+| TC01: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG.
| | ... | [Enc] Eth-IPv4-LISPGPE-IPSec-IPv6-ICMP on DUT1-DUT2, Eth-IPv6-ICMP\
| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-| TC04: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
+| TC02: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG.
| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-| TC05: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
-| | ... | Eth-IPv6-ICMPv6, on TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Case: ip4-ipsec-lispgpe-ip6 - vrf, phy2lisp
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | ...
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
-| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | Assign Interface To Fib Table | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${fib_table_1} | ip6=${TRUE}
-| | Assign Interface To Fib Table | ${dut2_node}
-| | ... | ${dut2_to_tg} | ${fib_table_1} | ip6=${TRUE}
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
-| | Setup Topology And Lisp | ${fib_table_1} | ${dut1_dut2_vni}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
*** Keywords ***
| Setup Topology And Lisp
| | [Documentation] | Setup IPs and neighbors for interfaces on DUT1 and DUT2\
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.L2Util
+| Library | resources.libraries.python.LispUtil
+| Library | resources.libraries.python.IPsecUtil
+| Library | resources.libraries.python.VatJsonUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.QemuUtils
+| Library | resources.libraries.python.VPPUtil
+| Library | String
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/ipsec.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv4/ipv6_lispgpe_ipsec_ipv4.py
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Func Test Setup
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *IPv6 - ip4-ipsec-lispgpe-ip6 - main fib, vrf, virt2lisp,\
+| ... | phy2lisp*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISPGPE-IPSec-IPv6-ICMP,\
+| ... | Eth-IPv4-IPSec-LISPGPE-IPv6-ICMP
+| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
+| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
+| ... | on RLOC interface or lisp_gpe0 interface.
+| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1 to\
+| ... | DUT2 where it is forwarded to TG(if2).
+| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on RLOC Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-LISPGPE-IPSec-IPv6-ICMP on DUT1-DUT2, Eth-IPv6-ICMP\
+| | ... | on TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup Topology And Lisp
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+| TC02: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMP\
+| | ... | on TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup Topology And Lisp
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | ${lisp_if_idx}= | resources.libraries.python.InterfaceUtil.get sw if index
+| | ... | ${dut1_node} | ${lisp_gpe_int}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Topology And Lisp
+| | [Documentation] | Setup IPs and neighbors for interfaces on DUT1 and DUT2\
+| | ... | and then setup LISP.
+| | [Arguments] | ${fib_table}=0 | ${vni_table}=0 | ${ip6}=${FALSE}
+| | Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | Interfaces in 3-node path are up
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4}
+| | ... | ${prefix4}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4}
+| | ... | ${prefix4}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6}
+| | ... | ${prefix6}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
+| | ... | ${tg_to_dut2_mac} | ${fib_table}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
+| | ... | ${dut1_to_dut2_mac}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
+| | ... | ${tg_to_dut1_mac} | ${fib_table}
+| | Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip_static_adjacency}
+| | ... | ${dut2_to_dut1_ip_static_adjacency}
+| | ... | ${vni_table} | ${fib_table}
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.L2Util
+| Library | resources.libraries.python.LispUtil
+| Library | resources.libraries.python.IPsecUtil
+| Library | resources.libraries.python.VatJsonUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.QemuUtils
+| Library | resources.libraries.python.VPPUtil
+| Library | String
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/ipsec.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv4/ipv6_lispgpe_ipsec_ipv4.py
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Func Test Setup
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *IPv6 - ip4-ipsec-lispgpe-ip6 - main fib, vrf, virt2lisp,\
+| ... | phy2lisp*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISPGPE-IPSec-IPv6-ICMP,\
+| ... | Eth-IPv4-IPSec-LISPGPE-IPv6-ICMP
+| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
+| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
+| ... | on RLOC interface or lisp_gpe0 interface.
+| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1 to\
+| ... | DUT2 where it is forwarded to TG(if2).
+| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
+| | ... | Eth-IPv6-ICMPv6, on TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Case: ip4-ipsec-lispgpe-ip6 - vrf, phy2lisp
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | ...
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${fib_table_1} | ip6=${TRUE}
+| | Assign Interface To Fib Table | ${dut2_node}
+| | ... | ${dut2_to_tg} | ${fib_table_1} | ip6=${TRUE}
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4}
+| | Setup Topology And Lisp | ${fib_table_1} | ${dut1_dut2_vni}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Topology And Lisp
+| | [Documentation] | Setup IPs and neighbors for interfaces on DUT1 and DUT2\
+| | ... | and then setup LISP.
+| | [Arguments] | ${fib_table}=0 | ${vni_table}=0 | ${ip6}=${FALSE}
+| | Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | Interfaces in 3-node path are up
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4}
+| | ... | ${prefix4}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4}
+| | ... | ${prefix4}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6}
+| | ... | ${prefix6}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
+| | ... | ${tg_to_dut2_mac} | ${fib_table}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
+| | ... | ${dut1_to_dut2_mac}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
+| | ... | ${tg_to_dut1_mac} | ${fib_table}
+| | Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip_static_adjacency}
+| | ... | ${dut2_to_dut1_ip_static_adjacency}
+| | ... | ${vni_table} | ${fib_table}
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.VPPUtil
+| Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.VhostUser
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Func Test Setup
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *ip4-lispgpe-ip4 encapsulation test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv4-ICMPv4 on DUT1-DUT2,\
+| ... | Eth-IPv4-ICMPv4 on TG-DUTn for IPv4 routing over LISPoIPv4 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv4\
+| ... | routing and static routes. LISPoIPv4 tunnel is configured between\
+| ... | DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test ICMPv4 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 src-addr, dst-addr\
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using vhost interfaces
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip4-lispgpe-ip4 - main fib, virt2lisp
+| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
+| | ... | received packets are correct.
+| | ...
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And IP addresses are set on interfaces
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4} | ${prefix4}
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
+| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
+| | ... | ${tg_to_dut1_mac}
+| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
+| | ... | ${tg_to_dut2_mac}
+| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
+| | ... | ${dut2_to_dut1_mac}
+| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
+| | ... | ${dut1_to_dut2_mac}
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
+| | ... | ${dut1_to_dut2_ip4_static_adjacency}
+| | ... | ${dut2_to_dut1_ip4_static_adjacency}
+| | And Setup Qemu DUT1
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Qemu DUT1
+| | [Documentation] | Setup Vhosts on DUT1 and setup IP on one of them. Setup\
+| | ... | Qemu and bridge the vhosts. Optionally, you can set fib table ID\
+| | ... | where the vhost2 interface should be assigned to.
+| | ...
+| | [Arguments] | ${fib_table}=0
+| | ...
+| | ${vhost1}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
+| | ${vhost2}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
+| | Set Interface Address | ${dut1_node} | ${vhost2} | ${vhost_ip} | ${prefix4}
+| | Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${vhost2} | ${fib_table}
+| | Set Interface State | ${dut1_node} | ${vhost1} | up
+| | Set Interface State | ${dut1_node} | ${vhost2} | up
+| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${bid} | 0
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${vhost1} | ${bid} | 0
+| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
+| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
+| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.VPPUtil
+| Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.VhostUser
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Func Test Setup
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *ip4-lispgpe-ip4 encapsulation test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv4-ICMPv4 on DUT1-DUT2,\
+| ... | Eth-IPv4-ICMPv4 on TG-DUTn for IPv4 routing over LISPoIPv4 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv4\
+| ... | routing and static routes. LISPoIPv4 tunnel is configured between\
+| ... | DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test ICMPv4 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 src-addr, dst-addr\
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using physical interfaces
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip4-lispgpe-ip4 - phy2lisp
+| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830.
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And IP addresses are set on interfaces
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4} | ${prefix4}
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
+| | And Add IP Neighbors
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
+| | ... | ${dut1_to_dut2_ip4_static_adjacency}
+| | ... | ${dut2_to_dut1_ip4_static_adjacency}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
+| | ... | ${dut1_to_dut2_mac}
\ No newline at end of file
| ... | *[Ref] Applicable standard specifications:* RFC6830.
*** Test Cases ***
-| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using physical interfaces
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip4-lispgpe-ip4 - phy2lisp
-| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830.
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And IP addresses are set on interfaces
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4} | ${prefix4}
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
-| | ... | ${tg_to_dut1_mac}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
-| | ... | ${dut1_to_dut2_ip4_static_adjacency}
-| | ... | ${dut2_to_dut1_ip4_static_adjacency}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC02: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip4-lispgpe-ip4 - vrf, phy2lisp
-| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830.
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Assign Interface To Fib Table | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${fib_table_1}
-| | And Assign Interface To Fib Table | ${dut2_node}
-| | ... | ${dut2_to_tg} | ${fib_table_1}
-| | Add IP Neighbors | ${fib_table_1}
-| | And IP addresses are set on interfaces
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4} | ${prefix4}
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
-| | ... | ${dut1_to_dut2_ip4_static_adjacency}
-| | ... | ${dut2_to_dut1_ip4_static_adjacency}
-| | ... | ${dut1_dut2_vni} | ${fib_table_1}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC03: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using vhost interfaces
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip4-lispgpe-ip4 - main fib, virt2lisp
-| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
-| | ... | received packets are correct.
-| | ...
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
-| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
-| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And IP addresses are set on interfaces
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4} | ${prefix4}
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
-| | ... | ${tg_to_dut1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
-| | ... | ${dut2_to_dut1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
-| | ... | ${dut1_to_dut2_mac}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
-| | ... | ${dut1_to_dut2_ip4_static_adjacency}
-| | ... | ${dut2_to_dut1_ip4_static_adjacency}
-| | And Setup Qemu DUT1
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC04: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using vhost interfaces and VRF is enabled
+| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using vhost interfaces and VRF is enabled
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG.
| | ... | [Enc] Eth-IPv4-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on\
| | ... | ${dut1_to_tg} | ${fib_table_1}
| | And Assign Interface To Fib Table | ${dut2_node}
| | ... | ${dut2_to_tg} | ${fib_table_1}
-| | Add IP Neighbors | ${fib_table_1}
+| | And Add IP Neighbors | ${fib_table_1}
| | And IP addresses are set on interfaces
| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4} | ${prefix4}
| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.VPPUtil
+| Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.VhostUser
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Func Test Setup
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *ip4-lispgpe-ip4 encapsulation test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv4-ICMPv4 on DUT1-DUT2,\
+| ... | Eth-IPv4-ICMPv4 on TG-DUTn for IPv4 routing over LISPoIPv4 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv4\
+| ... | routing and static routes. LISPoIPv4 tunnel is configured between\
+| ... | DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test ICMPv4 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 src-addr, dst-addr\
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip4-lispgpe-ip4 - vrf, phy2lisp
+| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830.
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${fib_table_1}
+| | And Assign Interface To Fib Table | ${dut2_node}
+| | ... | ${dut2_to_tg} | ${fib_table_1}
+| | And Add IP Neighbors | ${fib_table_1}
+| | And IP addresses are set on interfaces
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip4} | ${prefix4}
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${prefix4}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip4} | ${prefix4}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4} | ${prefix4}
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
+| | ... | ${dut1_to_dut2_ip4_static_adjacency}
+| | ... | ${dut2_to_dut1_ip4_static_adjacency}
+| | ... | ${dut1_dut2_vni} | ${fib_table_1}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip4}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip4}
+| | ... | ${dut1_to_dut2_mac}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/lisp/lisp_static_adjacency.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.VPPUtil
+# import additional Lisp settings from resource file
+| Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | 3_NODE_DOUBLE_LINK_TOPO
+| ... | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *LISP static adjacency test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
+| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv4 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv4 tunnel is configured\
+| ... | between DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr,\
+| ... | dst-addr and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using vhost interfaces
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip6-lispgpe-ip4 - main fib, virt2lisp
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ...
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And IP addresses are set on interfaces
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6o4}
+| | ... | ${dut_prefix6o4}
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6o4} | ${tg_prefix6o4}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut_prefix6o4}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4}
+| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
+| | ... | ${tg_to_dut1_mac}
+| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
+| | ... | ${tg_to_dut2_mac}
+| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_dut1_mac}
+| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
+| | ... | ${dut1_to_dut2_mac}
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency}
+| | ... | ${dut2_ip6o4_static_adjacency}
+| | And Setup Qemu DUT1
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Qemu DUT1
+| | [Documentation] | Setup Vhosts on DUT1 and setup IP on one of them. Setup\
+| | ... | Qemu and bridge the vhosts.
+| | ...
+| | ${vhost1}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
+| | ${vhost2}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
+| | Set Interface Address | ${dut1_node} | ${vhost2} | ${vhost_ip} | ${prefix4}
+| | Set Interface State | ${dut1_node} | ${vhost1} | up
+| | Set Interface State | ${dut1_node} | ${vhost2} | up
+| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${bid} | 0
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${vhost1} | ${bid} | 0
+| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
+| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
+| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/lisp/lisp_static_adjacency.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.VPPUtil
+# import additional Lisp settings from resource file
+| Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | 3_NODE_DOUBLE_LINK_TOPO
+| ... | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *LISP static adjacency test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
+| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv4 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv4 tunnel is configured\
+| ... | between DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr,\
+| ... | dst-addr and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISPoIPv4 tunnel
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-LISP-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] On DUT1 and DUT2 configure IPv4 LISP static adjacencies.
+| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP tunnel between them; verify IPv6 headers on received\
+| | ... | packets are correct.
+| | ... | [Cfg2] Reconf LISP.
+| | ... | [Ver2] Verify packets are received again via LISP tunnel.
+| | ... | [Ref] RFC6830.
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And IP addresses are set on interfaces
+| | ... | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut_prefix6o4}
+| | ... | ${dut1_node} | ${dut1_to_tg}
+| | ... | ${dut1_to_tg_ip6o4} | ${tg_prefix6o4}
+| | ... | ${dut2_node} | ${dut2_to_dut1}
+| | ... | ${dut2_to_dut1_ip6o4} | ${dut_prefix6o4}
+| | ... | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4}
+| | And Add IP Neighbors
+| | When Set up Lisp topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+| | When Change Lisp Configuration | ${dut1_node} | ${dut2_node}
+| | ... | ${dut1_to_dut2} | ${dut2_to_dut1} | ${dut1_to_dut2_mac}
+| | ... | ${dut2_to_dut1_mac} | ${dut1_to_dut2_ip6o4}
+| | ... | ${dut2_to_dut1_ip6o4_reconf} | ${dut_prefix6o4}
+| | ... | ${dut1_ip6o4_static_adjacency}
+| | ... | ${dut1_ip6o4_static_adjacency_reconf}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
+| | ... | ${dut1_to_dut2_mac}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/lisp/lisp_static_adjacency.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.VPPUtil
+# import additional Lisp settings from resource file
+| Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | 3_NODE_DOUBLE_LINK_TOPO
+| ... | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *LISP static adjacency test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
+| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv4 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv4 tunnel is configured\
+| ... | between DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr,\
+| ... | dst-addr and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip6-lispgpe-ip4 - vrf, phy2lisp
+| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830.
+| | ...
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${fib_table_1} | ip6=${TRUE}
+| | And Assign Interface To Fib Table | ${dut2_node}
+| | ... | ${dut2_to_tg} | ${fib_table_1} | ip6=${TRUE}
+| | And Add IP Neighbors | ${fib_table_1}
+| | And IP addresses are set on interfaces
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6o4}
+| | ... | ${dut_prefix6o4}
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6o4} | ${tg_prefix6o4}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut_prefix6o4}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4}
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency}
+| | ... | ${dut2_ip6o4_static_adjacency}
+| | ... | ${dut1_dut2_vni} | ${fib_table_1}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
+| | ... | ${dut1_to_dut2_mac}
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
| ...
| Test Setup | Func Test Setup
-| Test Teardown | Func Test Teardown
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
| ...
| Documentation | *IPv6 - ip4-ipsec-lispgpe-ip6 - main fib, virt2lisp, phy2lisp*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:*Eth-IPv6-LISPGPE-IPSec-IPv4-ICMP,\
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISPGPE-IPSec-IPv4-ICMP,\
| ... | Eth-IPv6-IPSec-LISPGPE-IPv4-ICMP
| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
-| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
+| ... | IPsec is in transport mode. Test cases are for IPsec configured both\
| ... | on RLOC interface or lisp_gpe0 interface.
| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1 to\
| ... | DUT2 where it is forwarded to TG(if2).
| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
*** Test Cases ***
-| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on RLOC Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-LISPGPE-IPSec-IPv4-ICMP on DUT1-DUT2, Eth-IPv4-ICMP\
-| | ... | on TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup Topology And Lisp
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip6} | ${dut2_to_dut1_ip6}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip6} | ${dut1_to_dut2_ip6}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC02: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMP\
-| | ... | on TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup Topology And Lisp
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | ${lisp_if_idx}= | resources.libraries.python.InterfaceUtil.get sw if index
-| | ... | ${dut1_node} | ${lisp_gpe_int}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip6} | ${dut2_to_dut1_ip6}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip6} | ${dut1_to_dut2_ip6}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC03: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
+| TC01: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG.
| | ... | [Enc] Eth-IPv6-LISPGPE-IPSec-IPv4-ICMP on DUT1-DUT2, Eth-IPv4-ICMP\
| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-| TC04: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
+| TC02: DUT1 and DUT2 route IPv4 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG.
| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.L2Util
+| Library | resources.libraries.python.LispUtil
+| Library | resources.libraries.python.IPsecUtil
+| Library | resources.libraries.python.VatJsonUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.QemuUtils
+| Library | String
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/ipsec.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv4_lispgpe_ipv6/ipv4_lispgpe_ipsec_ipv6.py
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| ...
+| Documentation | *IPv6 - ip4-ipsec-lispgpe-ip6 - main fib, virt2lisp, phy2lisp*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISPGPE-IPSec-IPv4-ICMP,\
+| ... | Eth-IPv6-IPSec-LISPGPE-IPv4-ICMP
+| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
+| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
+| ... | on RLOC interface or lisp_gpe0 interface.
+| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1 to\
+| ... | DUT2 where it is forwarded to TG(if2).
+| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on RLOC Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-LISPGPE-IPSec-IPv4-ICMP on DUT1-DUT2, Eth-IPv4-ICMP\
+| | ... | on TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup Topology And Lisp
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip6} | ${dut2_to_dut1_ip6}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip6} | ${dut1_to_dut2_ip6}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+| TC02: DUT1 and DUT2 route IPv4 bidirectionally over LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMP\
+| | ... | on TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv4 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup Topology And Lisp
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | ${lisp_if_idx}= | resources.libraries.python.InterfaceUtil.get sw if index
+| | ... | ${dut1_node} | ${lisp_gpe_int}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip6} | ${dut2_to_dut1_ip6}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip6} | ${dut1_to_dut2_ip6}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip4} | ${tg2_ip4}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip4} | ${tg1_ip4}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Topology And Lisp
+| | [Documentation] | Setup IPs and neighbors for interfaces on DUT1 and DUT2\
+| | ... | and then setup LISP.
+| | Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | Interfaces in 3-node path are up
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip4}
+| | ... | ${prefix4}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip4}
+| | ... | ${prefix4}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip4}
+| | ... | ${tg_to_dut2_mac}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
+| | ... | ${dut1_to_dut2_mac}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip4}
+| | ... | ${tg_to_dut1_mac}
+| | Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid}
+| | ... | ${dut1_to_dut2_ip_static_adjacency}
+| | ... | ${dut2_to_dut1_ip_static_adjacency}
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:*Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6,\
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6,\
| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
| ... | on RLOC interface or lisp_gpe0 interface.
| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1\
-| ... | to DUT2 where it is forwarded to TG(if2).
+| ... | via VM to DUT2 where it is forwarded to TG(if2).
| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
*** Variables ***
| ${dut2_spi}= | ${1000}
| ${dut1_spi}= | ${1001}
+
| ${ESP_PROTO}= | ${50}
+
| ${sock1}= | /tmp/sock1
| ${sock2}= | /tmp/sock2
+
| ${bid}= | 10
*** Test Cases ***
-| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using IPsec (transport) on RLOC Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
-| | ... | Eth-IPv6-ICMPv6 on TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Case: ip6-lispgpe-ipsec-ip6 - main fib, phys2lisp\
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup Topology
-| | And Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
-| | ... | ${dut1_to_dut2_ip6_static_adjacency}
-| | ... | ${dut2_to_dut1_ip6_static_adjacency}
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
-| | ... | ${dut1_to_dut2_ip6} | ${dut2_to_dut1_ip6}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
-| | ... | ${dut2_to_dut1_ip6} | ${dut1_to_dut2_ip6}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC02: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using IPsec (transport) lisp_gpe0 Int.
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
-| | ... | Eth-IPv6-ICMPv6 on TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
-| | ... | IPsec in between DUTS.
-| | ... | [Ver] Case: ip6-ipsec-lispgpe-ip6 - main fib, phys2lisp\
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across\
-| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830, RFC4303.
-| | ...
-| | ${encr_alg}= | Crypto Alg AES CBC 128
-| | ${auth_alg}= | Integ Alg SHA1 96
-| | Given Setup Topology
-| | And Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
-| | ... | ${dut1_to_dut2_ip6_static_adjacency}
-| | ... | ${dut2_to_dut1_ip6_static_adjacency}
-| | ${lisp_if_idx}= | resources.libraries.python.InterfaceUtil.get sw if index
-| | ... | ${dut1_node} | lisp_gpe0
-| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
-| | When VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut1_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi} | ${tg1_ip6}
-| | ... | ${tg2_ip6}
-| | And VPP Setup IPsec Manual Keyed Connection
-| | ... | ${dut2_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
-| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi} | ${tg2_ip6}
-| | ... | ${tg1_ip6}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC03: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
+| TC01: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on RLOC Int.
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG.
| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv6-ICMP on DUT1-DUT2, Eth-IPv6-ICMP\
| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-| TC04: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
+| TC02: DUT1 and DUT2 route IPv6 over Vhost to LISP GPE tunnel using IPsec (transport) on lisp_gpe0 Int.
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG.
| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.L2Util
+| Library | resources.libraries.python.LispUtil
+| Library | resources.libraries.python.VPPUtil
+| Library | resources.libraries.python.IPsecUtil
+| Library | resources.libraries.python.VatJsonUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VhostUser
+| Library | resources.libraries.python.QemuUtils
+| Library | String
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/ipsec.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipsec_ipv6.py
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Run Keywords | Func Test Setup
+| ... | AND | Vpp All Ra Suppress Link Layer | ${nodes}
+| Test Teardown | Func Test Teardown
+| ...
+| Documentation | *IPv6 - ip6-ipsec-lispgpe-ip6 - main fib,
+| ... | vrf (gpe_vni-to-vrf), phy2lisp, virt2lisp*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6,\
+| ... | *[Cfg] DUT configuration:* Each DUT is configured with LISP and IPsec.\
+| ... | IPsec is in transport mode. Tests cases are for IPsec configured both\
+| ... | on RLOC interface or lisp_gpe0 interface.
+| ... | *[Ver] TG verification:* Packet is send from TG(if1) across the DUT1\
+| ... | to DUT2 where it is forwarded to TG(if2).
+| ... | *[Ref] Applicable standard specifications:* RFC6830, RFC4303.
+
+*** Variables ***
+| ${dut2_spi}= | ${1000}
+| ${dut1_spi}= | ${1001}
+
+| ${ESP_PROTO}= | ${50}
+
+| ${bid}= | 10
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using IPsec (transport) on RLOC Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
+| | ... | Eth-IPv6-ICMPv6 on TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Case: ip6-lispgpe-ipsec-ip6 - main fib, phys2lisp\
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup Topology
+| | And Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip6_static_adjacency}
+| | ... | ${dut2_to_dut1_ip6_static_adjacency}
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi}
+| | ... | ${dut1_to_dut2_ip6} | ${dut2_to_dut1_ip6}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi}
+| | ... | ${dut2_to_dut1_ip6} | ${dut1_to_dut2_ip6}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+| TC02: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using IPsec (transport) lisp_gpe0 Int.
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-IPSec-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2,\
+| | ... | Eth-IPv6-ICMPv6 on TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2 with\
+| | ... | IPsec in between DUTS.
+| | ... | [Ver] Case: ip6-ipsec-lispgpe-ip6 - main fib, phys2lisp\
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across\
+| | ... | both DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830, RFC4303.
+| | ...
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA1 96
+| | Given Setup Topology
+| | And Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip6_static_adjacency}
+| | ... | ${dut2_to_dut1_ip6_static_adjacency}
+| | ${lisp_if_idx}= | resources.libraries.python.InterfaceUtil.get sw if index
+| | ... | ${dut1_node} | lisp_gpe0
+| | And IPsec Generate Keys | ${encr_alg} | ${auth_alg}
+| | When VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut1_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi} | ${tg1_ip6}
+| | ... | ${tg2_ip6}
+| | And VPP Setup IPsec Manual Keyed Connection
+| | ... | ${dut2_node} | ${lisp_if_idx} | ${encr_alg} | ${encr_key}
+| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi} | ${tg2_ip6}
+| | ... | ${tg1_ip6}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Topology
+| | Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | Interfaces in 3-node path are up
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6}
+| | ... | ${prefix6}
+| | Vpp Set If IPv6 Addr | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6}
+| | ... | ${prefix6}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
+| | ... | ${tg_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
+| | ... | ${tg_to_dut2_mac}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
+| | ... | ${dut1_to_dut2_mac}
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VPPUtil
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Run Keywords | Func Test Setup
+| ... | AND | Vpp All Ra Suppress Link Layer | ${nodes}
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *ip6-lispgpe-ip6 encapsulation test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
+| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv6 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv6 tunnel is configured between\
+| ... | DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr, dst-addr\
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using vhost interfaces
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip6-ipsec-lispgpe-ip6 - main fib, virt2lisp
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ...
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
+| | And Add IP Neighbors
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip6_static_adjacency}
+| | ... | ${dut2_to_dut1_ip6_static_adjacency}
+| | And Setup Qemu DUT1
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Qemu DUT1
+| | [Documentation] | Setup Vhosts on DUT1 and setup IP on one of them. Setup\
+| | ... | Qemu and bridge the vhosts. Optionally, you can set fib table ID\
+| | ... | where the vhost2 interface should be assigned to.
+| | ...
+| | [Arguments] | ${fib_table}=0
+| | ...
+| | ${vhost1}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
+| | ${vhost2}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${vhost2} | ${vhost_ip}
+| | ... | ${prefix6}
+| | Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${vhost2} | ${fib_table} | ipv6=${TRUE}
+| | Set Interface State | ${dut1_node} | ${vhost1} | up
+| | Set Interface State | ${dut1_node} | ${vhost2} | up
+| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${bid} | 0
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${vhost1} | ${bid} | 0
+| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
+| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
+| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
+
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
+| | ... | ${dut1_to_dut2_mac}
\ No newline at end of file
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VPPUtil
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Run Keywords | Func Test Setup
+| ... | AND | Vpp All Ra Suppress Link Layer | ${nodes}
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *ip6-lispgpe-ip6 encapsulation test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
+| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv6 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv6 tunnel is configured between\
+| ... | DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr, dst-addr\
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip6-lispgpe-ip6 - phy2lisp
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830.
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
+| | And Add IP Neighbors
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip6_static_adjacency}
+| | ... | ${dut2_to_dut1_ip6_static_adjacency}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
+| | ... | ${dut1_to_dut2_mac}
\ No newline at end of file
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VPPUtil
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Run Keywords | Func Test Setup
+| ... | AND | Vpp All Ra Suppress Link Layer | ${nodes}
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *ip6-lispgpe-ip6 encapsulation test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
+| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv6 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv6 tunnel is configured between\
+| ... | DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr, dst-addr\
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using vhost interfaces and VRF is enabled
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip6-lispgpe-ip6 - vrf, virt2lisp
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830.
+| | ...
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
+| | ... | AND | Check VPP PID in Teardown
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${fib_table_1} | ipv6=${TRUE}
+| | And Assign Interface To Fib Table | ${dut2_node}
+| | ... | ${dut2_to_tg} | ${fib_table_1} | ipv6=${TRUE}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
+| | And Add IP Neighbors | ${fib_table_1}
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip6_static_adjacency}
+| | ... | ${dut2_to_dut1_ip6_static_adjacency}
+| | ... | ${dut1_dut2_vni} | ${fib_table_1}
+| | And Setup Qemu DUT1 | ${fib_table_1}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Setup Qemu DUT1
+| | [Documentation] | Setup Vhosts on DUT1 and setup IP on one of them. Setup\
+| | ... | Qemu and bridge the vhosts. Optionally, you can set fib table ID\
+| | ... | where the vhost2 interface should be assigned to.
+| | ...
+| | [Arguments] | ${fib_table}=0
+| | ...
+| | ${vhost1}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
+| | ${vhost2}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
+| | Vpp Set If IPv6 Addr | ${dut1_node} | ${vhost2} | ${vhost_ip}
+| | ... | ${prefix6}
+| | Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${vhost2} | ${fib_table} | ipv6=${TRUE}
+| | Set Interface State | ${dut1_node} | ${vhost1} | up
+| | Set Interface State | ${dut1_node} | ${vhost2} | up
+| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${bid} | 0
+| | Interface is added to bridge domain | ${dut1_node}
+| | ... | ${vhost1} | ${bid} | 0
+| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
+| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
+| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
+
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
+| | ... | ${dut1_to_dut2_mac}
\ No newline at end of file
--- /dev/null
+# 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.topology.Topology
+| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.VPPUtil
+| Resource | resources/libraries/robot/traffic.robot
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/vrf.robot
+| Resource | resources/libraries/robot/lisp/lispgpe.robot
+# Import configuration and test data:
+| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
+| ...
+| Test Setup | Run Keywords | Func Test Setup
+| ... | AND | Vpp All Ra Suppress Link Layer | ${nodes}
+| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| ... | AND | Show vpp trace dump on all DUTs
+| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
+| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
+| ... | AND | Check VPP PID in Teardown
+| ...
+| Documentation | *ip6-lispgpe-ip6 encapsulation test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
+| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv6 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv6 tunnel is configured between\
+| ... | DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr, dst-addr\
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC6830.
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
+| | ... | TG-DUTn.
+| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
+| | ... | [Ver] Case: ip6-lispgpe-ip6 - vrf, phy2lisp
+| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
+| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
+| | ... | received packets are correct.
+| | ... | [Ref] RFC6830.
+| | ...
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Assign Interface To Fib Table | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${fib_table_1} | ipv6=${TRUE}
+| | And Assign Interface To Fib Table | ${dut2_node}
+| | ... | ${dut2_to_tg} | ${fib_table_1} | ipv6=${TRUE}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
+| | And Vpp Set If IPv6 Addr
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
+| | And Add IP Neighbors | ${fib_table_1}
+| | When Set up LISP GPE topology
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
+| | ... | ${dut1_to_dut2_ip6_static_adjacency}
+| | ... | ${dut2_to_dut1_ip6_static_adjacency}
+| | ... | ${dut1_dut2_vni} | ${fib_table_1}
+| | Then Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
+| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
+| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
+| | And Send Packet And Check Headers
+| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
+| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
+
+*** Keywords ***
+| Add IP Neighbors
+| | [Documentation]
+| | ... | Add IP neighbors to physical interfaces on DUTs.\
+| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
+| | ...
+| | [Arguments] | ${fib_id}=0
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
+| | ... | ${tg_to_dut1_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
+| | ... | ${tg_to_dut2_mac} | ${fib_id}
+| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
+| | ... | ${dut2_to_dut1_mac}
+| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
+| | ... | ${dut1_to_dut2_mac}
\ No newline at end of file
+++ /dev/null
-# 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/default.robot
-| Resource | resources/libraries/robot/testing_path.robot
-| Resource | resources/libraries/robot/ipv4.robot
-| Resource | resources/libraries/robot/traffic.robot
-| Resource | resources/libraries/robot/lisp/lisp_static_adjacency.robot
-| Resource | resources/libraries/robot/l2_traffic.robot
-| Resource | resources/libraries/robot/lisp/lispgpe.robot
-| Resource | resources/libraries/robot/bridge_domain.robot
-| Resource | resources/libraries/robot/qemu.robot
-| Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.VhostUser
-| Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.VPPUtil
-# import additional Lisp settings from resource file
-| Variables | resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | 3_NODE_DOUBLE_LINK_TOPO
-| ... | VM_ENV | HW_ENV
-| Test Setup | Func Test Setup
-| Test Teardown | Func Test Teardown
-| Documentation | *LISP static adjacency test cases*
-| ...
-| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
-| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
-| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv4 tunnel.
-| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
-| ... | routing and static routes. LISPoIPv4 tunnel is configured\
-| ... | between DUT1 and DUT2.
-| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr,\
-| ... | dst-addr and MAC addresses.
-| ... | *[Ref] Applicable standard specifications:* RFC6830.
-
-*** Test Cases ***
-| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISPoIPv4 tunnel
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-LISP-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] On DUT1 and DUT2 configure IPv4 LISP static adjacencies.
-| | ... | [Ver] Make TG send ICMPv6 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP tunnel between them; verify IPv6 headers on received\
-| | ... | packets are correct.
-| | ... | [Cfg2] Reconf LISP.
-| | ... | [Ver2] Verify packets are received again via LISP tunnel.
-| | ... | [Ref] RFC6830.
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And IP addresses are set on interfaces
-| | ... | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${dut1_to_dut2_ip6o4} | ${dut_prefix6o4}
-| | ... | ${dut1_node} | ${dut1_to_tg}
-| | ... | ${dut1_to_tg_ip6o4} | ${tg_prefix6o4}
-| | ... | ${dut2_node} | ${dut2_to_dut1}
-| | ... | ${dut2_to_dut1_ip6o4} | ${dut_prefix6o4}
-| | ... | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut1_mac}
-| | When Set up Lisp topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
-| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-| | When Change Lisp Configuration | ${dut1_node} | ${dut2_node}
-| | ... | ${dut1_to_dut2} | ${dut2_to_dut1} | ${dut1_to_dut2_mac}
-| | ... | ${dut2_to_dut1_mac} | ${dut1_to_dut2_ip6o4}
-| | ... | ${dut2_to_dut1_ip6o4_reconf} | ${dut_prefix6o4}
-| | ... | ${dut1_ip6o4_static_adjacency}
-| | ... | ${dut1_ip6o4_static_adjacency_reconf}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC02: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip6-lispgpe-ip4 - vrf, phy2lisp
-| | ... | Make TG send ICMPv4 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830.
-| | ...
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
-| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Assign Interface To Fib Table | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${fib_table_1} | ip6=${TRUE}
-| | And Assign Interface To Fib Table | ${dut2_node}
-| | ... | ${dut2_to_tg} | ${fib_table_1} | ip6=${TRUE}
-| | And Add IP Neighbors | ${fib_table_1}
-| | And IP addresses are set on interfaces
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6o4}
-| | ... | ${dut_prefix6o4}
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6o4} | ${tg_prefix6o4}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6o4}
-| | ... | ${dut_prefix6o4}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
-| | ... | ${dut1_ip6o4_static_adjacency}
-| | ... | ${dut2_ip6o4_static_adjacency}
-| | ... | ${dut1_dut2_vni} | ${fib_table_1}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC03: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using vhost interfaces
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv4 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip6-lispgpe-ip4 - main fib, virt2lisp
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ...
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
-| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
-| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And IP addresses are set on interfaces
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6o4}
-| | ... | ${dut_prefix6o4}
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6o4} | ${tg_prefix6o4}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6o4}
-| | ... | ${dut_prefix6o4}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut2_mac}
-| | And Add Arp On Dut | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
-| | ... | ${dut2_to_dut1_mac}
-| | And Add Arp On Dut | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
-| | ... | ${dut1_to_dut2_mac}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
-| | ... | ${dut1_ip6o4_static_adjacency}
-| | ... | ${dut2_ip6o4_static_adjacency}
-| | And Setup Qemu DUT1
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6o4} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6o4} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-
-*** Keywords ***
-| Add IP Neighbors
-| | [Documentation]
-| | ... | Add IP neighbors to physical interfaces on DUTs.\
-| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
-| | ...
-| | [Arguments] | ${fib_id}=0
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6o4}
-| | ... | ${tg_to_dut1_mac} | ${fib_id}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6o4}
-| | ... | ${tg_to_dut2_mac} | ${fib_id}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6o4}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6o4}
-| | ... | ${dut1_to_dut2_mac}
-
-| Setup Qemu DUT1
-| | [Documentation] | Setup Vhosts on DUT1 and setup IP on one of them. Setup\
-| | ... | Qemu and bridge the vhosts.
-| | ...
-| | ${vhost1}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
-| | ${vhost2}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
-| | Set Interface Address | ${dut1_node} | ${vhost2} | ${vhost_ip} | ${prefix4}
-| | Set Interface State | ${dut1_node} | ${vhost1} | up
-| | Set Interface State | ${dut1_node} | ${vhost2} | up
-| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
-| | Interface is added to bridge domain | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${bid} | 0
-| | Interface is added to bridge domain | ${dut1_node}
-| | ... | ${vhost1} | ${bid} | 0
-| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
-| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
-| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
+++ /dev/null
-# 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.topology.Topology
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.IPUtil
-| Library | resources.libraries.python.IPv6Setup
-| Library | resources.libraries.python.VPPUtil
-| Resource | resources/libraries/robot/traffic.robot
-| Resource | resources/libraries/robot/default.robot
-| Resource | resources/libraries/robot/interfaces.robot
-| Resource | resources/libraries/robot/testing_path.robot
-| Resource | resources/libraries/robot/qemu.robot
-| Resource | resources/libraries/robot/bridge_domain.robot
-| Resource | resources/libraries/robot/vrf.robot
-| Resource | resources/libraries/robot/lisp/lispgpe.robot
-# Import configuration and test data:
-| Variables | resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
-| ...
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | LISP
-| ...
-| Test Setup | Run Keywords | Func Test Setup
-| ... | AND | Vpp All Ra Suppress Link Layer | ${nodes}
-| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| ... | AND | Show vpp trace dump on all DUTs
-| ... | AND | Show Vpp Settings | ${nodes['DUT1']}
-| ... | AND | Show Vpp Settings | ${nodes['DUT2']}
-| ... | AND | Check VPP PID in Teardown
-| ...
-| Documentation | *ip6-lispgpe-ip6 encapsulation test cases*
-| ...
-| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
-| ... | with single links between nodes.
-| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv6-ICMPv6 on DUT1-DUT2,\
-| ... | Eth-IPv6-ICMPv6 on TG-DUTn for IPv6 routing over LISPoIPv6 tunnel.
-| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
-| ... | routing and static routes. LISPoIPv6 tunnel is configured between\
-| ... | DUT1 and DUT2.
-| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr, dst-addr\
-| ... | and MAC addresses.
-| ... | *[Ref] Applicable standard specifications:* RFC6830.
-
-*** Test Cases ***
-| TC01: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip6-lispgpe-ip6 - phy2lisp
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830.
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
-| | ... | ${tg_to_dut1_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
-| | ... | ${tg_to_dut2_mac}
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
-| | ... | ${dut2_to_dut1_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
-| | ... | ${dut1_to_dut2_mac}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
-| | ... | ${dut1_to_dut2_ip6_static_adjacency}
-| | ... | ${dut2_to_dut1_ip6_static_adjacency}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC02: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using physical interfaces and VRF is enabled
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip6-lispgpe-ip6 - vrf, phy2lisp
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830.
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Assign Interface To Fib Table | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${fib_table_1} | ipv6=${TRUE}
-| | And Assign Interface To Fib Table | ${dut2_node}
-| | ... | ${dut2_to_tg} | ${fib_table_1} | ipv6=${TRUE}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
-| | And Add IP Neighbors | ${fib_table_1}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
-| | ... | ${dut1_to_dut2_ip6_static_adjacency}
-| | ... | ${dut2_to_dut1_ip6_static_adjacency}
-| | ... | ${dut1_dut2_vni} | ${fib_table_1}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dut1_to_tg_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC03: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using vhost interfaces
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip6-ipsec-lispgpe-ip6 - main fib, virt2lisp
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ...
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
-| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
-| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
-| | ... | ${tg_to_dut1_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
-| | ... | ${tg_to_dut2_mac}
-| | And Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
-| | ... | ${dut2_to_dut1_mac}
-| | And Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
-| | ... | ${dut1_to_dut2_mac}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
-| | ... | ${dut1_to_dut2_ip6_static_adjacency}
-| | ... | ${dut2_to_dut1_ip6_static_adjacency}
-| | And Setup Qemu DUT1
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-| TC04: DUT1 and DUT2 route IPv6 bidirectionally over LISP GPE tunnel using vhost interfaces and VRF is enabled
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-LISPGPE-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on\
-| | ... | TG-DUTn.
-| | ... | [Cfg] Configure IPv6 LISP static adjacencies on DUT1 and DUT2.
-| | ... | [Ver] Case: ip6-lispgpe-ip6 - vrf, virt2lisp
-| | ... | Make TG send ICMPv6 Echo Req between its interfaces across both\
-| | ... | DUTs and LISP GPE tunnel between them; verify IPv6 headers on\
-| | ... | received packets are correct.
-| | ... | [Ref] RFC6830.
-| | ...
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Show Vpp Settings | ${nodes['DUT1']}
-| | ... | AND | Show Vpp Settings | ${nodes['DUT2']}
-| | ... | AND | Stop and Clear QEMU | ${dut1_node} | ${vm_node}
-| | ... | AND | Check VPP PID in Teardown
-| | ...
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Assign Interface To Fib Table | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${fib_table_1} | ipv6=${TRUE}
-| | And Assign Interface To Fib Table | ${dut2_node}
-| | ... | ${dut2_to_tg} | ${fib_table_1} | ipv6=${TRUE}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${dut1_to_dut2_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${dut1_to_tg_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${dut2_to_dut1_ip6} | ${prefix6}
-| | And Vpp Set If IPv6 Addr
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${dut2_to_tg_ip6} | ${prefix6}
-| | And Add IP Neighbors | ${fib_table_1}
-| | When Set up LISP GPE topology
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${NONE}
-| | ... | ${duts_locator_set} | ${dut1_ip6_eid} | ${dut2_ip6_eid}
-| | ... | ${dut1_to_dut2_ip6_static_adjacency}
-| | ... | ${dut2_to_dut1_ip6_static_adjacency}
-| | ... | ${dut1_dut2_vni} | ${fib_table_1}
-| | And Setup Qemu DUT1 | ${fib_table_1}
-| | Then Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg1_ip6} | ${tg2_ip6}
-| | ... | ${tg_to_dut1} | ${tg_to_dut1_mac} | ${dst_vhost_mac}
-| | ... | ${tg_to_dut2} | ${dut2_to_tg_mac} | ${tg_to_dut2_mac}
-| | And Send Packet And Check Headers
-| | ... | ${tg_node} | ${tg2_ip6} | ${tg1_ip6}
-| | ... | ${tg_to_dut2} | ${tg_to_dut2_mac} | ${dut2_to_tg_mac}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg_mac} | ${tg_to_dut1_mac}
-
-*** Keywords ***
-| Setup Qemu DUT1
-| | [Documentation] | Setup Vhosts on DUT1 and setup IP on one of them. Setup\
-| | ... | Qemu and bridge the vhosts. Optionally, you can set fib table ID\
-| | ... | where the vhost2 interface should be assigned to.
-| | ...
-| | [Arguments] | ${fib_table}=0
-| | ...
-| | ${vhost1}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock1}
-| | ${vhost2}= | Vpp Create Vhost User Interface | ${dut1_node} | ${sock2}
-| | Vpp Set If IPv6 Addr | ${dut1_node} | ${vhost2} | ${vhost_ip}
-| | ... | ${prefix6}
-| | Assign Interface To Fib Table | ${dut1_node}
-| | ... | ${vhost2} | ${fib_table} | ipv6=${TRUE}
-| | Set Interface State | ${dut1_node} | ${vhost1} | up
-| | Set Interface State | ${dut1_node} | ${vhost2} | up
-| | Bridge domain on DUT node is created | ${dut1_node} | ${bid} | learn=${TRUE}
-| | Interface is added to bridge domain | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${bid} | 0
-| | Interface is added to bridge domain | ${dut1_node}
-| | ... | ${vhost1} | ${bid} | 0
-| | ${vhost_mac}= | Get Vhost User Mac By SW Index | ${dut1_node} | ${vhost2}
-| | Set test variable | ${dst_vhost_mac} | ${vhost_mac}
-| | VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1} | ${sock2}
-
-| Add IP Neighbors
-| | [Documentation]
-| | ... | Add IP neighbors to physical interfaces on DUTs.\
-| | ... | You can specify fib table ID for DUT-TG interfaces. Default is 0.
-| | ...
-| | [Arguments] | ${fib_id}=0
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg1_ip6}
-| | ... | ${tg_to_dut1_mac} | ${fib_id}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg2_ip6}
-| | ... | ${tg_to_dut2_mac} | ${fib_id}
-| | Add IP Neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_to_dut1_ip6}
-| | ... | ${dut2_to_dut1_mac}
-| | Add IP Neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_to_dut2_ip6}
-| | ... | ${dut1_to_dut2_mac}
\ No newline at end of file
| ... | with one link between the nodes.
| ... | *[Cfg] DUT configuration:* DUT2 is configured with L2 Cross connect.
| ... | DUT1 is configured with IP source check on link to TG,
-| ... | *[Ver] TG verification:*Test ICMP Echo Request packets are sent
+| ... | *[Ver] TG verification:* Test ICMP Echo Request packets are sent
| ... | in one direction by TG on link to DUT1 and received on TG link
| ... | to DUT2. On receive TG verifies if packets which source address
| ... | is not in routes are dropped.
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/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 | Run Keywords | Func Test Setup
+| ... | AND | Clean Up Namespaces | ${nodes['DUT1']}
+| Test Teardown | Run Keywords | Func Test Teardown
+| ... | AND | Clean Up Namespaces | ${nodes['DUT1']}
+| 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}= | tap_int1
+| ${tap_int2}= | tap_int2
+| ${mod_tap_name}= | tap_int1MOD
+
+*** 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 Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
+| | ... | ${nodes['TG']}
+| | And Interfaces in 2-node path are 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 Modify Tap Interface | ${dut_node} | ${int1} | ${mod_tap_name}
+| | Then Check Tap Present | ${dut_node} | ${mod_tap_name}
+| | When Delete Tap Interface | ${dut_node} | ${int1}
+| | Then Run Keyword And Expect Error
+| | ... | Tap interface :${mod_tap_name} does not exist
+| | ... | Check Tap Present | ${dut_node} | ${mod_tap_name}
+| | And Check Tap Present | ${dut_node} | ${tap_int2}
+| | When Delete Tap Interface | ${dut_node} | ${int2}
+| | Then Run Keyword And Expect Error
+| | ... | ValueError: No JSON object could be decoded
+| | ... | Check Tap Present | ${dut_node} | ${tap_int2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/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 | Run Keywords | Func Test Setup
+| ... | AND | Clean Up Namespaces | ${nodes['DUT1']}
+| Test Teardown | Run Keywords | Func Test Teardown
+| ... | AND | Clean Up Namespaces | ${nodes['DUT1']}
+| 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 ***
+| ${bid_from_TG}= | 19
+| ${bid_to_TG}= | 20
+| ${bid_TAP}= | tapBr
+
+| ${tap_int1}= | tap_int1
+| ${tap_int2}= | tap_int2
+
+*** Test Cases ***
+| TC01: Tap Interface 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.
+| | ... | [Ver] Packet sent from TG is passed through all L2BD and received
+| | ... | back on TG. Then src_ip, dst_ip and MAC are checked.
+| | ...
+| | [Teardown] | Run Keywords
+| | ... | Linux Del Bridge | ${dut_node} | ${bid_TAP} | AND
+| | ... | Show Packet Trace on All DUTs | ${nodes} | AND
+| | ... | Clean Up Namespaces | ${nodes['DUT1']} | AND
+| | ... | Check VPP PID in Teardown
+| | ...
+| | Given Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
+| | ... | ${nodes['TG']}
+| | And Interfaces in 2-node path are 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
+| | And Bridge domain on DUT node is created | ${dut_node}
+| | ... | ${bid_from_TG} | learn=${TRUE}
+| | And Bridge domain on DUT node is created | ${dut_node}
+| | ... | ${bid_to_TG} | learn=${TRUE}
+| | And Linux Add Bridge | ${dut_node}
+| | ... | ${bid_TAP} | ${tap_int1} | ${tap_int2}
+| | And Interface is added to bridge domain | ${dut_node}
+| | ... | ${int1} | ${bid_to_TG} | 0
+| | And Interface is added to bridge domain | ${dut_node}
+| | ... | ${dut_to_tg_if1} | ${bid_to_TG} | 0
+| | And Interface is added to bridge domain | ${dut_node}
+| | ... | ${int2} | ${bid_from_TG} | 0
+| | And Interface is added to bridge domain | ${dut_node}
+| | ... | ${dut_to_tg_if2} | ${bid_from_TG} | 0
+| | Then Send and receive ICMP Packet | ${tg_node}
+| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if2}
| ... | *[Ref] Applicable standard specifications:*
*** Variables ***
-| ${tap1_VPP_ip}= | 16.0.10.1
-| ${tap2_VPP_ip}= | 16.0.20.1
-
| ${tap1_NM_ip}= | 16.0.10.2
-| ${tap2_NM_ip}= | 16.0.20.2
| ${tap2_NM_SHG}= | 16.0.10.3
-| ${bid_from_TG}= | 19
-| ${bid_to_TG}= | 20
-| ${bid_NM}= | container1_br
-| ${bid_TAP}= | tapBr
| ${bd_id1}= | 21
-| ${bd_id2}= | 22
| ${shg1}= | 2
| ${shg2}= | 3
| ${tap_int1}= | tap_int1
| ${tap_int2}= | tap_int2
-| ${mod_tap_name}= | tap_int1MOD
| ${namespace1}= | nmspace1
| ${namespace2}= | nmspace2
-| ${dut_ip_address}= | 192.168.0.1
-| ${tg_ip_address}= | 192.168.0.2
| ${tg_ip_address_SHG}= | 16.0.10.20
-| ${tg_ip_address_GW}= | 192.168.0.0
-
| ${prefix}= | 24
*** Test Cases ***
-| TC01: Tap Interface 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.
-| | ... | [Ver] Packet sent from TG is passed through all L2BD and received
-| | ... | back on TG. Then src_ip, dst_ip and MAC are checked.
-| | ...
-| | [Teardown] | Run Keywords
-| | ... | Linux Del Bridge | ${dut_node} | ${bid_TAP} | AND
-| | ... | Show Packet Trace on All DUTs | ${nodes} | AND
-| | ... | Clean Up Namespaces | ${nodes['DUT1']} | AND
-| | ... | Check VPP PID in Teardown
-| | ...
-| | Given Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
-| | And Interfaces in 2-node path are 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
-| | And Bridge domain on DUT node is created | ${dut_node}
-| | ... | ${bid_from_TG} | learn=${TRUE}
-| | And Bridge domain on DUT node is created | ${dut_node}
-| | ... | ${bid_to_TG} | learn=${TRUE}
-| | And Linux Add Bridge | ${dut_node}
-| | ... | ${bid_TAP} | ${tap_int1} | ${tap_int2}
-| | And Interface is added to bridge domain | ${dut_node}
-| | ... | ${int1} | ${bid_to_TG} | 0
-| | And Interface is added to bridge domain | ${dut_node}
-| | ... | ${dut_to_tg_if1} | ${bid_to_TG} | 0
-| | And Interface is added to bridge domain | ${dut_node}
-| | ... | ${int2} | ${bid_from_TG} | 0
-| | And Interface is added to bridge domain | ${dut_node}
-| | ... | ${dut_to_tg_if2} | ${bid_from_TG} | 0
-| | Then Send and receive ICMP Packet | ${tg_node}
-| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if2}
-
-| TC02: Tap Interface IP Ping Without 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
-| | ... | received on TG.
-| | Given Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
-| | And Interfaces in 2-node path are up
-| | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
-| | And Set Interface Address
-| | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
-| | And Set Interface Address
-| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
-| | And Set Interface State | ${dut_node} | ${int1} | up
-| | And Set Linux Interface MAC | ${dut_node} | ${tap_int1} | ${tap1_NM_mac}
-| | And Set Linux Interface IP | ${dut_node}
-| | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix}
-| | And Add Route | ${dut_node}
-| | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip}
-| |Â And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
-| |Â And Add Arp On Dut | ${dut_node} | ${int1}
-| | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
-| | Then Node replies to ICMP echo request | ${tg_node} | ${tg_to_dut_if1}
-| | ... | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac}
-| | ... | ${tap1_NM_ip} | ${tg_ip_address}
-
-| TC03: Tap Interface IP Ping With 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.
-| | ... | [Ver] Packet sent from TG gets to the destination and ICMP-reply is
-| | ... | received on TG.
-| | Given Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
-| | And Interfaces in 2-node path are up
-| | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
-| | And Set Interface Address
-| | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
-| | And Set Interface Address
-| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
-| | And Set Interface State | ${dut_node} | ${int1} | up
-| | When Create Namespace | ${dut_node} | ${namespace1}
-| | And Attach Interface To Namespace | ${dut_node}
-| | ... | ${namespace1} | ${tap_int1}
-| | And Set Linux Interface MAC | ${dut_node}
-| | ... | ${tap_int1} | ${tap1_NM_mac} | ${namespace1}
-| | And Set Linux Interface IP | ${dut_node}
-| | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix} | ${namespace1}
-| |Â And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
-| |Â And Add Arp On Dut | ${dut_node} | ${int1}
-| | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
-| | And Add Route | ${dut_node}
-| | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip} | ${namespace1}
-| | Then Node replies to ICMP echo request | ${tg_node} | ${tg_to_dut_if1}
-| | ... | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac}
-| | ... | ${tap1_NM_ip} | ${tg_ip_address}
-
-| TC04: Tap Interface BD - Different Split Horizon
+| TC01: Tap Interface BD - Different Split Horizon
| | [Documentation]
| | ... | [Top] TG-DUT1-TG.
| | ... | [Enc] Eth-IPv4-ICMPv4.
| | 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}
-| TC05: Tap Interface BD - Same Split Horizon
+| TC02: Tap Interface BD - Same Split Horizon
| | [Documentation]
| | ... | [Top] TG-DUT1-TG.
| | ... | [Enc] Eth-IPv4-ICMPv4.
| | ... | ${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}
-
-| TC06: 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 Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
-| | And Interfaces in 2-node path are 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 Modify Tap Interface | ${dut_node} | ${int1} | ${mod_tap_name}
-| | Then Check Tap Present | ${dut_node} | ${mod_tap_name}
-| | When Delete Tap Interface | ${dut_node} | ${int1}
-| | Then Run Keyword And Expect Error
-| | ... | Tap interface :${mod_tap_name} does not exist
-| | ... | Check Tap Present | ${dut_node} | ${mod_tap_name}
-| | And Check Tap Present | ${dut_node} | ${tap_int2}
-| | When Delete Tap Interface | ${dut_node} | ${int2}
-| | Then Run Keyword And Expect Error
-| | ... | ValueError: No JSON object could be decoded
-| | ... | Check Tap Present | ${dut_node} | ${tap_int2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/ipv6.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/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 | Run Keywords | Func Test Setup
+| ... | AND | Clean Up Namespaces | ${nodes['DUT1']}
+| Test Teardown | Run Keywords | Func Test Teardown
+| ... | AND | Clean Up Namespaces | ${nodes['DUT1']}
+| 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_VPP_ip}= | 16.0.10.1
+| ${tap1_NM_ip}= | 16.0.10.2
+| ${tap1_NM_mac}= | 02:00:00:00:00:02
+| ${tap_int1}= | tap_int1
+
+| ${namespace1}= | nmspace1
+
+| ${dut_ip_address}= | 192.168.0.1
+| ${tg_ip_address}= | 192.168.0.2
+| ${tg_ip_address_GW}= | 192.168.0.0
+| ${prefix}= | 24
+
+*** Test Cases ***
+| TC01: Tap Interface IP Ping Without 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
+| | ... | received on TG.
+| | Given Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
+| | ... | ${nodes['TG']}
+| | And Interfaces in 2-node path are up
+| | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
+| | And Set Interface Address
+| | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
+| | And Set Interface Address
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
+| | And Set Interface State | ${dut_node} | ${int1} | up
+| | And Set Linux Interface MAC | ${dut_node} | ${tap_int1} | ${tap1_NM_mac}
+| | And Set Linux Interface IP | ${dut_node}
+| | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix}
+| | And Add Route | ${dut_node}
+| | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip}
+| |Â And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
+| |Â And Add Arp On Dut | ${dut_node} | ${int1}
+| | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
+| | Then Node replies to ICMP echo request | ${tg_node} | ${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
+| | [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.
+| | ... | [Ver] Packet sent from TG gets to the destination and ICMP-reply is
+| | ... | received on TG.
+| | Given Path for 2-node testing is set | ${nodes['TG']} | ${nodes['DUT1']}
+| | ... | ${nodes['TG']}
+| | And Interfaces in 2-node path are up
+| | ${int1}= | And Add Tap Interface | ${dut_node} | ${tap_int1} |
+| | And Set Interface Address
+| | ... | ${dut_node} | ${int1} | ${tap1_VPP_ip} | ${prefix}
+| | And Set Interface Address
+| | ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip_address} | ${prefix}
+| | And Set Interface State | ${dut_node} | ${int1} | up
+| | When Create Namespace | ${dut_node} | ${namespace1}
+| | And Attach Interface To Namespace | ${dut_node}
+| | ... | ${namespace1} | ${tap_int1}
+| | And Set Linux Interface MAC | ${dut_node}
+| | ... | ${tap_int1} | ${tap1_NM_mac} | ${namespace1}
+| | And Set Linux Interface IP | ${dut_node}
+| | ... | ${tap_int1} | ${tap1_NM_ip} | ${prefix} | ${namespace1}
+| |Â And Add Arp On Dut | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${tg_ip_address} | ${tg_to_dut_if1_mac}
+| |Â And Add Arp On Dut | ${dut_node} | ${int1}
+| | ... | ${tap1_NM_ip} | ${tap1_NM_mac}
+| | And Add Route | ${dut_node}
+| | ... | ${tg_ip_address_GW} | ${prefix} | ${tap1_VPP_ip} | ${namespace1}
+| | Then Node replies to ICMP echo request | ${tg_node} | ${tg_to_dut_if1}
+| | ... | ${dut_to_tg_if1_mac} | ${tg_to_dut_if1_mac}
+| | ... | ${tap1_NM_ip} | ${tg_ip_address}
| Library | resources.libraries.python.telemetry.IPFIXSetup
| Library | resources.libraries.python.Trace
-| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | EXPECTED_FAILING
-# TODO: Remove EXPECTED_FAILING tag once functionality is implemented (VPP-204)
+| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
| Documentation | *IPFIX ipv4 test cases*
| ${prefix_length}= | 24
| ${ip_version}= | ip4
| ${port}= | 80
-| ${sessions}= | 80
*** Test Cases ***
| TC01: DUT sends IPFIX template and data packets
| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
| | ... | port=${port}
-| TC06: DUT reports packet flow with a large number of packets
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
-| | ... | address as collector and add classify session with TG source address.
-| | ... | [Ver] Make TG send packets to DUT1, then listen for IPFIX template
-| | ... | and data packets, verify that IPFIX reported the received packets.
-| | ... | [Ref] RFC 7011
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Set Interface Address | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
-| | ... | ${tg_to_dut1_mac}
-| | ${table_index} | ${skip_n} | ${match_n}=
-| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
-| | And VPP configures classify session L3 | ${dut1_node} | permit
-| | ... | ${table_index} | ${skip_n} | ${match_n} | ${ip_version} | src
-| | ... | ${tg_to_dut1_ip}
-| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
-| | ... | ${table_index} | ip_version=${ip_version}
-| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip}
-| | ... | ${dut1_to_tg_ip} | interval=5
-| | And Set IPFIX stream | ${dut1_node} | ${1}
-| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
-| | ... | ${ip_version}
-| | Then Send packets and verify IPFIX | ${tg_node} | ${dut1_node}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
-| | ... | count=20000 | timeout=10
-
-| TC07: DUT reports packet flow when multiple sessions are configured
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
-| | ... | address as collector and add several classify sessions with different
-| | ... | ports.
-| | ... | [Ver] Make TG send packets to DUT1 using a range of ports matching
-| | ... | configured sessions, then listen for IPFIX template and data packets,
-| | ... | verify that IPFIX reported the received packets for each session.
-| | ... | [Ref] RFC 7011
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Set Interface Address | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
-| | ... | ${tg_to_dut1_mac}
-| | ${table_index} | ${skip_n} | ${match_n}=
-| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
-| | ... | src proto l4 src_port dst_port
-| | :FOR | ${index} | IN RANGE | ${sessions}
-| | | VPP configures classify session generic | ${dut1_node}
-| | | ... | acl-hit-next permit | ${table_index} | ${skip_n} | ${match_n}
-| | | ... | l3 ${ip_version} src ${tg_to_dut1_ip}
-| | | ... | proto 6 l4 src_port ${index} dst_port ${index}
-| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
-| | ... | ${table_index} | ip_version=${ip_version}
-| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip}
-| | ... | ${dut1_to_tg_ip}
-| | ... | mtu=1450 | interval=5
-| | And Set IPFIX stream | ${dut1_node} | ${1}
-| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
-| | ... | ${ip_version}
-| | Then Send session sweep and verify IPFIX | ${tg_node} | ${dut1_node}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
-| | ... | ${sessions} | timeout=10 | count=3
# TODO: DUT reports packet flow when ACL is configured with wildcards
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/telemetry/ipfix.robot
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.telemetry.IPFIXSetup
+| Library | resources.libraries.python.Trace
+
+| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *IPFIX ipv4 test cases*
+| ...
+| ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
+| ... | one link between the nodes. DUT1 is configured with IPv4
+| ... | routing and static routes. IPFIX is configured on DUT1 with
+| ... | DUT1->TG interface as collector. Test packets are
+| ... | sent from TG to DUT1. TG listens for flow report packets
+| ... | and verifies that they contains flow record of test packets sent.
+
+*** Variables ***
+| ${dut1_to_tg_ip}= | 192.168.1.1
+| ${tg_to_dut1_ip}= | 192.168.1.2
+| ${prefix_length}= | 24
+| ${ip_version}= | ip4
+| ${sessions}= | 80
+
+*** Test Cases ***
+| TC01: DUT reports packet flow with a large number of packets
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
+| | ... | address as collector and add classify session with TG source address.
+| | ... | [Ver] Make TG send packets to DUT1, then listen for IPFIX template
+| | ... | and data packets, verify that IPFIX reported the received packets.
+| | ... | [Ref] RFC 7011
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Set Interface Address | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | ... | ${tg_to_dut1_mac}
+| | ${table_index} | ${skip_n} | ${match_n}=
+| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
+| | And VPP configures classify session L3 | ${dut1_node} | permit
+| | ... | ${table_index} | ${skip_n} | ${match_n} | ${ip_version} | src
+| | ... | ${tg_to_dut1_ip}
+| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
+| | ... | ${table_index} | ip_version=${ip_version}
+| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip}
+| | ... | ${dut1_to_tg_ip} | interval=5
+| | And Set IPFIX stream | ${dut1_node} | ${1}
+| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
+| | ... | ${ip_version}
+| | Then Send packets and verify IPFIX | ${tg_node} | ${dut1_node}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
+| | ... | count=20000 | timeout=10
+
+| TC02: DUT reports packet flow when multiple sessions are configured
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
+| | ... | address as collector and add several classify sessions with different
+| | ... | ports.
+| | ... | [Ver] Make TG send packets to DUT1 using a range of ports matching
+| | ... | configured sessions, then listen for IPFIX template and data packets,
+| | ... | verify that IPFIX reported the received packets for each session.
+| | ... | [Ref] RFC 7011
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Set Interface Address | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | ... | ${tg_to_dut1_mac}
+| | ${table_index} | ${skip_n} | ${match_n}=
+| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
+| | ... | src proto l4 src_port dst_port
+| | :FOR | ${index} | IN RANGE | ${sessions}
+| | | VPP configures classify session generic | ${dut1_node}
+| | | ... | acl-hit-next permit | ${table_index} | ${skip_n} | ${match_n}
+| | | ... | l3 ${ip_version} src ${tg_to_dut1_ip}
+| | | ... | proto 6 l4 src_port ${index} dst_port ${index}
+| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
+| | ... | ${table_index} | ip_version=${ip_version}
+| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip}
+| | ... | ${dut1_to_tg_ip}
+| | ... | mtu=1450 | interval=5
+| | And Set IPFIX stream | ${dut1_node} | ${1}
+| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
+| | ... | ${ip_version}
+| | Then Send session sweep and verify IPFIX | ${tg_node} | ${dut1_node}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
+| | ... | ${sessions} | timeout=10 | count=3
+
+# TODO: DUT reports packet flow when ACL is configured with wildcards
| ${prefix_length}= | 64
| ${ip_version}= | ip6
| ${port}= | 80
-| ${sessions}= | 45
# IPv4 addresses used for IPFIX exporter. Export over IPv6 not (yet?) supported.
| ${dut1_to_tg_ip4}= | 192.168.1.1
| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
| | ... | port=${port}
-| TC05: DUT reports packet flow with a large number of packets
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
-| | ... | address as collector and add classify session with TG source address.
-| | ... | [Ver] Make TG send packets to DUT1, then listen for IPFIX template
-| | ... | and data packets, verify that IPFIX reported the received packets.
-| | ... | [Ref] RFC 7011
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Set Interface Address | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
-| | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
-| | ... | ${tg_to_dut1_mac}
-| | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
-| | ${table_index} | ${skip_n} | ${match_n}=
-| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
-| | And VPP configures classify session L3 | ${dut1_node} | permit
-| | ... | ${table_index} | ${skip_n} | ${match_n} | ${ip_version} | src
-| | ... | ${tg_to_dut1_ip}
-| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
-| | ... | ${table_index} | ip_version=${ip_version}
-| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip4}
-| | ... | ${dut1_to_tg_ip4} | interval=5
-| | And Set IPFIX stream | ${dut1_node} | ${1}
-| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
-| | ... | ${ip_version}
-| | Then Send packets and verify IPFIX | ${tg_node} | ${dut1_node}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
-| | ... | count=20000 | timeout=10
-
-| TC06: DUT reports packet flow when multiple sessions are configured
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
-| | ... | address as collector and add several classify sessions with different
-| | ... | ports.
-| | ... | [Ver] Make TG send packets to DUT1 using a range of ports matching
-| | ... | configured sessions, then listen for IPFIX template and data packets,
-| | ... | verify that IPFIX reported the received packets for each session.
-| | ... | [Ref] RFC 7011
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Set Interface Address | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
-| | And Set Interface Address | ${dut1_node}
-| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
-| | ... | ${tg_to_dut1_mac}
-| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
-| | ... | ${tg_to_dut1_mac}
-| | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
-| | ${table_index} | ${skip_n} | ${match_n}=
-| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
-| | ... | src proto l4 src_port dst_port
-| | :FOR | ${index} | IN RANGE | ${sessions}
-| | | VPP configures classify session generic | ${dut1_node}
-| | | ... | acl-hit-next permit | ${table_index} | ${skip_n} | ${match_n}
-| | | ... | l3 ${ip_version} src ${tg_to_dut1_ip}
-| | | ... | proto 6 l4 src_port ${index} dst_port ${index}
-| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
-| | ... | ${table_index} | ip_version=${ip_version}
-| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip4}
-| | ... | ${dut1_to_tg_ip4} | interval=5
-| | ... | mtu=1450 | interval=5
-| | And Set IPFIX stream | ${dut1_node} | ${1}
-| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
-| | ... | ${ip_version}
-| | Then Send session sweep and verify IPFIX | ${tg_node} | ${dut1_node}
-| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
-| | ... | ${sessions} | timeout=10 | count=3
-
# TODO: DUT reports packet flow when ACL is configured with wildcards
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/interfaces.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/ipv4.robot
+| Resource | resources/libraries/robot/telemetry/ipfix.robot
+| Library | resources.libraries.python.Classify.Classify
+| Library | resources.libraries.python.telemetry.IPFIXSetup
+| Library | resources.libraries.python.IPv6Setup
+| Library | resources.libraries.python.Trace
+
+| Force Tags | HW_ENV | VM_ENV | 3_NODE_SINGLE_LINK_TOPO | EXPECTED_FAILING
+# TODO: Remove EXPECTED_FAILING tag once functionality is implemented (VPP-204)
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *IPFIX ipv6 test cases*
+| ...
+| ... | IPFIX tests use 3-node topology TG - DUT1 - DUT2 - TG with
+| ... | one link between the nodes. DUT1 is configured with IPv4 and IPV6
+| ... | routing and static routes. IPFIX is configured on DUT1 with
+| ... | DUT1->TG interface as collector.Test packets are
+| ... | sent from TG to or through DUT1. TG listens for flow report packets
+| ... | and verifies that they contains flow records of test packets sent.
+
+*** Variables ***
+| ${dut1_to_tg_ip}= | 10::10
+| ${tg_to_dut1_ip}= | 12::10
+| ${prefix_length}= | 64
+| ${ip_version}= | ip6
+| ${sessions}= | 45
+
+# IPv4 addresses used for IPFIX exporter. Export over IPv6 not (yet?) supported.
+| ${dut1_to_tg_ip4}= | 192.168.1.1
+| ${tg_to_dut1_ip4}= | 192.168.1.2
+
+*** Test Cases ***
+| TC01: DUT reports packet flow with a large number of packets
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
+| | ... | address as collector and add classify session with TG source address.
+| | ... | [Ver] Make TG send packets to DUT1, then listen for IPFIX template
+| | ... | and data packets, verify that IPFIX reported the received packets.
+| | ... | [Ref] RFC 7011
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Set Interface Address | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And Set Interface Address | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
+| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | ... | ${tg_to_dut1_mac}
+| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | ... | ${tg_to_dut1_mac}
+| | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
+| | ${table_index} | ${skip_n} | ${match_n}=
+| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version} | src
+| | And VPP configures classify session L3 | ${dut1_node} | permit
+| | ... | ${table_index} | ${skip_n} | ${match_n} | ${ip_version} | src
+| | ... | ${tg_to_dut1_ip}
+| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
+| | ... | ${table_index} | ip_version=${ip_version}
+| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip4}
+| | ... | ${dut1_to_tg_ip4} | interval=5
+| | And Set IPFIX stream | ${dut1_node} | ${1}
+| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
+| | ... | ${ip_version}
+| | Then Send packets and verify IPFIX | ${tg_node} | ${dut1_node}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
+| | ... | count=20000 | timeout=10
+
+| TC02: DUT reports packet flow when multiple sessions are configured
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Cfg] On DUT1 configure IPFIX with TG interface
+| | ... | address as collector and add several classify sessions with different
+| | ... | ports.
+| | ... | [Ver] Make TG send packets to DUT1 using a range of ports matching
+| | ... | configured sessions, then listen for IPFIX template and data packets,
+| | ... | verify that IPFIX reported the received packets for each session.
+| | ... | [Ref] RFC 7011
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Set Interface Address | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip} | ${prefix_length}
+| | And Set Interface Address | ${dut1_node}
+| | ... | ${dut1_to_tg} | ${dut1_to_tg_ip4} | ${24}
+| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip4}
+| | ... | ${tg_to_dut1_mac}
+| | And Add ARP on DUT | ${dut1_node} | ${dut1_to_tg} | ${tg_to_dut1_ip}
+| | ... | ${tg_to_dut1_mac}
+| | And VPP RA suppress link layer | ${dut1_node} | ${dut1_to_tg}
+| | ${table_index} | ${skip_n} | ${match_n}=
+| | ... | And VPP creates classify table L3 | ${dut1_node} | ${ip_version}
+| | ... | src proto l4 src_port dst_port
+| | :FOR | ${index} | IN RANGE | ${sessions}
+| | | VPP configures classify session generic | ${dut1_node}
+| | | ... | acl-hit-next permit | ${table_index} | ${skip_n} | ${match_n}
+| | | ... | l3 ${ip_version} src ${tg_to_dut1_ip}
+| | | ... | proto 6 l4 src_port ${index} dst_port ${index}
+| | When Assign interface to flow table | ${dut1_node} | ${dut1_to_tg}
+| | ... | ${table_index} | ip_version=${ip_version}
+| | And setup IPFIX exporter | ${dut1_node} | ${tg_to_dut1_ip4}
+| | ... | ${dut1_to_tg_ip4} | interval=5
+| | ... | mtu=1450 | interval=5
+| | And Set IPFIX stream | ${dut1_node} | ${1}
+| | And Assign classify table to exporter | ${dut1_node} | ${table_index}
+| | ... | ${ip_version}
+| | Then Send session sweep and verify IPFIX | ${tg_node} | ${dut1_node}
+| | ... | ${tg_to_dut1} | ${dut1_to_tg} | ${tg_to_dut1_ip} | ${dut1_to_tg_ip}
+| | ... | ${sessions} | timeout=10 | count=3
+
+# TODO: DUT reports packet flow when ACL is configured with wildcards
*** Variables ***
| ${tg_to_dut_if1_ip4}= | 192.168.1.1
| ${dut_to_tg_if1_ip4}= | 192.168.1.2
-| ${tg_to_dut_if1_ip6}= | 11::1
-| ${dut_to_tg_if1_ip6}= | 10::1
| ${prefix}= | 24
*** Test Cases ***
| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
| | ... | ${dut_to_tg__if1_mac} | ${tg_to_dut_if2}
| | ... | ${tg_to_dut_if1_ip4} | ${dut_to_tg_if1_ip4} | ICMP
-
-| TC03: DUT mirrors IPv6 packets from one interface to another
-| | [Documentation]
-| | ... | [Top] TG=DUT1
-| | ... | [Cfg] On DUT1 configure IPv6 address, add ARP entry for one TG \
-| | ... | interface and set SPAN mirroring from one DUT interface to the other.
-| | ... | [Ver] Make TG send an ICMP packet to DUT through one interface,\
-| | ... | then receive a copy of sent packet and of DUT's ICMP reply\
-| | ... | on the other interface.
-| | Given Path For 2-node Testing Is Set | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
-| | And Interfaces In 2-node Path Are Up
-| | And Set interface Address | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${dut_to_tg_if1_ip6} | ${prefix}
-| | And Add ARP on DUT | ${dut_node} | ${dut_to_tg_if1} | ${tg_to_dut_if1_ip6}
-| | ... | ${tg_to_dut_if1_mac}
-| | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
-| | Then Send Packet And Check Received Copies | ${tg_node}
-| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
-| | ... | ${dut_to_tg__if1_mac} | ${tg_to_dut_if2}
-| | ... | ${tg_to_dut_if1_ip6} | ${dut_to_tg_if1_ip6} | ICMP
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/telemetry/span.robot
+| Library | resources.libraries.python.Trace
+| Library | resources.libraries.python.IPv4Util
+| Library | resources.libraries.python.IPv4Setup
+| Library | resources.libraries.python.telemetry.SPAN
+| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | EXPECTED_FAILING
+# TODO: Remove EXPECTED_FAILING tag once functionality is implemented (VPP-185)
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *SPAN test suite*
+| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two
+| ... | links between nodes.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with SPAN mirroring from
+| ... | the first DUT1-TG interface to the second one.
+| ... | *[Ver] TG verification:* Test ARP or ICMP packets are sent by TG
+| ... | on first link to DUT1; On receipt through second link TG verifies
+| ... | the copy of packet sent and the copy of DUT's reply packet.
+| ... | *[Ref] Applicable standard specifications: None?*
+
+*** Variables ***
+| ${tg_to_dut_if1_ip6}= | 11::1
+| ${dut_to_tg_if1_ip6}= | 10::1
+| ${prefix}= | 24
+
+*** Test Cases ***
+| TC01: DUT mirrors IPv6 packets from one interface to another
+| | [Documentation]
+| | ... | [Top] TG=DUT1
+| | ... | [Cfg] On DUT1 configure IPv6 address, add ARP entry for one TG \
+| | ... | interface and set SPAN mirroring from one DUT interface to the other.
+| | ... | [Ver] Make TG send an ICMP packet to DUT through one interface,\
+| | ... | then receive a copy of sent packet and of DUT's ICMP reply\
+| | ... | on the other interface.
+| | Given Path For 2-node Testing Is Set | ${nodes['TG']} | ${nodes['DUT1']}
+| | ... | ${nodes['TG']}
+| | And Interfaces In 2-node Path Are Up
+| | And Set interface Address | ${dut_node} | ${dut_to_tg_if1}
+| | ... | ${dut_to_tg_if1_ip6} | ${prefix}
+| | And Add ARP on DUT | ${dut_node} | ${dut_to_tg_if1} | ${tg_to_dut_if1_ip6}
+| | ... | ${tg_to_dut_if1_mac}
+| | And Set SPAN Mirroring | ${dut_node} | ${dut_to_tg_if1} | ${dut_to_tg_if2}
+| | Then Send Packet And Check Received Copies | ${tg_node}
+| | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
+| | ... | ${dut_to_tg__if1_mac} | ${tg_to_dut_if2}
+| | ... | ${tg_to_dut_if1_ip6} | ${dut_to_tg_if1_ip6} | ICMP
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/tagging.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2BD with VLAN tag rewrite test cases - transalte-2-1*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-dot1ad-IPv4-ICMPv4 or
+| ... | Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, Eth-dot1q-IPv4-ICMPv4 or
+| ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv4-ICMPv4 or Eth-IPv6-ICMPv6
+| ... | on TG-DUT2 for L2 switching of IPv4/IPv6.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with bridge domain (L2BD)
+| ... | switching combined with MAC learning enabled and added VLAN
+| ... | sub-interface with VLAN tag rewrite translate-2-1 method of interface
+| ... | towards TG and interface towards DUT2. DUT2 is configured with L2
+| ... | bridge domain (L2BD) switching between VLAN sub-interface with VLAN tag
+| ... | rewrite pop-1 method of interface towards DUT1 and interface towards TG.
+| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
+| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
+| ... | on receive TG verifies packets for correctness and their IPv4 src-addr,
+| ... | dst-addr and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* IEEE 802.1q, IEEE 802.1ad.
+
+*** Variables ***
+| ${bd_id1}= | 1
+
+| ${subid}= | 10
+
+| ${outer_vlan_id1}= | 110
+| ${outer_vlan_id2}= | 120
+| ${outer_vlan_wrong}= | 150
+
+| ${inner_vlan_id1}= | 210
+
+| ${src_ip6}= | 3ffe:63::1
+| ${dst_ip6}= | 3ffe:63::2
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD and VLAN translate-2-1 (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method; on DUT2 configure L2 bridge domain (L2BD) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
+
+| TC02: DUT1 and DUT2 with L2BD and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method to set tag different from tag set on VLAN
+| | ... | sub-interface of DUT2; on DUT2 configure L2 bridge domain (L2BD) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
+
+
+| TC03: DUT1 and DUT2 with L2BD and VLAN translate-2-1 (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method; on DUT2 configure L2 bridge domain (L2BD) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip6}
+| | ... | dst_ip=${dst_ip6} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
+
+| TC04: DUT1 and DUT2 with L2BD and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method to set tag different from tag set on VLAN
+| | ... | sub-interface of DUT2; on DUT2 configure L2 bridge domain (L2BD) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/tagging.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2XC with VLAN tag rewrite test cases - translate-2-1*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-dot1ad-IPv4-ICMPv4 or
+| ... | Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, Eth-dot1q-IPv4-ICMPv4 or
+| ... | Eth-dot1aq-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2
+| ... | for L2 switching of IPv4/IPv6.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect
+| ... | (L2XC) switching between VLAN sub-interface with VLAN tag rewrite
+| ... | translate-2-1 method of interface towards TG and interface towards DUT2.
+| ... | DUT2 is configured configured with L2 cross-connect (L2XC) switching
+| ... | between VLAN sub-interface with VLAN tag rewrite pop-1 method
+| ... | of interface towards DUT1 and interface towards TG.
+| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
+| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
+| ... | on receive TG verifies packets for correctness and their IPv4 src-addr,
+| ... | dst-addr and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* IEEE 802.1q, IEEE 802.1ad.
+
+*** Variables ***
+| ${subid}= | 10
+
+| ${outer_vlan_id1}= | 110
+| ${outer_vlan_id2}= | 120
+| ${outer_vlan_wrong}= | 150
+
+| ${inner_vlan_id1}= | 210
+
+| ${src_ip}= | 3ffe:63::1
+| ${dst_ip}= | 3ffe:63::2
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2XC and VLAN translate-2-1 (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method; on DUT2 configure L2 cross-connect (L2XC) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
+
+| TC02: DUT1 and DUT2 with L2XC and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method to set tag different from tag set on VLAN
+| | ... | sub-interface of DUT2; on DUT2 configure L2 cross-connect (L2XC) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
+
+| TC03: DUT1 and DUT2 with L2XC and VLAN translate-2-1 (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method; on DUT2 configure L2 cross-connect (L2XC) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagegd with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
+| | ... | dst_ip=${dst_ip} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
+
+| TC04: DUT1 and DUT2 with L2XC and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
+| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-2-1 method to set tag different from tag set on VLAN
+| | ... | sub-interface of DUT2; on DUT2 configure L2 cross-connect (L2XC) with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagegd with Dot1ad tags from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *L2 bridge domain with VLAN tag rewrite test cases - IPv4*
+| Documentation | *L2BD with VLAN tag rewrite test cases - translate-2-2*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
-| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv4-ICMPv4 or
-| ... | Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and DUT1-DUT2, Eth-IPv4-ICMPv4
-| ... | on TG-DUT2 for L2 switching of IPv4.
+| ... | *[Enc] Packet encapsulations:* Eth-dot1ad-IPv4-ICMPv4 or
+| ... | Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and DUT1-DUT2, Eth-IPv4-ICMPv4 or
+| ... | Eth-IPv6-ICMPv6 on TG-DUT2 for L2 switching of IPv4/IPv6.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with bridge domain (L2BD)
| ... | switching combined with MAC learning enabled and added VLAN
-| ... | sub-interface with VLAN tag rewrite translate-1-1 method
-| ... | of interface towards TG and interface towards DUT2. DUT2 is configured
-| ... | with L2 bridge domain (L2BD) switching between VLAN sub-interface
-| ... | with VLAN tag rewrite pop-1 method of interface towards DUT1 and
-| ... | interface towards TG.
+| ... | sub-interface with VLAN tag rewrite translate-2-2 method of interface
+| ... | towards TG and interface towards DUT2. DUT2 is configured with L2
+| ... | bridge domain (L2BD) switching between VLAN sub-interface with VLAN tag
+| ... | rewrite pop-2 method of interface towards DUT1 and interface towards TG.
| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
| ... | on receive TG verifies packets for correctness and their IPv4 src-addr,
| ${inner_vlan_id2}= | 220
| ${inner_vlan_wrong}= | 250
-*** Test Cases ***
-| TC01: DUT1 and DUT2 with L2BD and VLAN translate-1-1 (DUT1) switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain with one interface to DUT2 and one VLAN
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
-| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
-| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req tagged with one Dot1q tag
-| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
-| | ... | that packet is received. [Ref] IEEE 802.1q
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
-
-| TC02: DUT1 and DUT2 with L2BD and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method
-| | ... | to set tag different from tag set on VLAN sub-interface of DUT2;
-| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
-| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req tagged with one Dot1q tag
-| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
-| | ... | that packet is not received. [Ref] IEEE 802.1q
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+| ${src_ip6}= | 3ffe:63::1
+| ${dst_ip6}= | 3ffe:63::2
-| TC03: DUT1 and DUT2 with L2BD and VLAN translate-1-2 (DUT1) switch ICMPv4 between two TG links
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD and VLAN translate-2-2 switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method; on DUT2 configure L2 bridge domain (L2BD) with
-| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv4 Echo Req
-| | ... | tagged with one Dot1q tag from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method;
+| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG and
+| | ... | one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-2
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
+| | ... | that packet is received. [Ref] IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ... | ${bd_id1}
| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-| TC04: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
+| TC02: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method to set inner tag different from inner tag set on
-| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
-| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv4 Echo Req
-| | ... | tagged with one Dot1q tag from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
+| | ... | set inner tag different from inner tag set on Dot1ad sub-interface of
+| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
+| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
+| | ... | pop-2 tagged with Dot1ad tags from one of its interfaces to another
+| | ... | one method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2;
+| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
-| TC05: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
+| TC03: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method to set outer tag different from outer tag set on
-| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
-| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv4 Echo Req
-| | ... | tagged with one Dot1q tag from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
+| | ... | set outer tag different from outer tag set on Dot1ad sub-interface of
+| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
+| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
+| | ... | pop-2 tagged with Dot1ad tags from one of its interfaces to another
+| | ... | one method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2;
+| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
-| TC06: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv4 between two TG links
+| TC04: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method to set outer and inner tags different from tags
-| | ... | set on Dot1ad sub-interface of DUT2; on DUT2 configure L2
-| | ... | bridge domain with one interface to TG and one Dot1ad sub-interface
-| | ... | towards DUT1 with VLAN tag rewrite pop-2 method. [Ver] Make TG send
-| | ... | ICMPv4 Echo Req tagged with one Dot1q tag from one of its interfaces
-| | ... | to another one via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
+| | ... | set tags different from tags set on Dot1ad sub-interface of DUT2;
+| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
+| | ... | and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-2
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
+| | ... | that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-
-| TC07: DUT1 and DUT2 with L2BD and VLAN translate-2-1 (DUT1) switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method; on DUT2 configure L2 bridge domain (L2BD) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-
-| TC08: DUT1 and DUT2 with L2BD and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method to set tag different from tag set on VLAN
-| | ... | sub-interface of DUT2; on DUT2 configure L2 bridge domain (L2BD) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
| | ... | vlan2=${inner_vlan_id1}
-| TC09: DUT1 and DUT2 with L2BD and VLAN translate-2-2 switch ICMPv4 between two TG links
+| TC05: DUT1 and DUT2 with L2BD and VLAN translate-2-2 switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method;
| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG and
| | ... | one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
+| | ... | method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2; verify
| | ... | that packet is received. [Ref] IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ... | ${bd_id1}
| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip6}
+| | ... | dst_ip=${dst_ip6} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
-| TC10: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
+| TC06: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
| | ... | set inner tag different from inner tag set on Dot1ad sub-interface of
| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
-| | ... | one method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2;
+| | ... | one method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2;
| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-| TC11: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
+| TC07: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
| | ... | set outer tag different from outer tag set on Dot1ad sub-interface of
| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
-| | ... | one method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2;
+| | ... | one method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2;
| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-| TC12: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv4 between two TG links
+| TC08: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
| | ... | set tags different from tags set on Dot1ad sub-interface of DUT2;
| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
| | ... | and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
+| | ... | method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2; verify
| | ... | that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *L2 cross-connect with VLAN tag rewrite test cases - IPv6*
+| Documentation | *L2XC with VLAN tag rewrite test cases - translate-2-2*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
-| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv6-ICMPv6 or
-| ... | Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and DUT1-DUT2, Eth-IPv6-ICMPv6
-| ... | on TG-DUT2 for L2 switching of IPv6.
+| ... | *[Enc] Packet encapsulations:* Eth-dot1ad-IPv4-ICMPv4 or
+| ... | Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and DUT1-DUT2, Eth-IPv4-ICMPv4 or
+| ... | Eth-IPv6-ICMPv6 on TG-DUT2 for L2 switching of IPv4/IPv6.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect
| ... | (L2XC) switching between VLAN sub-interface with VLAN tag rewrite
-| ... | translate-1-1 method of interface towards TG and interface towards DUT2.
+| ... | translate-2-2 method of interface towards TG and interface towards DUT2.
| ... | DUT2 is configured configured with L2 cross-connect (L2XC) switching
-| ... | between VLAN sub-interface with VLAN tag rewrite pop-1 method
+| ... | between VLAN sub-interface with VLAN tag rewrite pop-2 method
| ... | of interface towards DUT1 and interface towards TG.
-| ... | *[Ver] TG verification:* Test ICMPv6 Echo Request packets are
+| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
-| ... | on receive TG verifies packets for correctness and their IPv6 src-addr,
+| ... | on receive TG verifies packets for correctness and their IPv4 src-addr,
| ... | dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* IEEE 802.1q, IEEE 802.1ad.
| ${dst_ip}= | 3ffe:63::2
*** Test Cases ***
-| TC01: DUT1 and DUT2 with L2XC and VLAN translate-1-1 (DUT1) switch ICMPv6 between two TG links
+| TC01: DUT1 and DUT2 with L2XC and VLAN translate-2-2 switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one interface to DUT2 and one VLAN
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
-| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
-| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagegd with one Dot1q tag
-| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
-| | ... | that packet is received. [Ref] IEEE 802.1q
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
-| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-
-| TC02: DUT1 and DUT2 with L2XC and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one interface to DUT2 and one VLAN
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method
-| | ... | to set tag different from tag set on VLAN sub-interface of DUT2;
-| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
-| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagegd with one Dot1q tag
-| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
-| | ... | that packet is not received. [Ref] IEEE 802.1q
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
-
-| TC03: DUT1 and DUT2 with L2XC and VLAN translate-1-2 (DUT1) switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method; on DUT2 configure L2 cross-connect (L2XC) with
-| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
-| | ... | tagegd with one Dot1q tag from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method;
+| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG and
+| | ... | one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
+| | ... | that packet is received. [Ref] IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
-| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
+| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-| TC04: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
+| TC02: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method to set inner tag different from inner tag set on
-| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 cross-connect with
-| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
-| | ... | tagegd with one Dot1q tag from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
+| | ... | set inner tag different from inner tag set on Dot1ad sub-interface of
+| | ... | DUT2; on DUT2 configure L2 cross-connect (L2XC) with one interface to
+| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
+| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
+| | ... | that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
-| TC05: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
+| TC03: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method to set outer tag different from outer tag set on
-| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 cross-connect with
-| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
-| | ... | tagegd with one Dot1q tag from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
+| | ... | set outer tag different from outer tag set on Dot1ad sub-interface of
+| | ... | DUT2; on DUT2 configure L2 cross-connect (L2XC) with one interface to
+| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
+| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
+| | ... | one method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2;
+| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | vlan2=${inner_vlan_id1}
-| TC06: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv6 between two TG links
+| TC04: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-1-2 method to set outer and inner tags different from tags
-| | ... | set on Dot1ad sub-interface of DUT2; on DUT2 configure L2
-| | ... | cross-connect with one interface to TG and one Dot1ad sub-interface
-| | ... | towards DUT1 with VLAN tag rewrite pop-2 method. [Ver] Make TG send
-| | ... | ICMPv6 Echo Req tagegd with one Dot1q tag from one of its interfaces
-| | ... | to another one via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
+| | ... | set tags different from tags set on Dot1ad sub-interface of DUT2;
+| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
+| | ... | and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
+| | ... | that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
+| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
+| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
-
-| TC07: DUT1 and DUT2 with L2XC and VLAN translate-2-1 (DUT1) switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method; on DUT2 configure L2 cross-connect (L2XC) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
-| | ... | tagegd with Dot1ad tags from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
-| | ... | dst_ip=${dst_ip} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
| | ... | vlan2=${inner_vlan_id1}
-| TC08: DUT1 and DUT2 with L2XC and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method to set tag different from tag set on VLAN
-| | ... | sub-interface of DUT2; on DUT2 configure L2 cross-connect (L2XC) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
-| | ... | tagegd with Dot1ad tags from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-
-| TC09: DUT1 and DUT2 with L2XC and VLAN translate-2-2 switch ICMPv6 between two TG links
+| TC05: DUT1 and DUT2 with L2XC and VLAN translate-2-2 switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | dst_ip=${dst_ip} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
| | ... | vlan2=${inner_vlan_id1}
-| TC10: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
+| TC06: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-| TC11: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
+| TC07: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-| TC12: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv6 between two TG links
+| TC08: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *L2 bridge domain with VLAN tag rewrite test cases - IPv6*
+| Documentation | *L2BD with VLAN tag rewrite test cases - translate-1-2*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
-| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv6-ICMPv6 or
-| ... | Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and DUT1-DUT2, Eth-IPv6-ICMPv6
-| ... | on TG-DUT2 for L2 switching of IPv6.
+| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv4-ICMPv4 or
+| ... | Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, Eth-dot1ad-IPv4-ICMPv4 or
+| ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv4-ICMPv4 or Eth-IPv6-ICMPv6
+| ... | on TG-DUT2 for L2 switching of IPv4/IPv6.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with bridge domain (L2BD)
| ... | switching combined with MAC learning enabled and added VLAN
-| ... | sub-interface with VLAN tag rewrite translate-1-1 method
-| ... | of interface towards TG and interface towards DUT2. DUT2 is configured
-| ... | with L2 bridge domain (L2BD) switching between VLAN sub-interface
-| ... | with VLAN tag rewrite pop-1 method of interface towards DUT1 and
-| ... | interface towards TG.
-| ... | *[Ver] TG verification:* Test ICMPv6 Echo Request packets are
+| ... | sub-interface with VLAN tag rewrite translate-1-2 method of interface
+| ... | towards TG and interface towards DUT2. DUT2 is configured with L2
+| ... | bridge domain (L2BD) switching between VLAN sub-interface with VLAN tag
+| ... | rewrite pop-2 method of interface towards DUT1 and interface towards TG.
+| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
-| ... | on receive TG verifies packets for correctness and their IPv6 src-addr,
+| ... | on receive TG verifies packets for correctness and their IPv4 src-addr,
| ... | dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* IEEE 802.1q, IEEE 802.1ad.
| ${inner_vlan_id2}= | 220
| ${inner_vlan_wrong}= | 250
-| ${src_ip}= | 3ffe:63::1
-| ${dst_ip}= | 3ffe:63::2
+| ${src_ip6}= | 3ffe:63::1
+| ${dst_ip6}= | 3ffe:63::2
*** Test Cases ***
-| TC01: DUT1 and DUT2 with L2BD and VLAN translate-1-1 (DUT1) switch ICMPv6 between two TG links
+| TC01: DUT1 and DUT2 with L2BD and VLAN translate-1-2 (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
-| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
-| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagged with one Dot1q tag
-| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
-| | ... | that packet is received. [Ref] IEEE 802.1q
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
-| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-
-| TC02: DUT1 and DUT2 with L2BD and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method
-| | ... | to set tag different from tag set on VLAN sub-interface of DUT2;
-| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
-| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagged with one Dot1q tag
-| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
-| | ... | that packet is not received. [Ref] IEEE 802.1q
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
-
-| TC03: DUT1 and DUT2 with L2BD and VLAN translate-1-2 (DUT1) switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method; on DUT2 configure L2 bridge domain (L2BD) with
| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv4 Echo Req
| | ... | tagged with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
-| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
+| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id1}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ... | ${bd_id1}
| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
-| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
-| TC04: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
+| TC02: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method to set inner tag different from inner tag set on
| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv4 Echo Req
| | ... | tagged with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is not received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC05: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
+| TC03: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method to set outer tag different from outer tag set on
| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv4 Echo Req
| | ... | tagged with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is not received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
-| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
+| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id1}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC06: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv6 between two TG links
+| TC04: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method to set outer and inner tags different from tags
| | ... | set on Dot1ad sub-interface of DUT2; on DUT2 configure L2
| | ... | bridge domain with one interface to TG and one Dot1ad sub-interface
| | ... | towards DUT1 with VLAN tag rewrite pop-2 method. [Ver] Make TG send
-| | ... | ICMPv6 Echo Req tagged with one Dot1q tag from one of its interfaces
+| | ... | ICMPv4 Echo Req tagged with one Dot1q tag from one of its interfaces
| | ... | to another one via DUT1 and DUT2; verify that packet is not received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
+| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC07: DUT1 and DUT2 with L2BD and VLAN translate-2-1 (DUT1) switch ICMPv6 between two TG links
+| TC05: DUT1 and DUT2 with L2BD and VLAN translate-1-2 (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method; on DUT2 configure L2 bridge domain (L2BD) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method; on DUT2 configure L2 bridge domain (L2BD) with
+| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagged with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
-| | ... | dst_ip=${dst_ip} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
-
-| TC08: DUT1 and DUT2 with L2BD and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method to set tag different from tag set on VLAN
-| | ... | sub-interface of DUT2; on DUT2 configure L2 bridge domain (L2BD) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
-| | ... | ${bd_id1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
-| | ... | ${bd_id1}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-
-| TC09: DUT1 and DUT2 with L2BD and VLAN translate-2-2 switch ICMPv6 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method;
-| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG and
-| | ... | one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2; verify
-| | ... | that packet is received. [Ref] IEEE 802.1ad
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ... | ${bd_id1}
| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
-| | ... | dst_ip=${dst_ip} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip6}
+| | ... | dst_ip=${dst_ip6} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC10: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
+| TC06: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
-| | ... | set inner tag different from inner tag set on Dot1ad sub-interface of
-| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
-| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
-| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
-| | ... | one method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2;
-| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method to set inner tag different from inner tag set on
+| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
+| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagged with one Dot1q tag from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
-| TC11: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
+| TC07: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
-| | ... | set outer tag different from outer tag set on Dot1ad sub-interface of
-| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
-| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
-| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
-| | ... | one method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2;
-| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method to set outer tag different from outer tag set on
+| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
+| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagged with one Dot1q tag from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
-| TC12: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv6 between two TG links
+| TC08: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
-| | ... | set tags different from tags set on Dot1ad sub-interface of DUT2;
-| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
-| | ... | and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2; verify
-| | ... | that packet is not received. [Ref] IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method to set outer and inner tags different from tags
+| | ... | set on Dot1ad sub-interface of DUT2; on DUT2 configure L2
+| | ... | bridge domain with one interface to TG and one Dot1ad sub-interface
+| | ... | towards DUT1 with VLAN tag rewrite pop-2 method. [Ver] Make TG send
+| | ... | ICMPv6 Echo Req tagged with one Dot1q tag from one of its interfaces
+| | ... | to another one via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
| Test Setup | Func Test Setup
| Test Teardown | Func Test Teardown
-| Documentation | *L2 cross-connect with VLAN tag rewrite test cases - IPv4*
+| Documentation | *L2XC with VLAN tag rewrite test cases - translate-1-2*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv4-ICMPv4 or
-| ... | Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and DUT1-DUT2, Eth-IPv4-ICMPv4
-| ... | on TG-DUT2 for L2 switching of IPv4.
+| ... | Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, Eth-dot1ad-IPv4-ICMPv4 or
+| ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv4-ICMPv4 or Eth-IPv6-ICMPv6
+| ... | on TG-DUT2 for L2 switching of IPv4/IPv6.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect
| ... | (L2XC) switching between VLAN sub-interface with VLAN tag rewrite
-| ... | translate-1-1 method of interface towards TG and interface towards DUT2.
+| ... | translate-1-2 method of interface towards TG and interface towards DUT2.
| ... | DUT2 is configured configured with L2 cross-connect (L2XC) switching
-| ... | between VLAN sub-interface with VLAN tag rewrite pop-1 method
+| ... | between VLAN sub-interface with VLAN tag rewrite pop-2 method
| ... | of interface towards DUT1 and interface towards TG.
| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
*** Variables ***
| ${subid}= | 10
+
| ${outer_vlan_id1}= | 110
| ${outer_vlan_id2}= | 120
| ${outer_vlan_wrong}= | 150
+
| ${inner_vlan_id1}= | 210
| ${inner_vlan_id2}= | 220
| ${inner_vlan_wrong}= | 250
-*** Test Cases ***
-| TC01: DUT1 and DUT2 with L2XC and VLAN translate-1-1 (DUT1) switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one interface to DUT2 and one VLAN
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
-| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
-| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req tagged with one Dot1q tag
-| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
-| | ... | that packet is received. [Ref] IEEE 802.1q
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1q
-| | ... | vlan1=${outer_vlan_id1}
+| ${src_ip}= | 3ffe:63::1
+| ${dst_ip}= | 3ffe:63::2
-| TC02: DUT1 and DUT2 with L2XC and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one VLAN tagged sub-interface to DUT2 and
-| | ... | one VLAN sub-interface towards TG with VLAN tag rewrite
-| | ... | (translate-1-1) on sub-interface to DUT2; on DUT2 configure L2XC with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with VLAN
-| | ... | tag pop-1. [Ver] Make TG send ICMPv4 Echo Req tagged with one dot1q
-| | ... | tag from one of its interfaces to another one via DUT1 and DUT2;
-| | ... | verify that packet is not received. [Ref] IEEE 802.1q
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-
-| TC03: DUT1 and DUT2 with L2XC and VLAN translate-1-2 (DUT1) switch ICMPv4 between two TG links
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2XC and VLAN translate-1-2 (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
-| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
+| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id1}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1q
| | ... | vlan1=${outer_vlan_id1}
-| TC04: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
+| TC02: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC05: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
+| TC03: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
-| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
+| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id1}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC06: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv4 between two TG links
+| TC04: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv4 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
+| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC07: DUT1 and DUT2 with L2XC and VLAN translate-2-1 (DUT1) switch ICMPv4 between two TG links
+| TC05: DUT1 and DUT2 with L2XC and VLAN translate-1-2 (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method; on DUT2 configure L2 cross-connect (L2XC) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method; on DUT2 configure L2 cross-connect (L2XC) with
+| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagegd with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
-
-| TC08: DUT1 and DUT2 with L2XC and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1, \
-| | ... | Eth-dot1q-IPv4-ICMPv4 on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2.
-| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
-| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
-| | ... | translate-2-1 method to set tag different from tag set on VLAN
-| | ... | sub-interface of DUT2; on DUT2 configure L2 cross-connect (L2XC) with
-| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
-| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv4 Echo Req
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | via DUT1 and DUT2; verify that packet is not received.
-| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
-| | [Tags] | SKIP_PATCH
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
-| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
-| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
-| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
-| | ... | ${vlan2_index} | pop-1
-| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
-| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
-| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
-| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
-
-| TC09: DUT1 and DUT2 with L2XC and VLAN translate-2-2 switch ICMPv4 between two TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method;
-| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG and
-| | ... | one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
-| | ... | that packet is received. [Ref] IEEE 802.1ad
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Send and receive ICMP Packet
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1ad
-| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
+| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}
-| TC10: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv4 between two TG links
+| TC06: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
-| | ... | set inner tag different from inner tag set on Dot1ad sub-interface of
-| | ... | DUT2; on DUT2 configure L2 cross-connect (L2XC) with one interface to
-| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
-| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
-| | ... | that packet is not received. [Ref] IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method to set inner tag different from inner tag set on
+| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 cross-connect with
+| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagegd with one Dot1q tag from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
-| TC11: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv4 between two TG links
+| TC07: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
-| | ... | set outer tag different from outer tag set on Dot1ad sub-interface of
-| | ... | DUT2; on DUT2 configure L2 cross-connect (L2XC) with one interface to
-| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
-| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
-| | ... | one method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2;
-| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method to set outer tag different from outer tag set on
+| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 cross-connect with
+| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
+| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
+| | ... | tagegd with one Dot1q tag from one of its interfaces to another one
+| | ... | via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
-| TC12: DUT1 and DUT2 with L2XC and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv4 between two TG links
+| TC08: DUT1 and DUT2 with L2XC and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv4-ICMPv4 on TG-DUT1 and \
-| | ... | on DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
-| | ... | cross-connect (L2XC) with one interface to DUT2 and one Dot1ad
-| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
-| | ... | set tags different from tags set on Dot1ad sub-interface of DUT2;
-| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
-| | ... | and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
-| | ... | tagged with Dot1ad tags from one of its interfaces to another one
-| | ... | method. [Ver] Make TG send ICMPv4 Echo Req via DUT1 and DUT2; verify
-| | ... | that packet is not received. [Ref] IEEE 802.1ad
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
+| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
+| | ... | [Cfg] On DUT1 configure L2 cross-connect (L2XC) with one interface to
+| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | translate-1-2 method to set outer and inner tags different from tags
+| | ... | set on Dot1ad sub-interface of DUT2; on DUT2 configure L2
+| | ... | cross-connect with one interface to TG and one Dot1ad sub-interface
+| | ... | towards DUT1 with VLAN tag rewrite pop-2 method. [Ver] Make TG send
+| | ... | ICMPv6 Echo Req tagegd with one Dot1q tag from one of its interfaces
+| | ... | to another one via DUT1 and DUT2; verify that packet is not received.
+| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
-| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
-| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
-| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
-| | ... | type_subif=two_tags dot1ad
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
-| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
+| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
-| | ... | ${tg_to_dut2} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
-| | ... | vlan2=${inner_vlan_id1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/tagging.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2BD with VLAN tag rewrite test cases - translate-1-1*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv4-ICMPv4 or
+| ... | Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and DUT1-DUT2, Eth-IPv4-ICMPv4 or
+| ... | Eth-IPv6-ICMPv6 on TG-DUT2 for L2 switching of IPv4/IPv6.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with bridge domain (L2BD)
+| ... | switching combined with MAC learning enabled and added VLAN
+| ... | sub-interface with VLAN tag rewrite translate-1-1 method of interface
+| ... | towards TG and interface towards DUT2. DUT2 is configured with L2
+| ... | bridge domain (L2BD) switching between VLAN sub-interface with VLAN tag
+| ... | rewrite pop-1 method of interface towards DUT1 and interface towards TG.
+| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
+| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
+| ... | on receive TG verifies packets for correctness and their IPv4 src-addr,
+| ... | dst-addr and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* IEEE 802.1q, IEEE 802.1ad.
+
+*** Variables ***
+| ${bd_id1}= | 1
+
+| ${subid}= | 10
+
+| ${outer_vlan_id1}= | 110
+| ${outer_vlan_id2}= | 120
+| ${outer_vlan_wrong}= | 150
+
+| ${inner_vlan_id1}= | 210
+| ${inner_vlan_wrong}= | 250
+
+| ${src_ip6}= | 3ffe:63::1
+| ${dst_ip6}= | 3ffe:63::2
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD and VLAN translate-1-1 (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain with one interface to DUT2 and one VLAN
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
+| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
+| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req tagged with one Dot1q tag
+| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
+| | ... | that packet is received. [Ref] IEEE 802.1q
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
+
+| TC02: DUT1 and DUT2 with L2BD and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method
+| | ... | to set tag different from tag set on VLAN sub-interface of DUT2;
+| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
+| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req tagged with one Dot1q tag
+| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
+| | ... | that packet is not received. [Ref] IEEE 802.1q
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+
+| TC03: DUT1 and DUT2 with L2BD and VLAN translate-1-1 (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
+| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
+| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagged with one Dot1q tag
+| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
+| | ... | that packet is received. [Ref] IEEE 802.1q
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip6}
+| | ... | dst_ip=${dst_ip6} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+
+| TC04: DUT1 and DUT2 with L2BD and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method
+| | ... | to set tag different from tag set on VLAN sub-interface of DUT2;
+| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
+| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagged with one Dot1q tag
+| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
+| | ... | that packet is not received. [Ref] IEEE 802.1q
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
+| | ... | ${bd_id1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
+| | ... | ${bd_id1}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip6} | dst_ip=${dst_ip6} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/tagging.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2XC with VLAN tag rewrite test cases - translate-1-1*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv4-ICMPv4 or
+| ... | Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and DUT1-DUT2, Eth-IPv4-ICMPv4 or
+| ... | Eth-IPv4-ICMPv4 on TG-DUT2 for L2 switching of IPv4/IPv6.
+| ... | *[Cfg] DUT configuration:* DUT1 is configured with L2 cross-connect
+| ... | (L2XC) switching between VLAN sub-interface with VLAN tag rewrite
+| ... | translate-1-1 method of interface towards TG and interface towards DUT2.
+| ... | DUT2 is configured configured with L2 cross-connect (L2XC) switching
+| ... | between VLAN sub-interface with VLAN tag rewrite pop-1 method
+| ... | of interface towards DUT1 and interface towards TG.
+| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets are
+| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
+| ... | on receive TG verifies packets for correctness and their IPv4 src-addr,
+| ... | dst-addr and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* IEEE 802.1q, IEEE 802.1ad.
+
+*** Variables ***
+| ${subid}= | 10
+
+| ${outer_vlan_id1}= | 110
+| ${outer_vlan_id2}= | 120
+| ${outer_vlan_wrong}= | 150
+
+| ${src_ip}= | 3ffe:63::1
+| ${dst_ip}= | 3ffe:63::2
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2XC and VLAN translate-1-1 (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one interface to DUT2 and one VLAN
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
+| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
+| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | method. [Ver] Make TG send ICMPv4 Echo Req tagged with one Dot1q tag
+| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
+| | ... | that packet is received. [Ref] IEEE 802.1q
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
+
+| TC02: DUT1 and DUT2 with L2XC and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv4 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv4-ICMPv4 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one VLAN tagged sub-interface to DUT2 and
+| | ... | one VLAN sub-interface towards TG with VLAN tag rewrite
+| | ... | (translate-1-1) on sub-interface to DUT2; on DUT2 configure L2XC with
+| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with VLAN
+| | ... | tag pop-1. [Ver] Make TG send ICMPv4 Echo Req tagged with one dot1q
+| | ... | tag from one of its interfaces to another one via DUT1 and DUT2;
+| | ... | verify that packet is not received. [Ref] IEEE 802.1q
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+
+| TC03: DUT1 and DUT2 with L2XC and VLAN translate-1-1 (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one interface to DUT2 and one VLAN
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
+| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
+| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagegd with one Dot1q tag
+| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
+| | ... | that packet is received. [Ref] IEEE 802.1q
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Send and receive ICMP Packet
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
+| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}
+
+| TC04: DUT1 and DUT2 with L2XC and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
+| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
+| | ... | cross-connect (L2XC) with one interface to DUT2 and one VLAN
+| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method
+| | ... | to set tag different from tag set on VLAN sub-interface of DUT2;
+| | ... | on DUT2 configure L2 cross-connect (L2XC) with one interface to TG
+| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
+| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagegd with one Dot1q tag
+| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
+| | ... | that packet is not received. [Ref] IEEE 802.1q
+| | [Tags] | SKIP_PATCH
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
+| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
+| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
+| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
+| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
+| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
+| | ... | ${vlan2_index} | pop-1
+| | And Interfaces and VLAN sub-interfaces inter-connected using L2-xconnect
+| | ... | ${dut1_node} | ${dut1_to_dut2} | ${vlan1_index}
+| | ... | ${dut2_node} | ${dut2_to_tg} | ${vlan2_index}
+| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
+| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
+| | ... | vlan1=${outer_vlan_id1}
| ... | links in between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-ICMPv4 for L2 switching of
| ... | IPv4.
-| ... | *[Cfg] DUT configuration:*Each DUT is configured with two VRF tables;
+| ... | *[Cfg] DUT configuration:* Each DUT is configured with two VRF tables;
| ... | Separation of traffic is tested by IP packets; Basic ARP and ROUTES are
| ... | set on DUT nodes; IP addresses are set on DUT interfaces.
| ... | *[Ver] TG verification:* Test ICMPv4 Echo Request packets
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/vxlan.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/double_qemu_setup.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV | VPP_VM_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2BD with VM combined with VXLAN test cases - IPv4*
+| ...
+| ... | *[Top] Network topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on
+| ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUTn for L2 switching of IPv4.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
+| ... | bridge-domain (L2BD) switching combined with MAC learning enabled;
+| ... | VXLAN tunnels are configured between L2BDs on DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test ICMPv4 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 src-addr, dst-addr
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC7348.
+
+*** Variables ***
+| ${vni_1}= | 23
+
+| ${bd_id1}= | 10
+| ${bd_id2}= | 20
+
+| ${ip4_addr1}= | 172.16.0.1
+| ${ip4_addr2}= | 172.16.0.2
+| ${ip4_prefix}= | 24
+
+| ${sock1}= | /tmp/sock1
+| ${sock2}= | /tmp/sock2
+
+| ${qemu1}= | qemu_instance_1
+| ${qemu2}= | qemu_instance_2
+
+| ${dut1_vhost1}= | dut1_vhost_if1
+| ${dut1_vhost2}= | dut1_vhost_if2
+| ${dut2_vhost1}= | dut2_vhost_if1
+| ${dut2_vhost2}= | dut2_vhost_if2
+
+*** Test Cases ***
+| TC01:DUT1 and DUT2 with two L2BDs and VXLANoIPv4 tunnel switch ICMPv4 between TG links and VM links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-VM-DUT1-DUT2-VM-DUT2-TG.
+| | ... | [Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on DUT1-DUT2; Eth-IPv4-ICMPv4
+| | ... | on TG-DUTn and DUTn=VM.
+| | ... | [Cfg] On both DUTs configure two L2BDs (MAC learning enabled); first
+| | ... | L2BD with untagged interface to TG and vhost-user interface to local
+| | ... | VM, second one with vhost-user interface to local VM and VXLAN
+| | ... | interface towards the other DUT. Configure linux bridge on both VMs
+| | ... | to pass traffic between both vhost-user interfaces.
+| | ... | [Ver] Make TG send ICMPv4 Echo Req between two of its interfaces to
+| | ... | be switched by DUT1 and DUT2; verify packets are switched between
+| | ... | these TG interfaces.
+| | ... | [Ref] RFC7348.
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut1_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | ... | ${dut1_vhost1}
+| | ... | ${dut1_vhost2}
+| | And VPP Vhost interfaces for L2BD forwarding are setup | ${dut2_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | ... | ${dut2_vhost1}
+| | ... | ${dut2_vhost2}
+| | And VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1}
+| | ... | ${sock2} | ${qemu1}
+| | And VM for Vhost L2BD forwarding is setup | ${dut2_node} | ${sock1}
+| | ... | ${sock2} | ${qemu2}
+| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
+| | ... | ${ip4_prefix}
+| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
+| | ... | ${ip4_prefix}
+| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
+| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
+| | ${dut1s_vxlan}= | And Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
+| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
+| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
+| | ... | ${dut1_to_tg} | ${${dut1_vhost1}}
+| | And Interfaces are added to BD | ${dut1_node} | ${bd_id2}
+| | ... | ${dut1s_vxlan} | ${${dut1_vhost2}}
+| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
+| | ... | ${dut2_to_tg} | ${${dut2_vhost1}}
+| | And Interfaces are added to BD | ${dut2_node} | ${bd_id2}
+| | ... | ${dut2s_vxlan} | ${${dut2_vhost2}}
+| | Then Send and receive ICMPv4 bidirectionally
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Run keyword | Qemu Teardown | ${dut1_node}
+| | ... | ${${qemu1}} | ${qemu1}
+| | ... | AND | Run keyword | Qemu Teardown | ${dut2_node}
+| | ... | ${${qemu2}} | ${qemu2}
+| | ... | AND | Check VPP PID in Teardown
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/vxlan.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/double_qemu_setup.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *Bridge-domain with VXLAN test cases - IPv4*
+| ...
+| ... | *[Top] Network topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on
+| ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUTn for L2 switching of IPv4.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
+| ... | bridge-domain (L2BD) switching combined with MAC learning enabled;
+| ... | VXLAN tunnels are configured between L2BDs on DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test ICMPv4 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 src-addr, dst-addr
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC7348.
+
+*** Variables ***
+| ${vni_1}= | 23
+| ${vni_2}= | 35
+
+| ${bd_id1}= | 10
+| ${bd_id2}= | 20
+| ${bd_id3}= | 30
+| ${shg1}= | 1
+| ${shg2}= | 2
+
+| ${ip4_addr1}= | 172.16.0.1
+| ${ip4_addr2}= | 172.16.0.2
+| ${ip4_prefix}= | 24
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels switch ICMPv4 between TG links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on \
+| | ... | DUT1-DUT2; Eth-IPv4-ICMPv4 on TG-DUTn. [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] RFC7348.
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | ${dut1_to_dut2_name}= | Get interface name | ${dut1_node} | ${dut1_to_dut2}
+| | ${dut2_to_dut1_name}= | Get interface name | ${dut2_node} | ${dut2_to_dut1}
+| | And IP addresses are set on interfaces | ${dut1_node} | ${dut1_to_dut2_name} | ${NONE}
+| | ... | ${dut2_node} | ${dut2_to_dut1_name} | ${NONE}
+| | ${dut1s_vxlan}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${dut1s_ip_address} | ${dut2s_ip_address}
+| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
+| | ... | ${dut1_to_tg} | ${dut1s_vxlan}
+| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${dut2s_ip_address} | ${dut1s_ip_address}
+| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
+| | ... | ${dut2_to_tg} | ${dut2s_vxlan}
+| | Then Send and receive ICMPv4 bidirectionally
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/vxlan.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/double_qemu_setup.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2BD with VM combined with VXLAN test cases - IPv6*
+| ...
+| ... | *[Top] Network topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on
+| ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUTn for L2 switching of IPv6.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
+| ... | bridge-domain (L2BD) switching combined with MAC learning enabled;
+| ... | VXLAN tunnels are configured between L2BDs on DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr, dst-addr
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC7348.
+
+*** Variables ***
+| ${vni_1}= | 23
+
+| ${bd_id1}= | 10
+| ${bd_id2}= | 20
+
+| ${ip6_addr1}= | 3ffe:64::1
+| ${ip6_addr2}= | 3ffe:64::2
+| ${ip6_prefix}= | 64
+
+| ${sock1}= | /tmp/sock1
+| ${sock2}= | /tmp/sock2
+
+| ${qemu1}= | qemu_instance_1
+| ${qemu2}= | qemu_instance_2
+
+| ${dut1_vhost1}= | dut1_vhost_if1
+| ${dut1_vhost2}= | dut1_vhost_if2
+| ${dut2_vhost1}= | dut2_vhost_if1
+| ${dut2_vhost2}= | dut2_vhost_if2
+
+*** Test Cases ***
+| TC01:DUT1 and DUT2 with two L2BDs and VXLANoIPv6 tunnel switch ICMPv6 between TG links and VM links
+| | [Documentation]
+| | ... | [Top] TG-DUT1-VM-DUT1-DUT2-VM-DUT2-TG.
+| | ... | [Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on DUT1-DUT2; Eth-IPv4-ICMPv4
+| | ... | on TG-DUTn and DUTn=VM.
+| | ... | [Cfg] On both DUTs configure two L2BDs (MAC learning enabled); first
+| | ... | L2BD with untagged interface to TG and vhost-user interface to local
+| | ... | VM, second one with vhost-user interface to local VM and VXLAN
+| | ... | interface towards the other DUT. Configure linux bridge on both VMs
+| | ... | to pass traffic between both vhost-user interfaces.
+| | ... | [Ver] Make TG send ICMPv6 Echo Req between two of its interfaces to
+| | ... | be switched by DUT1 and DUT2; verify packets are switched between
+| | ... | these TG interfaces.
+| | ... | [Ref] RFC7348.
+| | [Tags] | VPP_VM_ENV
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut1_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | ... | ${dut1_vhost1}
+| | ... | ${dut1_vhost2}
+| | And VPP Vhost interfaces for L2BD forwarding are setup | ${dut2_node}
+| | ... | ${sock1}
+| | ... | ${sock2}
+| | ... | ${dut2_vhost1}
+| | ... | ${dut2_vhost2}
+| | And VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1}
+| | ... | ${sock2} | ${qemu1}
+| | And VM for Vhost L2BD forwarding is setup | ${dut2_node} | ${sock1}
+| | ... | ${sock2} | ${qemu2}
+| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
+| | ... | ${ip6_prefix}
+| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
+| | ... | ${ip6_prefix}
+| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
+| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
+| | ${dut1s_vxlan}= | And Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${ip6_addr2} | ${ip6_addr1}
+| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
+| | ... | ${dut1_to_tg} | ${${dut1_vhost1}}
+| | And Interfaces are added to BD | ${dut1_node} | ${bd_id2}
+| | ... | ${dut1s_vxlan} | ${${dut1_vhost2}}
+| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
+| | ... | ${dut2_to_tg} | ${${dut2_vhost1}}
+| | And Interfaces are added to BD | ${dut2_node} | ${bd_id2}
+| | ... | ${dut2s_vxlan} | ${${dut2_vhost2}}
+| | Then Send and receive ICMPv6 bidirectionally
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
+| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
+| | ... | AND | Show vpp trace dump on all DUTs
+| | ... | AND | Run keyword | Qemu Teardown | ${dut1_node}
+| | ... | ${${qemu1}} | ${qemu1}
+| | ... | AND | Run keyword | Qemu Teardown | ${dut2_node}
+| | ... | ${${qemu2}} | ${qemu2}
+| | ... | AND | Check VPP PID in Teardown
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/vxlan.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/double_qemu_setup.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *Bridge-domain with VXLAN test cases - IPv6*
+| ...
+| ... | *[Top] Network topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet encapsulations:* Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on
+| ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUTn for L2 switching of IPv6.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
+| ... | bridge-domain (L2BD) switching combined with MAC learning enabled;
+| ... | VXLAN tunnels are configured between L2BDs on DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test 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 IPv6 src-addr, dst-addr
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC7348.
+
+*** Variables ***
+| ${vni_1}= | 23
+
+| ${bd_id1}= | 10
+
+| ${ip6_addr1}= | 3ffe:64::1
+| ${ip6_addr2}= | 3ffe:64::2
+| ${ip6_prefix}= | 64
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels switch ICMPv6 between TG links
+| | [Documentation]
+| | ... | [Top] TG=DUT1=DUT2=TG.[Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on \
+| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUTn. [Cfg] On DUT1 and DUT2
+| | ... | configure L2 bridge-domain (MAC learning enabled), each with one
+| | ... | interface to TG and one VXLAN tunnel interface towards the other
+| | ... | DUT. [Ver] Make TG send ICMPv6 Echo Req between two of its
+| | ... | interfaces to be switched by DUT1 and DUT2; verify all packets
+| | ... | are received. [Ref] RFC7348.
+| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
+| | Given Path for 3-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
+| | And Interfaces in 3-node path are up
+| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
+| | ... | ${ip6_prefix}
+| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
+| | ... | ${ip6_prefix}
+| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
+| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
+| | ${dut1s_vxlan}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${ip6_addr1} | ${ip6_addr2}
+| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
+| | ... | ${dut1_to_tg} | ${dut1s_vxlan}
+| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${ip6_addr2} | ${ip6_addr1}
+| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
+| | ... | ${dut2_to_tg} | ${dut2s_vxlan}
+| | Then Send and receive ICMPv6 bidirectionally
+| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/vxlan.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/double_qemu_setup.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2BD with SHG combined with VXLAN test cases - IPv4*
+| ...
+| ... | *[Top] Network topologies:* TG=DUT1=DUT2=TG 3-node circular topology
+| ... | with double parallel links.
+| ... | *[Enc] Packet encapsulations:* Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on
+| ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUTn for L2 switching of IPv4.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
+| ... | bridge-domain (L2BD) switching combined with MAC learning enabled
+| ... | and Split Horizon Groups (SHG); VXLAN tunnels are configured
+| ... | between L2BDs on DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test ICMPv4 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 src-addr, dst-addr
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC7348.
+
+*** Variables ***
+| ${vni_1}= | 23
+| ${vni_2}= | 35
+
+| ${bd_id1}= | 10
+| ${bd_id2}= | 20
+| ${bd_id3}= | 30
+| ${shg1}= | 1
+| ${shg2}= | 2
+
+| ${ip4_addr1}= | 172.16.0.1
+| ${ip4_addr2}= | 172.16.0.2
+| ${ip4_prefix}= | 24
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels in SHG switch ICMPv4 between TG links
+| | [Documentation]
+| | ... | [Top] TG=DUT1=DUT2=TG. [Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on \
+| | ... | DUT1-DUT2; Eth-IPv4-ICMPv4 on TG-DUTn. [Cfg] On DUT1 configure L2
+| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
+| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
+| | ... | interfaces into the same Split-Horizon-Group (SHG). On DUT2 configure
+| | ... | two L2 bridge-domain (MAC learning enabled), each with one untagged
+| | ... | interface to TG and one VXLAN interface towards the DUT1. [Ver] Make
+| | ... | TG send ICMPv4 Echo Reqs between all four of its interfaces to be
+| | ... | switched by DUT1 and DUT2; verify packets are not switched between
+| | ... | TG interfaces connected to DUT2 that are isolated by SHG on DUT1.
+| | ... | [Ref] RFC7348.
+| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
+| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
+| | ... | ${nodes['DUT1']}
+| | ... | ${nodes['DUT2']}
+| | And Interfaces in 3-node BD-SHG testing are up
+| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
+| | ... | ${ip4_prefix}
+| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
+| | ... | ${ip4_prefix}
+| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
+| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
+| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
+| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
+| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
+| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
+| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
+| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
+| | ... | ${bd_id1} | ${shg1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
+| | ... | ${bd_id1} | ${shg1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
+| | ... | ${bd_id2}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
+| | ... | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
+| | ... | ${bd_id3}
+| | Then Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if2}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if2}
+| | And Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMPv4 bidirectionally
+| | | ... | ${tg_node} | ${tg_to_dut2_if1}
+| | | ... | ${tg_to_dut2_if2}
+
+| TC01: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels in different SHGs switch ICMPv4 between TG links
+| | [Documentation]
+| | ... | [Top] TG=DUT1=DUT2=TG.[Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on \
+| | ... | DUT1-DUT2; Eth-IPv4-ICMPv4 on TG-DUTn. [Cfg] On DUT1 configure L2
+| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
+| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
+| | ... | interfaces into the different Split-Horizon-Group (SHGs). On DUT2
+| | ... | configure two L2 bridge-domain (MAC learning enabled), each with one
+| | ... | untagged interface to TG and one VXLAN interface towards the DUT1.
+| | ... | [Ver] Make TG send ICMPv4 Echo Req between all four of its interfaces
+| | ... | to be switched by DUT1 and DUT2; verify packets are switched between
+| | ... | all TG interfaces. [Ref] RFC7348.
+| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
+| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
+| | ... | ${nodes['DUT1']}
+| | ... | ${nodes['DUT2']}
+| | And Interfaces in 3-node BD-SHG testing are up
+| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
+| | ... | ${ip4_prefix}
+| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
+| | ... | ${ip4_prefix}
+| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
+| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
+| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
+| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
+| | | ... | ${ip4_addr1} | ${ip4_addr2}
+| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
+| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
+| | | ... | ${ip4_addr2} | ${ip4_addr1}
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
+| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
+| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
+| | ... | ${bd_id1} | ${shg1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
+| | ... | ${bd_id1} | ${shg2}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
+| | ... | ${bd_id2}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
+| | ... | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
+| | ... | ${bd_id3}
+| | Then Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if2}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if2}
+| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut2_if1}
+| | ... | ${tg_to_dut2_if2}
--- /dev/null
+# 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/default.robot
+| Resource | resources/libraries/robot/testing_path.robot
+| Resource | resources/libraries/robot/vxlan.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Resource | resources/libraries/robot/qemu.robot
+| Resource | resources/libraries/robot/double_qemu_setup.robot
+| Library | resources.libraries.python.Trace
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| Test Setup | Func Test Setup
+| Test Teardown | Func Test Teardown
+| Documentation | *L2BD with SHG combined with VXLAN test cases - IPv6*
+| ...
+| ... | *[Top] Network topologies:* TG=DUT1=DUT2=TG 3-node circular topology
+| ... | with double parallel links.
+| ... | *[Enc] Packet encapsulations:* th-IPv6-VXLAN-Eth-IPv6-ICMPv6 on
+| ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUTn for L2 switching of IPv6.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
+| ... | bridge-domain (L2BD) switching combined with MAC learning enabled
+| ... | and Split Horizon Groups (SHG); VXLAN tunnels are configured
+| ... | between L2BDs on DUT1 and DUT2.
+| ... | *[Ver] TG verification:* Test ICMPv4 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 IPv6 src-addr, dst-addr
+| ... | and MAC addresses.
+| ... | *[Ref] Applicable standard specifications:* RFC7348.
+
+*** Variables ***
+| ${vni_1}= | 23
+| ${vni_2}= | 35
+
+| ${bd_id1}= | 10
+| ${bd_id2}= | 20
+| ${bd_id3}= | 30
+| ${shg1}= | 1
+| ${shg2}= | 2
+
+| ${ip6_addr1}= | 3ffe:64::1
+| ${ip6_addr2}= | 3ffe:64::2
+| ${ip6_prefix}= | 64
+
+*** Test Cases ***
+| TC01: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels in SHG switch ICMPv6 between TG links
+| | [Documentation]
+| | ... | [Top] TG=DUT1=DUT2=TG. [Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on \
+| | ... | DUT1-DUT2; Eth-IPv6-ICMPv6 on TG-DUTn. [Cfg] On DUT1 configure L2
+| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
+| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
+| | ... | interfaces into the same Split-Horizon-Group (SHG). On DUT2 configure
+| | ... | two L2 bridge-domain (MAC learning enabled), each with one untagged
+| | ... | interface to TG and one VXLAN interface towards the DUT1. [Ver] Make
+| | ... | TG send ICMPv6 Echo Reqs between all four of its interfaces to be
+| | ... | switched by DUT1 and DUT2; verify packets are not switched between
+| | ... | TG interfaces connected to DUT2 that are isolated by SHG on DUT1.
+| | ... | [Ref] RFC7348.
+| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
+| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
+| | ... | ${nodes['DUT1']}
+| | ... | ${nodes['DUT2']}
+| | And Interfaces in 3-node BD-SHG testing are up
+| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
+| | ... | ${ip6_prefix}
+| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
+| | ... | ${ip6_prefix}
+| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
+| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
+| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
+| | | ... | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${ip6_addr2} | ${ip6_addr1}
+| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
+| | | ... | ${ip6_addr2} | ${ip6_addr1}
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
+| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
+| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
+| | ... | ${bd_id1} | ${shg1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
+| | ... | ${bd_id1} | ${shg1}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
+| | ... | ${bd_id2}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
+| | ... | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
+| | ... | ${bd_id3}
+| | Then Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if2}
+| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if2}
+| | And Run Keyword And Expect Error | ICMP echo Rx timeout
+| | ... | Send and receive ICMPv6 bidirectionally
+| | | ... | ${tg_node} | ${tg_to_dut2_if1}
+| | | ... | ${tg_to_dut2_if2}
+
+| TC02: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels in different SHGs switch ICMPv6 between TG links
+| | [Documentation]
+| | ... | [Top] TG=DUT1=DUT2=TG.[Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on \
+| | ... | DUT1-DUT2; Eth-IPv6-ICMPv6 on TG-DUTn. [Cfg] On DUT1 configure L2
+| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
+| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
+| | ... | interfaces into the different Split-Horizon-Group (SHGs). On DUT2
+| | ... | configure two L2 bridge-domain (MAC learning enabled), each with one
+| | ... | untagged interface to TG and one VXLAN interface towards the DUT1.
+| | ... | [Ver] Make TG send ICMPv6 Echo Req between all four of its interfaces
+| | ... | to be switched by DUT1 and DUT2; verify packets are switched between
+| | ... | all TG interfaces. [Ref] RFC7348.
+| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
+| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
+| | ... | ${nodes['DUT1']}
+| | ... | ${nodes['DUT2']}
+| | And Interfaces in 3-node BD-SHG testing are up
+| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
+| | ... | ${ip6_prefix}
+| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
+| | ... | ${ip6_prefix}
+| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
+| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
+| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
+| | | ... | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
+| | | ... | ${ip6_addr1} | ${ip6_addr2}
+| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
+| | | ... | ${ip6_addr2} | ${ip6_addr1}
+| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
+| | | ... | ${ip6_addr2} | ${ip6_addr1}
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
+| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
+| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
+| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
+| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
+| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
+| | ... | ${bd_id1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
+| | ... | ${bd_id1} | ${shg1}
+| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
+| | ... | ${bd_id1} | ${shg2}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
+| | ... | ${bd_id2}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
+| | ... | ${bd_id2}
+| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
+| | ... | ${bd_id3}
+| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
+| | ... | ${bd_id3}
+| | Then Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if1}
+| | ... | ${tg_to_dut2_if2}
+| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if1}
+| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut1_if2}
+| | ... | ${tg_to_dut2_if2}
+| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
+| | ... | ${tg_to_dut2_if1}
+| | ... | ${tg_to_dut2_if2}
+++ /dev/null
-# 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/default.robot
-| Resource | resources/libraries/robot/testing_path.robot
-| Resource | resources/libraries/robot/vxlan.robot
-| Resource | resources/libraries/robot/l2_traffic.robot
-| Resource | resources/libraries/robot/qemu.robot
-| Resource | resources/libraries/robot/double_qemu_setup.robot
-| Library | resources.libraries.python.Trace
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
-| Test Setup | Func Test Setup
-| Test Teardown | Func Test Teardown
-| Documentation | *RFC7348 VXLAN: Bridge-domain with VXLAN test cases*
-| ...
-| ... | *[Top] Network topologies:* TG-DUT1-DUT2-TG 3-node circular topology
-| ... | with single links between nodes; TG=DUT1=DUT2=TG 3-node circular
-| ... | topology with double parallel links.
-| ... | *[Enc] Packet encapsulations:* Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on
-| ... | DUT1-DUT2, Eth-IPv4-ICMPv4 on TG-DUTn for L2 switching of IPv4;
-| ... | Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on
-| ... | TG-DUTn for L2 switching of IPv6.
-| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2
-| ... | bridge-domain (L2BD) switching combined with static MACs, MAC learning
-| ... | enabled and Split Horizon Groups (SHG) depending on test case; VXLAN
-| ... | tunnels are configured between L2BDs on DUT1 and DUT2.
-| ... | *[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:* RFC7348.
-
-*** Variables ***
-| ${vni_1}= | 23
-| ${vni_2}= | 35
-
-| ${bd_id1}= | 10
-| ${bd_id2}= | 20
-| ${bd_id3}= | 30
-| ${shg1}= | 1
-| ${shg2}= | 2
-
-| ${ip4_addr1}= | 172.16.0.1
-| ${ip4_addr2}= | 172.16.0.2
-| ${ip4_prefix}= | 24
-
-| ${ip6_addr1}= | 3ffe:64::1
-| ${ip6_addr2}= | 3ffe:64::2
-| ${ip6_prefix}= | 64
-
-| ${sock1}= | /tmp/sock1
-| ${sock2}= | /tmp/sock2
-
-| ${qemu1}= | qemu_instance_1
-| ${qemu2}= | qemu_instance_2
-
-| ${dut1_vhost1}= | dut1_vhost_if1
-| ${dut1_vhost2}= | dut1_vhost_if2
-| ${dut2_vhost1}= | dut2_vhost_if1
-| ${dut2_vhost2}= | dut2_vhost_if2
-
-*** Test Cases ***
-| TC01: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels switch ICMPv4 between TG links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on \
-| | ... | DUT1-DUT2; Eth-IPv4-ICMPv4 on TG-DUTn. [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] RFC7348.
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | ${dut1_to_dut2_name}= | Get interface name | ${dut1_node} | ${dut1_to_dut2}
-| | ${dut2_to_dut1_name}= | Get interface name | ${dut2_node} | ${dut2_to_dut1}
-| | And IP addresses are set on interfaces | ${dut1_node} | ${dut1_to_dut2_name} | ${NONE}
-| | ... | ${dut2_node} | ${dut2_to_dut1_name} | ${NONE}
-| | ${dut1s_vxlan}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${dut1s_ip_address} | ${dut2s_ip_address}
-| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
-| | ... | ${dut1_to_tg} | ${dut1s_vxlan}
-| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${dut2s_ip_address} | ${dut1s_ip_address}
-| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
-| | ... | ${dut2_to_tg} | ${dut2s_vxlan}
-| | Then Send and receive ICMPv4 bidirectionally
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
-
-| TC02: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels in SHG switch ICMPv4 between TG links
-| | [Documentation]
-| | ... | [Top] TG=DUT1=DUT2=TG. [Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on \
-| | ... | DUT1-DUT2; Eth-IPv4-ICMPv4 on TG-DUTn. [Cfg] On DUT1 configure L2
-| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
-| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
-| | ... | interfaces into the same Split-Horizon-Group (SHG). On DUT2 configure
-| | ... | two L2 bridge-domain (MAC learning enabled), each with one untagged
-| | ... | interface to TG and one VXLAN interface towards the DUT1. [Ver] Make
-| | ... | TG send ICMPv4 Echo Reqs between all four of its interfaces to be
-| | ... | switched by DUT1 and DUT2; verify packets are not switched between
-| | ... | TG interfaces connected to DUT2 that are isolated by SHG on DUT1.
-| | ... | [Ref] RFC7348.
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
-| | ... | ${nodes['DUT1']}
-| | ... | ${nodes['DUT2']}
-| | And Interfaces in 3-node BD-SHG testing are up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
-| | ... | ${ip4_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
-| | ... | ${ip4_prefix}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
-| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${ip4_addr1} | ${ip4_addr2}
-| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ... | ${ip4_addr1} | ${ip4_addr2}
-| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${ip4_addr2} | ${ip4_addr1}
-| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ... | ${ip4_addr2} | ${ip4_addr1}
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
-| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
-| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ... | ${bd_id1} | ${shg1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ... | ${bd_id1} | ${shg1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ... | ${bd_id2}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ... | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ... | ${bd_id3}
-| | Then Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if2}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if2}
-| | And Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMPv4 bidirectionally
-| | | ... | ${tg_node} | ${tg_to_dut2_if1}
-| | | ... | ${tg_to_dut2_if2}
-
-| TC03: DUT1 and DUT2 with L2BD and VXLANoIPv4 tunnels in different SHGs switch ICMPv4 between TG links
-| | [Documentation]
-| | ... | [Top] TG=DUT1=DUT2=TG.[Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on \
-| | ... | DUT1-DUT2; Eth-IPv4-ICMPv4 on TG-DUTn. [Cfg] On DUT1 configure L2
-| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
-| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
-| | ... | interfaces into the different Split-Horizon-Group (SHGs). On DUT2
-| | ... | configure two L2 bridge-domain (MAC learning enabled), each with one
-| | ... | untagged interface to TG and one VXLAN interface towards the DUT1.
-| | ... | [Ver] Make TG send ICMPv4 Echo Req between all four of its interfaces
-| | ... | to be switched by DUT1 and DUT2; verify packets are switched between
-| | ... | all TG interfaces. [Ref] RFC7348.
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
-| | ... | ${nodes['DUT1']}
-| | ... | ${nodes['DUT2']}
-| | And Interfaces in 3-node BD-SHG testing are up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
-| | ... | ${ip4_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
-| | ... | ${ip4_prefix}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
-| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${ip4_addr1} | ${ip4_addr2}
-| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ... | ${ip4_addr1} | ${ip4_addr2}
-| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${ip4_addr2} | ${ip4_addr1}
-| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ... | ${ip4_addr2} | ${ip4_addr1}
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
-| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
-| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ... | ${bd_id1} | ${shg1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ... | ${bd_id1} | ${shg2}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ... | ${bd_id2}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ... | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ... | ${bd_id3}
-| | Then Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if2}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if2}
-| | And Send and receive ICMPv4 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut2_if1}
-| | ... | ${tg_to_dut2_if2}
-
-| TC04: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels switch ICMPv6 between TG links
-| | [Documentation]
-| | ... | [Top] TG=DUT1=DUT2=TG.[Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on \
-| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUTn. [Cfg] On DUT1 and DUT2
-| | ... | configure L2 bridge-domain (MAC learning enabled), each with one
-| | ... | interface to TG and one VXLAN tunnel interface towards the other
-| | ... | DUT. [Ver] Make TG send ICMPv6 Echo Req between two of its
-| | ... | interfaces to be switched by DUT1 and DUT2; verify all packets
-| | ... | are received. [Ref] RFC7348.
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
-| | ... | ${ip6_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
-| | ... | ${ip6_prefix}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
-| | ${dut1s_vxlan}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${ip6_addr1} | ${ip6_addr2}
-| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
-| | ... | ${dut1_to_tg} | ${dut1s_vxlan}
-| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${ip6_addr2} | ${ip6_addr1}
-| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
-| | ... | ${dut2_to_tg} | ${dut2s_vxlan}
-| | Then Send and receive ICMPv6 bidirectionally
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
-
-| TC05: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels in SHG switch ICMPv6 between TG links
-| | [Documentation]
-| | ... | [Top] TG=DUT1=DUT2=TG. [Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on \
-| | ... | DUT1-DUT2; Eth-IPv6-ICMPv6 on TG-DUTn. [Cfg] On DUT1 configure L2
-| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
-| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
-| | ... | interfaces into the same Split-Horizon-Group (SHG). On DUT2 configure
-| | ... | two L2 bridge-domain (MAC learning enabled), each with one untagged
-| | ... | interface to TG and one VXLAN interface towards the DUT1. [Ver] Make
-| | ... | TG send ICMPv6 Echo Reqs between all four of its interfaces to be
-| | ... | switched by DUT1 and DUT2; verify packets are not switched between
-| | ... | TG interfaces connected to DUT2 that are isolated by SHG on DUT1.
-| | ... | [Ref] RFC7348.
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
-| | ... | ${nodes['DUT1']}
-| | ... | ${nodes['DUT2']}
-| | And Interfaces in 3-node BD-SHG testing are up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
-| | ... | ${ip6_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
-| | ... | ${ip6_prefix}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
-| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ... | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${ip6_addr2} | ${ip6_addr1}
-| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ... | ${ip6_addr2} | ${ip6_addr1}
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
-| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
-| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ... | ${bd_id1} | ${shg1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ... | ${bd_id1} | ${shg1}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ... | ${bd_id2}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ... | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ... | ${bd_id3}
-| | Then Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if2}
-| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if2}
-| | And Run Keyword And Expect Error | ICMP echo Rx timeout
-| | ... | Send and receive ICMPv6 bidirectionally
-| | | ... | ${tg_node} | ${tg_to_dut2_if1}
-| | | ... | ${tg_to_dut2_if2}
-
-| TC06: DUT1 and DUT2 with L2BD and VXLANoIPv6 tunnels in different SHGs switch ICMPv6 between TG links
-| | [Documentation]
-| | ... | [Top] TG=DUT1=DUT2=TG.[Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on \
-| | ... | DUT1-DUT2; Eth-IPv6-ICMPv6 on TG-DUTn. [Cfg] On DUT1 configure L2
-| | ... | bridge-domain (MAC learning enabled) with two untagged interfaces
-| | ... | to TG and two VXLAN interfaces towards the DUT2 and put both VXLAN
-| | ... | interfaces into the different Split-Horizon-Group (SHGs). On DUT2
-| | ... | configure two L2 bridge-domain (MAC learning enabled), each with one
-| | ... | untagged interface to TG and one VXLAN interface towards the DUT1.
-| | ... | [Ver] Make TG send ICMPv6 Echo Req between all four of its interfaces
-| | ... | to be switched by DUT1 and DUT2; verify packets are switched between
-| | ... | all TG interfaces. [Ref] RFC7348.
-| | [Tags] | 3_NODE_DOUBLE_LINK_TOPO
-| | Given Path for 3-node BD-SHG testing is set | ${nodes['TG']}
-| | ... | ${nodes['DUT1']}
-| | ... | ${nodes['DUT2']}
-| | And Interfaces in 3-node BD-SHG testing are up
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
-| | ... | ${ip6_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
-| | ... | ${ip6_prefix}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr2}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr1}
-| | ${dut1s_vxlan1}= | When Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut1s_vxlan2}= | And Create VXLAN interface | ${dut1_node} | ${vni_2}
-| | | ... | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut2s_vxlan1}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${ip6_addr2} | ${ip6_addr1}
-| | ${dut2s_vxlan2}= | And Create VXLAN interface | ${dut2_node} | ${vni_2}
-| | | ... | ${ip6_addr2} | ${ip6_addr1}
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan1} | up
-| | And Set Interface State | ${dut1_node} | ${dut1s_vxlan2} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan1} | up
-| | And Set Interface State | ${dut2_node} | ${dut2s_vxlan2} | up
-| | And Vpp Node Interfaces Ready Wait | ${dut1_node}
-| | And Vpp Node Interfaces Ready Wait | ${dut2_node}
-| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if1}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_tg_if2}
-| | ... | ${bd_id1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan1}
-| | ... | ${bd_id1} | ${shg1}
-| | And Interface is added to bridge domain | ${dut1_node} | ${dut1s_vxlan2}
-| | ... | ${bd_id1} | ${shg2}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if1}
-| | ... | ${bd_id2}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan1}
-| | ... | ${bd_id2}
-| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg_if2}
-| | ... | ${bd_id3}
-| | And Interface is added to bridge domain | ${dut2_node} | ${dut2s_vxlan2}
-| | ... | ${bd_id3}
-| | Then Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if1}
-| | ... | ${tg_to_dut2_if2}
-| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if1}
-| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut1_if2}
-| | ... | ${tg_to_dut2_if2}
-| | And Send and receive ICMPv6 bidirectionally | ${tg_node}
-| | ... | ${tg_to_dut2_if1}
-| | ... | ${tg_to_dut2_if2}
-
-| TC07:DUT1 and DUT2 with two L2BDs and VXLANoIPv4 tunnel switch ICMPv4 between TG links and VM links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-VM-DUT1-DUT2-VM-DUT2-TG.
-| | ... | [Enc] Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on DUT1-DUT2; Eth-IPv4-ICMPv4
-| | ... | on TG-DUTn and DUTn=VM.
-| | ... | [Cfg] On both DUTs configure two L2BDs (MAC learning enabled); first
-| | ... | L2BD with untagged interface to TG and vhost-user interface to local
-| | ... | VM, second one with vhost-user interface to local VM and VXLAN
-| | ... | interface towards the other DUT. Configure linux bridge on both VMs
-| | ... | to pass traffic between both vhost-user interfaces.
-| | ... | [Ver] Make TG send ICMPv4 Echo Req between two of its interfaces to
-| | ... | be switched by DUT1 and DUT2; verify packets are switched between
-| | ... | these TG interfaces.
-| | ... | [Ref] RFC7348.
-| | [Tags] | VPP_VM_ENV
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut1_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | ... | ${dut1_vhost1}
-| | ... | ${dut1_vhost2}
-| | And VPP Vhost interfaces for L2BD forwarding are setup | ${dut2_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | ... | ${dut2_vhost1}
-| | ... | ${dut2_vhost2}
-| | And VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1}
-| | ... | ${sock2} | ${qemu1}
-| | And VM for Vhost L2BD forwarding is setup | ${dut2_node} | ${sock1}
-| | ... | ${sock2} | ${qemu2}
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr1}
-| | ... | ${ip4_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr2}
-| | ... | ${ip4_prefix}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
-| | ${dut1s_vxlan}= | And Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${ip4_addr1} | ${ip4_addr2}
-| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${ip4_addr2} | ${ip4_addr1}
-| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
-| | ... | ${dut1_to_tg} | ${${dut1_vhost1}}
-| | And Interfaces are added to BD | ${dut1_node} | ${bd_id2}
-| | ... | ${dut1s_vxlan} | ${${dut1_vhost2}}
-| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
-| | ... | ${dut2_to_tg} | ${${dut2_vhost1}}
-| | And Interfaces are added to BD | ${dut2_node} | ${bd_id2}
-| | ... | ${dut2s_vxlan} | ${${dut2_vhost2}}
-| | Then Send and receive ICMPv4 bidirectionally
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Run keyword | Qemu Teardown | ${dut1_node}
-| | ... | ${${qemu1}} | ${qemu1}
-| | ... | AND | Run keyword | Qemu Teardown | ${dut2_node}
-| | ... | ${${qemu2}} | ${qemu2}
-| | ... | AND | Check VPP PID in Teardown
-
-| TC08:DUT1 and DUT2 with two L2BDs and VXLANoIPv6 tunnel switch ICMPv6 between TG links and VM links
-| | [Documentation]
-| | ... | [Top] TG-DUT1-VM-DUT1-DUT2-VM-DUT2-TG.
-| | ... | [Enc] Eth-IPv6-VXLAN-Eth-IPv6-ICMPv6 on DUT1-DUT2; Eth-IPv4-ICMPv4
-| | ... | on TG-DUTn and DUTn=VM.
-| | ... | [Cfg] On both DUTs configure two L2BDs (MAC learning enabled); first
-| | ... | L2BD with untagged interface to TG and vhost-user interface to local
-| | ... | VM, second one with vhost-user interface to local VM and VXLAN
-| | ... | interface towards the other DUT. Configure linux bridge on both VMs
-| | ... | to pass traffic between both vhost-user interfaces.
-| | ... | [Ver] Make TG send ICMPv6 Echo Req between two of its interfaces to
-| | ... | be switched by DUT1 and DUT2; verify packets are switched between
-| | ... | these TG interfaces.
-| | ... | [Ref] RFC7348.
-| | [Tags] | VPP_VM_ENV
-| | Given Path for 3-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
-| | And Interfaces in 3-node path are up
-| | When VPP Vhost interfaces for L2BD forwarding are setup | ${dut1_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | ... | ${dut1_vhost1}
-| | ... | ${dut1_vhost2}
-| | And VPP Vhost interfaces for L2BD forwarding are setup | ${dut2_node}
-| | ... | ${sock1}
-| | ... | ${sock2}
-| | ... | ${dut2_vhost1}
-| | ... | ${dut2_vhost2}
-| | And VM for Vhost L2BD forwarding is setup | ${dut1_node} | ${sock1}
-| | ... | ${sock2} | ${qemu1}
-| | And VM for Vhost L2BD forwarding is setup | ${dut2_node} | ${sock1}
-| | ... | ${sock2} | ${qemu2}
-| | And Set Interface Address | ${dut1_node} | ${dut1_to_dut2} | ${ip6_addr1}
-| | ... | ${ip6_prefix}
-| | And Set Interface Address | ${dut2_node} | ${dut2_to_dut1} | ${ip6_addr2}
-| | ... | ${ip6_prefix}
-| | And VPP IP Probe | ${dut1_node} | ${dut1_to_dut2} | ${ip4_addr2}
-| | And VPP IP Probe | ${dut2_node} | ${dut2_to_dut1} | ${ip4_addr1}
-| | ${dut1s_vxlan}= | And Create VXLAN interface | ${dut1_node} | ${vni_1}
-| | | ... | ${ip6_addr1} | ${ip6_addr2}
-| | ${dut2s_vxlan}= | And Create VXLAN interface | ${dut2_node} | ${vni_1}
-| | | ... | ${ip6_addr2} | ${ip6_addr1}
-| | And Interfaces are added to BD | ${dut1_node} | ${bd_id1}
-| | ... | ${dut1_to_tg} | ${${dut1_vhost1}}
-| | And Interfaces are added to BD | ${dut1_node} | ${bd_id2}
-| | ... | ${dut1s_vxlan} | ${${dut1_vhost2}}
-| | And Interfaces are added to BD | ${dut2_node} | ${bd_id1}
-| | ... | ${dut2_to_tg} | ${${dut2_vhost1}}
-| | And Interfaces are added to BD | ${dut2_node} | ${bd_id2}
-| | ... | ${dut2s_vxlan} | ${${dut2_vhost2}}
-| | Then Send and receive ICMPv6 bidirectionally
-| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2}
-| | [Teardown] | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
-| | ... | AND | Show vpp trace dump on all DUTs
-| | ... | AND | Run keyword | Qemu Teardown | ${dut1_node}
-| | ... | ${${qemu1}} | ${qemu1}
-| | ... | AND | Run keyword | Qemu Teardown | ${dut2_node}
-| | ... | ${${qemu2}} | ${qemu2}
-| | ... | AND | Check VPP PID in Teardown