Upgrade RF syntax for v3.2 compatibility
[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 @{TABLE_NO_21}    21
47 ${DUMP_FLOWS}     sudo ovs-ofctl dump-flows br-int -O Openflow13
48
49 *** Test Cases ***
50 Check ELAN Datapath Traffic Within The Networks
51     [Documentation]    Checks datapath within the same network with different vlans.
52     ${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]
53     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
54     ${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]
55     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
56     ${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]
57     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
58     ${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]
59     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
60
61 Create L3VPN
62     [Documentation]    Create L3VPN
63     ${net_id} =    OpenStackOperations.Get Net Id    @{NETWORKS}[0]
64     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
65     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}
66     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
67     BuiltIn.Should Contain    ${resp}    @{VPN_INSTANCE_ID}[0]
68
69 Associate L3VPN To Routers
70     [Documentation]    Associating router to L3VPN.
71     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
72     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VPN_INSTANCE_ID}[0]
73     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
74     BuiltIn.Should Contain    ${resp}    ${router_id}
75
76 Configure Extra IPv4/IPv6 Addresss On Interface For Subnet Routing
77     [Documentation]    Extra IPv4/IPv6 Address configuration on Interfaces
78     ${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]
79     ${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]
80     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
81         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
82     END
83     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
84         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
85     END
86     BuiltIn.Set Suite Variable    ${VM_IPV6}
87     BuiltIn.Set Suite Variable    ${VM_IPV4}
88     BuiltIn.Should Not Contain    ${VM_IPV6}    None
89     BuiltIn.Should Not Contain    ${VM_IPV4}    None
90
91 Verify Data Traffic On Configured Subnet Ipv4/IPv6 Address
92     [Documentation]    Check Dual Stack data path verifcation within and across network.
93     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data Traffic
94     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data Traffic
95
96 Dissociate L3VPN From Routers and verify traffic
97     [Documentation]    Dissociating router from L3VPN and check data path verification
98     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
99     VpnOperations.Dissociate VPN to Router    routerid=${router_id}    vpnid=@{VPN_INSTANCE_ID}[0]
100     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
101     BuiltIn.Should Not Contain    ${resp}    ${router_id}
102     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data No Traffic
103     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data No Traffic
104
105 Associate L3VPN Again To Routers and verify traffic
106     [Documentation]    Associating router to L3VPN and check data path verification
107     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
108     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VPN_INSTANCE_ID}[0]
109     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
110     BuiltIn.Should Contain    ${resp}    ${router_id}
111     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data Traffic
112     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data Traffic
113
114 Delete the configured extra IPv4/IPv6 Addresss and verify traffic
115     [Documentation]    Delete IPv4/IPv6 Address configuration on Interfaces and verify traffic
116     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
117         OpenStackOperations.Execute Command on VM Instance    @{network_list}[${index}]    @{VM_IPV6}[${index}]    sudo ip -6 addr del @{EXTRA_NW_IPV6}[${index}]/64 dev eth0
118     END
119     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
120         OpenStackOperations.Execute Command on VM Instance    @{network_list}[${index}]    @{VM_IPV4}[${index}]    sudo ifconfig eth0:1 down
121     END
122     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data No Traffic
123     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data No Traffic
124     BuiltIn.Wait Until Keyword Succeeds    10x    40s    Verify Table 21 for No VPN Routes
125
126 Configure Again Extra IPv4/IPv6 Addresss On Interface For Subnet Routing
127     [Documentation]    Extra IPv4/IPv6 Address configuration on Interfaces
128     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
129         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
130     END
131     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
132         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
133     END
134     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data Traffic
135     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data Traffic
136
137 Remove Interface From Router And Verify Traffic
138     [Documentation]    Remove subnet from router and check data path verification
139     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
140     FOR    ${interface}    IN    @{SUBNETS4}
141         OpenStackOperations.Remove Interface    ${ROUTER}    ${INTERFACE}
142     END
143     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
144     FOR    ${interface}    IN    @{SUBNETS6}
145         OpenStackOperations.Remove Interface    ${ROUTER}    ${INTERFACE}
146     END
147     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
148     FOR    ${interface}    IN    @{SUBNETS4}
149         ${subnet_id} =    OpenStackOperations.Get Subnet Id    ${INTERFACE}
150         BuiltIn.Should Not Contain    ${interface_output}    ${subnet_id}
151     END
152     FOR    ${interface}    IN    @{SUBNETS6}
153         ${subnet_id} =    OpenStackOperations.Get Subnet Id    ${INTERFACE}
154         BuiltIn.Should Not Contain    ${interface_output}    ${subnet_id}
155     END
156     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data No Traffic
157
158 Add Interface To Router And Verify Traffic
159     [Documentation]    Add interface router to again and check data path verification
160     FOR    ${interface}    IN    @{SUBNETS4}
161         OpenStackOperations.Add Router Interface    ${ROUTER}    ${interface}
162     END
163     FOR    ${interface}    IN    @{SUBNETS6}
164         OpenStackOperations.Add Router Interface    ${ROUTER}    ${interface}
165     END
166     BuiltIn.Wait Until Keyword Succeeds    10x    60s    Verify Ipv4 Data Traffic
167     BuiltIn.Wait Until Keyword Succeeds    10x    60s    Verify Ipv6 Data Traffic
168
169 Delete L3VPN
170     [Documentation]    Delete L3VPN.
171     VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
172     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data No Traffic
173     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data No Traffic
174
175 ReCreate L3VPN and associate L3VPN To Routers and verify traffic
176     [Documentation]    Recreate L3VPN and associate L3VPN To Routers and verify ipv4/ipv6 traffic
177     ${net_id} =    OpenStackOperations.Get Net Id    @{NETWORKS}[0]
178     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
179     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}
180     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
181     BuiltIn.Should Contain    ${resp}    @{VPN_INSTANCE_ID}[0]
182     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
183     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VPN_INSTANCE_ID}[0]
184     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
185     BuiltIn.Should Contain    ${resp}    ${router_id}
186     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv4 Data Traffic
187     BuiltIn.Wait Until Keyword Succeeds    10x    30s    Verify Ipv6 Data Traffic
188
189 *** Keywords ***
190 Suite Setup
191     [Documentation]    Create basic setup for feature.Create two network,subnet,four ports and four VMs
192     VpnOperations.Basic Suite Setup
193     OpenStackOperations.Create Network    @{NETWORKS}[0]
194     OpenStackOperations.Create Network    @{NETWORKS}[1]
195     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${NETWORK_URL}    ${NETWORKS}
196     OpenStackOperations.Update Network    @{NETWORKS}[0]    additional_args=--description ${UPDATE_NETWORK}
197     ${output} =    OpenStackOperations.Show Network    @{NETWORKS}[0]
198     BuiltIn.Should Contain    ${output}    ${UPDATE_NETWORK}
199     OpenStackOperations.Create SubNet    @{NETWORKS}[0]    @{SUBNETS4}[0]    @{SUBNETS4_CIDR}[0]
200     OpenStackOperations.Create SubNet    @{NETWORKS}[0]    @{SUBNETS6}[0]    @{SUBNETS6_CIDR}[0]    ${SUBNET_ADDITIONAL_ARGS}
201     OpenStackOperations.Create SubNet    @{NETWORKS}[1]    @{SUBNETS4}[1]    @{SUBNETS4_CIDR}[1]
202     OpenStackOperations.Create SubNet    @{NETWORKS}[1]    @{SUBNETS6}[1]    @{SUBNETS6_CIDR}[1]    ${SUBNET_ADDITIONAL_ARGS}
203     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${SUBNETWORK_URL}    ${SUBNETS4}
204     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${SUBNETWORK_URL}    ${SUBNETS6}
205     OpenStackOperations.Update SubNet    @{SUBNETS4}[0]    additional_args=--description ${UPDATE_SUBNET}
206     ${output} =    OpenStackOperations.Show SubNet    @{SUBNETS4}[0]
207     BuiltIn.Should Contain    ${output}    ${UPDATE_SUBNET}
208     OpenStackOperations.Create Router    ${ROUTER}
209     @{router_list} =    BuiltIn.Create List    ${ROUTER}
210     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${ROUTER_URL}    ${router_list}
211     FOR    ${port}    IN    @{SUBNETS4}
212         OpenStackOperations.Add Router Interface    ${ROUTER}    ${port}
213     END
214     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
215     FOR    ${port}    IN    @{SUBNETS6}
216         OpenStackOperations.Add Router Interface    ${ROUTER}    ${port}
217     END
218     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
219     Create Allow All SecurityGroup    ${SECURITY_GROUP}    IPv4    True
220     ${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]
221     ${network_list} =    BuiltIn.Create List    @{NETWORKS}[0]    @{NETWORKS}[0]    @{NETWORKS}[1]    @{NETWORKS}[1]
222     BuiltIn.Set Suite Variable    ${network_list}
223     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
224         OpenStackOperations.Create Port    @{network_list}[${index}]    @{PORTS}[${index}]    sg=${SECURITY_GROUP}    additional_args=${allowed_address_pairs_args}
225     END
226     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${PORT_URL}    ${PORTS}
227     OpenStackOperations.Update Port    @{PORTS}[0]    additional_args=--name ${UPDATE_PORT}
228     ${output} =    Show Port    ${UPDATE_PORT}
229     BuiltIn.Should Contain    ${output}    ${UPDATE_PORT}
230     OpenStackOperations.Update Port    ${UPDATE_PORT}    additional_args=--name @{PORTS}[0]
231     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[0]    @{NET_1_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
232     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[1]    @{NET_1_VMS}[1]    ${OS_CMP2_HOSTNAME}    sg=${SECURITY_GROUP}
233     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[2]    @{NET_2_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
234     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{PORTS}[3]    @{NET_2_VMS}[1]    ${OS_CMP2_HOSTNAME}    sg=${SECURITY_GROUP}
235     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${NETWORKS}    ${SUBNETS4_CIDR}
236     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${NETWORKS}    ${SUBNETS6_CIDR}
237     @{net_1_vm_ipv4}    ${net_1_dhcp_ipv4} =    OpenStackOperations.Get VM IPs    @{NET_1_VMS}
238     @{net_2_vm_ipv4}    ${net_2_dhcp_ipv4} =    OpenStackOperations.Get VM IPs    @{NET_2_VMS}
239     BuiltIn.Should Not Contain    ${net_1_vm_ipv4}    None
240     BuiltIn.Should Not Contain    ${net_2_vm_ipv4}    None
241     BuiltIn.Should Not Contain    ${net_1_dhcp_ipv4}    None
242     BuiltIn.Should Not Contain    ${net_2_dhcp_ipv4}    None
243     BuiltIn.Log    Collect VMs IPv6 addresses
244     ${prefix_net10} =    String.Replace String    @{SUBNETS6_CIDR}[0]    ${IP6_SUBNET_CIDR_SUFFIX}    ${IP6_ADDR_SUFFIX}
245     ${prefix_net20} =    String.Replace String    @{SUBNETS6_CIDR}[1]    ${IP6_SUBNET_CIDR_SUFFIX}    ${IP6_ADDR_SUFFIX}
246     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
247     ...    true    ${NET_1_VMS}    @{NETWORKS}[0]    ${prefix_net10}
248     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
249     ...    true    ${NET_2_VMS}    @{NETWORKS}[1]    ${prefix_net20}
250     ${net_1_vm_ipv6} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    false    ${NET_1_VMS}    @{NETWORKS}[0]    ${prefix_net10}
251     ${net_2_vm_ipv6} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    false    ${NET_2_VMS}    @{NETWORKS}[1]    ${prefix_net20}
252     ${loop_count}    Get Length    ${NET_1_VMS}
253     FOR    ${index}    IN RANGE    0    ${loop_count}
254         ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${net_1_vm_ipv6}[${index}]    None
255         Run Keyword If    '${status}' == 'FAIL'    Write Commands Until Prompt    nova console-log @{NET_1_VMS}[${index}]    30s
256         ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${net_2_vm_ipv6}[${index}]    None
257         Run Keyword If    '${status}' == 'FAIL'    Write Commands Until Prompt    nova console-log @{NET_2_VMS}[${index}]    30s
258     END
259     BuiltIn.Set Suite Variable    ${net_1_vm_ipv4}
260     BuiltIn.Set Suite Variable    ${net_2_vm_ipv4}
261     BuiltIn.Set Suite Variable    ${net_1_vm_ipv6}
262     BuiltIn.Set Suite Variable    ${net_2_vm_ipv6}
263     OpenStackOperations.Show Debugs    @{NET_1_VMS}    @{NET_2_VMS}
264     OpenStackOperations.Get Suite Debugs
265
266 Verify Ipv4 Data Traffic
267     [Documentation]    Check Ipv4 data path verification within and across network
268     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[1]
269     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
270     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[3]
271     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
272     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[2]
273     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
274     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[0]
275     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
276     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[3]
277     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
278     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[2]
279     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
280     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[0]
281     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
282     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[1]
283     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
284     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[2]
285     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
286     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[0]
287     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
288     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[1]
289     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
290     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[3]
291     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
292
293 Verify Ipv4 Data No Traffic
294     [Documentation]    Check Ipv4 data path verification within and across network
295     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[3]
296     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
297     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[2]
298     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
299     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[3]
300     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
301     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[2]
302     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
303     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[0]
304     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
305     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[0]    ping -c 3 @{EXTRA_NW_IPV4}[1]
306     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
307     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[0]
308     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
309     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv4}[1]    ping -c 3 @{EXTRA_NW_IPV4}[1]
310     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
311
312 Verify Ipv6 Data Traffic
313     [Documentation]    Check Ipv6 data path verification within and across network
314     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
315     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
316     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
317     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
318     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
319     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
320     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
321     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
322     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
323     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
324     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
325     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
326     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
327     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
328     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
329     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
330     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
331     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
332     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
333     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
334     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
335     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
336     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
337     BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
338
339 Verify Ipv6 Data No Traffic
340     [Documentation]    Check Ipv6 data path verification within and across network
341     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
342     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
343     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
344     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
345     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[3]
346     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
347     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{net_1_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[2]
348     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
349     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
350     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
351     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[0]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
352     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
353     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[0]
354     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
355     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{net_2_vm_ipv6}[1]    ping6 -c 3 @{EXTRA_NW_IPV6}[1]
356     BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
357
358 Verify Table 21 for VPN Routes
359     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
360         OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${TABLE_NO_21}    True    ${EMPTY}    ipv6_dst=@{EXTRA_NW_IPV6}[${index}]
361     END
362     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
363         OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${TABLE_NO_21}    True    ${EMPTY}    ipv6_dst=@{EXTRA_NW_IPV4}[${index}]
364     END
365
366 Verify Table 21 for No VPN Routes
367     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
368         OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${TABLE_NO_21}    False    ${EMPTY}    ipv6_dst=@{EXTRA_NW_IPV6}[${index}]
369     END
370     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
371         OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${TABLE_NO_21}    False    ${EMPTY}    ipv6_dst=@{EXTRA_NW_IPV4}[${index}]
372     END
373
374 Suite Teardown
375     [Documentation]    Delete the setup
376     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[0]
377     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[1]
378     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=@{VPN_INSTANCE_ID}[2]
379     OpenStackOperations.OpenStack Suite Teardown