1 # Copyright 2015-2016 Intel Corporation.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # The 1st value of SUPPORTED_TUNNELING_PROTO is used as the default
16 # tunneling protocol for OP2P tests.
17 SUPPORTED_TUNNELING_PROTO = ['vxlan', 'gre', 'geneve']
20 # Generic test configuration options are described at conf/01_testcases.conf
24 # Options specific to integration testcases are described below:
26 # Required for OP2P tests
27 # "Tunnel Type": ["vxlan"|"gre"|"geneve"] # Tunnel Type defines tunneling protocol to use.
28 # # It can be overridden by cli option tunnel_type.
30 # # "vxlan" - iteration of destination MAC address
31 # # "gre" - iteration of destination IP address
32 # # "geneve" - iteration of destination UDP port
33 # # Default value is "vxlan".
35 # biDirectional testing for OP2P is not yet supported.
36 # biDirectional must be set to False.
38 # "TestSteps": [] # Definition of integration test steps.
39 # # In case that this list is defined, then
40 # # vsperf will execute defined test steps
41 # # one by one. It can be used to configure
42 # # vswitch, insert flows and transmit traffic.
43 # # It is possible to refer to result of any
44 # # previous step through #STEP[i][j] macro.
45 # # Where i is a number of step (starts from 0)
46 # # and j is index of result returned by step i.
49 # Common TestSteps parts ("macros")
53 STEP_VSWITCH_P2P_FLOWS_INIT = [
54 ['vswitch', 'add_switch', 'int_br0'], # STEP 0
55 ['vswitch', 'add_phy_port', 'int_br0'], # STEP 1
56 ['vswitch', 'add_phy_port', 'int_br0'], # STEP 2
57 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
58 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[2][1]', 'actions': ['output:#STEP[1][1]'], 'idle_timeout': '0'}],
61 STEP_VSWITCH_P2P_FLOWS_FINIT = [
62 ['vswitch', 'dump_flows', 'int_br0'],
63 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[1][1]'}],
64 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[2][1]'}],
65 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
66 ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
67 ['vswitch', 'del_switch', 'int_br0'],
71 STEP_VSWITCH_PVP_INIT = [
72 ['vswitch', 'add_switch', 'int_br0'], # STEP 0
73 ['vswitch', 'add_phy_port', 'int_br0'], # STEP 1
74 ['vswitch', 'add_phy_port', 'int_br0'], # STEP 2
75 ['vswitch', 'add_vport', 'int_br0'], # STEP 3 vm1 ports
76 ['vswitch', 'add_vport', 'int_br0'], # STEP 4
79 STEP_VSWITCH_PVP_FINIT = [
80 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
81 ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
82 ['vswitch', 'del_port', 'int_br0', '#STEP[3][0]'],
83 ['vswitch', 'del_port', 'int_br0', '#STEP[4][0]'],
84 ['vswitch', 'del_switch', 'int_br0'],
87 STEP_VSWITCH_PVP_FLOWS_INIT = STEP_VSWITCH_PVP_INIT + [
88 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', 'actions': ['output:#STEP[3][1]'], 'idle_timeout': '0'}],
89 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[4][1]', 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
90 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[2][1]', 'actions': ['output:#STEP[4][1]'], 'idle_timeout': '0'}],
91 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[3][1]', 'actions': ['output:#STEP[1][1]'], 'idle_timeout': '0'}],
94 STEP_VSWITCH_PVP_FLOWS_FINIT = [
95 ['vswitch', 'dump_flows', 'int_br0'],
96 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[1][1]'}],
97 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[4][1]'}],
98 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[2][1]'}],
99 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[3][1]'}],
100 ] + STEP_VSWITCH_PVP_FINIT
102 STEP_VSWITCH_PVVP_INIT = STEP_VSWITCH_PVP_INIT + [
103 ['vswitch', 'add_vport', 'int_br0'], # STEP 5 vm2 ports
104 ['vswitch', 'add_vport', 'int_br0'], # STEP 6
107 STEP_VSWITCH_PVVP_FINIT = [
108 ['vswitch', 'del_port', 'int_br0', '#STEP[5][0]'], # vm2 ports
109 ['vswitch', 'del_port', 'int_br0', '#STEP[6][0]'],
110 ] + STEP_VSWITCH_PVP_FINIT
112 STEP_VSWITCH_PVVP_FLOWS_INIT = STEP_VSWITCH_PVVP_INIT + [
113 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', 'actions': ['output:#STEP[3][1]'], 'idle_timeout': '0'}],
114 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[4][1]', 'actions': ['output:#STEP[5][1]'], 'idle_timeout': '0'}],
115 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[6][1]', 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
116 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[2][1]', 'actions': ['output:#STEP[6][1]'], 'idle_timeout': '0'}],
117 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[5][1]', 'actions': ['output:#STEP[4][1]'], 'idle_timeout': '0'}],
118 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[3][1]', 'actions': ['output:#STEP[1][1]'], 'idle_timeout': '0'}],
121 STEP_VSWITCH_PVVP_FLOWS_FINIT = [
122 ['vswitch', 'dump_flows', 'int_br0'],
123 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[1][1]'}],
124 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[4][1]'}],
125 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[6][1]'}],
126 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[2][1]'}],
127 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[5][1]'}],
128 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[3][1]'}],
129 ] + STEP_VSWITCH_PVVP_FINIT
131 STEP_VSWITCH_P4VP_INIT = STEP_VSWITCH_PVVP_INIT + [
132 ['vswitch', 'add_vport', 'int_br0'], # STEP 7 vm3 ports
133 ['vswitch', 'add_vport', 'int_br0'], # STEP 8
134 ['vswitch', 'add_vport', 'int_br0'], # STEP 9 vm4 ports
135 ['vswitch', 'add_vport', 'int_br0'], # STEP 10
138 STEP_VSWITCH_P4VP_FINIT = [
139 ['vswitch', 'del_port', 'int_br0', '#STEP[7][0]'], # vm3 ports
140 ['vswitch', 'del_port', 'int_br0', '#STEP[8][0]'],
141 ['vswitch', 'del_port', 'int_br0', '#STEP[9][0]'], # vm4 ports
142 ['vswitch', 'del_port', 'int_br0', '#STEP[10][0]'],
143 ] + STEP_VSWITCH_PVVP_FINIT
145 STEP_VSWITCH_P4VP_FLOWS_INIT = STEP_VSWITCH_P4VP_INIT + [
146 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
147 'actions': ['output:#STEP[3][1]'], 'idle_timeout': '0'}],
148 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[4][1]', \
149 'actions': ['output:#STEP[5][1]'], 'idle_timeout': '0'}],
150 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[6][1]', \
151 'actions': ['output:#STEP[7][1]'], 'idle_timeout': '0'}],
152 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[8][1]', \
153 'actions': ['output:#STEP[9][1]'], 'idle_timeout': '0'}],
154 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[10][1]', \
155 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
156 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[2][1]', \
157 'actions': ['output:#STEP[10][1]'], 'idle_timeout': '0'}],
158 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[9][1]', \
159 'actions': ['output:#STEP[8][1]'], 'idle_timeout': '0'}],
160 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[7][1]', \
161 'actions': ['output:#STEP[6][1]'], 'idle_timeout': '0'}],
162 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[5][1]', \
163 'actions': ['output:#STEP[4][1]'], 'idle_timeout': '0'}],
164 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[3][1]', \
165 'actions': ['output:#STEP[1][1]'], 'idle_timeout': '0'}],
168 STEP_VSWITCH_P4VP_FLOWS_FINIT = [
169 ['vswitch', 'dump_flows', 'int_br0'],
170 ['vswitch', 'del_flow', 'int_br0'],
171 ] + STEP_VSWITCH_P4VP_FINIT
173 STEP_VSWITCH_2PHY_2VM_INIT = STEP_VSWITCH_PVVP_INIT
175 STEP_VSWITCH_2PHY_2VM_FINIT = STEP_VSWITCH_PVVP_FINIT
177 STEP_VSWITCH_2_PARALLEL_VM_FLOWS_INIT = [
178 # Setup Flows to reply ICMPv6 and similar packets, so to
179 # avoid flooding the internal port with their re-transmissions
180 ['vswitch', 'add_flow', 'int_br0', \
181 {'priority': '1', 'dl_src': '00:00:00:00:00:01', \
182 'actions': ['output:#STEP[3][1]'], 'idle_timeout': '0'}],
183 ['vswitch', 'add_flow', 'int_br0', \
184 {'priority': '1', 'dl_src': '00:00:00:00:00:02', \
185 'actions': ['output:#STEP[4][1]'], 'idle_timeout': '0'}],
186 ['vswitch', 'add_flow', 'int_br0', \
187 {'priority': '1', 'dl_src': '00:00:00:00:00:03', \
188 'actions': ['output:#STEP[5][1]'], 'idle_timeout': '0'}],
189 ['vswitch', 'add_flow', 'int_br0', \
190 {'priority': '1', 'dl_src': '00:00:00:00:00:04', \
191 'actions': ['output:#STEP[6][1]'], 'idle_timeout': '0'}],
192 # Forward UDP packets depending on dest port
193 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
194 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '0', \
195 'actions': ['output:#STEP[3][1]'], 'idle_timeout': '0'}],
196 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
197 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '1', \
198 'actions': ['output:#STEP[5][1]'], 'idle_timeout': '0'}],
199 # Send VM outputs to phy port #2
200 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[4][1]', \
201 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
202 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[6][1]', \
203 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
206 STEP_VSWITCH_2PHY_4VM_INIT = STEP_VSWITCH_2PHY_2VM_INIT + [
207 ['vswitch', 'add_vport', 'int_br0'], # STEP 7 vm3 ports
208 ['vswitch', 'add_vport', 'int_br0'], # STEP 8
209 ['vswitch', 'add_vport', 'int_br0'], # STEP 9 vm4 ports
210 ['vswitch', 'add_vport', 'int_br0'], # STEP 10
213 STEP_VSWITCH_2PHY_4VM_FINIT = [
214 ['vswitch', 'del_port', 'int_br0', '#STEP[7][0]'], # vm3 ports
215 ['vswitch', 'del_port', 'int_br0', '#STEP[8][0]'],
216 ['vswitch', 'del_port', 'int_br0', '#STEP[9][0]'], # vm4 ports
217 ['vswitch', 'del_port', 'int_br0', '#STEP[10][0]'],
218 ] + STEP_VSWITCH_2PHY_2VM_FINIT
220 STEP_VSWITCH_FLOWS_FINIT = [
221 ['vswitch', 'dump_flows', 'int_br0'],
222 ['vswitch', 'del_flow', 'int_br0'],
225 STEP_VSWITCH_4_PARALLEL_VM_FLOWS_INIT = [
226 # Setup Flows to reply ICMPv6 and similar packets, so to
227 # avoid flooding the internal port with their re-transmissions
228 ['vswitch', 'add_flow', 'int_br0', \
229 {'priority': '1', 'dl_src': '00:00:00:00:00:01', \
230 'actions': ['output:#STEP[3][1]'], 'idle_timeout': '0'}],
231 ['vswitch', 'add_flow', 'int_br0', \
232 {'priority': '1', 'dl_src': '00:00:00:00:00:02', \
233 'actions': ['output:#STEP[4][1]'], 'idle_timeout': '0'}],
234 ['vswitch', 'add_flow', 'int_br0', \
235 {'priority': '1', 'dl_src': '00:00:00:00:00:03', \
236 'actions': ['output:#STEP[5][1]'], 'idle_timeout': '0'}],
237 ['vswitch', 'add_flow', 'int_br0', \
238 {'priority': '1', 'dl_src': '00:00:00:00:00:04', \
239 'actions': ['output:#STEP[6][1]'], 'idle_timeout': '0'}],
240 ['vswitch', 'add_flow', 'int_br0', \
241 {'priority': '1', 'dl_src': '00:00:00:00:00:05', \
242 'actions': ['output:#STEP[7][1]'], 'idle_timeout': '0'}],
243 ['vswitch', 'add_flow', 'int_br0', \
244 {'priority': '1', 'dl_src': '00:00:00:00:00:06', \
245 'actions': ['output:#STEP[8][1]'], 'idle_timeout': '0'}],
246 ['vswitch', 'add_flow', 'int_br0', \
247 {'priority': '1', 'dl_src': '00:00:00:00:00:07', \
248 'actions': ['output:#STEP[9][1]'], 'idle_timeout': '0'}],
249 ['vswitch', 'add_flow', 'int_br0', \
250 {'priority': '1', 'dl_src': '00:00:00:00:00:08', \
251 'actions': ['output:#STEP[10][1]'], 'idle_timeout': '0'}],
252 # Forward UDP packets depending on dest port
253 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
254 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '0', \
255 'actions': ['output:#STEP[3][1]'], 'idle_timeout': '0'}],
256 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
257 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '1', \
258 'actions': ['output:#STEP[5][1]'], 'idle_timeout': '0'}],
259 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
260 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '2', \
261 'actions': ['output:#STEP[7][1]'], 'idle_timeout': '0'}],
262 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
263 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '3', \
264 'actions': ['output:#STEP[9][1]'], 'idle_timeout': '0'}],
265 # Send VM outputs to phy port #2
266 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[4][1]', \
267 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
268 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[6][1]', \
269 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
270 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[8][1]', \
271 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
272 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[10][1]', \
273 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
276 STEP_VSWITCH_2PHY_6VM_INIT = STEP_VSWITCH_2PHY_4VM_INIT + [
277 ['vswitch', 'add_vport', 'int_br0'], # STEP 11 vm5 vhu8
278 ['vswitch', 'add_vport', 'int_br0'], # STEP 12 vhu9
279 ['vswitch', 'add_vport', 'int_br0'], # STEP 13 vm6 vhu10
280 ['vswitch', 'add_vport', 'int_br0'], # STEP 14 vhu11
283 STEP_VSWITCH_6_PARALLEL_VM_FLOWS_INIT = STEP_VSWITCH_4_PARALLEL_VM_FLOWS_INIT + [
284 ['vswitch', 'add_flow', 'int_br0', \
285 {'priority': '1', 'dl_src': '00:00:00:00:00:09', \
286 'actions': ['output:#STEP[11][1]'], 'idle_timeout': '0'}],
287 ['vswitch', 'add_flow', 'int_br0', \
288 {'priority': '1', 'dl_src': '00:00:00:00:00:0a', \
289 'actions': ['output:#STEP[12][1]'], 'idle_timeout': '0'}],
290 ['vswitch', 'add_flow', 'int_br0', \
291 {'priority': '1', 'dl_src': '00:00:00:00:00:0b', \
292 'actions': ['output:#STEP[13][1]'], 'idle_timeout': '0'}],
293 ['vswitch', 'add_flow', 'int_br0', \
294 {'priority': '1', 'dl_src': '00:00:00:00:00:0c', \
295 'actions': ['output:#STEP[14][1]'], 'idle_timeout': '0'}],
296 # Forward UDP packets depending on dest port
297 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
298 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '4', \
299 'actions': ['output:#STEP[11][1]'], 'idle_timeout': '0'}],
300 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', \
301 'dl_type': '0x0800', 'nw_proto': '17', 'udp_dst': '5', \
302 'actions': ['output:#STEP[13][1]'], 'idle_timeout': '0'}],
303 # Send VM outputs to phy port #2
304 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[12][1]', \
305 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
306 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[14][1]', \
307 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
310 STEP_VSWITCH_2PHY_6VM_FINIT = [
311 ['vswitch', 'del_port', 'int_br0', '#STEP[11][0]'], # vm5 ports
312 ['vswitch', 'del_port', 'int_br0', '#STEP[12][0]'],
313 ['vswitch', 'del_port', 'int_br0', '#STEP[13][0]'], # vm6 ports
314 ['vswitch', 'del_port', 'int_br0', '#STEP[14][0]'],
315 ] + STEP_VSWITCH_2PHY_4VM_FINIT
318 # Definition of integration tests
320 INTEGRATION_TESTS = [
322 "Name": "overlay_p2p_mod_tput",
323 "Traffic Type": "rfc2544",
324 "Deployment": "ptunp",
325 "biDirectional": 'True',
326 "Tunnel Type": "vxlan",
327 "Description": ("Tunneling Throughput RFC2544 Test."
328 "The encap and decap are performed inside the "
329 "virtual switch itself in each direction to avoid "
330 "the need of ingress overlay traffic."),
333 "Name": "overlay_p2p_tput",
334 "Traffic Type": "rfc2544",
335 "Deployment": "op2p",
336 "biDirectional": 'False',
337 "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
338 "Tunnel Operation": "encapsulation",
339 "Description": "Overlay Encapsulation Throughput RFC2544 Test",
342 "Name": "overlay_p2p_cont",
343 "Traffic Type": "continuous",
344 "Deployment": "op2p",
345 "biDirectional": 'False',
346 "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
347 "Tunnel Operation": "encapsulation",
348 "Description": "Overlay Encapsulation Continuous Stream",
351 "Name": "overlay_p2p_decap_tput",
352 "Traffic Type": "rfc2544",
353 "Deployment": "op2p",
354 "biDirectional": 'False',
355 "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
356 "Tunnel Operation": "decapsulation",
357 "Description": "Overlay Decapsulation Throughput RFC2544 Test",
360 "Name": "overlay_p2p_decap_cont",
361 "Traffic Type": "continuous",
362 "Deployment": "op2p",
363 "biDirectional": 'False',
364 "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
365 "Tunnel Operation": "decapsulation",
366 "Description": "Overlay Decapsulation Continuous Stream",
369 "Name": "vswitch_add_del_bridge",
370 "Deployment": "clean",
371 "Description": "vSwitch - add and delete bridge",
373 ['vswitch', 'add_switch', 'int_br0'],
374 ['vswitch', 'del_switch', 'int_br0'],
378 "Name": "vswitch_add_del_bridges",
379 "Deployment": "clean",
380 "Description": "vSwitch - add and delete bridges",
382 ['vswitch', 'add_switch', 'int_br0'],
383 ['vswitch', 'add_switch', 'int_br1'],
384 ['vswitch', 'del_switch', 'int_br0'],
385 ['vswitch', 'del_switch', 'int_br1'],
389 "Name": "vswitch_add_del_phy_port",
390 "Deployment": "clean",
391 "Description": "vSwitch - add and delete physical port",
393 ['vswitch', 'add_switch', 'int_br0'],
394 ['vswitch', 'add_phy_port', 'int_br0'],
395 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
396 ['vswitch', 'del_switch', 'int_br0'],
400 "Name": "vswitch_add_del_phy_ports",
401 "Deployment": "clean",
402 "Description": "vSwitch - add and delete physical ports",
404 ['vswitch', 'add_switch', 'int_br0'],
405 ['vswitch', 'add_phy_port', 'int_br0'],
406 ['vswitch', 'add_phy_port', 'int_br0'],
407 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
408 ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
409 ['vswitch', 'del_switch', 'int_br0'],
413 "Name": "vswitch_add_del_vport",
414 "Deployment": "clean",
415 "Description": "vSwitch - add and delete virtual port",
417 ['vswitch', 'add_switch', 'int_br0'],
418 ['vswitch', 'add_vport', 'int_br0'],
419 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
420 ['vswitch', 'del_switch', 'int_br0'],
424 "Name": "vswitch_add_del_vports",
425 "Deployment": "clean",
426 "Description": "vSwitch - add and delete virtual ports",
428 ['vswitch', 'add_switch', 'int_br0'],
429 ['vswitch', 'add_vport', 'int_br0'],
430 ['vswitch', 'add_vport', 'int_br0'],
431 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
432 ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
433 ['vswitch', 'del_switch', 'int_br0'],
437 "Name": "vswitch_add_del_flow",
438 "Deployment": "clean",
439 "Description": "vSwitch - add and delete flow",
441 ['vswitch', 'add_switch', 'int_br0'],
442 ['vswitch', 'add_phy_port', 'int_br0'],
443 ['vswitch', 'add_phy_port', 'int_br0'],
444 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
445 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[1][1]'}],
446 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
447 ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
448 ['vswitch', 'del_switch', 'int_br0'],
452 "Name": "vswitch_vports_add_del_flow",
453 "Deployment": "clean",
454 "Description": "vSwitch - configure switch with vports, add and delete flow",
456 ['vswitch', 'add_switch', 'int_br0'],
457 ['vswitch', 'add_vport', 'int_br0'],
458 ['vswitch', 'add_vport', 'int_br0'],
459 ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
460 ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[1][1]'}],
461 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
462 ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
463 ['vswitch', 'del_switch', 'int_br0'],
467 "Name": "vswitch_add_del_flows",
468 "Deployment": "clean",
469 "Description": "vSwitch - add and delete flows",
470 "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
471 STEP_VSWITCH_P2P_FLOWS_FINIT
474 "Name": "vswitch_p2p_tput",
475 "Deployment": "clean",
476 "Description": "vSwitch - configure switch and execute RFC2544 throughput test",
477 "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
479 ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
481 STEP_VSWITCH_P2P_FLOWS_FINIT
484 "Name": "vswitch_p2p_back2back",
485 "Deployment": "clean",
486 "Description": "vSwitch - configure switch and execute RFC2544 back2back test",
487 "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
489 ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
491 STEP_VSWITCH_P2P_FLOWS_FINIT
494 "Name": "vswitch_p2p_cont",
495 "Deployment": "clean",
496 "Description": "vSwitch - configure switch and execute continuous stream test",
497 "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
499 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
501 STEP_VSWITCH_P2P_FLOWS_FINIT
504 "Name": "vswitch_pvp",
505 "Deployment": "clean",
506 "Description": "vSwitch - configure switch and one vnf",
507 "TestSteps": STEP_VSWITCH_PVP_INIT +
512 STEP_VSWITCH_PVP_FINIT
515 "Name": "vswitch_vports_pvp",
516 "Deployment": "clean",
517 "Description": "vSwitch - configure switch with vports and one vnf",
519 ['vswitch', 'add_switch', 'int_br0'],
520 ['vswitch', 'add_vport', 'int_br0'],
521 ['vswitch', 'add_vport', 'int_br0'],
524 ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
525 ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
526 ['vswitch', 'del_switch', 'int_br0'],
530 "Name": "vswitch_pvp_tput",
531 "Deployment": "clean",
532 "Description": "vSwitch - configure switch, vnf and execute RFC2544 throughput test",
533 "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
536 ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
539 STEP_VSWITCH_PVP_FLOWS_FINIT
542 "Name": "vswitch_pvp_back2back",
543 "Deployment": "clean",
544 "Description": "vSwitch - configure switch, vnf and execute RFC2544 back2back test",
545 "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
548 ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
551 STEP_VSWITCH_PVP_FLOWS_FINIT
554 "Name": "vswitch_pvp_cont",
555 "Deployment": "clean",
556 "Description": "vSwitch - configure switch, vnf and execute continuous stream test",
557 "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
560 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
563 STEP_VSWITCH_PVP_FLOWS_FINIT
566 "Name": "vswitch_pvp_all",
567 "Deployment": "clean",
568 "Description": "vSwitch - configure switch, vnf and execute all test types",
569 "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
572 ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
573 ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
574 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
577 STEP_VSWITCH_PVP_FLOWS_FINIT
580 "Name": "vswitch_pvvp",
581 "Deployment": "clean",
582 "Description": "vSwitch - configure switch and two vnfs",
583 "TestSteps": STEP_VSWITCH_PVVP_INIT +
590 STEP_VSWITCH_PVVP_FINIT
593 "Name": "vswitch_pvvp_tput",
594 "Deployment": "clean",
595 "Description": "vSwitch - configure switch, two chained vnfs and execute RFC2544 throughput test",
596 "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
600 ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
604 STEP_VSWITCH_PVVP_FLOWS_FINIT
607 "Name": "vswitch_pvvp_back2back",
608 "Deployment": "clean",
609 "Description": "vSwitch - configure switch, two chained vnfs and execute RFC2544 back2back test",
610 "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
614 ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
618 STEP_VSWITCH_PVVP_FLOWS_FINIT
621 "Name": "vswitch_pvvp_cont",
622 "Deployment": "clean",
623 "Description": "vSwitch - configure switch, two chained vnfs and execute continuous stream test",
624 "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
628 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
632 STEP_VSWITCH_PVVP_FLOWS_FINIT
635 "Name": "vswitch_pvvp_all",
636 "Deployment": "clean",
637 "Description": "vSwitch - configure switch, two chained vnfs and execute all test types",
638 "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
642 ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
643 ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
644 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
648 STEP_VSWITCH_PVVP_FLOWS_FINIT
651 "Name": "vswitch_p4vp",
652 "Description": "Just configure 4 chained vnfs",
653 "Deployment": "clean",
654 "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
665 STEP_VSWITCH_P4VP_FLOWS_FINIT
668 "Name": "vswitch_p4vp_tput",
669 "Description": "4 chained vnfs, execute RFC2544 throughput test",
670 "Deployment": "clean",
671 "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
677 ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', \
684 STEP_VSWITCH_P4VP_FLOWS_FINIT
687 "Name": "vswitch_p4vp_back2back",
688 "Description": "4 chained vnfs, execute RFC2544 back2back test",
689 "Deployment": "clean",
690 "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
696 ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', \
703 STEP_VSWITCH_P4VP_FLOWS_FINIT
706 "Name": "vswitch_p4vp_cont",
707 "Description": "4 chained vnfs, execute continuous stream test",
708 "Deployment": "clean",
709 "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
715 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', \
722 STEP_VSWITCH_P4VP_FLOWS_FINIT
725 "Name": "vswitch_p4vp_all",
726 "Description": "4 chained vnfs, execute RFC2544 throughput test",
727 "Deployment": "clean",
728 "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
734 ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', \
736 ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', \
738 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', \
745 STEP_VSWITCH_P4VP_FLOWS_FINIT
748 # Topology: 2 Parallel PVP connections
749 # To run a Linux bridge as a loopback in the Guest use:
750 # --test-params "guest_loopback=linux_bridge" --integration 2pvp_udp_dest_flows
751 "Name": "2pvp_udp_dest_flows",
752 "Description": "Continuous TC with 2 Parallel VMs, flows on UDP Dest Port",
753 "Deployment": "clean",
756 "TestSteps": STEP_VSWITCH_2PHY_2VM_INIT +
757 STEP_VSWITCH_2_PARALLEL_VM_FLOWS_INIT + [
761 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
765 ] + STEP_VSWITCH_FLOWS_FINIT +
766 STEP_VSWITCH_2PHY_2VM_FINIT
769 # Topology: 4 Parallel PVP connections
770 # To run a Linux bridge as a loopback in the Guest use:
771 # --test-params "guest_loopback=linux_bridge" --integration 4pvp_udp_dest_flows
772 "Name": "4pvp_udp_dest_flows",
773 "Description": "Continuous TC with 4 Parallel VMs, flows on UDP Dest Port",
774 "Deployment": "clean",
777 "TestSteps": STEP_VSWITCH_2PHY_4VM_INIT +
778 STEP_VSWITCH_4_PARALLEL_VM_FLOWS_INIT + [
784 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
790 ] + STEP_VSWITCH_FLOWS_FINIT +
791 STEP_VSWITCH_2PHY_4VM_FINIT
794 # Topology: 6 Parallel PVP connections
795 # To run a Linux bridge as a loopback in the Guest use:
796 # --test-params "guest_loopback=linux_bridge" --integration 6pvp_udp_dest_flows
797 "Name": "6pvp_udp_dest_flows",
798 "Description": "Continuous TC with 6 Parallel VMs, flows on UDP Dest Port",
799 "Deployment": "clean",
802 "TestSteps": STEP_VSWITCH_2PHY_6VM_INIT +
803 STEP_VSWITCH_6_PARALLEL_VM_FLOWS_INIT + [
811 ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
818 ] + STEP_VSWITCH_FLOWS_FINIT +
819 STEP_VSWITCH_2PHY_6VM_FINIT
822 # Testcase for verification of vHost User NUMA awareness feature
823 # introduced in DPDK v2.2. Test case will execute two VNFs, each
824 # pinned to different NUMA slot. After that it will verify that
825 # QEMU and PMD threads serving its interfaces are co-located
826 # at the same NUMA slot.
829 # * architecture with at least 2 NUMA slots
830 # * OVS with DPDK support and DPDK v2.2 and newer
831 # * OVS configuration utilizing both NUMA slots
833 # Example of OVS configuration valid for DPDK v16.04 and cores
834 # split between NUMA slots as follows:
835 # node 0 cpus: 0 1 2 3 4 5 6 7 8 9
836 # node 1 cpus: 10 11 12 13 14 15 16 17 18 19
838 # VSWITCH_PMD_CPU_MASK = '1010'
839 # VSWITCHD_DPDK_CONFIG = {
840 # 'dpdk-init' : 'true',
841 # 'dpdk-lcore-mask' : '0x4004',
842 # 'pmd-cpu-mask' : 'FF0FF',
843 # 'dpdk-socket-mem' : '1024,1024',
846 "Name": "vhost_numa_awareness",
847 "Deployment": "clean",
848 "Description": "vSwitch DPDK - verify that PMD threads are served "
849 "by the same NUMA slot as QEMU instances",
850 "vSwitch" : "OvsDpdkVhost",
851 "TestSteps": STEP_VSWITCH_PVVP_INIT + # STEP 0-6
853 # check that at least 2 numa slots are available
854 ['tools', 'exec', 'numactl -H', 'available: ([0-9]+)'], # STEP 7
855 ['tools', 'assert', '#STEP[-1][0]>1'], # STEP 8
856 # store last 2 cores from numa slot 0
857 ['tools', 'exec', 'numactl -H', 'node 0 cpus:.*\s+(\\d+) (\\d+)$'], # STEP 9
858 # store last 2 cores from numa slot 1
859 ['tools', 'exec', 'numactl -H', 'node 1 cpus:.*\s+(\\d+) (\\d+)$'], # STEP 10
860 # pin VNF1 to 1st NUMA slot and VNF2 to 2nd NUMA slot
861 ['settings', 'setValue', 'GUEST_CORE_BINDING', # STEP 11
862 [("#STEP[-2][0][0]", "#STEP[-2][0][1]"),
863 ("#STEP[-1][0][0]", "#STEP[-1][0][1]")]
866 ['vnf1', 'start'], # STEP 12
867 ['vnf2', 'start'], # STEP 13
868 # read paths to ovs utilities
869 ['settings', 'getValue', 'TOOLS'], # STEP 14
870 # check that PMD thread serving VNF1 runs at NUMA slot 0
871 ## i.e. get numa slot ID serving dpdhvhostuser0...
872 ['tools', 'exec', "sudo #STEP[-1]['ovs-appctl'] " # STEP 15
873 "dpif-netdev/pmd-rxq-show | "
874 "sed -e '/dpdkvhostuser0/,$d' | tac",
875 'pmd thread numa_id ([0-9])+'
877 ## ...and check that it is NUMA slot 0
878 ['tools', 'assert', '#STEP[-1][0]==0'], # STEP 16
879 # check that PMD thread serving VNF2 runs at NUMA slot 1
880 ## i.e. get numa slot ID serving dpdhvhostuser2...
881 ['tools', 'exec', "sudo #STEP[-3]['ovs-appctl'] " # STEP 17
882 "dpif-netdev/pmd-rxq-show | "
883 "sed -e '/dpdkvhostuser2/,$d' | tac",
884 'pmd thread numa_id ([0-9])+'
886 ## ...and check that it is NUMA slot 1
887 ['tools', 'assert', '#STEP[-1][0]==1'], # STEP 18
889 ['vnf2', 'stop'], # STEP 19
890 ['vnf1', 'stop'], # STEP 20
892 STEP_VSWITCH_PVVP_FINIT # STEP 21...
896 # Example of TC definition with exact vSwitch, VNF and TRAFFICGEN values.
898 # "Name": "ovs_vanilla_linux_bridge_pvp_cont",
899 # "Deployment": "clean",
900 # "Description": "vSwitch - configure OVS Vanilla, QemuVirtioNet with linux bridge and execute continuous stream test",
901 # "vSwitch" : "OvsVanilla",
902 # "VNF" : "QemuVirtioNet",
903 # "Trafficgen": "IxNet",
904 # "Parameters": {"guest_loopback" : "linux_bridge"},
905 # "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
908 # ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
911 # STEP_VSWITCH_PVP_FLOWS_FINIT