Subnet Routing Support hidden IPv4/IPv6 address
[integration/test.git] / csit / suites / netvirt / vpnservice / vpn_basic_dualstack_subnet_routing.robot
1 *** Settings ***
2 Documentation     Test suite to validate subnet routing functionality for hidden IPv4/IPv6 address in an Openstack
3 ...               integrated environment.
4 ...               The assumption of this suite is that the environment is already configured with the proper
5 ...               integration bridges and vxlan tunnels.
6 Suite Setup       Suite Setup
7 Suite Teardown    Suite Teardown
8 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
9 Test Teardown     OpenStackOperations.Get Test Teardown Debugs
10 Library           Collections
11 Library           OperatingSystem
12 Library           RequestsLibrary
13 Resource          ../../../libraries/DevstackUtils.robot
14 Resource          ../../../libraries/OpenStackOperations.robot
15 Resource          ../../../libraries/OVSDB.robot
16 Resource          ../../../libraries/SetupUtils.robot
17 Resource          ../../../libraries/Tcpdump.robot
18 Resource          ../../../libraries/Utils.robot
19 Resource          ../../../variables/Variables.robot
20 Resource          ../../../variables/netvirt/Variables.robot
21 Resource          ../../../libraries/VpnOperations.robot
22
23 *** Variables ***
24 ${SECURITY_GROUP}    vpndssr_sg
25 @{NETWORKS}       vpndssr_net_1    vpndssr_net_2
26 @{SUBNETS4}       vpndssr_ipv4_sub_1    vpndssr_ipv4_sub_2
27 @{SUBNETS6}       vpndssr_ipv6_sub_1    vpndssr_ipv6_sub_2
28 @{SUBNETS4_CIDR}    30.1.1.0/24    40.1.1.0/24
29 @{SUBNETS6_CIDR}    2001:db5:0:2::/64    2001:db5:0:3::/64
30 ${SUBNET_ADDITIONAL_ARGS}    --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac
31 @{PORTS}          vpndssr_port_1    vpndssr_port_2    vpndssr_port_3    vpndssr_port_4
32 @{NET_1_VMS}      vpndssr_net_1_vm_1    vpndssr_net_1_vm_2
33 @{NET_2_VMS}      vpndssr_net_2_vm_1    vpndssr_net_2_vm_2
34 @{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
35 @{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
36 @{EXTRA_NW_SUBNET_IPv4}    30.1.1.0/24    40.1.1.0/24
37 @{EXTRA_NW_SUBNET_IPv6}    2001:db5:0:2::/64    2001:db5:0:3::/64
38 ${ROUTER}         vpn_router_dualstack_subnet
39 ${UPDATE_NETWORK}    update_network_dualstack_subnet
40 ${UPDATE_SUBNET}    update_subnet_dualstack_subnet
41 ${UPDATE_PORT}    update_port_dualstack_subnet
42 @{VPN_INSTANCE_ID}    1bc8cd92-48ca-49b5-94e1-b2921a261661    1bc8cd92-48ca-49b5-94e1-b2921a261662    1bc8cd92-48ca-49b5-94e1-b2921a261663
43 @{VPN_NAME}       vpn1_dualstack_subnet    vpn2_dualstack_subnet    vpn3_dualstack_subnet
44 @{RDS}            ["2506:2"]    ["2606:2"]    ["2706:2"]
45 ${LOOP_COUNT}     4
46
47 *** Test Cases ***
48 Check ELAN Datapath Traffic Within The Networks
49     [Documentation]    Checks datapath within the same network with different vlans.
50     ${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]
51     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
52     ${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]
53     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
54     ${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]
55     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
56     ${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]
57     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
58
59 Create L3VPN
60     [Documentation]    Create L3VPN
61     ${net_id} =    OpenStackOperations.Get Net Id    @{NETWORKS}[0]
62     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
63     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}
64     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
65     BuiltIn.Should Contain    ${resp}    @{VPN_INSTANCE_ID}[0]
66
67 Associate L3VPN To Routers
68     [Documentation]    Associating router to L3VPN.
69     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
70     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VPN_INSTANCE_ID}[0]
71     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
72     BuiltIn.Should Contain    ${resp}    ${router_id}
73
74 Configure Extra IPv4/IPv6 Addresss On Interface For Subnet Routing
75     [Documentation]    Extra IPv4/IPv6 Address configuration on Interfaces
76     ${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]
77     ${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]
78     : FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
79     \    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
80     : FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
81     \    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
82
83 Verify Data Traffic On Configured Subnet Ipv4/IPv6 Address
84     [Documentation]    Check Dual Stack data path verifcation within and across network.
85     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data Traffic
86     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data Traffic
87
88 Dissociate L3VPN From Routers and verify traffic
89     [Documentation]    Dissociating router from L3VPN and check data path verification
90     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
91     VpnOperations.Dissociate VPN to Router    routerid=${router_id}    vpnid=@{VPN_INSTANCE_ID}[0]
92     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
93     BuiltIn.Should Not Contain    ${resp}    ${router_id}
94     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data No Traffic
95     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data No Traffic
96
97 Associate L3VPN Again To Routers and verify traffic
98     [Documentation]    Associating router to L3VPN and check data path verification
99     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
100     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VPN_INSTANCE_ID}[0]
101     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
102     BuiltIn.Should Contain    ${resp}    ${router_id}
103     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data Traffic
104     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data Traffic
105
106 Delete L3VPN
107     [Documentation]    Delete L3VPN.
108     VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
109
110 *** Keywords ***
111 Suite Setup
112     [Documentation]    Create basic setup for feature.Create two network,subnet,four ports and four VMs
113     VpnOperations.Basic Suite Setup
114     OpenStackOperations.Create Network    @{NETWORKS}[0]
115     OpenStackOperations.Create Network    @{NETWORKS}[1]
116     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${NETWORK_URL}    ${NETWORKS}
117     OpenStackOperations.Update Network    @{NETWORKS}[0]    additional_args=--description ${UPDATE_NETWORK}
118     ${output} =    OpenStackOperations.Show Network    @{NETWORKS}[0]
119     BuiltIn.Should Contain    ${output}    ${UPDATE_NETWORK}
120     OpenStackOperations.Create SubNet    @{NETWORKS}[0]    @{SUBNETS4}[0]    @{SUBNETS4_CIDR}[0]
121     OpenStackOperations.Create SubNet    @{NETWORKS}[0]    @{SUBNETS6}[0]    @{SUBNETS6_CIDR}[0]    ${SUBNET_ADDITIONAL_ARGS}
122     OpenStackOperations.Create SubNet    @{NETWORKS}[1]    @{SUBNETS4}[1]    @{SUBNETS4_CIDR}[1]
123     OpenStackOperations.Create SubNet    @{NETWORKS}[1]    @{SUBNETS6}[1]    @{SUBNETS6_CIDR}[1]    ${SUBNET_ADDITIONAL_ARGS}
124     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${SUBNETWORK_URL}    ${SUBNETS4}
125     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${SUBNETWORK_URL}    ${SUBNETS6}
126     OpenStackOperations.Update SubNet    @{SUBNETS4}[0]    additional_args=--description ${UPDATE_SUBNET}
127     ${output} =    OpenStackOperations.Show SubNet    @{SUBNETS4}[0]
128     BuiltIn.Should Contain    ${output}    ${UPDATE_SUBNET}
129     OpenStackOperations.Create Router    ${ROUTER}
130     @{router_list} =    BuiltIn.Create List    ${ROUTER}
131     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${ROUTER_URL}    ${router_list}
132     : FOR    ${port}    IN    @{SUBNETS4}
133     \    OpenStackOperations.Add Router Interface    ${ROUTER}    ${port}
134     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
135     : FOR    ${port}    IN    @{SUBNETS6}
136     \    OpenStackOperations.Add Router Interface    ${ROUTER}    ${port}
137     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
138     Create Allow All SecurityGroup    ${SECURITY_GROUP}    IPv4    True
139     ${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]
140     ${network_list} =    BuiltIn.Create List    @{NETWORKS}[0]    @{NETWORKS}[0]    @{NETWORKS}[1]    @{NETWORKS}[1]
141     BuiltIn.Set Suite Variable    ${network_list}
142     : FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
143     \    OpenStackOperations.Create Port    @{network_list}[${index}]    @{PORTS}[${index}]    sg=${SECURITY_GROUP}    additional_args=${allowed_address_pairs_args}
144     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${PORT_URL}    ${PORTS}
145     OpenStackOperations.Update Port    @{PORTS}[0]    additional_args=--name ${UPDATE_PORT}
146     ${output} =    Show Port    ${UPDATE_PORT}
147     BuiltIn.Should Contain    ${output}    ${UPDATE_PORT}
148     OpenStackOperations.Update Port    ${UPDATE_PORT}    additional_args=--name @{PORTS}[0]
149     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[0]    @{NET_1_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
150     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[1]    @{NET_1_VMS}[1]    ${OS_CMP2_HOSTNAME}    sg=${SECURITY_GROUP}
151     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[2]    @{NET_2_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
152     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[3]    @{NET_2_VMS}[1]    ${OS_CMP2_HOSTNAME}    sg=${SECURITY_GROUP}
153     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${NETWORKS}    ${SUBNETS4_CIDR}
154     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${NETWORKS}    ${SUBNETS6_CIDR}
155     @{net_1_vm_ipv4}    ${net_1_dhcp_ipv4} =    OpenStackOperations.Get VM IPs    @{NET_1_VMS}
156     @{net_2_vm_ipv4}    ${net_2_dhcp_ipv4} =    OpenStackOperations.Get VM IPs    @{NET_2_VMS}
157     BuiltIn.Should Not Contain    ${net_1_vm_ipv4}    None
158     BuiltIn.Should Not Contain    ${net_2_vm_ipv4}    None
159     BuiltIn.Should Not Contain    ${net_1_dhcp_ipv4}    None
160     BuiltIn.Should Not Contain    ${net_2_dhcp_ipv4}    None
161     BuiltIn.Log    Collect VMs IPv6 addresses
162     ${prefix_net10} =    String.Replace String    @{SUBNETS6_CIDR}[0]    ${IP6_SUBNET_CIDR_SUFFIX}    ${IP6_ADDR_SUFFIX}
163     ${prefix_net20} =    String.Replace String    @{SUBNETS6_CIDR}[1]    ${IP6_SUBNET_CIDR_SUFFIX}    ${IP6_ADDR_SUFFIX}
164     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
165     ...    true    ${NET_1_VMS}    @{NETWORKS}[0]    ${prefix_net10}
166     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
167     ...    true    ${NET_2_VMS}    @{NETWORKS}[1]    ${prefix_net20}
168     ${net_1_vm_ipv6} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    false    ${NET_1_VMS}    @{NETWORKS}[0]    ${prefix_net10}
169     ${net_2_vm_ipv6} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    false    ${NET_2_VMS}    @{NETWORKS}[1]    ${prefix_net20}
170     ${loop_count}    Get Length    ${NET_1_VMS}
171     : FOR    ${index}    IN RANGE    0    ${loop_count}
172     \    ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    @{net_1_vm_ipv6}[${index}]    None
173     \    Run Keyword If    '${status}' == 'FAIL'    Write Commands Until Prompt    nova console-log @{NET_1_VMS}[${index}]    30s
174     \    ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    @{net_2_vm_ipv6}[${index}]    None
175     \    Run Keyword If    '${status}' == 'FAIL'    Write Commands Until Prompt    nova console-log @{NET_2_VMS}[${index}]    30s
176     BuiltIn.Set Suite Variable    ${net_1_vm_ipv4}
177     BuiltIn.Set Suite Variable    ${net_2_vm_ipv4}
178     BuiltIn.Set Suite Variable    ${net_1_vm_ipv6}
179     BuiltIn.Set Suite Variable    ${net_2_vm_ipv6}
180     OpenStackOperations.Show Debugs    @{NET_1_VMS}    @{NET_2_VMS}
181     OpenStackOperations.Get Suite Debugs
182
183 Verify Ipv4 Data Traffic
184     [Documentation]    Check Ipv4 data path verification within and across network
185     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[1]
186     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
187     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[3]
188     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
189     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[2]
190     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
191     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[0]
192     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
193     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[3]
194     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
195     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[2]
196     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
197     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[0]
198     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
199     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[1]
200     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
201     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[2]
202     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
203     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[0]
204     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
205     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[1]
206     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
207     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[3]
208     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
209
210 Verify Ipv4 Data No Traffic
211     [Documentation]    Check Ipv4 data path verification within and across network
212     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[3]
213     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
214     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[2]
215     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
216     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[3]
217     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
218     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[2]
219     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
220     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[0]
221     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
222     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[1]
223     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
224     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[0]
225     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
226     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[1]
227     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
228
229 Verify Ipv6 Data Traffic
230     [Documentation]    Check Ipv6 data path verification within and across network
231     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
232     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
233     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
234     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
235     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
236     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
237     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
238     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
239     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
240     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
241     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
242     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
243     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
244     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
245     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
246     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
247     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
248     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
249     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
250     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
251     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
252     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
253     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
254     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
255
256 Verify Ipv6 Data No Traffic
257     [Documentation]    Check Ipv6 data path verification within and across network
258     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
259     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
260     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
261     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
262     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
263     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
264     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
265     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
266     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
267     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
268     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
269     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
270     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
271     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
272     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
273     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
274
275 Suite Teardown
276     [Documentation]    Delete the setup
277     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
278     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[1]
279     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[2]
280     OpenStackOperations.OpenStack Suite Teardown