[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <59c5ede2-8b52-c250-7396-fd7b19ec6bc7@zonque.org>
Date: Fri, 19 Jun 2020 23:31:04 +0200
From: Daniel Mack <daniel@...que.org>
To: netdev@...r.kernel.org
Cc: Ido Schimmel <idosch@...sch.org>, Jiri Pirko <jiri@...nulli.us>,
Ivan Vecera <ivecera@...hat.com>,
Florian Fainelli <f.fainelli@...il.com>,
Andrew Lunn <andrew@...n.ch>
Subject: Question on DSA switches, IGMP forwarding and switchdev
Hi,
I'm working on a custom board featuring a Marvell mv88e6085 Ethernet
switch controlled by the Linux DSA driver, and I'm facing an issue with
IGMP packet flows.
Consider two Ethernet stations, each connected to the switch on a
dedicated port. A Linux bridge combines the two ports. In my setup, I
need these two stations to send and receive multicast traffic, with IGMP
snooping enabled.
When an IGMP query enters the switch, it is redirected to the CPU port
as all 'external' ports are configured for IGMP/MLP snooping by the
driver. The issue that I'm seeing is that the Linux bridge does not
forward the IGMP frames to any other port, no matter whether the bridge
is in snooping mode or not. This needs to happen however, otherwise the
stations will not see IGMP queries, and unsolicited membership reports
are not being transferred either.
I've traced these frames through the bridge code and figured forwarding
fails in should_deliver() in net/bridge/br_forward.c because
nbp_switchdev_allowed_egress() denies it due to the fact that the frame
has already been forwarded by the same parent device. This check causes
all manual software forwarding of frames between two such switch ports
to fail. Note that IGMP traffic is the only class of communication that
is affected by this as it is not handled in hardware.
So my question now is how to fix that. Would the DSA driver need to mark
the ports as independent somehow?
Thanks,
Daniel
Powered by blists - more mailing lists