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": [ 396 "nsPlugin", 397 "scapyPlugin" 398 ] 399 }, 400 "setup": [ 401 "$TC qdisc add dev $IFB handle 1: root htb default 10", 402 "$TC class add dev $IFB parent 1: classid 1:10 htb rate 1kbit", 403 "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 404 "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 405 "$TC qdisc add dev $DEV1 ingress", 406 "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB" 407 ], 408 "scapy": { 409 "iface": "$DEV0", 410 "count": 5, 411 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 412 }, 413 "cmdUnderTest": "$TC -s qdisc show dev $IFB", 414 "expExitCode": "0", 415 "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'", 416 "matchPattern": "dropped [1-9][0-9]*", 417 "matchCount": "1", 418 "teardown": [ 419 "$TC qdisc del dev $IFB root", 420 "$TC qdisc del dev $DEV1 ingress" 421 ] 422 }, 423 { 424 "id": "a4be", 425 "name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue", 426 "category": [ 427 "qdisc", 428 "fq_codel", 429 "qfq" 430 ], 431 "plugins": { 432 "requires": [ 433 "nsPlugin", 434 "scapyPlugin" 435 ] 436 }, 437 "setup": [ 438 "$TC qdisc add dev $IFB handle 1: root qfq", 439 "$TC class add dev $IFB parent 1: classid 1:10 qfq weight 1 maxpkt 1000", 440 "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 441 "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 442 "$TC qdisc add dev $DEV1 ingress", 443 "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB" 444 ], 445 "scapy": { 446 "iface": "$DEV0", 447 "count": 10, 448 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 449 }, 450 "cmdUnderTest": "$TC -s qdisc show dev $IFB", 451 "expExitCode": "0", 452 "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'", 453 "matchPattern": "dropped [1-9][0-9]*", 454 "matchCount": "1", 455 "teardown": [ 456 "$TC qdisc del dev $IFB root", 457 "$TC qdisc del dev $DEV1 ingress" 458 ] 459 }, 460 { 461 "id": "a4bf", 462 "name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue", 463 "category": [ 464 "qdisc", 465 "fq_codel", 466 "hfsc" 467 ], 468 "plugins": { 469 "requires": [ 470 "nsPlugin", 471 "scapyPlugin" 472 ] 473 }, 474 "setup": [ 475 "$TC qdisc add dev $IFB handle 1: root hfsc default 10", 476 "$TC class add dev $IFB parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit", 477 "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 478 "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 479 "$TC qdisc add dev $DEV1 ingress", 480 "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB" 481 ], 482 "scapy": { 483 "iface": "$DEV0", 484 "count": 5, 485 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 486 }, 487 "cmdUnderTest": "$TC -s qdisc show dev $IFB", 488 "expExitCode": "0", 489 "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'", 490 "matchPattern": "dropped [1-9][0-9]*", 491 "matchCount": "1", 492 "teardown": [ 493 "$TC qdisc del dev $IFB root", 494 "$TC qdisc del dev $DEV1 ingress" 495 ] 496 }, 497 { 498 "id": "a4c0", 499 "name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue", 500 "category": [ 501 "qdisc", 502 "fq_codel", 503 "drr" 504 ], 505 "plugins": { 506 "requires": [ 507 "nsPlugin", 508 "scapyPlugin" 509 ] 510 }, 511 "setup": [ 512 "$TC qdisc add dev $IFB handle 1: root drr", 513 "$TC class add dev $IFB parent 1: classid 1:10 drr quantum 1500", 514 "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 515 "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 516 "$TC qdisc add dev $DEV1 ingress", 517 "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB" 518 ], 519 "scapy": { 520 "iface": "$DEV0", 521 "count": 5, 522 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 523 }, 524 "cmdUnderTest": "$TC -s qdisc show dev $IFB", 525 "expExitCode": "0", 526 "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'", 527 "matchPattern": "dropped [1-9][0-9]*", 528 "matchCount": "1", 529 "teardown": [ 530 "$TC qdisc del dev $IFB root", 531 "$TC qdisc del dev $DEV1 ingress" 532 ] 533 }, 534 { 535 "id": "a4c1", 536 "name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue", 537 "category": [ 538 "qdisc", 539 "fq_codel", 540 "ets" 541 ], 542 "plugins": { 543 "requires": [ 544 "nsPlugin", 545 "scapyPlugin" 546 ] 547 }, 548 "setup": [ 549 "$TC qdisc add dev $IFB handle 1: root ets bands 2 strict 1", 550 "$TC class change dev $IFB parent 1: classid 1:1 ets", 551 "$TC qdisc add dev $IFB parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 552 "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1", 553 "$TC qdisc add dev $DEV1 ingress", 554 "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB" 555 ], 556 "scapy": { 557 "iface": "$DEV0", 558 "count": 5, 559 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 560 }, 561 "cmdUnderTest": "$TC -s qdisc show dev $IFB", 562 "expExitCode": "0", 563 "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'", 564 "matchPattern": "dropped [1-9][0-9]*", 565 "matchCount": "1", 566 "teardown": [ 567 "$TC qdisc del dev $IFB root", 568 "$TC qdisc del dev $DEV1 ingress" 569 ] 570 }, 571 { 572 "id": "a4c3", 573 "name": "Test HFSC with netem/blackhole - queue emptying during peek operation", 574 "category": [ 575 "qdisc", 576 "hfsc", 577 "netem", 578 "blackhole" 579 ], 580 "plugins": { 581 "requires": "nsPlugin" 582 }, 583 "setup": [ 584 "$IP link set dev $DUMMY up || true", 585 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 586 "$TC qdisc add dev $DUMMY handle 1:0 root drr", 587 "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr", 588 "$TC class add dev $DUMMY parent 1:0 classid 1:2 drr", 589 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024", 590 "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 hfsc default 1", 591 "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit", 592 "$TC qdisc add dev $DUMMY parent 3:1 handle 4:0 netem delay 1ms", 593 "$TC qdisc add dev $DUMMY parent 4:1 handle 5:0 blackhole", 594 "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true", 595 "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit", 596 "$TC class del dev $DUMMY parent 3:0 classid 3:1", 597 "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit", 598 "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true" 599 ], 600 "cmdUnderTest": "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit", 601 "expExitCode": "0", 602 "verifyCmd": "$TC -s qdisc show dev $DUMMY", 603 "matchPattern": "qdisc hfsc 3:.*parent 1:2.*default 0x1", 604 "matchCount": "1", 605 "teardown": [ 606 "$TC qdisc del dev $DUMMY handle 1:0 root", 607 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 608 ] 609 }, 610 { 611 "id": "90ec", 612 "name": "Test DRR's enqueue reentrant behaviour with netem", 613 "category": [ 614 "qdisc", 615 "drr" 616 ], 617 "plugins": { 618 "requires": "nsPlugin" 619 }, 620 "setup": [ 621 "$IP link set dev $DUMMY up || true", 622 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 623 "$TC qdisc add dev $DUMMY handle 1:0 root drr", 624 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr", 625 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 626 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1" 627 ], 628 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 629 "expExitCode": "0", 630 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 631 "matchJSON": [ 632 { 633 "kind": "drr", 634 "handle": "1:", 635 "bytes": 196, 636 "packets": 2 637 } 638 ], 639 "matchCount": "1", 640 "teardown": [ 641 "$TC qdisc del dev $DUMMY handle 1:0 root", 642 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 643 ] 644 }, 645 { 646 "id": "1f1f", 647 "name": "Test ETS's enqueue reentrant behaviour with netem", 648 "category": [ 649 "qdisc", 650 "ets" 651 ], 652 "plugins": { 653 "requires": "nsPlugin" 654 }, 655 "setup": [ 656 "$IP link set dev $DUMMY up || true", 657 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 658 "$TC qdisc add dev $DUMMY handle 1:0 root ets bands 2", 659 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500", 660 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 661 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1" 662 ], 663 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 664 "expExitCode": "0", 665 "verifyCmd": "$TC -j -s class show dev $DUMMY", 666 "matchJSON": [ 667 { 668 "class": "ets", 669 "handle": "1:1", 670 "stats": { 671 "bytes": 196, 672 "packets": 2 673 } 674 } 675 ], 676 "matchCount": "1", 677 "teardown": [ 678 "$TC qdisc del dev $DUMMY handle 1:0 root", 679 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 680 ] 681 }, 682 { 683 "id": "5e6d", 684 "name": "Test QFQ's enqueue reentrant behaviour with netem", 685 "category": [ 686 "qdisc", 687 "qfq" 688 ], 689 "plugins": { 690 "requires": "nsPlugin" 691 }, 692 "setup": [ 693 "$IP link set dev $DUMMY up || true", 694 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 695 "$TC qdisc add dev $DUMMY handle 1:0 root qfq", 696 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500", 697 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 698 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1" 699 ], 700 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 701 "expExitCode": "0", 702 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 703 "matchJSON": [ 704 { 705 "kind": "qfq", 706 "handle": "1:", 707 "bytes": 196, 708 "packets": 2 709 } 710 ], 711 "matchCount": "1", 712 "teardown": [ 713 "$TC qdisc del dev $DUMMY handle 1:0 root", 714 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 715 ] 716 }, 717 { 718 "id": "bf1d", 719 "name": "Test HFSC's enqueue reentrant behaviour with netem", 720 "category": [ 721 "qdisc", 722 "hfsc" 723 ], 724 "plugins": { 725 "requires": "nsPlugin" 726 }, 727 "setup": [ 728 "$IP link set dev $DUMMY up || true", 729 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 730 "$TC qdisc add dev $DUMMY handle 1:0 root hfsc", 731 "$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit", 732 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 733 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1", 734 "$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit", 735 "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 netem duplicate 100%", 736 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2", 737 "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true", 738 "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1", 739 "$TC class del dev $DUMMY classid 1:1" 740 ], 741 "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true", 742 "expExitCode": "0", 743 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 744 "matchJSON": [ 745 { 746 "kind": "hfsc", 747 "handle": "1:", 748 "bytes": 392, 749 "packets": 4 750 } 751 ], 752 "matchCount": "1", 753 "teardown": [ 754 "$TC qdisc del dev $DUMMY handle 1:0 root", 755 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 756 ] 757 }, 758 { 759 "id": "7c3b", 760 "name": "Test nested DRR's enqueue reentrant behaviour with netem", 761 "category": [ 762 "qdisc", 763 "drr" 764 ], 765 "plugins": { 766 "requires": "nsPlugin" 767 }, 768 "setup": [ 769 "$IP link set dev $DUMMY up || true", 770 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 771 "$TC qdisc add dev $DUMMY handle 1:0 root drr", 772 "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr", 773 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1", 774 "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr", 775 "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr", 776 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1", 777 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%" 778 ], 779 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 780 "expExitCode": "0", 781 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 782 "matchJSON": [ 783 { 784 "kind": "drr", 785 "handle": "1:", 786 "bytes": 196, 787 "packets": 2 788 } 789 ], 790 "matchCount": "1", 791 "teardown": [ 792 "$TC qdisc del dev $DUMMY handle 1:0 root", 793 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 794 ] 795 }, 796 { 797 "id": "62c4", 798 "name": "Test HTB with FQ_CODEL - basic functionality", 799 "category": [ 800 "qdisc", 801 "htb", 802 "fq_codel" 803 ], 804 "plugins": { 805 "requires": [ 806 "nsPlugin", 807 "scapyPlugin" 808 ] 809 }, 810 "setup": [ 811 "$TC qdisc add dev $DEV1 root handle 1: htb default 11", 812 "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit", 813 "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486", 814 "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn", 815 "sleep 0.5" 816 ], 817 "scapy": { 818 "iface": "$DEV0", 819 "count": 5, 820 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)" 821 }, 822 "cmdUnderTest": "$TC -s qdisc show dev $DEV1", 823 "expExitCode": "0", 824 "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'", 825 "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt", 826 "matchCount": "1", 827 "teardown": [ 828 "$TC qdisc del dev $DEV1 handle 1: root" 829 ] 830 }, 831 { 832 "id": "831d", 833 "name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain", 834 "category": ["qdisc", "hfsc", "drr", "netem", "blackhole"], 835 "plugins": { "requires": ["nsPlugin", "scapyPlugin"] }, 836 "setup": [ 837 "$IP link set dev $DEV1 up || true", 838 "$TC qdisc add dev $DEV1 root handle 1: drr", 839 "$TC filter add dev $DEV1 parent 1: basic classid 1:1", 840 "$TC class add dev $DEV1 parent 1: classid 1:1 drr", 841 "$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1", 842 "$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0", 843 "$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem", 844 "$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole" 845 ], 846 "scapy": { 847 "iface": "$DEV0", 848 "count": 5, 849 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 850 }, 851 "cmdUnderTest": "$TC -s qdisc show dev $DEV1", 852 "expExitCode": "0", 853 "verifyCmd": "$TC -s qdisc show dev $DEV1", 854 "matchPattern": "qdisc hfsc", 855 "matchCount": "1", 856 "teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"] 857 }, 858 { 859 "id": "309e", 860 "name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem", 861 "category": [ 862 "qdisc", 863 "hfsc" 864 ], 865 "plugins": { 866 "requires": "nsPlugin" 867 }, 868 "setup": [ 869 "$IP link set dev $DUMMY up || true", 870 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 871 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 1s", 872 "$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc", 873 "ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true", 874 "$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit", 875 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%", 876 "$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit", 877 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1", 878 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2", 879 "ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true", 880 "$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1", 881 "$TC class del dev $DUMMY classid 2:1", 882 "ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true" 883 ], 884 "cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit", 885 "expExitCode": "0", 886 "verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1", 887 "matchJSON": [], 888 "teardown": [ 889 "$TC qdisc del dev $DUMMY handle 1:0 root", 890 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 891 ] 892 }, 893 { 894 "id": "d74b", 895 "name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain", 896 "category": [ 897 "qdisc", 898 "hfsc", 899 "drr", 900 "netem", 901 "blackhole" 902 ], 903 "plugins": { 904 "requires": [ 905 "nsPlugin", 906 "scapyPlugin" 907 ] 908 }, 909 "setup": [ 910 "$IP link set dev $DUMMY up || true", 911 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 912 "$TC qdisc add dev $DUMMY root handle 1: drr", 913 "$TC filter add dev $DUMMY parent 1: basic classid 1:1", 914 "$TC class add dev $DUMMY parent 1: classid 1:1 drr", 915 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1", 916 "$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0", 917 "$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem", 918 "$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole", 919 "ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true", 920 "$TC class del dev $DUMMY classid 1:1" 921 ], 922 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11", 923 "expExitCode": "1", 924 "verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1", 925 "matchJSON": [], 926 "teardown": [ 927 "$TC qdisc del dev $DUMMY root handle 1: drr" 928 ] 929 }, 930 { 931 "id": "be28", 932 "name": "Try to add fq_codel qdisc as a child of an hhf qdisc", 933 "category": [ 934 "qdisc", 935 "fq_codel", 936 "hhf" 937 ], 938 "plugins": { 939 "requires": "nsPlugin" 940 }, 941 "setup": [ 942 "$TC qdisc add dev $DUMMY root handle a: hhf" 943 ], 944 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel", 945 "expExitCode": "2", 946 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 947 "matchJSON": [], 948 "teardown": [ 949 "$TC qdisc del dev $DUMMY root" 950 ] 951 }, 952 { 953 "id": "fcb5", 954 "name": "Try to add pie qdisc as a child of a drr qdisc", 955 "category": [ 956 "qdisc", 957 "pie", 958 "drr" 959 ], 960 "plugins": { 961 "requires": "nsPlugin" 962 }, 963 "setup": [ 964 "$TC qdisc add dev $DUMMY root handle a: drr" 965 ], 966 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie", 967 "expExitCode": "2", 968 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 969 "matchJSON": [], 970 "teardown": [ 971 "$TC qdisc del dev $DUMMY root" 972 ] 973 }, 974 { 975 "id": "7801", 976 "name": "Try to add fq qdisc as a child of an inexistent hfsc class", 977 "category": [ 978 "qdisc", 979 "sfq", 980 "hfsc" 981 ], 982 "plugins": { 983 "requires": "nsPlugin" 984 }, 985 "setup": [ 986 "$TC qdisc add dev $DUMMY root handle a: hfsc" 987 ], 988 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4", 989 "expExitCode": "2", 990 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 991 "matchJSON": [], 992 "teardown": [ 993 "$TC qdisc del dev $DUMMY root" 994 ] 995 }, 996 { 997 "id": "4989", 998 "name": "Try to add an fq child to an ingress qdisc", 999 "category": [ 1000 "qdisc", 1001 "ingress" 1002 ], 1003 "plugins": { 1004 "requires": "nsPlugin" 1005 }, 1006 "setup": [ 1007 "$TC qdisc add dev $DUMMY handle ffff:0 ingress" 1008 ], 1009 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq", 1010 "expExitCode": "2", 1011 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:", 1012 "matchJSON": [], 1013 "matchCount": "1", 1014 "teardown": [ 1015 "$TC qdisc del dev $DUMMY ingress" 1016 ] 1017 }, 1018 { 1019 "id": "c2b0", 1020 "name": "Try to add an fq child to a clsact qdisc", 1021 "category": [ 1022 "qdisc", 1023 "ingress" 1024 ], 1025 "plugins": { 1026 "requires": "nsPlugin" 1027 }, 1028 "setup": [ 1029 "$TC qdisc add dev $DUMMY handle ffff:0 clsact" 1030 ], 1031 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq", 1032 "expExitCode": "2", 1033 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:", 1034 "matchJSON": [], 1035 "matchCount": "1", 1036 "teardown": [ 1037 "$TC qdisc del dev $DUMMY clsact" 1038 ] 1039 }, 1040 { 1041 "id": "4366", 1042 "name": "CAKE with QFQ Parent - CAKE enqueue with packets dropping", 1043 "category": [ 1044 "qdisc", 1045 "cake", 1046 "netem" 1047 ], 1048 "plugins": { 1049 "requires": "nsPlugin" 1050 }, 1051 "setup":[ 1052 "$TC qdisc add dev $DUMMY handle 1: root qfq", 1053 "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 1024", 1054 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: cake memlimit 9", 1055 "$TC filter add dev $DUMMY protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1", 1056 "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", 1057 "$TC qdisc replace dev $DUMMY parent 1:1 handle 3: netem delay 0ms" 1058 ], 1059 "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", 1060 "expExitCode": "0", 1061 "verifyCmd": "$TC -s qdisc show dev $DUMMY", 1062 "matchPattern": "qdisc qfq 1:", 1063 "matchCount": "1", 1064 "teardown": [ 1065 "$TC qdisc del dev $DUMMY handle 1: root" 1066 ] 1067 }, 1068 { 1069 "id": "6e4f", 1070 "name": "Try to delete ets drr class' qdisc while still keeping it in the active list", 1071 "category": [ 1072 "qdisc", 1073 "ets", 1074 "tbf" 1075 ], 1076 "plugins": { 1077 "requires": [ 1078 "nsPlugin", 1079 "scapyPlugin" 1080 ] 1081 }, 1082 "setup": [ 1083 "$IP link set dev $DUMMY up || true", 1084 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 1085 "$TC qdisc add dev $DUMMY root handle 1: ets bands 2 strict 1", 1086 "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s", 1087 "$TC filter add dev $DUMMY parent 1: basic classid 1:2", 1088 "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true", 1089 "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2", 1090 "$TC qdisc change dev $DUMMY root handle 1: ets bands 1 strict 1" 1091 ], 1092 "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11", 1093 "expExitCode": "1", 1094 "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root", 1095 "matchJSON": [ 1096 { 1097 "kind": "ets", 1098 "handle": "1:", 1099 "bytes": 196, 1100 "packets": 2 1101 } 1102 ], 1103 "teardown": [ 1104 "$TC qdisc del dev $DUMMY root handle 1:" 1105 ] 1106 }, 1107 { 1108 "id": "0b8f", 1109 "name": "Try to add ets class to the active list twice", 1110 "category": [ 1111 "qdisc", 1112 "ets", 1113 "tbf" 1114 ], 1115 "plugins": { 1116 "requires": [ 1117 "nsPlugin", 1118 "scapyPlugin" 1119 ] 1120 }, 1121 "setup": [ 1122 "$IP link set dev $DUMMY up || true", 1123 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 1124 "$TC qdisc add dev $DUMMY root handle 1: ets bands 2 strict 1", 1125 "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s", 1126 "$TC filter add dev $DUMMY parent 1: basic classid 1:2", 1127 "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true", 1128 "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2", 1129 "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 1" 1130 ], 1131 "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11", 1132 "expExitCode": "1", 1133 "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root", 1134 "matchJSON": [ 1135 { 1136 "kind": "ets", 1137 "handle": "1:", 1138 "bytes": 98, 1139 "packets": 1 1140 } 1141 ], 1142 "teardown": [ 1143 "$TC qdisc del dev $DUMMY root handle 1:" 1144 ] 1145 }, 1146 { 1147 "id": "a3d7", 1148 "name": "HFSC with large m1 - no divide-by-zero on class reactivation", 1149 "category": [ 1150 "qdisc", 1151 "hfsc" 1152 ], 1153 "plugins": { 1154 "requires": "nsPlugin" 1155 }, 1156 "setup": [ 1157 "$TC qdisc replace dev $DUMMY root handle 1: hfsc default 1", 1158 "$TC class replace dev $DUMMY parent 1: classid 1:1 hfsc rt m1 32gbit d 1ms m2 0bit ls m1 32gbit d 1ms m2 0bit", 1159 "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", 1160 "sleep 1" 1161 ], 1162 "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", 1163 "expExitCode": "0", 1164 "verifyCmd": "$TC qdisc show dev $DUMMY", 1165 "matchPattern": "qdisc hfsc 1: root", 1166 "matchCount": "1", 1167 "teardown": [ 1168 "$TC qdisc del dev $DUMMY handle 1: root" 1169 ] 1170 }, 1171 { 1172 "id": "7a5f", 1173 "name": "Force red to dequeue from its child's gso_skb with qfq leaf", 1174 "category": [ 1175 "qdisc", 1176 "tbf", 1177 "red", 1178 "qfq" 1179 ], 1180 "plugins": { 1181 "requires": "nsPlugin" 1182 }, 1183 "setup": [ 1184 "$IP link set dev $DUMMY up || true", 1185 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 1186 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", 1187 "$TC qdisc add dev $DUMMY parent 1: handle 2: red limit 757 min 16 max 24 avpkt 16", 1188 "$TC qdisc add dev $DUMMY parent 2: handle 3: qfq", 1189 "$TC class add dev $DUMMY classid 3:1 parent 3: qfq maxpkt 512 weight 1", 1190 "$TC filter add dev $DUMMY parent 3: protocol ip prio 1 matchall classid 3:1 action ok" 1191 ], 1192 "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", 1193 "expExitCode": "0", 1194 "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", 1195 "matchJSON": [ 1196 { 1197 "kind": "red", 1198 "handle": "2:", 1199 "bytes": 98, 1200 "packets": 1, 1201 "backlog": 0, 1202 "qlen": 0 1203 } 1204 ], 1205 "teardown": [ 1206 "$TC qdisc del dev $DUMMY handle 1: root" 1207 ] 1208 }, 1209 { 1210 "id": "cdae", 1211 "name": "Force sfb to dequeue from its child's gso_skb with qfq leaf", 1212 "category": [ 1213 "qdisc", 1214 "tbf", 1215 "sfb", 1216 "qfq" 1217 ], 1218 "plugins": { 1219 "requires": "nsPlugin" 1220 }, 1221 "setup": [ 1222 "$IP link set dev $DUMMY up || true", 1223 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 1224 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", 1225 "$TC qdisc add dev $DUMMY parent 1: handle 2: sfb", 1226 "$TC qdisc add dev $DUMMY parent 2: handle 3: qfq", 1227 "$TC class add dev $DUMMY classid 3:1 parent 3: qfq maxpkt 512 weight 1", 1228 "$TC filter add dev $DUMMY parent 3: protocol ip prio 1 matchall classid 3:1 action ok" 1229 ], 1230 "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", 1231 "expExitCode": "0", 1232 "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", 1233 "matchJSON": [ 1234 { 1235 "kind": "sfb", 1236 "handle": "2:", 1237 "bytes": 98, 1238 "packets": 1, 1239 "backlog": 0, 1240 "qlen": 0 1241 } 1242 ], 1243 "teardown": [ 1244 "$TC qdisc del dev $DUMMY handle 1: root" 1245 ] 1246 }, 1247 { 1248 "id": "291d", 1249 "name": "Force red to dequeue from its child's gso_skb with dualpi2 leaf", 1250 "category": [ 1251 "qdisc", 1252 "tbf", 1253 "red", 1254 "dualpi2" 1255 ], 1256 "plugins": { 1257 "requires": "nsPlugin" 1258 }, 1259 "setup": [ 1260 "$IP link set dev $DUMMY up || true", 1261 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 1262 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", 1263 "$TC qdisc add dev $DUMMY parent 1: handle 2: red limit 757 min 16 max 24 avpkt 16", 1264 "$TC qdisc add dev $DUMMY parent 2: handle 3: dualpi2" 1265 ], 1266 "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", 1267 "expExitCode": "0", 1268 "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", 1269 "matchJSON": [ 1270 { 1271 "kind": "red", 1272 "handle": "2:", 1273 "bytes": 98, 1274 "packets": 1, 1275 "backlog": 0, 1276 "qlen": 0 1277 } 1278 ], 1279 "teardown": [ 1280 "$TC qdisc del dev $DUMMY handle 1: root" 1281 ] 1282 }, 1283 { 1284 "id": "9c6d", 1285 "name": "Force sfb to dequeue from its child's gso_skb with dualpi2 leaf", 1286 "category": [ 1287 "qdisc", 1288 "tbf", 1289 "sfb", 1290 "dualpi2" 1291 ], 1292 "plugins": { 1293 "requires": "nsPlugin" 1294 }, 1295 "setup": [ 1296 "$IP link set dev $DUMMY up || true", 1297 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 1298 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", 1299 "$TC qdisc add dev $DUMMY parent 1: handle 2: sfb", 1300 "$TC qdisc add dev $DUMMY parent 2: handle 3: dualpi2" 1301 ], 1302 "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", 1303 "expExitCode": "0", 1304 "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", 1305 "matchJSON": [ 1306 { 1307 "kind": "sfb", 1308 "handle": "2:", 1309 "bytes": 98, 1310 "packets": 1, 1311 "backlog": 0, 1312 "qlen": 0 1313 } 1314 ], 1315 "teardown": [ 1316 "$TC qdisc del dev $DUMMY handle 1: root" 1317 ] 1318 }, 1319 { 1320 "id": "3a62", 1321 "name": "Try to create a qlen underflow with QFQ/CBS", 1322 "category": [ 1323 "qdisc", 1324 "qfq", 1325 "cbs" 1326 ], 1327 "plugins": { 1328 "requires": "nsPlugin" 1329 }, 1330 "setup": [ 1331 "$IP link set dev $DUMMY up || true", 1332 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 1333 "$TC qdisc add dev $DUMMY root handle 1: qfq", 1334 "$TC class add dev $DUMMY classid 1:1 parent 1: qfq", 1335 "$TC class add dev $DUMMY classid 1:2 parent 1: qfq", 1336 "$TC qdisc add dev $DUMMY handle 2: parent 1:1 cbs", 1337 "$TC qdisc add dev $DUMMY handle 3: parent 2: netem delay 5000000000", 1338 "$TC filter add dev $DUMMY parent 1: prio 1 u32 match ip dst 10.10.10.1 classid 1:1 action ok", 1339 "$TC filter add dev $DUMMY parent 1: prio 2 u32 match ip dst 10.10.10.2 classid 1:2 action ok", 1340 "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", 1341 "$IP l set $DUMMY down", 1342 "$IP l set $DUMMY up", 1343 "$TC qdisc replace dev $DUMMY handle 4: parent 2: pfifo" 1344 ], 1345 "cmdUnderTest": "ping -c 1 10.10.10.2 -W0.01 -I$DUMMY", 1346 "expExitCode": "1", 1347 "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:1", 1348 "matchJSON": [ 1349 { 1350 "kind": "cbs", 1351 "handle": "2:", 1352 "bytes": 0, 1353 "packets": 0 1354 } 1355 ], 1356 "teardown": [ 1357 "$TC qdisc del dev $DUMMY handle 1: root" 1358 ] 1359 } 1360] 1361