aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Gelety <jgelety@cisco.com>2017-01-17 14:50:46 +0100
committerJan Gelety <jgelety@cisco.com>2017-01-25 18:55:15 +0100
commite40f61ff6453263df735d92e15927e8ecfe7c37e (patch)
tree6a53941690001e1cd29cf2e87d327b13f3971262
parent73a8d1acaeddbd8ad6fdbf772154aec6eb56a6c4 (diff)
csit-func-tc-naming-change - phase 1
- change of ts directories - change of ts file names - splitting of former files to more files when suitable - more details: https://wiki.fd.io/view/CSIT/csit-perf-tc-naming-change Change-Id: Ifda1038f8323735f86c1be7ba7f93e3fda183618 Signed-off-by: Jan Gelety <jgelety@cisco.com>
-rwxr-xr-xbootstrap.sh2
-rw-r--r--resources/libraries/robot/bridge_domain.robot60
-rw-r--r--tests/func/bridge_domain/bridge_domain_untagged.robot374
-rw-r--r--tests/func/cop_base/eth2p-ethip4-ip4base-copblklistbase-func.robot92
-rw-r--r--tests/func/cop_base/eth2p-ethip4-ip4base-copwhlistbase-func.robot (renamed from tests/func/cop/cop_whitelist_blacklist.robot)35
-rw-r--r--tests/func/cop_base/eth2p-ethip6-ip6base-copblklistbase-func.robot101
-rw-r--r--tests/func/cop_base/eth2p-ethip6-ip6base-copwhlistbase-func.robot (renamed from tests/func/cop/cop_whitelist_blacklist_IPv6.robot)40
-rw-r--r--tests/func/dhcp/eth2p-ethip4-ip4base-ip4dhcpclient-func.robot (renamed from tests/func/dhcp/dhcp_client.robot)34
-rw-r--r--tests/func/dhcp/eth2p-ethip4-ip4base-ip4dhcpproxy-func.robot (renamed from tests/func/dhcp/dhcp_v4_proxy.robot)16
-rw-r--r--tests/func/dhcp/eth2p-ethip6-ip6base-ip6dhcpproxy-func.robot (renamed from tests/func/dhcp/dhcp_v6_proxy.robot)10
-rw-r--r--tests/func/fds/eth2p-dot1q-l2bdbasemaclrn-eth-4vhost-2vm-fds-provider-nets-func.robot (renamed from tests/func/fds/provider_network.robot)0
-rw-r--r--tests/func/fds/eth2p-ethip4vxlan-l2bdbasemaclrn--eth-4vhost-2vm-fds-tenant-nets-func.robot (renamed from tests/func/fds/tenant_network.robot)0
-rw-r--r--tests/func/gre/eth2p-ethip4gre-ip4base-func.robot (renamed from tests/func/gre/gre_encapsulation.robot)0
-rw-r--r--tests/func/iacl_base/eth2p-eth-l2xcbase-iaclbase-func.robot (renamed from tests/func/iacl/l2_iacl_untagged.robot)1
-rw-r--r--tests/func/iacl_base/eth2p-ethip4-ip4base-iaclbase-func.robot (renamed from tests/func/iacl/ipv4_iacl_untagged.robot)0
-rw-r--r--tests/func/iacl_base/eth2p-ethip6-ip6base-iaclbase-func.robot (renamed from tests/func/iacl/ipv6_iacl_untagged.robot)0
-rw-r--r--tests/func/ipsec/eth2p-ethip4ipsectnl-ip4base-func.robot (renamed from tests/func/ipsec/ipsec_tunnel_mode_ipv4.robot)0
-rw-r--r--tests/func/ipsec/eth2p-ethip4ipsectpt-ip4base-func.robot (renamed from tests/func/ipsec/ipsec_transport_mode_ipv4.robot)0
-rw-r--r--tests/func/ipsec/eth2p-ethip6ipsectnl-ip6base-func.robot (renamed from tests/func/ipsec/ipsec_tunnel_mode_ipv6.robot)0
-rw-r--r--tests/func/ipsec/eth2p-ethip6ipsectpt-ip6base-func.robot (renamed from tests/func/ipsec/ipsec_transport_mode_ipv6.robot)0
-rw-r--r--tests/func/ipv4_base/eth2p-ethip4-ip4base-func.robot (renamed from tests/func/ipv4/ipv4_untagged.robot)0
-rw-r--r--tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4arp-func.robot (renamed from tests/func/ipv4/ipv4_arp_untagged.robot)0
-rw-r--r--tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4ecmp-func.robot (renamed from tests/func/ipv4/ipv4_multipath_routing.robot)0
-rw-r--r--tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4proxyarp-func.robot (renamed from tests/func/ipv4/ipv4_proxy_arp_untagged.robot)0
-rw-r--r--tests/func/ipv6_base/eth2p-ethip6-ip6base-func.robot (renamed from tests/func/ipv6/ipv6_untagged.robot)0
-rw-r--r--tests/func/ipv6_base/eth2p-ethip6-ip6base-ip6ecmp-func.robot (renamed from tests/func/ipv6/ipv6_multipath_routing.robot)0
-rw-r--r--tests/func/ipv6_base/eth2p-ethip6-ip6base-ip6ra-func.robot (renamed from tests/func/ipv6/ipv6_ra.robot)0
-rw-r--r--tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-eth-2vhost-1vm-func.robot110
-rw-r--r--tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-func.robot90
-rw-r--r--tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-eth-2vhost-1vm-func.robot154
-rw-r--r--tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-func.robot86
-rw-r--r--tests/func/l2bd_base/eth4p-eth-l2bdbasemaclrn-l2shg-func.robot93
-rw-r--r--tests/func/l2xc_base/eth2p-eth-l2xcbase-eth-2vhost-1vm-func.robot (renamed from tests/func/l2_xconnect/l2_xconnect_untagged.robot)72
-rw-r--r--tests/func/l2xc_base/eth2p-eth-l2xcbase-func.robot78
-rw-r--r--tests/func/lisp/api-crud-lisp-func.robot (renamed from tests/func/lisp/api.robot)0
-rw-r--r--tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip4base-eth-2vhost-1vm-func.robot226
-rw-r--r--tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip4base-func.robot (renamed from tests/func/lisp/ipsec_ipv4_lispgpe_ipv4.robot)125
-rw-r--r--tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6base-eth-2vhost-1vm-func.robot (renamed from tests/func/lisp/ipsec_ipv6_lispgpe_ipv4.robot)125
-rw-r--r--tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6base-func.robot161
-rw-r--r--tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6basevrf-func.robot140
-rw-r--r--tests/func/lisp/eth2p-ethip4lisp-ip4base-func.robot (renamed from tests/func/lisp/dataplane_generic.robot)0
-rw-r--r--tests/func/lisp/eth2p-ethip4lisp-l2bdbasemaclrn-func.robot (renamed from tests/func/lisp/l2_lisp_ipv4.robot)0
-rw-r--r--tests/func/lisp/eth2p-ethip4lispgpe-ip4base-eth-2vhost-1vm-func.robot131
-rw-r--r--tests/func/lisp/eth2p-ethip4lispgpe-ip4base-func.robot109
-rw-r--r--tests/func/lisp/eth2p-ethip4lispgpe-ip4basevrf-eth-2vhost-1vm-func.robot (renamed from tests/func/lisp/ipv4_lispgpe_ipv4.robot)136
-rw-r--r--tests/func/lisp/eth2p-ethip4lispgpe-ip4basevrf-func.robot114
-rw-r--r--tests/func/lisp/eth2p-ethip4lispgpe-ip6base-eth-2vhost-1vm-func.robot119
-rw-r--r--tests/func/lisp/eth2p-ethip4lispgpe-ip6base-func.robot117
-rw-r--r--tests/func/lisp/eth2p-ethip4lispgpe-ip6basevrf-func.robot113
-rw-r--r--tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip4base-eth-2vhost-1vm-func.robot (renamed from tests/func/lisp/ipsec_ipv4_lispgpe_ipv6.robot)82
-rw-r--r--tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip4base-func.robot155
-rw-r--r--tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip6base-eth-2vhost-1vm-func.robot (renamed from tests/func/lisp/ipsec_ipv6_lispgpe_ipv6.robot)93
-rw-r--r--tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip6base-func.robot171
-rw-r--r--tests/func/lisp/eth2p-ethip6lisp-l2bdbasemaclrn-func.robot (renamed from tests/func/lisp/l2_lisp_ipv6.robot)0
-rw-r--r--tests/func/lisp/eth2p-ethip6lispgpe-ip4base-func.robot (renamed from tests/func/lisp/ipv6_lispgpe_ipv4.robot)0
-rw-r--r--tests/func/lisp/eth2p-ethip6lispgpe-ip6base-eth-2vhost-1vm-func.robot142
-rw-r--r--tests/func/lisp/eth2p-ethip6lispgpe-ip6base-func.robot111
-rw-r--r--tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-eth-2vhost-1vm-func.robot148
-rw-r--r--tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-func.robot116
-rw-r--r--tests/func/lisp/ipv4_lispgpe_ipv6.robot242
-rw-r--r--tests/func/lisp/ipv6_lispgpe_ipv6.robot291
-rw-r--r--tests/func/policer/eth2p-ethip4-ip4base-ipolicemarkbase-func.robot (renamed from tests/func/policer/policer_ip4.robot)0
-rw-r--r--tests/func/policer/eth2p-ethip6-ip6base-ipolicemarkbase-func.robot (renamed from tests/func/policer/policer_ip6.robot)0
-rw-r--r--tests/func/rpf/eth2p-ethip4-ip4base-rpf-func.robot (renamed from tests/func/rpf/ipv4_rpf_untagged.robot)2
-rw-r--r--tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swirelw46-func.robot (renamed from tests/func/softwire/lightweight_4over6.robot)0
-rw-r--r--tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremape-func.robot (renamed from tests/func/softwire/map_e.robot)0
-rw-r--r--tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremapt-func.robot (renamed from tests/func/softwire/map_t.robot)0
-rw-r--r--tests/func/tap/api-crud-tap-func.robot69
-rw-r--r--tests/func/tap/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot92
-rw-r--r--tests/func/tap/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot (renamed from tests/func/tap/tap_interface.robot)150
-rw-r--r--tests/func/tap/eth2p-ethip4-ip4base-eth-1tap-func.robot123
-rw-r--r--tests/func/telemetry/ipfix/eth2p-ethip4-ip4base-ip4ipfixbase-func.robot (renamed from tests/func/telemetry/ipfix_ipv4.robot)69
-rw-r--r--tests/func/telemetry/ipfix/eth2p-ethip4-ip4base-ip4ipfixscale-func.robot110
-rw-r--r--tests/func/telemetry/ipfix/eth2p-ethip6-ip6base-ip6ipfixbase-func.robot (renamed from tests/func/telemetry/ipfix_ipv6.robot)77
-rw-r--r--tests/func/telemetry/ipfix/eth2p-ethip6-ip6base-ip6ipfixscale-func.robot126
-rw-r--r--tests/func/telemetry/span/eth2p-ethip4-ip4base-spanrx-func.robot (renamed from tests/func/telemetry/span.robot)23
-rw-r--r--tests/func/telemetry/span/eth2p-ethip6-ip6base-spanrx-func.robot61
-rw-r--r--tests/func/vlan/eth2p-dot1ad--dot1q-l2bdbasemaclrn-vlantrans21-func.robot221
-rw-r--r--tests/func/vlan/eth2p-dot1ad--dot1q-l2xcbase-vlantrans21-func.robot189
-rw-r--r--tests/func/vlan/eth2p-dot1ad-l2bdbasemaclrn-vlantrans22-func.robot (renamed from tests/func/vlan/vlan_tag_translate_l2_bridge_domain_ipv4.robot)355
-rw-r--r--tests/func/vlan/eth2p-dot1ad-l2xcbase-func.robot (renamed from tests/func/vlan/qinq_l2_xconnect.robot)0
-rw-r--r--tests/func/vlan/eth2p-dot1ad-l2xcbase-vlantrans22-func.robot (renamed from tests/func/vlan/vlan_tag_translate_l2_xconnect_ipv6.robot)289
-rw-r--r--tests/func/vlan/eth2p-dot1q--dot1ad-l2bdbasemaclrn-vlantrans12-func.robot (renamed from tests/func/vlan/vlan_tag_translate_l2_bridge_domain_ipv6.robot)373
-rw-r--r--tests/func/vlan/eth2p-dot1q--dot1ad-l2xcbase-vlantrans12-func.robot (renamed from tests/func/vlan/vlan_tag_translate_l2_xconnect_ipv4.robot)294
-rw-r--r--tests/func/vlan/eth2p-dot1q-l2bdbasemaclrn-vlantrans11-func.robot206
-rw-r--r--tests/func/vlan/eth2p-dot1q-l2xcbase-vlantrans11-func.robot171
-rw-r--r--tests/func/vrf/eth2p-ethip4-ip4basevrf-func.robot (renamed from tests/func/vrf/vrf_tests.robot)2
-rw-r--r--tests/func/vrf/eth2p-ethip6-ip6basevrf-func.robot (renamed from tests/func/vrf/vrf_tests_v6.robot)0
-rw-r--r--tests/func/vxlan/eth2p-dot1qip4vxlan-l2bdbasemaclrn-func.robot (renamed from tests/func/vxlan/vxlan_bd_dot1q.robot)0
-rw-r--r--tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot119
-rw-r--r--tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-func.robot78
-rw-r--r--tests/func/vxlan/eth2p-ethip4vxlan-l2xcbase-func.robot (renamed from tests/func/vxlan/vxlan_xconnect_untagged.robot)0
-rw-r--r--tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot120
-rw-r--r--tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-func.robot78
-rw-r--r--tests/func/vxlan/eth4p-ethip4vxlan-l2bdbasemaclrn-l2shg-func.robot200
-rw-r--r--tests/func/vxlan/eth4p-ethip6vxlan-l2bdbasemaclrn-l2shg-func.robot200
-rw-r--r--tests/func/vxlan/vxlan_bd_untagged.robot406
97 files changed, 5537 insertions, 3281 deletions
diff --git a/bootstrap.sh b/bootstrap.sh
index 2eab51d3ed..f123729647 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -33,7 +33,7 @@ VIRL_RELEASE=csit-ubuntu-16.04.1_2016-12-19_1.6
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 )"
diff --git a/resources/libraries/robot/bridge_domain.robot b/resources/libraries/robot/bridge_domain.robot
index ac0fea8bd4..5707a82ade 100644
--- a/resources/libraries/robot/bridge_domain.robot
+++ b/resources/libraries/robot/bridge_domain.robot
@@ -16,7 +16,6 @@
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.NodePath
| Library | resources.libraries.python.VhostUser
-| Library | resources.libraries.python.QemuUtils
| Resource | resources/libraries/robot/interfaces.robot
| Resource | resources/libraries/robot/l2_traffic.robot
@@ -206,23 +205,38 @@
| | [Documentation] | Setup QEMU and start VM with two vhost interfaces.
| | ...
| | ... | *Arguments:*
-| | ... | - ${node} - DUT node to start VM on. Type: dictionary
+| | ... | - ${dut_node} - DUT node to start VM on. Type: dictionary
| | ... | - ${sock1} - Socket path for first Vhost-User interface. Type: string
| | ... | - ${sock2} - Socket path for second Vhost-User interface. Type: string
+| | ... | - ${qemu_name} - Qemu instance name by which the object will be
+| | ... | accessed (Optional). Type: string
| | ...
| | ... | _NOTE:_ This KW sets following test case variable:
-| | ... | -${vm_node} - VM node info. Type: dictionary
+| | ... | - ${${qemu_name}} - VM node info. Type: dictionary
| | ...
| | ... | *Example:*
| | ...
| | ... | \| VM for Vhost L2BD forwarding is setup \| ${nodes['DUT1']} \
| | ... | \| /tmp/sock1 \| /tmp/sock2 \|
-| | [Arguments] | ${node} | ${sock1} | ${sock2}
-| | Set Test Variable | ${vm_node} | ${None}
-| | Qemu Set Node | ${node}
-| | Qemu Add Vhost User If | ${sock1}
-| | Qemu Add Vhost User If | ${sock2}
-| | ${vm}= | Qemu Start
+| | ... | \| VM for Vhost L2BD forwarding is setup \| ${nodes['DUT2']} \
+| | ... | \| /tmp/sock1 \| /tmp/sock2 \| qemu_instance_2 \|
+| | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${qemu_name}=vm_node
+| | Run Keyword Unless | "${qemu_name}" == "vm_node" | Import Library
+| | ... | resources.libraries.python.QemuUtils | WITH NAME | ${qemu_name}
+| | Set Test Variable | ${${qemu_name}} | ${None}
+| | ${qemu_set_node}= | Run Keyword If | "${qemu_name}" == "vm_node"
+| | | ... | Set Variable | Qemu Set Node
+| | ... | ELSE | Replace Variables | ${qemu_name}.Qemu Set Node
+| | Run keyword | ${qemu_set_node} | ${dut_node}
+| | ${qemu_add_vhost}= | Run Keyword If | "${qemu_name}" == "vm_node"
+| | | ... | Set Variable | Qemu Add Vhost User If
+| | ... | ELSE | Replace Variables | ${qemu_name}.Qemu Add Vhost User If
+| | Run keyword | ${qemu_add_vhost} | ${sock1}
+| | Run keyword | ${qemu_add_vhost} | ${sock2}
+| | ${qemu_start}= | Run Keyword If | "${qemu_name}" == "vm_node"
+| | | ... | Set Variable | Qemu Start
+| | ... | ELSE | Replace Variables | ${qemu_name}.Qemu Start
+| | ${vm}= | Run keyword | ${qemu_start}
| | ${br}= | Set Variable | br0
| | ${vhost1}= | Get Vhost User If Name By Sock | ${vm} | ${sock1}
| | ${vhost2}= | Get Vhost User If Name By Sock | ${vm} | ${sock2}
@@ -230,26 +244,36 @@
| | Set Interface State | ${vm} | ${vhost1} | up | if_type=name
| | Set Interface State | ${vm} | ${vhost2} | up | if_type=name
| | Set Interface State | ${vm} | ${br} | up | if_type=name
-| | Set Test Variable | ${vm_node} | ${vm}
+| | Set Test Variable | ${${qemu_name}} | ${vm}
| VPP Vhost interfaces for L2BD forwarding are setup
| | [Documentation] | Create two Vhost-User interfaces on defined VPP node.
| | ...
| | ... | *Arguments:*
-| | ... | - ${node} - DUT node. Type: dictionary
+| | ... | - ${dut_node} - DUT node. Type: dictionary
| | ... | - ${sock1} - Socket path for first Vhost-User interface. Type: string
| | ... | - ${sock2} - Socket path for second Vhost-User interface. Type: string
+| | ... | - ${vhost_if1} - Name of the first Vhost-User interface (Optional).
+| | ... | Type: string
+| | ... | - ${vhost_if2} - Name of the second Vhost-User interface (Optional).
+| | ... | Type: string
| | ...
| | ... | _NOTE:_ This KW sets following test case variable:
-| | ... | - ${vhost_if1} - First Vhost-User interface.
-| | ... | - ${vhost_if2} - Second Vhost-User interface.
+| | ... | - ${${vhost_if1}} - First Vhost-User interface.
+| | ... | - ${${vhost_if2}} - Second Vhost-User interface.
| | ...
| | ... | *Example:*
| | ...
| | ... | \| VPP Vhost interfaces for L2BD forwarding are setup \
| | ... | \| ${nodes['DUT1']} \| /tmp/sock1 \| /tmp/sock2 \|
-| | [Arguments] | ${node} | ${sock1} | ${sock2}
-| | ${vhost_if1}= | Vpp Create Vhost User Interface | ${node} | ${sock1}
-| | ${vhost_if2}= | Vpp Create Vhost User Interface | ${node} | ${sock2}
-| | Set Test Variable | ${vhost_if1}
-| | Set Test Variable | ${vhost_if2}
+| | ... | \| VPP Vhost interfaces for L2BD forwarding are setup \
+| | ... | \| ${nodes['DUT2']} \| /tmp/sock1 \| /tmp/sock2 \| dut2_vhost_if1 \
+| | ... | \| dut2_vhost_if2 \|
+| | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vhost_if1}=vhost_if1
+| | ... | ${vhost_if2}=vhost_if2
+| | ${vhost_1}= | Vpp Create Vhost User Interface | ${dut_node} | ${sock1}
+| | ${vhost_2}= | Vpp Create Vhost User Interface | ${dut_node} | ${sock2}
+| | Set Interface State | ${dut_node} | ${vhost_1} | up
+| | Set Interface State | ${dut_node} | ${vhost_2} | up
+| | Set Test Variable | ${${vhost_if1}} | ${vhost_1}
+| | Set Test Variable | ${${vhost_if2}} | ${vhost_2}
diff --git a/tests/func/bridge_domain/bridge_domain_untagged.robot b/tests/func/bridge_domain/bridge_domain_untagged.robot
deleted file mode 100644
index 346ce86c92..0000000000
--- a/tests/func/bridge_domain/bridge_domain_untagged.robot
+++ /dev/null
@@ -1,374 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Resource | resources/libraries/robot/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}
diff --git a/tests/func/cop_base/eth2p-ethip4-ip4base-copblklistbase-func.robot b/tests/func/cop_base/eth2p-ethip4-ip4base-copblklistbase-func.robot
new file mode 100644
index 0000000000..37e55c0666
--- /dev/null
+++ b/tests/func/cop_base/eth2p-ethip4-ip4base-copblklistbase-func.robot
@@ -0,0 +1,92 @@
+# 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}
diff --git a/tests/func/cop/cop_whitelist_blacklist.robot b/tests/func/cop_base/eth2p-ethip4-ip4base-copwhlistbase-func.robot
index be6b476062..eb8be688d9 100644
--- a/tests/func/cop/cop_whitelist_blacklist.robot
+++ b/tests/func/cop_base/eth2p-ethip4-ip4base-copwhlistbase-func.robot
@@ -24,7 +24,7 @@
| 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.
@@ -90,36 +90,3 @@
| | ... | ${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}
diff --git a/tests/func/cop_base/eth2p-ethip6-ip6base-copblklistbase-func.robot b/tests/func/cop_base/eth2p-ethip6-ip6base-copblklistbase-func.robot
new file mode 100644
index 0000000000..7511dfe31b
--- /dev/null
+++ b/tests/func/cop_base/eth2p-ethip6-ip6base-copblklistbase-func.robot
@@ -0,0 +1,101 @@
+# 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}
diff --git a/tests/func/cop/cop_whitelist_blacklist_IPv6.robot b/tests/func/cop_base/eth2p-ethip6-ip6base-copwhlistbase-func.robot
index 140c6b0673..f75f4d0dea 100644
--- a/tests/func/cop/cop_whitelist_blacklist_IPv6.robot
+++ b/tests/func/cop_base/eth2p-ethip6-ip6base-copwhlistbase-func.robot
@@ -24,7 +24,7 @@
| 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.
@@ -99,41 +99,3 @@
| | ... | ${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}
diff --git a/tests/func/dhcp/dhcp_client.robot b/tests/func/dhcp/eth2p-ethip4-ip4base-ip4dhcpclient-func.robot
index 6169b97fb7..5507c956d5 100644
--- a/tests/func/dhcp/dhcp_client.robot
+++ b/tests/func/dhcp/eth2p-ethip4-ip4base-ip4dhcpclient-func.robot
@@ -20,7 +20,7 @@
| 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
@@ -32,9 +32,9 @@
*** 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']}
@@ -43,9 +43,9 @@
| | 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
@@ -56,9 +56,9 @@
| | 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']}
@@ -70,11 +70,11 @@
| | ... | ${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']}
@@ -89,9 +89,9 @@
| | ... | 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']}
diff --git a/tests/func/dhcp/dhcp_v4_proxy.robot b/tests/func/dhcp/eth2p-ethip4-ip4base-ip4dhcpproxy-func.robot
index a9c4d23ea9..e503c7fe0f 100644
--- a/tests/func/dhcp/dhcp_v4_proxy.robot
+++ b/tests/func/dhcp/eth2p-ethip4-ip4base-ip4dhcpproxy-func.robot
@@ -20,15 +20,15 @@
| 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
@@ -46,8 +46,8 @@
| | [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
@@ -71,8 +71,8 @@
| | [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']}
diff --git a/tests/func/dhcp/dhcp_v6_proxy.robot b/tests/func/dhcp/eth2p-ethip6-ip6base-ip6dhcpproxy-func.robot
index eeaf796a28..724150f929 100644
--- a/tests/func/dhcp/dhcp_v6_proxy.robot
+++ b/tests/func/dhcp/eth2p-ethip6-ip6base-ip6dhcpproxy-func.robot
@@ -24,10 +24,10 @@
| ...
| ... | *[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
@@ -43,8 +43,8 @@
| | [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
diff --git a/tests/func/fds/provider_network.robot b/tests/func/fds/eth2p-dot1q-l2bdbasemaclrn-eth-4vhost-2vm-fds-provider-nets-func.robot
index 612825d9a4..612825d9a4 100644
--- a/tests/func/fds/provider_network.robot
+++ b/tests/func/fds/eth2p-dot1q-l2bdbasemaclrn-eth-4vhost-2vm-fds-provider-nets-func.robot
diff --git a/tests/func/fds/tenant_network.robot b/tests/func/fds/eth2p-ethip4vxlan-l2bdbasemaclrn--eth-4vhost-2vm-fds-tenant-nets-func.robot
index ba26c8bb55..ba26c8bb55 100644
--- a/tests/func/fds/tenant_network.robot
+++ b/tests/func/fds/eth2p-ethip4vxlan-l2bdbasemaclrn--eth-4vhost-2vm-fds-tenant-nets-func.robot
diff --git a/tests/func/gre/gre_encapsulation.robot b/tests/func/gre/eth2p-ethip4gre-ip4base-func.robot
index 7087e31326..7087e31326 100644
--- a/tests/func/gre/gre_encapsulation.robot
+++ b/tests/func/gre/eth2p-ethip4gre-ip4base-func.robot
diff --git a/tests/func/iacl/l2_iacl_untagged.robot b/tests/func/iacl_base/eth2p-eth-l2xcbase-iaclbase-func.robot
index 06ecc99176..1914130bac 100644
--- a/tests/func/iacl/l2_iacl_untagged.robot
+++ b/tests/func/iacl_base/eth2p-eth-l2xcbase-iaclbase-func.robot
@@ -21,7 +21,6 @@
| 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*
diff --git a/tests/func/iacl/ipv4_iacl_untagged.robot b/tests/func/iacl_base/eth2p-ethip4-ip4base-iaclbase-func.robot
index ff55d94374..ff55d94374 100644
--- a/tests/func/iacl/ipv4_iacl_untagged.robot
+++ b/tests/func/iacl_base/eth2p-ethip4-ip4base-iaclbase-func.robot
diff --git a/tests/func/iacl/ipv6_iacl_untagged.robot b/tests/func/iacl_base/eth2p-ethip6-ip6base-iaclbase-func.robot
index 47daac02a5..47daac02a5 100644
--- a/tests/func/iacl/ipv6_iacl_untagged.robot
+++ b/tests/func/iacl_base/eth2p-ethip6-ip6base-iaclbase-func.robot
diff --git a/tests/func/ipsec/ipsec_tunnel_mode_ipv4.robot b/tests/func/ipsec/eth2p-ethip4ipsectnl-ip4base-func.robot
index e7c2967cf9..e7c2967cf9 100644
--- a/tests/func/ipsec/ipsec_tunnel_mode_ipv4.robot
+++ b/tests/func/ipsec/eth2p-ethip4ipsectnl-ip4base-func.robot
diff --git a/tests/func/ipsec/ipsec_transport_mode_ipv4.robot b/tests/func/ipsec/eth2p-ethip4ipsectpt-ip4base-func.robot
index ca7f1b38fb..ca7f1b38fb 100644
--- a/tests/func/ipsec/ipsec_transport_mode_ipv4.robot
+++ b/tests/func/ipsec/eth2p-ethip4ipsectpt-ip4base-func.robot
diff --git a/tests/func/ipsec/ipsec_tunnel_mode_ipv6.robot b/tests/func/ipsec/eth2p-ethip6ipsectnl-ip6base-func.robot
index 60b71fe9d5..60b71fe9d5 100644
--- a/tests/func/ipsec/ipsec_tunnel_mode_ipv6.robot
+++ b/tests/func/ipsec/eth2p-ethip6ipsectnl-ip6base-func.robot
diff --git a/tests/func/ipsec/ipsec_transport_mode_ipv6.robot b/tests/func/ipsec/eth2p-ethip6ipsectpt-ip6base-func.robot
index 517c01b665..517c01b665 100644
--- a/tests/func/ipsec/ipsec_transport_mode_ipv6.robot
+++ b/tests/func/ipsec/eth2p-ethip6ipsectpt-ip6base-func.robot
diff --git a/tests/func/ipv4/ipv4_untagged.robot b/tests/func/ipv4_base/eth2p-ethip4-ip4base-func.robot
index 020d1f143b..020d1f143b 100644
--- a/tests/func/ipv4/ipv4_untagged.robot
+++ b/tests/func/ipv4_base/eth2p-ethip4-ip4base-func.robot
diff --git a/tests/func/ipv4/ipv4_arp_untagged.robot b/tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4arp-func.robot
index 0950610559..0950610559 100644
--- a/tests/func/ipv4/ipv4_arp_untagged.robot
+++ b/tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4arp-func.robot
diff --git a/tests/func/ipv4/ipv4_multipath_routing.robot b/tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4ecmp-func.robot
index f55ee64df9..f55ee64df9 100644
--- a/tests/func/ipv4/ipv4_multipath_routing.robot
+++ b/tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4ecmp-func.robot
diff --git a/tests/func/ipv4/ipv4_proxy_arp_untagged.robot b/tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4proxyarp-func.robot
index 765a54b6d5..765a54b6d5 100644
--- a/tests/func/ipv4/ipv4_proxy_arp_untagged.robot
+++ b/tests/func/ipv4_base/eth2p-ethip4-ip4base-ip4proxyarp-func.robot
diff --git a/tests/func/ipv6/ipv6_untagged.robot b/tests/func/ipv6_base/eth2p-ethip6-ip6base-func.robot
index 6048daad67..6048daad67 100644
--- a/tests/func/ipv6/ipv6_untagged.robot
+++ b/tests/func/ipv6_base/eth2p-ethip6-ip6base-func.robot
diff --git a/tests/func/ipv6/ipv6_multipath_routing.robot b/tests/func/ipv6_base/eth2p-ethip6-ip6base-ip6ecmp-func.robot
index fddf3a98a8..fddf3a98a8 100644
--- a/tests/func/ipv6/ipv6_multipath_routing.robot
+++ b/tests/func/ipv6_base/eth2p-ethip6-ip6base-ip6ecmp-func.robot
diff --git a/tests/func/ipv6/ipv6_ra.robot b/tests/func/ipv6_base/eth2p-ethip6-ip6base-ip6ra-func.robot
index e45ce730c9..e45ce730c9 100644
--- a/tests/func/ipv6/ipv6_ra.robot
+++ b/tests/func/ipv6_base/eth2p-ethip6-ip6base-ip6ra-func.robot
diff --git a/tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-eth-2vhost-1vm-func.robot b/tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..b2279b90fc
--- /dev/null
+++ b/tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-eth-2vhost-1vm-func.robot
@@ -0,0 +1,110 @@
+# 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}
diff --git a/tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-func.robot b/tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-func.robot
new file mode 100644
index 0000000000..a0336e5cc8
--- /dev/null
+++ b/tests/func/l2bd_base/eth2p-eth-l2bdbasemaclrn-func.robot
@@ -0,0 +1,90 @@
+# 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}
diff --git a/tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-eth-2vhost-1vm-func.robot b/tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..ad5258bb9a
--- /dev/null
+++ b/tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-eth-2vhost-1vm-func.robot
@@ -0,0 +1,154 @@
+# 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}
diff --git a/tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-func.robot b/tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-func.robot
new file mode 100644
index 0000000000..271852e7e6
--- /dev/null
+++ b/tests/func/l2bd_base/eth2p-eth-l2bdbasemacstc-func.robot
@@ -0,0 +1,86 @@
+# 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}
diff --git a/tests/func/l2bd_base/eth4p-eth-l2bdbasemaclrn-l2shg-func.robot b/tests/func/l2bd_base/eth4p-eth-l2bdbasemaclrn-l2shg-func.robot
new file mode 100644
index 0000000000..295a03eadc
--- /dev/null
+++ b/tests/func/l2bd_base/eth4p-eth-l2bdbasemaclrn-l2shg-func.robot
@@ -0,0 +1,93 @@
+# 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}
diff --git a/tests/func/l2_xconnect/l2_xconnect_untagged.robot b/tests/func/l2xc_base/eth2p-eth-l2xcbase-eth-2vhost-1vm-func.robot
index 2554007cef..583a5ba052 100644
--- a/tests/func/l2_xconnect/l2_xconnect_untagged.robot
+++ b/tests/func/l2xc_base/eth2p-eth-l2xcbase-eth-2vhost-1vm-func.robot
@@ -21,21 +21,19 @@
| 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:*
@@ -45,45 +43,7 @@
| ${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
@@ -91,7 +51,10 @@
| | ... | 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
@@ -104,12 +67,8 @@
| | ... | ${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
@@ -117,7 +76,10 @@
| | ... | 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
@@ -130,8 +92,4 @@
| | ... | ${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
diff --git a/tests/func/l2xc_base/eth2p-eth-l2xcbase-func.robot b/tests/func/l2xc_base/eth2p-eth-l2xcbase-func.robot
new file mode 100644
index 0000000000..aa25225f44
--- /dev/null
+++ b/tests/func/l2xc_base/eth2p-eth-l2xcbase-func.robot
@@ -0,0 +1,78 @@
+# 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}
diff --git a/tests/func/lisp/api.robot b/tests/func/lisp/api-crud-lisp-func.robot
index 013eb7258c..013eb7258c 100644
--- a/tests/func/lisp/api.robot
+++ b/tests/func/lisp/api-crud-lisp-func.robot
diff --git a/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip4base-eth-2vhost-1vm-func.robot b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip4base-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..32477c02e0
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip4base-eth-2vhost-1vm-func.robot
@@ -0,0 +1,226 @@
+# 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}
diff --git a/tests/func/lisp/ipsec_ipv4_lispgpe_ipv4.robot b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip4base-func.robot
index 18494ab565..f3af311fd0 100644
--- a/tests/func/lisp/ipsec_ipv4_lispgpe_ipv4.robot
+++ b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip4base-func.robot
@@ -42,7 +42,7 @@
| ... | 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.
@@ -57,9 +57,9 @@
*** Variables ***
| ${dut2_spi}= | ${1000}
| ${dut1_spi}= | ${1001}
+
| ${ESP_PROTO}= | ${50}
-| ${sock1}= | /tmp/sock1
-| ${sock2}= | /tmp/sock2
+
| ${bid}= | 10
*** Test Cases ***
@@ -233,107 +233,6 @@
| | ... | ${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]
@@ -373,21 +272,3 @@
| | ... | ${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}
diff --git a/tests/func/lisp/ipsec_ipv6_lispgpe_ipv4.robot b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6base-eth-2vhost-1vm-func.robot
index 2002d9e615..d8bdab78fb 100644
--- a/tests/func/lisp/ipsec_ipv6_lispgpe_ipv4.robot
+++ b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6base-eth-2vhost-1vm-func.robot
@@ -50,85 +50,17 @@
| ...
| ... | *[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\
@@ -170,7 +102,7 @@
| | ... | ${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,\
@@ -215,53 +147,6 @@
| | ... | ${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\
diff --git a/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6base-func.robot b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6base-func.robot
new file mode 100644
index 0000000000..2bc4a2cb93
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6base-func.robot
@@ -0,0 +1,161 @@
+# 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}
diff --git a/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6basevrf-func.robot b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6basevrf-func.robot
new file mode 100644
index 0000000000..06b883281c
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4ipsectptlispgpe-ip6basevrf-func.robot
@@ -0,0 +1,140 @@
+# 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}
diff --git a/tests/func/lisp/dataplane_generic.robot b/tests/func/lisp/eth2p-ethip4lisp-ip4base-func.robot
index 9ab69b2d71..9ab69b2d71 100644
--- a/tests/func/lisp/dataplane_generic.robot
+++ b/tests/func/lisp/eth2p-ethip4lisp-ip4base-func.robot
diff --git a/tests/func/lisp/l2_lisp_ipv4.robot b/tests/func/lisp/eth2p-ethip4lisp-l2bdbasemaclrn-func.robot
index c0a411cc4a..c0a411cc4a 100644
--- a/tests/func/lisp/l2_lisp_ipv4.robot
+++ b/tests/func/lisp/eth2p-ethip4lisp-l2bdbasemaclrn-func.robot
diff --git a/tests/func/lisp/eth2p-ethip4lispgpe-ip4base-eth-2vhost-1vm-func.robot b/tests/func/lisp/eth2p-ethip4lispgpe-ip4base-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..a63925bcd4
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4lispgpe-ip4base-eth-2vhost-1vm-func.robot
@@ -0,0 +1,131 @@
+# 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}
diff --git a/tests/func/lisp/eth2p-ethip4lispgpe-ip4base-func.robot b/tests/func/lisp/eth2p-ethip4lispgpe-ip4base-func.robot
new file mode 100644
index 0000000000..29e58ea005
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4lispgpe-ip4base-func.robot
@@ -0,0 +1,109 @@
+# 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
diff --git a/tests/func/lisp/ipv4_lispgpe_ipv4.robot b/tests/func/lisp/eth2p-ethip4lispgpe-ip4basevrf-eth-2vhost-1vm-func.robot
index 7caba043da..8241d32664 100644
--- a/tests/func/lisp/ipv4_lispgpe_ipv4.robot
+++ b/tests/func/lisp/eth2p-ethip4lispgpe-ip4basevrf-eth-2vhost-1vm-func.robot
@@ -56,139 +56,7 @@
| ... | *[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\
@@ -214,7 +82,7 @@
| | ... | ${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}
diff --git a/tests/func/lisp/eth2p-ethip4lispgpe-ip4basevrf-func.robot b/tests/func/lisp/eth2p-ethip4lispgpe-ip4basevrf-func.robot
new file mode 100644
index 0000000000..0f3b34db2f
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4lispgpe-ip4basevrf-func.robot
@@ -0,0 +1,114 @@
+# 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}
diff --git a/tests/func/lisp/eth2p-ethip4lispgpe-ip6base-eth-2vhost-1vm-func.robot b/tests/func/lisp/eth2p-ethip4lispgpe-ip6base-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..77c0df952e
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4lispgpe-ip6base-eth-2vhost-1vm-func.robot
@@ -0,0 +1,119 @@
+# 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}
diff --git a/tests/func/lisp/eth2p-ethip4lispgpe-ip6base-func.robot b/tests/func/lisp/eth2p-ethip4lispgpe-ip6base-func.robot
new file mode 100644
index 0000000000..b959ff20d0
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4lispgpe-ip6base-func.robot
@@ -0,0 +1,117 @@
+# 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}
diff --git a/tests/func/lisp/eth2p-ethip4lispgpe-ip6basevrf-func.robot b/tests/func/lisp/eth2p-ethip4lispgpe-ip6basevrf-func.robot
new file mode 100644
index 0000000000..41d5dcf8cb
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip4lispgpe-ip6basevrf-func.robot
@@ -0,0 +1,113 @@
+# 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}
diff --git a/tests/func/lisp/ipsec_ipv4_lispgpe_ipv6.robot b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip4base-eth-2vhost-1vm-func.robot
index 71ff7d721b..ae846ad972 100644
--- a/tests/func/lisp/ipsec_ipv4_lispgpe_ipv6.robot
+++ b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip4base-eth-2vhost-1vm-func.robot
@@ -38,91 +38,27 @@
| 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\
@@ -164,7 +100,7 @@
| | ... | ${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,\
diff --git a/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip4base-func.robot b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip4base-func.robot
new file mode 100644
index 0000000000..3af4899e54
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip4base-func.robot
@@ -0,0 +1,155 @@
+# 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}
diff --git a/tests/func/lisp/ipsec_ipv6_lispgpe_ipv6.robot b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip6base-eth-2vhost-1vm-func.robot
index 16af411f70..54091a7c9f 100644
--- a/tests/func/lisp/ipsec_ipv6_lispgpe_ipv6.robot
+++ b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip6base-eth-2vhost-1vm-func.robot
@@ -47,106 +47,27 @@
| ...
| ... | *[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\
@@ -195,7 +116,7 @@
| | ... | ${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,\
diff --git a/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip6base-func.robot b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip6base-func.robot
new file mode 100644
index 0000000000..24860d1e86
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip6ipsectptlispgpe-ip6base-func.robot
@@ -0,0 +1,171 @@
+# 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}
diff --git a/tests/func/lisp/l2_lisp_ipv6.robot b/tests/func/lisp/eth2p-ethip6lisp-l2bdbasemaclrn-func.robot
index 8f421977f1..8f421977f1 100644
--- a/tests/func/lisp/l2_lisp_ipv6.robot
+++ b/tests/func/lisp/eth2p-ethip6lisp-l2bdbasemaclrn-func.robot
diff --git a/tests/func/lisp/ipv6_lispgpe_ipv4.robot b/tests/func/lisp/eth2p-ethip6lispgpe-ip4base-func.robot
index 5a992787a1..5a992787a1 100644
--- a/tests/func/lisp/ipv6_lispgpe_ipv4.robot
+++ b/tests/func/lisp/eth2p-ethip6lispgpe-ip4base-func.robot
diff --git a/tests/func/lisp/eth2p-ethip6lispgpe-ip6base-eth-2vhost-1vm-func.robot b/tests/func/lisp/eth2p-ethip6lispgpe-ip6base-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..1f860074e8
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip6lispgpe-ip6base-eth-2vhost-1vm-func.robot
@@ -0,0 +1,142 @@
+# 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
diff --git a/tests/func/lisp/eth2p-ethip6lispgpe-ip6base-func.robot b/tests/func/lisp/eth2p-ethip6lispgpe-ip6base-func.robot
new file mode 100644
index 0000000000..d70656f316
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip6lispgpe-ip6base-func.robot
@@ -0,0 +1,111 @@
+# 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
diff --git a/tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-eth-2vhost-1vm-func.robot b/tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..0f48e4f74f
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-eth-2vhost-1vm-func.robot
@@ -0,0 +1,148 @@
+# 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
diff --git a/tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-func.robot b/tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-func.robot
new file mode 100644
index 0000000000..5517e62012
--- /dev/null
+++ b/tests/func/lisp/eth2p-ethip6lispgpe-ip6basevrf-func.robot
@@ -0,0 +1,116 @@
+# 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
diff --git a/tests/func/lisp/ipv4_lispgpe_ipv6.robot b/tests/func/lisp/ipv4_lispgpe_ipv6.robot
deleted file mode 100644
index fe92ee0882..0000000000
--- a/tests/func/lisp/ipv4_lispgpe_ipv6.robot
+++ /dev/null
@@ -1,242 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Resource | resources/libraries/robot/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}
diff --git a/tests/func/lisp/ipv6_lispgpe_ipv6.robot b/tests/func/lisp/ipv6_lispgpe_ipv6.robot
deleted file mode 100644
index 8b00eda574..0000000000
--- a/tests/func/lisp/ipv6_lispgpe_ipv6.robot
+++ /dev/null
@@ -1,291 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.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
diff --git a/tests/func/policer/policer_ip4.robot b/tests/func/policer/eth2p-ethip4-ip4base-ipolicemarkbase-func.robot
index 4cb3686788..4cb3686788 100644
--- a/tests/func/policer/policer_ip4.robot
+++ b/tests/func/policer/eth2p-ethip4-ip4base-ipolicemarkbase-func.robot
diff --git a/tests/func/policer/policer_ip6.robot b/tests/func/policer/eth2p-ethip6-ip6base-ipolicemarkbase-func.robot
index 6a7ae1a306..6a7ae1a306 100644
--- a/tests/func/policer/policer_ip6.robot
+++ b/tests/func/policer/eth2p-ethip6-ip6base-ipolicemarkbase-func.robot
diff --git a/tests/func/rpf/ipv4_rpf_untagged.robot b/tests/func/rpf/eth2p-ethip4-ip4base-rpf-func.robot
index 708477a71d..372940dd82 100644
--- a/tests/func/rpf/ipv4_rpf_untagged.robot
+++ b/tests/func/rpf/eth2p-ethip4-ip4base-rpf-func.robot
@@ -29,7 +29,7 @@
| ... | 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.
diff --git a/tests/func/softwire/lightweight_4over6.robot b/tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swirelw46-func.robot
index f96ee19b4e..f96ee19b4e 100644
--- a/tests/func/softwire/lightweight_4over6.robot
+++ b/tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swirelw46-func.robot
diff --git a/tests/func/softwire/map_e.robot b/tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremape-func.robot
index 0ddac51a1b..0ddac51a1b 100644
--- a/tests/func/softwire/map_e.robot
+++ b/tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremape-func.robot
diff --git a/tests/func/softwire/map_t.robot b/tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremapt-func.robot
index 4167ca2bcf..4167ca2bcf 100644
--- a/tests/func/softwire/map_t.robot
+++ b/tests/func/softwire/eth2p-ethip4--ethip6ip4-ip4base--ip6base-swiremapt-func.robot
diff --git a/tests/func/tap/api-crud-tap-func.robot b/tests/func/tap/api-crud-tap-func.robot
new file mode 100644
index 0000000000..762c4e3df2
--- /dev/null
+++ b/tests/func/tap/api-crud-tap-func.robot
@@ -0,0 +1,69 @@
+# 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}
diff --git a/tests/func/tap/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot b/tests/func/tap/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot
new file mode 100644
index 0000000000..6c47c5c574
--- /dev/null
+++ b/tests/func/tap/eth2p-eth-l2bdbasemaclrn-eth-2tap-func.robot
@@ -0,0 +1,92 @@
+# 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}
diff --git a/tests/func/tap/tap_interface.robot b/tests/func/tap/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot
index 2acdad8d37..8620dd05fd 100644
--- a/tests/func/tap/tap_interface.robot
+++ b/tests/func/tap/eth2p-eth-l2bdbasemaclrn-l2shg-eth-2tap-func.robot
@@ -43,19 +43,10 @@
| ... | *[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
@@ -64,126 +55,15 @@
| ${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.
@@ -235,7 +115,7 @@
| | 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.
@@ -288,29 +168,3 @@
| | ... | ${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}
diff --git a/tests/func/tap/eth2p-ethip4-ip4base-eth-1tap-func.robot b/tests/func/tap/eth2p-ethip4-ip4base-eth-1tap-func.robot
new file mode 100644
index 0000000000..bd767e704c
--- /dev/null
+++ b/tests/func/tap/eth2p-ethip4-ip4base-eth-1tap-func.robot
@@ -0,0 +1,123 @@
+# 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}
diff --git a/tests/func/telemetry/ipfix_ipv4.robot b/tests/func/telemetry/ipfix/eth2p-ethip4-ip4base-ip4ipfixbase-func.robot
index 1c85d1f8a4..f3b02722cc 100644
--- a/tests/func/telemetry/ipfix_ipv4.robot
+++ b/tests/func/telemetry/ipfix/eth2p-ethip4-ip4base-ip4ipfixbase-func.robot
@@ -21,8 +21,7 @@
| 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*
@@ -41,7 +40,6 @@
| ${prefix_length}= | 24
| ${ip_version}= | ip4
| ${port}= | 80
-| ${sessions}= | 80
*** Test Cases ***
| TC01: DUT sends IPFIX template and data packets
@@ -199,69 +197,4 @@
| | ... | ${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
diff --git a/tests/func/telemetry/ipfix/eth2p-ethip4-ip4base-ip4ipfixscale-func.robot b/tests/func/telemetry/ipfix/eth2p-ethip4-ip4base-ip4ipfixscale-func.robot
new file mode 100644
index 0000000000..1331f1c883
--- /dev/null
+++ b/tests/func/telemetry/ipfix/eth2p-ethip4-ip4base-ip4ipfixscale-func.robot
@@ -0,0 +1,110 @@
+# 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
diff --git a/tests/func/telemetry/ipfix_ipv6.robot b/tests/func/telemetry/ipfix/eth2p-ethip6-ip6base-ip6ipfixbase-func.robot
index b8310b2a13..8451eb6940 100644
--- a/tests/func/telemetry/ipfix_ipv6.robot
+++ b/tests/func/telemetry/ipfix/eth2p-ethip6-ip6base-ip6ipfixbase-func.robot
@@ -42,7 +42,6 @@
| ${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
@@ -195,80 +194,4 @@
| | ... | ${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
diff --git a/tests/func/telemetry/ipfix/eth2p-ethip6-ip6base-ip6ipfixscale-func.robot b/tests/func/telemetry/ipfix/eth2p-ethip6-ip6base-ip6ipfixscale-func.robot
new file mode 100644
index 0000000000..125e8b92af
--- /dev/null
+++ b/tests/func/telemetry/ipfix/eth2p-ethip6-ip6base-ip6ipfixscale-func.robot
@@ -0,0 +1,126 @@
+# 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
diff --git a/tests/func/telemetry/span.robot b/tests/func/telemetry/span/eth2p-ethip4-ip4base-spanrx-func.robot
index 8a7af5f0d1..62f76d847d 100644
--- a/tests/func/telemetry/span.robot
+++ b/tests/func/telemetry/span/eth2p-ethip4-ip4base-spanrx-func.robot
@@ -36,8 +36,6 @@
*** 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 ***
@@ -80,24 +78,3 @@
| | ... | ${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
diff --git a/tests/func/telemetry/span/eth2p-ethip6-ip6base-spanrx-func.robot b/tests/func/telemetry/span/eth2p-ethip6-ip6base-spanrx-func.robot
new file mode 100644
index 0000000000..5fa7d0c5e4
--- /dev/null
+++ b/tests/func/telemetry/span/eth2p-ethip6-ip6base-spanrx-func.robot
@@ -0,0 +1,61 @@
+# 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
diff --git a/tests/func/vlan/eth2p-dot1ad--dot1q-l2bdbasemaclrn-vlantrans21-func.robot b/tests/func/vlan/eth2p-dot1ad--dot1q-l2bdbasemaclrn-vlantrans21-func.robot
new file mode 100644
index 0000000000..73836c38f0
--- /dev/null
+++ b/tests/func/vlan/eth2p-dot1ad--dot1q-l2bdbasemaclrn-vlantrans21-func.robot
@@ -0,0 +1,221 @@
+# 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}
diff --git a/tests/func/vlan/eth2p-dot1ad--dot1q-l2xcbase-vlantrans21-func.robot b/tests/func/vlan/eth2p-dot1ad--dot1q-l2xcbase-vlantrans21-func.robot
new file mode 100644
index 0000000000..0e2749c5c9
--- /dev/null
+++ b/tests/func/vlan/eth2p-dot1ad--dot1q-l2xcbase-vlantrans21-func.robot
@@ -0,0 +1,189 @@
+# 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}
diff --git a/tests/func/vlan/vlan_tag_translate_l2_bridge_domain_ipv4.robot b/tests/func/vlan/eth2p-dot1ad-l2bdbasemaclrn-vlantrans22-func.robot
index ebde7bf1c1..4efa90d419 100644
--- a/tests/func/vlan/vlan_tag_translate_l2_bridge_domain_ipv4.robot
+++ b/tests/func/vlan/eth2p-dot1ad-l2bdbasemaclrn-vlantrans22-func.robot
@@ -21,20 +21,19 @@
| 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,
@@ -54,104 +53,34 @@
| ${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
@@ -166,34 +95,35 @@
| | 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
@@ -209,33 +139,35 @@
| | ... | ${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
@@ -251,33 +183,35 @@
| | ... | ${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
@@ -293,99 +227,19 @@
| | ... | ${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']}
@@ -414,20 +268,21 @@
| | 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
@@ -458,20 +313,20 @@
| | ... | ${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
@@ -502,20 +357,20 @@
| | ... | ${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
@@ -546,5 +401,5 @@
| | ... | ${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}
diff --git a/tests/func/vlan/qinq_l2_xconnect.robot b/tests/func/vlan/eth2p-dot1ad-l2xcbase-func.robot
index 617447666a..617447666a 100644
--- a/tests/func/vlan/qinq_l2_xconnect.robot
+++ b/tests/func/vlan/eth2p-dot1ad-l2xcbase-func.robot
diff --git a/tests/func/vlan/vlan_tag_translate_l2_xconnect_ipv6.robot b/tests/func/vlan/eth2p-dot1ad-l2xcbase-vlantrans22-func.robot
index 7f61443349..49368ea003 100644
--- a/tests/func/vlan/vlan_tag_translate_l2_xconnect_ipv6.robot
+++ b/tests/func/vlan/eth2p-dot1ad-l2xcbase-vlantrans22-func.robot
@@ -20,22 +20,22 @@
| 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.
@@ -54,90 +54,30 @@
| ${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
@@ -145,34 +85,35 @@
| | ... | ${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
@@ -181,34 +122,35 @@
| | ... | ${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
@@ -217,34 +159,35 @@
| | ... | ${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
@@ -253,78 +196,10 @@
| | ... | ${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
@@ -359,7 +234,7 @@
| | ... | 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
@@ -396,7 +271,7 @@
| | ... | ${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
@@ -433,7 +308,7 @@
| | ... | ${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
diff --git a/tests/func/vlan/vlan_tag_translate_l2_bridge_domain_ipv6.robot b/tests/func/vlan/eth2p-dot1q--dot1ad-l2bdbasemaclrn-vlantrans12-func.robot
index 6e3c76c3b0..3867baa5b4 100644
--- a/tests/func/vlan/vlan_tag_translate_l2_bridge_domain_ipv6.robot
+++ b/tests/func/vlan/eth2p-dot1q--dot1ad-l2bdbasemaclrn-vlantrans12-func.robot
@@ -21,23 +21,23 @@
| 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.
@@ -54,94 +54,19 @@
| ${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
@@ -152,11 +77,11 @@
| | ... | ${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}
@@ -170,19 +95,19 @@
| | 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
@@ -194,7 +119,7 @@
| | ... | ${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}
@@ -213,19 +138,18 @@
| | ... | ${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
@@ -237,11 +161,11 @@
| | ... | ${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}
@@ -256,20 +180,19 @@
| | ... | ${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
@@ -280,7 +203,7 @@
| | ... | ${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}
@@ -299,115 +222,31 @@
| | ... | ${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
@@ -422,36 +261,34 @@
| | 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
@@ -467,35 +304,34 @@
| | ... | ${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
@@ -511,35 +347,34 @@
| | ... | ${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
@@ -555,5 +390,5 @@
| | ... | ${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}
diff --git a/tests/func/vlan/vlan_tag_translate_l2_xconnect_ipv4.robot b/tests/func/vlan/eth2p-dot1q--dot1ad-l2xcbase-vlantrans12-func.robot
index bfca6d8f4a..98f43799c0 100644
--- a/tests/func/vlan/vlan_tag_translate_l2_xconnect_ipv4.robot
+++ b/tests/func/vlan/eth2p-dot1q--dot1ad-l2xcbase-vlantrans12-func.robot
@@ -20,18 +20,19 @@
| 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;
@@ -41,74 +42,20 @@
*** 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.
@@ -127,11 +74,11 @@
| | ... | ${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
@@ -141,7 +88,7 @@
| | ... | ${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.
@@ -162,7 +109,7 @@
| | ... | ${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}
@@ -176,7 +123,7 @@
| | ... | 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.
@@ -197,11 +144,11 @@
| | ... | ${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
@@ -211,7 +158,7 @@
| | ... | 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.
@@ -232,7 +179,7 @@
| | ... | ${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}
@@ -246,97 +193,29 @@
| | ... | 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
@@ -344,35 +223,34 @@
| | ... | ${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
@@ -381,35 +259,34 @@
| | ... | ${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
@@ -418,35 +295,34 @@
| | ... | ${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
@@ -455,5 +331,5 @@
| | ... | ${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}
diff --git a/tests/func/vlan/eth2p-dot1q-l2bdbasemaclrn-vlantrans11-func.robot b/tests/func/vlan/eth2p-dot1q-l2bdbasemaclrn-vlantrans11-func.robot
new file mode 100644
index 0000000000..a0c245e51d
--- /dev/null
+++ b/tests/func/vlan/eth2p-dot1q-l2bdbasemaclrn-vlantrans11-func.robot
@@ -0,0 +1,206 @@
+# 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}
diff --git a/tests/func/vlan/eth2p-dot1q-l2xcbase-vlantrans11-func.robot b/tests/func/vlan/eth2p-dot1q-l2xcbase-vlantrans11-func.robot
new file mode 100644
index 0000000000..91869ba073
--- /dev/null
+++ b/tests/func/vlan/eth2p-dot1q-l2xcbase-vlantrans11-func.robot
@@ -0,0 +1,171 @@
+# 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}
diff --git a/tests/func/vrf/vrf_tests.robot b/tests/func/vrf/eth2p-ethip4-ip4basevrf-func.robot
index 0339573956..7a76a1805c 100644
--- a/tests/func/vrf/vrf_tests.robot
+++ b/tests/func/vrf/eth2p-ethip4-ip4basevrf-func.robot
@@ -29,7 +29,7 @@
| ... | 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
diff --git a/tests/func/vrf/vrf_tests_v6.robot b/tests/func/vrf/eth2p-ethip6-ip6basevrf-func.robot
index b88b6fd577..b88b6fd577 100644
--- a/tests/func/vrf/vrf_tests_v6.robot
+++ b/tests/func/vrf/eth2p-ethip6-ip6basevrf-func.robot
diff --git a/tests/func/vxlan/vxlan_bd_dot1q.robot b/tests/func/vxlan/eth2p-dot1qip4vxlan-l2bdbasemaclrn-func.robot
index 592154845d..592154845d 100644
--- a/tests/func/vxlan/vxlan_bd_dot1q.robot
+++ b/tests/func/vxlan/eth2p-dot1qip4vxlan-l2bdbasemaclrn-func.robot
diff --git a/tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot b/tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..357f339a7c
--- /dev/null
+++ b/tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot
@@ -0,0 +1,119 @@
+# 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
diff --git a/tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-func.robot b/tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-func.robot
new file mode 100644
index 0000000000..543fec22b8
--- /dev/null
+++ b/tests/func/vxlan/eth2p-ethip4vxlan-l2bdbasemaclrn-func.robot
@@ -0,0 +1,78 @@
+# 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}
diff --git a/tests/func/vxlan/vxlan_xconnect_untagged.robot b/tests/func/vxlan/eth2p-ethip4vxlan-l2xcbase-func.robot
index de38c56b2d..de38c56b2d 100644
--- a/tests/func/vxlan/vxlan_xconnect_untagged.robot
+++ b/tests/func/vxlan/eth2p-ethip4vxlan-l2xcbase-func.robot
diff --git a/tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot b/tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot
new file mode 100644
index 0000000000..19846294a3
--- /dev/null
+++ b/tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot
@@ -0,0 +1,120 @@
+# 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
diff --git a/tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-func.robot b/tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-func.robot
new file mode 100644
index 0000000000..23b88d45f2
--- /dev/null
+++ b/tests/func/vxlan/eth2p-ethip6vxlan-l2bdbasemaclrn-func.robot
@@ -0,0 +1,78 @@
+# 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}
diff --git a/tests/func/vxlan/eth4p-ethip4vxlan-l2bdbasemaclrn-l2shg-func.robot b/tests/func/vxlan/eth4p-ethip4vxlan-l2bdbasemaclrn-l2shg-func.robot
new file mode 100644
index 0000000000..8afb22a717
--- /dev/null
+++ b/tests/func/vxlan/eth4p-ethip4vxlan-l2bdbasemaclrn-l2shg-func.robot
@@ -0,0 +1,200 @@
+# 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}
diff --git a/tests/func/vxlan/eth4p-ethip6vxlan-l2bdbasemaclrn-l2shg-func.robot b/tests/func/vxlan/eth4p-ethip6vxlan-l2bdbasemaclrn-l2shg-func.robot
new file mode 100644
index 0000000000..2ed07462cf
--- /dev/null
+++ b/tests/func/vxlan/eth4p-ethip6vxlan-l2bdbasemaclrn-l2shg-func.robot
@@ -0,0 +1,200 @@
+# 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}
diff --git a/tests/func/vxlan/vxlan_bd_untagged.robot b/tests/func/vxlan/vxlan_bd_untagged.robot
deleted file mode 100644
index 0bbe30c1a5..0000000000
--- a/tests/func/vxlan/vxlan_bd_untagged.robot
+++ /dev/null
@@ -1,406 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Resource | resources/libraries/robot/default.robot
-| Resource | resources/libraries/robot/testing_path.robot
-| Resource | resources/libraries/robot/vxlan.robot
-| Resource | resources/libraries/robot/l2_traffic.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
-
-*** 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}