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