Re: [PATCH net-next 1/2] bridge: Redirect to backup port when port is administratively down
Nikolay Aleksandrov <[email protected]>
| Newsgroups | gmane.linux.network.bridge,gmane.linux.network |
|---|---|
| Message-ID | <[email protected]> |
On 8/12/25 11:02, Ido Schimmel wrote: > If a backup port is configured for a bridge port, the bridge will > redirect known unicast traffic towards the backup port when the primary > port is administratively up but without a carrier. This is useful, for > example, in MLAG configurations where a system is connected to two > switches and there is a peer link between both switches. The peer link > serves as the backup port in case one of the switches loses its > connection to the multi-homed system. > > In order to avoid flooding when the primary port loses its carrier, the > bridge does not flush dynamic FDB entries pointing to the port upon STP > disablement, if the port has a backup port. > > The above means that known unicast traffic destined to the primary port > will be blackholed when the port is put administratively down, until the > FDB entries pointing to it are aged-out. > > Given that the current behavior is quite weird and unlikely to be > depended on by anyone, amend the bridge to redirect to the backup port > also when the primary port is administratively down and not only when it > does not have a carrier. > hehe I did ask that question long time ago while adding support for backup ports, at the time wasn't needed for the MLAG case :-) > The change is motivated by a report from a user who expected traffic to > be redirected to the backup port when the primary port was put > administratively down while debugging a network issue. > > Reviewed-by: Petr Machata <[email protected]> > Signed-off-by: Ido Schimmel <[email protected]> > --- > net/bridge/br_forward.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c > index 29097e984b4f..870bdf2e082c 100644 > --- a/net/bridge/br_forward.c > +++ b/net/bridge/br_forward.c > @@ -148,7 +148,8 @@ void br_forward(const struct net_bridge_port *to, > goto out; > > /* redirect to backup link if the destination port is down */ > - if (rcu_access_pointer(to->backup_port) && !netif_carrier_ok(to->dev)) { > + if (rcu_access_pointer(to->backup_port) && > + (!netif_carrier_ok(to->dev) || !netif_running(to->dev))) { > struct net_bridge_port *backup_port; > > backup_port = rcu_dereference(to->backup_port); Acked-by: Nikolay Aleksandrov <[email protected]>