File Index
Files and directories
Sign in
FILE

qdiscs.json

File preview with syntax highlighting.

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