Hi! On Tue, Apr 21, 2020 at 12:36 AM Andrew Lunn <andrew@xxxxxxx> wrote: > > The MAC address needs to move, no argument there. But what are the > mechanisms which cause this. Is learning sufficient, or does DSA need > to take an active role? cpu port learning will break switch operation if for whatever reason we want to disable bridge offloading (e.g. ebtables?). In this case a packet received from cpu port need to be sent back through cpu port to another switch port, and the switch will learn from this packet incorrectly. If we want cpu port learning to kick in, we need to make sure that: 1. When bridge offload is enabled, the switch takes care of packet flooding on switch ports itself, instead of flooding with software bridge. 2. Software bridge shouldn't forward any packet between ports on the same switch. 3. cpu port learning should only be enabled when bridge offloading is used. Otherwise we need to manually sync fdb between software bridge and switch, specifically we need to take over fdb management on cpu port and tell the switch what devices are on the software bridge port side. I haven't read kernel bridge code thoroughly and have no idea which one is better/easier. Some switches (e.g. mt753x) have an option to forward packets with unknown destination port to cpu port only, instead of flooding. For this type of switch, the solution proposed in this patch is fine, because removing fdb entries has the same effect as telling switch that a device is on cpu port. If there's a switch without this feature, (which I have no idea if it exists) there will be issues on packet flooding behavior. > > Forget about DSA for the moment. How does this work for two normal > bridges? Is the flow of unicast packets sufficient? Does it requires a > broadcast packet from the device after it moves? It doesn't have to be a broadcast packet but it needs a packet to go through both bridges. Say we have bridge A and bridge B, port A1 and B1 are connected together and a device is on port A2 first: Bridge A knows that this device is on port A2 and will forward traffic through A1 to B1 if needed. Bridge B sees these packets and knows device is on port B1. When the device move from A2 to B2, B updates its fdb and if a packet reaches A, A will update its fdb too. The problem addressed in this patch is that switch doesn't update its fdb when a device moves from switch to software bridge, because cpu port learning is disabled. -- Regards, Chuanhong Guo