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 Start Suite
12 Suite Teardown OpenStackOperations.OpenStack Suite Teardown
13 Test Setup Run Keywords OpenStackOperations.Get DumpFlows And Ovsconfig ${OS_CMP1_CONN_ID}
14 ... AND OpenStackOperations.Get DumpFlows And Ovsconfig ${OS_CMP2_CONN_ID}
15 Test Teardown OpenStackOperations.Get Test Teardown Debugs
16 Library OperatingSystem
17 Library RequestsLibrary
19 Resource ../../../libraries/DevstackUtils.robot
20 Resource ../../../libraries/KarafKeywords.robot
21 Resource ../../../variables/netvirt/Variables.robot
22 Resource ../../../libraries/OpenStackOperations.robot
23 Resource ../../../libraries/OVSDB.robot
24 Resource ../../../libraries/SetupUtils.robot
25 Resource ../../../libraries/Utils.robot
26 Resource ../../../libraries/VpnOperations.robot
27 Resource ../../../variables/netvirt/Variables.robot
28 Resource ../../../variables/Variables.robot
34 ${VNI6_SECURITY_GROUP} vni6_sg
35 @{VNI6_NETWORKS} vni6_net_0 vni6_net_1 vni6_net_2 vni6_net_3
36 @{VNI6_SUBNETS} vni6_sub_0 vni6_sub_1 vni6_sub_2 vni6_sub_3
37 @{VNI6_SUBNET_CIDRS} 2001:db8:0:4::/64 2001:db8:0:5::/64 2001:db8:0:6::/64 2001:db8:0:7::/64
38 @{VNI6_NET_0_PORTS} vni6_net_0_port_1 vni6_net_0_port_2
39 @{VNI6_NET_1_PORTS} vni6_net_1_port_1 vni6_net_1_port_2
40 @{VNI6_NET_2_PORTS} vni6_net_2_port_1 vni6_net_2_port_2
41 @{VNI6_NET_3_PORTS} vni6_net_3_port_1 vni6_net_3_port_2
42 @{VNI6_NET_0_VMS} vni6_net_0_vm_1
43 @{VNI6_NET_1_VMS} vni6_net_1_vm_1
44 @{VNI6_NET_2_VMS} vni6_net_2_vm_1
45 @{VNI6_NET_3_VMS} vni6_net_3_vm_1
46 @{VNI6_ROUTER} vni6_router1 vni6_router2 vni6_router3
47 @{VNI6_RDS} ["2600:2"] ["2700:2"] ["2800:2"]
48 @{VNI6_VPN_NAMES} VNI6_vpn_1 VNI6_vpn_2 VNI6_vpn_3
49 @{VNI6_VPN_INSTANCE_IDS} 4ae8cd92-48ca-49b5-94e1-b2921a261551 4ae8cd92-48ca-49b5-94e1-b2921a261552 4ae8cd92-48ca-49b5-94e1-b2921a261553
50 ${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
51 ${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
52 ${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
53 ${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
56 VNI Based IPv6 Forwarding
57 [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
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 ${net_id} = OpenStackOperations.Get Net Id @{VNI6_NETWORKS}[0]
65 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
66 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}
67 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
68 BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[0]
69 ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[0]
70 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
71 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
72 BuiltIn.Should Contain ${resp} ${router_id}
73 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]
74 ... @{VNI6_NETWORKS}[1] @{VM_IP_NET0}[0] @{VM_IP_NET1}[0] ${IP}
76 VNI Based IPv6 Forwarding With Two Routers And BGPVPN With Irt Ert
77 [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
78 ... With Two Routers each associated to a BGPVPN and The Two BGPVPN is connected with irt and ert.
79 OpenStackOperations.Create Network @{VNI6_NETWORKS}[2]
80 OpenStackOperations.Create Network @{VNI6_NETWORKS}[3]
81 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[2] @{VNI6_SUBNETS}[2] @{VNI6_SUBNET_CIDRS}[2] ${NET2_ADDITIONAL_ARGS}
82 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[3] @{VNI6_SUBNETS}[3] @{VNI6_SUBNET_CIDRS}[3] ${NET3_ADDITIONAL_ARGS}
83 OpenStackOperations.Create Port @{VNI6_NETWORKS}[2] @{VNI6_NET_2_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
84 OpenStackOperations.Create Port @{VNI6_NETWORKS}[3] @{VNI6_NET_3_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
85 OpenStackOperations.Create Router @{VNI6_ROUTER}[1]
86 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[1] @{VNI6_SUBNETS}[2]
87 OpenStackOperations.Create Router @{VNI6_ROUTER}[2]
88 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[2] @{VNI6_SUBNETS}[3]
89 ${net_id} = OpenStackOperations.Get Net Id @{VNI6_NETWORKS}[2]
90 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
91 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}
92 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
93 BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[1]
94 ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[1]
95 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
96 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
97 BuiltIn.Should Contain ${resp} ${router_id}
98 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}
99 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
100 BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[2]
101 ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[2]
102 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
103 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
104 BuiltIn.Should Contain ${resp} ${router_id}
105 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}
106 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}
107 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_2_VMS}[0]
108 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_3_VMS}[0]
109 @{networks} = BuiltIn.Create List @{VNI6_NETWORKS}[2] @{VNI6_NETWORKS}[3]
110 @{subnet_cidrs} = BuiltIn.Create List @{VNI6_SUBNET_CIDRS}[2] @{VNI6_SUBNET_CIDRS}[3]
111 BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${networks} ${subnet_cidrs}
112 ${prefix_net2} = String.Replace String @{VNI6_SUBNET_CIDRS}[2] ::/64 (:[a-f0-9]{,4}){,4}
113 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
114 ... fail_on_none=true vm_list=${VNI6_NET_2_VMS} network=@{VNI6_NETWORKS}[2] subnet=${prefix_net2}
115 ${prefix_net3} = String.Replace String @{VNI6_SUBNET_CIDRS}[3] ::/64 (:[a-f0-9]{,4}){,4}
116 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
117 ... fail_on_none=true vm_list=${VNI6_NET_3_VMS} network=@{VNI6_NETWORKS}[3] subnet=${prefix_net3}
118 ${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}
119 ${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}
120 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET2} None
121 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_2_VMS}[0] 30s
122 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET3} None
123 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_3_VMS}[0] 30s
124 OpenStackOperations.Copy DHCP Files From Control Node
125 BuiltIn.Should Not Contain ${VM_IP_NET2} None
126 BuiltIn.Should Not Contain ${VM_IP_NET3} None
127 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]
128 ... @{VNI6_NETWORKS}[3] @{VM_IP_NET2}[0] @{VM_IP_NET3}[0] ${IP}
132 [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
133 ... Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1
134 VpnOperations.Basic Suite Setup
135 OpenStackOperations.Create Allow All SecurityGroup ${VNI6_SECURITY_GROUP} IPv6
136 OpenStackOperations.Create Network @{VNI6_NETWORKS}[0]
137 OpenStackOperations.Create Network @{VNI6_NETWORKS}[1]
138 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[0] @{VNI6_SUBNETS}[0] @{VNI6_SUBNET_CIDRS}[0] ${NET0_ADDITIONAL_ARGS}
139 OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[1] @{VNI6_SUBNETS}[1] @{VNI6_SUBNET_CIDRS}[1] ${NET1_ADDITIONAL_ARGS}
140 OpenStackOperations.Create Port @{VNI6_NETWORKS}[0] @{VNI6_NET_0_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
141 OpenStackOperations.Create Port @{VNI6_NETWORKS}[1] @{VNI6_NET_1_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
142 OpenStackOperations.Create Router @{VNI6_ROUTER}[0]
143 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[0] @{VNI6_SUBNETS}[0]
144 OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[0] @{VNI6_SUBNETS}[1]
145 ${interface_output} = OpenStackOperations.Show Router Interface @{VNI6_ROUTER}[0]
146 ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address @{VNI6_ROUTER}[0]
147 BuiltIn.Set Suite Variable ${GWMAC_ADDRS}
148 BuiltIn.Set Suite Variable ${GWIP_ADDRS}
149 ${router_list} = BuiltIn.Create List @{VNI6_ROUTER}[0]
150 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}
151 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}
152 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_0_VMS}[0]
153 OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_1_VMS}[0]
154 @{networks} = BuiltIn.Create List @{VNI6_NETWORKS}[0] @{VNI6_NETWORKS}[1]
155 @{subnet_cidrs} = BuiltIn.Create List @{VNI6_SUBNET_CIDRS}[0] @{VNI6_SUBNET_CIDRS}[1]
156 BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${networks} ${subnet_cidrs}
157 ${prefix_net0} = Replace String @{VNI6_SUBNET_CIDRS}[0] ::/64 (:[a-f0-9]{,4}){,4}
158 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
159 ... fail_on_none=true vm_list=${VNI6_NET_0_VMS} network=@{VNI6_NETWORKS}[0] subnet=${prefix_net0}
160 ${prefix_net1} = Replace String @{VNI6_SUBNET_CIDRS}[1] ::/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_1_VMS} network=@{VNI6_NETWORKS}[1] subnet=${prefix_net1}
163 ${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}
164 ${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}
165 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET0} None
166 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_0_VMS}[0] 30s
167 ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET1} None
168 Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_1_VMS}[0] 30s
169 OpenStackOperations.Copy DHCP Files From Control Node
170 BuiltIn.Set Suite Variable ${VM_IP_NET0}
171 BuiltIn.Set Suite Variable ${VM_IP_NET1}
172 BuiltIn.Should Not Contain ${VM_IP_NET0} None
173 BuiltIn.Should Not Contain ${VM_IP_NET1} None