diff mbox series

[net-next] selftests: tc-testing: add mirred to block tdc tests

Message ID 20240202020726.529170-1-victor@mojatatu.com (mailing list archive)
State Accepted
Commit f51470c5c4a08d3e69f7c7891633b960aa6fe678
Delegated to: Netdev Maintainers
Headers show
Series [net-next] selftests: tc-testing: add mirred to block tdc tests | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 8 this patch: 8
netdev/build_tools success Errors and warnings before: 1 this patch: 0
netdev/cc_maintainers success CCed 0 of 0 maintainers
netdev/build_clang success Errors and warnings before: 8 this patch: 8
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 8 this patch: 8
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 401 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-02-09--00-00 (tests: 687)

Commit Message

Victor Nogueira Feb. 2, 2024, 2:07 a.m. UTC
Add 8 new mirred tdc tests that target mirred to block:

- Add mirred mirror to egress block action
- Add mirred mirror to ingress block action
- Add mirred redirect to egress block action
- Add mirred redirect to ingress block action
- Try to add mirred action with both dev and block
- Try to add mirred action without specifying neither dev nor block
- Replace mirred redirect to dev action with redirect to block
- Replace mirred redirect to block action with mirror to dev

Signed-off-by: Victor Nogueira <victor@mojatatu.com>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
---
 .../tc-testing/tc-tests/actions/mirred.json   | 396 ++++++++++++++++++
 1 file changed, 396 insertions(+)

Comments

Jakub Kicinski Feb. 3, 2024, 5 a.m. UTC | #1
On Thu,  1 Feb 2024 23:07:26 -0300 Victor Nogueira wrote:
> Add 8 new mirred tdc tests that target mirred to block:
> 
> - Add mirred mirror to egress block action
> - Add mirred mirror to ingress block action
> - Add mirred redirect to egress block action
> - Add mirred redirect to ingress block action
> - Try to add mirred action with both dev and block
> - Try to add mirred action without specifying neither dev nor block
> - Replace mirred redirect to dev action with redirect to block
> - Replace mirred redirect to block action with mirror to dev

I think this breaks the TDC runner.
I'll toss it from patchwork, I can revive it when TDC is fixed (or you
tell me that I'm wrong).
Victor Nogueira Feb. 3, 2024, 8:15 p.m. UTC | #2
On 03/02/2024 02:00, Jakub Kicinski wrote:
> On Thu,  1 Feb 2024 23:07:26 -0300 Victor Nogueira wrote:
>> Add 8 new mirred tdc tests that target mirred to block:
>>
>> - Add mirred mirror to egress block action
>> - Add mirred mirror to ingress block action
>> - Add mirred redirect to egress block action
>> - Add mirred redirect to ingress block action
>> - Try to add mirred action with both dev and block
>> - Try to add mirred action without specifying neither dev nor block
>> - Replace mirred redirect to dev action with redirect to block
>> - Replace mirred redirect to block action with mirror to dev
> 
> I think this breaks the TDC runner.
> I'll toss it from patchwork, I can revive it when TDC is fixed (or you
> tell me that I'm wrong).

Oh, I think you caught an issue with the process.
The executor was using the release iproute2 instead of iproute2-next,
which I tested on. I'm wondering if other tests in nipa are using
iproute2-next or release iproute2. The issue only arises if you have
patches in net-next that are not in the release iproute2. We will fix
the executor shortly.
cheers,
Victor
Jakub Kicinski Feb. 4, 2024, 4:33 p.m. UTC | #3
On Sat, 3 Feb 2024 17:15:32 -0300 Victor Nogueira wrote:
> > I think this breaks the TDC runner.
> > I'll toss it from patchwork, I can revive it when TDC is fixed (or you
> > tell me that I'm wrong).  
> 
> Oh, I think you caught an issue with the process.
> The executor was using the release iproute2 instead of iproute2-next,
> which I tested on. I'm wondering if other tests in nipa are using
> iproute2-next or release iproute2. The issue only arises if you have
> patches in net-next that are not in the release iproute2. We will fix
> the executor shortly.

We merge iproute2 into iprout2-next locally and build the combined
thing, FWIW. I haven't solved the problem of pending patches, yet,
tho :( If the iproute2-next patches are just on the list but not
merged the new tests will fail.
Victor Nogueira Feb. 5, 2024, 4:28 p.m. UTC | #4
On 04/02/2024 13:33, Jakub Kicinski wrote:
> On Sat, 3 Feb 2024 17:15:32 -0300 Victor Nogueira wrote:
>>> I think this breaks the TDC runner.
>>> I'll toss it from patchwork, I can revive it when TDC is fixed (or you
>>> tell me that I'm wrong).
>>
>> Oh, I think you caught an issue with the process.
>> The executor was using the release iproute2 instead of iproute2-next,
>> which I tested on. I'm wondering if other tests in nipa are using
>> iproute2-next or release iproute2. The issue only arises if you have
>> patches in net-next that are not in the release iproute2. We will fix
>> the executor shortly.
> 
> We merge iproute2 into iprout2-next locally and build the combined
> thing, FWIW. I haven't solved the problem of pending patches, yet,
> tho :( If the iproute2-next patches are just on the list but not
> merged the new tests will fail.

In this case both were merged into -next trees. It's just the executor
that needed fixing.
For features merged into net-next but not yet in iproute2-next perhaps
nipa can be used to catch such issues?
Should I resend the patch now that the executor is fixed?
Jakub Kicinski Feb. 6, 2024, 3:59 p.m. UTC | #5
On Mon, 5 Feb 2024 13:28:22 -0300 Victor Nogueira wrote:
> > We merge iproute2 into iprout2-next locally and build the combined
> > thing, FWIW. I haven't solved the problem of pending patches, yet,
> > tho :( If the iproute2-next patches are just on the list but not
> > merged the new tests will fail.  
> 
> In this case both were merged into -next trees. It's just the executor
> that needed fixing.
> For features merged into net-next but not yet in iproute2-next perhaps
> nipa can be used to catch such issues?
> Should I resend the patch now that the executor is fixed?

Sorry for the delay, I spent too much time migrating workers yesterday
to look at the list.

No need to resend, I'll revive it in patchwork. At least for now contest
keeps retesting the patches so we'll see in ~4h if all is good now.

About catching iproute - yes, we could so something similar to what we
do with netdev patches. Gather everything up from the list. Do basic
sanity checking of the patches. And make a "testing" version of
iproute2. A matter of having the time to do it :( Maybe the iproute2
maintainers would be willing to help?... :)
patchwork-bot+netdevbpf@kernel.org Feb. 9, 2024, 8:40 p.m. UTC | #6
Hello:

This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Thu,  1 Feb 2024 23:07:26 -0300 you wrote:
> Add 8 new mirred tdc tests that target mirred to block:
> 
> - Add mirred mirror to egress block action
> - Add mirred mirror to ingress block action
> - Add mirred redirect to egress block action
> - Add mirred redirect to ingress block action
> - Try to add mirred action with both dev and block
> - Try to add mirred action without specifying neither dev nor block
> - Replace mirred redirect to dev action with redirect to block
> - Replace mirred redirect to block action with mirror to dev
> 
> [...]

Here is the summary with links:
  - [net-next] selftests: tc-testing: add mirred to block tdc tests
    https://git.kernel.org/netdev/net-next/c/f51470c5c4a0

You are awesome, thank you!
Naresh Kamboju Feb. 28, 2024, 4:49 p.m. UTC | #7
LKFT tests running kselftests tc-testing noticing following run time errors
on Linux next master branch.

Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>

This is started from Linux next-20240212 with following commit,

f51470c5c4a0 selftests: tc-testing: add mirred to block tdc tests

Run log errors:
----------
# Test e684: Delete batch of 32 mirred mirror ingress actions
# multiprocessing.pool.RemoteTraceback: 
# """
# Traceback (most recent call last):
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 142, in call_pre_case
#     pgn_inst.pre_case(caseinfo, test_skip)
#   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 63, in pre_case
#     self.prepare_test(test)
#   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 36, in prepare_test
#     self._nl_ns_create()
#   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 130, in _nl_ns_create
#     ip.link('add', ifname=dev1, kind='veth', peer={'ifname': dev0, 'net_ns_fd':'/proc/1/ns/net'})
#   File "/usr/lib/python3/dist-packages/pyroute2/iproute/linux.py", line 1593, in link
#     ret = self.nlm_request(msg, msg_type=msg_type, msg_flags=msg_flags)
#           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 403, in nlm_request
#     return tuple(self._genlm_request(*argv, **kwarg))
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 985, in nlm_request
#     for msg in self.get(
#                ^^^^^^^^^
#   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 406, in get
#     return tuple(self._genlm_get(*argv, **kwarg))
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 770, in get
#     raise msg['header']['error']
# pyroute2.netlink.exceptions.NetlinkError: (34, 'Numerical result out of range')
# 
# During handling of the above exception, another exception occurred:
# 
# Traceback (most recent call last):
#   File "/usr/lib/python3.11/multiprocessing/pool.py", line 125, in worker
#     result = (True, func(*args, **kwds))
#                     ^^^^^^^^^^^^^^^^^^^
#   File "/usr/lib/python3.11/multiprocessing/pool.py", line 48, in mapstar
#     return list(map(*args))
#            ^^^^^^^^^^^^^^^^
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 602, in __mp_runner
#     (_, tsr) = test_runner(mp_pm, mp_args, tests)
#                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 536, in test_runner
#     res = run_one_test(pm, args, index, tidx)
#           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 419, in run_one_test
#     pm.call_pre_case(tidx)
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 146, in call_pre_case
#     print('test_ordinal is {}'.format(test_ordinal))
#                                       ^^^^^^^^^^^^
# NameError: name 'test_ordinal' is not defined
# """
# 
# The above exception was the direct cause of the following exception:
# 
# Traceback (most recent call last):
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 1028, in <module>
#     main()
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 1022, in main
#     set_operation_mode(pm, parser, args, remaining)
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 964, in set_operation_mode
#     catresults = test_runner_mp(pm, args, alltests)
#                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 624, in test_runner_mp
#     pres = p.map(__mp_runner, batches)
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/usr/lib/python3.11/multiprocessing/pool.py", line 367, in map
#     return self._map_async(func, iterable, mapstar, chunksize).get()
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#   File "/usr/lib/python3.11/multiprocessing/pool.py", line 774, in get
#     raise self._value
# NameError: name 'test_ordinal' is not defined
not ok 1 selftests: tc-testing: tdc.sh # exit=1


--
Linaro LKFT
https://lkft.linaro.org
Victor Nogueira Feb. 28, 2024, 5:35 p.m. UTC | #8
On 28/02/2024 13:49, Naresh Kamboju wrote:
> LKFT tests running kselftests tc-testing noticing following run time errors
> on Linux next master branch.
> 
> Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
> 
> This is started from Linux next-20240212 with following commit,
> 
> f51470c5c4a0 selftests: tc-testing: add mirred to block tdc tests
> 
> Run log errors:
> ----------
> # Test e684: Delete batch of 32 mirred mirror ingress actions
> # multiprocessing.pool.RemoteTraceback:
> # """
> # Traceback (most recent call last):
> #   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 142, in call_pre_case
> #     pgn_inst.pre_case(caseinfo, test_skip)
> #   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 63, in pre_case
> #     self.prepare_test(test)
> #   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 36, in prepare_test
> #     self._nl_ns_create()
> #   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 130, in _nl_ns_create
> #     ip.link('add', ifname=dev1, kind='veth', peer={'ifname': dev0, 'net_ns_fd':'/proc/1/ns/net'})
> #   File "/usr/lib/python3/dist-packages/pyroute2/iproute/linux.py", line 1593, in link
> #     ret = self.nlm_request(msg, msg_type=msg_type, msg_flags=msg_flags)
> #           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 403, in nlm_request
> #     return tuple(self._genlm_request(*argv, **kwarg))
> #            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 985, in nlm_request
> #     for msg in self.get(
> #                ^^^^^^^^^
> #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 406, in get
> #     return tuple(self._genlm_get(*argv, **kwarg))
> #            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 770, in get
> #     raise msg['header']['error']
> # pyroute2.netlink.exceptions.NetlinkError: (34, 'Numerical result out of range')

It looks like the ip link add command is returning ERANGE.
We have tested this in NIPA for sometime with 64-bit and this is the 
first time
we are seeing this:

https://github.com/p4tc-dev/tc-executor/tree/storage/artifacts/485544

Could you give us more information on how to reproduce this?

Note: This doesn't seem to be related to the patches in question.
Seems to be a generic thing with nsPlugin itself.

Thanks,
Victor
Naresh Kamboju Feb. 28, 2024, 8:35 p.m. UTC | #9
Hi Victor,

On Wed, 28 Feb 2024 at 23:05, Victor Nogueira <victor@mojatatu.com> wrote:
>
> On 28/02/2024 13:49, Naresh Kamboju wrote:
> > LKFT tests running kselftests tc-testing noticing following run time errors
> > on Linux next master branch.
> >
> > Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
> >
> > This is started from Linux next-20240212 with following commit,
> >
> > f51470c5c4a0 selftests: tc-testing: add mirred to block tdc tests
> >
> > Run log errors:
> > ----------
> > # Test e684: Delete batch of 32 mirred mirror ingress actions
> > # multiprocessing.pool.RemoteTraceback:
> > # """
> > # Traceback (most recent call last):
> > #   File "/opt/kselftests/default-in-kernel/tc-testing/./tdc.py", line 142, in call_pre_case
> > #     pgn_inst.pre_case(caseinfo, test_skip)
> > #   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 63, in pre_case
> > #     self.prepare_test(test)
> > #   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 36, in prepare_test
> > #     self._nl_ns_create()
> > #   File "/opt/kselftests/default-in-kernel/tc-testing/plugin-lib/nsPlugin.py", line 130, in _nl_ns_create
> > #     ip.link('add', ifname=dev1, kind='veth', peer={'ifname': dev0, 'net_ns_fd':'/proc/1/ns/net'})
> > #   File "/usr/lib/python3/dist-packages/pyroute2/iproute/linux.py", line 1593, in link
> > #     ret = self.nlm_request(msg, msg_type=msg_type, msg_flags=msg_flags)
> > #           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 403, in nlm_request
> > #     return tuple(self._genlm_request(*argv, **kwarg))
> > #            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 985, in nlm_request
> > #     for msg in self.get(
> > #                ^^^^^^^^^
> > #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 406, in get
> > #     return tuple(self._genlm_get(*argv, **kwarg))
> > #            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > #   File "/usr/lib/python3/dist-packages/pyroute2/netlink/nlsocket.py", line 770, in get
> > #     raise msg['header']['error']
> > # pyroute2.netlink.exceptions.NetlinkError: (34, 'Numerical result out of range')
>
> It looks like the ip link add command is returning ERANGE.
> We have tested this in NIPA for sometime with 64-bit and this is the
> first time
> we are seeing this:
>
> https://github.com/p4tc-dev/tc-executor/tree/storage/artifacts/485544
>
> Could you give us more information on how to reproduce this?

Steps to reproduce:
-------------

# To install tuxrun to your home directory at ~/.local/bin:
# pip3 install -U  \
  --user tuxrun==0.62.2
#
# Or install a deb/rpm depending on the running distribution
# See https://tuxmake.org/install-deb/ or
# https://tuxmake.org/install-rpm/
#
# See https://tuxrun.org/ for complete documentation.
#
# Please follow the additional instructions if the tests are related to FVP:
# https://tuxrun.org/run-fvp/
#

tuxrun  \
  --runtime podman  \
  --device qemu-x86_64  \
  --boot-args rw  \
  --kernel https://storage.tuxsuite.com/public/linaro/lkft/builds/2czN3tP1CXUNgatiVGk7ANylgIu/bzImage
 \
  --rootfs https://storage.tuxboot.com/debian/bookworm/amd64/rootfs.ext4.xz  \
  --modules https://storage.tuxsuite.com/public/linaro/lkft/builds/2czN3tP1CXUNgatiVGk7ANylgIu/modules.tar.xz
 \
  --parameters SKIPFILE=skipfile-lkft.yaml  \
  --parameters KSELFTEST=https://storage.tuxsuite.com/public/linaro/lkft/builds/2czN3tP1CXUNgatiVGk7ANylgIu/kselftest.tar.xz
 \
  --image docker.io/linaro/tuxrun-dispatcher:v0.62.2  \
  --tests kselftest-tc-testing  \
  --timeouts boot=15 kselftest-tc-testing=20


Links,
 - https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2czN6g0MY3kgnwGYHadaUQHfPOU
 - https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2czN6g0MY3kgnwGYHadaUQHfPOU/reproducer


>
> Note: This doesn't seem to be related to the patches in question.
> Seems to be a generic thing with nsPlugin itself.
>
> Thanks,
> Victor
diff mbox series

Patch

diff --git a/tools/testing/selftests/tc-testing/tc-tests/actions/mirred.json b/tools/testing/selftests/tc-testing/tc-tests/actions/mirred.json
index b53d12909962..795cf1ce8af0 100644
--- a/tools/testing/selftests/tc-testing/tc-tests/actions/mirred.json
+++ b/tools/testing/selftests/tc-testing/tc-tests/actions/mirred.json
@@ -649,5 +649,401 @@ 
         "teardown": [
             "$TC actions flush action mirred"
         ]
+    },
+    {
+        "id": "456d",
+        "name": "Add mirred mirror to egress block action",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 egress_block 21 clsact",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action mirred egress mirror index 1 blockid 21",
+        "expExitCode": "0",
+        "verifyCmd": "$TC -j actions get action mirred index 1",
+        "matchJSON": [
+            {
+                "total acts": 0
+            },
+            {
+                "actions": [
+                    {
+                        "order": 1,
+                        "kind": "mirred",
+                        "mirred_action": "mirror",
+                        "direction": "egress",
+                        "to_blockid": 21,
+                        "control_action": {
+                            "type": "pipe"
+                        },
+                        "index": 1,
+                        "ref": 1,
+                        "bind": 0,
+                        "not_in_hw": true
+                    }
+                ]
+            }
+        ],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 egress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
+    },
+    {
+        "id": "2358",
+        "name": "Add mirred mirror to ingress block action",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 ingress_block 21 clsact",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action mirred ingress mirror index 1 blockid 21",
+        "expExitCode": "0",
+        "verifyCmd": "$TC -j actions get action mirred index 1",
+        "matchJSON": [
+            {
+                "total acts": 0
+            },
+            {
+                "actions": [
+                    {
+                        "order": 1,
+                        "kind": "mirred",
+                        "mirred_action": "mirror",
+                        "direction": "ingress",
+                        "to_blockid": 21,
+                        "control_action": {
+                            "type": "pipe"
+                        },
+                        "index": 1,
+                        "ref": 1,
+                        "bind": 0,
+                        "not_in_hw": true
+                    }
+                ]
+            }
+        ],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 ingress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
+    },
+    {
+        "id": "fdb1",
+        "name": "Add mirred redirect to egress block action",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 ingress_block 21 clsact",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action mirred egress redirect index 1 blockid 21",
+        "expExitCode": "0",
+        "verifyCmd": "$TC -j actions get action mirred index 1",
+        "matchJSON": [
+            {
+                "total acts": 0
+            },
+            {
+                "actions": [
+                    {
+                        "order": 1,
+                        "kind": "mirred",
+                        "mirred_action": "redirect",
+                        "direction": "egress",
+                        "to_blockid": 21,
+                        "control_action": {
+                            "type": "stolen"
+                        },
+                        "index": 1,
+                        "ref": 1,
+                        "bind": 0,
+                        "not_in_hw": true
+                    }
+                ]
+            }
+        ],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 ingress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
+    },
+    {
+        "id": "20cc",
+        "name": "Add mirred redirect to ingress block action",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 ingress_block 21 clsact",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action mirred ingress redirect index 1 blockid 21",
+        "expExitCode": "0",
+        "verifyCmd": "$TC -j actions get action mirred index 1",
+        "matchJSON": [
+            {
+                "total acts": 0
+            },
+            {
+                "actions": [
+                    {
+                        "order": 1,
+                        "kind": "mirred",
+                        "mirred_action": "redirect",
+                        "direction": "ingress",
+                        "to_blockid": 21,
+                        "control_action": {
+                            "type": "stolen"
+                        },
+                        "index": 1,
+                        "ref": 1,
+                        "bind": 0,
+                        "not_in_hw": true
+                    }
+                ]
+            }
+        ],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 ingress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
+    },
+    {
+        "id": "e739",
+        "name": "Try to add mirred action with both dev and block",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 ingress_block 21 clsact",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action mirred ingress redirect index 1 blockid 21 dev $DEV1",
+        "expExitCode": "255",
+        "verifyCmd": "$TC -j actions list action mirred",
+        "matchJSON": [],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 ingress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
+    },
+    {
+        "id": "2f47",
+        "name": "Try to add mirred action without specifying neither dev nor block",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 ingress_block 21 clsact",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions add action mirred ingress redirect index 1",
+        "expExitCode": "255",
+        "verifyCmd": "$TC -j actions list action mirred",
+        "matchJSON": [],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 ingress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
+    },
+    {
+        "id": "3188",
+        "name": "Replace mirred redirect to dev action with redirect to block",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 ingress_block 21 clsact",
+                0
+            ],
+            [
+                "$TC actions add action mirred ingress redirect index 1 dev $DEV1",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions replace action mirred egress redirect index 1 blockid 21",
+        "expExitCode": "0",
+        "verifyCmd": "$TC -j actions get action mirred index 1",
+        "matchJSON": [
+            {
+                "total acts": 0
+            },
+            {
+                "actions": [
+                    {
+                        "order": 1,
+                        "kind": "mirred",
+                        "mirred_action": "redirect",
+                        "direction": "egress",
+                        "to_blockid": 21,
+                        "control_action": {
+                            "type": "stolen"
+                        },
+                        "index": 1,
+                        "ref": 1,
+                        "bind": 0,
+                        "not_in_hw": true
+                    }
+                ]
+            }
+        ],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 ingress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
+    },
+    {
+        "id": "83cc",
+        "name": "Replace mirred redirect to block action with mirror to dev",
+        "category": [
+            "actions",
+            "mirred"
+        ],
+        "plugins": {
+            "requires": "nsPlugin"
+        },
+        "setup": [
+            [
+                "$TC actions flush action mirred",
+                0,
+                1,
+                255
+            ],
+            [
+                "$TC qdisc add dev $DEV1 ingress_block 21 clsact",
+                0
+            ],
+            [
+                "$TC actions add action mirred egress redirect index 1 blockid 21",
+                0
+            ]
+        ],
+        "cmdUnderTest": "$TC actions replace action mirred ingress mirror index 1 dev lo",
+        "expExitCode": "0",
+        "verifyCmd": "$TC -j actions get action mirred index 1",
+        "matchJSON": [
+            {
+                "total acts": 0
+            },
+            {
+                "actions": [
+                    {
+                        "order": 1,
+                        "kind": "mirred",
+                        "mirred_action": "mirror",
+                        "direction": "ingress",
+                        "to_dev": "lo",
+                        "control_action": {
+                            "type": "pipe"
+                        },
+                        "index": 1,
+                        "ref": 1,
+                        "bind": 0,
+                        "not_in_hw": true
+                    }
+                ]
+            }
+        ],
+        "matchCount": "1",
+        "teardown": [
+            "$TC qdisc del dev $DEV1 ingress_block 21 clsact",
+            "$TC actions flush action mirred"
+        ]
     }
 ]