lacp: arm the partner timeout from our own LACP_Timeout

The receive machine armed current_while from the partner's TIMEOUT bit,
so against a partner on the slow rate a port whose LACPDUs stopped with
the link still up stayed in the trunk for the long timeout, two minutes.
802.3ad 43.4.12 starts the timer from the actor's own LACP_Timeout, and
we always advertise the short one: the partner sends every second and is
let go after the short timeout.

Sandbox T23 plays a slow-rate partner that goes quiet and fails on the
code before this.
This commit is contained in:
d00f committed 2026-10-12 16:27:19 +02:00
1 parent c3b4cc893b
commit edf6351d85
2 files changed
+18 -2

No files matched your search

+1 -2
View File
@@ -311,8 +311,7 @@ void lacp_in(void) __banked
/* Receive machine -> CURRENT, (re)arm partner timeout (43.4.12) */
lacp_rx_state[port] = LACP_RX_CURRENT;
lacp_timeout[port] = (LACP_I->actor.state & LACP_STATE_TIMEOUT)
? LACP_SHORT_TIMEOUT : LACP_LONG_TIMEOUT;
lacp_timeout[port] = LACP_SHORT_TIMEOUT;
/* Elect this LAG's aggregator partner system on first contact (43.4.14) */
if (!lacp_agg_valid[lag]) {