| [ |
| { |
| "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", |
| "scapyPlugin" |
| ] |
| }, |
| "setup": [ |
| "$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" |
| ], |
| "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 $IFB | grep -A 5 'qdisc fq_codel'", |
| "matchPattern": "dropped [1-9][0-9]*", |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $IFB root", |
| "$TC qdisc del dev $DEV1 ingress" |
| ] |
| }, |
| { |
| "id": "a4be", |
| "name": "Test FQ_CODEL with QFQ parent - force packet drop with empty queue", |
| "category": [ |
| "qdisc", |
| "fq_codel", |
| "qfq" |
| ], |
| "plugins": { |
| "requires": [ |
| "nsPlugin", |
| "scapyPlugin" |
| ] |
| }, |
| "setup": [ |
| "$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" |
| ], |
| "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 $IFB | grep -A 5 'qdisc fq_codel'", |
| "matchPattern": "dropped [1-9][0-9]*", |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $IFB root", |
| "$TC qdisc del dev $DEV1 ingress" |
| ] |
| }, |
| { |
| "id": "a4bf", |
| "name": "Test FQ_CODEL with HFSC parent - force packet drop with empty queue", |
| "category": [ |
| "qdisc", |
| "fq_codel", |
| "hfsc" |
| ], |
| "plugins": { |
| "requires": [ |
| "nsPlugin", |
| "scapyPlugin" |
| ] |
| }, |
| "setup": [ |
| "$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" |
| ], |
| "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 $IFB | grep -A 5 'qdisc fq_codel'", |
| "matchPattern": "dropped [1-9][0-9]*", |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $IFB root", |
| "$TC qdisc del dev $DEV1 ingress" |
| ] |
| }, |
| { |
| "id": "a4c0", |
| "name": "Test FQ_CODEL with DRR parent - force packet drop with empty queue", |
| "category": [ |
| "qdisc", |
| "fq_codel", |
| "drr" |
| ], |
| "plugins": { |
| "requires": [ |
| "nsPlugin", |
| "scapyPlugin" |
| ] |
| }, |
| "setup": [ |
| "$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" |
| ], |
| "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 $IFB | grep -A 5 'qdisc fq_codel'", |
| "matchPattern": "dropped [1-9][0-9]*", |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $IFB root", |
| "$TC qdisc del dev $DEV1 ingress" |
| ] |
| }, |
| { |
| "id": "a4c1", |
| "name": "Test FQ_CODEL with ETS parent - force packet drop with empty queue", |
| "category": [ |
| "qdisc", |
| "fq_codel", |
| "ets" |
| ], |
| "plugins": { |
| "requires": [ |
| "nsPlugin", |
| "scapyPlugin" |
| ] |
| }, |
| "setup": [ |
| "$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" |
| ], |
| "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 $IFB | grep -A 5 'qdisc fq_codel'", |
| "matchPattern": "dropped [1-9][0-9]*", |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $IFB root", |
| "$TC qdisc del dev $DEV1 ingress" |
| ] |
| }, |
| { |
| "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 0x1", |
| "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" |
| ] |
| }, |
| { |
| "id": "4989", |
| "name": "Try to add an fq child to an ingress qdisc", |
| "category": [ |
| "qdisc", |
| "ingress" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup": [ |
| "$TC qdisc add dev $DUMMY handle ffff:0 ingress" |
| ], |
| "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq", |
| "expExitCode": "2", |
| "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:", |
| "matchJSON": [], |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY ingress" |
| ] |
| }, |
| { |
| "id": "c2b0", |
| "name": "Try to add an fq child to a clsact qdisc", |
| "category": [ |
| "qdisc", |
| "ingress" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup": [ |
| "$TC qdisc add dev $DUMMY handle ffff:0 clsact" |
| ], |
| "cmdUnderTest": "$TC qdisc add dev $DUMMY parent ffff:0 handle ffe0:0 fq", |
| "expExitCode": "2", |
| "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle ffe0:", |
| "matchJSON": [], |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY clsact" |
| ] |
| }, |
| { |
| "id": "4366", |
| "name": "CAKE with QFQ Parent - CAKE enqueue with packets dropping", |
| "category": [ |
| "qdisc", |
| "cake", |
| "netem" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup":[ |
| "$TC qdisc add dev $DUMMY handle 1: root qfq", |
| "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 1024", |
| "$TC qdisc add dev $DUMMY parent 1:1 handle 2: cake memlimit 9", |
| "$TC filter add dev $DUMMY protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:1", |
| "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", |
| "$TC qdisc replace dev $DUMMY parent 1:1 handle 3: netem delay 0ms" |
| ], |
| "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s qdisc show dev $DUMMY", |
| "matchPattern": "qdisc qfq 1:", |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY handle 1: root" |
| ] |
| }, |
| { |
| "id": "6e4f", |
| "name": "Try to delete ets drr class' qdisc while still keeping it in the active list", |
| "category": [ |
| "qdisc", |
| "ets", |
| "tbf" |
| ], |
| "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: ets bands 2 strict 1", |
| "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s", |
| "$TC filter add dev $DUMMY parent 1: basic classid 1:2", |
| "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true", |
| "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2", |
| "$TC qdisc change dev $DUMMY root handle 1: ets bands 1 strict 1" |
| ], |
| "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11", |
| "expExitCode": "1", |
| "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root", |
| "matchJSON": [ |
| { |
| "kind": "ets", |
| "handle": "1:", |
| "bytes": 196, |
| "packets": 2 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY root handle 1:" |
| ] |
| }, |
| { |
| "id": "0b8f", |
| "name": "Try to add ets class to the active list twice", |
| "category": [ |
| "qdisc", |
| "ets", |
| "tbf" |
| ], |
| "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: ets bands 2 strict 1", |
| "$TC qdisc add dev $DUMMY parent 1:2 handle 20: tbf rate 8bit burst 100b latency 1s", |
| "$TC filter add dev $DUMMY parent 1: basic classid 1:2", |
| "ping -c2 -W0.01 -s 56 -I $DUMMY 10.10.11.11 || true", |
| "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 2", |
| "$TC qdisc change dev $DUMMY root handle 1: ets bands 2 strict 1" |
| ], |
| "cmdUnderTest": "ping -c1 -W0.01 -s 56 -I $DUMMY 10.10.11.11", |
| "expExitCode": "1", |
| "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY root", |
| "matchJSON": [ |
| { |
| "kind": "ets", |
| "handle": "1:", |
| "bytes": 98, |
| "packets": 1 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY root handle 1:" |
| ] |
| }, |
| { |
| "id": "a3d7", |
| "name": "HFSC with large m1 - no divide-by-zero on class reactivation", |
| "category": [ |
| "qdisc", |
| "hfsc" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup": [ |
| "$TC qdisc replace dev $DUMMY root handle 1: hfsc default 1", |
| "$TC class replace dev $DUMMY parent 1: classid 1:1 hfsc rt m1 32gbit d 1ms m2 0bit ls m1 32gbit d 1ms m2 0bit", |
| "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", |
| "sleep 1" |
| ], |
| "cmdUnderTest": "ping -I$DUMMY -f -c1 -s64 -W1 10.10.10.1 || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC qdisc show dev $DUMMY", |
| "matchPattern": "qdisc hfsc 1: root", |
| "matchCount": "1", |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY handle 1: root" |
| ] |
| }, |
| { |
| "id": "7a5f", |
| "name": "Force red to dequeue from its child's gso_skb with qfq leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "red", |
| "qfq" |
| ], |
| "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 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", |
| "$TC qdisc add dev $DUMMY parent 1: handle 2: red limit 757 min 16 max 24 avpkt 16", |
| "$TC qdisc add dev $DUMMY parent 2: handle 3: qfq", |
| "$TC class add dev $DUMMY classid 3:1 parent 3: qfq maxpkt 512 weight 1", |
| "$TC filter add dev $DUMMY parent 3: protocol ip prio 1 matchall classid 3:1 action ok" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", |
| "matchJSON": [ |
| { |
| "kind": "red", |
| "handle": "2:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY handle 1: root" |
| ] |
| }, |
| { |
| "id": "cdae", |
| "name": "Force sfb to dequeue from its child's gso_skb with qfq leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "sfb", |
| "qfq" |
| ], |
| "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 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", |
| "$TC qdisc add dev $DUMMY parent 1: handle 2: sfb", |
| "$TC qdisc add dev $DUMMY parent 2: handle 3: qfq", |
| "$TC class add dev $DUMMY classid 3:1 parent 3: qfq maxpkt 512 weight 1", |
| "$TC filter add dev $DUMMY parent 3: protocol ip prio 1 matchall classid 3:1 action ok" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", |
| "matchJSON": [ |
| { |
| "kind": "sfb", |
| "handle": "2:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY handle 1: root" |
| ] |
| }, |
| { |
| "id": "291d", |
| "name": "Force red to dequeue from its child's gso_skb with dualpi2 leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "red", |
| "dualpi2" |
| ], |
| "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 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", |
| "$TC qdisc add dev $DUMMY parent 1: handle 2: red limit 757 min 16 max 24 avpkt 16", |
| "$TC qdisc add dev $DUMMY parent 2: handle 3: dualpi2" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", |
| "matchJSON": [ |
| { |
| "kind": "red", |
| "handle": "2:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY handle 1: root" |
| ] |
| }, |
| { |
| "id": "9c6d", |
| "name": "Force sfb to dequeue from its child's gso_skb with dualpi2 leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "sfb", |
| "dualpi2" |
| ], |
| "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 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", |
| "$TC qdisc add dev $DUMMY parent 1: handle 2: sfb", |
| "$TC qdisc add dev $DUMMY parent 2: handle 3: dualpi2" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:", |
| "matchJSON": [ |
| { |
| "kind": "sfb", |
| "handle": "2:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY handle 1: root" |
| ] |
| }, |
| { |
| "id": "3a62", |
| "name": "Try to create a qlen underflow with QFQ/CBS", |
| "category": [ |
| "qdisc", |
| "qfq", |
| "cbs" |
| ], |
| "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: qfq", |
| "$TC class add dev $DUMMY classid 1:1 parent 1: qfq", |
| "$TC class add dev $DUMMY classid 1:2 parent 1: qfq", |
| "$TC qdisc add dev $DUMMY handle 2: parent 1:1 cbs", |
| "$TC qdisc add dev $DUMMY handle 3: parent 2: netem delay 5000000000", |
| "$TC filter add dev $DUMMY parent 1: prio 1 u32 match ip dst 10.10.10.1 classid 1:1 action ok", |
| "$TC filter add dev $DUMMY parent 1: prio 2 u32 match ip dst 10.10.10.2 classid 1:2 action ok", |
| "ping -c 1 10.10.10.1 -W0.01 -I$DUMMY || true", |
| "$IP l set $DUMMY down", |
| "$IP l set $DUMMY up", |
| "$TC qdisc replace dev $DUMMY handle 4: parent 2: pfifo" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.10.2 -W0.01 -I$DUMMY", |
| "expExitCode": "1", |
| "verifyCmd": "$TC -s -j qdisc ls dev $DUMMY parent 1:1", |
| "matchJSON": [ |
| { |
| "kind": "cbs", |
| "handle": "2:", |
| "bytes": 0, |
| "packets": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY handle 1: root" |
| ] |
| }, |
| { |
| "id": "c797", |
| "name": "Verify fq_codel won't mistakenly deactivate QFQ parent class during peek", |
| "category": [ |
| "qdisc", |
| "qfq", |
| "fq_codel" |
| ], |
| "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: qfq", |
| "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 1 maxpkt 1000", |
| "$TC class add dev $DUMMY parent 1: classid 1:2 qfq weight 1 maxpkt 1000", |
| "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024", |
| "$IP l set dev $DUMMY mtu 1500", |
| "$TC qdisc add dev $DUMMY parent 1:2 handle 10: fq_codel target 1 interval 1 flows 1", |
| "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1", |
| "$TC filter add dev $DUMMY parent 1: protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2", |
| "$IP l set dev $DUMMY mtu 65336", |
| "ping -c 1 -I $DUMMY 10.10.10.1 -W0.01 > /dev/null || true", |
| "ping -c 3 -s 2000 -I $DUMMY 10.10.10.2 -W0.01 > /dev/null || true", |
| "sleep 0.1" |
| ], |
| "cmdUnderTest": "$TC qdisc change dev $DUMMY handle 2:0 plug release_indefinite", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc show dev $DUMMY", |
| "matchJSON": [ |
| { |
| "kind": "qfq", |
| "handle": "1:", |
| "packets": 3, |
| "drops": 1, |
| "backlog": 0, |
| "qlen": 0 |
| }, |
| { |
| "kind": "plug", |
| "handle": "2:", |
| "packets": 1, |
| "drops": 0, |
| "backlog": 0, |
| "qlen": 0 |
| }, |
| { |
| "kind": "fq_codel", |
| "handle": "10:", |
| "packets": 2, |
| "drops": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY root", |
| "$IP addr del 10.10.10.10/24 dev $DUMMY || true" |
| ] |
| }, |
| { |
| "id": "82d9", |
| "name": "Verify codel won't mistakenly deactivate QFQ parent class during peek", |
| "category": [ |
| "qdisc", |
| "qfq", |
| "codel" |
| ], |
| "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: qfq", |
| "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 1 maxpkt 1000", |
| "$TC class add dev $DUMMY parent 1: classid 1:2 qfq weight 1 maxpkt 1000", |
| "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024", |
| "$IP l set dev $DUMMY mtu 1500", |
| "$TC qdisc add dev $DUMMY parent 1:2 handle 10: codel target 1ms interval 1ms", |
| "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1", |
| "$TC filter add dev $DUMMY parent 1: protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2", |
| "$IP l set dev $DUMMY mtu 65336", |
| "ping -c 1 -I $DUMMY 10.10.10.1 -W0.01 > /dev/null || true", |
| "ping -c 3 -s 2000 -I $DUMMY 10.10.10.2 -W0.01 > /dev/null || true", |
| "sleep 0.1" |
| ], |
| "cmdUnderTest": "$TC qdisc change dev $DUMMY handle 2:0 plug release_indefinite", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc show dev $DUMMY", |
| "matchJSON": [ |
| { |
| "kind": "qfq", |
| "handle": "1:", |
| "packets": 3, |
| "drops": 1, |
| "backlog": 0, |
| "qlen": 0 |
| }, |
| { |
| "kind": "plug", |
| "handle": "2:", |
| "packets": 1, |
| "drops": 0, |
| "backlog": 0, |
| "qlen": 0 |
| }, |
| { |
| "kind": "codel", |
| "handle": "10:", |
| "packets": 2, |
| "drops": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY root", |
| "$IP addr del 10.10.10.10/24 dev $DUMMY || true" |
| ] |
| }, |
| { |
| "id": "d3da", |
| "name": "Verify dualpi2 won't mistakenly deactivate QFQ parent class during peek", |
| "category": [ |
| "qdisc", |
| "qfq", |
| "dualpi2" |
| ], |
| "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: qfq", |
| "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 1 maxpkt 1000", |
| "$TC class add dev $DUMMY parent 1: classid 1:2 qfq weight 1 maxpkt 1000", |
| "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 plug limit 1024", |
| "$TC qdisc add dev $DUMMY parent 1:2 handle 10: dualpi2 step_thresh 500ms", |
| "$TC filter add dev $DUMMY parent 10: protocol ip prio 1 matchall classid 10:1 action ok", |
| "$TC filter add dev $DUMMY parent 1: protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1", |
| "$TC filter add dev $DUMMY parent 1: protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2", |
| "ping -c 1 -I $DUMMY 10.10.10.1 -W0.01 || true", |
| "ping -c 3 -i 0.1 -I $DUMMY 10.10.10.2 -W0.01 || true", |
| "sleep 0.7", |
| "ping -c 1 -I $DUMMY 10.10.10.2 -W0.01 || true", |
| "$TC qdisc change dev $DUMMY handle 2:0 plug release_indefinite" |
| ], |
| "cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 -W0.01", |
| "expExitCode": "1", |
| "verifyCmd": "$TC -s -j qdisc show dev $DUMMY", |
| "matchJSON": [ |
| { |
| "kind": "qfq", |
| "handle": "1:", |
| "packets": 4, |
| "drops": 2, |
| "backlog": 0, |
| "qlen": 0 |
| }, |
| { |
| "kind": "plug", |
| "handle": "2:", |
| "packets": 2, |
| "drops": 0, |
| "backlog": 0, |
| "qlen": 0 |
| }, |
| { |
| "kind": "dualpi2", |
| "handle": "10:", |
| "packets": 2, |
| "drops": 2, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $DUMMY root", |
| "$IP addr del 10.10.10.10/24 dev $DUMMY || true" |
| ] |
| }, |
| { |
| "id": "fb6c", |
| "name": "Force multiq to dequeue from its child's gso_skb with qfq leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "multiq", |
| "qfq" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup": [ |
| "echo \"1 1 4\" > /sys/bus/netdevsim/new_device", |
| "$IP link set dev $ETH up || true", |
| "$IP l set addr 01:02:03:04:05:06 dev $ETH || true", |
| "$IP n add dev $ETH 10.10.11.1 lladdr 01:02:03:04:05:06 dev $ETH || true", |
| "$IP addr add 10.10.11.10/24 dev $ETH || true", |
| "$TC qdisc add dev $ETH root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", |
| "$TC qdisc add dev $ETH parent 1: handle 2: multiq", |
| "$TC qdisc add dev $ETH parent 2:1 handle 3: qfq", |
| "$TC class add dev $ETH classid 3:1 parent 3: qfq maxpkt 512 weight 1", |
| "$TC filter add dev $ETH parent 2: protocol all prio 1 matchall action skbedit queue_mapping 0", |
| "$TC filter add dev $ETH parent 3: protocol all prio 1 matchall classid 3:1 action ok" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.11.1 -W0.01 -I$ETH || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc ls dev $ETH parent 1:", |
| "matchJSON": [ |
| { |
| "kind": "multiq", |
| "handle": "2:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $ETH handle 1: root", |
| "echo \"1\" > /sys/bus/netdevsim/del_device" |
| ] |
| }, |
| { |
| "id": "1922", |
| "name": "Force multiq to dequeue from its child's gso_skb with dualpi2 leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "multiq", |
| "dualpi2" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup": [ |
| "echo \"1 1 4\" > /sys/bus/netdevsim/new_device", |
| "$IP link set dev $ETH up || true", |
| "$IP l set addr 01:02:03:04:05:06 dev $ETH || true", |
| "$IP n add dev $ETH 10.10.11.1 lladdr 01:02:03:04:05:06 dev $ETH || true", |
| "$IP addr add 10.10.11.10/24 dev $ETH || true", |
| "$TC qdisc add dev $ETH root handle 1: tbf rate 88bit burst 1661b peakrate 2257333 minburst 1024 limit 7b", |
| "$TC qdisc add dev $ETH parent 1: handle 2: multiq", |
| "$TC qdisc add dev $ETH parent 2:1 handle 3: dualpi2", |
| "$TC filter add dev $ETH parent 2: protocol ip prio 1 u32 match ip dst 10.10.11.1 action skbedit queue_mapping 0", |
| "$TC filter add dev $ETH parent 3: protocol ip prio 1 u32 match ip dst 10.10.11.1 classid 3:1 action ok" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.11.1 -W0.01 -I$ETH || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -j -s qdisc ls dev $ETH handle 3:", |
| "matchJSON": [ |
| { |
| "kind": "dualpi2", |
| "handle": "3:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $ETH handle 1: root", |
| "echo \"1\" > /sys/bus/netdevsim/del_device" |
| ] |
| }, |
| { |
| "id": "476f", |
| "name": "Force taprio to dequeue from its child's gso_skb with qfq leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "multiq", |
| "qfq" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup": [ |
| "echo \"1 1 4\" > /sys/bus/netdevsim/new_device", |
| "$IP link set dev $ETH up || true", |
| "$IP l set addr 01:02:03:04:05:06 dev $ETH || true", |
| "$IP n add dev $ETH 10.10.11.1 lladdr 01:02:03:04:05:06 dev $ETH || true", |
| "$TC qdisc add dev $ETH root handle 1: taprio num_tc 2 map 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 queues 1@0 1@1 base-time 9000000000000000000 sched-entry S 03 200000 flags 0x0 clockid CLOCK_TAI", |
| "$TC qdisc add dev $ETH parent 1:1 handle 3: qfq", |
| "$TC class add dev $ETH classid 3:1 parent 3: qfq maxpkt 512 weight 1", |
| "$TC filter add dev $ETH parent 3: protocol all prio 1 matchall classid 3:1 action ok" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.11.1 -W0.01 -I$ETH || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -s -j qdisc ls dev $ETH", |
| "matchJSON": [ |
| { |
| "kind": "taprio", |
| "handle": "1:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $ETH handle 1: root", |
| "echo \"1\" > /sys/bus/netdevsim/del_device" |
| ] |
| }, |
| { |
| "id": "0235", |
| "name": "Force taprio to dequeue from its child's gso_skb with dualpi2 leaf", |
| "category": [ |
| "qdisc", |
| "tbf", |
| "taprio", |
| "dualpi2" |
| ], |
| "plugins": { |
| "requires": "nsPlugin" |
| }, |
| "setup": [ |
| "echo \"1 1 4\" > /sys/bus/netdevsim/new_device", |
| "$IP link set dev $ETH up || true", |
| "$IP l set addr 01:02:03:04:05:06 dev $ETH || true", |
| "$IP n add dev $ETH 10.10.11.1 lladdr 01:02:03:04:05:06 dev $ETH || true", |
| "$TC qdisc add dev $ETH root handle 1: taprio num_tc 2 map 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 queues 1@0 1@1 base-time 9000000000000000000 sched-entry S 03 200000 flags 0x0 clockid CLOCK_TAI", |
| "$TC qdisc replace dev $ETH parent 1:1 handle 3: dualpi2", |
| "$TC filter add dev $ETH parent 3: protocol ip prio 1 u32 match ip dst 10.10.11.1 classid 3:1 action ok" |
| ], |
| "cmdUnderTest": "ping -c 1 10.10.11.1 -W0.01 -I$ETH || true", |
| "expExitCode": "0", |
| "verifyCmd": "$TC -j -s qdisc ls dev $ETH handle 3:", |
| "matchJSON": [ |
| { |
| "kind": "dualpi2", |
| "handle": "3:", |
| "bytes": 98, |
| "packets": 1, |
| "backlog": 0, |
| "qlen": 0 |
| } |
| ], |
| "teardown": [ |
| "$TC qdisc del dev $ETH handle 1: root", |
| "echo \"1\" > /sys/bus/netdevsim/del_device" |
| ] |
| } |
| ] |