xref: /linux/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json (revision 5f5598d945e2a69f764aa5c2074dad73e23bcfcb)
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": "a4bb",
190        "name": "Test FQ_CODEL with HTB parent - force packet drop with empty queue",
191        "category": [
192            "qdisc",
193            "fq_codel",
194            "htb"
195        ],
196        "plugins": {
197            "requires": "nsPlugin"
198        },
199        "setup": [
200            "$IP link set dev $DUMMY up || true",
201            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
202            "$TC qdisc add dev $DUMMY handle 1: root htb default 10",
203            "$TC class add dev $DUMMY parent 1: classid 1:10 htb rate 1kbit",
204            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
205            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
206            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
207            "sleep 0.1"
208        ],
209        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
210        "expExitCode": "0",
211        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
212        "matchPattern": "dropped [1-9][0-9]*",
213        "matchCount": "1",
214        "teardown": [
215            "$TC qdisc del dev $DUMMY handle 1: root",
216            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
217        ]
218    },
219    {
220        "id": "a4be",
221        "name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue",
222        "category": [
223            "qdisc",
224            "fq_codel",
225            "qfq"
226        ],
227        "plugins": {
228            "requires": "nsPlugin"
229        },
230        "setup": [
231            "$IP link set dev $DUMMY up || true",
232            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
233            "$TC qdisc add dev $DUMMY handle 1: root qfq",
234            "$TC class add dev $DUMMY parent 1: classid 1:10 qfq weight 1 maxpkt 1000",
235            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
236            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
237            "ping -c 10 -s 1000 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
238            "sleep 0.1"
239        ],
240        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
241        "expExitCode": "0",
242        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
243        "matchPattern": "dropped [1-9][0-9]*",
244        "matchCount": "1",
245        "teardown": [
246            "$TC qdisc del dev $DUMMY handle 1: root",
247            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
248        ]
249    },
250    {
251        "id": "a4bf",
252        "name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue",
253        "category": [
254            "qdisc",
255            "fq_codel",
256            "hfsc"
257        ],
258        "plugins": {
259            "requires": "nsPlugin"
260        },
261        "setup": [
262            "$IP link set dev $DUMMY up || true",
263            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
264            "$TC qdisc add dev $DUMMY handle 1: root hfsc default 10",
265            "$TC class add dev $DUMMY parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit",
266            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
267            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
268            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
269            "sleep 0.1"
270        ],
271        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
272        "expExitCode": "0",
273        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
274        "matchPattern": "dropped [1-9][0-9]*",
275        "matchCount": "1",
276        "teardown": [
277            "$TC qdisc del dev $DUMMY handle 1: root",
278            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
279        ]
280    },
281    {
282        "id": "a4c0",
283        "name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue",
284        "category": [
285            "qdisc",
286            "fq_codel",
287            "drr"
288        ],
289        "plugins": {
290            "requires": "nsPlugin"
291        },
292        "setup": [
293            "$IP link set dev $DUMMY up || true",
294            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
295            "$TC qdisc add dev $DUMMY handle 1: root drr",
296            "$TC class add dev $DUMMY parent 1: classid 1:10 drr quantum 1500",
297            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
298            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
299            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
300            "sleep 0.1"
301        ],
302        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
303        "expExitCode": "0",
304        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
305        "matchPattern": "dropped [1-9][0-9]*",
306        "matchCount": "1",
307        "teardown": [
308            "$TC qdisc del dev $DUMMY handle 1: root",
309            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
310        ]
311    },
312    {
313        "id": "a4c1",
314        "name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue",
315        "category": [
316            "qdisc",
317            "fq_codel",
318            "ets"
319        ],
320        "plugins": {
321            "requires": "nsPlugin"
322        },
323        "setup": [
324            "$IP link set dev $DUMMY up || true",
325            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
326            "$TC qdisc add dev $DUMMY handle 1: root ets bands 2 strict 1",
327            "$TC class change dev $DUMMY parent 1: classid 1:1 ets",
328            "$TC qdisc add dev $DUMMY parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
329            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
330            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
331            "sleep 0.1"
332        ],
333        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
334        "expExitCode": "0",
335        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
336        "matchPattern": "dropped [1-9][0-9]*",
337        "matchCount": "1",
338        "teardown": [
339            "$TC qdisc del dev $DUMMY handle 1: root",
340            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
341        ]
342    },
343    {
344        "id": "a4c3",
345        "name": "Test HFSC with netem/blackhole - queue emptying during peek operation",
346        "category": [
347            "qdisc",
348            "hfsc",
349            "netem",
350            "blackhole"
351        ],
352        "plugins": {
353            "requires": "nsPlugin"
354        },
355        "setup": [
356            "$IP link set dev $DUMMY up || true",
357            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
358            "$TC qdisc add dev $DUMMY handle 1:0 root drr",
359            "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
360            "$TC class add dev $DUMMY parent 1:0 classid 1:2 drr",
361            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024",
362            "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 hfsc default 1",
363            "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
364            "$TC qdisc add dev $DUMMY parent 3:1 handle 4:0 netem delay 1ms",
365            "$TC qdisc add dev $DUMMY parent 4:1 handle 5:0 blackhole",
366            "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true",
367            "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
368            "$TC class del dev $DUMMY parent 3:0 classid 3:1",
369            "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
370            "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true"
371        ],
372        "cmdUnderTest": "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
373        "expExitCode": "0",
374        "verifyCmd": "$TC -s qdisc show dev $DUMMY",
375        "matchPattern": "qdisc hfsc 3:.*parent 1:2.*default 1",
376        "matchCount": "1",
377        "teardown": [
378            "$TC qdisc del dev $DUMMY handle 1:0 root",
379            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
380        ]
381    },
382    {
383        "id": "90ec",
384        "name": "Test DRR's enqueue reentrant behaviour with netem",
385        "category": [
386            "qdisc",
387            "drr"
388        ],
389        "plugins": {
390            "requires": "nsPlugin"
391        },
392        "setup": [
393            "$IP link set dev $DUMMY up || true",
394            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
395            "$TC qdisc add dev $DUMMY handle 1:0 root drr",
396            "$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr",
397            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
398            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
399        ],
400        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
401        "expExitCode": "0",
402        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
403        "matchJSON": [
404            {
405                "kind": "drr",
406                "handle": "1:",
407                "bytes": 196,
408                "packets": 2
409            }
410        ],
411        "matchCount": "1",
412        "teardown": [
413            "$TC qdisc del dev $DUMMY handle 1:0 root",
414            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
415        ]
416    },
417    {
418        "id": "1f1f",
419        "name": "Test ETS's enqueue reentrant behaviour with netem",
420        "category": [
421            "qdisc",
422            "ets"
423        ],
424        "plugins": {
425            "requires": "nsPlugin"
426        },
427        "setup": [
428            "$IP link set dev $DUMMY up || true",
429            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
430            "$TC qdisc add dev $DUMMY handle 1:0 root ets bands 2",
431            "$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500",
432            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
433            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
434        ],
435        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
436        "expExitCode": "0",
437        "verifyCmd": "$TC -j -s class show dev $DUMMY",
438        "matchJSON": [
439            {
440                "class": "ets",
441                "handle": "1:1",
442                "stats": {
443                    "bytes": 196,
444                    "packets": 2
445                }
446            }
447        ],
448        "matchCount": "1",
449        "teardown": [
450            "$TC qdisc del dev $DUMMY handle 1:0 root",
451            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
452        ]
453    },
454    {
455        "id": "5e6d",
456        "name": "Test QFQ's enqueue reentrant behaviour with netem",
457        "category": [
458            "qdisc",
459            "qfq"
460        ],
461        "plugins": {
462            "requires": "nsPlugin"
463        },
464        "setup": [
465            "$IP link set dev $DUMMY up || true",
466            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
467            "$TC qdisc add dev $DUMMY handle 1:0 root qfq",
468            "$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500",
469            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
470            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
471        ],
472        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
473        "expExitCode": "0",
474        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
475        "matchJSON": [
476            {
477                "kind": "qfq",
478                "handle": "1:",
479                "bytes": 196,
480                "packets": 2
481            }
482        ],
483        "matchCount": "1",
484        "teardown": [
485            "$TC qdisc del dev $DUMMY handle 1:0 root",
486            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
487        ]
488    },
489    {
490        "id": "bf1d",
491        "name": "Test HFSC's enqueue reentrant behaviour with netem",
492        "category": [
493            "qdisc",
494            "hfsc"
495        ],
496        "plugins": {
497            "requires": "nsPlugin"
498        },
499        "setup": [
500            "$IP link set dev $DUMMY up || true",
501            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
502            "$TC qdisc add dev $DUMMY handle 1:0 root hfsc",
503            "$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit",
504            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
505            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1",
506            "$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit",
507            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2",
508            "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true",
509            "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1",
510            "$TC class del dev $DUMMY classid 1:1"
511        ],
512        "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true",
513        "expExitCode": "0",
514        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
515        "matchJSON": [
516            {
517                "kind": "hfsc",
518                "handle": "1:",
519                "bytes": 294,
520                "packets": 3
521            }
522        ],
523        "matchCount": "1",
524        "teardown": [
525            "$TC qdisc del dev $DUMMY handle 1:0 root",
526            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
527        ]
528    },
529    {
530        "id": "7c3b",
531        "name": "Test nested DRR's enqueue reentrant behaviour with netem",
532        "category": [
533            "qdisc",
534            "drr"
535        ],
536        "plugins": {
537            "requires": "nsPlugin"
538        },
539        "setup": [
540            "$IP link set dev $DUMMY up || true",
541            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
542            "$TC qdisc add dev $DUMMY handle 1:0 root drr",
543            "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
544            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
545            "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr",
546            "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr",
547            "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1",
548            "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%"
549        ],
550        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
551        "expExitCode": "0",
552        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
553        "matchJSON": [
554            {
555                "kind": "drr",
556                "handle": "1:",
557                "bytes": 196,
558                "packets": 2
559            }
560        ],
561        "matchCount": "1",
562        "teardown": [
563            "$TC qdisc del dev $DUMMY handle 1:0 root",
564            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
565        ]
566    },
567    {
568        "id": "62c4",
569        "name": "Test HTB with FQ_CODEL - basic functionality",
570        "category": [
571            "qdisc",
572            "htb",
573            "fq_codel"
574        ],
575        "plugins": {
576            "requires": [
577                "nsPlugin",
578                "scapyPlugin"
579            ]
580        },
581        "setup": [
582            "$TC qdisc add dev $DEV1 root handle 1: htb default 11",
583            "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit",
584            "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486",
585            "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn",
586            "sleep 0.5"
587        ],
588        "scapy": {
589            "iface": "$DEV0",
590            "count": 5,
591            "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)"
592        },
593        "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
594        "expExitCode": "0",
595        "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'",
596        "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt",
597        "matchCount": "1",
598        "teardown": [
599            "$TC qdisc del dev $DEV1 handle 1: root"
600        ]
601    },
602    {
603        "id": "831d",
604        "name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain",
605        "category": ["qdisc", "hfsc", "drr", "netem", "blackhole"],
606        "plugins": { "requires": ["nsPlugin", "scapyPlugin"] },
607        "setup": [
608            "$IP link set dev $DEV1 up || true",
609            "$TC qdisc add dev $DEV1 root handle 1: drr",
610            "$TC filter add dev $DEV1 parent 1: basic classid 1:1",
611            "$TC class add dev $DEV1 parent 1: classid 1:1 drr",
612            "$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1",
613            "$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
614            "$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem",
615            "$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole"
616        ],
617        "scapy": {
618            "iface": "$DEV0",
619            "count": 5,
620            "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
621        },
622        "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
623        "expExitCode": "0",
624        "verifyCmd": "$TC -s qdisc show dev $DEV1",
625        "matchPattern": "qdisc hfsc",
626        "matchCount": "1",
627        "teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"]
628    },
629    {
630        "id": "309e",
631        "name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem",
632        "category": [
633            "qdisc",
634            "hfsc"
635        ],
636        "plugins": {
637            "requires": "nsPlugin"
638        },
639        "setup": [
640            "$IP link set dev $DUMMY up || true",
641            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
642            "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 1s",
643            "$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc",
644            "ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true",
645            "$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit",
646            "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%",
647            "$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit",
648            "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1",
649            "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2",
650            "ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true",
651            "$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1",
652            "$TC class del dev $DUMMY classid 2:1",
653            "ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true"
654        ],
655        "cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit",
656        "expExitCode": "0",
657        "verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1",
658        "matchJSON": [],
659        "teardown": [
660            "$TC qdisc del dev $DUMMY handle 1:0 root",
661            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
662        ]
663    },
664    {
665        "id": "d74b",
666        "name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain",
667        "category": [
668            "qdisc",
669            "hfsc",
670            "drr",
671            "netem",
672            "blackhole"
673        ],
674        "plugins": {
675            "requires": [
676                "nsPlugin",
677                "scapyPlugin"
678            ]
679        },
680        "setup": [
681            "$IP link set dev $DUMMY up || true",
682            "$IP addr add 10.10.11.10/24 dev $DUMMY || true",
683            "$TC qdisc add dev $DUMMY root handle 1: drr",
684            "$TC filter add dev $DUMMY parent 1: basic classid 1:1",
685            "$TC class add dev $DUMMY parent 1: classid 1:1 drr",
686            "$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1",
687            "$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
688            "$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem",
689            "$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole",
690            "ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true",
691            "$TC class del dev $DUMMY classid 1:1"
692        ],
693        "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
694        "expExitCode": "1",
695        "verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1",
696        "matchJSON": [],
697        "teardown": [
698            "$TC qdisc del dev $DUMMY root handle 1: drr"
699        ]
700    },
701    {
702        "id": "be28",
703        "name": "Try to add fq_codel qdisc as a child of an hhf qdisc",
704        "category": [
705            "qdisc",
706            "fq_codel",
707            "hhf"
708        ],
709        "plugins": {
710            "requires": "nsPlugin"
711        },
712        "setup": [
713            "$TC qdisc add dev $DUMMY root handle a: hhf"
714        ],
715        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel",
716        "expExitCode": "2",
717        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
718        "matchJSON": [],
719        "teardown": [
720            "$TC qdisc del dev $DUMMY root"
721        ]
722    },
723    {
724        "id": "fcb5",
725        "name": "Try to add pie qdisc as a child of a drr qdisc",
726        "category": [
727            "qdisc",
728            "pie",
729            "drr"
730        ],
731        "plugins": {
732            "requires": "nsPlugin"
733        },
734        "setup": [
735            "$TC qdisc add dev $DUMMY root handle a: drr"
736        ],
737        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie",
738        "expExitCode": "2",
739        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
740        "matchJSON": [],
741        "teardown": [
742            "$TC qdisc del dev $DUMMY root"
743        ]
744    },
745    {
746        "id": "7801",
747        "name": "Try to add fq qdisc as a child of an inexistent hfsc class",
748        "category": [
749            "qdisc",
750            "sfq",
751            "hfsc"
752        ],
753        "plugins": {
754            "requires": "nsPlugin"
755        },
756        "setup": [
757            "$TC qdisc add dev $DUMMY root handle a: hfsc"
758        ],
759        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4",
760        "expExitCode": "2",
761        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
762        "matchJSON": [],
763        "teardown": [
764            "$TC qdisc del dev $DUMMY root"
765        ]
766    }
767]
768