Re: [patch net-next] net: sched: move block device tracking into tcf_block_get/put_ext()

Jamal Hadi Salim
2024-01-06T11:50:04Z

[-- Attachment #1: Type: text/plain, Size: 42348 bytes --]

On Sat, Jan 6, 2024 at 6:14 AM Jiri Pirko <jiri@resnulli.us> wrote:
>
> Fri, Jan 05, 2024 at 12:51:04PM CET, pctammela@mojatatu.com wrote:
> >On 05/01/2024 08:24, Jiri Pirko wrote:
> >> Thu, Jan 04, 2024 at 07:22:48PM CET, jhs@mojatatu.com wrote:
> >> > On Thu, Jan 4, 2024 at 1:03 PM Jiri Pirko <jiri@resnulli.us> wrote:
> >> > >
> >> > > Thu, Jan 04, 2024 at 05:10:58PM CET, jhs@mojatatu.com wrote:
> >> > > > On Thu, Jan 4, 2024 at 7:58 AM Jiri Pirko <jiri@resnulli.us> wrote:
> >> > > > >
> >> > > > > From: Jiri Pirko <jiri@nvidia.com>
> >> > > > >
> >> > > > > Inserting the device to block xarray in qdisc_create() is not suitable
> >> > > > > place to do this. As it requires use of tcf_block() callback, it causes
> >> > > > > multiple issues. It is called for all qdisc types, which is incorrect.
> >> > > > >
> >> > > > > So, instead, move it to more suitable place, which is tcf_block_get_ext()
> >> > > > > and make sure it is only done for qdiscs that use block infrastructure
> >> > > > > and also only for blocks which are shared.
> >> > > > >
> >> > > > > Symmetrically, alter the cleanup path, move the xarray entry removal
> >> > > > > into tcf_block_put_ext().
> >> > > > >
> >> > > > > Fixes: 913b47d3424e ("net/sched: Introduce tc block netdev tracking infra")
> >> > > > > Reported-by: Ido Schimmel <idosch@nvidia.com>
> >> > > > > Closes: https://lore.kernel.org/all/ZY1hBb8GFwycfgvd@shredder/
> >> > > > > Reported-by: Kui-Feng Lee <sinquersw@gmail.com>
> >> > > > > Closes: https://lore.kernel.org/all/ce8d3e55-b8bc-409c-ace9-5cf1c4f7c88e@gmail.com/
> >> > > > > Reported-and-tested-by: syzbot+84339b9e7330daae4d66@syzkaller.appspotmail.com
> >> > > > > Closes: https://lore.kernel.org/all/0000000000007c85f5060dcc3a28@google.com/
> >> > > > > Reported-and-tested-by: syzbot+806b0572c8d06b66b234@syzkaller.appspotmail.com
> >> > > > > Closes: https://lore.kernel.org/all/00000000000082f2f2060dcc3a92@google.com/
> >> > > > > Reported-and-tested-by: syzbot+0039110f932d438130f9@syzkaller.appspotmail.com
> >> > > > > Closes: https://lore.kernel.org/all/0000000000007fbc8c060dcc3a5c@google.com/
> >> > > > > Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> >> > > >
> >> > > > Did you get a chance to run the tdc tests?
> >> > >
> >> > > I ran the TC ones we have in the net/forwarding directory.
> >> > > I didn't manage to run the tdc. Readme didn't help me much.
> >> > > How do you run the suite?
> >> >
> >> > For next time:
> >> > make -C tools/testing/selftests TARGETS=tc-testing run_tests
> >>
> >> Unrelated to this patch.
> >>
> >> Running this, I'm getting lots of errors, some seem might be bugs in
> >> tests. Here's the output:
> >>
> >> make: Entering directory '/mnt/share156/jiri/net-next/tools/testing/selftests'
> >> make[1]: Entering directory '/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing'
> >> make[1]: Nothing to be done for 'all'.
> >> make[1]: Leaving directory '/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing'
> >> make[1]: Entering directory '/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing'
> >> TAP version 13
> >> 1..1
> >> # timeout set to 900
> >> # selftests: tc-testing: tdc.sh
> >> # netdevsim
> >> # act_bpf
> >> # act_connmark
> >> # act_csum
> >> # act_ct
> >> # act_ctinfo
> >> # act_gact
> >> # act_gate
> >> # act_mirred
> >> # act_mpls
> >> # act_nat
> >> # act_pedit
> >> # act_police
> >> # act_sample
> >> # act_simple
> >> # act_skbedit
> >> # act_skbmod
> >> # act_tunnel_key
> >> # act_vlan
> >> # cls_basic
> >> # cls_bpf
> >> # cls_cgroup
> >> # cls_flow
> >> # cls_flower
> >> # cls_fw
> >> # cls_matchall
> >> # cls_route
> >> # cls_u32
> >> # Module em_canid not found... skipping.
> >> # em_cmp
> >> # em_ipset
> >> # em_ipt
> >> # em_meta
> >> # em_nbyte
> >> # em_text
> >> # em_u32
> >> # sch_cake
> >> # sch_cbs
> >> # sch_choke
> >> # sch_codel
> >> # sch_drr
> >> # sch_etf
> >> # sch_ets
> >> # sch_fq
> >> # sch_fq_codel
> >> # sch_fq_pie
> >> # sch_gred
> >> # sch_hfsc
> >> # sch_hhf
> >> # sch_htb
> >> # sch_teql
> >> # considering category actions
> >> # !!! Consider installing pyroute2 !!!
> >> # -- ns/SubPlugin.__init__
> >> # -- scapy/SubPlugin.__init__
> >> # Executing 528 tests in parallel and 15 in serial
> >> # Using 18 batches and 4 workers
> >> #
> >
> >Hi Jiri,
> >
> >Can you also try running after installing pyroute2?
> >`pip3 install pyroute2` or via your distro's package manager.
> >
> >Seems like in your kernel config + (virtual?) machine you are running into
> >issues like:
> > - create netns
> > - try to use netns (still "creating", not visible yet)
> > - fail badly
> >
> >Since pyroute2 is netlink based, these issues are more likely to not happen.
> >
> >Yes I agree the error messages are cryptic, we have been wondering how to
> >improve them.
> >If you are still running into issues after trying with pyroute2, can you also
> >try running tdc with the following diff? It disables the parallel testing for
> >kselftests.
> >
> >Perhaps when pyroute2 is not detected on the system we should disable the
> >parallel testing completely. tc/ip commands are too susceptible to these
> >issues and parallel testing just amplifies them.
> >
> >diff --git a/tools/testing/selftests/tc-testing/tdc.sh
> >b/tools/testing/selftests/tc-testing/tdc.sh
> >index c53ede8b730d..89bb123db86b 100755
> >--- a/tools/testing/selftests/tc-testing/tdc.sh
> >+++ b/tools/testing/selftests/tc-testing/tdc.sh
> >@@ -63,5 +63,5 @@ try_modprobe sch_hfsc
> > try_modprobe sch_hhf
> > try_modprobe sch_htb
> > try_modprobe sch_teql
> >-./tdc.py -J`nproc` -c actions
> >-./tdc.py -J`nproc` -c qdisc
> >+./tdc.py -J1 -c actions
> >+./tdc.py -J1 -c qdisc
> >
>
> I installed pyroute2. It looks some of the error went away, still having
> a couple:
>
> make: Entering directory '/mnt/share156/jiri/net-next/tools/testing/selftests'
> make[1]: Entering directory '/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing'
> make[1]: Nothing to be done for 'all'.
> make[1]: Leaving directory '/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing'
> make[1]: Entering directory '/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing'
> TAP version 13
> 1..1
> # timeout set to 900
> # selftests: tc-testing: tdc.sh
> # netdevsim
> # act_bpf
> # act_connmark
> # act_csum
> # act_ct
> # act_ctinfo
> # act_gact
> # act_gate
> # act_mirred
> # act_mpls
> # act_nat
> # act_pedit
> # act_police
> # act_sample
> # act_simple
> # act_skbedit
> # act_skbmod
> # act_tunnel_key
> # act_vlan
> # cls_basic
> # cls_bpf
> # cls_cgroup
> # cls_flow
> # cls_flower
> # cls_fw
> # cls_matchall
> # cls_route
> # cls_u32
> # Module em_canid not found... skipping.
> # em_cmp
> # em_ipset
> # em_ipt
> # em_meta
> # em_nbyte
> # em_text
> # em_u32
> # sch_cake
> # sch_cbs
> # sch_choke
> # sch_codel
> # sch_drr
> # sch_etf
> # sch_ets
> # sch_fq
> # sch_fq_codel
> # sch_fq_pie
> # sch_gred
> # sch_hfsc
> # sch_hhf
> # sch_htb
> # sch_teql
> # considering category actions
> # -- ns/SubPlugin.__init__
> # -- scapy/SubPlugin.__init__
> # Executing 528 tests in parallel and 15 in serial
> # Using 18 batches and 4 workers
> # ..
> # -----> teardown stage *** Could not execute: "$TC actions flush action xt"
> #
> # -----> teardown stage *** Error message: "Error: Cannot flush unknown TC action.
> # We have an error flushing
> # "
> #
> # -----> teardown stage *** Aborting test run.
> #
> #
> # <_io.BufferedReader name=6> *** stdout ***
> #
> #
> # <_io.BufferedReader name=17> *** stderr ***
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 536, in test_runner
> # res = run_one_test(pm, args, index, tidx)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 465, in run_one_test
> # prepare_env(tidx, args, pm, 'teardown', '-----> teardown stage', tidx['teardown'], procout)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 268, in prepare_env
> # raise PluginMgrTestFail(
> # Test 5232: List ctinfo actions
> # Test 7702: Flush ctinfo actions
> # Test 3201: Add ctinfo action with duplicate index
> # Test 8295: Add ctinfo action with invalid index
> # Test 3964: Replace ctinfo action with invalid goto_chain control
> # Test 5124: Add mirred mirror to egress action
> # Test 6fb4: Add mirred redirect to egress action
> # Test ba38: Get mirred actions
> # Test d7c0: Add invalid mirred direction
> # Test e213: Add invalid mirred action
> # Test 2d89: Add mirred action with invalid device
> # Test 300b: Add mirred action with duplicate index
> # Test 8917: Add mirred mirror action with control pass
> # Test 1054: Add mirred mirror action with control pipe
> # Test 9887: Add mirred mirror action with control continue
> # Test e4aa: Add mirred mirror action with control reclassify
> # Test ece9: Add mirred mirror action with control drop
> # Test 0031: Add mirred mirror action with control jump
> # Test 407c: Add mirred mirror action with cookie
> # Test 8b69: Add mirred mirror action with index at 32-bit maximum
> # Test 3f66: Add mirred mirror action with index exceeding 32-bit maximum
> # Test a70e: Delete mirred mirror action
> # Test 3fb3: Delete mirred redirect action
> # Test 2a9a: Replace mirred action with invalid goto chain control
> # Test 4749: Add batch of 32 mirred redirect egress actions with cookie
> # Test 5c69: Delete batch of 32 mirred redirect egress actions
> # Test d3c0: Add batch of 32 mirred mirror ingress actions with cookie
> # Test e684: Delete batch of 32 mirred mirror ingress actions
> # Test 31e3: Add mirred mirror to egress action with no_percpu flag
> # Test 6d84: Add csum iph action
> # Test 1862: Add csum ip4h action
> # Test 15c6: Add csum ipv4h action
> # Test bf47: Add csum icmp action
> # Test cc1d: Add csum igmp action
> # Test bccc: Add csum foobar action
> # Test 3bb4: Add csum tcp action
> # Test 759c: Add csum udp action
> # Test bdb6: Add csum udp xor iph action
> # Test c220: Add csum udplite action
> # Test 8993: Add csum sctp action
> # Test b138: Add csum ip & icmp action
> # Test eeda: Add csum ip & sctp action
> # Test 0017: Add csum udp or tcp action
> # Test b10b: Add all 7 csum actions
> # Test ce92: Add csum udp action with cookie
> # Test 912f: Add csum icmp action with large cookie
> # Test 879b: Add batch of 32 csum tcp actions
> # Test b4e9: Delete batch of 32 csum actions
> # Test 0015: Add batch of 32 csum tcp actions with large cookies
> # Test 989e: Delete batch of 32 csum actions with large cookies
> # Test d128: Replace csum action with invalid goto chain control
> # Test eaf0: Add csum iph action with no_percpu flag
> # Test a933: Add MPLS dec_ttl action with pipe opcode
> # Test 08d1: Add mpls dec_ttl action with pass opcode
> # Test d786: Add mpls dec_ttl action with drop opcode
> # Test f334: Add mpls dec_ttl action with reclassify opcode
> # Test 29bd: Add mpls dec_ttl action with continue opcode
> # Test 48df: Add mpls dec_ttl action with jump opcode
> # Test 62eb: Add mpls dec_ttl action with trap opcode
> # Test 09d2: Add mpls dec_ttl action with opcode and cookie
> # Test c170: Add mpls dec_ttl action with opcode and cookie of max length
> # Test 9118: Add mpls dec_ttl action with invalid opcode
> # Test 6ce1: Add mpls dec_ttl action with label (invalid)
> # Test 352f: Add mpls dec_ttl action with tc (invalid)
> # Test 1c3a: Flush police actions
> # Test 7326: Add police action with control continue
> # Test 34fa: Add police action with control drop
> # Test 8dd5: Add police action with control ok
> # Test b9d1: Add police action with control reclassify
> # Test c534: Add police action with control pipe
> # Test b48b: Add police action with exceed goto chain control action
> # Test 689e: Replace police action with invalid goto chain control
> # Test cdd7: Add valid police action with packets per second rate limit
> # Test f5bc: Add invalid police action with both bps and pps
> # Test 7d64: Add police action with skip_hw option
> # Test 7d50: Add skbmod action to set destination mac
> # Test 9b29: Add skbmod action to set source mac
> # Test 1724: Add skbmod action with invalid mac
> # Test 3cf1: Add skbmod action with valid etype
> # Test a749: Add skbmod action with invalid etype
> # Test bfe6: Add skbmod action to swap mac
> # Test 839b: Add skbmod action with control pipe
> # Test c167: Add skbmod action with control reclassify
> # Test 0c2f: Add skbmod action with control drop
> # Test d113: Add skbmod action with control continue
> # Test 7242: Add skbmod action with control pass
> # Test 6046: Add skbmod action with control reclassify and cookie
> # Test 58cb: List skbmod actions
> # Test 9aa8: Get a single skbmod action from a list
> # Test e93a: Delete an skbmod action
> # Test 40c2: Flush skbmod actions
> # Test b651: Replace skbmod action with invalid goto_chain control
> # Test fe09: Add skbmod action to mark ECN bits
> # Test 696a: Add simple ct action
> # Test e38c: Add simple ct action with cookie
> # Test 9f20: Add ct clear action
> # Test 0bc1: Add ct clear action with cookie of max length
> # Test 5bea: Try ct with zone
> # Test d5d6: Try ct with zone, commit
> # Test 029f: Try ct with zone, commit, mark
> # Test a58d: Try ct with zone, commit, mark, nat
> # Test 901b: Try ct with full nat ipv4 range syntax
> # Test 072b: Try ct with full nat ipv6 syntax
> # Test 3420: Try ct with full nat ipv6 range syntax
> # Test 4470: Try ct with full nat ipv6 range syntax + force
> # Test 5d88: Try ct with label
> # Test 04d4: Try ct with label with mask
> # Test 9751: Try ct with mark + mask
> # Test 2faa: Try ct with mark + mask and cookie
> # Test 3991: Add simple ct action with no_percpu flag
> # Test 3992: Add ct action triggering DNAT tuple conflict
> #
> # Sent 1 packets.
> #
> # Sent 1 packets.
> # Test 2029: Add xt action with log-prefix
> # exit: 255
> # exit: 0
> # Warning: Extension LOG revision 0 not supported, missing kernel module?
> # Error: Failed to load TC action module.
> # We have an error talking to the kernel
> #
> # returncode 1; expected [0]
> # "-----> teardown stage" did not complete successfully
> # Exception <class '__main__.PluginMgrTestFail'> ('teardown', 'Warning: Extension LOG revision 0 not supported, missing kernel module?\nError: Failed to load TC action module.\nWe have an error talking to the kernel\n', '"-----> teardown stage" did not complete successfully') (caught in test_runner, running test 17 2029 Add xt action with log-prefix stage teardown)
> # ---------------
> # traceback
> # ---------------
> # accumulated output for this test:
> # Warning: Extension LOG revision 0 not supported, missing kernel module?
> # Error: Failed to load TC action module.
> # We have an error talking to the kernel
> #
> # ---------------
> # Test a5a7: Add pedit action with LAYERED_OP eth set src
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test 5a31: Add vlan modify action for protocol 802.1AD
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test 8eb5: Create valid ife encode action with tcindex and continue control
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test a874: Add invalid sample action without mandatory arguments
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test ac2a: List actions
> # Test 3edf: Flush gact actions
> # Test 63ec: Delete pass action
> # Test 46be: Delete pipe action
> # Test 2e08: Delete reclassify action
> # Test 99c4: Delete drop action
> # Test fb6b: Delete continue action
> # Test 0eb3: Delete non-existent action
> # Test f02c: Replace gact action
> # Test 525f: Get gact action by index
> # Test 1021: Add batch of 32 gact pass actions
> # Test da7a: Add batch of 32 gact continue actions with cookie
> # Test 8aa3: Delete batch of 32 gact continue actions
> # Test 8e47: Add gact action with random determ goto chain control action
> # Test ca89: Replace gact action with invalid goto chain control
> # Test 95ad: Add gact pass action with no_percpu flag
> # Test 7f52: Try to flush action which is referenced by filter
> # Test ae1e: Try to flush actions when last one is referenced by filter
> # Test 2b11: Add tunnel_key set action with mandatory parameters
> # Test dc6b: Add tunnel_key set action with missing mandatory src_ip parameter
> # Test 7f25: Add tunnel_key set action with missing mandatory dst_ip parameter
> # Test a5e0: Add tunnel_key set action with invalid src_ip parameter
> # Test eaa8: Add tunnel_key set action with invalid dst_ip parameter
> # Test 3b09: Add tunnel_key set action with invalid id parameter
> # Test 9625: Add tunnel_key set action with invalid dst_port parameter
> # Test 05af: Add tunnel_key set action with optional dst_port parameter
> # Test da80: Add tunnel_key set action with index at 32-bit maximum
> # Test d407: Add tunnel_key set action with index exceeding 32-bit maximum
> # Test 5cba: Add tunnel_key set action with id value at 32-bit maximum
> # Test e84a: Add tunnel_key set action with id value exceeding 32-bit maximum
> # Test 9c19: Add tunnel_key set action with dst_port value at 16-bit maximum
> # Test 3bd9: Add tunnel_key set action with dst_port value exceeding 16-bit maximum
> # Test 68e2: Add tunnel_key unset action
> # Test 6192: Add tunnel_key unset continue action
> # Test 061d: Add tunnel_key set continue action with cookie
> # Test 8acb: Add tunnel_key set continue action with invalid cookie
> # Test a07e: Add tunnel_key action with no set/unset command specified
> # Test b227: Add tunnel_key action with csum option
> # Test 58a7: Add tunnel_key action with nocsum option
> # Test 2575: Add tunnel_key action with not-supported parameter
> # Test 7a88: Add tunnel_key action with cookie parameter
> # Test 4f20: Add tunnel_key action with a single geneve option parameter
> # Test e33d: Add tunnel_key action with multiple geneve options parameter
> # Test 0778: Add tunnel_key action with invalid class geneve option parameter
> # Test 4ae8: Add tunnel_key action with invalid type geneve option parameter
> # Test 4039: Add tunnel_key action with short data length geneve option parameter
> # Test 26a6: Add tunnel_key action with non-multiple of 4 data length geneve option parameter
> # Test f44d: Add tunnel_key action with incomplete geneve options parameter
> # Test 7afc: Replace tunnel_key set action with all parameters
> # Test 364d: Replace tunnel_key set action with all parameters and cookie
> # Test 937c: Fetch all existing tunnel_key actions
> # Test 6783: Flush all existing tunnel_key actions
> # Test 8242: Replace tunnel_key set action with invalid goto chain
> # Test 0cd2: Add tunnel_key set action with no_percpu flag
> # Test 3671: Delete tunnel_key set action with valid index
> # Test 8597: Delete tunnel_key set action with invalid index
> # Test 6bda: Add tunnel_key action with nofrag option
> # Test c826: Add ctinfo action with default setting
> # Test 0286: Add ctinfo action with dscp
> # Test 4938: Add ctinfo action with valid cpmark and zone
> # Test 7593: Add ctinfo action with drop control
> # Test 2961: Replace ctinfo action zone and action control
> # Test e567: Delete ctinfo action with valid index
> # Test 6a91: Delete ctinfo action with invalid index
> # Test d959: Add cBPF action with valid bytecode
> # Test f84a: Add cBPF action with invalid bytecode
> # Test e939: Add eBPF action with valid object-file
> # Test 282d: Add eBPF action with invalid object-file
> # Test d819: Replace cBPF bytecode and action control
> # Test 6ae3: Delete cBPF action
> # Test 3e0d: List cBPF actions
> # Test 55ce: Flush BPF actions
> # Test ccc3: Add cBPF action with duplicate index
> # Test 89c7: Add cBPF action with invalid index
> # Test 7ab9: Add cBPF action with cookie
> # Test b8a1: Replace bpf action with invalid goto_chain control
> # Test 2893: Add pedit action with RAW_OP offset u8 quad
> # Test 6795: Add pedit action with LAYERED_OP ip6 set payload_len, nexthdr, hoplimit
> # Test cfcc: Add pedit action with LAYERED_OP tcp flags set
> # Test b078: Add simple action
> # Test 4297: Add simple action with change command
> # Test 6d4c: Add simple action with duplicate index
> # Test 2542: List simple actions
> # Test ea67: Delete simple action
> # Test 8ff1: Flush simple actions
> # Test b776: Replace simple action with invalid goto chain control
> # Test 8d07: Verify cleanup of failed actions batch add
> # Test a68a: Verify cleanup of failed actions batch change
> # Test 49aa: Add valid basic police action
> # Test 3abe: Add police action with duplicate index
> # Test 49fa: Add valid police action with mtu
> # Test 7943: Add valid police action with peakrate
> # Test 055e: Add police action with peakrate and no mtu
> # Test f057: Add police action with valid overhead
> # Test 7ffb: Add police action with ethernet linklayer type
> # Test 3dda: Add police action with atm linklayer type
> # Test 551b: Add police actions with conform-exceed control continue/drop
> # Test 0c70: Add police actions with conform-exceed control pass/reclassify
> # Test d946: Add police actions with conform-exceed control pass/pipe
> # Test ddd6: Add police action with invalid rate value
> # Test f61c: Add police action with invalid burst value
> # Test 6aaf: Add police actions with conform-exceed control pass/pipe [with numeric values]
> # Test 29b1: Add police actions with conform-exceed control <invalid>/drop
> # Test c26f: Add police action with invalid peakrate value
> # Test db04: Add police action with invalid mtu value
> # Test f3c9: Add police action with cookie
> # Test d190: Add police action with maximum index
> # Test 336e: Delete police action
> # Test 77fa: Get single police action from many actions
> # Test aa43: Get single police action without specifying index
> # Test 858b: List police actions
> # Test fa1c: Add mpls dec_ttl action with ttl (invalid)
> # Test 6b79: Add mpls dec_ttl action with bos (invalid)
> # Test d4c4: Add mpls pop action with ip proto
> # Test 91fb: Add mpls pop action with ip proto and cookie
> # Test 92fe: Add mpls pop action with mpls proto
> # Test 7e23: Add mpls pop action with no protocol (invalid)
> # Test 6182: Add mpls pop action with label (invalid)
> # Test 6475: Add mpls pop action with tc (invalid)
> # Test 067b: Add mpls pop action with ttl (invalid)
> # Test 7316: Add mpls pop action with bos (invalid)
> # Test 38cc: Add mpls push action with label
> # Test c281: Add mpls push action with mpls_mc protocol
> # Test 5db4: Add mpls push action with label, tc and ttl
> # Test 7c34: Add mpls push action with label, tc ttl and cookie of max length
> # Test 16eb: Add mpls push action with label and bos
> # Test d69d: Add mpls push action with no label (invalid)
> # Test e8e4: Add mpls push action with ipv4 protocol (invalid)
> # Test ecd0: Add mpls push action with out of range label (invalid)
> # Test d303: Add mpls push action with out of range tc (invalid)
> # Test fd6e: Add mpls push action with ttl of 0 (invalid)
> # Test 19e9: Add mpls mod action with mpls label
> # Test 1fde: Add mpls mod action with max mpls label
> # Test 0c50: Add mpls mod action with mpls label exceeding max (invalid)
> # Test 10b6: Add mpls mod action with mpls label of MPLS_LABEL_IMPLNULL (invalid)
> # Test 57c9: Add mpls mod action with mpls min tc
> # Test 6872: Add mpls mod action with mpls max tc
> # Test a70a: Add mpls mod action with mpls tc exceeding max (invalid)
> # Test 6ed5: Add mpls mod action with mpls ttl
> # Test 77c1: Add mpls mod action with mpls ttl and cookie
> # Test b80f: Add mpls mod action with mpls max ttl
> # Test 8864: Add mpls mod action with mpls min ttl
> # Test 6c06: Add mpls mod action with mpls ttl of 0 (invalid)
> # Test b5d8: Add mpls mod action with mpls ttl exceeding max (invalid)
> # Test 451f: Add mpls mod action with mpls max bos
> # Test a1ed: Add mpls mod action with mpls min bos
> # Test 3dcf: Add mpls mod action with mpls bos exceeding max (invalid)
> # Test db7c: Add mpls mod action with protocol (invalid)
> # Test b070: Replace existing mpls push action with new ID
> # Test 95a9: Replace existing mpls push action with new label, tc, ttl and cookie
> # Test 6cce: Delete mpls pop action
> # Test d138: Flush mpls actions
> # Test 319a: Add pedit action that mangles IP TTL
> # Test 7e67: Replace pedit action with invalid goto chain
> # Test 377e: Add pedit action with RAW_OP offset u32
> # Test a0ca: Add pedit action with RAW_OP offset u32 (INVALID)
> # Test dd8a: Add pedit action with RAW_OP offset u16 u16
> # Test 53db: Add pedit action with RAW_OP offset u16 (INVALID)
> # Test 5c7e: Add pedit action with RAW_OP offset u8 add value
> # Test 3a07: Add pedit action with RAW_OP offset u8-u16-u8
> # Test ab0f: Add pedit action with RAW_OP offset u16-u8-u8
> # Test 9d12: Add pedit action with RAW_OP offset u32 set u16 clear u8 invert
> # Test ebfa: Add pedit action with RAW_OP offset overflow u32 (INVALID)
> # Test f512: Add pedit action with RAW_OP offset u16 at offmask shift set
> # Test c2cb: Add pedit action with RAW_OP offset u32 retain value
> # Test 1762: Add pedit action with RAW_OP offset u8 clear value
> # Test bcee: Add pedit action with RAW_OP offset u8 retain value
> # Test e89f: Add pedit action with RAW_OP offset u16 retain value
> # Test c282: Add pedit action with RAW_OP offset u32 clear value
> # Test c422: Add pedit action with RAW_OP offset u16 invert value
> # Test d3d3: Add pedit action with RAW_OP offset u32 invert value
> # Test 57e5: Add pedit action with RAW_OP offset u8 preserve value
> # Test 99e0: Add pedit action with RAW_OP offset u16 preserve value
> # Test 1892: Add pedit action with RAW_OP offset u32 preserve value
> # Test 4b60: Add pedit action with RAW_OP negative offset u16/u32 set value
> # multiprocessing.pool.RemoteTraceback:
> # """
> # Traceback (most recent call last):
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 142, in call_pre_case
> # pgn_inst.pre_case(caseinfo, test_skip)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/plugin-lib/nsPlugin.py", line 63, in pre_case
> # self.prepare_test(test)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/plugin-lib/nsPlugin.py", line 36, in prepare_test
> # self._nl_ns_create()
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/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/local/lib/python3.11/site-packages/pyroute2/iproute/linux.py", line 1696, in link
> # ret = self.nlm_request(msg, msg_type=msg_type, msg_flags=msg_flags)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 870, in nlm_request
> # return tuple(self._genlm_request(*argv, **kwarg))
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 1214, in nlm_request
> # for msg in self.get(
> # ^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 873, in get
> # return tuple(self._genlm_get(*argv, **kwarg))
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 550, 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/lib64/python3.11/multiprocessing/pool.py", line 125, in worker
> # result = (True, func(*args, **kwds))
> # ^^^^^^^^^^^^^^^^^^^
> # File "/usr/lib64/python3.11/multiprocessing/pool.py", line 48, in mapstar
> # return list(map(*args))
> # ^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 602, in __mp_runner
> # (_, tsr) = test_runner(mp_pm, mp_args, tests)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 536, in test_runner
> # res = run_one_test(pm, args, index, tidx)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 419, in run_one_test
> # pm.call_pre_case(tidx)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/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 "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 1028, in <module>
> # main()
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 1022, in main
> # set_operation_mode(pm, parser, args, remaining)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 964, in set_operation_mode
> # catresults = test_runner_mp(pm, args, alltests)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 624, in test_runner_mp
> # pres = p.map(__mp_runner, batches)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/lib64/python3.11/multiprocessing/pool.py", line 367, in map
> # return self._map_async(func, iterable, mapstar, chunksize).get()
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/lib64/python3.11/multiprocessing/pool.py", line 774, in get
> # raise self._value
> # NameError: name 'test_ordinal' is not defined
> # considering category qdisc
> # -- scapy/SubPlugin.__init__
> # -- ns/SubPlugin.__init__
> # Executing 294 tests in parallel and 33 in serial
> # Using 11 batches and 4 workers
> #
> # -----> prepare stage *** Could not execute: "$IP link add dev $ETH type dummy"
> #
> # -----> prepare stage *** Error message: "RTNETLINK answers: File exists
> # "
> #
> # -----> prepare stage *** Aborting test run.
> #
> #
> # <_io.BufferedReader name=6> *** stdout ***
> #
> #
> # <_io.BufferedReader name=15> *** stderr ***
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 536, in test_runner
> # res = run_one_test(pm, args, index, tidx)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 420, in run_one_test
> # prepare_env(tidx, args, pm, 'setup', "-----> prepare stage", tidx["setup"])
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 268, in prepare_env
> # raise PluginMgrTestFail(
> # ......................Test 30c4: Add ETS qdisc with quanta + priomap
> # Test e8ac: Add ETS qdisc with strict + priomap
> # Test 5a7e: Add ETS qdisc with quanta + strict + priomap
> # Test cb8b: Show ETS class :1
> # Test 1b4e: Show ETS class :2
> # Test f642: Show ETS class :3
> # Test 0a5f: Show ETS strict class
> # Test f7c8: Add ETS qdisc with too many quanta
> # Test 2389: Add ETS qdisc with too many strict
> # Test fe3c: Add ETS qdisc with too many strict + quanta
> # Test cb04: Add ETS qdisc with excess priomap elements
> # Test c32e: Add ETS qdisc with priomap above bands
> # Test 744c: Add ETS qdisc with priomap above quanta
> # Test 7b33: Add ETS qdisc with priomap above strict
> # Test dbe6: Add ETS qdisc with priomap above strict + quanta
> # Test bdb2: Add ETS qdisc with priomap within bands with strict + quanta
> # Test 39a3: Add ETS qdisc with priomap above bands with strict + quanta
> # Test 557c: Unset priorities default to the last band
> # Test a347: Unset priorities default to the last band -- no priomap
> # Test 39c4: Add ETS qdisc with too few bands
> # Test 930b: Add ETS qdisc with too many bands
> # Test 406a: Add ETS qdisc without parameters
> # Test e51a: Zero element in quanta
> # Test e7f2: Sole zero element in quanta
> # Test d6e6: No values after the quanta keyword
> # Test 28c6: Change ETS band quantum
> # Test 4714: Change ETS band without quantum
> # Test 6979: Change quantum of a strict ETS band
> # Test 9a7d: Change ETS strict band without quantum
> # Test 283e: Create skbprio with default setting
> # Test c086: Create skbprio with limit setting
> # Test 6733: Change skbprio with limit setting
> # Test fe0f: Add prio qdisc on egress with 4 bands and priomap exceeding TC_PRIO_MAX entries
> # Test 1f91: Add prio qdisc on egress with 4 bands and priomap's values exceeding bands number
> # Test d248: Add prio qdisc on egress with invalid bands value (< 2)
> # Test 1d0e: Add prio qdisc on egress with invalid bands value exceeding TCQ_PRIO_BANDS
> # Test 1971: Replace default prio qdisc on egress with 8 bands and new priomap
> # Test d88a: Add duplicate prio qdisc on egress
> # Test 5948: Delete nonexistent prio qdisc
> # Test 6c0a: Add prio qdisc on egress with invalid format for handles
> # Test 0175: Delete prio qdisc twice
> # Test 2410: Show prio class
> # Test 0385: Create DRR with default setting
> # Test 2375: Delete DRR with handle
> # Test 3092: Show DRR class
> # Test e90e: Add ETS qdisc using bands
> # Test b059: Add ETS qdisc using quanta
> # Test e8e7: Add ETS qdisc using strict
> # Test 233c: Add ETS qdisc using bands + quanta
> # Test 3d35: Add ETS qdisc using bands + strict
> # Test 7f3b: Add ETS qdisc using strict + quanta
> # Test 4593: Add ETS qdisc using strict 0 + quanta
> # Test 8938: Add ETS qdisc using bands + strict + quanta
> # Test 0782: Add ETS qdisc with more bands than quanta
> # Test 501b: Add ETS qdisc with more bands than strict
> # Test 671a: Add ETS qdisc with more bands than strict + quanta
> # Test 2a23: Add ETS qdisc with 16 bands
> # Test 8daf: Add ETS qdisc with 17 bands
> # Test 7f95: Add ETS qdisc with 17 strict
> # Test 837a: Add ETS qdisc with 16 quanta
> # Test 65b6: Add ETS qdisc with 17 quanta
> # Test b9e9: Add ETS qdisc with 16 strict + quanta
> # Test 9877: Add ETS qdisc with 17 strict + quanta
> # Test c696: Add ETS qdisc with priomap
> # Test 20ba: Add multiq Qdisc to multi-queue device (8 queues)
> # Test 4301: List multiq Class
> # Test 7832: Delete nonexistent multiq Qdisc
> # Test 2891: Delete multiq Qdisc twice
> # Test 1329: Add multiq Qdisc to single-queue device
> # Test 84a0: Create TEQL with default setting
> # Test 7734: Create TEQL with multiple device
> # returncode 2; expected [0]
> # "-----> prepare stage" did not complete successfully
> # Exception <class '__main__.PluginMgrTestFail'> ('setup', None, '"-----> prepare stage" did not complete successfully') (caught in test_runner, running test 8 7734 Create TEQL with multiple device stage setup)
> # ---------------
> # traceback
> # ---------------
> # ---------------
> # Test 2958: Show skbprio class
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test 0301: Change CHOKE with limit setting
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test 2385: Create CAKE with besteffort flag
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test 0521: Show ingress class
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test b190: Create FQ_CODEL with noecn flag
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test 5439: Create NETEM with multiple slot setting
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # Test 30a9: Create SFB with increment setting
> # exception (34, 'Numerical result out of range') in call to pre_case for <class 'plugin-lib.nsPlugin.SubPlugin'> plugin
> # multiprocessing.pool.RemoteTraceback:
> # """
> # Traceback (most recent call last):
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 142, in call_pre_case
> # pgn_inst.pre_case(caseinfo, test_skip)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/plugin-lib/nsPlugin.py", line 63, in pre_case
> # self.prepare_test(test)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/plugin-lib/nsPlugin.py", line 36, in prepare_test
> # self._nl_ns_create()
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/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/local/lib/python3.11/site-packages/pyroute2/iproute/linux.py", line 1696, in link
> # ret = self.nlm_request(msg, msg_type=msg_type, msg_flags=msg_flags)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 870, in nlm_request
> # return tuple(self._genlm_request(*argv, **kwarg))
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 1214, in nlm_request
> # for msg in self.get(
> # ^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 873, in get
> # return tuple(self._genlm_get(*argv, **kwarg))
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/local/lib/python3.11/site-packages/pyroute2/netlink/nlsocket.py", line 550, 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/lib64/python3.11/multiprocessing/pool.py", line 125, in worker
> # result = (True, func(*args, **kwds))
> # ^^^^^^^^^^^^^^^^^^^
> # File "/usr/lib64/python3.11/multiprocessing/pool.py", line 48, in mapstar
> # return list(map(*args))
> # ^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 602, in __mp_runner
> # (_, tsr) = test_runner(mp_pm, mp_args, tests)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 536, in test_runner
> # res = run_one_test(pm, args, index, tidx)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 419, in run_one_test
> # pm.call_pre_case(tidx)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/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 "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 1028, in <module>
> # main()
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 1022, in main
> # set_operation_mode(pm, parser, args, remaining)
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 964, in set_operation_mode
> # catresults = test_runner_mp(pm, args, alltests)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing/./tdc.py", line 624, in test_runner_mp
> # pres = p.map(__mp_runner, batches)
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/lib64/python3.11/multiprocessing/pool.py", line 367, in map
> # return self._map_async(func, iterable, mapstar, chunksize).get()
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # File "/usr/lib64/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
> make[1]: Leaving directory '/mnt/share156/jiri/net-next/tools/testing/selftests/tc-testing'
> make: Leaving directory '/mnt/share156/jiri/net-next/tools/testing/selftests'

Hrm. I may have forgotten to send parts when deleting ipt. Does this
patchlet help?

cheers,
jamal

[-- Attachment #2: rm-xt.json --]
[-- Type: application/json, Size: 7409 bytes --]