[
    {
        "id": "e122",
        "name": "Add route filter with from and to tag",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress"
        ],
        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 100 route from 1 to 10 classid 1:10",
        "expExitCode": "0",
        "verifyCmd": "$TC filter ls dev $DEV1 parent ffff:",
        "matchPattern": "flowid 1:10 to 10 from 1",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "6573",
        "name": "Add route filter with fromif and to tag",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress"
        ],
        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 100 route fromif $DEV1 to 10 classid 1:10",
        "expExitCode": "0",
        "verifyCmd": "$TC filter ls dev $DEV1 parent ffff:",
        "matchPattern": "flowid 1:10 to 10 fromif",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "1362",
        "name": "Add route filter with to flag and reclassify action",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress"
        ],
        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 2 route to 10 classid 1:20 action reclassify",
        "expExitCode": "0",
        "verifyCmd": "$TC filter ls dev $DEV1 parent ffff:",
        "matchPattern": "filter protocol ip pref.*route chain [0-9]+.*flowid 1:20 to 10.*action order [0-9]+: gact action reclassify",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "4720",
        "name": "Add route filter with from flag and continue actions",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress"
        ],
        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 2 route from 10 classid 1:100 action continue",
        "expExitCode": "0",
        "verifyCmd": "$TC filter ls dev $DEV1 parent ffff:",
        "matchPattern": "filter protocol ip pref.*route chain [0-9]+.*flowid 1:100 from 10.*action continue",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "2812",
        "name": "Add route filter with form tag and pipe action",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress"
        ],
        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 2 route from 10 to 2 classid 1:1 action pipe",
        "expExitCode": "0",
        "verifyCmd": "$TC filter ls dev $DEV1 parent ffff:",
        "matchPattern": "filter protocol ip pref.*route chain [0-9]+.*flowid 1:1 to 2 from 10.*action pipe",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "7994",
        "name": "Add route filter with miltiple actions",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress"
        ],
        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 2 route from 10 to 2 classid 1:1 action skbedit mark 7 pipe action gact drop",
        "expExitCode": "0",
        "verifyCmd": "$TC filter ls dev $DEV1 parent ffff:",
        "matchPattern": "filter protocol ip pref.*route chain [0-9]+.*flowid 1:1 to 2 from 10.*action order [0-9]+: skbedit  mark 7 pipe.*action order [0-9]+: gact action drop",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "4312",
        "name": "List route filters",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress",
            "$TC filter add dev $DEV1 parent ffff: protocol ip prio 2 route from 10 to 2 classid 1:1 action pipe",
            "$TC filter add dev $DEV1 parent ffff: protocol ip prio 2 route from 20 to 1 classid 1:20 action pipe"
        ],
        "cmdUnderTest": "$TC filter show dev $DEV1 parent ffff:",
        "expExitCode": "0",
        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
        "matchPattern": "action order [0-9]+: gact action pipe",
        "matchCount": "2",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "2634",
        "name": "Delete route filter with pipe action",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 ingress",
            "$TC filter add dev $DEV1 parent ffff: protocol ip prio 2 route from 10 to 2 classid 1:1 action pipe"
        ],
        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: protocol ip prio 2 route from 10 to 2 classid 1:1 action pipe",
        "expExitCode": "0",
        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
        "matchPattern": "filter protocol ip pref.*route chain [0-9]+.*flowid 1:1 to 2 from 10.*action pipe",
        "matchCount": "0",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress"
        ]
    },
    {
        "id": "b042",
        "name": "Try to delete class referenced by route after a replace",
        "category": [
            "filter",
            "route"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DEV1 parent root handle 10: drr",
            "$TC class add dev $DEV1 parent root classid 1 drr",
            "$TC filter add dev $DEV1 parent 10: prio 1 route from 10 classid 10:1 action ok",
            "$TC filter replace dev $DEV1 parent 10: prio 1 route from 5 classid 10:1 action drop"
        ],
        "cmdUnderTest": "$TC class delete dev $DEV1 parent 10: classid 10:1",
        "expExitCode": "2",
        "verifyCmd": "$TC class show dev $DEV1",
        "matchPattern": "class drr 10:1",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 parent root drr"
        ]
    }
]
