Merge "Rhel_scl_python: Modify python build in place to scl usage"
[vswitchperf.git] / conf / integration / 01_testcases.conf
1 # Copyright 2015-2016 Intel Corporation.
2 #
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
6 #
7 #   http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
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']
18
19 #
20 # Generic test configuration options are described at conf/01_testcases.conf
21 #
22
23 #
24 # Options specific to integration testcases are described below:
25 #
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.
29 #                                   # Values:
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".
34 #
35 # biDirectional testing for OP2P is not yet supported.
36 # biDirectional must be set to False.
37 #
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.
47
48 #
49 # Common TestSteps parts ("macros")
50 #
51
52 # P2P 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'}],
59 ]
60
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'],
68 ]
69
70 # PVP and PVVP macros
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
77 ]
78
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'],
85 ]
86
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'}],
92 ]
93
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
101
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
105 ]
106
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
111
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'}],
119 ]
120
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
130
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
136 ]
137
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
144
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'}],
166 ]
167
168 STEP_VSWITCH_P4VP_FLOWS_FINIT = [
169     ['vswitch', 'dump_flows', 'int_br0'],
170     ['vswitch', 'del_flow', 'int_br0'],
171 ] + STEP_VSWITCH_P4VP_FINIT
172
173 STEP_VSWITCH_2PHY_2VM_INIT = STEP_VSWITCH_PVVP_INIT
174
175 STEP_VSWITCH_2PHY_2VM_FINIT = STEP_VSWITCH_PVVP_FINIT
176
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'}],
204 ]
205
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
211 ]
212
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
219
220 STEP_VSWITCH_FLOWS_FINIT = [
221     ['vswitch', 'dump_flows', 'int_br0'],
222     ['vswitch', 'del_flow', 'int_br0'],
223 ]
224
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'}],
274 ]
275
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
281 ]
282
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'}],
308 ]
309
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
316
317 #
318 # Definition of integration tests
319 #
320 INTEGRATION_TESTS = [
321     {
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."),
331         "Parameters": {'TRAFFICGEN_IXNET_TCL_SCRIPT' : 'ixnetrfc2544v2.tcl'},
332     },
333     {
334         "Name": "overlay_p2p_tput",
335         "Traffic Type": "rfc2544",
336         "Deployment": "op2p",
337         "biDirectional": 'False',
338         "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
339         "Tunnel Operation": "encapsulation",
340         "Description": "Overlay Encapsulation Throughput RFC2544 Test",
341         "Parameters": {'TRAFFICGEN_IXNET_TCL_SCRIPT' : 'ixnetrfc2544v2.tcl'},
342     },
343     {
344         "Name": "overlay_p2p_cont",
345         "Traffic Type": "continuous",
346         "Deployment": "op2p",
347         "biDirectional": 'False',
348         "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
349         "Tunnel Operation": "encapsulation",
350         "Description": "Overlay Encapsulation Continuous Stream",
351         "Parameters": {'TRAFFICGEN_IXNET_TCL_SCRIPT' : 'ixnetrfc2544v2.tcl'},
352     },
353     {
354         "Name": "overlay_p2p_decap_tput",
355         "Traffic Type": "rfc2544",
356         "Deployment": "op2p",
357         "biDirectional": 'False',
358         "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
359         "Tunnel Operation": "decapsulation",
360         "Description": "Overlay Decapsulation Throughput RFC2544 Test",
361         "Parameters": {'TRAFFICGEN_IXNET_TCL_SCRIPT' : 'ixnetrfc2544v2.tcl'},
362     },
363     {
364         "Name": "overlay_p2p_decap_cont",
365         "Traffic Type": "continuous",
366         "Deployment": "op2p",
367         "biDirectional": 'False',
368         "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
369         "Tunnel Operation": "decapsulation",
370         "Description": "Overlay Decapsulation Continuous Stream",
371         "Parameters": {'TRAFFICGEN_IXNET_TCL_SCRIPT' : 'ixnetrfc2544v2.tcl'},
372     },
373     {
374         "Name": "vswitch_add_del_bridge",
375         "Deployment": "clean",
376         "Description": "vSwitch - add and delete bridge",
377         "TestSteps": [
378                         ['vswitch', 'add_switch', 'int_br0'],
379                         ['vswitch', 'del_switch', 'int_br0'],
380                      ]
381     },
382     {
383         "Name": "vswitch_add_del_bridges",
384         "Deployment": "clean",
385         "Description": "vSwitch - add and delete bridges",
386         "TestSteps": [
387                         ['vswitch', 'add_switch', 'int_br0'],
388                         ['vswitch', 'add_switch', 'int_br1'],
389                         ['vswitch', 'del_switch', 'int_br0'],
390                         ['vswitch', 'del_switch', 'int_br1'],
391                      ]
392     },
393     {
394         "Name": "vswitch_add_del_phy_port",
395         "Deployment": "clean",
396         "Description": "vSwitch - add and delete physical port",
397         "TestSteps": [
398                         ['vswitch', 'add_switch', 'int_br0'],
399                         ['vswitch', 'add_phy_port', 'int_br0'],
400                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
401                         ['vswitch', 'del_switch', 'int_br0'],
402                      ]
403     },
404     {
405         "Name": "vswitch_add_del_phy_ports",
406         "Deployment": "clean",
407         "Description": "vSwitch - add and delete physical ports",
408         "TestSteps": [
409                         ['vswitch', 'add_switch', 'int_br0'],
410                         ['vswitch', 'add_phy_port', 'int_br0'],
411                         ['vswitch', 'add_phy_port', 'int_br0'],
412                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
413                         ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
414                         ['vswitch', 'del_switch', 'int_br0'],
415                      ]
416     },
417     {
418         "Name": "vswitch_add_del_vport",
419         "Deployment": "clean",
420         "Description": "vSwitch - add and delete virtual port",
421         "TestSteps": [
422                         ['vswitch', 'add_switch', 'int_br0'],
423                         ['vswitch', 'add_vport', 'int_br0'],
424                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
425                         ['vswitch', 'del_switch', 'int_br0'],
426                      ]
427     },
428     {
429         "Name": "vswitch_add_del_vports",
430         "Deployment": "clean",
431         "Description": "vSwitch - add and delete virtual ports",
432         "TestSteps": [
433                         ['vswitch', 'add_switch', 'int_br0'],
434                         ['vswitch', 'add_vport', 'int_br0'],
435                         ['vswitch', 'add_vport', 'int_br0'],
436                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
437                         ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
438                         ['vswitch', 'del_switch', 'int_br0'],
439                      ]
440     },
441     {
442         "Name": "vswitch_add_del_flow",
443         "Deployment": "clean",
444         "Description": "vSwitch - add and delete flow",
445         "TestSteps": [
446                         ['vswitch', 'add_switch', 'int_br0'],
447                         ['vswitch', 'add_phy_port', 'int_br0'],
448                         ['vswitch', 'add_phy_port', 'int_br0'],
449                         ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
450                         ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[1][1]'}],
451                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
452                         ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
453                         ['vswitch', 'del_switch', 'int_br0'],
454                      ]
455     },
456     {
457         "Name": "vswitch_vports_add_del_flow",
458         "Deployment": "clean",
459         "Description": "vSwitch - configure switch with vports, add and delete flow",
460         "TestSteps": [
461                         ['vswitch', 'add_switch', 'int_br0'],
462                         ['vswitch', 'add_vport', 'int_br0'],
463                         ['vswitch', 'add_vport', 'int_br0'],
464                         ['vswitch', 'add_flow', 'int_br0', {'in_port': '#STEP[1][1]', 'actions': ['output:#STEP[2][1]'], 'idle_timeout': '0'}],
465                         ['vswitch', 'del_flow', 'int_br0', {'in_port': '#STEP[1][1]'}],
466                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
467                         ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
468                         ['vswitch', 'del_switch', 'int_br0'],
469                      ]
470     },
471     {
472         "Name": "vswitch_add_del_flows",
473         "Deployment": "clean",
474         "Description": "vSwitch - add and delete flows",
475         "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
476                      STEP_VSWITCH_P2P_FLOWS_FINIT
477     },
478     {
479         "Name": "vswitch_p2p_tput",
480         "Deployment": "clean",
481         "Description": "vSwitch - configure switch and execute RFC2544 throughput test",
482         "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
483                      [
484                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
485                      ] +
486                      STEP_VSWITCH_P2P_FLOWS_FINIT
487     },
488     {
489         "Name": "vswitch_p2p_back2back",
490         "Deployment": "clean",
491         "Description": "vSwitch - configure switch and execute RFC2544 back2back test",
492         "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
493                      [
494                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
495                      ] +
496                      STEP_VSWITCH_P2P_FLOWS_FINIT
497     },
498     {
499         "Name": "vswitch_p2p_cont",
500         "Deployment": "clean",
501         "Description": "vSwitch - configure switch and execute continuous stream test",
502         "TestSteps": STEP_VSWITCH_P2P_FLOWS_INIT +
503                      [
504                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
505                      ] +
506                      STEP_VSWITCH_P2P_FLOWS_FINIT
507     },
508     {
509         "Name": "vswitch_pvp",
510         "Deployment": "clean",
511         "Description": "vSwitch - configure switch and one vnf",
512         "TestSteps": STEP_VSWITCH_PVP_INIT +
513                      [
514                         ['vnf', 'start'],
515                         ['vnf', 'stop'],
516                      ] +
517                      STEP_VSWITCH_PVP_FINIT
518     },
519     {
520         "Name": "vswitch_vports_pvp",
521         "Deployment": "clean",
522         "Description": "vSwitch - configure switch with vports and one vnf",
523         "TestSteps": [
524                         ['vswitch', 'add_switch', 'int_br0'],
525                         ['vswitch', 'add_vport', 'int_br0'],
526                         ['vswitch', 'add_vport', 'int_br0'],
527                         ['vnf', 'start'],
528                         ['vnf', 'stop'],
529                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
530                         ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
531                         ['vswitch', 'del_switch', 'int_br0'],
532                      ]
533     },
534     {
535         "Name": "vswitch_pvp_tput",
536         "Deployment": "clean",
537         "Description": "vSwitch - configure switch, vnf and execute RFC2544 throughput test",
538         "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
539                      [
540                         ['vnf', 'start'],
541                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
542                         ['vnf', 'stop'],
543                      ] +
544                      STEP_VSWITCH_PVP_FLOWS_FINIT
545     },
546     {
547         "Name": "vswitch_pvp_back2back",
548         "Deployment": "clean",
549         "Description": "vSwitch - configure switch, vnf and execute RFC2544 back2back test",
550         "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
551                      [
552                         ['vnf', 'start'],
553                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
554                         ['vnf', 'stop'],
555                      ] +
556                      STEP_VSWITCH_PVP_FLOWS_FINIT
557     },
558     {
559         "Name": "vswitch_pvp_cont",
560         "Deployment": "clean",
561         "Description": "vSwitch - configure switch, vnf and execute continuous stream test",
562         "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
563                      [
564                         ['vnf', 'start'],
565                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
566                         ['vnf', 'stop'],
567                      ] +
568                      STEP_VSWITCH_PVP_FLOWS_FINIT
569     },
570     {
571         "Name": "vswitch_pvp_all",
572         "Deployment": "clean",
573         "Description": "vSwitch - configure switch, vnf and execute all test types",
574         "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
575                      [
576                         ['vnf', 'start'],
577                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
578                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
579                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
580                         ['vnf', 'stop'],
581                      ] +
582                      STEP_VSWITCH_PVP_FLOWS_FINIT
583     },
584     {
585         "Name": "vswitch_pvvp",
586         "Deployment": "clean",
587         "Description": "vSwitch - configure switch and two vnfs",
588         "TestSteps": STEP_VSWITCH_PVVP_INIT +
589                      [
590                         ['vnf1', 'start'],
591                         ['vnf2', 'start'],
592                         ['vnf1', 'stop'],
593                         ['vnf2', 'stop'],
594                      ] +
595                      STEP_VSWITCH_PVVP_FINIT
596     },
597     {
598         "Name": "vswitch_pvvp_tput",
599         "Deployment": "clean",
600         "Description": "vSwitch - configure switch, two chained vnfs and execute RFC2544 throughput test",
601         "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
602                      [
603                         ['vnf1', 'start'],
604                         ['vnf2', 'start'],
605                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
606                         ['vnf1', 'stop'],
607                         ['vnf2', 'stop'],
608                      ] +
609                      STEP_VSWITCH_PVVP_FLOWS_FINIT
610     },
611     {
612         "Name": "vswitch_pvvp_back2back",
613         "Deployment": "clean",
614         "Description": "vSwitch - configure switch, two chained vnfs and execute RFC2544 back2back test",
615         "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
616                      [
617                         ['vnf1', 'start'],
618                         ['vnf2', 'start'],
619                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
620                         ['vnf1', 'stop'],
621                         ['vnf2', 'stop'],
622                      ] +
623                      STEP_VSWITCH_PVVP_FLOWS_FINIT
624     },
625     {
626         "Name": "vswitch_pvvp_cont",
627         "Deployment": "clean",
628         "Description": "vSwitch - configure switch, two chained vnfs and execute continuous stream test",
629         "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
630                      [
631                         ['vnf1', 'start'],
632                         ['vnf2', 'start'],
633                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
634                         ['vnf1', 'stop'],
635                         ['vnf2', 'stop'],
636                      ] +
637                      STEP_VSWITCH_PVVP_FLOWS_FINIT
638     },
639     {
640         "Name": "vswitch_pvvp_all",
641         "Deployment": "clean",
642         "Description": "vSwitch - configure switch, two chained vnfs and execute all test types",
643         "TestSteps": STEP_VSWITCH_PVVP_FLOWS_INIT +
644                      [
645                         ['vnf1', 'start'],
646                         ['vnf2', 'start'],
647                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
648                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
649                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
650                         ['vnf1', 'stop'],
651                         ['vnf2', 'stop'],
652                      ] +
653                      STEP_VSWITCH_PVVP_FLOWS_FINIT
654     },
655     {
656         "Name": "vswitch_p4vp",
657         "Description": "Just configure 4 chained vnfs",
658         "Deployment": "clean",
659         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
660         [
661             ['vnf1', 'start'],
662             ['vnf2', 'start'],
663             ['vnf3', 'start'],
664             ['vnf4', 'start'],
665             ['vnf1', 'stop'],
666             ['vnf2', 'stop'],
667             ['vnf3', 'stop'],
668             ['vnf4', 'stop'],
669         ] +
670         STEP_VSWITCH_P4VP_FLOWS_FINIT
671     },
672     {
673         "Name": "vswitch_p4vp_tput",
674         "Description": "4 chained vnfs, execute RFC2544 throughput test",
675         "Deployment": "clean",
676         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
677         [
678             ['vnf1', 'start'],
679             ['vnf2', 'start'],
680             ['vnf3', 'start'],
681             ['vnf4', 'start'],
682             ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', \
683                 'bidir' : 'True'}],
684             ['vnf1', 'stop'],
685             ['vnf2', 'stop'],
686             ['vnf3', 'stop'],
687             ['vnf4', 'stop'],
688         ] +
689         STEP_VSWITCH_P4VP_FLOWS_FINIT
690     },
691     {
692         "Name": "vswitch_p4vp_back2back",
693         "Description": "4 chained vnfs, execute RFC2544 back2back test",
694         "Deployment": "clean",
695         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
696         [
697             ['vnf1', 'start'],
698             ['vnf2', 'start'],
699             ['vnf3', 'start'],
700             ['vnf4', 'start'],
701             ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', \
702                 'bidir' : 'True'}],
703             ['vnf1', 'stop'],
704             ['vnf2', 'stop'],
705             ['vnf3', 'stop'],
706             ['vnf4', 'stop'],
707         ] +
708         STEP_VSWITCH_P4VP_FLOWS_FINIT
709     },
710     {
711         "Name": "vswitch_p4vp_cont",
712         "Description": "4 chained vnfs, execute continuous stream test",
713         "Deployment": "clean",
714         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
715         [
716             ['vnf1', 'start'],
717             ['vnf2', 'start'],
718             ['vnf3', 'start'],
719             ['vnf4', 'start'],
720             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', \
721                 'bidir' : 'True'}],
722             ['vnf1', 'stop'],
723             ['vnf2', 'stop'],
724             ['vnf3', 'stop'],
725             ['vnf4', 'stop'],
726         ] +
727         STEP_VSWITCH_P4VP_FLOWS_FINIT
728     },
729     {
730         "Name": "vswitch_p4vp_all",
731         "Description": "4 chained vnfs, execute RFC2544 throughput test",
732         "Deployment": "clean",
733         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
734         [
735             ['vnf1', 'start'],
736             ['vnf2', 'start'],
737             ['vnf3', 'start'],
738             ['vnf4', 'start'],
739             ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', \
740                 'bidir' : 'True'}],
741             ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', \
742                 'bidir' : 'True'}],
743             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', \
744                 'bidir' : 'True'}],
745             ['vnf1', 'stop'],
746             ['vnf2', 'stop'],
747             ['vnf3', 'stop'],
748             ['vnf4', 'stop'],
749         ] +
750         STEP_VSWITCH_P4VP_FLOWS_FINIT
751     },
752     {
753       # Topology: 2 Parallel PVP connections
754       # To run a Linux bridge as a loopback in the Guest use:
755       #     --test-params "GUEST_LOOPBACK=['linux_bridge']" --integration 2pvp_udp_dest_flows
756       # or add "Parameters" option to the test definition:
757       #     "Parameters" : {'GUEST_LOOPBACK' : ['linux_bridge'],},
758         "Name": "2pvp_udp_dest_flows",
759         "Description": "Continuous TC with 2 Parallel VMs, flows on UDP Dest Port",
760         "Deployment": "clean",
761         "Stream Type": "L4",
762         "MultiStream": 2,
763         "TestSteps": STEP_VSWITCH_2PHY_2VM_INIT +
764             STEP_VSWITCH_2_PARALLEL_VM_FLOWS_INIT + [
765             # Start 2 VMs
766             ['vnf1', 'start'],
767             ['vnf2', 'start'],
768             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
769             ['vnf1', 'stop'],
770             ['vnf2', 'stop'],
771             # Clean up
772         ] + STEP_VSWITCH_FLOWS_FINIT +
773             STEP_VSWITCH_2PHY_2VM_FINIT
774     },
775     {
776       # Topology: 4 Parallel PVP connections
777       # To run a Linux bridge as a loopback in the Guest use:
778       #     --test-params "GUEST_LOOPBACK=['linux_bridge']" --integration 4pvp_udp_dest_flows
779       # or add "Parameters" option to the test definition:
780       #     "Parameters" : {'GUEST_LOOPBACK' : ['linux_bridge'],},
781         "Name": "4pvp_udp_dest_flows",
782         "Description": "Continuous TC with 4 Parallel VMs, flows on UDP Dest Port",
783         "Deployment": "clean",
784         "Stream Type": "L4",
785         "MultiStream": 4,
786         "TestSteps": STEP_VSWITCH_2PHY_4VM_INIT +
787             STEP_VSWITCH_4_PARALLEL_VM_FLOWS_INIT + [
788             # Start 4 VMs
789             ['vnf1', 'start'],
790             ['vnf2', 'start'],
791             ['vnf3', 'start'],
792             ['vnf4', 'start'],
793             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
794             ['vnf1', 'stop'],
795             ['vnf2', 'stop'],
796             ['vnf3', 'stop'],
797             ['vnf4', 'stop'],
798             # Clean up
799         ] + STEP_VSWITCH_FLOWS_FINIT +
800             STEP_VSWITCH_2PHY_4VM_FINIT
801     },
802     {
803       # Topology: 6 Parallel PVP connections
804       # To run a Linux bridge as a loopback in the Guest use:
805       #     --test-params "GUEST_LOOPBACK=['linux_bridge']" --integration 6pvp_udp_dest_flows
806       # or add "Parameters" option to the test definition:
807       #     "Parameters" : {'GUEST_LOOPBACK' : ['linux_bridge'],},
808         "Name": "6pvp_udp_dest_flows",
809         "Description": "Continuous TC with 6 Parallel VMs, flows on UDP Dest Port",
810         "Deployment": "clean",
811         "Stream Type": "L4",
812         "MultiStream": 6,
813         "TestSteps": STEP_VSWITCH_2PHY_6VM_INIT +
814             STEP_VSWITCH_6_PARALLEL_VM_FLOWS_INIT + [
815             # Start VMs
816             ['vnf1', 'start'],
817             ['vnf2', 'start'],
818             ['vnf3', 'start'],
819             ['vnf4', 'start'],
820             ['vnf5', 'start'],
821             ['vnf6', 'start'],
822             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
823             ['vnf1', 'stop'],
824             ['vnf2', 'stop'],
825             ['vnf3', 'stop'],
826             ['vnf4', 'stop'],
827             ['vnf5', 'stop'],
828             ['vnf6', 'stop'],
829         ] + STEP_VSWITCH_FLOWS_FINIT +
830         STEP_VSWITCH_2PHY_6VM_FINIT
831     },
832     {
833         # Testcase for verification of vHost User NUMA awareness feature
834         # introduced in DPDK v2.2. Test case will execute two VNFs, each
835         # pinned to different NUMA slot. After that it will verify that
836         # QEMU and PMD threads serving its interfaces are co-located
837         # at the same NUMA slot.
838         #
839         # Prerequisites:
840         #     * architecture with at least 2 NUMA slots
841         #     * OVS with DPDK support and DPDK v2.2 and newer
842         #     * OVS configuration utilizing both NUMA slots
843         #
844         #     Example of OVS configuration valid for DPDK v16.04 and cores
845         #     split between NUMA slots as follows:
846         #           node 0 cpus: 0 1 2 3 4 5 6 7 8 9
847         #           node 1 cpus: 10 11 12 13 14 15 16 17 18 19
848         #
849         #     VSWITCH_PMD_CPU_MASK = '1010'
850         #     VSWITCHD_DPDK_CONFIG = {
851         #         'dpdk-init' : 'true',
852         #         'dpdk-lcore-mask' : '0x4004',
853         #         'pmd-cpu-mask' : 'FF0FF',
854         #         'dpdk-socket-mem' : '1024,1024',
855         #     }
856         #
857         "Name": "vhost_numa_awareness",
858         "Deployment": "clean",
859         "Description": "vSwitch DPDK - verify that PMD threads are served "
860                        "by the same NUMA slot as QEMU instances",
861         "vSwitch" : "OvsDpdkVhost",
862         "TestSteps": STEP_VSWITCH_PVVP_INIT +                                       # STEP 0-6
863             [
864                 # check that at least 2 numa slots are available
865                 ['tools', 'exec', 'numactl -H', 'available: ([0-9]+)'],             # STEP 7
866                 ['tools', 'assert', '#STEP[-1][0]>1'],                              # STEP 8
867                 # store last 2 cores from numa slot 0
868                 ['tools', 'exec', 'numactl -H', 'node 0 cpus:.*\s+(\\d+) (\\d+)$'], # STEP 9
869                 # store last 2 cores from numa slot 1
870                 ['tools', 'exec', 'numactl -H', 'node 1 cpus:.*\s+(\\d+) (\\d+)$'], # STEP 10
871                 # pin VNF1 to 1st NUMA slot and VNF2 to 2nd NUMA slot
872                 ['settings', 'setValue', 'GUEST_CORE_BINDING',                      # STEP 11
873                     [("#STEP[-2][0][0]", "#STEP[-2][0][1]"),
874                      ("#STEP[-1][0][0]", "#STEP[-1][0][1]")]
875                 ],
876                 # start 2 VNFs
877                 ['vnf1', 'start'],                                                  # STEP 12
878                 ['vnf2', 'start'],                                                  # STEP 13
879                 # read paths to ovs utilities
880                 ['settings', 'getValue', 'TOOLS'],                                  # STEP 14
881                 # check that PMD thread serving VNF1 runs at NUMA slot 0
882                 ## i.e. get numa slot ID serving dpdhvhostuser0...
883                 ['tools', 'exec', "sudo #STEP[-1]['ovs-appctl'] "                   # STEP 15
884                     "dpif-netdev/pmd-rxq-show | "
885                     "sed -e '/dpdkvhostuser0/,$d' | tac",
886                     'pmd thread numa_id ([0-9])+'
887                 ],
888                 ## ...and check that it is NUMA slot 0
889                 ['tools', 'assert', '#STEP[-1][0]==0'],                             # STEP 16
890                 # check that PMD thread serving VNF2 runs at NUMA slot 1
891                 ## i.e. get numa slot ID serving dpdhvhostuser2...
892                 ['tools', 'exec', "sudo #STEP[-3]['ovs-appctl'] "                   # STEP 17
893                     "dpif-netdev/pmd-rxq-show | "
894                     "sed -e '/dpdkvhostuser2/,$d' | tac",
895                     'pmd thread numa_id ([0-9])+'
896                 ],
897                 ## ...and check that it is NUMA slot 1
898                 ['tools', 'assert', '#STEP[-1][0]==1'],                             # STEP 18
899                 # clean up
900                 ['vnf2', 'stop'],                                                   # STEP 19
901                 ['vnf1', 'stop'],                                                   # STEP 20
902             ] +
903             STEP_VSWITCH_PVVP_FINIT                                                 # STEP 21...
904     },
905 ]
906
907 # Example of TC definition with exact vSwitch, VNF and TRAFFICGEN values.
908 #    {
909 #        "Name": "ovs_vanilla_linux_bridge_pvp_cont",
910 #        "Deployment": "clean",
911 #        "Description": "vSwitch - configure OVS Vanilla, QemuVirtioNet with linux bridge and execute continuous stream test",
912 #        "vSwitch" : "OvsVanilla",
913 #        "VNF" : "QemuVirtioNet",
914 #        "Trafficgen": "IxNet",
915 #        "Parameters": {"GUEST_LOOPBACK" : ["linux_bridge"],},
916 #        "TestSteps": STEP_VSWITCH_PVP_FLOWS_INIT +
917 #                     [
918 #                        ['vnf', 'start'],
919 #                        ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
920 #                        ['vnf', 'stop'],
921 #                     ] +
922 #                     STEP_VSWITCH_PVP_FLOWS_FINIT
923 #    },