File 0001-lacp-gate-port-activation-with-link-watcher-state.patch of Package libteam
From d3c0154455438e45fd6b543948d0f4d4114bebc0 Mon Sep 17 00:00:00 2001
From: Clemens Famulla-Conrad <cfamullaconrad@suse.com>
Date: Thu, 5 Mar 2026 18:30:23 +0100
Subject: [PATCH] lacp: gate port activation with link-watcher state
Ensure the LACP runner respects link-watcher configurations (like delay_up)
by checking the link-watcher status before enabling a port. Additionally,
subscribe to port_link_changed events to ensure LACP re-evaluates and
activates ports once the link-watcher delay expires.
---
teamd/teamd_runner_lacp.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c
index 5601278..e9cf909 100644
--- a/teamd/teamd_runner_lacp.c
+++ b/teamd/teamd_runner_lacp.c
@@ -333,7 +333,8 @@ static int lacp_port_should_be_enabled(struct lacp_port *lacp_port)
struct lacp *lacp = lacp_port->lacp;
if (lacp_port_selected(lacp_port) &&
- lacp_port->agg_lead == lacp->selected_agg_lead)
+ lacp_port->agg_lead == lacp->selected_agg_lead &&
+ teamd_link_watch_port_up(lacp_port->ctx, lacp_port->tdport))
return true;
return false;
}
@@ -999,7 +1000,7 @@ static enum lacp_port_state lacp_port_get_state(struct lacp_port *lacp_port)
static int lacp_port_link_update(struct lacp_port *lacp_port)
{
struct team_port *team_port = lacp_port->tdport->team_port;
- bool linkup = team_is_port_link_up(team_port);
+ bool linkup = teamd_link_watch_port_up(lacp_port->ctx, lacp_port->tdport);
uint32_t speed = team_get_port_speed(team_port);
uint8_t duplex = team_get_port_duplex(team_port);
int err;
@@ -1389,6 +1390,7 @@ static const struct teamd_event_watch_ops lacp_event_watch_ops = {
.port_added = lacp_event_watch_port_added,
.port_removed = lacp_event_watch_port_removed,
.port_changed = lacp_event_watch_port_changed,
+ .port_link_changed = lacp_event_watch_port_changed,
.admin_state_changed = lacp_event_watch_admin_state_changed,
};
--
2.51.0