This series fixes two issues in the bonding 802.3ad implementation related to port state management and churn detection:
1. When disabling a port, we need to set AD_RX_PORT_DISABLED to ensure proper state machine transitions, preventing ports from getting stuck in AD_RX_CURRENT state. 2. The ad_churn_machine implementation is restructured to follow IEEE 802.1AX-2014 specifications correctly. The current implementation has several issues: it doesn't transition to "none" state immediately when synchronization is achieved, and can get stuck in churned state in multi-aggregator scenarios. 3. Selftests are enhanced to validate both mux state machine and churn state logic under aggregator selection and failover scenarios. These changes ensure proper LACP state machine behavior and fix issues where ports could remain in incorrect states during aggregator failover. v2: * The changes are large and not urgent. Post to net-next as Paolo suggested * set AD_RX_PORT_DISABLED only in ad_agg_selection_logic to avoid side effect. (Paolo Abeni) * remove actor_churn as it can only be true when the state is ACTOR_CHURN (Paolo Abeni) * remove AD_PORT_CHURNED since we don't need it anywhere (Paolo Abeni) * I didn't add new helper for ad_churn_machine() as it looks not help much. v1: https://lore.kernel.org/netdev/[email protected] Hangbin Liu (3): bonding: set AD_RX_PORT_DISABLED when disabling a port bonding: restructure ad_churn_machine selftests: bonding: add mux and churn state testing drivers/net/bonding/bond_3ad.c | 97 ++++++++++++++----- .../selftests/drivers/net/bonding/Makefile | 2 +- ...nd_lacp_prio.sh => bond_lacp_ad_select.sh} | 73 ++++++++++++++ 3 files changed, 146 insertions(+), 26 deletions(-) rename tools/testing/selftests/drivers/net/bonding/{bond_lacp_prio.sh => bond_lacp_ad_select.sh} (64%) -- 2.50.1
