2 Documentation Test Suite for vni-based-l2-l3-nat:
3 ... This feature attempts to realize the use of VxLAN VNI
4 ... (Virtual Network Identifier) for VxLAN tenant traffic
5 ... flowing on the cloud data-network. This is applicable
6 ... to L2 switching, L3 forwarding and NATing for all VxLAN
7 ... based provider networks. In doing so, it eliminates the
8 ... presence of LPort tags, ELAN tags and MPLS labels on the
9 ... wire and instead, replaces them with VNIs supplied by the
10 ... tenant’s OpenStack.
11 Suite Setup Suite Setup
12 Suite Teardown Suite Teardown
13 Test Setup VpnOperations.VNI Test Setup
14 Test Teardown VpnOperations.VNI Test Teardown
15 Library OperatingSystem
16 Library RequestsLibrary
18 Resource ../../../libraries/DevstackUtils.robot
19 Resource ../../../libraries/KarafKeywords.robot
20 Resource ../../../variables/netvirt/Variables.robot
21 Resource ../../../libraries/OpenStackOperations.robot
22 Resource ../../../libraries/OVSDB.robot
23 Resource ../../../libraries/SetupUtils.robot
24 Resource ../../../libraries/Utils.robot
25 Resource ../../../libraries/VpnOperations.robot
26 Resource ../../../variables/netvirt/Variables.robot
27 Resource ../../../variables/Variables.robot
33 ${VNI6_SECURITY_GROUP} vni6_sg
34 @{VNI6_NETWORKS} vni6_net_0 vni6_net_1 vni6_net_2 vni6_net_3
35 @{VNI6_SUBNETS} vni6_sub_0 vni6_sub_1 vni6_sub_2 vni6_sub_3
36 @{VNI6_SUBNET_CIDRS} 2001:db8:0:4::/64 2001:db8:0:5::/64 2001:db8:0:6::/64 2001:db8:0:7::/64
37 @{VNI6_NET_0_PORTS} vni6_net_0_port_1 vni6_net_0_port_2
38 @{VNI6_NET_1_PORTS} vni6_net_1_port_1 vni6_net_1_port_2
39 @{VNI6_NET_2_PORTS} vni6_net_2_port_1 vni6_net_2_port_2
40 @{VNI6_NET_3_PORTS} vni6_net_3_port_1 vni6_net_3_port_2
41 @{VNI6_NET_0_VMS} vni6_net_0_vm_1
42 @{VNI6_NET_1_VMS} vni6_net_1_vm_1
43 @{VNI6_NET_2_VMS} vni6_net_2_vm_1
44 @{VNI6_NET_3_VMS} vni6_net_3_vm_1
45 @{VNI6_ROUTER} vni6_router1 vni6_router2 vni6_router3
46 @{VNI6_RDS} ["2600:2"] ["2700:2"] ["2800:2"]
47 @{VNI6_VPN_NAMES} VNI6_vpn_1 VNI6_vpn_2 VNI6_vpn_3
48 @{VNI6_VPN_INSTANCE_IDS} 4ae8cd92-48ca-49b5-94e1-b2921a261551 4ae8cd92-48ca-49b5-94e1-b2921a261552 4ae8cd92-48ca-49b5-94e1-b2921a261553
49 ${NET0_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:4::2,end=2001:db8:0:4:ffff:ffff:ffff:fffe
50 ${NET1_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:5::2,end=2001:db8:0:5:ffff:ffff:ffff:fffe
51 ${NET2_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:6::2,end=2001:db8:0:6:ffff:ffff:ffff:fffe
52 ${NET3_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:7::2,end=2001:db8:0:7:ffff:ffff:ffff:fffe
55 VNI Based IPv6 Forwarding
56 [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
57 BuiltIn.Pass Execution If "${OS_DEPLOY}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
58 BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Segmentation Id and Tunnel Id @{VNI6_NET_0_PORTS}[0] @{VNI6_NET_1_PORTS}[0] @{VNI6_NETWORKS}[0]
59 ... @{VNI6_NETWORKS}[1] @{VM_IP_NET0}[0] @{VM_IP_NET1}[0] ${IP}
61 VNI Based IPv6 Forwarding With BGPVPN Router Association
62 [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
63 ... With Router associated to a BGPVPN.
64 BuiltIn.Pass Execution If "${OS_DEPLOY}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
65 ${net_id} = OpenStackOperations.Get Net Id @{VNI6_NETWORKS}[0]
66 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
67 VpnOperations.VPN Create L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0] name=@{VNI6_VPN_NAMES}[0] rd=@{VNI6_RDS}[0] exportrt=@{VNI6_RDS}[0] importrt=@{VNI6_RDS}[0] tenantid=${tenant_id}
68 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
69 BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[0]
70 ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[0]
71 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
72 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
73 BuiltIn.Should Contain ${resp} ${router_id}
74 BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Segmentation Id and Tunnel Id @{VNI6_NET_0_PORTS}[0] @{VNI6_NET_1_PORTS}[0] @{VNI6_NETWORKS}[0]
75 ... @{VNI6_NETWORKS}[1] @{VM_IP_NET0}[0] @{VM_IP_NET1}[0] ${IP}
77 VNI Based IPv6 Forwarding With Two Routers And BGPVPN With Irt Ert
78 [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
79 ... With Two Routers each associated to a BGPVPN and The Two BGPVPN is connected with irt and ert.
80 BuiltIn.Pass Execution If "${OS_DEPLOY}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
81 OpenStackOperations.Create Network @{VNI6_NETWORKS}[2]
82 OpenStackOperations.Create Network @{VNI6_NETWORKS}[3]
83 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[2] @{VNI6_SUBNETS}[2] @{VNI6_SUBNET_CIDRS}[2] ${NET2_ADDITIONAL_ARGS}
84 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[3] @{VNI6_SUBNETS}[3] @{VNI6_SUBNET_CIDRS}[3] ${NET3_ADDITIONAL_ARGS}
85 OpenStackOperations.Create Port @{VNI6_NETWORKS}[2] @{VNI6_NET_2_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
86 OpenStackOperations.Create Port @{VNI6_NETWORKS}[3] @{VNI6_NET_3_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
87 OpenStackOperations.Create Router @{VNI6_ROUTER}[1]
88 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[1] @{VNI6_SUBNETS}[2]
89 OpenStackOperations.Create Router @{VNI6_ROUTER}[2]
90 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[2] @{VNI6_SUBNETS}[3]
91 ${net_id} = OpenStackOperations.Get Net Id @{VNI6_NETWORKS}[2]
92 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
93 VpnOperations.VPN Create L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1] name=@{VNI6_VPN_NAMES}[1] rd=@{VNI6_RDS}[1] exportrt=@{VNI6_RDS}[1] importrt=@{VNI6_RDS}[2] tenantid=${tenant_id}
94 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
95 BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[1]
96 ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[1]
97 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
98 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
99 BuiltIn.Should Contain ${resp} ${router_id}
100 VpnOperations.VPN Create L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2] name=@{VNI6_VPN_NAMES}[2] rd=@{VNI6_RDS}[2] exportrt=@{VNI6_RDS}[2] importrt=@{VNI6_RDS}[1] tenantid=${tenant_id}
101 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
102 BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[2]
103 ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[2]
104 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
105 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
106 BuiltIn.Should Contain ${resp} ${router_id}
107 OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_2_PORTS}[0] @{VNI6_NET_2_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${VNI6_SECURITY_GROUP}
108 OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_3_PORTS}[0] @{VNI6_NET_3_VMS}[0] ${OS_CMP2_HOSTNAME} sg=${VNI6_SECURITY_GROUP}
109 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_2_VMS}[0]
110 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_3_VMS}[0]
111 @{networks} = BuiltIn.Create List @{VNI6_NETWORKS}[2] @{VNI6_NETWORKS}[3]
112 @{subnet_cidrs} = BuiltIn.Create List @{VNI6_SUBNET_CIDRS}[2] @{VNI6_SUBNET_CIDRS}[3]
113 BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${networks} ${subnet_cidrs}
114 ${prefix_net2} = String.Replace String @{VNI6_SUBNET_CIDRS}[2] ::/64 (:[a-f0-9]{,4}){,4}
115 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
116 ... fail_on_none=true vm_list=${VNI6_NET_2_VMS} network=@{VNI6_NETWORKS}[2] subnet=${prefix_net2}
117 ${prefix_net3} = String.Replace String @{VNI6_SUBNET_CIDRS}[3] ::/64 (:[a-f0-9]{,4}){,4}
118 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
119 ... fail_on_none=true vm_list=${VNI6_NET_3_VMS} network=@{VNI6_NETWORKS}[3] subnet=${prefix_net3}
120 ${VM_IP_NET2} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_2_VMS} network=@{VNI6_NETWORKS}[2] subnet=${prefix_net2}
121 ${VM_IP_NET3} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_3_VMS} network=@{VNI6_NETWORKS}[3] subnet=${prefix_net3}
122 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET2} None
123 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_2_VMS}[0] 30s
124 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET3} None
125 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_3_VMS}[0] 30s
126 OpenStackOperations.Copy DHCP Files From Control Node
127 BuiltIn.Should Not Contain ${VM_IP_NET2} None
128 BuiltIn.Should Not Contain ${VM_IP_NET3} None
129 BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Segmentation Id and Tunnel Id @{VNI6_NET_2_PORTS}[0] @{VNI6_NET_3_PORTS}[0] @{VNI6_NETWORKS}[2]
130 ... @{VNI6_NETWORKS}[3] @{VM_IP_NET2}[0] @{VM_IP_NET3}[0] ${IP}
134 [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
135 ... Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1
136 BuiltIn.Return From Keyword If "${OS_DEPLOY}" == "1cmb-0ctl-0cmp"
137 VpnOperations.Basic Suite Setup
138 OpenStackOperations.Create Allow All SecurityGroup ${VNI6_SECURITY_GROUP} IPv6
139 OpenStackOperations.Create Network @{VNI6_NETWORKS}[0]
140 OpenStackOperations.Create Network @{VNI6_NETWORKS}[1]
141 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[0] @{VNI6_SUBNETS}[0] @{VNI6_SUBNET_CIDRS}[0] ${NET0_ADDITIONAL_ARGS}
142 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[1] @{VNI6_SUBNETS}[1] @{VNI6_SUBNET_CIDRS}[1] ${NET1_ADDITIONAL_ARGS}
143 OpenStackOperations.Create Port @{VNI6_NETWORKS}[0] @{VNI6_NET_0_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
144 OpenStackOperations.Create Port @{VNI6_NETWORKS}[1] @{VNI6_NET_1_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
145 OpenStackOperations.Create Router @{VNI6_ROUTER}[0]
146 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[0] @{VNI6_SUBNETS}[0]
147 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[0] @{VNI6_SUBNETS}[1]
148 ${interface_output} = OpenStackOperations.Show Router Interface @{VNI6_ROUTER}[0]
149 ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address @{VNI6_ROUTER}[0]
150 BuiltIn.Set Suite Variable ${GWMAC_ADDRS}
151 BuiltIn.Set Suite Variable ${GWIP_ADDRS}
152 ${router_list} = BuiltIn.Create List @{VNI6_ROUTER}[0]
153 OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_0_PORTS}[0] @{VNI6_NET_0_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${VNI6_SECURITY_GROUP}
154 OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_1_PORTS}[0] @{VNI6_NET_1_VMS}[0] ${OS_CMP2_HOSTNAME} sg=${VNI6_SECURITY_GROUP}
155 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_0_VMS}[0]
156 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_1_VMS}[0]
157 @{networks} = BuiltIn.Create List @{VNI6_NETWORKS}[0] @{VNI6_NETWORKS}[1]
158 @{subnet_cidrs} = BuiltIn.Create List @{VNI6_SUBNET_CIDRS}[0] @{VNI6_SUBNET_CIDRS}[1]
159 BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${networks} ${subnet_cidrs}
160 ${prefix_net0} = Replace String @{VNI6_SUBNET_CIDRS}[0] ::/64 (:[a-f0-9]{,4}){,4}
161 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
162 ... fail_on_none=true vm_list=${VNI6_NET_0_VMS} network=@{VNI6_NETWORKS}[0] subnet=${prefix_net0}
163 ${prefix_net1} = Replace String @{VNI6_SUBNET_CIDRS}[1] ::/64 (:[a-f0-9]{,4}){,4}
164 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
165 ... fail_on_none=true vm_list=${VNI6_NET_1_VMS} network=@{VNI6_NETWORKS}[1] subnet=${prefix_net1}
166 ${VM_IP_NET0} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_0_VMS} network=@{VNI6_NETWORKS}[0] subnet=${prefix_net0}
167 ${VM_IP_NET1} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_1_VMS} network=@{VNI6_NETWORKS}[1] subnet=${prefix_net1}
168 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET0} None
169 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_0_VMS}[0] 30s
170 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET1} None
171 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_1_VMS}[0] 30s
172 OpenStackOperations.Copy DHCP Files From Control Node
173 BuiltIn.Set Suite Variable ${VM_IP_NET0}
174 BuiltIn.Set Suite Variable ${VM_IP_NET1}
175 BuiltIn.Should Not Contain ${VM_IP_NET0} None
176 BuiltIn.Should Not Contain ${VM_IP_NET1} None
177 OpenStackOperations.Show Debugs @{VNI6_NET_0_VMS} @{VNI6_NET_1_VMS}
178 OpenStackOperations.Get Suite Debugs
181 BuiltIn.Return From Keyword If "${OS_DEPLOY}" == "1cmb-0ctl-0cmp"
182 OpenStackOperations.OpenStack Suite Teardown