1[ 2 { 3 "id": "ca5e", 4 "name": "Check class delete notification for ffff:", 5 "category": [ 6 "qdisc" 7 ], 8 "plugins": { 9 "requires": "nsPlugin" 10 }, 11 "setup": [ 12 "$IP link set dev $DUMMY up || true", 13 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 14 "$TC qdisc add dev $DUMMY root handle 1: drr", 15 "$TC filter add dev $DUMMY parent 1: basic classid 1:1", 16 "$TC class add dev $DUMMY parent 1: classid 1:1 drr", 17 "$TC qdisc add dev $DUMMY parent 1:1 handle ffff: drr", 18 "$TC filter add dev $DUMMY parent ffff: basic classid ffff:1", 19 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr", 20 "$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s", 21 "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true", 22 "$TC class del dev $DUMMY classid ffff:1", 23 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr" 24 ], 25 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1", 26 "expExitCode": "1", 27 "verifyCmd": "$TC -s qdisc ls dev $DUMMY", 28 "matchPattern": "drr 1: root", 29 "matchCount": "1", 30 "teardown": [ 31 "$TC qdisc del dev $DUMMY root handle 1: drr", 32 "$IP addr del 10.10.10.10/24 dev $DUMMY" 33 ] 34 }, 35 { 36 "id": "e4b7", 37 "name": "Check class delete notification for root ffff:", 38 "category": [ 39 "qdisc" 40 ], 41 "plugins": { 42 "requires": "nsPlugin" 43 }, 44 "setup": [ 45 "$IP link set dev $DUMMY up || true", 46 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 47 "$TC qdisc add dev $DUMMY root handle ffff: drr", 48 "$TC filter add dev $DUMMY parent ffff: basic classid ffff:1", 49 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr", 50 "$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s", 51 "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true", 52 "$TC class del dev $DUMMY classid ffff:1", 53 "$TC class add dev $DUMMY parent ffff: classid ffff:1 drr" 54 ], 55 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1", 56 "expExitCode": "1", 57 "verifyCmd": "$TC qdisc ls dev $DUMMY", 58 "matchPattern": "drr ffff: root", 59 "matchCount": "1", 60 "teardown": [ 61 "$TC qdisc del dev $DUMMY root handle ffff: drr", 62 "$IP addr del 10.10.10.10/24 dev $DUMMY" 63 ] 64 }, 65 { 66 "id": "33a9", 67 "name": "Check ingress is not searchable on backlog update", 68 "category": [ 69 "qdisc" 70 ], 71 "plugins": { 72 "requires": "nsPlugin" 73 }, 74 "setup": [ 75 "$IP link set dev $DUMMY up || true", 76 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 77 "$TC qdisc add dev $DUMMY ingress", 78 "$TC qdisc add dev $DUMMY root handle 1: drr", 79 "$TC filter add dev $DUMMY parent 1: basic classid 1:1", 80 "$TC class add dev $DUMMY parent 1: classid 1:1 drr", 81 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: drr", 82 "$TC filter add dev $DUMMY parent 2: basic classid 2:1", 83 "$TC class add dev $DUMMY parent 2: classid 2:1 drr", 84 "$TC qdisc add dev $DUMMY parent 2:1 netem delay 1s", 85 "ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true" 86 ], 87 "cmdUnderTest": "$TC class del dev $DUMMY classid 2:1", 88 "expExitCode": "0", 89 "verifyCmd": "$TC qdisc ls dev $DUMMY", 90 "matchPattern": "drr 1: root", 91 "matchCount": "1", 92 "teardown": [ 93 "$TC qdisc del dev $DUMMY root handle 1: drr", 94 "$TC qdisc del dev $DUMMY ingress", 95 "$IP addr del 10.10.10.10/24 dev $DUMMY" 96 ] 97 }, 98 { 99 "id": "a4b9", 100 "name": "Test class qlen notification", 101 "category": [ 102 "qdisc" 103 ], 104 "plugins": { 105 "requires": "nsPlugin" 106 }, 107 "setup": [ 108 "$IP link set dev $DUMMY up || true", 109 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 110 "$TC qdisc add dev $DUMMY root handle 1: drr", 111 "$TC filter add dev $DUMMY parent 1: basic classid 1:1", 112 "$TC class add dev $DUMMY parent 1: classid 1:1 drr", 113 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem", 114 "$TC qdisc add dev $DUMMY parent 2: handle 3: drr", 115 "$TC filter add dev $DUMMY parent 3: basic action drop", 116 "$TC class add dev $DUMMY parent 3: classid 3:1 drr", 117 "$TC class del dev $DUMMY classid 1:1", 118 "$TC class add dev $DUMMY parent 1: classid 1:1 drr" 119 ], 120 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1", 121 "expExitCode": "1", 122 "verifyCmd": "$TC qdisc ls dev $DUMMY", 123 "matchPattern": "drr 1: root", 124 "matchCount": "1", 125 "teardown": [ 126 "$TC qdisc del dev $DUMMY root handle 1: drr", 127 "$IP addr del 10.10.10.10/24 dev $DUMMY" 128 ] 129 }, 130 { 131 "id": "5456", 132 "name": "Test htb_dequeue_tree with deactivation and row emptying", 133 "category": [ 134 "qdisc", 135 "htb" 136 ], 137 "plugins": { 138 "requires": "nsPlugin" 139 }, 140 "setup": [ 141 "$IP link set dev $DUMMY up || true", 142 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 143 "$TC qdisc add dev $DUMMY root handle 1: htb default 1", 144 "$TC class add dev $DUMMY parent 1: classid 1:1 htb rate 64bit ", 145 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem", 146 "$TC qdisc add dev $DUMMY parent 2:1 handle 3: blackhole" 147 ], 148 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11", 149 "expExitCode": "1", 150 "verifyCmd": "$TC -j qdisc show dev $DUMMY", 151 "matchJSON": [], 152 "teardown": [ 153 "$TC qdisc del dev $DUMMY root" 154 ] 155 }, 156 { 157 "id": "c024", 158 "name": "Test TBF with SKBPRIO - catch qlen corner cases", 159 "category": [ 160 "qdisc", 161 "tbf", 162 "skbprio" 163 ], 164 "plugins": { 165 "requires": "nsPlugin" 166 }, 167 "setup": [ 168 "$IP link set dev $DUMMY up || true", 169 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 170 "$TC qdisc add dev $DUMMY handle 1: root tbf rate 100bit burst 2000 limit 1000", 171 "$TC qdisc add dev $DUMMY parent 1: handle 10: skbprio limit 1", 172 "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true", 173 "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true", 174 "ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true", 175 "ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true", 176 "sleep 0.5" 177 ], 178 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY", 179 "expExitCode": "0", 180 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc skbprio'", 181 "matchPattern": "dropped [1-9][0-9]*", 182 "matchCount": "1", 183 "teardown": [ 184 "$TC qdisc del dev $DUMMY handle 1: root", 185 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 186 ] 187 }, 188 { 189 "id": "a4bb", 190 "name": "Test FQ_CODEL with HTB parent - force packet drop with empty queue", 191 "category": [ 192 "qdisc", 193 "fq_codel", 194 "htb" 195 ], 196 "plugins": { 197 "requires": "nsPlugin" 198 }, 199 "setup": [ 200 "$IP link set dev $DUMMY up || true", 201 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 202 "$TC qdisc add dev $DUMMY handle 1: root htb default 10", 203 "$TC class add dev $DUMMY parent 1: classid 1:10 htb rate 1kbit", 204 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 205 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 206 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true", 207 "sleep 0.1" 208 ], 209 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY", 210 "expExitCode": "0", 211 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'", 212 "matchPattern": "dropped [1-9][0-9]*", 213 "matchCount": "1", 214 "teardown": [ 215 "$TC qdisc del dev $DUMMY handle 1: root", 216 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 217 ] 218 }, 219 { 220 "id": "a4be", 221 "name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue", 222 "category": [ 223 "qdisc", 224 "fq_codel", 225 "qfq" 226 ], 227 "plugins": { 228 "requires": "nsPlugin" 229 }, 230 "setup": [ 231 "$IP link set dev $DUMMY up || true", 232 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 233 "$TC qdisc add dev $DUMMY handle 1: root qfq", 234 "$TC class add dev $DUMMY parent 1: classid 1:10 qfq weight 1 maxpkt 1000", 235 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 236 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 237 "ping -c 10 -s 1000 -f -I $DUMMY 10.10.10.1 > /dev/null || true", 238 "sleep 0.1" 239 ], 240 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY", 241 "expExitCode": "0", 242 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'", 243 "matchPattern": "dropped [1-9][0-9]*", 244 "matchCount": "1", 245 "teardown": [ 246 "$TC qdisc del dev $DUMMY handle 1: root", 247 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 248 ] 249 }, 250 { 251 "id": "a4bf", 252 "name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue", 253 "category": [ 254 "qdisc", 255 "fq_codel", 256 "hfsc" 257 ], 258 "plugins": { 259 "requires": "nsPlugin" 260 }, 261 "setup": [ 262 "$IP link set dev $DUMMY up || true", 263 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 264 "$TC qdisc add dev $DUMMY handle 1: root hfsc default 10", 265 "$TC class add dev $DUMMY parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit", 266 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 267 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 268 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true", 269 "sleep 0.1" 270 ], 271 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY", 272 "expExitCode": "0", 273 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'", 274 "matchPattern": "dropped [1-9][0-9]*", 275 "matchCount": "1", 276 "teardown": [ 277 "$TC qdisc del dev $DUMMY handle 1: root", 278 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 279 ] 280 }, 281 { 282 "id": "a4c0", 283 "name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue", 284 "category": [ 285 "qdisc", 286 "fq_codel", 287 "drr" 288 ], 289 "plugins": { 290 "requires": "nsPlugin" 291 }, 292 "setup": [ 293 "$IP link set dev $DUMMY up || true", 294 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 295 "$TC qdisc add dev $DUMMY handle 1: root drr", 296 "$TC class add dev $DUMMY parent 1: classid 1:10 drr quantum 1500", 297 "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 298 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10", 299 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true", 300 "sleep 0.1" 301 ], 302 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY", 303 "expExitCode": "0", 304 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'", 305 "matchPattern": "dropped [1-9][0-9]*", 306 "matchCount": "1", 307 "teardown": [ 308 "$TC qdisc del dev $DUMMY handle 1: root", 309 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 310 ] 311 }, 312 { 313 "id": "a4c1", 314 "name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue", 315 "category": [ 316 "qdisc", 317 "fq_codel", 318 "ets" 319 ], 320 "plugins": { 321 "requires": "nsPlugin" 322 }, 323 "setup": [ 324 "$IP link set dev $DUMMY up || true", 325 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 326 "$TC qdisc add dev $DUMMY handle 1: root ets bands 2 strict 1", 327 "$TC class change dev $DUMMY parent 1: classid 1:1 ets", 328 "$TC qdisc add dev $DUMMY parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms", 329 "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1", 330 "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true", 331 "sleep 0.1" 332 ], 333 "cmdUnderTest": "$TC -s qdisc show dev $DUMMY", 334 "expExitCode": "0", 335 "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'", 336 "matchPattern": "dropped [1-9][0-9]*", 337 "matchCount": "1", 338 "teardown": [ 339 "$TC qdisc del dev $DUMMY handle 1: root", 340 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 341 ] 342 }, 343 { 344 "id": "a4c3", 345 "name": "Test HFSC with netem/blackhole - queue emptying during peek operation", 346 "category": [ 347 "qdisc", 348 "hfsc", 349 "netem", 350 "blackhole" 351 ], 352 "plugins": { 353 "requires": "nsPlugin" 354 }, 355 "setup": [ 356 "$IP link set dev $DUMMY up || true", 357 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 358 "$TC qdisc add dev $DUMMY handle 1:0 root drr", 359 "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr", 360 "$TC class add dev $DUMMY parent 1:0 classid 1:2 drr", 361 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024", 362 "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 hfsc default 1", 363 "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit", 364 "$TC qdisc add dev $DUMMY parent 3:1 handle 4:0 netem delay 1ms", 365 "$TC qdisc add dev $DUMMY parent 4:1 handle 5:0 blackhole", 366 "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true", 367 "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit", 368 "$TC class del dev $DUMMY parent 3:0 classid 3:1", 369 "$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit", 370 "ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true" 371 ], 372 "cmdUnderTest": "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit", 373 "expExitCode": "0", 374 "verifyCmd": "$TC -s qdisc show dev $DUMMY", 375 "matchPattern": "qdisc hfsc 3:.*parent 1:2.*default 1", 376 "matchCount": "1", 377 "teardown": [ 378 "$TC qdisc del dev $DUMMY handle 1:0 root", 379 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 380 ] 381 }, 382 { 383 "id": "90ec", 384 "name": "Test DRR's enqueue reentrant behaviour with netem", 385 "category": [ 386 "qdisc", 387 "drr" 388 ], 389 "plugins": { 390 "requires": "nsPlugin" 391 }, 392 "setup": [ 393 "$IP link set dev $DUMMY up || true", 394 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 395 "$TC qdisc add dev $DUMMY handle 1:0 root drr", 396 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr", 397 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 398 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1" 399 ], 400 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 401 "expExitCode": "0", 402 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 403 "matchJSON": [ 404 { 405 "kind": "drr", 406 "handle": "1:", 407 "bytes": 196, 408 "packets": 2 409 } 410 ], 411 "matchCount": "1", 412 "teardown": [ 413 "$TC qdisc del dev $DUMMY handle 1:0 root", 414 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 415 ] 416 }, 417 { 418 "id": "1f1f", 419 "name": "Test ETS's enqueue reentrant behaviour with netem", 420 "category": [ 421 "qdisc", 422 "ets" 423 ], 424 "plugins": { 425 "requires": "nsPlugin" 426 }, 427 "setup": [ 428 "$IP link set dev $DUMMY up || true", 429 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 430 "$TC qdisc add dev $DUMMY handle 1:0 root ets bands 2", 431 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500", 432 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 433 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1" 434 ], 435 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 436 "expExitCode": "0", 437 "verifyCmd": "$TC -j -s class show dev $DUMMY", 438 "matchJSON": [ 439 { 440 "class": "ets", 441 "handle": "1:1", 442 "stats": { 443 "bytes": 196, 444 "packets": 2 445 } 446 } 447 ], 448 "matchCount": "1", 449 "teardown": [ 450 "$TC qdisc del dev $DUMMY handle 1:0 root", 451 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 452 ] 453 }, 454 { 455 "id": "5e6d", 456 "name": "Test QFQ's enqueue reentrant behaviour with netem", 457 "category": [ 458 "qdisc", 459 "qfq" 460 ], 461 "plugins": { 462 "requires": "nsPlugin" 463 }, 464 "setup": [ 465 "$IP link set dev $DUMMY up || true", 466 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 467 "$TC qdisc add dev $DUMMY handle 1:0 root qfq", 468 "$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500", 469 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 470 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1" 471 ], 472 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 473 "expExitCode": "0", 474 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 475 "matchJSON": [ 476 { 477 "kind": "qfq", 478 "handle": "1:", 479 "bytes": 196, 480 "packets": 2 481 } 482 ], 483 "matchCount": "1", 484 "teardown": [ 485 "$TC qdisc del dev $DUMMY handle 1:0 root", 486 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 487 ] 488 }, 489 { 490 "id": "bf1d", 491 "name": "Test HFSC's enqueue reentrant behaviour with netem", 492 "category": [ 493 "qdisc", 494 "hfsc" 495 ], 496 "plugins": { 497 "requires": "nsPlugin" 498 }, 499 "setup": [ 500 "$IP link set dev $DUMMY up || true", 501 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 502 "$TC qdisc add dev $DUMMY handle 1:0 root hfsc", 503 "$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit", 504 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 505 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1", 506 "$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit", 507 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2", 508 "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true", 509 "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1", 510 "$TC class del dev $DUMMY classid 1:1" 511 ], 512 "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true", 513 "expExitCode": "0", 514 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 515 "matchJSON": [ 516 { 517 "kind": "hfsc", 518 "handle": "1:", 519 "bytes": 294, 520 "packets": 3 521 } 522 ], 523 "matchCount": "1", 524 "teardown": [ 525 "$TC qdisc del dev $DUMMY handle 1:0 root", 526 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 527 ] 528 }, 529 { 530 "id": "7c3b", 531 "name": "Test nested DRR's enqueue reentrant behaviour with netem", 532 "category": [ 533 "qdisc", 534 "drr" 535 ], 536 "plugins": { 537 "requires": "nsPlugin" 538 }, 539 "setup": [ 540 "$IP link set dev $DUMMY up || true", 541 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 542 "$TC qdisc add dev $DUMMY handle 1:0 root drr", 543 "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr", 544 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1", 545 "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr", 546 "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr", 547 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1", 548 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%" 549 ], 550 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 551 "expExitCode": "0", 552 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 553 "matchJSON": [ 554 { 555 "kind": "drr", 556 "handle": "1:", 557 "bytes": 196, 558 "packets": 2 559 } 560 ], 561 "matchCount": "1", 562 "teardown": [ 563 "$TC qdisc del dev $DUMMY handle 1:0 root", 564 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 565 ] 566 }, 567 { 568 "id": "62c4", 569 "name": "Test HTB with FQ_CODEL - basic functionality", 570 "category": [ 571 "qdisc", 572 "htb", 573 "fq_codel" 574 ], 575 "plugins": { 576 "requires": [ 577 "nsPlugin", 578 "scapyPlugin" 579 ] 580 }, 581 "setup": [ 582 "$TC qdisc add dev $DEV1 root handle 1: htb default 11", 583 "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit", 584 "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486", 585 "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn", 586 "sleep 0.5" 587 ], 588 "scapy": { 589 "iface": "$DEV0", 590 "count": 5, 591 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)" 592 }, 593 "cmdUnderTest": "$TC -s qdisc show dev $DEV1", 594 "expExitCode": "0", 595 "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'", 596 "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt", 597 "matchCount": "1", 598 "teardown": [ 599 "$TC qdisc del dev $DEV1 handle 1: root" 600 ] 601 }, 602 { 603 "id": "831d", 604 "name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain", 605 "category": ["qdisc", "hfsc", "drr", "netem", "blackhole"], 606 "plugins": { "requires": ["nsPlugin", "scapyPlugin"] }, 607 "setup": [ 608 "$IP link set dev $DEV1 up || true", 609 "$TC qdisc add dev $DEV1 root handle 1: drr", 610 "$TC filter add dev $DEV1 parent 1: basic classid 1:1", 611 "$TC class add dev $DEV1 parent 1: classid 1:1 drr", 612 "$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1", 613 "$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0", 614 "$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem", 615 "$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole" 616 ], 617 "scapy": { 618 "iface": "$DEV0", 619 "count": 5, 620 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 621 }, 622 "cmdUnderTest": "$TC -s qdisc show dev $DEV1", 623 "expExitCode": "0", 624 "verifyCmd": "$TC -s qdisc show dev $DEV1", 625 "matchPattern": "qdisc hfsc", 626 "matchCount": "1", 627 "teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"] 628 }, 629 { 630 "id": "309e", 631 "name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem", 632 "category": [ 633 "qdisc", 634 "hfsc" 635 ], 636 "plugins": { 637 "requires": "nsPlugin" 638 }, 639 "setup": [ 640 "$IP link set dev $DUMMY up || true", 641 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 642 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 1s", 643 "$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc", 644 "ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true", 645 "$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit", 646 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%", 647 "$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit", 648 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1", 649 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2", 650 "ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true", 651 "$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1", 652 "$TC class del dev $DUMMY classid 2:1", 653 "ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true" 654 ], 655 "cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit", 656 "expExitCode": "0", 657 "verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1", 658 "matchJSON": [], 659 "teardown": [ 660 "$TC qdisc del dev $DUMMY handle 1:0 root", 661 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 662 ] 663 }, 664 { 665 "id": "d74b", 666 "name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain", 667 "category": [ 668 "qdisc", 669 "hfsc", 670 "drr", 671 "netem", 672 "blackhole" 673 ], 674 "plugins": { 675 "requires": [ 676 "nsPlugin", 677 "scapyPlugin" 678 ] 679 }, 680 "setup": [ 681 "$IP link set dev $DUMMY up || true", 682 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 683 "$TC qdisc add dev $DUMMY root handle 1: drr", 684 "$TC filter add dev $DUMMY parent 1: basic classid 1:1", 685 "$TC class add dev $DUMMY parent 1: classid 1:1 drr", 686 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1", 687 "$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0", 688 "$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem", 689 "$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole", 690 "ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true", 691 "$TC class del dev $DUMMY classid 1:1" 692 ], 693 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11", 694 "expExitCode": "1", 695 "verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1", 696 "matchJSON": [], 697 "teardown": [ 698 "$TC qdisc del dev $DUMMY root handle 1: drr" 699 ] 700 }, 701 { 702 "id": "be28", 703 "name": "Try to add fq_codel qdisc as a child of an hhf qdisc", 704 "category": [ 705 "qdisc", 706 "fq_codel", 707 "hhf" 708 ], 709 "plugins": { 710 "requires": "nsPlugin" 711 }, 712 "setup": [ 713 "$TC qdisc add dev $DUMMY root handle a: hhf" 714 ], 715 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel", 716 "expExitCode": "2", 717 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 718 "matchJSON": [], 719 "teardown": [ 720 "$TC qdisc del dev $DUMMY root" 721 ] 722 }, 723 { 724 "id": "fcb5", 725 "name": "Try to add pie qdisc as a child of a drr qdisc", 726 "category": [ 727 "qdisc", 728 "pie", 729 "drr" 730 ], 731 "plugins": { 732 "requires": "nsPlugin" 733 }, 734 "setup": [ 735 "$TC qdisc add dev $DUMMY root handle a: drr" 736 ], 737 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie", 738 "expExitCode": "2", 739 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 740 "matchJSON": [], 741 "teardown": [ 742 "$TC qdisc del dev $DUMMY root" 743 ] 744 }, 745 { 746 "id": "7801", 747 "name": "Try to add fq qdisc as a child of an inexistent hfsc class", 748 "category": [ 749 "qdisc", 750 "sfq", 751 "hfsc" 752 ], 753 "plugins": { 754 "requires": "nsPlugin" 755 }, 756 "setup": [ 757 "$TC qdisc add dev $DUMMY root handle a: hfsc" 758 ], 759 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4", 760 "expExitCode": "2", 761 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 762 "matchJSON": [], 763 "teardown": [ 764 "$TC qdisc del dev $DUMMY root" 765 ] 766 } 767] 768