xref: /linux/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json (revision 77e67d5daaf155f7d0f99f4e797c4842169ec19e)
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