git: 020f7f6cf1ff - stable/15 - lacp: fix link state with multiple aggregators
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 06 Jul 2026 01:43:07 UTC
The branch stable/15 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=020f7f6cf1ff2ace74c84dbb1caaf8cd5e71209d
commit 020f7f6cf1ff2ace74c84dbb1caaf8cd5e71209d
Author: Andrew Gallatin <gallatin@FreeBSD.org>
AuthorDate: 2026-05-12 12:52:24 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-07-06 01:35:54 +0000
lacp: fix link state with multiple aggregators
(cherry picked from commit 9f69446d45484c16d2b9b9bf71bbb2fca86cb6e5)
---
sys/net/ieee8023ad_lacp.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sys/net/ieee8023ad_lacp.c b/sys/net/ieee8023ad_lacp.c
index 02aa1aaa0eee..9726b4c4dff8 100644
--- a/sys/net/ieee8023ad_lacp.c
+++ b/sys/net/ieee8023ad_lacp.c
@@ -682,6 +682,7 @@ static void
lacp_disable_distributing(struct lacp_port *lp)
{
struct lacp_aggregator *la = lp->lp_aggregator;
+ struct lacp_aggregator *la_active;
struct lacp_softc *lsc = lp->lp_lsc;
struct lagg_softc *sc = lsc->lsc_softc;
char buf[LACP_LAGIDSTR_MAX+1];
@@ -703,7 +704,6 @@ lacp_disable_distributing(struct lacp_port *lp)
TAILQ_REMOVE(&la->la_ports, lp, lp_dist_q);
la->la_nports--;
- sc->sc_active = la->la_nports;
if (lsc->lsc_active_aggregator == la) {
lacp_suppress_distributing(lsc, la);
@@ -713,6 +713,8 @@ lacp_disable_distributing(struct lacp_port *lp)
}
lp->lp_state &= ~LACP_STATE_DISTRIBUTING;
+ la_active = lsc->lsc_active_aggregator;
+ sc->sc_active = la_active != NULL ? la_active->la_nports : 0;
if_link_state_change(sc->sc_ifp,
sc->sc_active ? LINK_STATE_UP : LINK_STATE_DOWN);
}
@@ -721,6 +723,7 @@ static void
lacp_enable_distributing(struct lacp_port *lp)
{
struct lacp_aggregator *la = lp->lp_aggregator;
+ struct lacp_aggregator *la_active;
struct lacp_softc *lsc = lp->lp_lsc;
struct lagg_softc *sc = lsc->lsc_softc;
char buf[LACP_LAGIDSTR_MAX+1];
@@ -739,7 +742,6 @@ lacp_enable_distributing(struct lacp_port *lp)
KASSERT(la->la_refcnt > la->la_nports, ("aggregator refcnt invalid"));
TAILQ_INSERT_HEAD(&la->la_ports, lp, lp_dist_q);
la->la_nports++;
- sc->sc_active = la->la_nports;
lp->lp_state |= LACP_STATE_DISTRIBUTING;
@@ -750,6 +752,8 @@ lacp_enable_distributing(struct lacp_port *lp)
/* try to become the active aggregator */
lacp_select_active_aggregator(lsc);
+ la_active = lsc->lsc_active_aggregator;
+ sc->sc_active = la_active != NULL ? la_active->la_nports : 0;
if_link_state_change(sc->sc_ifp,
sc->sc_active ? LINK_STATE_UP : LINK_STATE_DOWN);
}