[ { "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 qdisc add dev $DUMMY parent 1:2 handle 3:0 netem duplicate 100%", "$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": 392, "packets": 4 } ], "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" ] } ]