[
    {
        "id": "ba39",
        "name": "Add taprio Qdisc to multi-queue device (8 queues)",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device"
        ],
        "cmdUnderTest": "$TC qdisc add dev $ETH root handle 1: taprio num_tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@0 1@0 base-time 1000000000 sched-entry S 01 300000 flags 0x1 clockid CLOCK_TAI",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "qdisc taprio 1: root refcnt [0-9]+ tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2",
        "matchCount": "1",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "9462",
        "name": "Add taprio Qdisc with multiple sched-entry",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device"
        ],
        "cmdUnderTest": "$TC qdisc add dev $ETH root handle 1: taprio num_tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@0 1@0 base-time 1000000000 sched-entry S 01 300000 sched-entry S 03 300000 sched-entry S 04 400000 flags 0x1 clockid CLOCK_TAI",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "index [0-9]+ cmd S gatemask 0x[0-9]+ interval [0-9]+00000",
        "matchCount": "3",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "8d92",
        "name": "Add taprio Qdisc with txtime-delay",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device"
        ],
        "cmdUnderTest": "$TC qdisc add dev $ETH root handle 1: taprio num_tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@0 1@0 base-time 1000000000 sched-entry S 01 300000 flags 0x1 txtime-delay 500000 clockid CLOCK_TAI",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "clockid TAI flags 0x1 txtime delay 500000",
        "matchCount": "1",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "d092",
        "name": "Delete taprio Qdisc with valid handle",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device",
            "$TC qdisc add dev $ETH root handle 1: taprio num_tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@0 1@0 base-time 1000000000 sched-entry S 01 300000 flags 0x1 clockid CLOCK_TAI"
        ],
        "cmdUnderTest": "$TC qdisc del dev $ETH root handle 1:",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "qdisc taprio 1: root refcnt",
        "matchCount": "0",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "8471",
        "name": "Show taprio class",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device"
        ],
        "cmdUnderTest": "$TC qdisc add dev $ETH root handle 1: taprio num_tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@0 1@0 base-time 1000000000 sched-entry S 01 300000 flags 0x1 clockid CLOCK_TAI",
        "expExitCode": "0",
        "verifyCmd": "$TC class show dev $ETH",
        "matchPattern": "class taprio 1:[0-9]+ root",
        "matchCount": "8",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "0a85",
        "name": "Add taprio Qdisc to single-queue device",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1\" > /sys/bus/netdevsim/new_device"
        ],
        "cmdUnderTest": "$TC qdisc add dev $ETH root handle 1: taprio num_tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@0 1@0 base-time 1000000000 sched-entry S 01 300000 flags 0x1 clockid CLOCK_TAI",
        "expExitCode": "2",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "qdisc taprio 1: root refcnt",
        "matchCount": "0",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "6f62",
        "name": "Add taprio Qdisc with too short interval",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device"
        ],
        "cmdUnderTest": "$TC qdisc add dev $ETH root handle 1: taprio num_tc 2 queues 1@0 1@1 sched-entry S 01 300 sched-entry S 02 1700 clockid CLOCK_TAI",
        "expExitCode": "2",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "qdisc taprio 1: root refcnt",
        "matchCount": "0",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "831f",
        "name": "Add taprio Qdisc with too short cycle-time",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device"
        ],
        "cmdUnderTest": "$TC qdisc add dev $ETH root handle 1: taprio num_tc 2 queues 1@0 1@1 sched-entry S 01 200000 sched-entry S 02 200000 cycle-time 100 clockid CLOCK_TAI",
        "expExitCode": "2",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "qdisc taprio 1: root refcnt",
        "matchCount": "0",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "3e1e",
        "name": "Add taprio Qdisc with an invalid cycle-time",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device",
            "$TC qdisc add dev $ETH root handle 1: taprio num_tc 3 map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 queues 1@0 1@0 1@0 base-time 1000000000 sched-entry S 01 300000 flags 0x1 clockid CLOCK_TAI cycle-time 4294967296 || /bin/true",
            "$IP link set dev $ETH up",
            "$IP addr add 10.10.10.10/24 dev $ETH"
        ],
        "cmdUnderTest": "/bin/true",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $ETH",
        "matchPattern": "qdisc taprio 1: root refcnt",
        "matchCount": "0",
        "teardown": [
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "39b4",
        "name": "Reject grafting taprio as child qdisc of software taprio",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "dependsOn": "echo '' | jq",
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device",
            "$TC qdisc replace dev $ETH handle 8001: parent root stab overhead 24 taprio num_tc 8 map 0 1 2 3 4 5 6 7 queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 base-time 0 sched-entry S ff 20000000 clockid CLOCK_TAI",
            "./scripts/taprio_wait_for_admin.sh $TC $ETH"
        ],
        "cmdUnderTest": "$TC qdisc replace dev $ETH parent 8001:7 taprio num_tc 8 map 0 1 2 3 4 5 6 7 queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 base-time 200 sched-entry S ff 20000000 clockid CLOCK_TAI",
        "expExitCode": "2",
        "verifyCmd": "bash -c \"./scripts/taprio_wait_for_admin.sh $TC $ETH && $TC -j qdisc show dev $ETH root | jq '.[].options.base_time'\"",
        "matchPattern": "0",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $ETH root",
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "e8a1",
        "name": "Reject grafting taprio as child qdisc of offloaded taprio",
        "category": [
            "qdisc",
            "taprio"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "dependsOn": "echo '' | jq",
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device",
            "$TC qdisc replace dev $ETH handle 8001: parent root stab overhead 24 taprio num_tc 8 map 0 1 2 3 4 5 6 7 queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 base-time 0 sched-entry S ff 20000000 flags 0x2",
            "./scripts/taprio_wait_for_admin.sh $TC $ETH"
        ],
        "cmdUnderTest": "$TC qdisc replace dev $ETH parent 8001:7 taprio num_tc 8 map 0 1 2 3 4 5 6 7 queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 base-time 200 sched-entry S ff 20000000 flags 0x2",
        "expExitCode": "2",
        "verifyCmd": "bash -c \"./scripts/taprio_wait_for_admin.sh $TC $ETH && $TC -j qdisc show dev $ETH root | jq '.[].options.base_time'\"",
        "matchPattern": "0",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $ETH root",
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "a7bf",
        "name": "Graft cbs as child of software taprio",
        "category": [
            "qdisc",
            "taprio",
            "cbs"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device",
            "$TC qdisc replace dev $ETH handle 8001: parent root stab overhead 24 taprio num_tc 8 map 0 1 2 3 4 5 6 7 queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 base-time 0 sched-entry S ff 20000000 clockid CLOCK_TAI"
        ],
        "cmdUnderTest": "$TC qdisc replace dev $ETH handle 8002: parent 8001:8 cbs idleslope 20000 sendslope -980000 hicredit 30 locredit -1470",
        "expExitCode": "0",
        "verifyCmd": "$TC -d qdisc show dev $ETH",
        "matchPattern": "qdisc cbs 8002: parent 8001:8 hicredit 30 locredit -1470 sendslope -980000 idleslope 20000 offload 0",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $ETH root",
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    },
    {
        "id": "6a83",
        "name": "Graft cbs as child of offloaded taprio",
        "category": [
            "qdisc",
            "taprio",
            "cbs"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "echo \"1 1 8\" > /sys/bus/netdevsim/new_device",
            "$TC qdisc replace dev $ETH handle 8001: parent root stab overhead 24 taprio num_tc 8 map 0 1 2 3 4 5 6 7 queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 base-time 0 sched-entry S ff 20000000 flags 0x2"
        ],
        "cmdUnderTest": "$TC qdisc replace dev $ETH handle 8002: parent 8001:8 cbs idleslope 20000 sendslope -980000 hicredit 30 locredit -1470",
        "expExitCode": "0",
        "verifyCmd": "$TC -d qdisc show dev $ETH",
        "matchPattern": "qdisc cbs 8002: parent 8001:8 refcnt 2 hicredit 30 locredit -1470 sendslope -980000 idleslope 20000 offload 0",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $ETH root",
            "echo \"1\" > /sys/bus/netdevsim/del_device"
        ]
    }
]
