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] [day] [month] [year] [list]
Message-ID: <20231220094634.GG1697233@pengutronix.de>
Date: Wed, 20 Dec 2023 10:46:34 +0100
From: Oleksij Rempel <o.rempel@...gutronix.de>
To: Vladimir Oltean <olteanv@...il.com>
Cc: Woojung Huh <woojung.huh@...rochip.com>, Andrew Lunn <andrew@...n.ch>,
	Arun Ramadoss <arun.ramadoss@...rochip.com>,
	Florian Fainelli <f.fainelli@...il.com>, netdev@...r.kernel.org,
	linux-kernel@...r.kernel.org, UNGLinuxDriver@...rochip.com,
	Eric Dumazet <edumazet@...gle.com>, kernel@...gutronix.de,
	Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
	"David S. Miller" <davem@...emloft.net>
Subject: Re: [PATCH net-next v1 3/3] net: dsa: microchip: Fix PHY loopback
 configuration for KSZ8794 and KSZ8873

On Thu, Dec 07, 2023 at 04:00:30PM +0200, Vladimir Oltean wrote:
> On Thu, Dec 07, 2023 at 06:15:02AM +0100, Oleksij Rempel wrote:
> > On Thu, Dec 07, 2023 at 02:28:23AM +0200, Vladimir Oltean wrote:
> > > On Tue, Nov 21, 2023 at 04:24:26PM +0100, Oleksij Rempel wrote:
> > > > Correct the PHY loopback bit handling in the ksz8_w_phy_bmcr and
> > > > ksz8_r_phy_bmcr functions for KSZ8794 and KSZ8873 variants in the ksz8795
> > > > driver. Previously, the code erroneously used Bit 7 of port register 0xD
> > > > for both chip variants, which is actually for LED configuration. This
> > > > update ensures the correct registers and bits are used for the PHY
> > > > loopback feature:
> > > > 
> > > > - For KSZ8794: Use 0xF / Bit 7.
> > > > - For KSZ8873: Use 0xD / Bit 0.
> > > > 
> > > > Signed-off-by: Oleksij Rempel <o.rempel@...gutronix.de>
> > > > ---
> > > 
> > > How did you find, and how did you test this, and on which one of the switches?
> > 
> > I tested it by using "ethtool -t lanX" command on KSZ8873. Before this
> > patch the link will stop to work _after_ end of the selftest. The
> > selftest will fail too.
> > 
> > After this patch, the selftest is passed, except of the TCP test. And
> > link is working _after_ the selftest,
> 
> So you are suggesting that this far-end loopback mode does work as
> expected by the kernel.
> 
> But is that consistent with the description from the datasheet? It speaks
> about an "originating PHY port", but maybe this is confusing, because
> based on your test, even the CPU port could be originating the traffic
> that gets looped back?
> 
> I see it says that far-end loopback goes through the switching fabric.
> So the packet, on its return path from the loopback port, gets forwarded
> by its MAC DA? That can't be, because the MAC DA lookup has already
> determined the destination to be the loopback port (and no MAC SA<->DA
> swapping should take place). Or it is forced by the switch to return
> specifically to the originating port?
> 
> With a bridge between the 2 LAN ports, and lan1 put in loopback, what
> happens if you send a broadcast packet towards lan1? Will you also see
> it on lan2's link partner, or only on the CPU port?
> 
> It's not your fault, but this is all a bit confusing, and I'm not quite
> able to match up the documentation with your results. I will trust the
> experimental results, however.

I did following tests:
ip l a name br0 type bridge
ip l s dev br0 up
ip l s lan1 master br0
ip l s dev lan1 up
ip l s lan2 master br0
ip l s dev lan2 up

# to avoid link drop with the loopback mode
ethtool -s lan1 speed 100 duplex full autoneg off
# currently no tool support loopback configuration, so set it directly
# to the register
mii -i lan1 -p 0 -r 0 -v 6120

################# Test 1 ###########################
# on DUT
ping 192.168.2.200 -I lan1

on eth0/cpu interface:
00:03:20.656445 AF Unknown (4294967295), length 61: 
        0x0000:  ffff 000e cd00 cdbe 0806 0001 0800 0604  ................
        0x0010:  0001 000e cd00 cdbe c0a8 010e 0000 0000  ................
        0x0020:  0000 c0a8 02c8 0000 0000 0000 0000 0000  ................
        0x0030:  0000 0000 0000 0000 01                   .........
00:03:20.656548 AF Unknown (4294967295), length 61: 
        0x0000:  ffff 000e cd00 cdbe 0806 0001 0800 0604  ................
        0x0010:  0001 000e cd00 cdbe c0a8 010e 0000 0000  ................
        0x0020:  0000 c0a8 02c8 0000 0000 0000 0000 0000  ................
        0x0030:  0000 0000 0000 0000 00                   .........

on lan1 remote system:
100 701.752654927 00:0e:cd:00:cd:be → ff:ff:ff:ff:ff:ff ARP 60 Who has 192.168.2.200? Tell 192.168.1.14

on lan2 remote system:
347 1071.154437549 00:0e:cd:00:cd:be → ff:ff:ff:ff:ff:ff ARP 60 Who has 192.168.2.200? Tell 192.168.1.14


################# Test 2 ###########################
# send ping on on lan1 remote system:
ping 172.17.0.1

on eth0/cpu interface DUT:
-- nothing --

on lan1 remote system:
109 946.617862621 80:61:5f:0c:29:54 → ff:ff:ff:ff:ff:ff ARP 42 Who has 172.17.0.1? Tell 172.17.0.12

on lan2 remote system:
-- nothing --

################# Test 3 ###########################
# send ping on on lan2 remote system:
ping 172.17.0.122

on eth0/cpu interface DUT:
00:12:18.034220 AF Unknown (4294967295), length 61: 
        0x0000:  ffff 8061 5f0c 2955 0806 0001 0800 0604  ...a_.)U........
        0x0010:  0001 8061 5f0c 2955 ac11 000d 0000 0000  ...a_.)U........
        0x0020:  0000 ac11 007a 0000 0000 0000 0000 0000  .....z..........
        0x0030:  0000 0000 0000 0000 01                   .........
00:12:18.034228 AF Unknown (4294967295), length 61: 
        0x0000:  ffff 8061 5f0c 2955 0806 0001 0800 0604  ...a_.)U........
        0x0010:  0001 8061 5f0c 2955 ac11 000d 0000 0000  ...a_.)U........
        0x0020:  0000 ac11 007a 0000 0000 0000 0000 0000  .....z..........
        0x0030:  0000 0000 0000 0000 00

on lan1 remote system:
-- nothing --

on lan2 remote system:
476 1608.560311470 80:61:5f:0c:29:55 → ff:ff:ff:ff:ff:ff ARP 42 Who has 172.17.0.122? Tell 172.17.0.13
477 1608.560361808 80:61:5f:0c:29:55 → ff:ff:ff:ff:ff:ff ARP 60 Who has 172.17.0.122? Tell 172.17.0.13

I also retest selftest results and noted that it is not working if
port is part of bridge.

Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ