Thu, Aug 20, 2026 at 12:53:59AM +0200, anisha@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@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?
libteam@lists.fedorahosted.org