lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250129121733.1e99f29c@wsk>
Date: Wed, 29 Jan 2025 12:17:33 +0100
From: Lukasz Majewski <lukma@...x.de>
To: Frieder Schrempf <frieder.schrempf@...tron.de>
Cc: Andrew Lunn <andrew@...n.ch>, "netdev@...r.kernel.org"
 <netdev@...r.kernel.org>
Subject: Re: KSZ9477 HSR Offloading

Hi Frieder,

> On 29.01.25 8:24 AM, Frieder Schrempf wrote:
> > Hi Andrew,
> > 
> > On 28.01.25 6:51 PM, Andrew Lunn wrote:  
> >> On Tue, Jan 28, 2025 at 05:14:46PM +0100, Frieder Schrempf wrote:  
> >>> Hi,
> >>>
> >>> I'm trying out HSR support on KSZ9477 with v6.12. My setup looks
> >>> like this:
> >>>
> >>> +-------------+         +-------------+
> >>> |             |         |             |
> >>> |   Node A    |         |   Node D    |
> >>> |             |         |             |
> >>> |             |         |             |
> >>> | LAN1   LAN2 |         | LAN1   LAN2 |
> >>> +--+-------+--+         +--+------+---+
> >>>    |       |               |      |
> >>>    |       +---------------+      |
> >>>    |                              |
> >>>    |       +---------------+      |
> >>>    |       |               |      |
> >>> +--+-------+--+         +--+------+---+
> >>> | LAN1   LAN2 |         | LAN1   LAN2 |
> >>> |             |         |             |
> >>> |             |         |             |
> >>> |   Node B    |         |   Node C    |
> >>> |             |         |             |
> >>> +-------------+         +-------------+
> >>>
> >>> On each device the LAN1 and LAN2 are added as HSR slaves. Then I
> >>> try to do ping tests between each of the HSR interfaces.
> >>>
> >>> The result is that I can reach the neighboring nodes just fine,
> >>> but I can't reach the remote node that needs packages to be
> >>> forwarded through the other nodes. For example I can't ping from
> >>> node A to C.
> >>>
> >>> I've tried to disable HW offloading in the driver and then
> >>> everything starts working.
> >>>
> >>> Is this a problem with HW offloading in the KSZ driver, or am I
> >>> missing something essential?  

Thanks for looking and testing such large scale setup.

> >>
> >> How are IP addresses configured? I assume you have a bridge, LAN1
> >> and LAN2 are members of the bridge, and the IP address is on the
> >> bridge interface?  
> > 
> > I have a HSR interface on each node that covers LAN1 and LAN2 as
> > slaves and the IP addresses are on those HSR interfaces. For node A:
> > 
> > ip link add name hsr type hsr slave1 lan1 slave2 lan2 supervision 45
> > version 1
> > ip addr add 172.20.1.1/24 dev hsr
> > 
> > The other nodes have the addresses 172.20.1.2/24, 172.20.1.3/24 and
> > 172.20.1.4/24 respectively.
> > 
> > Then on node A, I'm doing:
> > 
> > ping 172.20.1.2 # neighboring node B works
> > ping 172.20.1.4 # neighboring node D works
> > ping 172.20.1.3 # remote node C works only if I disable offloading  
> 
> BTW, it's enough to disable the offloading of the forwarding for HSR
> frames to make it work.
> 
> --- a/drivers/net/dsa/microchip/ksz9477.c
> +++ b/drivers/net/dsa/microchip/ksz9477.c
> @@ -1267,7 +1267,7 @@ int ksz9477_tc_cbs_set_cinc(struct ksz_device
> *dev, int port, u32 val)
>   * Moreover, the NETIF_F_HW_HSR_FWD feature is also enabled, as HSR
> frames
>   * can be forwarded in the switch fabric between HSR ports.
>   */
> -#define KSZ9477_SUPPORTED_HSR_FEATURES (NETIF_F_HW_HSR_DUP |
> NETIF_F_HW_HSR_FWD)
> +#define KSZ9477_SUPPORTED_HSR_FEATURES (NETIF_F_HW_HSR_DUP)
> 
>  void ksz9477_hsr_join(struct dsa_switch *ds, int port, struct
> net_device *hsr)
>  {
> @@ -1279,16 +1279,6 @@ void ksz9477_hsr_join(struct dsa_switch *ds,
> int port, struct net_device *hsr)
>         /* Program which port(s) shall support HSR */
>         ksz_rmw32(dev, REG_HSR_PORT_MAP__4, BIT(port), BIT(port));
> 
> -       /* Forward frames between HSR ports (i.e. bridge together HSR
> ports) */
> -       if (dev->hsr_ports) {
> -               dsa_hsr_foreach_port(hsr_dp, ds, hsr)
> -                       hsr_ports |= BIT(hsr_dp->index);
> -
> -               hsr_ports |= BIT(dsa_upstream_port(ds, port));
> -               dsa_hsr_foreach_port(hsr_dp, ds, hsr)
> -                       ksz9477_cfg_port_member(dev, hsr_dp->index,
> hsr_ports);
> -       }
> -
>         if (!dev->hsr_ports) {
>                 /* Enable discarding of received HSR frames */
>                 ksz_read8(dev, REG_HSR_ALU_CTRL_0__1, &data);

This means that KSZ9477 forwarding is dropping frames when HW
acceleration is used (for non "neighbour" nodes).

On my setup I only had 2 KSZ9477 devel boards.

And as you wrote - the SW based one works, so extending
https://elixir.bootlin.com/linux/v6.12-rc2/source/tools/testing/selftests/net/hsr

would not help in this case.


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@...x.de

Content of type "application/pgp-signature" skipped

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ