2 Documentation Test Suite for Network and Subnet Broadcast with security group
5 Library RequestsLibrary
9 Library OperatingSystem
10 Resource ../../../libraries/DevstackUtils.robot
11 Resource ../../../libraries/KarafKeywords.robot
12 Resource ../../../libraries/OpenStackOperations.robot
13 Resource ../../../libraries/OVSDB.robot
14 Resource ../../../libraries/OvsManager.robot
15 Resource ../../../libraries/SetupUtils.robot
16 Resource ../../../libraries/Utils.robot
17 Resource ../../../variables/Variables.robot
18 Resource ../../../variables/netvirt/Variables.robot
20 Suite Setup Start Suite
21 Suite Teardown OpenStackOperations.OpenStack Suite Teardown
22 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
23 Test Teardown OpenStackOperations.Get Test Teardown Debugs
27 @{SECURITY_GROUP} sgbcast1 sgbcast2
28 @{NETWORKS} sgbcast_net_1 sgbcast_net_2
29 @{SUBNETS} sgbcast_sub_1 sgbcast_sub_2
30 @{SUBNET_CIDRS} 55.0.0.0/24 56.0.0.0/24
31 ${ROUTER} sgbcast_router
32 @{NET_1_PORTS} sgbcast_net_1_port_1 sgbcast_net_1_port_2 sgbcast_net_1_port_3
33 @{NET_2_PORTS} sgbcast_net_2_port_1 sgbcast_net_2_port_2
34 @{NET_1_VMS} sgbcast_net_1_vm_1 sgbcast_net_1_vm_2 sgbcast_net_1_vm_3
35 @{NET_2_VMS} sgbcast_net_2_vm_1 sgbcast_net_2_vm_2
36 ${DUMP_FLOW} sudo ovs-ofctl dump-flows br-int -OOpenflow13
37 ${DUMP_PORT_DESC} sudo ovs-ofctl dump-ports-desc br-int -OOpenflow13
39 ${BCAST_IP} 255.255.255.255
40 ${SUBNET1_BCAST_IP} 55.0.0.255
41 ${SUBNET2_BCAST_IP} 56.0.0.255
42 ${ENABLE_BCAST} echo 0 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
46 Verify Network Broadcast traffic between the VMs hosted in Single Network
47 [Documentation] This TC is to verify Network Broadcast traffic between the VMs hosted in Same Network on same/different compute node
48 ${pkt_check} = BuiltIn.Set Variable If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" 10 5
49 Wait Until Keyword Succeeds
52 ... Verify L3Broadcast With Antispoofing Table
54 ... ${EGRESS_ACL_TABLE}
59 ... pkt_check=${pkt_check}
61 Verify Network Broadcast traffic between the VMs hosted in Multi Network
62 [Documentation] This TC is to verify Network Broadcast traffic between the VMs hosted in Different Network on same/different compute node.
63 ${pkt_check} = BuiltIn.Set Variable If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" 5 0
64 Wait Until Keyword Succeeds
67 ... Verify L3Broadcast With Antispoofing Table
69 ... ${EGRESS_ACL_TABLE}
74 ... pkt_check=${pkt_check}
76 Verify Subnet Broadcast traffic between the VMs hosted on same compute node in Single Network
77 [Documentation] Verify L3-Subnet Broadcast traffic between the VMs hosted on same compute node in Single Network
78 Wait Until Keyword Succeeds
81 ... Verify L3Broadcast With Antispoofing Table
83 ... ${EGRESS_ACL_TABLE}
84 ... ${SUBNET1_BCAST_IP}
90 ... additional_args=| grep ${VM2_SUBMETA}
92 Verify Subnet Broadcast traffic between the VMs hosted on Different compute node in Single Network
93 [Documentation] Verify L3-Subnet Broadcast traffic between the VMs hosted on same compute node in Single Network
94 Wait Until Keyword Succeeds
97 ... Verify L3Broadcast With Antispoofing Table
99 ... ${EGRESS_ACL_TABLE}
100 ... ${SUBNET1_BCAST_IP}
106 ... additional_args=| grep ${VM3_SUBMETA}
108 Verify Subnet Broadcast traffic between the VMs hosted on same compute node in Multi Network
109 [Documentation] Verify L3-Subnet Broadcast traffic between the VMs hosted on same compute node in Multi Network
110 Wait Until Keyword Succeeds
113 ... Verify L3Broadcast With Antispoofing Table
115 ... ${EGRESS_ACL_TABLE}
116 ... ${SUBNET2_BCAST_IP}
122 ... additional_args=| grep ${VM4_SUBMETA}
124 Verify Subnet Broadcast traffic between the VMs hosted on Different compute node in Multi Network
125 [Documentation] Verify L3-Subnet Broadcast traffic between the VMs hosted on Different compute node in Multi Network
126 Wait Until Keyword Succeeds
129 ... Verify L3Broadcast With Antispoofing Table
131 ... ${EGRESS_ACL_TABLE}
132 ... ${SUBNET2_BCAST_IP}
138 ... additional_args=| grep ${VM5_SUBMETA}
143 [Documentation] Test Suite for Network and Subnet Broadcast with security group
144 OpenStackOperations.OpenStack Suite Setup
146 OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
147 OpenStackOperations.Get Suite Debugs
150 FOR ${network} IN @{NETWORKS}
151 OpenStackOperations.Create Network ${network}
153 FOR ${i} IN RANGE len(${NETWORKS})
154 OpenStackOperations.Create SubNet ${NETWORKS}[${i}] ${SUBNETS}[${i}] ${SUBNET_CIDRS}[${i}]
156 OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}[0]
157 OpenStackOperations.Create Router ${ROUTER}
158 FOR ${interface} IN @{SUBNETS}
159 OpenStackOperations.Add Router Interface ${ROUTER} ${interface}
161 FOR ${port_net1} IN @{NET_1_PORTS}
162 OpenStackOperations.Create Port ${NETWORKS}[0] ${port_net1} sg=${SECURITY_GROUP}[0]
164 FOR ${port_net2} IN @{NET_2_PORTS}
165 OpenStackOperations.Create Port ${NETWORKS}[1] ${port_net2} sg=${SECURITY_GROUP}[0]
167 ${ports} = BuiltIn.Create List
168 ... ${NET_1_PORTS}[0]
169 ... ${NET_1_PORTS}[1]
170 ... ${NET_1_PORTS}[2]
171 ... ${NET_2_PORTS}[0]
172 ... ${NET_2_PORTS}[1]
173 ${vms} = BuiltIn.Create List
179 @{nodes} = BuiltIn.Create List
180 ... ${OS_CMP1_HOSTNAME}
181 ... ${OS_CMP1_HOSTNAME}
182 ... ${OS_CMP2_HOSTNAME}
183 ... ${OS_CMP1_HOSTNAME}
184 ... ${OS_CMP2_HOSTNAME}
185 FOR ${port} ${vm} ${node} IN ZIP ${ports} ${vms}
187 OpenStackOperations.Create Vm Instance With Port On Compute Node
191 ... sg=${SECURITY_GROUP}[0]
193 @{vms} = Collections.Combine Lists ${NET_1_VMS} ${NET_2_VMS}
194 @{VM_IPS} = OpenStackOperations.Get VM IPs @{vms}
195 BuiltIn.Should Not Contain ${VM_IPS} None
196 BuiltIn.Set Suite Variable @{VM_IPS}
197 OpenStackOperations.Execute Command on VM Instance ${NETWORKS[0]} ${VM_IPS}[0] ${ENABLE_BCAST}
198 OpenStackOperations.Execute Command on VM Instance ${NETWORKS[1]} ${VM_IPS}[3] ${ENABLE_BCAST}
199 ${vm1_in_port} ${vm1_meta} = BuiltIn.Wait Until Keyword Succeeds
202 ... Get VMs Metadata and In Port
203 ... ${NET_1_PORTS}[0]
205 ${vm2_in_port} ${vm2_meta} = BuiltIn.Wait Until Keyword Succeeds
208 ... Get VMs Metadata and In Port
209 ... ${NET_1_PORTS}[1]
211 ${vm3_in_port} ${vm3_meta} = BuiltIn.Wait Until Keyword Succeeds
214 ... Get VMs Metadata and In Port
215 ... ${NET_1_PORTS}[2]
217 ${vm4_in_port} ${vm4_meta} = BuiltIn.Wait Until Keyword Succeeds
220 ... Get VMs Metadata and In Port
221 ... ${NET_2_PORTS}[0]
223 ${vm5_in_port} ${vm5_meta} = BuiltIn.Wait Until Keyword Succeeds
226 ... Get VMs Metadata and In Port
227 ... ${NET_2_PORTS}[1]
229 ${VM1_SUBMETA} = Get Submetadata ${vm1_meta}
230 ${VM2_SUBMETA} = Get Submetadata ${vm2_meta}
231 ${VM3_SUBMETA} = Get Submetadata ${vm3_meta}
232 ${VM4_SUBMETA} = Get Submetadata ${vm4_meta}
233 ${VM5_SUBMETA} = Get Submetadata ${vm5_meta}
234 BuiltIn.Set Suite Variable ${VM1_SUBMETA}
235 BuiltIn.Set Suite Variable ${VM2_SUBMETA}
236 BuiltIn.Set Suite Variable ${VM3_SUBMETA}
237 BuiltIn.Set Suite Variable ${VM4_SUBMETA}
238 BuiltIn.Set Suite Variable ${VM5_SUBMETA}
240 Get VMs Metadata and In Port
241 [Documentation] This keyword is to get the VM metadata and the in_port Id of the VM
242 [Arguments] ${portname} ${OS_COMPUTE_IP}
243 ${subport} = OpenStackOperations.Get Sub Port Id ${portname}
244 ${get_vm_in_port} = Utils.Run Command On Remote System And Log
246 ... ${DUMP_PORT_DESC} | grep ${subport} | awk '{print$1}'
247 ${vms_in_port} = BuiltIn.Should Match Regexp ${get_vm_in_port} [0-9]+
248 ${grep_metadata} = Utils.Run Command On Remote System And Log
250 ... ${DUMP_FLOW} | grep table=${VLAN_INTERFACE_INGRESS_TABLE} | grep in_port=${vms_in_port} | awk '{print$7}'
251 @{metadata} = String.Split string ${grep_metadata} ,
252 ${get_write_metadata} = Collections.get from list ${metadata} 0
253 @{complete_metadata} = String.Split string ${get_write_metadata} :
254 ${extract_metadata} = Collections.get from list ${complete_metadata} 1
255 @{split_metadata} = String.Split string ${extract_metadata} /
256 ${vm_metadata} = Collections.Get From List ${split_metadata} 0
257 RETURN ${vms_in_port} ${vm_metadata}
260 [Documentation] Get the submetadata of the VM
261 [Arguments] ${vm_metadata}
262 ${cmd1} = Utils.Run Command On Remote System And Log
264 ... ${DUMP_FLOW} | grep ${EGRESS_LPORT_DISPATCHER_TABLE} | grep write_metadata:
265 ${output1} = String.Get Regexp Matches ${cmd1} reg6=(\\w+) 1
266 ${cmd2} = Utils.Run Command On Remote System And Log
268 ... ${DUMP_FLOW} | grep ${EGRESS_LPORT_DISPATCHER_TABLE} | grep write_metadata:
269 ${output2} = String.Get Regexp Matches ${cmd2} reg6=(\\w+) 1
270 ${metalist} = Collections.Combine Lists ${output1} ${output2}
271 FOR ${meta} IN @{metalist}
272 ${metadata_check_status} = Run Keyword And Return Status should contain ${vm_metadata} ${meta}
273 IF ${metadata_check_status} == True RETURN ${meta}
276 Verify L3Broadcast With Antispoofing Table
277 [Documentation] Verify the l3 broadcast requests are hitting to antispoofing table in same subnet
278 [Arguments] ${OS_COMPUTE_IP} ${EGRESS_ACL_TABLE} ${BCAST_IP} ${vm_ip} ${subnet_var} ${ping_response}='pingsuccess'
279 ... ${vm_submeta}='' ${pkt_check}=0 ${additional_args}=${EMPTY}
280 ${get_pkt_count_before_bcast} = OvsManager.Get Packet Count In Table For IP
282 ... ${EGRESS_ACL_TABLE}
284 ... additional_args=| grep ${vm_submeta}
285 ${output} = OpenStackOperations.Execute Command on VM Instance
288 ... ping -c ${PACKET_COUNT} ${BCAST_IP}
289 IF '${ping_response}'=='pingsuccess'
290 BuiltIn.Should Contain ${output} ${PING_REGEXP}
292 BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
294 ${bcast_egress} = Utils.Run Command On Remote System And Log
296 ... ${DUMP_FLOW} | grep table=${EGRESS_ACL_TABLE} | grep ${BCAST_IP} ${additional_args}
297 ${get_pkt_count_after_bcast} = OvsManager.Get Packet Count In Table For IP
299 ... ${EGRESS_ACL_TABLE}
301 ... additional_args=| grep ${vm_submeta}
302 ${pkt_diff} = Evaluate int(${get_pkt_count_after_bcast})-int(${get_pkt_count_before_bcast})
303 BuiltIn.Should Be Equal As Numbers ${pkt_diff} ${pkt_check}