Merge "ci: Enhance verify and merge jobs"
[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     },
332     {
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",
340     },
341     {
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",
349     },
350     {
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",
358     },
359     {
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",
367     },
368     {
369         "Name": "vswitch_add_del_bridge",
370         "Deployment": "clean",
371         "Description": "vSwitch - add and delete bridge",
372         "TestSteps": [
373                         ['vswitch', 'add_switch', 'int_br0'],
374                         ['vswitch', 'del_switch', 'int_br0'],
375                      ]
376     },
377     {
378         "Name": "vswitch_add_del_bridges",
379         "Deployment": "clean",
380         "Description": "vSwitch - add and delete bridges",
381         "TestSteps": [
382                         ['vswitch', 'add_switch', 'int_br0'],
383                         ['vswitch', 'add_switch', 'int_br1'],
384                         ['vswitch', 'del_switch', 'int_br0'],
385                         ['vswitch', 'del_switch', 'int_br1'],
386                      ]
387     },
388     {
389         "Name": "vswitch_add_del_phy_port",
390         "Deployment": "clean",
391         "Description": "vSwitch - add and delete physical port",
392         "TestSteps": [
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'],
397                      ]
398     },
399     {
400         "Name": "vswitch_add_del_phy_ports",
401         "Deployment": "clean",
402         "Description": "vSwitch - add and delete physical ports",
403         "TestSteps": [
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'],
410                      ]
411     },
412     {
413         "Name": "vswitch_add_del_vport",
414         "Deployment": "clean",
415         "Description": "vSwitch - add and delete virtual port",
416         "TestSteps": [
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'],
421                      ]
422     },
423     {
424         "Name": "vswitch_add_del_vports",
425         "Deployment": "clean",
426         "Description": "vSwitch - add and delete virtual ports",
427         "TestSteps": [
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'],
434                      ]
435     },
436     {
437         "Name": "vswitch_add_del_flow",
438         "Deployment": "clean",
439         "Description": "vSwitch - add and delete flow",
440         "TestSteps": [
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'],
449                      ]
450     },
451     {
452         "Name": "vswitch_vports_add_del_flow",
453         "Deployment": "clean",
454         "Description": "vSwitch - configure switch with vports, add and delete flow",
455         "TestSteps": [
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'],
464                      ]
465     },
466     {
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
472     },
473     {
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 +
478                      [
479                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
480                      ] +
481                      STEP_VSWITCH_P2P_FLOWS_FINIT
482     },
483     {
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 +
488                      [
489                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
490                      ] +
491                      STEP_VSWITCH_P2P_FLOWS_FINIT
492     },
493     {
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 +
498                      [
499                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
500                      ] +
501                      STEP_VSWITCH_P2P_FLOWS_FINIT
502     },
503     {
504         "Name": "vswitch_pvp",
505         "Deployment": "clean",
506         "Description": "vSwitch - configure switch and one vnf",
507         "TestSteps": STEP_VSWITCH_PVP_INIT +
508                      [
509                         ['vnf', 'start'],
510                         ['vnf', 'stop'],
511                      ] +
512                      STEP_VSWITCH_PVP_FINIT
513     },
514     {
515         "Name": "vswitch_vports_pvp",
516         "Deployment": "clean",
517         "Description": "vSwitch - configure switch with vports and one vnf",
518         "TestSteps": [
519                         ['vswitch', 'add_switch', 'int_br0'],
520                         ['vswitch', 'add_vport', 'int_br0'],
521                         ['vswitch', 'add_vport', 'int_br0'],
522                         ['vnf', 'start'],
523                         ['vnf', 'stop'],
524                         ['vswitch', 'del_port', 'int_br0', '#STEP[1][0]'],
525                         ['vswitch', 'del_port', 'int_br0', '#STEP[2][0]'],
526                         ['vswitch', 'del_switch', 'int_br0'],
527                      ]
528     },
529     {
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 +
534                      [
535                         ['vnf', 'start'],
536                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
537                         ['vnf', 'stop'],
538                      ] +
539                      STEP_VSWITCH_PVP_FLOWS_FINIT
540     },
541     {
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 +
546                      [
547                         ['vnf', 'start'],
548                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
549                         ['vnf', 'stop'],
550                      ] +
551                      STEP_VSWITCH_PVP_FLOWS_FINIT
552     },
553     {
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 +
558                      [
559                         ['vnf', 'start'],
560                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
561                         ['vnf', 'stop'],
562                      ] +
563                      STEP_VSWITCH_PVP_FLOWS_FINIT
564     },
565     {
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 +
570                      [
571                         ['vnf', 'start'],
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'}],
575                         ['vnf', 'stop'],
576                      ] +
577                      STEP_VSWITCH_PVP_FLOWS_FINIT
578     },
579     {
580         "Name": "vswitch_pvvp",
581         "Deployment": "clean",
582         "Description": "vSwitch - configure switch and two vnfs",
583         "TestSteps": STEP_VSWITCH_PVVP_INIT +
584                      [
585                         ['vnf1', 'start'],
586                         ['vnf2', 'start'],
587                         ['vnf1', 'stop'],
588                         ['vnf2', 'stop'],
589                      ] +
590                      STEP_VSWITCH_PVVP_FINIT
591     },
592     {
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 +
597                      [
598                         ['vnf1', 'start'],
599                         ['vnf2', 'start'],
600                         ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', 'bidir' : 'True'}],
601                         ['vnf1', 'stop'],
602                         ['vnf2', 'stop'],
603                      ] +
604                      STEP_VSWITCH_PVVP_FLOWS_FINIT
605     },
606     {
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 +
611                      [
612                         ['vnf1', 'start'],
613                         ['vnf2', 'start'],
614                         ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', 'bidir' : 'True'}],
615                         ['vnf1', 'stop'],
616                         ['vnf2', 'stop'],
617                      ] +
618                      STEP_VSWITCH_PVVP_FLOWS_FINIT
619     },
620     {
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 +
625                      [
626                         ['vnf1', 'start'],
627                         ['vnf2', 'start'],
628                         ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
629                         ['vnf1', 'stop'],
630                         ['vnf2', 'stop'],
631                      ] +
632                      STEP_VSWITCH_PVVP_FLOWS_FINIT
633     },
634     {
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 +
639                      [
640                         ['vnf1', 'start'],
641                         ['vnf2', 'start'],
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'}],
645                         ['vnf1', 'stop'],
646                         ['vnf2', 'stop'],
647                      ] +
648                      STEP_VSWITCH_PVVP_FLOWS_FINIT
649     },
650     {
651         "Name": "vswitch_p4vp",
652         "Description": "Just configure 4 chained vnfs",
653         "Deployment": "clean",
654         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
655         [
656             ['vnf1', 'start'],
657             ['vnf2', 'start'],
658             ['vnf3', 'start'],
659             ['vnf4', 'start'],
660             ['vnf1', 'stop'],
661             ['vnf2', 'stop'],
662             ['vnf3', 'stop'],
663             ['vnf4', 'stop'],
664         ] +
665         STEP_VSWITCH_P4VP_FLOWS_FINIT
666     },
667     {
668         "Name": "vswitch_p4vp_tput",
669         "Description": "4 chained vnfs, execute RFC2544 throughput test",
670         "Deployment": "clean",
671         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
672         [
673             ['vnf1', 'start'],
674             ['vnf2', 'start'],
675             ['vnf3', 'start'],
676             ['vnf4', 'start'],
677             ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', \
678                 'bidir' : 'True'}],
679             ['vnf1', 'stop'],
680             ['vnf2', 'stop'],
681             ['vnf3', 'stop'],
682             ['vnf4', 'stop'],
683         ] +
684         STEP_VSWITCH_P4VP_FLOWS_FINIT
685     },
686     {
687         "Name": "vswitch_p4vp_back2back",
688         "Description": "4 chained vnfs, execute RFC2544 back2back test",
689         "Deployment": "clean",
690         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
691         [
692             ['vnf1', 'start'],
693             ['vnf2', 'start'],
694             ['vnf3', 'start'],
695             ['vnf4', 'start'],
696             ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', \
697                 'bidir' : 'True'}],
698             ['vnf1', 'stop'],
699             ['vnf2', 'stop'],
700             ['vnf3', 'stop'],
701             ['vnf4', 'stop'],
702         ] +
703         STEP_VSWITCH_P4VP_FLOWS_FINIT
704     },
705     {
706         "Name": "vswitch_p4vp_cont",
707         "Description": "4 chained vnfs, execute continuous stream test",
708         "Deployment": "clean",
709         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
710         [
711             ['vnf1', 'start'],
712             ['vnf2', 'start'],
713             ['vnf3', 'start'],
714             ['vnf4', 'start'],
715             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', \
716                 'bidir' : 'True'}],
717             ['vnf1', 'stop'],
718             ['vnf2', 'stop'],
719             ['vnf3', 'stop'],
720             ['vnf4', 'stop'],
721         ] +
722         STEP_VSWITCH_P4VP_FLOWS_FINIT
723     },
724     {
725         "Name": "vswitch_p4vp_all",
726         "Description": "4 chained vnfs, execute RFC2544 throughput test",
727         "Deployment": "clean",
728         "TestSteps": STEP_VSWITCH_P4VP_FLOWS_INIT +
729         [
730             ['vnf1', 'start'],
731             ['vnf2', 'start'],
732             ['vnf3', 'start'],
733             ['vnf4', 'start'],
734             ['trafficgen', 'send_traffic', {'traffic_type' : 'throughput', \
735                 'bidir' : 'True'}],
736             ['trafficgen', 'send_traffic', {'traffic_type' : 'back2back', \
737                 'bidir' : 'True'}],
738             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', \
739                 'bidir' : 'True'}],
740             ['vnf1', 'stop'],
741             ['vnf2', 'stop'],
742             ['vnf3', 'stop'],
743             ['vnf4', 'stop'],
744         ] +
745         STEP_VSWITCH_P4VP_FLOWS_FINIT
746     },
747     {
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",
754         "Stream Type": "L4",
755         "MultiStream": 2,
756         "TestSteps": STEP_VSWITCH_2PHY_2VM_INIT +
757             STEP_VSWITCH_2_PARALLEL_VM_FLOWS_INIT + [
758             # Start 2 VMs
759             ['vnf1', 'start'],
760             ['vnf2', 'start'],
761             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
762             ['vnf1', 'stop'],
763             ['vnf2', 'stop'],
764             # Clean up
765         ] + STEP_VSWITCH_FLOWS_FINIT +
766             STEP_VSWITCH_2PHY_2VM_FINIT
767     },
768     {
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",
775         "Stream Type": "L4",
776         "MultiStream": 4,
777         "TestSteps": STEP_VSWITCH_2PHY_4VM_INIT +
778             STEP_VSWITCH_4_PARALLEL_VM_FLOWS_INIT + [
779             # Start 4 VMs
780             ['vnf1', 'start'],
781             ['vnf2', 'start'],
782             ['vnf3', 'start'],
783             ['vnf4', 'start'],
784             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
785             ['vnf1', 'stop'],
786             ['vnf2', 'stop'],
787             ['vnf3', 'stop'],
788             ['vnf4', 'stop'],
789             # Clean up
790         ] + STEP_VSWITCH_FLOWS_FINIT +
791             STEP_VSWITCH_2PHY_4VM_FINIT
792     },
793     {
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",
800         "Stream Type": "L4",
801         "MultiStream": 6,
802         "TestSteps": STEP_VSWITCH_2PHY_6VM_INIT +
803             STEP_VSWITCH_6_PARALLEL_VM_FLOWS_INIT + [
804             # Start VMs
805             ['vnf1', 'start'],
806             ['vnf2', 'start'],
807             ['vnf3', 'start'],
808             ['vnf4', 'start'],
809             ['vnf5', 'start'],
810             ['vnf6', 'start'],
811             ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'False'}],
812             ['vnf1', 'stop'],
813             ['vnf2', 'stop'],
814             ['vnf3', 'stop'],
815             ['vnf4', 'stop'],
816             ['vnf5', 'stop'],
817             ['vnf6', 'stop'],
818         ] + STEP_VSWITCH_FLOWS_FINIT +
819         STEP_VSWITCH_2PHY_6VM_FINIT
820     },
821     {
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.
827         #
828         # Prerequisites:
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
832         #
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
837         #
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',
844         #     }
845         #
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
852             [
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]")]
864                 ],
865                 # start 2 VNFs
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])+'
876                 ],
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])+'
885                 ],
886                 ## ...and check that it is NUMA slot 1
887                 ['tools', 'assert', '#STEP[-1][0]==1'],                             # STEP 18
888                 # clean up
889                 ['vnf2', 'stop'],                                                   # STEP 19
890                 ['vnf1', 'stop'],                                                   # STEP 20
891             ] +
892             STEP_VSWITCH_PVVP_FINIT                                                 # STEP 21...
893     },
894 ]
895
896 # Example of TC definition with exact vSwitch, VNF and TRAFFICGEN values.
897 #    {
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 +
906 #                     [
907 #                        ['vnf', 'start'],
908 #                        ['trafficgen', 'send_traffic', {'traffic_type' : 'continuous', 'bidir' : 'True'}],
909 #                        ['vnf', 'stop'],
910 #                     ] +
911 #                     STEP_VSWITCH_PVP_FLOWS_FINIT
912 #    },