blob: 23a61e5b99d0243eeeee96ccce69412618bf2fde [file] [log] [blame]
[
{
"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"
]
}
]