| [ |
| { |
| "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": "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" |
| ] |
| } |
| ] |