CSIT-213 IPv6 iACL - performance
[csit.git] / resources / libraries / robot / performance.robot
1 # Copyright (c) 2016 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 *** Settings ***
15 | Library | resources.libraries.python.topology.Topology
16 | Library | resources.libraries.python.NodePath
17 | Library | resources.libraries.python.InterfaceUtil
18 | Library | resources.libraries.python.TrafficGenerator
19 | Library | resources.libraries.python.TrafficGenerator.TGDropRateSearchImpl
20 | Resource | resources/libraries/robot/default.robot
21 | Resource | resources/libraries/robot/interfaces.robot
22 | Resource | resources/libraries/robot/counters.robot
23 | Resource | resources/libraries/robot/bridge_domain.robot
24 | Resource | resources/libraries/robot/l2_xconnect.robot
25 | Resource | resources/libraries/robot/ipv4.robot
26 | Resource | resources/libraries/robot/ipv6.robot
27 | Documentation | Performance suite keywords
28
29 *** Keywords ***
30 | Setup performance rate Variables
31 | | [Documentation]
32 | | ... | Setup performance linerates as Suite Variables. Variables are used
33 | | ... | as search boundaries in RFC2544 throughput search.
34 | | ...
35 | | ... | _NOTE:_ This KW sets following suite variables:
36 | | ... | - 10Ge_linerate_pps_64B - Maximum number of packet per second
37 | | ... |                           for 10GE with 64B L2 Frame.
38 | | ... | - 10Ge_linerate_pps_68B - Maximum number of packet per second
39 | | ... |                           for 10GE with 68B L2 Frame.
40 | | ... | - 10Ge_linerate_pps_72B - Maximum number of packet per second
41 | | ... |                           for 10GE with 72B L2 Frame.
42 | | ... | - 10Ge_linerate_pps_78B - Maximum number of packet per second
43 | | ... |                           for 10GE with 78B L2 Frame.
44 | | ... | - 10Ge_linerate_pps_1518B - Maximum number of packet per second
45 | | ... |                             for 10GE with 1518B L2 Frame.
46 | | ... | - 10Ge_linerate_pps_1522B - Maximum number of packet per second
47 | | ... |                             for 10GE with 1522B L2 Frame.
48 | | ... | - 10Ge_linerate_pps_1526B - Maximum number of packet per second
49 | | ... |                             for 10GE with 1526B L2 Frame.
50 | | ... | - 10Ge_linerate_pps_9000B - Maximum number of packet per second
51 | | ... |                             for 10GE with 9000B L2 Frame.
52 | | ... | - 10Ge_linerate_pps_9004B - Maximum number of packet per second
53 | | ... |                             for 10GE with 9004B L2 Frame.
54 | | ... | - 10Ge_linerate_pps_9008B - Maximum number of packet per second
55 | | ... |                             for 10GE with 9008B L2 Frame.
56 | | ... | - 10Ge_linerate_pps_IMIX_v4_1 - Maximum number of packet per second
57 | | ... |                                 for 10GE with IMIX_v4_1 profile.
58 | | ... | - 40Ge_linerate_pps_64B - Maximum number of packet per second
59 | | ... |                           for 40GE with 64B L2 Frame.
60 | | ... | - 40Ge_linerate_pps_68B - Maximum number of packet per second
61 | | ... |                           for 40GE with 68B L2 Frame.
62 | | ... | - 40Ge_linerate_pps_72B - Maximum number of packet per second
63 | | ... |                           for 40GE with 72B L2 Frame.
64 | | ... | - 40Ge_linerate_pps_78B - Maximum number of packet per second
65 | | ... |                           for 40GE with 78B L2 Frame.
66 | | ... | - 40Ge_linerate_pps_1518B - Maximum number of packet per second
67 | | ... |                             for 40GE with 1518B L2 Frame.
68 | | ... | - 40Ge_linerate_pps_1522B - Maximum number of packet per second
69 | | ... |                             for 40GE with 1522B L2 Frame.
70 | | ... | - 40Ge_linerate_pps_1526B - Maximum number of packet per second
71 | | ... |                             for 40GE with 1526B L2 Frame.
72 | | ... | - 40Ge_linerate_pps_9000B - Maximum number of packet per second
73 | | ... |                             for 40GE with 9000B L2 Frame.
74 | | ... | - 40Ge_linerate_pps_9004B - Maximum number of packet per second
75 | | ... |                             for 40GE with 9004B L2 Frame.
76 | | ... | - 40Ge_linerate_pps_9008B - Maximum number of packet per second
77 | | ... |                             for 40GE with 9008B L2 Frame.
78 | | ...
79 | | Set Suite Variable | ${10Ge_linerate_pps_64B} | 14880952
80 | | Set Suite Variable | ${10Ge_linerate_pps_68B} | 14204545
81 | | Set Suite Variable | ${10Ge_linerate_pps_72B} | 13586956
82 | | Set Suite Variable | ${10Ge_linerate_pps_78B} | 12755102
83 | | Set Suite Variable | ${10Ge_linerate_pps_1518B} | 812743
84 | | Set Suite Variable | ${10Ge_linerate_pps_1522B} | 810635
85 | | Set Suite Variable | ${10Ge_linerate_pps_9000B} | 138580
86 | | Set Suite Variable | ${10Ge_linerate_pps_9004B} | 138519
87 | | Set Suite Variable | ${10Ge_linerate_pps_9008B} | 138458
88 | | Set Suite Variable | ${10Ge_linerate_pps_IMIX_v4_1} | 3343736
89 | | Set Suite Variable | ${40Ge_linerate_pps_64B} | 59523809
90 | | Set Suite Variable | ${40Ge_linerate_pps_68B} | 56818181
91 | | Set Suite Variable | ${40Ge_linerate_pps_72B} | 54347826
92 | | Set Suite Variable | ${40Ge_linerate_pps_78B} | 51020408
93 | | Set Suite Variable | ${40Ge_linerate_pps_1518B} | 3250975
94 | | Set Suite Variable | ${40Ge_linerate_pps_1522B} | 3242542
95 | | Set Suite Variable | ${40Ge_linerate_pps_9000B} | 554323
96 | | Set Suite Variable | ${40Ge_linerate_pps_9004B} | 554078
97 | | Set Suite Variable | ${40Ge_linerate_pps_9008B} | 553832
98
99 | Get Frame Size
100 | | [Documentation]
101 | | ... | Framesize can be either integer in case of a single packet
102 | | ... | in stream, or set of packets in case of IMIX type or simmilar.
103 | | ... | This keyword returns average framesize.
104 | | ...
105 | | ... | *Arguments:*
106 | | ... | - framesize - Framesize. Type: integer or string
107 | | ...
108 | | ... | *Example:*
109 | | ...
110 | | ... | \| Get Frame Size \| IMIX_v4_1
111 | | [Arguments] | ${framesize}
112 | | Run Keyword If | '${framesize}' == 'IMIX_v4_1'
113 | | ...            | Return From Keyword | 353.83333
114 | | Return From Keyword | ${framesize}
115
116 | Setup performance global Variables
117 | | [Documentation]
118 | | ... | Setup suite Variables. Variables are used across performance testing.
119 | | ...
120 | | ... | _NOTE:_ This KW sets following suite variables:
121 | | ... | - glob_loss_acceptance - Loss acceptance treshold
122 | | ... | - glob_loss_acceptance_type - Loss acceptance treshold type
123 | | ...
124 | | Set Suite Variable | ${glob_loss_acceptance} | 0.5
125 | | Set Suite Variable | ${glob_loss_acceptance_type} | percentage
126
127 | 2-node circular Topology Variables Setup
128 | | [Documentation]
129 | | ... | Compute path for testing on two given nodes in circular
130 | | ... | topology and set corresponding suite variables.
131 | | ...
132 | | ... | _NOTE:_ This KW sets following suite variables:
133 | | ... | - tg - TG node
134 | | ... | - tg_if1 - 1st TG interface towards DUT.
135 | | ... | - tg_if2 - 2nd TG interface towards DUT.
136 | | ... | - dut1 - DUT1 node
137 | | ... | - dut1_if1 - 1st DUT interface towards TG.
138 | | ... | - dut1_if2 - 2nd DUT interface towards TG.
139 | | ...
140 | | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
141 | | Compute Path
142 | | ${tg_if1} | ${tg}= | Next Interface
143 | | ${dut1_if1} | ${dut1}= | Next Interface
144 | | ${dut1_if2} | ${dut1}= | Next Interface
145 | | ${tg_if2} | ${tg}= | Next Interface
146 | | Set Suite Variable | ${tg}
147 | | Set Suite Variable | ${tg_if1}
148 | | Set Suite Variable | ${tg_if2}
149 | | Set Suite Variable | ${dut1}
150 | | Set Suite Variable | ${dut1_if1}
151 | | Set Suite Variable | ${dut1_if2}
152
153 | 3-node circular Topology Variables Setup
154 | | [Documentation]
155 | | ... | Compute path for testing on three given nodes in circular
156 | | ... | topology and set corresponding suite variables.
157 | | ...
158 | | ... | _NOTE:_ This KW sets following suite variables:
159 | | ... | - tg - TG node
160 | | ... | - tg_if1 - TG interface towards DUT1.
161 | | ... | - tg_if2 - TG interface towards DUT2.
162 | | ... | - dut1 - DUT1 node
163 | | ... | - dut1_if1 - DUT1 interface towards TG.
164 | | ... | - dut1_if2 - DUT1 interface towards DUT2.
165 | | ... | - dut2 - DUT2 node
166 | | ... | - dut2_if1 - DUT2 interface towards TG.
167 | | ... | - dut2_if2 - DUT2 interface towards DUT1.
168 | | ...
169 | | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']}
170 | | ...          | ${nodes['TG']}
171 | | Compute Path
172 | | ${tg_if1} | ${tg}= | Next Interface
173 | | ${dut1_if1} | ${dut1}= | Next Interface
174 | | ${dut1_if2} | ${dut1}= | Next Interface
175 | | ${dut2_if1} | ${dut2}= | Next Interface
176 | | ${dut2_if2} | ${dut2}= | Next Interface
177 | | ${tg_if2} | ${tg}= | Next Interface
178 | | Set Suite Variable | ${tg}
179 | | Set Suite Variable | ${tg_if1}
180 | | Set Suite Variable | ${tg_if2}
181 | | Set Suite Variable | ${dut1}
182 | | Set Suite Variable | ${dut1_if1}
183 | | Set Suite Variable | ${dut1_if2}
184 | | Set Suite Variable | ${dut2}
185 | | Set Suite Variable | ${dut2_if1}
186 | | Set Suite Variable | ${dut2_if2}
187
188 | 2-node circular Topology Variables Setup with DUT interface model
189 | | [Documentation]
190 | | ... | Compute path for testing on two given nodes in circular topology
191 | | ... | based on interface model provided as an argument and set
192 | | ... | corresponding suite variables.
193 | | ...
194 | | ... | *Arguments:*
195 | | ... | - iface_model - Interface model. Type: string
196 | | ...
197 | | ... | _NOTE:_ This KW sets following suite variables:
198 | | ... | - tg - TG node
199 | | ... | - tg_if1 - 1st TG interface towards DUT.
200 | | ... | - tg_if2 - 2nd TG interface towards DUT.
201 | | ... | - dut1 - DUT1 node
202 | | ... | - dut1_if1 - 1st DUT interface towards TG.
203 | | ... | - dut1_if2 - 2nd DUT interface towards TG.
204 | | ...
205 | | ... | *Example:*
206 | | ...
207 | | ... | \| 2-node circular Topology Variables Setup with DUT interface model \
208 | | ... | \| Intel-X520-DA2 \|
209 | | [Arguments] | ${iface_model}
210 | | ${iface_model_list}= | Create list | ${iface_model}
211 | | Append Node | ${nodes['TG']}
212 | | Append Node | ${nodes['DUT1']} | filter_list=${iface_model_list}
213 | | Append Node | ${nodes['TG']}
214 | | Compute Path
215 | | ${tg_if1} | ${tg}= | Next Interface
216 | | ${dut1_if1} | ${dut1}= | Next Interface
217 | | ${dut1_if2} | ${dut1}= | Next Interface
218 | | ${tg_if2} | ${tg}= | Next Interface
219 | | Set Suite Variable | ${tg}
220 | | Set Suite Variable | ${tg_if1}
221 | | Set Suite Variable | ${tg_if2}
222 | | Set Suite Variable | ${dut1}
223 | | Set Suite Variable | ${dut1_if1}
224 | | Set Suite Variable | ${dut1_if2}
225
226 | 3-node circular Topology Variables Setup with DUT interface model
227 | | [Documentation]
228 | | ... | Compute path for testing on three given nodes in circular topology
229 | | ... | based on interface model provided as an argument and set
230 | | ... | corresponding suite variables.
231 | | ...
232 | | ... | *Arguments:*
233 | | ... | - iface_model - Interface model. Type: string
234 | | ...
235 | | ... | _NOTE:_ This KW sets following suite variables:
236 | | ... | - tg - TG node
237 | | ... | - tg_if1 - TG interface towards DUT1.
238 | | ... | - tg_if2 - TG interface towards DUT2.
239 | | ... | - dut1 - DUT1 node
240 | | ... | - dut1_if1 - DUT1 interface towards TG.
241 | | ... | - dut1_if2 - DUT1 interface towards DUT2.
242 | | ... | - dut2 - DUT2 node
243 | | ... | - dut2_if1 - DUT2 interface towards TG.
244 | | ... | - dut2_if2 - DUT2 interface towards DUT1.
245 | | ...
246 | | ... | *Example:*
247 | | ...
248 | | ... | \| 3-node circular Topology Variables Setup with DUT interface model \
249 | | ... | \| Intel-X520-DA2 \|
250 | | [Arguments] | ${iface_model}
251 | | ${iface_model_list}= | Create list | ${iface_model}
252 | | Append Node | ${nodes['TG']}
253 | | Append Node | ${nodes['DUT1']} | filter_list=${iface_model_list}
254 | | Append Node | ${nodes['DUT2']} | filter_list=${iface_model_list}
255 | | Append Node | ${nodes['TG']}
256 | | Compute Path
257 | | ${tg_if1} | ${tg}= | Next Interface
258 | | ${dut1_if1} | ${dut1}= | Next Interface
259 | | ${dut1_if2} | ${dut1}= | Next Interface
260 | | ${dut2_if1} | ${dut2}= | Next Interface
261 | | ${dut2_if2} | ${dut2}= | Next Interface
262 | | ${tg_if2} | ${tg}= | Next Interface
263 | | Set Suite Variable | ${tg}
264 | | Set Suite Variable | ${tg_if1}
265 | | Set Suite Variable | ${tg_if2}
266 | | Set Suite Variable | ${dut1}
267 | | Set Suite Variable | ${dut1_if1}
268 | | Set Suite Variable | ${dut1_if2}
269 | | Set Suite Variable | ${dut2}
270 | | Set Suite Variable | ${dut2_if1}
271 | | Set Suite Variable | ${dut2_if2}
272
273 | VPP interfaces in path are up in a 2-node circular topology
274 | | [Documentation]
275 | | ... | *Set UP state on VPP interfaces in path on nodes in 2-node circular
276 | | ... | topology.*
277 | | ...
278 | | Set Interface State | ${dut1} | ${dut1_if1} | up
279 | | Set Interface State | ${dut1} | ${dut1_if2} | up
280 | | Vpp Node Interfaces Ready Wait | ${dut1}
281
282 | VPP interfaces in path are up in a 3-node circular topology
283 | | [Documentation]
284 | | ... | *Set UP state on VPP interfaces in path on nodes in 3-node circular
285 | | ... | topology.*
286 | | ...
287 | | Set Interface State | ${dut1} | ${dut1_if1} | up
288 | | Set Interface State | ${dut1} | ${dut1_if2} | up
289 | | Set Interface State | ${dut2} | ${dut2_if1} | up
290 | | Set Interface State | ${dut2} | ${dut2_if2} | up
291 | | Vpp Node Interfaces Ready Wait | ${dut1}
292 | | Vpp Node Interfaces Ready Wait | ${dut2}
293
294 | IPv4 forwarding initialized in a 3-node circular topology
295 | | [Documentation]
296 | | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
297 | | ... | topology. Get the interface MAC addresses and setup ARP on all VPP
298 | | ... | interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG links and
299 | | ... | /30 prefix on DUT1-DUT2 link. Set routing on both DUT nodes with
300 | | ... | prefix /24 and next hop of neighbour DUT interface IPv4 address.
301 | | ...
302 | | Set Interface State | ${dut1} | ${dut1_if1} | up
303 | | Set Interface State | ${dut1} | ${dut1_if2} | up
304 | | Set Interface State | ${dut2} | ${dut2_if1} | up
305 | | Set Interface State | ${dut2} | ${dut2_if2} | up
306 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
307 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
308 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
309 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
310 | | dut1_v4.set_arp | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
311 | | dut1_v4.set_arp | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac}
312 | | dut2_v4.set_arp | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac}
313 | | dut2_v4.set_arp | ${dut2_if2} | 20.20.20.2 | ${tg1_if2_mac}
314 | | dut1_v4.set_ip | ${dut1_if1} | 10.10.10.1 | 24
315 | | dut1_v4.set_ip | ${dut1_if2} | 1.1.1.1 | 30
316 | | dut2_v4.set_ip | ${dut2_if1} | 1.1.1.2 | 30
317 | | dut2_v4.set_ip | ${dut2_if2} | 20.20.20.1 | 24
318 | | dut1_v4.set_route | 20.20.20.0 | 24 | 1.1.1.2 | ${dut1_if2}
319 | | dut2_v4.set_route | 10.10.10.0 | 24 | 1.1.1.1 | ${dut2_if1}
320 | | All Vpp Interfaces Ready Wait | ${nodes}
321
322 | Scale IPv4 forwarding initialized in a 3-node circular topology
323 | | [Documentation]
324 | | ... | Custom setup of IPv4 topology with scalability of ip routes on all
325 | | ... | DUT nodes in 3-node circular topology
326 | | ...
327 | | ... | *Arguments:*
328 | | ... | - ${count} - IP route count. Type: integer
329 | | ...
330 | | ... | *Return:*
331 | | ... | - No value returned
332 | | ...
333 | | ... | *Example:*
334 | | ...
335 | | ... | \| Scale IPv4 forwarding initialized in a 3-node circular topology \
336 | | ... | \| 100000 \|
337 | | [Arguments] | ${count}
338 | | Set Interface State | ${dut1} | ${dut1_if1} | up
339 | | Set Interface State | ${dut1} | ${dut1_if2} | up
340 | | Set Interface State | ${dut2} | ${dut2_if1} | up
341 | | Set Interface State | ${dut2} | ${dut2_if2} | up
342 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
343 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
344 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
345 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
346 | | Add arp on dut | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac}
347 | | Add arp on dut | ${dut1} | ${dut1_if2} | 2.2.2.2 | ${dut2_if1_mac}
348 | | Add arp on dut | ${dut2} | ${dut2_if1} | 2.2.2.1 | ${dut1_if2_mac}
349 | | Add arp on dut | ${dut2} | ${dut2_if2} | 3.3.3.1 | ${tg1_if2_mac}
350 | | IP addresses are set on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30
351 | | IP addresses are set on interfaces | ${dut1} | ${dut1_if2} | 2.2.2.1 | 30
352 | | IP addresses are set on interfaces | ${dut2} | ${dut2_if1} | 2.2.2.2 | 30
353 | | IP addresses are set on interfaces | ${dut2} | ${dut2_if2} | 3.3.3.2 | 30
354 | | Vpp Route Add | ${dut1} | 10.0.0.0 | 32 | 1.1.1.1 | ${dut1_if1}
355 | | ...           | count=${count}
356 | | Vpp Route Add | ${dut1} | 20.0.0.0 | 32 | 2.2.2.2 | ${dut1_if2}
357 | | ...           | count=${count}
358 | | Vpp Route Add | ${dut2} | 10.0.0.0 | 32 | 2.2.2.1 | ${dut2_if1}
359 | | ...           | count=${count}
360 | | Vpp Route Add | ${dut2} | 20.0.0.0 | 32 | 3.3.3.1 | ${dut2_if2}
361 | | ...           | count=${count}
362 | | All Vpp Interfaces Ready Wait | ${nodes}
363
364 | IPv6 forwarding initialized in a 3-node circular topology
365 | | [Documentation]
366 | | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
367 | | ... | topology. Get the interface MAC addresses and setup neighbour on all
368 | | ... | VPP interfaces. Setup IPv6 addresses with /128 prefixes on all
369 | | ... | interfaces. Set routing on both DUT nodes with prefix /64 and
370 | | ... | next hop of neighbour DUT interface IPv6 address.
371 | | ...
372 | | ${prefix}= | Set Variable | 64
373 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
374 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
375 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
376 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
377 | | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2001:1::1 | ${prefix}
378 | | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | 2001:3::1 | ${prefix}
379 | | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | 2001:3::2 | ${prefix}
380 | | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | 2001:2::1 | ${prefix}
381 | | Vpp nodes ra suppress link layer | ${nodes}
382 | | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
383 | | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
384 | | Add Ip Neighbor | ${dut1} | ${dut1_if2} | 2001:3::2 | ${dut2_if1_mac}
385 | | Add Ip Neighbor | ${dut2} | ${dut2_if1} | 2001:3::1 | ${dut1_if2_mac}
386 | | Vpp Route Add | ${dut1} | 2001:2::0 | ${prefix} | 2001:3::2 | ${dut1_if2}
387 | | Vpp Route Add | ${dut2} | 2001:1::0 | ${prefix} | 2001:3::1 | ${dut2_if1}
388
389 | Scale IPv6 forwarding initialized in a 3-node circular topology
390 | | [Documentation]
391 | | ... | Custom setup of IPv6 topology with scalability of ip routes on all
392 | | ... | DUT nodes in 3-node circular topology
393 | | ...
394 | | ... | *Arguments:*
395 | | ... | - ${count} - IP route count. Type: integer
396 | | ...
397 | | ... | *Return:*
398 | | ... | - No value returned
399 | | ...
400 | | ... | *Example:*
401 | | ...
402 | | ... | \| Scale IPv6 forwarding initialized in a 3-node circular topology \
403 | | ... | \| 100000 \|
404 | | [Arguments] | ${count}
405 | | ${subn_prefix}= | Set Variable | 64
406 | | ${host_prefix}= | Set Variable | 128
407 | | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2001:3::1 | ${subn_prefix}
408 | | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | 2001:4::1 | ${subn_prefix}
409 | | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | 2001:4::2 | ${subn_prefix}
410 | | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | 2001:5::1 | ${subn_prefix}
411 | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
412 | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
413 | | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
414 | | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
415 | | Vpp nodes ra suppress link layer | ${nodes}
416 | | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:3::2 | ${tg1_if1_mac}
417 | | Add Ip Neighbor | ${dut1} | ${dut1_if2} | 2001:4::2 | ${dut2_if1_mac}
418 | | Add Ip Neighbor | ${dut2} | ${dut2_if1} | 2001:4::1 | ${dut1_if2_mac}
419 | | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:5::2 | ${tg1_if2_mac}
420 | | Vpp Route Add | ${dut1} | 2001:2::0 | ${host_prefix} | 2001:4::2
421 | | ...           | interface=${dut1_if2} | count=${count}
422 | | Vpp Route Add | ${dut1} | 2001:1::0 | ${host_prefix} | 2001:3::2
423 | | ...           | interface=${dut1_if1} | count=${count}
424 | | Vpp Route Add | ${dut2} | 2001:1::0 | ${host_prefix} | 2001:4::1
425 | | ...           | interface=${dut2_if2} | count=${count}
426 | | Vpp Route Add | ${dut2} | 2001:2::0 | ${host_prefix} | 2001:5::2
427 | | ...           | interface=${dut2_if1} | count=${count}
428
429 | IPv6 iAcl whitelist initialized in a 3-node circular topology
430 | | [Documentation]
431 | | ... | Creates classify L3 table on DUTs. IPv6 iAcl security whitelist
432 | | ... | ingress /64 filter entries applied on links TG - DUT1 and DUT2 - TG.
433 | | ...
434 | | ${table_idx} | ${skip_n} | ${match_n}= | And Vpp Creates Classify Table L3
435 | | ... | ${dut1} | ip6 | dst
436 | | And Vpp Configures Classify Session L3
437 | | ... | ${dut1} | permit | ${table_idx} | ${skip_n} | ${match_n}
438 | | ... | ip6 | dst | 2001:2::2
439 | | And Vpp Enable Input Acl Interface
440 | | ... | ${dut1} | ${dut1_if1} | ip6 | ${table_idx}
441 | | ${table_idx} | ${skip_n} | ${match_n}= | And Vpp Creates Classify Table L3
442 | | ... | ${dut2} | ip6 | dst
443 | | And Vpp Configures Classify Session L3
444 | | ... | ${dut2} | permit | ${table_idx} | ${skip_n} | ${match_n}
445 | | ... | ip6 | dst | 2001:1::2
446 | | And Vpp Enable Input Acl Interface
447 | | ... | ${dut2} | ${dut2_if2} | ip6 | ${table_idx}
448
449 | L2 xconnect initialized in a 3-node circular topology
450 | | [Documentation]
451 | | ... | Setup L2 xconnect topology by cross connecting two interfaces on
452 | | ... | each DUT. Interfaces are brought up.
453 | | ... |
454 | | L2 setup xconnect on DUT | ${dut1} | ${dut1_if1} | ${dut1_if2}
455 | | L2 setup xconnect on DUT | ${dut2} | ${dut2_if1} | ${dut2_if2}
456 | | All Vpp Interfaces Ready Wait | ${nodes}
457
458 | L2 bridge domain initialized in a 3-node circular topology
459 | | [Documentation]
460 | | ... | Setup L2 DB topology by adding two interfaces on each DUT into BD
461 | | ... | that is created automatically with index 1. Learning is enabled.
462 | | ... | Interfaces are brought up.
463 | | ... |
464 | | Vpp l2bd forwarding setup | ${dut1} | ${dut1_if1} | ${dut1_if2}
465 | | Vpp l2bd forwarding setup | ${dut2} | ${dut2_if1} | ${dut2_if2}
466 | | All Vpp Interfaces Ready Wait | ${nodes}
467
468 | 2-node Performance Suite Setup
469 | | [Documentation]
470 | | ... | Suite preparation phase that setup default startup configuration of
471 | | ... | VPP on all DUTs. Updates interfaces on all nodes and setup global
472 | | ... | variables used in test cases. Initializes traffic generator.
473 | | ...
474 | | ... | *Arguments:*
475 | | ... | - topology_type - Topology type. Type: string
476 | | ...
477 | | ... | *Example:*
478 | | ...
479 | | ... | \| 2-node Performance Suite Setup \| L2 \|
480 | | [Arguments] | ${topology_type}
481 | | Setup default startup configuration of VPP on all DUTs
482 | | Show vpp version on all DUTs
483 | | Setup performance rate Variables
484 | | Setup performance global Variables
485 | | 2-node circular Topology Variables Setup
486 | | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
487 | | ...                          | ${dut1} | ${dut1_if1}
488 | | ...                          | ${dut1} | ${dut1_if2}
489 | | ...                          | ${topology_type}
490
491 | 3-node Performance Suite Setup
492 | | [Documentation]
493 | | ... | Suite preparation phase that setup default startup configuration of
494 | | ... | VPP on all DUTs. Updates interfaces on all nodes and setup global
495 | | ... | variables used in test cases. Initializes traffic generator.
496 | | ...
497 | | ... | *Arguments:*
498 | | ... | - topology_type - Topology type. Type: string
499 | | ...
500 | | ... | *Example:*
501 | | ...
502 | | ... | \| 3-node Performance Suite Setup \| L2 \|
503 | | [Arguments] | ${topology_type}
504 | | Setup default startup configuration of VPP on all DUTs
505 | | Show vpp version on all DUTs
506 | | Setup performance rate Variables
507 | | Setup performance global Variables
508 | | 3-node circular Topology Variables Setup
509 | | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
510 | | ...                          | ${dut1} | ${dut1_if1}
511 | | ...                          | ${dut2} | ${dut2_if2}
512 | | ...                          | ${topology_type}
513
514 2-node Performance Suite Setup with DUT's NIC model
515 | | [Documentation]
516 | | ... | Suite preparation phase that setup default startup configuration of
517 | | ... | VPP on all DUTs. Updates interfaces on all nodes and setup global
518 | | ... | variables used in test cases based on interface model provided as an
519 | | ... | argument. Initializes traffic generator.
520 | | ...
521 | | ... | *Arguments:*
522 | | ... | - topology_type - Topology type. Type: string
523 | | ... | - nic_model - Interface model. Type: string
524 | | ...
525 | | ... | *Example:*
526 | | ...
527 | | ... | \| 2-node Performance Suite Setup \| L2 \| Intel-X520-DA2 \|
528 | | [Arguments] | ${topology_type} | ${nic_model}
529 | | Setup default startup configuration of VPP on all DUTs
530 | | Show vpp version on all DUTs
531 | | Setup performance rate Variables
532 | | Setup performance global Variables
533 | | 2-node circular Topology Variables Setup with DUT interface model
534 | | ... | ${nic_model}
535 | | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
536 | | ...                          | ${dut1} | ${dut1_if1}
537 | | ...                          | ${dut1} | ${dut1_if2}
538 | | ...                          | ${topology_type}
539
540 3-node Performance Suite Setup with DUT's NIC model
541 | | [Documentation]
542 | | ... | Suite preparation phase that setup default startup configuration of
543 | | ... | VPP on all DUTs. Updates interfaces on all nodes and setup global
544 | | ... | variables used in test cases based on interface model provided as an
545 | | ... | argument. Initializes traffic generator.
546 | | ...
547 | | ... | *Arguments:*
548 | | ... | - topology_type - Topology type. Type: string
549 | | ... | - nic_model - Interface model. Type: string
550 | | ...
551 | | ... | *Example:*
552 | | ...
553 | | ... | \| 3-node Performance Suite Setup \| L2 \| Intel-X520-DA2 \|
554 | | [Arguments] | ${topology_type} | ${nic_model}
555 | | Setup default startup configuration of VPP on all DUTs
556 | | Show vpp version on all DUTs
557 | | Setup performance rate Variables
558 | | Setup performance global Variables
559 | | 3-node circular Topology Variables Setup with DUT interface model
560 | | ... | ${nic_model}
561 | | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
562 | | ...                          | ${dut1} | ${dut1_if1}
563 | | ...                          | ${dut2} | ${dut2_if2}
564 | | ...                          | ${topology_type}
565
566 | 3-node Performance Suite Teardown
567 | | [Documentation]
568 | | ... | Suite teardown phase with traffic generator teardown.
569 | | ...
570 | | Teardown traffic generator | ${tg}
571
572 | Find NDR using linear search and pps
573 | | [Documentation]
574 | | ... | Find throughput by using RFC2544 linear search with non drop rate.
575 | | ...
576 | | ... | *Arguments:*
577 | | ... | - framesize - L2 Frame Size [B]. Type: integer
578 | | ... | - start_rate - Initial start rate [pps]. Type: float
579 | | ... | - step_rate - Step of linear search [pps]. Type: float
580 | | ... | - topology_type - Topology type. Type: string
581 | | ... | - min_rate - Lower limit of search [pps]. Type: float
582 | | ... | - max_rate - Upper limit of search [pps]. Type: float
583 | | ...
584 | | ... | *Return:*
585 | | ... | - No value returned
586 | | ...
587 | | ... | *Example:*
588 | | ...
589 | | ... | \| Find NDR using linear search and pps \| 64 \| 5000000 \| \
590 | | ... | \| 100000 \| 3-node-IPv4 \| 100000 \| 14880952
591 | | [Arguments] | ${framesize} | ${start_rate} | ${step_rate}
592 | | ...         | ${topology_type} | ${min_rate} | ${max_rate}
593 | | ${duration}= | Set Variable | 10
594 | | Set Duration | ${duration}
595 | | Set Search Rate Boundaries | ${max_rate} | ${min_rate}
596 | | Set Search Linear Step | ${step_rate}
597 | | Set Search Frame Size | ${framesize}
598 | | Set Search Rate Type pps
599 | | Linear Search | ${start_rate} | ${topology_type}
600 | | ${rate_per_stream} | ${latency}= | Verify Search Result
601 | | Display result of NDR search | ${rate_per_stream} | ${framesize} | 2
602 | | ...                          | ${latency}
603 | | Traffic should pass with no loss | ${duration} | ${rate_per_stream}pps
604 | | ...                              | ${framesize} | ${topology_type}
605 | | ...                              | fail_on_loss=${False}
606
607 | Find PDR using linear search and pps
608 | | [Documentation]
609 | | ... | Find throughput by using RFC2544 linear search with partial drop rate
610 | | ... | with PDR threshold and type specified by parameter.
611 | | ...
612 | | ... | *Arguments:*
613 | | ... | - framesize - L2 Frame Size [B]. Type: integer
614 | | ... | - start_rate - Initial start rate [pps]. Type: float
615 | | ... | - step_rate - Step of linear search [pps]. Type: float
616 | | ... | - topology_type - Topology type. Type: string
617 | | ... | - min_rate - Lower limit of search [pps]. Type: float
618 | | ... | - max_rate - Upper limit of search [pps]. Type: float
619 | | ... | - loss_acceptance - Accepted loss during search. Type: float
620 | | ... | - loss_acceptance_type - Percentage or frames. Type: string
621 | | ...
622 | | ... | *Example:*
623 | | ...
624 | | ... | \| Find PDR using linear search and pps \| 64 \| 5000000 \
625 | | ... | \| 100000 \| 3-node-IPv4 \| 100000 \| 14880952 \| 0.5 \| percentage
626 | | [Arguments] | ${framesize} | ${start_rate} | ${step_rate}
627 | | ...         | ${topology_type} | ${min_rate} | ${max_rate}
628 | | ...         | ${loss_acceptance}=0 | ${loss_acceptance_type}='frames'
629 | | ${duration}= | Set Variable | 10
630 | | Set Duration | ${duration}
631 | | Set Search Rate Boundaries | ${max_rate} | ${min_rate}
632 | | Set Search Linear Step | ${step_rate}
633 | | Set Search Frame Size | ${framesize}
634 | | Set Search Rate Type pps
635 | | Set Loss Acceptance | ${loss_acceptance}
636 | | Run Keyword If | '${loss_acceptance_type}' == 'percentage'
637 | | ...            | Set Loss Acceptance Type Percentage
638 | | Linear Search | ${start_rate} | ${topology_type}
639 | | ${rate_per_stream} | ${latency}= | Verify Search Result
640 | | Display result of PDR search | ${rate_per_stream} | ${framesize} | 2
641 | | ...                          | ${loss_acceptance} | ${loss_acceptance_type}
642 | | ...                          | ${latency}
643 | | Traffic should pass with partial loss | ${duration} | ${rate_per_stream}pps
644 | | ...                                   | ${framesize} | ${topology_type}
645 | | ...                                   | ${loss_acceptance}
646 | | ...                                   | ${loss_acceptance_type}
647 | | ...                                   | fail_on_loss=${False}
648
649 | Find NDR using binary search and pps
650 | | [Documentation]
651 | | ... | Find throughput by using RFC2544 binary search with non drop rate.
652 | | ...
653 | | ... | *Arguments:*
654 | | ... | - framesize - L2 Frame Size [B]. Type: integer
655 | | ... | - binary_min - Lower boundary of search [pps]. Type: float
656 | | ... | - binary_max - Upper boundary of search [pps]. Type: float
657 | | ... | - topology_type - Topology type. Type: string
658 | | ... | - min_rate - Lower limit of search [pps]. Type: float
659 | | ... | - max_rate - Upper limit of search [pps]. Type: float
660 | | ... | - threshold - Threshold to stop search [pps]. Type: integer
661 | | ...
662 | | ... | *Example:*
663 | | ...
664 | | ... | \| Find NDR using binary search and pps \| 64 \| 6000000 \
665 | | ... | \| 12000000 \| 3-node-IPv4 \| 100000 \| 14880952 \| 50000
666 | | [Arguments] | ${framesize} | ${binary_min} | ${binary_max}
667 | | ...         | ${topology_type} | ${min_rate} | ${max_rate} | ${threshold}
668 | | ${duration}= | Set Variable | 10
669 | | Set Duration | ${duration}
670 | | Set Search Rate Boundaries | ${max_rate} | ${min_rate}
671 | | Set Search Frame Size | ${framesize}
672 | | Set Search Rate Type pps
673 | | Set Binary Convergence Threshold | ${threshold}
674 | | Binary Search | ${binary_min} | ${binary_max} | ${topology_type}
675 | | ${rate_per_stream} | ${latency}= | Verify Search Result
676 | | Display result of NDR search | ${rate_per_stream} | ${framesize} | 2
677 | | ...                          | ${latency}
678 | | Traffic should pass with no loss | ${duration} | ${rate_per_stream}pps
679 | | ...                              | ${framesize} | ${topology_type}
680 | | ...                              | fail_on_loss=${False}
681
682 | Find PDR using binary search and pps
683 | | [Documentation]
684 | | ... | Find throughput by using RFC2544 binary search with partial drop rate
685 | | ... | with PDR threshold and type specified by parameter.
686 | | ...
687 | | ... | *Arguments:*
688 | | ... | - framesize - L2 Frame Size [B]. Type: integer
689 | | ... | - binary_min - Lower boundary of search [pps]. Type: float
690 | | ... | - binary_max - Upper boundary of search [pps]. Type: float
691 | | ... | - topology_type - Topology type. Type: string
692 | | ... | - min_rate - Lower limit of search [pps]. Type: float
693 | | ... | - max_rate - Upper limit of search [pps]. Type: float
694 | | ... | - threshold - Threshold to stop search [pps]. Type: integer
695 | | ... | - loss_acceptance - Accepted loss during search. Type: float
696 | | ... | - loss_acceptance_type - Percentage or frames. Type: string
697 | | ...
698 | | ... | *Example:*
699 | | ...
700 | | ... | \| Find PDR using binary search and pps \| 64 \| 6000000 \
701 | | ... | \| 12000000 \| 3-node-IPv4 \| 100000 \| 14880952 \| 50000 \| 0.5 \
702 | | ... | \| percentage
703 | | [Arguments] | ${framesize} | ${binary_min} | ${binary_max}
704 | | ...         | ${topology_type} | ${min_rate} | ${max_rate} | ${threshold}
705 | | ...         | ${loss_acceptance}=0 | ${loss_acceptance_type}='frames'
706 | | ${duration}= | Set Variable | 10
707 | | Set Duration | ${duration}
708 | | Set Search Rate Boundaries | ${max_rate} | ${min_rate}
709 | | Set Search Frame Size | ${framesize}
710 | | Set Search Rate Type pps
711 | | Set Loss Acceptance | ${loss_acceptance}
712 | | Run Keyword If | '${loss_acceptance_type}' == 'percentage'
713 | | ...            | Set Loss Acceptance Type Percentage
714 | | Set Binary Convergence Threshold | ${threshold}
715 | | Binary Search | ${binary_min} | ${binary_max} | ${topology_type}
716 | | ${rate_per_stream} | ${latency}= | Verify Search Result
717 | | Display result of PDR search | ${rate_per_stream} | ${framesize} | 2
718 | | ...                          | ${loss_acceptance} | ${loss_acceptance_type}
719 | | ...                          | ${latency}
720 | | Traffic should pass with partial loss | ${duration} | ${rate_per_stream}pps
721 | | ...                                   | ${framesize} | ${topology_type}
722 | | ...                                   | ${loss_acceptance}
723 | | ...                                   | ${loss_acceptance_type}
724 | | ...                                   | fail_on_loss=${False}
725
726 | Find NDR using combined search and pps
727 | | [Documentation]
728 | | ... | Find throughput by using RFC2544 combined search (linear+binary) with
729 | | ... | non drop rate.
730 | | ...
731 | | ... | *Arguments:*
732 | | ... | - framesize - L2 Frame Size [B]. Type: integer
733 | | ... | - start_rate - Initial start rate [pps]. Type: float
734 | | ... | - step_rate - Step of linear search [pps]. Type: float
735 | | ... | - topology_type - Topology type. Type: string
736 | | ... | - min_rate - Lower limit of search [pps]. Type: float
737 | | ... | - max_rate - Upper limit of search [pps]. Type: float
738 | | ... | - threshold - Threshold to stop search [pps]. Type: integer
739 | | ...
740 | | ... | *Example:*
741 | | ...
742 | | ... | \| Find NDR using combined search and pps \| 64 \| 5000000 \
743 | | ... | \| 100000 \| 3-node-IPv4 \| 100000 \| 14880952 \| 5000
744 | | [Arguments] | ${framesize} | ${start_rate} | ${step_rate}
745 | | ...         | ${topology_type} | ${min_rate} | ${max_rate} | ${threshold}
746 | | ${duration}= | Set Variable | 10
747 | | Set Duration | ${duration}
748 | | Set Search Rate Boundaries | ${max_rate} | ${min_rate}
749 | | Set Search Linear Step | ${step_rate}
750 | | Set Search Frame Size | ${framesize}
751 | | Set Search Rate Type pps
752 | | Set Binary Convergence Threshold | ${threshold}
753 | | Combined Search | ${start_rate} | ${topology_type}
754 | | ${rate_per_stream} | ${latency}= | Verify Search Result
755 | | Display result of NDR search | ${rate_per_stream} | ${framesize} | 2
756 | | ...                          | ${latency}
757 | | Traffic should pass with no loss | ${duration} | ${rate_per_stream}pps
758 | | ...                              | ${framesize} | ${topology_type}
759 | | ...                              | fail_on_loss=${False}
760
761 | Find PDR using combined search and pps
762 | | [Documentation]
763 | | ... | Find throughput by using RFC2544 combined search (linear+binary) with
764 | | ... | partial drop rate with PDR threshold and type specified by parameter.
765 | | ...
766 | | ... | *Arguments:*
767 | | ... | - framesize - L2 Frame Size [B]. Type: integer
768 | | ... | - start_rate - Initial start rate [pps]. Type: float
769 | | ... | - step_rate - Step of linear search [pps]. Type: float
770 | | ... | - topology_type - Topology type. Type: string
771 | | ... | - min_rate - Lower limit of search [pps]. Type: float
772 | | ... | - max_rate - Upper limit of search [pps]. Type: float
773 | | ... | - threshold - Threshold to stop search [pps]. Type: integer
774 | | ... | - loss_acceptance - Accepted loss during search. Type: float
775 | | ... | - loss_acceptance_type - Percentage or frames. Type: string
776 | | ...
777 | | ... | *Example:*
778 | | ...
779 | | ... | \| Find PDR using combined search and pps \| 64 \| 5000000 \
780 | | ... | \| 100000 \| 3-node-IPv4 \| 100000 \| 14880952 \| 5000 \| 0.5 \
781 | | ... | \| percentage
782 | | [Arguments] | ${framesize} | ${start_rate} | ${step_rate}
783 | | ...         | ${topology_type} | ${min_rate} | ${max_rate} | ${threshold}
784 | | ...         | ${loss_acceptance}=0 | ${loss_acceptance_type}='frames'
785 | | ${duration}= | Set Variable | 10
786 | | Set Duration | ${duration}
787 | | Set Search Rate Boundaries | ${max_rate} | ${min_rate}
788 | | Set Search Linear Step | ${step_rate}
789 | | Set Search Frame Size | ${framesize}
790 | | Set Search Rate Type pps
791 | | Set Loss Acceptance | ${loss_acceptance}
792 | | Run Keyword If | '${loss_acceptance_type}' == 'percentage'
793 | | ...            | Set Loss Acceptance Type Percentage
794 | | Set Binary Convergence Threshold | ${threshold}
795 | | Combined Search | ${start_rate} | ${topology_type}
796 | | ${rate_per_stream} | ${latency}= | Verify Search Result
797 | | Display result of PDR search | ${rate_per_stream} | ${framesize} | 2
798 | | ...                          | ${loss_acceptance} | ${loss_acceptance_type}
799 | | ...                          | ${latency}
800 | | Traffic should pass with partial loss | ${duration} | ${rate_per_stream}pps
801 | | ...                                   | ${framesize} | ${topology_type}
802 | | ...                                   | ${loss_acceptance}
803 | | ...                                   | ${loss_acceptance_type}
804 | | ...                                   | fail_on_loss=${False}
805
806 | Display result of NDR search
807 | | [Documentation]
808 | | ... | Display result of NDR search in packet per seconds (total and per
809 | | ... | stream) and Gbps total bandwidth with untagged packet.
810 | | ... | Througput is calculated as:
811 | | ... | Measured rate per stream * Total number of streams
812 | | ... | Bandwidth is calculated as:
813 | | ... | (Througput * (L2 Frame Size + IPG) * 8) / Max bitrate of NIC
814 | | ...
815 | | ... | *Arguments:*
816 | | ... | - rate_per_stream - Measured rate per stream [pps]. Type: string
817 | | ... | - framesize - L2 Frame Size [B]. Type: integer
818 | | ... | - nr_streams - Total number of streams. Type: integer
819 | | ... | - latency - Latency stats. Type: dictionary
820 | | ...
821 | | ... | *Example:*
822 | | ...
823 | | ... | \| Display result of NDR search \| 4400000 \| 64 \| 2 \
824 | | ... | \| (0, 10/10/10) \|
825 | | [Arguments] | ${rate_per_stream} | ${framesize} | ${nr_streams}
826 | | ...         | ${latency}
827 | | ${framesize}= | Get Frame Size | ${framesize}
828 | | ${rate_total}= | Evaluate | ${rate_per_stream}*${nr_streams}
829 | | ${bandwidth_total}= | Evaluate | ${rate_total}*(${framesize}+20)*8/(10**9)
830 | | Set Test Message | FINAL_RATE: ${rate_total} pps
831 | | Set Test Message | (${nr_streams}x ${rate_per_stream} pps)
832 | | ...              | append=yes
833 | | Set Test Message | ${\n}FINAL_BANDWIDTH: ${bandwidth_total} Gbps (untagged)
834 | | ...              | append=yes
835 | | :FOR | ${idx} | ${lat} | IN ENUMERATE | @{latency}
836 | | | Set Test Message | ${\n}LATENCY_STREAM_${idx}: ${lat} usec (min/avg/max)
837 | | ...                | append=yes
838
839 | Display result of PDR search
840 | | [Documentation]
841 | | ... | Display result of PDR search in packet per seconds (total and per
842 | | ... | stream) and Gbps total bandwidth with untagged packet.
843 | | ... | Througput is calculated as:
844 | | ... | Measured rate per stream * Total number of streams
845 | | ... | Bandwidth is calculated as:
846 | | ... | (Througput * (L2 Frame Size + IPG) * 8) / Max bitrate of NIC
847 | | ...
848 | | ... | *Arguments:*
849 | | ... | - rate_per_stream - Measured rate per stream [pps]. Type: string
850 | | ... | - framesize - L2 Frame Size [B]. Type: integer
851 | | ... | - nr_streams - Total number of streams. Type: integer
852 | | ... | - loss_acceptance - Accepted loss during search. Type: float
853 | | ... | - loss_acceptance_type - Percentage or frames. Type: string
854 | | ... | - latency - Latency stats. Type: dictionary
855 | | ...
856 | | ... | *Example:*
857 | | ...
858 | | ... | \| Display result of PDR search \| 4400000 \| 64 \| 2 \| 0.5 \
859 | | ... | \| percentage \| (0, 10/10/10) \|
860 | | [Arguments] | ${rate_per_stream} | ${framesize} | ${nr_streams}
861 | | ...         | ${loss_acceptance} | ${loss_acceptance_type} | ${latency}
862 | | ${framesize}= | Get Frame Size | ${framesize}
863 | | ${rate_total}= | Evaluate | ${rate_per_stream}*${nr_streams}
864 | | ${bandwidth_total}= | Evaluate | ${rate_total}*(${framesize}+20)*8/(10**9)
865 | | Set Test Message | FINAL_RATE: ${rate_total} pps
866 | | Set Test Message | (${nr_streams}x ${rate_per_stream} pps)
867 | | ...              | append=yes
868 | | Set Test Message | ${\n}FINAL_BANDWIDTH: ${bandwidth_total} Gbps (untagged)
869 | | ...              | append=yes
870 | | :FOR | ${idx} | ${lat} | IN ENUMERATE | @{latency}
871 | | | Set Test Message | ${\n}LATENCY_STREAM_${idx}: ${lat} usec (min/avg/max)
872 | | ...                | append=yes
873 | | Set Test Message | ${\n}LOSS_ACCEPTANCE: ${loss_acceptance} ${loss_acceptance_type}
874 | | ...              | append=yes
875
876 | Traffic should pass with no loss
877 | | [Documentation]
878 | | ... | Send traffic at specified rate. No packet loss is accepted at loss
879 | | ... | evaluation.
880 | | ...
881 | | ... | *Arguments:*
882 | | ... | - duration - Duration of traffic run [s]. Type: integer
883 | | ... | - rate - Rate for sending packets. Type: string
884 | | ... | - framesize - L2 Frame Size [B]. Type: integer
885 | | ... | - topology_type - Topology type. Type: string
886 | | ...
887 | | ... | *Example:*
888 | | ...
889 | | ... | \| Traffic should pass with no loss \| 10 \| 4.0mpps \| 64 \
890 | | ... | \| 3-node-IPv4
891 | | [Arguments] | ${duration} | ${rate} | ${framesize} | ${topology_type}
892 | | ...         | ${fail_on_loss}=${True}
893 | | Clear and show runtime counters with running traffic | ${duration}
894 | | ...  | ${rate} | ${framesize} | ${topology_type}
895 | | Clear all counters on all DUTs
896 | | Send traffic on tg | ${duration} | ${rate} | ${framesize}
897 | | ...                | ${topology_type} | warmup_time=0
898 | | Show statistics on all DUTs
899 | | Run Keyword If | ${fail_on_loss} | No traffic loss occurred
900
901 | Traffic should pass with partial loss
902 | | [Documentation]
903 | | ... | Send traffic at specified rate. Partial packet loss is accepted
904 | | ... | within loss acceptance value specified as argument.
905 | | ...
906 | | ... | *Arguments:*
907 | | ... | - duration - Duration of traffic run [s]. Type: integer
908 | | ... | - rate - Rate for sending packets. Type: string
909 | | ... | - framesize - L2 Frame Size [B]. Type: integer
910 | | ... | - topology_type - Topology type. Type: string
911 | | ... | - loss_acceptance - Accepted loss during search. Type: float
912 | | ... | - loss_acceptance_type - Percentage or frames. Type: string
913 | | ...
914 | | ... | *Example:*
915 | | ...
916 | | ... | \| Traffic should pass with partial loss \| 10 \| 4.0mpps \| 64 \
917 | | ... | \| 3-node-IPv4 \| 0.5 \| percentage
918 | | [Arguments] | ${duration} | ${rate} | ${framesize} | ${topology_type}
919 | | ...         | ${loss_acceptance} | ${loss_acceptance_type}
920 | | ...         | ${fail_on_loss}=${True}
921 | | Clear and show runtime counters with running traffic | ${duration}
922 | | ...  | ${rate} | ${framesize} | ${topology_type}
923 | | Clear all counters on all DUTs
924 | | Send traffic on tg | ${duration} | ${rate} | ${framesize}
925 | | ...                | ${topology_type} | warmup_time=0
926 | | Show statistics on all DUTs
927 | | Run Keyword If | ${fail_on_loss} | Partial traffic loss accepted
928 | | ...            | ${loss_acceptance} | ${loss_acceptance_type}
929
930 | Clear and show runtime counters with running traffic
931 | | [Documentation]
932 | | ... | Start traffic at specified rate then clear runtime counters on all
933 | | ... | DUTs. Wait for specified amount of time and capture runtime counters
934 | | ... | on all DUTs. Finally stop traffic
935 | | ...
936 | | ... | *Arguments:*
937 | | ... | - duration - Duration of traffic run [s]. Type: integer
938 | | ... | - rate - Rate for sending packets. Type: string
939 | | ... | - framesize - L2 Frame Size [B]. Type: integer
940 | | ... | - topology_type - Topology type. Type: string
941 | | ...
942 | | ... | *Example:*
943 | | ...
944 | | ... | \| Traffic should pass with partial loss \| 10 \| 4.0mpps \| 64 \
945 | | ... | \| 3-node-IPv4 \| 0.5 \| percentage
946 | | [Arguments] | ${duration} | ${rate} | ${framesize} | ${topology_type}
947 | | Send traffic on tg | -1 | ${rate} | ${framesize}
948 | | ...                | ${topology_type} | warmup_time=0 | async_call=${True}
949 | | ...                | latency=${False}
950 | | Clear runtime counters on all DUTs
951 | | Sleep | ${duration}
952 | | Show runtime counters on all DUTs
953 | | Stop traffic on tg
954
955 | Add PCI devices to DUTs from 3-node single link topology
956 | | ${dut1_if1_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if1}
957 | | ${dut1_if2_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if2}
958 | | ${dut2_if1_pci}= | Get Interface PCI Addr | ${dut2} | ${dut2_if1}
959 | | ${dut2_if2_pci}= | Get Interface PCI Addr | ${dut2} | ${dut2_if2}
960 | | Add PCI device | ${dut1} | ${dut1_if1_pci} | ${dut1_if2_pci}
961 | | Add PCI device | ${dut2} | ${dut2_if1_pci} | ${dut2_if2_pci}