mbox series

[v3,net-next,0/6] Mirroring to DSA CPU port

Message ID 20241023135251.1752488-1-vladimir.oltean@nxp.com (mailing list archive)
Headers show
Series Mirroring to DSA CPU port | expand

Message

Vladimir Oltean Oct. 23, 2024, 1:52 p.m. UTC
Users of the NXP LS1028A SoC (drivers/net/dsa/ocelot L2 switch inside)
have requested to mirror packets from the ingress of a switch port to
software. Both port-based and flow-based mirroring is required.

The simplest way I could come up with was to set up tc mirred actions
towards a dummy net_device, and make the offloading of that be accepted
by the driver. Currently, the pattern in drivers is to reject mirred
towards ports they don't know about, but I'm now permitting that,
precisely by mirroring "to the CPU".

For testers, this series depends on commit 34d35b4edbbe ("net/sched:
act_api: deny mismatched skip_sw/skip_hw flags for actions created by
classifiers") from net/main, which is absent from net-next as of the
day of posting (Oct 23). Without the bug fix it is possible to create
invalid configurations which are not rejected by the kernel.

Changes from v2:
- Move skip_sw from struct flow_cls_offload and struct
  tc_cls_matchall_offload to struct flow_cls_common_offload.

Changes from RFC:
- Sent the bug fix separately, now merged as commit 8c924369cb56 ("net:
  dsa: refuse cross-chip mirroring operations") in the "net" tree
- Allow mirroring to the ingress of another switch port (using software)
  both for matchall in DSA and flower offload in ocelot
- Patch 3/6 is new

Link to v2:
https://lore.kernel.org/netdev/20241017165215.3709000-1-vladimir.oltean@nxp.com/

Link to previous RFC:
https://lore.kernel.org/netdev/20240913152915.2981126-1-vladimir.oltean@nxp.com/

For historical purposes, link to a much older (and much different) attempt:
https://lore.kernel.org/netdev/20191002233750.13566-1-olteanv@gmail.com/

Vladimir Oltean (6):
  net: sched: propagate "skip_sw" flag to struct flow_cls_common_offload
  net: dsa: clean up dsa_user_add_cls_matchall()
  net: dsa: use "extack" as argument to
    flow_action_basic_hw_stats_check()
  net: dsa: add more extack messages in
    dsa_user_add_cls_matchall_mirred()
  net: dsa: allow matchall mirroring rules towards the CPU
  net: mscc: ocelot: allow tc-flower mirred action towards foreign
    interfaces

 drivers/net/ethernet/mscc/ocelot_flower.c | 54 ++++++++++++----
 include/net/flow_offload.h                |  1 +
 include/net/pkt_cls.h                     |  1 +
 net/dsa/user.c                            | 78 +++++++++++++++++------
 4 files changed, 103 insertions(+), 31 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org Oct. 31, 2024, 12:50 a.m. UTC | #1
Hello:

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

On Wed, 23 Oct 2024 16:52:45 +0300 you wrote:
> Users of the NXP LS1028A SoC (drivers/net/dsa/ocelot L2 switch inside)
> have requested to mirror packets from the ingress of a switch port to
> software. Both port-based and flow-based mirroring is required.
> 
> The simplest way I could come up with was to set up tc mirred actions
> towards a dummy net_device, and make the offloading of that be accepted
> by the driver. Currently, the pattern in drivers is to reject mirred
> towards ports they don't know about, but I'm now permitting that,
> precisely by mirroring "to the CPU".
> 
> [...]

Here is the summary with links:
  - [v3,net-next,1/6] net: sched: propagate "skip_sw" flag to struct flow_cls_common_offload
    https://git.kernel.org/netdev/net-next/c/2748697225c3
  - [v3,net-next,2/6] net: dsa: clean up dsa_user_add_cls_matchall()
    https://git.kernel.org/netdev/net-next/c/a0af7162ccb5
  - [v3,net-next,3/6] net: dsa: use "extack" as argument to flow_action_basic_hw_stats_check()
    https://git.kernel.org/netdev/net-next/c/c11ace14d9db
  - [v3,net-next,4/6] net: dsa: add more extack messages in dsa_user_add_cls_matchall_mirred()
    https://git.kernel.org/netdev/net-next/c/4cc4394a897e
  - [v3,net-next,5/6] net: dsa: allow matchall mirroring rules towards the CPU
    https://git.kernel.org/netdev/net-next/c/3535d70df9c8
  - [v3,net-next,6/6] net: mscc: ocelot: allow tc-flower mirred action towards foreign interfaces
    https://git.kernel.org/netdev/net-next/c/49a09073cb23

You are awesome, thank you!