mbox series

[net-next,v3,0/4] add HSR offloading support for DSA switches

Message ID 20210210010213.27553-1-george.mccollister@gmail.com
Headers show
Series add HSR offloading support for DSA switches | expand

Message

George McCollister Feb. 10, 2021, 1:02 a.m. UTC
Add support for offloading HSR/PRP (IEC 62439-3) tag insertion, tag
removal, forwarding and duplication on DSA switches.
This series adds offloading to the xrs700x DSA driver.

Changes since RFC:
 * Split hsr and dsa patches. (Florian Fainelli)

Changes since v1:
 * Fixed some typos/wording. (Vladimir Oltean)
 * eliminate IFF_HSR and use is_hsr_master instead. (Vladimir Oltean)
 * Make hsr_handle_sup_frame handle skb_std as well (required when offloading)
 * Don't add hsr tag for HSR v0 supervisory frames.
 * Fixed tag insertion offloading for PRP.

Changes since v2:
 * Return -EOPNOTSUPP instead of 0 in dsa_switch_hsr_join and
   dsa_switch_hsr_leave. (Vladimir Oltean)
 * Only allow ports 1 and 2 to be HSR/PRP redundant ports. (Tobias Waldekranz)
 * Set and remove HSR features for both redundant ports. (Vladimir Oltean)
 * Change port_hsr_leave() to return int instead of void.
 * Remove hsr_init_skb() proto argument. (Vladimir Oltean)

George McCollister (4):
  net: hsr: generate supervision frame without HSR/PRP tag
  net: hsr: add offloading support
  net: dsa: add support for offloading HSR
  net: dsa: xrs700x: add HSR offloading support

 Documentation/networking/netdev-features.rst |  21 +++++
 drivers/net/dsa/xrs700x/xrs700x.c            | 121 +++++++++++++++++++++++++++
 drivers/net/dsa/xrs700x/xrs700x_reg.h        |   5 ++
 include/linux/if_hsr.h                       |  27 ++++++
 include/linux/netdev_features.h              |   9 ++
 include/net/dsa.h                            |  13 +++
 net/dsa/dsa_priv.h                           |  11 +++
 net/dsa/port.c                               |  34 ++++++++
 net/dsa/slave.c                              |  14 ++++
 net/dsa/switch.c                             |  24 ++++++
 net/dsa/tag_xrs700x.c                        |   7 +-
 net/ethtool/common.c                         |   4 +
 net/hsr/hsr_device.c                         |  53 +++---------
 net/hsr/hsr_device.h                         |   1 -
 net/hsr/hsr_forward.c                        |  35 +++++++-
 net/hsr/hsr_forward.h                        |   1 +
 net/hsr/hsr_framereg.c                       |   2 +
 net/hsr/hsr_main.c                           |  11 +++
 net/hsr/hsr_main.h                           |   8 +-
 net/hsr/hsr_slave.c                          |  10 ++-
 20 files changed, 351 insertions(+), 60 deletions(-)
 create mode 100644 include/linux/if_hsr.h

Comments

Florian Fainelli Feb. 10, 2021, 4:04 a.m. UTC | #1
On 2/9/2021 5:02 PM, George McCollister wrote:
> Add support for offloading of HSR/PRP (IEC 62439-3) tag insertion

> tag removal, duplicate generation and forwarding on DSA switches.

> 

> Add DSA_NOTIFIER_HSR_JOIN and DSA_NOTIFIER_HSR_LEAVE which trigger calls

> to .port_hsr_join and .port_hsr_leave in the DSA driver for the switch.

> 

> The DSA switch driver should then set netdev feature flags for the

> HSR/PRP operation that it offloads.

>     NETIF_F_HW_HSR_TAG_INS

>     NETIF_F_HW_HSR_TAG_RM

>     NETIF_F_HW_HSR_FWD

>     NETIF_F_HW_HSR_DUP

> 

> Signed-off-by: George McCollister <george.mccollister@gmail.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

-- 
Florian
Vladimir Oltean Feb. 10, 2021, 9:33 a.m. UTC | #2
On Tue, Feb 09, 2021 at 07:02:10PM -0600, George McCollister wrote:
> For a switch to offload insertion of HSR/PRP tags, frames must not be

> sent to the CPU facing switch port with a tag. Generate supervision frames

> (eth type ETH_P_PRP) without HSR v1 (ETH_P_HSR)/PRP tag and rely on

> create_tagged_frame which inserts it later. This will allow skipping the

> tag insertion for all outgoing frames in the future which is required for

> HSR v1/PRP tag insertions to be offloaded.

> 

> HSR v0 supervision frames always contain tag information so insertion of

> the tag can't be offloaded. IEC 62439-3 Ed.2.0 (HSR v1) specifically

> notes that this was changed since v0 to allow offloading.

> 

> Signed-off-by: George McCollister <george.mccollister@gmail.com>

> ---


Reviewed-by: Vladimir Oltean <olteanv@gmail.com>

Tested-by: Vladimir Oltean <olteanv@gmail.com>
Vladimir Oltean Feb. 10, 2021, 9:44 a.m. UTC | #3
On Tue, Feb 09, 2021 at 07:02:12PM -0600, George McCollister wrote:
> Add support for offloading of HSR/PRP (IEC 62439-3) tag insertion

> tag removal, duplicate generation and forwarding on DSA switches.

> 

> Add DSA_NOTIFIER_HSR_JOIN and DSA_NOTIFIER_HSR_LEAVE which trigger calls

> to .port_hsr_join and .port_hsr_leave in the DSA driver for the switch.

> 

> The DSA switch driver should then set netdev feature flags for the

> HSR/PRP operation that it offloads.

>     NETIF_F_HW_HSR_TAG_INS

>     NETIF_F_HW_HSR_TAG_RM

>     NETIF_F_HW_HSR_FWD

>     NETIF_F_HW_HSR_DUP

> 

> Signed-off-by: George McCollister <george.mccollister@gmail.com>

> ---


Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
patchwork-bot+netdevbpf@kernel.org Feb. 11, 2021, 10 p.m. UTC | #4
Hello:

This series was applied to netdev/net-next.git (refs/heads/master):

On Tue,  9 Feb 2021 19:02:09 -0600 you wrote:
> Add support for offloading HSR/PRP (IEC 62439-3) tag insertion, tag

> removal, forwarding and duplication on DSA switches.

> This series adds offloading to the xrs700x DSA driver.

> 

> Changes since RFC:

>  * Split hsr and dsa patches. (Florian Fainelli)

> 

> [...]


Here is the summary with links:
  - [net-next,v3,1/4] net: hsr: generate supervision frame without HSR/PRP tag
    https://git.kernel.org/netdev/net-next/c/78be9217c401
  - [net-next,v3,2/4] net: hsr: add offloading support
    https://git.kernel.org/netdev/net-next/c/dcf0cd1cc58b
  - [net-next,v3,3/4] net: dsa: add support for offloading HSR
    https://git.kernel.org/netdev/net-next/c/18596f504a3e
  - [net-next,v3,4/4] net: dsa: xrs700x: add HSR offloading support
    https://git.kernel.org/netdev/net-next/c/bd62e6f5e6a9

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html