Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/tc-testing: Check backlog stats in gso_skb case

Add tests to ensure proper backlog accounting in hhf, codel, pie, fq,
fq_pie, and fq_codel qdiscs. We check for the bug pattern originally
found in fq, fq_pie, and fq_codel, which was an underflow in the tbf
parent backlog stats upon child qdisc removal.

Signed-off-by: William Liu <will@willsroot.io>
Reviewed-by: Savino Dicanosa <savy@syst3mfailure.io>
Link: https://patch.msgid.link/20250812235808.45281-1-will@willsroot.io
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

William Liu and committed by
Jakub Kicinski
8c06cbdc 52bf2726

+198
+198
tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json
··· 186 186 ] 187 187 }, 188 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 + { 189 387 "id": "a4bb", 190 388 "name": "Test FQ_CODEL with HTB parent - force packet drop with empty queue", 191 389 "category": [