selftests/tc-testing: Adapt idempotent qdisc notify callback tests to recent fq_codel changes

Commit 150061a206 ("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>
Acked-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260521150811.1896373-2-victor@mojatatu.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Victor Nogueira
2026-05-21 12:08:11 -03:00
committed by Jakub Kicinski
parent 4177fd4469
commit bde2a04d9b

View File

@@ -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"
]
},
{