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 qdisc add dev $DUMMY parent 1:2 handle 3:0 netem duplicate 100%", 508 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2", 509 "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true", 510 "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1", 511 "$TC class del dev $DUMMY classid 1:1" 512 ], 513 "cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true", 514 "expExitCode": "0", 515 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 516 "matchJSON": [ 517 { 518 "kind": "hfsc", 519 "handle": "1:", 520 "bytes": 392, 521 "packets": 4 522 } 523 ], 524 "matchCount": "1", 525 "teardown": [ 526 "$TC qdisc del dev $DUMMY handle 1:0 root", 527 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 528 ] 529 }, 530 { 531 "id": "7c3b", 532 "name": "Test nested DRR's enqueue reentrant behaviour with netem", 533 "category": [ 534 "qdisc", 535 "drr" 536 ], 537 "plugins": { 538 "requires": "nsPlugin" 539 }, 540 "setup": [ 541 "$IP link set dev $DUMMY up || true", 542 "$IP addr add 10.10.10.10/24 dev $DUMMY || true", 543 "$TC qdisc add dev $DUMMY handle 1:0 root drr", 544 "$TC class add dev $DUMMY parent 1:0 classid 1:1 drr", 545 "$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1", 546 "$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr", 547 "$TC class add dev $DUMMY classid 2:1 parent 2:0 drr", 548 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1", 549 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%" 550 ], 551 "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true", 552 "expExitCode": "0", 553 "verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0", 554 "matchJSON": [ 555 { 556 "kind": "drr", 557 "handle": "1:", 558 "bytes": 196, 559 "packets": 2 560 } 561 ], 562 "matchCount": "1", 563 "teardown": [ 564 "$TC qdisc del dev $DUMMY handle 1:0 root", 565 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 566 ] 567 }, 568 { 569 "id": "62c4", 570 "name": "Test HTB with FQ_CODEL - basic functionality", 571 "category": [ 572 "qdisc", 573 "htb", 574 "fq_codel" 575 ], 576 "plugins": { 577 "requires": [ 578 "nsPlugin", 579 "scapyPlugin" 580 ] 581 }, 582 "setup": [ 583 "$TC qdisc add dev $DEV1 root handle 1: htb default 11", 584 "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit", 585 "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486", 586 "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn", 587 "sleep 0.5" 588 ], 589 "scapy": { 590 "iface": "$DEV0", 591 "count": 5, 592 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)" 593 }, 594 "cmdUnderTest": "$TC -s qdisc show dev $DEV1", 595 "expExitCode": "0", 596 "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'", 597 "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt", 598 "matchCount": "1", 599 "teardown": [ 600 "$TC qdisc del dev $DEV1 handle 1: root" 601 ] 602 }, 603 { 604 "id": "831d", 605 "name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain", 606 "category": ["qdisc", "hfsc", "drr", "netem", "blackhole"], 607 "plugins": { "requires": ["nsPlugin", "scapyPlugin"] }, 608 "setup": [ 609 "$IP link set dev $DEV1 up || true", 610 "$TC qdisc add dev $DEV1 root handle 1: drr", 611 "$TC filter add dev $DEV1 parent 1: basic classid 1:1", 612 "$TC class add dev $DEV1 parent 1: classid 1:1 drr", 613 "$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1", 614 "$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0", 615 "$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem", 616 "$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole" 617 ], 618 "scapy": { 619 "iface": "$DEV0", 620 "count": 5, 621 "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()" 622 }, 623 "cmdUnderTest": "$TC -s qdisc show dev $DEV1", 624 "expExitCode": "0", 625 "verifyCmd": "$TC -s qdisc show dev $DEV1", 626 "matchPattern": "qdisc hfsc", 627 "matchCount": "1", 628 "teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"] 629 }, 630 { 631 "id": "309e", 632 "name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem", 633 "category": [ 634 "qdisc", 635 "hfsc" 636 ], 637 "plugins": { 638 "requires": "nsPlugin" 639 }, 640 "setup": [ 641 "$IP link set dev $DUMMY up || true", 642 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 643 "$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 1s", 644 "$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc", 645 "ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true", 646 "$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit", 647 "$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%", 648 "$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit", 649 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1", 650 "$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2", 651 "ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true", 652 "$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1", 653 "$TC class del dev $DUMMY classid 2:1", 654 "ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true" 655 ], 656 "cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit", 657 "expExitCode": "0", 658 "verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1", 659 "matchJSON": [], 660 "teardown": [ 661 "$TC qdisc del dev $DUMMY handle 1:0 root", 662 "$IP addr del 10.10.10.10/24 dev $DUMMY || true" 663 ] 664 }, 665 { 666 "id": "d74b", 667 "name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain", 668 "category": [ 669 "qdisc", 670 "hfsc", 671 "drr", 672 "netem", 673 "blackhole" 674 ], 675 "plugins": { 676 "requires": [ 677 "nsPlugin", 678 "scapyPlugin" 679 ] 680 }, 681 "setup": [ 682 "$IP link set dev $DUMMY up || true", 683 "$IP addr add 10.10.11.10/24 dev $DUMMY || true", 684 "$TC qdisc add dev $DUMMY root handle 1: drr", 685 "$TC filter add dev $DUMMY parent 1: basic classid 1:1", 686 "$TC class add dev $DUMMY parent 1: classid 1:1 drr", 687 "$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1", 688 "$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0", 689 "$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem", 690 "$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole", 691 "ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true", 692 "$TC class del dev $DUMMY classid 1:1" 693 ], 694 "cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11", 695 "expExitCode": "1", 696 "verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1", 697 "matchJSON": [], 698 "teardown": [ 699 "$TC qdisc del dev $DUMMY root handle 1: drr" 700 ] 701 }, 702 { 703 "id": "be28", 704 "name": "Try to add fq_codel qdisc as a child of an hhf qdisc", 705 "category": [ 706 "qdisc", 707 "fq_codel", 708 "hhf" 709 ], 710 "plugins": { 711 "requires": "nsPlugin" 712 }, 713 "setup": [ 714 "$TC qdisc add dev $DUMMY root handle a: hhf" 715 ], 716 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel", 717 "expExitCode": "2", 718 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 719 "matchJSON": [], 720 "teardown": [ 721 "$TC qdisc del dev $DUMMY root" 722 ] 723 }, 724 { 725 "id": "fcb5", 726 "name": "Try to add pie qdisc as a child of a drr qdisc", 727 "category": [ 728 "qdisc", 729 "pie", 730 "drr" 731 ], 732 "plugins": { 733 "requires": "nsPlugin" 734 }, 735 "setup": [ 736 "$TC qdisc add dev $DUMMY root handle a: drr" 737 ], 738 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie", 739 "expExitCode": "2", 740 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 741 "matchJSON": [], 742 "teardown": [ 743 "$TC qdisc del dev $DUMMY root" 744 ] 745 }, 746 { 747 "id": "7801", 748 "name": "Try to add fq qdisc as a child of an inexistent hfsc class", 749 "category": [ 750 "qdisc", 751 "sfq", 752 "hfsc" 753 ], 754 "plugins": { 755 "requires": "nsPlugin" 756 }, 757 "setup": [ 758 "$TC qdisc add dev $DUMMY root handle a: hfsc" 759 ], 760 "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4", 761 "expExitCode": "2", 762 "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:", 763 "matchJSON": [], 764 "teardown": [ 765 "$TC qdisc del dev $DUMMY root" 766 ] 767 } 768] 769