On Wed, May 18, 2022 at 02:58:40AM +0200, Andrew Lunn wrote: > It is possible to stack bridges on top of each other. Consider the > following which makes use of an Ethernet switch: > > br1 > / \ > / \ > / \ > br0.11 wlan0 > | > br0 > / | \ > p1 p2 p3 > > br0 is offloaded to the switch. Above br0 is a vlan interface, for > vlan 11. This vlan interface is then a slave of br1. br1 also has a > wireless interface as a slave. This setup trunks wireless lan traffic > over the copper network inside a VLAN. > > A frame received on p1 which is passed up to the bridge has the > skb->offload_fwd_mark flag set to true, indicating that the switch has > dealt with forwarding the frame out ports p2 and p3 as needed. This > flag instructs the software bridge it does not need to pass the frame > back down again. However, the flag is not getting reset when the frame > is passed upwards. As a result br1 sees the flag, wrongly interprets > it, and fails to forward the frame to wlan0. > > When passing a frame upwards, clear the flag. This is the Rx > equivalent of br_switchdev_frame_unmark() in br_dev_xmit(). > > Fixes: f1c2eddf4cb6 ("bridge: switchdev: Use an helper to clear forward mark") > Signed-off-by: Andrew Lunn <andrew@xxxxxxx> Reviewed-by: Ido Schimmel <idosch@xxxxxxxxxx> Tested-by: Ido Schimmel <idosch@xxxxxxxxxx>