Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1[
2 {
3 "id": "ca5e",
4 "name": "Check class delete notification for ffff:",
5 "category": [
6 "qdisc"
7 ],
8 "plugins": {
9 "requires": "nsPlugin"
10 },
11 "setup": [
12 "$IP link set dev $DUMMY up || true",
13 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
14 "$TC qdisc add dev $DUMMY root handle 1: drr",
15 "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
16 "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
17 "$TC qdisc add dev $DUMMY parent 1:1 handle ffff: drr",
18 "$TC filter add dev $DUMMY parent ffff: basic classid ffff:1",
19 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr",
20 "$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s",
21 "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true",
22 "$TC class del dev $DUMMY classid ffff:1",
23 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr"
24 ],
25 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
26 "expExitCode": "1",
27 "verifyCmd": "$TC -s qdisc ls dev $DUMMY",
28 "matchPattern": "drr 1: root",
29 "matchCount": "1",
30 "teardown": [
31 "$TC qdisc del dev $DUMMY root handle 1: drr",
32 "$IP addr del 10.10.10.10/24 dev $DUMMY"
33 ]
34 },
35 {
36 "id": "e4b7",
37 "name": "Check class delete notification for root ffff:",
38 "category": [
39 "qdisc"
40 ],
41 "plugins": {
42 "requires": "nsPlugin"
43 },
44 "setup": [
45 "$IP link set dev $DUMMY up || true",
46 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
47 "$TC qdisc add dev $DUMMY root handle ffff: drr",
48 "$TC filter add dev $DUMMY parent ffff: basic classid ffff:1",
49 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr",
50 "$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s",
51 "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true",
52 "$TC class del dev $DUMMY classid ffff:1",
53 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr"
54 ],
55 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
56 "expExitCode": "1",
57 "verifyCmd": "$TC qdisc ls dev $DUMMY",
58 "matchPattern": "drr ffff: root",
59 "matchCount": "1",
60 "teardown": [
61 "$TC qdisc del dev $DUMMY root handle ffff: drr",
62 "$IP addr del 10.10.10.10/24 dev $DUMMY"
63 ]
64 },
65 {
66 "id": "33a9",
67 "name": "Check ingress is not searchable on backlog update",
68 "category": [
69 "qdisc"
70 ],
71 "plugins": {
72 "requires": "nsPlugin"
73 },
74 "setup": [
75 "$IP link set dev $DUMMY up || true",
76 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
77 "$TC qdisc add dev $DUMMY ingress",
78 "$TC qdisc add dev $DUMMY root handle 1: drr",
79 "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
80 "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
81 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: drr",
82 "$TC filter add dev $DUMMY parent 2: basic classid 2:1",
83 "$TC class add dev $DUMMY parent 2: classid 2:1 drr",
84 "$TC qdisc add dev $DUMMY parent 2:1 netem delay 1s",
85 "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true"
86 ],
87 "cmdUnderTest": "$TC class del dev $DUMMY classid 2:1",
88 "expExitCode": "0",
89 "verifyCmd": "$TC qdisc ls dev $DUMMY",
90 "matchPattern": "drr 1: root",
91 "matchCount": "1",
92 "teardown": [
93 "$TC qdisc del dev $DUMMY root handle 1: drr",
94 "$TC qdisc del dev $DUMMY ingress",
95 "$IP addr del 10.10.10.10/24 dev $DUMMY"
96 ]
97 },
98 {
99 "id": "a4b9",
100 "name": "Test class qlen notification",
101 "category": [
102 "qdisc"
103 ],
104 "plugins": {
105 "requires": "nsPlugin"
106 },
107 "setup": [
108 "$IP link set dev $DUMMY up || true",
109 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
110 "$TC qdisc add dev $DUMMY root handle 1: drr",
111 "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
112 "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
113 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem",
114 "$TC qdisc add dev $DUMMY parent 2: handle 3: drr",
115 "$TC filter add dev $DUMMY parent 3: basic action drop",
116 "$TC class add dev $DUMMY parent 3: classid 3:1 drr",
117 "$TC class del dev $DUMMY classid 1:1",
118 "$TC class add dev $DUMMY parent 1: classid 1:1 drr"
119 ],
120 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
121 "expExitCode": "1",
122 "verifyCmd": "$TC qdisc ls dev $DUMMY",
123 "matchPattern": "drr 1: root",
124 "matchCount": "1",
125 "teardown": [
126 "$TC qdisc del dev $DUMMY root handle 1: drr",
127 "$IP addr del 10.10.10.10/24 dev $DUMMY"
128 ]
129 },
130 {
131 "id": "5456",
132 "name": "Test htb_dequeue_tree with deactivation and row emptying",
133 "category": [
134 "qdisc",
135 "htb"
136 ],
137 "plugins": {
138 "requires": "nsPlugin"
139 },
140 "setup": [
141 "$IP link set dev $DUMMY up || true",
142 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
143 "$TC qdisc add dev $DUMMY root handle 1: htb default 1",
144 "$TC class add dev $DUMMY parent 1: classid 1:1 htb rate 64bit ",
145 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem",
146 "$TC qdisc add dev $DUMMY parent 2:1 handle 3: blackhole"
147 ],
148 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
149 "expExitCode": "1",
150 "verifyCmd": "$TC -j qdisc show dev $DUMMY",
151 "matchJSON": [],
152 "teardown": [
153 "$TC qdisc del dev $DUMMY root"
154 ]
155 },
156 {
157 "id": "c024",
158 "name": "Test TBF with SKBPRIO - catch qlen corner cases",
159 "category": [
160 "qdisc",
161 "tbf",
162 "skbprio"
163 ],
164 "plugins": {
165 "requires": "nsPlugin"
166 },
167 "setup": [
168 "$IP link set dev $DUMMY up || true",
169 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
170 "$TC qdisc add dev $DUMMY handle 1: root tbf rate 100bit burst 2000 limit 1000",
171 "$TC qdisc add dev $DUMMY parent 1: handle 10: skbprio limit 1",
172 "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
173 "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
174 "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
175 "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
176 "sleep 0.5"
177 ],
178 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
179 "expExitCode": "0",
180 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc skbprio'",
181 "matchPattern": "dropped [1-9][0-9]*",
182 "matchCount": "1",
183 "teardown": [
184 "$TC qdisc del dev $DUMMY handle 1: root",
185 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
186 ]
187 },
188 {
189 "id": "34c0",
190 "name": "Test TBF with HHF Backlog Accounting in gso_skb case against underflow",
191 "category": [
192 "qdisc",
193 "tbf",
194 "hhf"
195 ],
196 "plugins": {
197 "requires": [
198 "nsPlugin"
199 ]
200 },
201 "setup": [
202 "$IP link set dev $DUMMY up || true",
203 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
204 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
205 "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 hhf limit 1000",
206 [
207 "ping -I $DUMMY -c2 10.10.11.11",
208 1
209 ],
210 "$TC qdisc change dev $DUMMY handle 2: parent 1:1 hhf limit 1"
211 ],
212 "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
213 "expExitCode": "0",
214 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
215 "matchPattern": "backlog 0b 0p",
216 "matchCount": "1",
217 "teardown": [
218 "$TC qdisc del dev $DUMMY handle 1: root"
219 ]
220 },
221 {
222 "id": "fd68",
223 "name": "Test TBF with CODEL Backlog Accounting in gso_skb case against underflow",
224 "category": [
225 "qdisc",
226 "tbf",
227 "codel"
228 ],
229 "plugins": {
230 "requires": [
231 "nsPlugin"
232 ]
233 },
234 "setup": [
235 "$IP link set dev $DUMMY up || true",
236 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
237 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
238 "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 codel limit 1000",
239 [
240 "ping -I $DUMMY -c2 10.10.11.11",
241 1
242 ],
243 "$TC qdisc change dev $DUMMY handle 2: parent 1:1 codel limit 1"
244 ],
245 "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
246 "expExitCode": "0",
247 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
248 "matchPattern": "backlog 0b 0p",
249 "matchCount": "1",
250 "teardown": [
251 "$TC qdisc del dev $DUMMY handle 1: root"
252 ]
253 },
254 {
255 "id": "514e",
256 "name": "Test TBF with PIE Backlog Accounting in gso_skb case against underflow",
257 "category": [
258 "qdisc",
259 "tbf",
260 "pie"
261 ],
262 "plugins": {
263 "requires": [
264 "nsPlugin"
265 ]
266 },
267 "setup": [
268 "$IP link set dev $DUMMY up || true",
269 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
270 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
271 "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 pie limit 1000",
272 [
273 "ping -I $DUMMY -c2 10.10.11.11",
274 1
275 ],
276 "$TC qdisc change dev $DUMMY handle 2: parent 1:1 pie limit 1"
277 ],
278 "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
279 "expExitCode": "0",
280 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
281 "matchPattern": "backlog 0b 0p",
282 "matchCount": "1",
283 "teardown": [
284 "$TC qdisc del dev $DUMMY handle 1: root"
285 ]
286 },
287 {
288 "id": "6c97",
289 "name": "Test TBF with FQ Backlog Accounting in gso_skb case against underflow",
290 "category": [
291 "qdisc",
292 "tbf",
293 "fq"
294 ],
295 "plugins": {
296 "requires": [
297 "nsPlugin"
298 ]
299 },
300 "setup": [
301 "$IP link set dev $DUMMY up || true",
302 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
303 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
304 "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq limit 1000",
305 [
306 "ping -I $DUMMY -c2 10.10.11.11",
307 1
308 ],
309 "$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq limit 1"
310 ],
311 "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
312 "expExitCode": "0",
313 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
314 "matchPattern": "backlog 0b 0p",
315 "matchCount": "1",
316 "teardown": [
317 "$TC qdisc del dev $DUMMY handle 1: root"
318 ]
319 },
320 {
321 "id": "5d0b",
322 "name": "Test TBF with FQ_CODEL Backlog Accounting in gso_skb case against underflow",
323 "category": [
324 "qdisc",
325 "tbf",
326 "fq_codel"
327 ],
328 "plugins": {
329 "requires": [
330 "nsPlugin"
331 ]
332 },
333 "setup": [
334 "$IP link set dev $DUMMY up || true",
335 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
336 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
337 "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq_codel limit 1000",
338 [
339 "ping -I $DUMMY -c2 10.10.11.11",
340 1
341 ],
342 "$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq_codel limit 1"
343 ],
344 "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
345 "expExitCode": "0",
346 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
347 "matchPattern": "backlog 0b 0p",
348 "matchCount": "1",
349 "teardown": [
350 "$TC qdisc del dev $DUMMY handle 1: root"
351 ]
352 },
353 {
354 "id": "21c3",
355 "name": "Test TBF with FQ_PIE Backlog Accounting in gso_skb case against underflow",
356 "category": [
357 "qdisc",
358 "tbf",
359 "fq_pie"
360 ],
361 "plugins": {
362 "requires": [
363 "nsPlugin"
364 ]
365 },
366 "setup": [
367 "$IP link set dev $DUMMY up || true",
368 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
369 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
370 "$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq_pie limit 1000",
371 [
372 "ping -I $DUMMY -c2 10.10.11.11",
373 1
374 ],
375 "$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq_pie limit 1"
376 ],
377 "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
378 "expExitCode": "0",
379 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
380 "matchPattern": "backlog 0b 0p",
381 "matchCount": "1",
382 "teardown": [
383 "$TC qdisc del dev $DUMMY handle 1: root"
384 ]
385 },
386 {
387 "id": "a4bb",
388 "name": "Test FQ_CODEL with HTB parent - force packet drop with empty queue",
389 "category": [
390 "qdisc",
391 "fq_codel",
392 "htb"
393 ],
394 "plugins": {
395 "requires": "nsPlugin"
396 },
397 "setup": [
398 "$IP link set dev $DUMMY up || true",
399 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
400 "$TC qdisc add dev $DUMMY handle 1: root htb default 10",
401 "$TC class add dev $DUMMY parent 1: classid 1:10 htb rate 1kbit",
402 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
403 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
404 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
405 "sleep 0.1"
406 ],
407 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
408 "expExitCode": "0",
409 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
410 "matchPattern": "dropped [1-9][0-9]*",
411 "matchCount": "1",
412 "teardown": [
413 "$TC qdisc del dev $DUMMY handle 1: root",
414 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
415 ]
416 },
417 {
418 "id": "a4be",
419 "name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue",
420 "category": [
421 "qdisc",
422 "fq_codel",
423 "qfq"
424 ],
425 "plugins": {
426 "requires": "nsPlugin"
427 },
428 "setup": [
429 "$IP link set dev $DUMMY up || true",
430 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
431 "$TC qdisc add dev $DUMMY handle 1: root qfq",
432 "$TC class add dev $DUMMY parent 1: classid 1:10 qfq weight 1 maxpkt 1000",
433 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
434 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
435 "ping -c 10 -s 1000 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
436 "sleep 0.1"
437 ],
438 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
439 "expExitCode": "0",
440 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
441 "matchPattern": "dropped [1-9][0-9]*",
442 "matchCount": "1",
443 "teardown": [
444 "$TC qdisc del dev $DUMMY handle 1: root",
445 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
446 ]
447 },
448 {
449 "id": "a4bf",
450 "name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue",
451 "category": [
452 "qdisc",
453 "fq_codel",
454 "hfsc"
455 ],
456 "plugins": {
457 "requires": "nsPlugin"
458 },
459 "setup": [
460 "$IP link set dev $DUMMY up || true",
461 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
462 "$TC qdisc add dev $DUMMY handle 1: root hfsc default 10",
463 "$TC class add dev $DUMMY parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit",
464 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
465 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
466 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
467 "sleep 0.1"
468 ],
469 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
470 "expExitCode": "0",
471 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
472 "matchPattern": "dropped [1-9][0-9]*",
473 "matchCount": "1",
474 "teardown": [
475 "$TC qdisc del dev $DUMMY handle 1: root",
476 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
477 ]
478 },
479 {
480 "id": "a4c0",
481 "name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue",
482 "category": [
483 "qdisc",
484 "fq_codel",
485 "drr"
486 ],
487 "plugins": {
488 "requires": "nsPlugin"
489 },
490 "setup": [
491 "$IP link set dev $DUMMY up || true",
492 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
493 "$TC qdisc add dev $DUMMY handle 1: root drr",
494 "$TC class add dev $DUMMY parent 1: classid 1:10 drr quantum 1500",
495 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
496 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
497 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
498 "sleep 0.1"
499 ],
500 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
501 "expExitCode": "0",
502 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
503 "matchPattern": "dropped [1-9][0-9]*",
504 "matchCount": "1",
505 "teardown": [
506 "$TC qdisc del dev $DUMMY handle 1: root",
507 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
508 ]
509 },
510 {
511 "id": "a4c1",
512 "name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue",
513 "category": [
514 "qdisc",
515 "fq_codel",
516 "ets"
517 ],
518 "plugins": {
519 "requires": "nsPlugin"
520 },
521 "setup": [
522 "$IP link set dev $DUMMY up || true",
523 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
524 "$TC qdisc add dev $DUMMY handle 1: root ets bands 2 strict 1",
525 "$TC class change dev $DUMMY parent 1: classid 1:1 ets",
526 "$TC qdisc add dev $DUMMY parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
527 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
528 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
529 "sleep 0.1"
530 ],
531 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
532 "expExitCode": "0",
533 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
534 "matchPattern": "dropped [1-9][0-9]*",
535 "matchCount": "1",
536 "teardown": [
537 "$TC qdisc del dev $DUMMY handle 1: root",
538 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
539 ]
540 },
541 {
542 "id": "a4c3",
543 "name": "Test HFSC with netem/blackhole - queue emptying during peek operation",
544 "category": [
545 "qdisc",
546 "hfsc",
547 "netem",
548 "blackhole"
549 ],
550 "plugins": {
551 "requires": "nsPlugin"
552 },
553 "setup": [
554 "$IP link set dev $DUMMY up || true",
555 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
556 "$TC qdisc add dev $DUMMY handle 1:0 root drr",
557 "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
558 "$TC class add dev $DUMMY parent 1:0 classid 1:2 drr",
559 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024",
560 "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 hfsc default 1",
561 "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
562 "$TC qdisc add dev $DUMMY parent 3:1 handle 4:0 netem delay 1ms",
563 "$TC qdisc add dev $DUMMY parent 4:1 handle 5:0 blackhole",
564 "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true",
565 "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
566 "$TC class del dev $DUMMY parent 3:0 classid 3:1",
567 "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
568 "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true"
569 ],
570 "cmdUnderTest": "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
571 "expExitCode": "0",
572 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
573 "matchPattern": "qdisc hfsc 3:.*parent 1:2.*default 1",
574 "matchCount": "1",
575 "teardown": [
576 "$TC qdisc del dev $DUMMY handle 1:0 root",
577 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
578 ]
579 },
580 {
581 "id": "90ec",
582 "name": "Test DRR's enqueue reentrant behaviour with netem",
583 "category": [
584 "qdisc",
585 "drr"
586 ],
587 "plugins": {
588 "requires": "nsPlugin"
589 },
590 "setup": [
591 "$IP link set dev $DUMMY up || true",
592 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
593 "$TC qdisc add dev $DUMMY handle 1:0 root drr",
594 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr",
595 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
596 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
597 ],
598 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
599 "expExitCode": "0",
600 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
601 "matchJSON": [
602 {
603 "kind": "drr",
604 "handle": "1:",
605 "bytes": 196,
606 "packets": 2
607 }
608 ],
609 "matchCount": "1",
610 "teardown": [
611 "$TC qdisc del dev $DUMMY handle 1:0 root",
612 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
613 ]
614 },
615 {
616 "id": "1f1f",
617 "name": "Test ETS's enqueue reentrant behaviour with netem",
618 "category": [
619 "qdisc",
620 "ets"
621 ],
622 "plugins": {
623 "requires": "nsPlugin"
624 },
625 "setup": [
626 "$IP link set dev $DUMMY up || true",
627 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
628 "$TC qdisc add dev $DUMMY handle 1:0 root ets bands 2",
629 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500",
630 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
631 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
632 ],
633 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
634 "expExitCode": "0",
635 "verifyCmd": "$TC -j -s class show dev $DUMMY",
636 "matchJSON": [
637 {
638 "class": "ets",
639 "handle": "1:1",
640 "stats": {
641 "bytes": 196,
642 "packets": 2
643 }
644 }
645 ],
646 "matchCount": "1",
647 "teardown": [
648 "$TC qdisc del dev $DUMMY handle 1:0 root",
649 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
650 ]
651 },
652 {
653 "id": "5e6d",
654 "name": "Test QFQ's enqueue reentrant behaviour with netem",
655 "category": [
656 "qdisc",
657 "qfq"
658 ],
659 "plugins": {
660 "requires": "nsPlugin"
661 },
662 "setup": [
663 "$IP link set dev $DUMMY up || true",
664 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
665 "$TC qdisc add dev $DUMMY handle 1:0 root qfq",
666 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500",
667 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
668 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
669 ],
670 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
671 "expExitCode": "0",
672 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
673 "matchJSON": [
674 {
675 "kind": "qfq",
676 "handle": "1:",
677 "bytes": 196,
678 "packets": 2
679 }
680 ],
681 "matchCount": "1",
682 "teardown": [
683 "$TC qdisc del dev $DUMMY handle 1:0 root",
684 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
685 ]
686 },
687 {
688 "id": "bf1d",
689 "name": "Test HFSC's enqueue reentrant behaviour with netem",
690 "category": [
691 "qdisc",
692 "hfsc"
693 ],
694 "plugins": {
695 "requires": "nsPlugin"
696 },
697 "setup": [
698 "$IP link set dev $DUMMY up || true",
699 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
700 "$TC qdisc add dev $DUMMY handle 1:0 root hfsc",
701 "$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit",
702 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
703 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1",
704 "$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit",
705 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2",
706 "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true",
707 "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1",
708 "$TC class del dev $DUMMY classid 1:1"
709 ],
710 "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true",
711 "expExitCode": "0",
712 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
713 "matchJSON": [
714 {
715 "kind": "hfsc",
716 "handle": "1:",
717 "bytes": 294,
718 "packets": 3
719 }
720 ],
721 "matchCount": "1",
722 "teardown": [
723 "$TC qdisc del dev $DUMMY handle 1:0 root",
724 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
725 ]
726 },
727 {
728 "id": "7c3b",
729 "name": "Test nested DRR's enqueue reentrant behaviour with netem",
730 "category": [
731 "qdisc",
732 "drr"
733 ],
734 "plugins": {
735 "requires": "nsPlugin"
736 },
737 "setup": [
738 "$IP link set dev $DUMMY up || true",
739 "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
740 "$TC qdisc add dev $DUMMY handle 1:0 root drr",
741 "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
742 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
743 "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr",
744 "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr",
745 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1",
746 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%"
747 ],
748 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
749 "expExitCode": "0",
750 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
751 "matchJSON": [
752 {
753 "kind": "drr",
754 "handle": "1:",
755 "bytes": 196,
756 "packets": 2
757 }
758 ],
759 "matchCount": "1",
760 "teardown": [
761 "$TC qdisc del dev $DUMMY handle 1:0 root",
762 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
763 ]
764 },
765 {
766 "id": "62c4",
767 "name": "Test HTB with FQ_CODEL - basic functionality",
768 "category": [
769 "qdisc",
770 "htb",
771 "fq_codel"
772 ],
773 "plugins": {
774 "requires": [
775 "nsPlugin",
776 "scapyPlugin"
777 ]
778 },
779 "setup": [
780 "$TC qdisc add dev $DEV1 root handle 1: htb default 11",
781 "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit",
782 "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486",
783 "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn",
784 "sleep 0.5"
785 ],
786 "scapy": {
787 "iface": "$DEV0",
788 "count": 5,
789 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)"
790 },
791 "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
792 "expExitCode": "0",
793 "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'",
794 "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt",
795 "matchCount": "1",
796 "teardown": [
797 "$TC qdisc del dev $DEV1 handle 1: root"
798 ]
799 },
800 {
801 "id": "831d",
802 "name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain",
803 "category": ["qdisc", "hfsc", "drr", "netem", "blackhole"],
804 "plugins": { "requires": ["nsPlugin", "scapyPlugin"] },
805 "setup": [
806 "$IP link set dev $DEV1 up || true",
807 "$TC qdisc add dev $DEV1 root handle 1: drr",
808 "$TC filter add dev $DEV1 parent 1: basic classid 1:1",
809 "$TC class add dev $DEV1 parent 1: classid 1:1 drr",
810 "$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1",
811 "$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
812 "$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem",
813 "$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole"
814 ],
815 "scapy": {
816 "iface": "$DEV0",
817 "count": 5,
818 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
819 },
820 "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
821 "expExitCode": "0",
822 "verifyCmd": "$TC -s qdisc show dev $DEV1",
823 "matchPattern": "qdisc hfsc",
824 "matchCount": "1",
825 "teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"]
826 },
827 {
828 "id": "309e",
829 "name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem",
830 "category": [
831 "qdisc",
832 "hfsc"
833 ],
834 "plugins": {
835 "requires": "nsPlugin"
836 },
837 "setup": [
838 "$IP link set dev $DUMMY up || true",
839 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
840 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 1s",
841 "$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc",
842 "ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true",
843 "$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit",
844 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%",
845 "$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit",
846 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1",
847 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2",
848 "ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true",
849 "$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1",
850 "$TC class del dev $DUMMY classid 2:1",
851 "ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true"
852 ],
853 "cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit",
854 "expExitCode": "0",
855 "verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1",
856 "matchJSON": [],
857 "teardown": [
858 "$TC qdisc del dev $DUMMY handle 1:0 root",
859 "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
860 ]
861 },
862 {
863 "id": "d74b",
864 "name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain",
865 "category": [
866 "qdisc",
867 "hfsc",
868 "drr",
869 "netem",
870 "blackhole"
871 ],
872 "plugins": {
873 "requires": [
874 "nsPlugin",
875 "scapyPlugin"
876 ]
877 },
878 "setup": [
879 "$IP link set dev $DUMMY up || true",
880 "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
881 "$TC qdisc add dev $DUMMY root handle 1: drr",
882 "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
883 "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
884 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1",
885 "$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
886 "$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem",
887 "$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole",
888 "ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true",
889 "$TC class del dev $DUMMY classid 1:1"
890 ],
891 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
892 "expExitCode": "1",
893 "verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1",
894 "matchJSON": [],
895 "teardown": [
896 "$TC qdisc del dev $DUMMY root handle 1: drr"
897 ]
898 },
899 {
900 "id": "be28",
901 "name": "Try to add fq_codel qdisc as a child of an hhf qdisc",
902 "category": [
903 "qdisc",
904 "fq_codel",
905 "hhf"
906 ],
907 "plugins": {
908 "requires": "nsPlugin"
909 },
910 "setup": [
911 "$TC qdisc add dev $DUMMY root handle a: hhf"
912 ],
913 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel",
914 "expExitCode": "2",
915 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
916 "matchJSON": [],
917 "teardown": [
918 "$TC qdisc del dev $DUMMY root"
919 ]
920 },
921 {
922 "id": "fcb5",
923 "name": "Try to add pie qdisc as a child of a drr qdisc",
924 "category": [
925 "qdisc",
926 "pie",
927 "drr"
928 ],
929 "plugins": {
930 "requires": "nsPlugin"
931 },
932 "setup": [
933 "$TC qdisc add dev $DUMMY root handle a: drr"
934 ],
935 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie",
936 "expExitCode": "2",
937 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
938 "matchJSON": [],
939 "teardown": [
940 "$TC qdisc del dev $DUMMY root"
941 ]
942 },
943 {
944 "id": "7801",
945 "name": "Try to add fq qdisc as a child of an inexistent hfsc class",
946 "category": [
947 "qdisc",
948 "sfq",
949 "hfsc"
950 ],
951 "plugins": {
952 "requires": "nsPlugin"
953 },
954 "setup": [
955 "$TC qdisc add dev $DUMMY root handle a: hfsc"
956 ],
957 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4",
958 "expExitCode": "2",
959 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
960 "matchJSON": [],
961 "teardown": [
962 "$TC qdisc del dev $DUMMY root"
963 ]
964 },
965 {
966 "id": "4989",
967 "name": "Try to add an fq child to an ingress qdisc",
968 "category": [
969 "qdisc",
970 "ingress"
971 ],
972 "plugins": {
973 "requires": "nsPlugin"
974 },
975 "setup": [
976 "$TC qdisc add dev $DUMMY handle ffff:0 ingress"
977 ],
978 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq",
979 "expExitCode": "2",
980 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:",
981 "matchJSON": [],
982 "matchCount": "1",
983 "teardown": [
984 "$TC qdisc del dev $DUMMY ingress"
985 ]
986 },
987 {
988 "id": "c2b0",
989 "name": "Try to add an fq child to a clsact qdisc",
990 "category": [
991 "qdisc",
992 "ingress"
993 ],
994 "plugins": {
995 "requires": "nsPlugin"
996 },
997 "setup": [
998 "$TC qdisc add dev $DUMMY handle ffff:0 clsact"
999 ],
1000 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq",
1001 "expExitCode": "2",
1002 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:",
1003 "matchJSON": [],
1004 "matchCount": "1",
1005 "teardown": [
1006 "$TC qdisc del dev $DUMMY clsact"
1007 ]
1008 },
1009 {
1010 "id": "4366",
1011 "name": "CAKE with QFQ Parent - CAKE enqueue with packets dropping",
1012 "category": [
1013 "qdisc",
1014 "cake",
1015 "netem"
1016 ],
1017 "plugins": {
1018 "requires": "nsPlugin"
1019 },
1020 "setup":[
1021 "$TC qdisc add dev $DUMMY handle 1: root qfq",
1022 "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 1024",
1023 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: cake memlimit 9",
1024 "$TC filter add dev $DUMMY protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1",
1025 "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1026 "$TC qdisc replace dev $DUMMY parent 1:1 handle 3: netem delay 0ms"
1027 ],
1028 "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1029 "expExitCode": "0",
1030 "verifyCmd": "$TC -s qdisc show dev $DUMMY",
1031 "matchPattern": "qdisc qfq 1:",
1032 "matchCount": "1",
1033 "teardown": [
1034 "$TC qdisc del dev $DUMMY handle 1: root"
1035 ]
1036 }
1037]