* [PATCH net-next 2/2] selftests/tc-testing: Adapt idempotent qdisc notify callback tests to recent fq_codel changes
2026-05-21 15:08 [PATCH net-next 1/2] selftests/tc-testing: Add support for ifb devices Victor Nogueira
@ 2026-05-21 15:08 ` Victor Nogueira
2026-05-22 8:08 ` Eric Dumazet
2026-05-22 17:20 ` [PATCH net-next 1/2] selftests/tc-testing: Add support for ifb devices patchwork-bot+netdevbpf
1 sibling, 1 reply; 4+ messages in thread
From: Victor Nogueira @ 2026-05-21 15:08 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni, jhs, jiri; +Cc: netdev, pctammela
Commit 150061a20651 ("net/sched: fq_codel: local packets no longer count against memory limit")
made fq_codel not account for local packets in the
memory limit. Since tests a4bb, a4be, a4bf, a4c0, a4c1 were relying on
these packets being accounted so that parent's qlen notify callback was
executed, they broke.
Fix the tests by adding the qdiscs to ifb instead and making it see
mirred packets that came from scapy. That way the packets are accounted
in the memory limit and the parent's qlen notify callback is still
executed.
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Victor Nogueira <victor@mojatatu.com>
---
.../tc-testing/tc-tests/infra/qdiscs.json | 160 +++++++++++-------
1 file changed, 95 insertions(+), 65 deletions(-)
diff --git a/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json b/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json
index 848696c373fc..3da9936e115d 100644
--- a/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json
+++ b/tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json
@@ -392,26 +392,32 @@
"htb"
],
"plugins": {
- "requires": "nsPlugin"
+ "requires": [
+ "nsPlugin",
+ "scapyPlugin"
+ ]
},
"setup": [
- "$IP link set dev $DUMMY up || true",
- "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
- "$TC qdisc add dev $DUMMY handle 1: root htb default 10",
- "$TC class add dev $DUMMY parent 1: classid 1:10 htb rate 1kbit",
- "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
- "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
- "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
- "sleep 0.1"
+ "$TC qdisc add dev $IFB handle 1: root htb default 10",
+ "$TC class add dev $IFB parent 1: classid 1:10 htb rate 1kbit",
+ "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
+ "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
+ "$TC qdisc add dev $DEV1 ingress",
+ "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB"
],
- "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
+ "scapy": {
+ "iface": "$DEV0",
+ "count": 5,
+ "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
+ },
+ "cmdUnderTest": "$TC -s qdisc show dev $IFB",
"expExitCode": "0",
- "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
+ "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'",
"matchPattern": "dropped [1-9][0-9]*",
"matchCount": "1",
"teardown": [
- "$TC qdisc del dev $DUMMY handle 1: root",
- "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
+ "$TC qdisc del dev $IFB root",
+ "$TC qdisc del dev $DEV1 ingress"
]
},
{
@@ -423,26 +429,32 @@
"qfq"
],
"plugins": {
- "requires": "nsPlugin"
+ "requires": [
+ "nsPlugin",
+ "scapyPlugin"
+ ]
},
"setup": [
- "$IP link set dev $DUMMY up || true",
- "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
- "$TC qdisc add dev $DUMMY handle 1: root qfq",
- "$TC class add dev $DUMMY parent 1: classid 1:10 qfq weight 1 maxpkt 1000",
- "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
- "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
- "ping -c 10 -s 1000 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
- "sleep 0.1"
+ "$TC qdisc add dev $IFB handle 1: root qfq",
+ "$TC class add dev $IFB parent 1: classid 1:10 qfq weight 1 maxpkt 1000",
+ "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
+ "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
+ "$TC qdisc add dev $DEV1 ingress",
+ "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB"
],
- "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
+ "scapy": {
+ "iface": "$DEV0",
+ "count": 10,
+ "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
+ },
+ "cmdUnderTest": "$TC -s qdisc show dev $IFB",
"expExitCode": "0",
- "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
+ "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'",
"matchPattern": "dropped [1-9][0-9]*",
"matchCount": "1",
"teardown": [
- "$TC qdisc del dev $DUMMY handle 1: root",
- "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
+ "$TC qdisc del dev $IFB root",
+ "$TC qdisc del dev $DEV1 ingress"
]
},
{
@@ -454,26 +466,32 @@
"hfsc"
],
"plugins": {
- "requires": "nsPlugin"
+ "requires": [
+ "nsPlugin",
+ "scapyPlugin"
+ ]
},
"setup": [
- "$IP link set dev $DUMMY up || true",
- "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
- "$TC qdisc add dev $DUMMY handle 1: root hfsc default 10",
- "$TC class add dev $DUMMY parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit",
- "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
- "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
- "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
- "sleep 0.1"
+ "$TC qdisc add dev $IFB handle 1: root hfsc default 10",
+ "$TC class add dev $IFB parent 1: classid 1:10 hfsc sc rate 1kbit ul rate 1kbit",
+ "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
+ "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
+ "$TC qdisc add dev $DEV1 ingress",
+ "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB"
],
- "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
+ "scapy": {
+ "iface": "$DEV0",
+ "count": 5,
+ "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
+ },
+ "cmdUnderTest": "$TC -s qdisc show dev $IFB",
"expExitCode": "0",
- "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
+ "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'",
"matchPattern": "dropped [1-9][0-9]*",
"matchCount": "1",
"teardown": [
- "$TC qdisc del dev $DUMMY handle 1: root",
- "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
+ "$TC qdisc del dev $IFB root",
+ "$TC qdisc del dev $DEV1 ingress"
]
},
{
@@ -485,26 +503,32 @@
"drr"
],
"plugins": {
- "requires": "nsPlugin"
+ "requires": [
+ "nsPlugin",
+ "scapyPlugin"
+ ]
},
"setup": [
- "$IP link set dev $DUMMY up || true",
- "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
- "$TC qdisc add dev $DUMMY handle 1: root drr",
- "$TC class add dev $DUMMY parent 1: classid 1:10 drr quantum 1500",
- "$TC qdisc add dev $DUMMY parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
- "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
- "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
- "sleep 0.1"
+ "$TC qdisc add dev $IFB handle 1: root drr",
+ "$TC class add dev $IFB parent 1: classid 1:10 drr quantum 1500",
+ "$TC qdisc add dev $IFB parent 1:10 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
+ "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10",
+ "$TC qdisc add dev $DEV1 ingress",
+ "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB"
],
- "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
+ "scapy": {
+ "iface": "$DEV0",
+ "count": 5,
+ "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
+ },
+ "cmdUnderTest": "$TC -s qdisc show dev $IFB",
"expExitCode": "0",
- "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
+ "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'",
"matchPattern": "dropped [1-9][0-9]*",
"matchCount": "1",
"teardown": [
- "$TC qdisc del dev $DUMMY handle 1: root",
- "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
+ "$TC qdisc del dev $IFB root",
+ "$TC qdisc del dev $DEV1 ingress"
]
},
{
@@ -516,26 +540,32 @@
"ets"
],
"plugins": {
- "requires": "nsPlugin"
+ "requires": [
+ "nsPlugin",
+ "scapyPlugin"
+ ]
},
"setup": [
- "$IP link set dev $DUMMY up || true",
- "$IP addr add 10.10.10.10/24 dev $DUMMY || true",
- "$TC qdisc add dev $DUMMY handle 1: root ets bands 2 strict 1",
- "$TC class change dev $DUMMY parent 1: classid 1:1 ets",
- "$TC qdisc add dev $DUMMY parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
- "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
- "ping -c 5 -f -I $DUMMY 10.10.10.1 > /dev/null || true",
- "sleep 0.1"
+ "$TC qdisc add dev $IFB handle 1: root ets bands 2 strict 1",
+ "$TC class change dev $IFB parent 1: classid 1:1 ets",
+ "$TC qdisc add dev $IFB parent 1:1 handle 10: fq_codel memory_limit 1 flows 1 target 0.1ms interval 1ms",
+ "$TC filter add dev $IFB parent 1: protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
+ "$TC qdisc add dev $DEV1 ingress",
+ "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip protocol 1 0xff action mirred egress mirror dev $IFB"
],
- "cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
+ "scapy": {
+ "iface": "$DEV0",
+ "count": 5,
+ "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/ICMP()"
+ },
+ "cmdUnderTest": "$TC -s qdisc show dev $IFB",
"expExitCode": "0",
- "verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc fq_codel'",
+ "verifyCmd": "$TC -s qdisc show dev $IFB | grep -A 5 'qdisc fq_codel'",
"matchPattern": "dropped [1-9][0-9]*",
"matchCount": "1",
"teardown": [
- "$TC qdisc del dev $DUMMY handle 1: root",
- "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
+ "$TC qdisc del dev $IFB root",
+ "$TC qdisc del dev $DEV1 ingress"
]
},
{
--
2.54.0
^ permalink raw reply related [flat|nested] 4+ messages in thread