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>
This commit is contained in:
William Liu
2025-08-14 17:52:29 -07:00
committed by Jakub Kicinski
parent 52bf272636
commit 8c06cbdcba
@@ -185,6 +185,204 @@
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
]
},
{
"id": "34c0",
"name": "Test TBF with HHF Backlog Accounting in gso_skb case against underflow",
"category": [
"qdisc",
"tbf",
"hhf"
],
"plugins": {
"requires": [
"nsPlugin"
]
},
"setup": [
"$IP link set dev $DUMMY up || true",
"$IP addr add 10.10.11.10/24 dev $DUMMY || true",
"$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
"$TC qdisc replace dev $DUMMY handle 2: parent 1:1 hhf limit 1000",
[
"ping -I $DUMMY -c2 10.10.11.11",
1
],
"$TC qdisc change dev $DUMMY handle 2: parent 1:1 hhf limit 1"
],
"cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
"expExitCode": "0",
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
"matchPattern": "backlog 0b 0p",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DUMMY handle 1: root"
]
},
{
"id": "fd68",
"name": "Test TBF with CODEL Backlog Accounting in gso_skb case against underflow",
"category": [
"qdisc",
"tbf",
"codel"
],
"plugins": {
"requires": [
"nsPlugin"
]
},
"setup": [
"$IP link set dev $DUMMY up || true",
"$IP addr add 10.10.11.10/24 dev $DUMMY || true",
"$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
"$TC qdisc replace dev $DUMMY handle 2: parent 1:1 codel limit 1000",
[
"ping -I $DUMMY -c2 10.10.11.11",
1
],
"$TC qdisc change dev $DUMMY handle 2: parent 1:1 codel limit 1"
],
"cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
"expExitCode": "0",
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
"matchPattern": "backlog 0b 0p",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DUMMY handle 1: root"
]
},
{
"id": "514e",
"name": "Test TBF with PIE Backlog Accounting in gso_skb case against underflow",
"category": [
"qdisc",
"tbf",
"pie"
],
"plugins": {
"requires": [
"nsPlugin"
]
},
"setup": [
"$IP link set dev $DUMMY up || true",
"$IP addr add 10.10.11.10/24 dev $DUMMY || true",
"$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
"$TC qdisc replace dev $DUMMY handle 2: parent 1:1 pie limit 1000",
[
"ping -I $DUMMY -c2 10.10.11.11",
1
],
"$TC qdisc change dev $DUMMY handle 2: parent 1:1 pie limit 1"
],
"cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
"expExitCode": "0",
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
"matchPattern": "backlog 0b 0p",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DUMMY handle 1: root"
]
},
{
"id": "6c97",
"name": "Test TBF with FQ Backlog Accounting in gso_skb case against underflow",
"category": [
"qdisc",
"tbf",
"fq"
],
"plugins": {
"requires": [
"nsPlugin"
]
},
"setup": [
"$IP link set dev $DUMMY up || true",
"$IP addr add 10.10.11.10/24 dev $DUMMY || true",
"$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
"$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq limit 1000",
[
"ping -I $DUMMY -c2 10.10.11.11",
1
],
"$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq limit 1"
],
"cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
"expExitCode": "0",
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
"matchPattern": "backlog 0b 0p",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DUMMY handle 1: root"
]
},
{
"id": "5d0b",
"name": "Test TBF with FQ_CODEL Backlog Accounting in gso_skb case against underflow",
"category": [
"qdisc",
"tbf",
"fq_codel"
],
"plugins": {
"requires": [
"nsPlugin"
]
},
"setup": [
"$IP link set dev $DUMMY up || true",
"$IP addr add 10.10.11.10/24 dev $DUMMY || true",
"$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
"$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq_codel limit 1000",
[
"ping -I $DUMMY -c2 10.10.11.11",
1
],
"$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq_codel limit 1"
],
"cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
"expExitCode": "0",
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
"matchPattern": "backlog 0b 0p",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DUMMY handle 1: root"
]
},
{
"id": "21c3",
"name": "Test TBF with FQ_PIE Backlog Accounting in gso_skb case against underflow",
"category": [
"qdisc",
"tbf",
"fq_pie"
],
"plugins": {
"requires": [
"nsPlugin"
]
},
"setup": [
"$IP link set dev $DUMMY up || true",
"$IP addr add 10.10.11.10/24 dev $DUMMY || true",
"$TC qdisc add dev $DUMMY root handle 1: tbf rate 8bit burst 100b latency 100ms",
"$TC qdisc replace dev $DUMMY handle 2: parent 1:1 fq_pie limit 1000",
[
"ping -I $DUMMY -c2 10.10.11.11",
1
],
"$TC qdisc change dev $DUMMY handle 2: parent 1:1 fq_pie limit 1"
],
"cmdUnderTest": "$TC qdisc del dev $DUMMY handle 2: parent 1:1",
"expExitCode": "0",
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
"matchPattern": "backlog 0b 0p",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DUMMY handle 1: root"
]
},
{
"id": "a4bb",
"name": "Test FQ_CODEL with HTB parent - force packet drop with empty queue",