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