--- /dev/null
+*** Settings ***
+Documentation Test suite to validate subnet routing functionality for hidden IPv4/IPv6 address in an Openstack
+... integrated environment.
+... The assumption of this suite is that the environment is already configured with the proper
+... integration bridges and vxlan tunnels.
+Suite Setup Suite Setup
+Suite Teardown Suite Teardown
+Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown OpenStackOperations.Get Test Teardown Debugs
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Resource ../../../libraries/DevstackUtils.robot
+Resource ../../../libraries/OpenStackOperations.robot
+Resource ../../../libraries/OVSDB.robot
+Resource ../../../libraries/SetupUtils.robot
+Resource ../../../libraries/Tcpdump.robot
+Resource ../../../libraries/Utils.robot
+Resource ../../../variables/Variables.robot
+Resource ../../../variables/netvirt/Variables.robot
+Resource ../../../libraries/VpnOperations.robot
+
+*** Variables ***
+${SECURITY_GROUP} vpndssr_sg
+@{NETWORKS} vpndssr_net_1 vpndssr_net_2
+@{SUBNETS4} vpndssr_ipv4_sub_1 vpndssr_ipv4_sub_2
+@{SUBNETS6} vpndssr_ipv6_sub_1 vpndssr_ipv6_sub_2
+@{SUBNETS4_CIDR} 30.1.1.0/24 40.1.1.0/24
+@{SUBNETS6_CIDR} 2001:db5:0:2::/64 2001:db5:0:3::/64
+${SUBNET_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac
+@{PORTS} vpndssr_port_1 vpndssr_port_2 vpndssr_port_3 vpndssr_port_4
+@{NET_1_VMS} vpndssr_net_1_vm_1 vpndssr_net_1_vm_2
+@{NET_2_VMS} vpndssr_net_2_vm_1 vpndssr_net_2_vm_2
+@{EXTRA_NW_IPV4} 30.1.1.209 30.1.1.210 40.1.1.209 40.1.1.210 40.1.1.211 30.1.1.211
+@{EXTRA_NW_IPV6} 2001:db5:0:2::10 2001:db5:0:2::20 2001:db5:0:3::10 2001:db5:0:3::20 2001:db5:0:3::30 2001:db5:0:2::30
+@{EXTRA_NW_SUBNET_IPv4} 30.1.1.0/24 40.1.1.0/24
+@{EXTRA_NW_SUBNET_IPv6} 2001:db5:0:2::/64 2001:db5:0:3::/64
+${ROUTER} vpn_router_dualstack_subnet
+${UPDATE_NETWORK} update_network_dualstack_subnet
+${UPDATE_SUBNET} update_subnet_dualstack_subnet
+${UPDATE_PORT} update_port_dualstack_subnet
+@{VPN_INSTANCE_ID} 1bc8cd92-48ca-49b5-94e1-b2921a261661 1bc8cd92-48ca-49b5-94e1-b2921a261662 1bc8cd92-48ca-49b5-94e1-b2921a261663
+@{VPN_NAME} vpn1_dualstack_subnet vpn2_dualstack_subnet vpn3_dualstack_subnet
+@{RDS} ["2506:2"] ["2606:2"] ["2706:2"]
+${LOOP_COUNT} 4
+
+*** Test Cases ***
+Check ELAN Datapath Traffic Within The Networks
+ [Documentation] Checks datapath within the same network with different vlans.
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[0] ping -I @{net_1_vm_ipv4}[0] -c 3 @{net_1_vm_ipv4}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[0] ping6 -I @{net_1_vm_ipv6}[0] -c 3 @{net_1_vm_ipv6}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[0] ping -I @{net_2_vm_ipv4}[0] -c 3 @{net_2_vm_ipv4}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[0] ping6 -I @{net_2_vm_ipv6}[0] -c 3 @{net_2_vm_ipv6}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+
+Create L3VPN
+ [Documentation] Create L3VPN
+ ${net_id} = OpenStackOperations.Get Net Id @{NETWORKS}[0]
+ ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
+ VpnOperations.VPN Create L3VPN vpnid=@{VPN_INSTANCE_ID}[0] name=@{VPN_NAME}[0] rd=@{RDS}[0] exportrt=@{RDS}[0] importrt=@{RDS}[0] tenantid=${tenant_id}
+ ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_ID}[0]
+ BuiltIn.Should Contain ${resp} @{VPN_INSTANCE_ID}[0]
+
+Associate L3VPN To Routers
+ [Documentation] Associating router to L3VPN.
+ ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
+ VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VPN_INSTANCE_ID}[0]
+ ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_ID}[0]
+ BuiltIn.Should Contain ${resp} ${router_id}
+
+Configure Extra IPv4/IPv6 Addresss On Interface For Subnet Routing
+ [Documentation] Extra IPv4/IPv6 Address configuration on Interfaces
+ ${vm_ipv6} = BuiltIn.Create List @{net_1_vm_ipv6}[0] @{net_1_vm_ipv6}[1] @{net_2_vm_ipv6}[0] @{net_2_vm_ipv6}[1]
+ ${vm_ipv4} = BuiltIn.Create List @{net_1_vm_ipv4}[0] @{net_1_vm_ipv4}[1] @{net_2_vm_ipv4}[0] @{net_2_vm_ipv4}[1]
+ : FOR ${index} IN RANGE 0 ${LOOP_COUNT}
+ \ OpenStackOperations.Execute Command on VM Instance @{network_list}[${index}] @{vm_ipv6}[${index}] sudo ip -6 addr add @{EXTRA_NW_IPV6}[${index}]/64 dev eth0; sudo ifconfig eth0 allmulti; ip -6 a
+ : FOR ${index} IN RANGE 0 ${LOOP_COUNT}
+ \ OpenStackOperations.Execute Command on VM Instance @{network_list}[${index}] @{vm_ipv4}[${index}] sudo ifconfig eth0:1 @{EXTRA_NW_IPV4}[${index}] netmask 255.255.255.0 up; ip a
+
+Verify Data Traffic On Configured Subnet Ipv4/IPv6 Address
+ [Documentation] Check Dual Stack data path verifcation within and across network.
+ BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data Traffic
+ BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data Traffic
+
+Dissociate L3VPN From Routers and verify traffic
+ [Documentation] Dissociating router from L3VPN and check data path verification
+ ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
+ VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=@{VPN_INSTANCE_ID}[0]
+ ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_ID}[0]
+ BuiltIn.Should Not Contain ${resp} ${router_id}
+ BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data No Traffic
+ BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data No Traffic
+
+Associate L3VPN Again To Routers and verify traffic
+ [Documentation] Associating router to L3VPN and check data path verification
+ ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
+ VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VPN_INSTANCE_ID}[0]
+ ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_ID}[0]
+ BuiltIn.Should Contain ${resp} ${router_id}
+ BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data Traffic
+ BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data Traffic
+
+Delete L3VPN
+ [Documentation] Delete L3VPN.
+ VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_ID}[0]
+
+*** Keywords ***
+Suite Setup
+ [Documentation] Create basic setup for feature.Create two network,subnet,four ports and four VMs
+ VpnOperations.Basic Suite Setup
+ OpenStackOperations.Create Network @{NETWORKS}[0]
+ OpenStackOperations.Create Network @{NETWORKS}[1]
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
+ OpenStackOperations.Update Network @{NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
+ ${output} = OpenStackOperations.Show Network @{NETWORKS}[0]
+ BuiltIn.Should Contain ${output} ${UPDATE_NETWORK}
+ OpenStackOperations.Create SubNet @{NETWORKS}[0] @{SUBNETS4}[0] @{SUBNETS4_CIDR}[0]
+ OpenStackOperations.Create SubNet @{NETWORKS}[0] @{SUBNETS6}[0] @{SUBNETS6_CIDR}[0] ${SUBNET_ADDITIONAL_ARGS}
+ OpenStackOperations.Create SubNet @{NETWORKS}[1] @{SUBNETS4}[1] @{SUBNETS4_CIDR}[1]
+ OpenStackOperations.Create SubNet @{NETWORKS}[1] @{SUBNETS6}[1] @{SUBNETS6_CIDR}[1] ${SUBNET_ADDITIONAL_ARGS}
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${SUBNETWORK_URL} ${SUBNETS4}
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${SUBNETWORK_URL} ${SUBNETS6}
+ OpenStackOperations.Update SubNet @{SUBNETS4}[0] additional_args=--description ${UPDATE_SUBNET}
+ ${output} = OpenStackOperations.Show SubNet @{SUBNETS4}[0]
+ BuiltIn.Should Contain ${output} ${UPDATE_SUBNET}
+ OpenStackOperations.Create Router ${ROUTER}
+ @{router_list} = BuiltIn.Create List ${ROUTER}
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${ROUTER_URL} ${router_list}
+ : FOR ${port} IN @{SUBNETS4}
+ \ OpenStackOperations.Add Router Interface ${ROUTER} ${port}
+ ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
+ : FOR ${port} IN @{SUBNETS6}
+ \ OpenStackOperations.Add Router Interface ${ROUTER} ${port}
+ ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
+ Create Allow All SecurityGroup ${SECURITY_GROUP} IPv4 True
+ ${allowed_address_pairs_args} = BuiltIn.Set Variable --allowed-address ip-address=@{EXTRA_NW_SUBNET_IPV4}[0] --allowed-address ip-address=@{EXTRA_NW_SUBNET_IPV4}[1] --allowed-address ip-address=@{EXTRA_NW_SUBNET_IPV6}[0] --allowed-address ip-address=@{EXTRA_NW_SUBNET_IPV6}[1]
+ ${network_list} = BuiltIn.Create List @{NETWORKS}[0] @{NETWORKS}[0] @{NETWORKS}[1] @{NETWORKS}[1]
+ BuiltIn.Set Suite Variable ${network_list}
+ : FOR ${index} IN RANGE 0 ${LOOP_COUNT}
+ \ OpenStackOperations.Create Port @{network_list}[${index}] @{PORTS}[${index}] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${PORTS}
+ OpenStackOperations.Update Port @{PORTS}[0] additional_args=--name ${UPDATE_PORT}
+ ${output} = Show Port ${UPDATE_PORT}
+ BuiltIn.Should Contain ${output} ${UPDATE_PORT}
+ OpenStackOperations.Update Port ${UPDATE_PORT} additional_args=--name @{PORTS}[0]
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[0] @{NET_1_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[1] @{NET_1_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[2] @{NET_2_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[3] @{NET_2_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
+ BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${NETWORKS} ${SUBNETS4_CIDR}
+ BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${NETWORKS} ${SUBNETS6_CIDR}
+ @{net_1_vm_ipv4} ${net_1_dhcp_ipv4} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
+ @{net_2_vm_ipv4} ${net_2_dhcp_ipv4} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
+ BuiltIn.Should Not Contain ${net_1_vm_ipv4} None
+ BuiltIn.Should Not Contain ${net_2_vm_ipv4} None
+ BuiltIn.Should Not Contain ${net_1_dhcp_ipv4} None
+ BuiltIn.Should Not Contain ${net_2_dhcp_ipv4} None
+ BuiltIn.Log Collect VMs IPv6 addresses
+ ${prefix_net10} = String.Replace String @{SUBNETS6_CIDR}[0] ${IP6_SUBNET_CIDR_SUFFIX} ${IP6_ADDR_SUFFIX}
+ ${prefix_net20} = String.Replace String @{SUBNETS6_CIDR}[1] ${IP6_SUBNET_CIDR_SUFFIX} ${IP6_ADDR_SUFFIX}
+ ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
+ ... true ${NET_1_VMS} @{NETWORKS}[0] ${prefix_net10}
+ ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
+ ... true ${NET_2_VMS} @{NETWORKS}[1] ${prefix_net20}
+ ${net_1_vm_ipv6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses false ${NET_1_VMS} @{NETWORKS}[0] ${prefix_net10}
+ ${net_2_vm_ipv6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses false ${NET_2_VMS} @{NETWORKS}[1] ${prefix_net20}
+ ${loop_count} Get Length ${NET_1_VMS}
+ : FOR ${index} IN RANGE 0 ${loop_count}
+ \ ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain @{net_1_vm_ipv6}[${index}] None
+ \ Run Keyword If '${status}' == 'FAIL' Write Commands Until Prompt nova console-log @{NET_1_VMS}[${index}] 30s
+ \ ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain @{net_2_vm_ipv6}[${index}] None
+ \ Run Keyword If '${status}' == 'FAIL' Write Commands Until Prompt nova console-log @{NET_2_VMS}[${index}] 30s
+ BuiltIn.Set Suite Variable ${net_1_vm_ipv4}
+ BuiltIn.Set Suite Variable ${net_2_vm_ipv4}
+ BuiltIn.Set Suite Variable ${net_1_vm_ipv6}
+ BuiltIn.Set Suite Variable ${net_2_vm_ipv6}
+ OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
+ OpenStackOperations.Get Suite Debugs
+
+Verify Ipv4 Data Traffic
+ [Documentation] Check Ipv4 data path verification within and across network
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[3]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[2]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[0]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[3]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[2]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[0]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[2]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[0]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[3]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+
+Verify Ipv4 Data No Traffic
+ [Documentation] Check Ipv4 data path verification within and across network
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[3]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[2]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[3]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[2]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[0]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[0] ping -c 3 @{EXTRA_NW_IPV4}[1]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[0]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv4}[1] ping -c 3 @{EXTRA_NW_IPV4}[1]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+
+Verify Ipv6 Data Traffic
+ [Documentation] Check Ipv6 data path verification within and across network
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[3]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[2]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[0]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[3]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[2]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[0]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[2]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[0]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[1]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[3]
+ BuiltIn.Should Contain ${output} ${PING_REGEXP}
+
+Verify Ipv6 Data No Traffic
+ [Documentation] Check Ipv6 data path verification within and across network
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[3]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[2]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[3]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{net_1_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[2]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[0]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[0] ping6 -c 3 @{EXTRA_NW_IPV6}[1]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[0]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+ ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{net_2_vm_ipv6}[1] ping6 -c 3 @{EXTRA_NW_IPV6}[1]
+ BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
+
+Suite Teardown
+ [Documentation] Delete the setup
+ BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_ID}[0]
+ BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_ID}[1]
+ BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_ID}[2]
+ OpenStackOperations.OpenStack Suite Teardown