Thu, Aug 20, 2026 at 12:53:59AM +0200, anisha(a)nexthop.ai wrote:
>Add an "independent_mode" option to the LACP runner that decouples the
>COLLECTING and DISTRIBUTING states so an external control plane can drive
>the data path (make-before-break).
>
>In independent mode a member advertises COLLECTING only after the control
>plane confirms local ingress is programmed, and DISTRIBUTING only once the
>partner is collecting. The confirm handshake is fenced by a monotonic
>request epoch (collecting_request_id / collecting_confirm): the control
>plane echoes back the request id it programmed for, and teamd latches the
>confirm only if it matches the current epoch, so a confirm computed for a
>superseded selection episode (e.g. one that raced a link flap) is rejected.
>The confirmed epoch persists as the request id advances across self-heal so
>a stale confirmation stays visible to the control plane.
>
>A self-contained test suite (scripts/team_lacp_independent_test.py)
>exercises the make-before-break lifecycle, multi-member and
>aggregator-reselection behaviour, and the epoch fencing.
>
>Signed-off-by: Anisha Halwai <anisha(a)nexthop.ai>
>---
> man/teamd.conf.5 | 12 +
> scripts/team_lacp_independent_test.py | 512 ++++++++++++++++++++++++++
> teamd/teamd_runner_lacp.c | 231 +++++++++++-
> 3 files changed, 754 insertions(+), 1 deletion(-)
> create mode 100755 scripts/team_lacp_independent_test.py
In general, looks fine. Couple of nits:
1) could you split the tests to be separate patch?
2) not sure about the naming. Certainly don't like "mode" as it confuses
with the kernel "mode". Perhaps something like "cd_decoupled",
"col_dist_decoupled", or something limilar?