mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-08 07:16:26 +00:00

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>
966 lines
36 KiB
JSON
966 lines
36 KiB
JSON
[
|
|
{
|
|
"id": "ca5e",
|
|
"name": "Check class delete notification for ffff:",
|
|
"category": [
|
|
"qdisc"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link set dev $DUMMY up || true",
|
|
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
|
|
"$TC qdisc add dev $DUMMY root handle 1: drr",
|
|
"$TC filter add dev $DUMMY parent 1: basic classid 1:1",
|
|
"$TC class add dev $DUMMY parent 1: classid 1:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle ffff: drr",
|
|
"$TC filter add dev $DUMMY parent ffff: basic classid ffff:1",
|
|
"$TC class add dev $DUMMY parent ffff: classid ffff:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s",
|
|
"ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true",
|
|
"$TC class del dev $DUMMY classid ffff:1",
|
|
"$TC class add dev $DUMMY parent ffff: classid ffff:1 drr"
|
|
],
|
|
"cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
|
|
"expExitCode": "1",
|
|
"verifyCmd": "$TC -s qdisc ls dev $DUMMY",
|
|
"matchPattern": "drr 1: root",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root handle 1: drr",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY"
|
|
]
|
|
},
|
|
{
|
|
"id": "e4b7",
|
|
"name": "Check class delete notification for root ffff:",
|
|
"category": [
|
|
"qdisc"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link set dev $DUMMY up || true",
|
|
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
|
|
"$TC qdisc add dev $DUMMY root handle ffff: drr",
|
|
"$TC filter add dev $DUMMY parent ffff: basic classid ffff:1",
|
|
"$TC class add dev $DUMMY parent ffff: classid ffff:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent ffff:1 netem delay 1s",
|
|
"ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true",
|
|
"$TC class del dev $DUMMY classid ffff:1",
|
|
"$TC class add dev $DUMMY parent ffff: classid ffff:1 drr"
|
|
],
|
|
"cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
|
|
"expExitCode": "1",
|
|
"verifyCmd": "$TC qdisc ls dev $DUMMY",
|
|
"matchPattern": "drr ffff: root",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root handle ffff: drr",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY"
|
|
]
|
|
},
|
|
{
|
|
"id": "33a9",
|
|
"name": "Check ingress is not searchable on backlog update",
|
|
"category": [
|
|
"qdisc"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link set dev $DUMMY up || true",
|
|
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
|
|
"$TC qdisc add dev $DUMMY ingress",
|
|
"$TC qdisc add dev $DUMMY root handle 1: drr",
|
|
"$TC filter add dev $DUMMY parent 1: basic classid 1:1",
|
|
"$TC class add dev $DUMMY parent 1: classid 1:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2: drr",
|
|
"$TC filter add dev $DUMMY parent 2: basic classid 2:1",
|
|
"$TC class add dev $DUMMY parent 2: classid 2:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent 2:1 netem delay 1s",
|
|
"ping -c1 -W0.01 -I $DUMMY 10.10.10.1 || true"
|
|
],
|
|
"cmdUnderTest": "$TC class del dev $DUMMY classid 2:1",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc ls dev $DUMMY",
|
|
"matchPattern": "drr 1: root",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root handle 1: drr",
|
|
"$TC qdisc del dev $DUMMY ingress",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY"
|
|
]
|
|
},
|
|
{
|
|
"id": "a4b9",
|
|
"name": "Test class qlen notification",
|
|
"category": [
|
|
"qdisc"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link set dev $DUMMY up || true",
|
|
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
|
|
"$TC qdisc add dev $DUMMY root handle 1: drr",
|
|
"$TC filter add dev $DUMMY parent 1: basic classid 1:1",
|
|
"$TC class add dev $DUMMY parent 1: classid 1:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem",
|
|
"$TC qdisc add dev $DUMMY parent 2: handle 3: drr",
|
|
"$TC filter add dev $DUMMY parent 3: basic action drop",
|
|
"$TC class add dev $DUMMY parent 3: classid 3:1 drr",
|
|
"$TC class del dev $DUMMY classid 1:1",
|
|
"$TC class add dev $DUMMY parent 1: classid 1:1 drr"
|
|
],
|
|
"cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.10.1",
|
|
"expExitCode": "1",
|
|
"verifyCmd": "$TC qdisc ls dev $DUMMY",
|
|
"matchPattern": "drr 1: root",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root handle 1: drr",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY"
|
|
]
|
|
},
|
|
{
|
|
"id": "5456",
|
|
"name": "Test htb_dequeue_tree with deactivation and row emptying",
|
|
"category": [
|
|
"qdisc",
|
|
"htb"
|
|
],
|
|
"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: htb default 1",
|
|
"$TC class add dev $DUMMY parent 1: classid 1:1 htb rate 64bit ",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2: netem",
|
|
"$TC qdisc add dev $DUMMY parent 2:1 handle 3: blackhole"
|
|
],
|
|
"cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
|
|
"expExitCode": "1",
|
|
"verifyCmd": "$TC -j qdisc show dev $DUMMY",
|
|
"matchJSON": [],
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root"
|
|
]
|
|
},
|
|
{
|
|
"id": "c024",
|
|
"name": "Test TBF with SKBPRIO - catch qlen corner cases",
|
|
"category": [
|
|
"qdisc",
|
|
"tbf",
|
|
"skbprio"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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 tbf rate 100bit burst 2000 limit 1000",
|
|
"$TC qdisc add dev $DUMMY parent 1: handle 10: skbprio limit 1",
|
|
"ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"ping -c 1 -W 0.1 -Q 0x00 -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"ping -c 1 -W 0.1 -Q 0x1c -s 1400 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"sleep 0.5"
|
|
],
|
|
"cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DUMMY | grep -A 5 'qdisc skbprio'",
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"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",
|
|
"category": [
|
|
"qdisc",
|
|
"fq_codel",
|
|
"htb"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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"
|
|
],
|
|
"cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DUMMY | 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"
|
|
]
|
|
},
|
|
{
|
|
"id": "a4be",
|
|
"name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue",
|
|
"category": [
|
|
"qdisc",
|
|
"fq_codel",
|
|
"qfq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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"
|
|
],
|
|
"cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DUMMY | 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"
|
|
]
|
|
},
|
|
{
|
|
"id": "a4bf",
|
|
"name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue",
|
|
"category": [
|
|
"qdisc",
|
|
"fq_codel",
|
|
"hfsc"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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"
|
|
],
|
|
"cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DUMMY | 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"
|
|
]
|
|
},
|
|
{
|
|
"id": "a4c0",
|
|
"name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue",
|
|
"category": [
|
|
"qdisc",
|
|
"fq_codel",
|
|
"drr"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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"
|
|
],
|
|
"cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DUMMY | 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"
|
|
]
|
|
},
|
|
{
|
|
"id": "a4c1",
|
|
"name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue",
|
|
"category": [
|
|
"qdisc",
|
|
"fq_codel",
|
|
"ets"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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"
|
|
],
|
|
"cmdUnderTest": "$TC -s qdisc show dev $DUMMY",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DUMMY | 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"
|
|
]
|
|
},
|
|
{
|
|
"id": "a4c3",
|
|
"name": "Test HFSC with netem/blackhole - queue emptying during peek operation",
|
|
"category": [
|
|
"qdisc",
|
|
"hfsc",
|
|
"netem",
|
|
"blackhole"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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:0 root drr",
|
|
"$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
|
|
"$TC class add dev $DUMMY parent 1:0 classid 1:2 drr",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024",
|
|
"$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 hfsc default 1",
|
|
"$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
|
|
"$TC qdisc add dev $DUMMY parent 3:1 handle 4:0 netem delay 1ms",
|
|
"$TC qdisc add dev $DUMMY parent 4:1 handle 5:0 blackhole",
|
|
"ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true",
|
|
"$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
|
|
"$TC class del dev $DUMMY parent 3:0 classid 3:1",
|
|
"$TC class add dev $DUMMY parent 3:0 classid 3:1 hfsc rt m1 5Mbit d 10ms m2 10Mbit",
|
|
"ping -c 3 -W 0.01 -i 0.001 -s 1 10.10.10.10 -I $DUMMY > /dev/null 2>&1 || true"
|
|
],
|
|
"cmdUnderTest": "$TC class change dev $DUMMY parent 3:0 classid 3:1 hfsc sc m1 5Mbit d 10ms m2 10Mbit",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc hfsc 3:.*parent 1:2.*default 1",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1:0 root",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
|
|
]
|
|
},
|
|
{
|
|
"id": "90ec",
|
|
"name": "Test DRR's enqueue reentrant behaviour with netem",
|
|
"category": [
|
|
"qdisc",
|
|
"drr"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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:0 root drr",
|
|
"$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
|
|
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
|
|
],
|
|
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
|
|
"matchJSON": [
|
|
{
|
|
"kind": "drr",
|
|
"handle": "1:",
|
|
"bytes": 196,
|
|
"packets": 2
|
|
}
|
|
],
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1:0 root",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
|
|
]
|
|
},
|
|
{
|
|
"id": "1f1f",
|
|
"name": "Test ETS's enqueue reentrant behaviour with netem",
|
|
"category": [
|
|
"qdisc",
|
|
"ets"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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:0 root ets bands 2",
|
|
"$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
|
|
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
|
|
],
|
|
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -j -s class show dev $DUMMY",
|
|
"matchJSON": [
|
|
{
|
|
"class": "ets",
|
|
"handle": "1:1",
|
|
"stats": {
|
|
"bytes": 196,
|
|
"packets": 2
|
|
}
|
|
}
|
|
],
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1:0 root",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
|
|
]
|
|
},
|
|
{
|
|
"id": "5e6d",
|
|
"name": "Test QFQ's enqueue reentrant behaviour with netem",
|
|
"category": [
|
|
"qdisc",
|
|
"qfq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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:0 root qfq",
|
|
"$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
|
|
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
|
|
],
|
|
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
|
|
"matchJSON": [
|
|
{
|
|
"kind": "qfq",
|
|
"handle": "1:",
|
|
"bytes": 196,
|
|
"packets": 2
|
|
}
|
|
],
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1:0 root",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
|
|
]
|
|
},
|
|
{
|
|
"id": "bf1d",
|
|
"name": "Test HFSC's enqueue reentrant behaviour with netem",
|
|
"category": [
|
|
"qdisc",
|
|
"hfsc"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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:0 root hfsc",
|
|
"$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
|
|
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1",
|
|
"$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit",
|
|
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2",
|
|
"ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true",
|
|
"$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1",
|
|
"$TC class del dev $DUMMY classid 1:1"
|
|
],
|
|
"cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
|
|
"matchJSON": [
|
|
{
|
|
"kind": "hfsc",
|
|
"handle": "1:",
|
|
"bytes": 294,
|
|
"packets": 3
|
|
}
|
|
],
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1:0 root",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
|
|
]
|
|
},
|
|
{
|
|
"id": "7c3b",
|
|
"name": "Test nested DRR's enqueue reentrant behaviour with netem",
|
|
"category": [
|
|
"qdisc",
|
|
"drr"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"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:0 root drr",
|
|
"$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
|
|
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
|
|
"$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr",
|
|
"$TC class add dev $DUMMY classid 2:1 parent 2:0 drr",
|
|
"$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1",
|
|
"$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%"
|
|
],
|
|
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
|
|
"matchJSON": [
|
|
{
|
|
"kind": "drr",
|
|
"handle": "1:",
|
|
"bytes": 196,
|
|
"packets": 2
|
|
}
|
|
],
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1:0 root",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
|
|
]
|
|
},
|
|
{
|
|
"id": "62c4",
|
|
"name": "Test HTB with FQ_CODEL - basic functionality",
|
|
"category": [
|
|
"qdisc",
|
|
"htb",
|
|
"fq_codel"
|
|
],
|
|
"plugins": {
|
|
"requires": [
|
|
"nsPlugin",
|
|
"scapyPlugin"
|
|
]
|
|
},
|
|
"setup": [
|
|
"$TC qdisc add dev $DEV1 root handle 1: htb default 11",
|
|
"$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit",
|
|
"$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486",
|
|
"$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn",
|
|
"sleep 0.5"
|
|
],
|
|
"scapy": {
|
|
"iface": "$DEV0",
|
|
"count": 5,
|
|
"packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)"
|
|
},
|
|
"cmdUnderTest": "$TC -s qdisc show dev $DEV1",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'",
|
|
"matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DEV1 handle 1: root"
|
|
]
|
|
},
|
|
{
|
|
"id": "831d",
|
|
"name": "Test HFSC qlen accounting with DRR/NETEM/BLACKHOLE chain",
|
|
"category": ["qdisc", "hfsc", "drr", "netem", "blackhole"],
|
|
"plugins": { "requires": ["nsPlugin", "scapyPlugin"] },
|
|
"setup": [
|
|
"$IP link set dev $DEV1 up || true",
|
|
"$TC qdisc add dev $DEV1 root handle 1: drr",
|
|
"$TC filter add dev $DEV1 parent 1: basic classid 1:1",
|
|
"$TC class add dev $DEV1 parent 1: classid 1:1 drr",
|
|
"$TC qdisc add dev $DEV1 parent 1:1 handle 2: hfsc def 1",
|
|
"$TC class add dev $DEV1 parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
|
|
"$TC qdisc add dev $DEV1 parent 2:1 handle 3: netem",
|
|
"$TC qdisc add dev $DEV1 parent 3:1 handle 4: blackhole"
|
|
],
|
|
"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 $DEV1",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -s qdisc show dev $DEV1",
|
|
"matchPattern": "qdisc hfsc",
|
|
"matchCount": "1",
|
|
"teardown": ["$TC qdisc del dev $DEV1 root handle 1: drr"]
|
|
},
|
|
{
|
|
"id": "309e",
|
|
"name": "Test HFSC eltree double add with reentrant enqueue behaviour on netem",
|
|
"category": [
|
|
"qdisc",
|
|
"hfsc"
|
|
],
|
|
"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 1s",
|
|
"$TC qdisc add dev $DUMMY parent 1:0 handle 2:0 hfsc",
|
|
"ping -I $DUMMY -f -c10 -s48 -W0.001 10.10.11.1 || true",
|
|
"$TC class add dev $DUMMY parent 2:0 classid 2:1 hfsc rt m2 20Kbit",
|
|
"$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%",
|
|
"$TC class add dev $DUMMY parent 2:0 classid 2:2 hfsc rt m2 20Kbit",
|
|
"$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip dst 10.10.11.2/32 flowid 2:1",
|
|
"$TC filter add dev $DUMMY parent 2:0 protocol ip prio 2 u32 match ip dst 10.10.11.3/32 flowid 2:2",
|
|
"ping -c 1 10.10.11.2 -I$DUMMY > /dev/null || true",
|
|
"$TC filter del dev $DUMMY parent 2:0 protocol ip prio 1",
|
|
"$TC class del dev $DUMMY classid 2:1",
|
|
"ping -c 1 10.10.11.3 -I$DUMMY > /dev/null || true"
|
|
],
|
|
"cmdUnderTest": "$TC class change dev $DUMMY parent 2:0 classid 2:2 hfsc sc m2 20Kbit",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC -j class ls dev $DUMMY classid 2:1",
|
|
"matchJSON": [],
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1:0 root",
|
|
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
|
|
]
|
|
},
|
|
{
|
|
"id": "d74b",
|
|
"name": "Test use-after-free with DRR/NETEM/BLACKHOLE chain",
|
|
"category": [
|
|
"qdisc",
|
|
"hfsc",
|
|
"drr",
|
|
"netem",
|
|
"blackhole"
|
|
],
|
|
"plugins": {
|
|
"requires": [
|
|
"nsPlugin",
|
|
"scapyPlugin"
|
|
]
|
|
},
|
|
"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: drr",
|
|
"$TC filter add dev $DUMMY parent 1: basic classid 1:1",
|
|
"$TC class add dev $DUMMY parent 1: classid 1:1 drr",
|
|
"$TC qdisc add dev $DUMMY parent 1:1 handle 2: hfsc def 1",
|
|
"$TC class add dev $DUMMY parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0",
|
|
"$TC qdisc add dev $DUMMY parent 2:1 handle 3: netem",
|
|
"$TC qdisc add dev $DUMMY parent 3:1 handle 4: blackhole",
|
|
"ping -c1 -W0.01 -I $DUMMY 10.10.11.11 || true",
|
|
"$TC class del dev $DUMMY classid 1:1"
|
|
],
|
|
"cmdUnderTest": "ping -c1 -W0.01 -I $DUMMY 10.10.11.11",
|
|
"expExitCode": "1",
|
|
"verifyCmd": "$TC -j class ls dev $DUMMY classid 1:1",
|
|
"matchJSON": [],
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root handle 1: drr"
|
|
]
|
|
},
|
|
{
|
|
"id": "be28",
|
|
"name": "Try to add fq_codel qdisc as a child of an hhf qdisc",
|
|
"category": [
|
|
"qdisc",
|
|
"fq_codel",
|
|
"hhf"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$TC qdisc add dev $DUMMY root handle a: hhf"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel",
|
|
"expExitCode": "2",
|
|
"verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
|
|
"matchJSON": [],
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root"
|
|
]
|
|
},
|
|
{
|
|
"id": "fcb5",
|
|
"name": "Try to add pie qdisc as a child of a drr qdisc",
|
|
"category": [
|
|
"qdisc",
|
|
"pie",
|
|
"drr"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$TC qdisc add dev $DUMMY root handle a: drr"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie",
|
|
"expExitCode": "2",
|
|
"verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
|
|
"matchJSON": [],
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root"
|
|
]
|
|
},
|
|
{
|
|
"id": "7801",
|
|
"name": "Try to add fq qdisc as a child of an inexistent hfsc class",
|
|
"category": [
|
|
"qdisc",
|
|
"sfq",
|
|
"hfsc"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$TC qdisc add dev $DUMMY root handle a: hfsc"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4",
|
|
"expExitCode": "2",
|
|
"verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
|
|
"matchJSON": [],
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY root"
|
|
]
|
|
}
|
|
]
|