xref: /linux/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json (revision a67c554dbc0fdd7e3c5909cb9f0fff41c51b2e9d)
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 0x1",
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 qdisc add dev $DUMMY parent 1:2 handle 3:0 netem duplicate 100%",
706            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2",
707            "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true",
708            "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1",
709            "$TC class del dev $DUMMY classid 1:1"
710        ],
711        "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true",
712        "expExitCode": "0",
713        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
714        "matchJSON": [
715            {
716                "kind": "hfsc",
717                "handle": "1:",
718                "bytes": 392,
719                "packets": 4
720            }
721        ],
722        "matchCount": "1",
723        "teardown": [
724            "$TC qdisc del dev $DUMMY handle 1:0 root",
725            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
726        ]
727    },
728    {
729        "id": "7c3b",
730        "name": "Test nested DRR's enqueue reentrant behaviour with netem",
731        "category": [
732            "qdisc",
733            "drr"
734        ],
735        "plugins": {
736            "requires": "nsPlugin"
737        },
738        "setup": [
739            "$IP link set dev $DUMMY up || true",
740            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
741            "$TC qdisc add dev $DUMMY handle 1:0 root drr",
742            "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
743            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
744            "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr",
745            "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr",
746            "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1",
747            "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%"
748        ],
749        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
750        "expExitCode": "0",
751        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
752        "matchJSON": [
753            {
754                "kind": "drr",
755                "handle": "1:",
756                "bytes": 196,
757                "packets": 2
758            }
759        ],
760        "matchCount": "1",
761        "teardown": [
762            "$TC qdisc del dev $DUMMY handle 1:0 root",
763            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
764        ]
765    },
766    {
767        "id": "62c4",
768        "name": "Test HTB with FQ_CODEL - basic functionality",
769        "category": [
770            "qdisc",
771            "htb",
772            "fq_codel"
773        ],
774        "plugins": {
775            "requires": [
776                "nsPlugin",
777                "scapyPlugin"
778            ]
779        },
780        "setup": [
781            "$TC qdisc add dev $DEV1 root handle 1: htb default 11",
782            "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit",
783            "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486",
784            "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn",
785            "sleep 0.5"
786        ],
787        "scapy": {
788            "iface": "$DEV0",
789            "count": 5,
790            "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)"
791        },
792        "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
793        "expExitCode": "0",
794        "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'",
795        "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt",
796        "matchCount": "1",
797        "teardown": [
798            "$TC qdisc del dev $DEV1 handle 1: root"
799        ]
800    },
801    {
802        "id": "831d",
803        "name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain",
804        "category": ["qdisc", "hfsc", "drr", "netem", "blackhole"],
805        "plugins": { "requires": ["nsPlugin", "scapyPlugin"] },
806        "setup": [
807            "$IP link set dev $DEV1 up || true",
808            "$TC qdisc add dev $DEV1 root handle 1: drr",
809            "$TC filter add dev $DEV1 parent 1: basic classid 1:1",
810            "$TC class add dev $DEV1 parent 1: classid 1:1 drr",
811            "$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1",
812            "$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
813            "$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem",
814            "$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole"
815        ],
816        "scapy": {
817            "iface": "$DEV0",
818            "count": 5,
819            "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
820        },
821        "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
822        "expExitCode": "0",
823        "verifyCmd": "$TC -s qdisc show dev $DEV1",
824        "matchPattern": "qdisc hfsc",
825        "matchCount": "1",
826        "teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"]
827    },
828    {
829        "id": "309e",
830        "name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem",
831        "category": [
832            "qdisc",
833            "hfsc"
834        ],
835        "plugins": {
836            "requires": "nsPlugin"
837        },
838        "setup": [
839            "$IP link set dev $DUMMY up || true",
840            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
841            "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 1s",
842            "$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc",
843            "ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true",
844            "$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit",
845            "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%",
846            "$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit",
847            "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1",
848            "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2",
849            "ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true",
850            "$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1",
851            "$TC class del dev $DUMMY classid 2:1",
852            "ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true"
853        ],
854        "cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit",
855        "expExitCode": "0",
856        "verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1",
857        "matchJSON": [],
858        "teardown": [
859            "$TC qdisc del dev $DUMMY handle 1:0 root",
860            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
861        ]
862    },
863    {
864        "id": "d74b",
865        "name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain",
866        "category": [
867            "qdisc",
868            "hfsc",
869            "drr",
870            "netem",
871            "blackhole"
872        ],
873        "plugins": {
874            "requires": [
875                "nsPlugin",
876                "scapyPlugin"
877            ]
878        },
879        "setup": [
880            "$IP link set dev $DUMMY up || true",
881            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
882            "$TC qdisc add dev $DUMMY root handle 1: drr",
883            "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
884            "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
885            "$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1",
886            "$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
887            "$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem",
888            "$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole",
889            "ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true",
890            "$TC class del dev $DUMMY classid 1:1"
891        ],
892        "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
893        "expExitCode": "1",
894        "verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1",
895        "matchJSON": [],
896        "teardown": [
897            "$TC qdisc del dev $DUMMY root handle 1: drr"
898        ]
899    },
900    {
901        "id": "be28",
902        "name": "Try to add fq_codel qdisc as a child of an hhf qdisc",
903        "category": [
904            "qdisc",
905            "fq_codel",
906            "hhf"
907        ],
908        "plugins": {
909            "requires": "nsPlugin"
910        },
911        "setup": [
912            "$TC qdisc add dev $DUMMY root handle a: hhf"
913        ],
914        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel",
915        "expExitCode": "2",
916        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
917        "matchJSON": [],
918        "teardown": [
919            "$TC qdisc del dev $DUMMY root"
920        ]
921    },
922    {
923        "id": "fcb5",
924        "name": "Try to add pie qdisc as a child of a drr qdisc",
925        "category": [
926            "qdisc",
927            "pie",
928            "drr"
929        ],
930        "plugins": {
931            "requires": "nsPlugin"
932        },
933        "setup": [
934            "$TC qdisc add dev $DUMMY root handle a: drr"
935        ],
936        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie",
937        "expExitCode": "2",
938        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
939        "matchJSON": [],
940        "teardown": [
941            "$TC qdisc del dev $DUMMY root"
942        ]
943    },
944    {
945        "id": "7801",
946        "name": "Try to add fq qdisc as a child of an inexistent hfsc class",
947        "category": [
948            "qdisc",
949            "sfq",
950            "hfsc"
951        ],
952        "plugins": {
953            "requires": "nsPlugin"
954        },
955        "setup": [
956            "$TC qdisc add dev $DUMMY root handle a: hfsc"
957        ],
958        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4",
959        "expExitCode": "2",
960        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
961        "matchJSON": [],
962        "teardown": [
963            "$TC qdisc del dev $DUMMY root"
964        ]
965    },
966    {
967        "id": "4989",
968        "name": "Try to add an fq child to an ingress qdisc",
969        "category": [
970            "qdisc",
971            "ingress"
972        ],
973        "plugins": {
974            "requires": "nsPlugin"
975        },
976        "setup": [
977            "$TC qdisc add dev $DUMMY handle ffff:0 ingress"
978        ],
979        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq",
980        "expExitCode": "2",
981        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:",
982        "matchJSON": [],
983        "matchCount": "1",
984        "teardown": [
985            "$TC qdisc del dev $DUMMY ingress"
986        ]
987    },
988    {
989        "id": "c2b0",
990        "name": "Try to add an fq child to a clsact qdisc",
991        "category": [
992            "qdisc",
993            "ingress"
994        ],
995        "plugins": {
996            "requires": "nsPlugin"
997        },
998        "setup": [
999            "$TC qdisc add dev $DUMMY handle ffff:0 clsact"
1000        ],
1001        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq",
1002        "expExitCode": "2",
1003        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:",
1004        "matchJSON": [],
1005        "matchCount": "1",
1006        "teardown": [
1007            "$TC qdisc del dev $DUMMY clsact"
1008        ]
1009    },
1010    {
1011        "id": "4366",
1012        "name": "CAKE with QFQ Parent - CAKE enqueue with packets dropping",
1013        "category": [
1014            "qdisc",
1015            "cake",
1016            "netem"
1017        ],
1018        "plugins": {
1019            "requires": "nsPlugin"
1020        },
1021        "setup":[
1022            "$TC qdisc add dev $DUMMY handle 1: root qfq",
1023            "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 1024",
1024            "$TC qdisc add dev $DUMMY parent 1:1 handle 2: cake memlimit 9",
1025            "$TC filter add dev $DUMMY protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1",
1026            "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1027            "$TC qdisc replace dev $DUMMY parent 1:1 handle 3: netem delay 0ms"
1028        ],
1029        "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1030        "expExitCode": "0",
1031        "verifyCmd": "$TC -s qdisc show dev $DUMMY",
1032        "matchPattern": "qdisc qfq 1:",
1033        "matchCount": "1",
1034        "teardown": [
1035            "$TC qdisc del dev $DUMMY handle 1: root"
1036        ]
1037    },
1038    {
1039        "id": "6e4f",
1040        "name": "Try to delete ets drr class' qdisc while still keeping it in the active list",
1041        "category": [
1042            "qdisc",
1043            "ets",
1044            "tbf"
1045        ],
1046        "plugins": {
1047            "requires": [
1048                "nsPlugin",
1049                "scapyPlugin"
1050            ]
1051        },
1052        "setup": [
1053            "$IP link set dev $DUMMY up || true",
1054            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
1055            "$TC qdisc add dev $DUMMY root handle 1: ets bands 2 strict 1",
1056            "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s",
1057            "$TC filter add dev $DUMMY parent 1: basic classid 1:2",
1058            "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true",
1059            "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2",
1060            "$TC qdisc change dev $DUMMY root handle 1: ets bands 1 strict 1"
1061        ],
1062        "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11",
1063        "expExitCode": "1",
1064        "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root",
1065        "matchJSON": [
1066            {
1067                "kind": "ets",
1068                "handle": "1:",
1069                "bytes": 196,
1070                "packets": 2
1071            }
1072        ],
1073        "teardown": [
1074            "$TC qdisc del dev $DUMMY root handle 1:"
1075        ]
1076    },
1077    {
1078        "id": "0b8f",
1079        "name": "Try to add ets class to the active list twice",
1080        "category": [
1081            "qdisc",
1082            "ets",
1083            "tbf"
1084        ],
1085        "plugins": {
1086            "requires": [
1087                "nsPlugin",
1088                "scapyPlugin"
1089            ]
1090        },
1091        "setup": [
1092            "$IP link set dev $DUMMY up || true",
1093            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
1094            "$TC qdisc add dev $DUMMY root handle 1: ets bands 2 strict 1",
1095            "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s",
1096            "$TC filter add dev $DUMMY parent 1: basic classid 1:2",
1097            "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true",
1098            "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2",
1099            "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 1"
1100        ],
1101        "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11",
1102        "expExitCode": "1",
1103        "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root",
1104        "matchJSON": [
1105            {
1106                "kind": "ets",
1107                "handle": "1:",
1108                "bytes": 98,
1109                "packets": 1
1110            }
1111        ],
1112        "teardown": [
1113            "$TC qdisc del dev $DUMMY root handle 1:"
1114        ]
1115    },
1116    {
1117        "id": "a3d7",
1118        "name": "HFSC with large m1 - no divide-by-zero on class reactivation",
1119        "category": [
1120            "qdisc",
1121            "hfsc"
1122        ],
1123        "plugins": {
1124            "requires": "nsPlugin"
1125        },
1126        "setup": [
1127            "$TC qdisc replace dev $DUMMY root handle 1: hfsc default 1",
1128            "$TC class replace dev $DUMMY parent 1: classid 1:1 hfsc rt m1 32gbit d 1ms m2 0bit ls m1 32gbit d 1ms m2 0bit",
1129            "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1130            "sleep 1"
1131        ],
1132        "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true",
1133        "expExitCode": "0",
1134        "verifyCmd": "$TC qdisc show dev $DUMMY",
1135        "matchPattern": "qdisc hfsc 1: root",
1136        "matchCount": "1",
1137        "teardown": [
1138            "$TC qdisc del dev $DUMMY handle 1: root"
1139        ]
1140    },
1141    {
1142        "id": "7a5f",
1143        "name": "Force red to dequeue from its child's gso_skb with qfq leaf",
1144        "category": [
1145            "qdisc",
1146            "tbf",
1147            "red",
1148            "qfq"
1149        ],
1150        "plugins": {
1151            "requires": "nsPlugin"
1152        },
1153        "setup": [
1154            "$IP link set dev $DUMMY up || true",
1155            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
1156            "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b",
1157            "$TC qdisc add dev $DUMMY parent 1: handle 2: red limit 757 min 16 max 24 avpkt 16",
1158            "$TC qdisc add dev $DUMMY parent 2: handle 3: qfq",
1159            "$TC class add dev $DUMMY classid 3:1 parent 3: qfq maxpkt 512 weight 1",
1160            "$TC filter add dev $DUMMY parent 3: protocol ip prio 1 matchall classid 3:1 action ok"
1161        ],
1162        "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true",
1163        "expExitCode": "0",
1164        "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:",
1165        "matchJSON": [
1166            {
1167                "kind": "red",
1168                "handle": "2:",
1169                "bytes": 98,
1170                "packets": 1,
1171                "backlog": 0,
1172                "qlen": 0
1173            }
1174        ],
1175        "teardown": [
1176            "$TC qdisc del dev $DUMMY handle 1: root"
1177        ]
1178    },
1179    {
1180        "id": "cdae",
1181        "name": "Force sfb to dequeue from its child's gso_skb with qfq leaf",
1182        "category": [
1183            "qdisc",
1184            "tbf",
1185            "sfb",
1186            "qfq"
1187        ],
1188        "plugins": {
1189            "requires": "nsPlugin"
1190        },
1191        "setup": [
1192            "$IP link set dev $DUMMY up || true",
1193            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
1194            "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b",
1195            "$TC qdisc add dev $DUMMY parent 1: handle 2: sfb",
1196            "$TC qdisc add dev $DUMMY parent 2: handle 3: qfq",
1197            "$TC class add dev $DUMMY classid 3:1 parent 3: qfq maxpkt 512 weight 1",
1198            "$TC filter add dev $DUMMY parent 3: protocol ip prio 1 matchall classid 3:1 action ok"
1199        ],
1200        "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true",
1201        "expExitCode": "0",
1202        "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:",
1203        "matchJSON": [
1204            {
1205                "kind": "sfb",
1206                "handle": "2:",
1207                "bytes": 98,
1208                "packets": 1,
1209                "backlog": 0,
1210                "qlen": 0
1211            }
1212        ],
1213        "teardown": [
1214            "$TC qdisc del dev $DUMMY handle 1: root"
1215        ]
1216    },
1217    {
1218        "id": "291d",
1219        "name": "Force red to dequeue from its child's gso_skb with dualpi2 leaf",
1220        "category": [
1221            "qdisc",
1222            "tbf",
1223            "red",
1224            "dualpi2"
1225        ],
1226        "plugins": {
1227            "requires": "nsPlugin"
1228        },
1229        "setup": [
1230            "$IP link set dev $DUMMY up || true",
1231            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
1232            "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b",
1233            "$TC qdisc add dev $DUMMY parent 1: handle 2: red limit 757 min 16 max 24 avpkt 16",
1234            "$TC qdisc add dev $DUMMY parent 2: handle 3: dualpi2"
1235        ],
1236        "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true",
1237        "expExitCode": "0",
1238        "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:",
1239        "matchJSON": [
1240            {
1241                "kind": "red",
1242                "handle": "2:",
1243                "bytes": 98,
1244                "packets": 1,
1245                "backlog": 0,
1246                "qlen": 0
1247            }
1248        ],
1249        "teardown": [
1250            "$TC qdisc del dev $DUMMY handle 1: root"
1251        ]
1252    },
1253    {
1254        "id": "9c6d",
1255        "name": "Force sfb to dequeue from its child's gso_skb with dualpi2 leaf",
1256        "category": [
1257            "qdisc",
1258            "tbf",
1259            "sfb",
1260            "dualpi2"
1261        ],
1262        "plugins": {
1263            "requires": "nsPlugin"
1264        },
1265        "setup": [
1266            "$IP link set dev $DUMMY up || true",
1267            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
1268            "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b",
1269            "$TC qdisc add dev $DUMMY parent 1: handle 2: sfb",
1270            "$TC qdisc add dev $DUMMY parent 2: handle 3: dualpi2"
1271        ],
1272        "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true",
1273        "expExitCode": "0",
1274        "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:",
1275        "matchJSON": [
1276            {
1277                "kind": "sfb",
1278                "handle": "2:",
1279                "bytes": 98,
1280                "packets": 1,
1281                "backlog": 0,
1282                "qlen": 0
1283            }
1284        ],
1285        "teardown": [
1286            "$TC qdisc del dev $DUMMY handle 1: root"
1287        ]
1288    },
1289    {
1290        "id": "3a62",
1291        "name": "Try to create a qlen underflow with QFQ/CBS",
1292        "category": [
1293            "qdisc",
1294            "qfq",
1295            "cbs"
1296        ],
1297        "plugins": {
1298            "requires": "nsPlugin"
1299        },
1300        "setup": [
1301            "$IP link set dev $DUMMY up || true",
1302            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
1303            "$TC qdisc add dev $DUMMY root handle 1: qfq",
1304            "$TC class add dev $DUMMY classid 1:1 parent 1: qfq",
1305            "$TC class add dev $DUMMY classid 1:2 parent 1: qfq",
1306            "$TC qdisc add dev $DUMMY handle 2: parent 1:1 cbs",
1307            "$TC qdisc add dev $DUMMY handle 3: parent 2: netem delay 5000000000",
1308            "$TC filter add dev $DUMMY parent 1: prio 1 u32 match ip dst 10.10.10.1 classid 1:1 action ok",
1309            "$TC filter add dev $DUMMY parent 1: prio 2 u32 match ip dst 10.10.10.2 classid 1:2 action ok",
1310            "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true",
1311            "$IP l set $DUMMY down",
1312            "$IP l set $DUMMY up",
1313            "$TC qdisc replace dev $DUMMY handle 4: parent 2: pfifo"
1314        ],
1315        "cmdUnderTest": "ping -c 1 10.10.10.2 -W0.01 -I$DUMMY",
1316        "expExitCode": "1",
1317        "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:1",
1318        "matchJSON": [
1319            {
1320                "kind": "cbs",
1321                "handle": "2:",
1322                "bytes": 0,
1323                "packets": 0
1324            }
1325        ],
1326        "teardown": [
1327            "$TC qdisc del dev $DUMMY handle 1: root"
1328        ]
1329    }
1330]
1331