xref: /linux/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json (revision 7a012a692e7cfbca245d195a80f23634d3d74fcc)
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": "c024",
132        "name": "Test TBF with SKBPRIO - catch qlen corner cases",
133        "category": [
134            "qdisc",
135            "tbf",
136            "skbprio"
137        ],
138        "plugins": {
139            "requires": "nsPlugin"
140        },
141        "setup": [
142            "$IP link set dev $DUMMY up || true",
143            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
144            "$TC qdisc add dev $DUMMY handle 1: root tbf rate 100bit burst 2000 limit 1000",
145            "$TC qdisc add dev $DUMMY parent 1: handle 10: skbprio limit 1",
146            "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
147            "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
148            "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
149            "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
150            "sleep 0.5"
151        ],
152        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
153        "expExitCode": "0",
154        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc skbprio'",
155        "matchPattern": "dropped [1-9][0-9]*",
156        "matchCount": "1",
157        "teardown": [
158            "$TC qdisc del dev $DUMMY handle 1: root",
159            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
160        ]
161    },
162    {
163        "id": "a4bb",
164        "name": "Test FQ_CODEL with HTB parent - force packet drop with empty queue",
165        "category": [
166            "qdisc",
167            "fq_codel",
168            "htb"
169        ],
170        "plugins": {
171            "requires": "nsPlugin"
172        },
173        "setup": [
174            "$IP link set dev $DUMMY up || true",
175            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
176            "$TC qdisc add dev $DUMMY handle 1: root htb default 10",
177            "$TC class add dev $DUMMY parent 1: classid 1:10 htb rate 1kbit",
178            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
179            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
180            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
181            "sleep 0.1"
182        ],
183        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
184        "expExitCode": "0",
185        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
186        "matchPattern": "dropped [1-9][0-9]*",
187        "matchCount": "1",
188        "teardown": [
189            "$TC qdisc del dev $DUMMY handle 1: root",
190            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
191        ]
192    },
193    {
194        "id": "a4be",
195        "name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue",
196        "category": [
197            "qdisc",
198            "fq_codel",
199            "qfq"
200        ],
201        "plugins": {
202            "requires": "nsPlugin"
203        },
204        "setup": [
205            "$IP link set dev $DUMMY up || true",
206            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
207            "$TC qdisc add dev $DUMMY handle 1: root qfq",
208            "$TC class add dev $DUMMY parent 1: classid 1:10 qfq weight 1 maxpkt 1000",
209            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
210            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
211            "ping -c 10 -s 1000 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
212            "sleep 0.1"
213        ],
214        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
215        "expExitCode": "0",
216        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
217        "matchPattern": "dropped [1-9][0-9]*",
218        "matchCount": "1",
219        "teardown": [
220            "$TC qdisc del dev $DUMMY handle 1: root",
221            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
222        ]
223    },
224    {
225        "id": "a4bf",
226        "name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue",
227        "category": [
228            "qdisc",
229            "fq_codel",
230            "hfsc"
231        ],
232        "plugins": {
233            "requires": "nsPlugin"
234        },
235        "setup": [
236            "$IP link set dev $DUMMY up || true",
237            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
238            "$TC qdisc add dev $DUMMY handle 1: root hfsc default 10",
239            "$TC class add dev $DUMMY parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit",
240            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
241            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
242            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
243            "sleep 0.1"
244        ],
245        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
246        "expExitCode": "0",
247        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
248        "matchPattern": "dropped [1-9][0-9]*",
249        "matchCount": "1",
250        "teardown": [
251            "$TC qdisc del dev $DUMMY handle 1: root",
252            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
253        ]
254    },
255    {
256        "id": "a4c0",
257        "name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue",
258        "category": [
259            "qdisc",
260            "fq_codel",
261            "drr"
262        ],
263        "plugins": {
264            "requires": "nsPlugin"
265        },
266        "setup": [
267            "$IP link set dev $DUMMY up || true",
268            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
269            "$TC qdisc add dev $DUMMY handle 1: root drr",
270            "$TC class add dev $DUMMY parent 1: classid 1:10 drr quantum 1500",
271            "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
272            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
273            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
274            "sleep 0.1"
275        ],
276        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
277        "expExitCode": "0",
278        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
279        "matchPattern": "dropped [1-9][0-9]*",
280        "matchCount": "1",
281        "teardown": [
282            "$TC qdisc del dev $DUMMY handle 1: root",
283            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
284        ]
285    },
286    {
287        "id": "a4c1",
288        "name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue",
289        "category": [
290            "qdisc",
291            "fq_codel",
292            "ets"
293        ],
294        "plugins": {
295            "requires": "nsPlugin"
296        },
297        "setup": [
298            "$IP link set dev $DUMMY up || true",
299            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
300            "$TC qdisc add dev $DUMMY handle 1: root ets bands 2 strict 1",
301            "$TC class change dev $DUMMY parent 1: classid 1:1 ets",
302            "$TC qdisc add dev $DUMMY parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
303            "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
304            "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
305            "sleep 0.1"
306        ],
307        "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
308        "expExitCode": "0",
309        "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
310        "matchPattern": "dropped [1-9][0-9]*",
311        "matchCount": "1",
312        "teardown": [
313            "$TC qdisc del dev $DUMMY handle 1: root",
314            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
315        ]
316    },
317    {
318        "id": "a4c3",
319        "name": "Test HFSC with netem/blackhole - queue emptying during peek operation",
320        "category": [
321            "qdisc",
322            "hfsc",
323            "netem",
324            "blackhole"
325        ],
326        "plugins": {
327            "requires": "nsPlugin"
328        },
329        "setup": [
330            "$IP link set dev $DUMMY up || true",
331            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
332            "$TC qdisc add dev $DUMMY handle 1:0 root drr",
333            "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
334            "$TC class add dev $DUMMY parent 1:0 classid 1:2 drr",
335            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024",
336            "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 hfsc default 1",
337            "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
338            "$TC qdisc add dev $DUMMY parent 3:1 handle 4:0 netem delay 1ms",
339            "$TC qdisc add dev $DUMMY parent 4:1 handle 5:0 blackhole",
340            "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true",
341            "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
342            "$TC class del dev $DUMMY parent 3:0 classid 3:1",
343            "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
344            "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true"
345        ],
346        "cmdUnderTest": "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
347        "expExitCode": "0",
348        "verifyCmd": "$TC -s qdisc show dev $DUMMY",
349        "matchPattern": "qdisc hfsc 3:.*parent 1:2.*default 1",
350        "matchCount": "1",
351        "teardown": [
352            "$TC qdisc del dev $DUMMY handle 1:0 root",
353            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
354        ]
355    },
356    {
357        "id": "90ec",
358        "name": "Test DRR's enqueue reentrant behaviour with netem",
359        "category": [
360            "qdisc",
361            "drr"
362        ],
363        "plugins": {
364            "requires": "nsPlugin"
365        },
366        "setup": [
367            "$IP link set dev $DUMMY up || true",
368            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
369            "$TC qdisc add dev $DUMMY handle 1:0 root drr",
370            "$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr",
371            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
372            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
373        ],
374        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
375        "expExitCode": "0",
376        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
377        "matchJSON": [
378            {
379                "kind": "drr",
380                "handle": "1:",
381                "bytes": 196,
382                "packets": 2
383            }
384        ],
385        "matchCount": "1",
386        "teardown": [
387            "$TC qdisc del dev $DUMMY handle 1:0 root",
388            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
389        ]
390    },
391    {
392        "id": "1f1f",
393        "name": "Test ETS's enqueue reentrant behaviour with netem",
394        "category": [
395            "qdisc",
396            "ets"
397        ],
398        "plugins": {
399            "requires": "nsPlugin"
400        },
401        "setup": [
402            "$IP link set dev $DUMMY up || true",
403            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
404            "$TC qdisc add dev $DUMMY handle 1:0 root ets bands 2",
405            "$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500",
406            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
407            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
408        ],
409        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
410        "expExitCode": "0",
411        "verifyCmd": "$TC -j -s class show dev $DUMMY",
412        "matchJSON": [
413            {
414                "class": "ets",
415                "handle": "1:1",
416                "stats": {
417                    "bytes": 196,
418                    "packets": 2
419                }
420            }
421        ],
422        "matchCount": "1",
423        "teardown": [
424            "$TC qdisc del dev $DUMMY handle 1:0 root",
425            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
426        ]
427    },
428    {
429        "id": "5e6d",
430        "name": "Test QFQ's enqueue reentrant behaviour with netem",
431        "category": [
432            "qdisc",
433            "qfq"
434        ],
435        "plugins": {
436            "requires": "nsPlugin"
437        },
438        "setup": [
439            "$IP link set dev $DUMMY up || true",
440            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
441            "$TC qdisc add dev $DUMMY handle 1:0 root qfq",
442            "$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500",
443            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
444            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
445        ],
446        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
447        "expExitCode": "0",
448        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
449        "matchJSON": [
450            {
451                "kind": "qfq",
452                "handle": "1:",
453                "bytes": 196,
454                "packets": 2
455            }
456        ],
457        "matchCount": "1",
458        "teardown": [
459            "$TC qdisc del dev $DUMMY handle 1:0 root",
460            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
461        ]
462    },
463    {
464        "id": "bf1d",
465        "name": "Test HFSC's enqueue reentrant behaviour with netem",
466        "category": [
467            "qdisc",
468            "hfsc"
469        ],
470        "plugins": {
471            "requires": "nsPlugin"
472        },
473        "setup": [
474            "$IP link set dev $DUMMY up || true",
475            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
476            "$TC qdisc add dev $DUMMY handle 1:0 root hfsc",
477            "$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit",
478            "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
479            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1",
480            "$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit",
481            "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 netem duplicate 100%",
482            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2",
483            "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true",
484            "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1",
485            "$TC class del dev $DUMMY classid 1:1"
486        ],
487        "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true",
488        "expExitCode": "0",
489        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
490        "matchJSON": [
491            {
492                "kind": "hfsc",
493                "handle": "1:",
494                "bytes": 392,
495                "packets": 4
496            }
497        ],
498        "matchCount": "1",
499        "teardown": [
500            "$TC qdisc del dev $DUMMY handle 1:0 root",
501            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
502        ]
503    },
504    {
505        "id": "7c3b",
506        "name": "Test nested DRR's enqueue reentrant behaviour with netem",
507        "category": [
508            "qdisc",
509            "drr"
510        ],
511        "plugins": {
512            "requires": "nsPlugin"
513        },
514        "setup": [
515            "$IP link set dev $DUMMY up || true",
516            "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
517            "$TC qdisc add dev $DUMMY handle 1:0 root drr",
518            "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
519            "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
520            "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr",
521            "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr",
522            "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1",
523            "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%"
524        ],
525        "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
526        "expExitCode": "0",
527        "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
528        "matchJSON": [
529            {
530                "kind": "drr",
531                "handle": "1:",
532                "bytes": 196,
533                "packets": 2
534            }
535        ],
536        "matchCount": "1",
537        "teardown": [
538            "$TC qdisc del dev $DUMMY handle 1:0 root",
539            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
540        ]
541    }
542]
543