• Jay Vosburgh's avatar
    bonding: fix 802.3ad aggregator reselection · 0622cab0
    Jay Vosburgh authored
    Since commit 7bb11dc9 ("bonding: unify all places where
    actor-oper key needs to be updated."), the logic in bonding to handle
    selection between multiple aggregators has not functioned.
    
    	This affects only configurations wherein the bonding slaves
    connect to two discrete aggregators (e.g., two independent switches, each
    with LACP enabled), thus creating two separate aggregation groups within a
    single bond.
    
    	The cause is a change in 7bb11dc9 to no longer set
    AD_PORT_BEGIN on a port after a link state change, which would cause the
    port to be reselected for attachment to an aggregator as if were newly
    added to the bond.  We cannot restore the prior behavior, as it
    contradicts IEEE 802.1AX 5.4.12, which requires ports that "become
    inoperable" (lose carrier, setting port_enabled=false as per 802.1AX
    5.4.7) to remain selected (i.e., assigned to the aggregator).  As the port
    now remains selected, the aggregator selection logic is not invoked.
    
    	A side effect of this change is that aggregators in bonding will
    now contain ports that are link down.  The aggregator selection logic
    does not currently handle this situation correctly, causing incorrect
    aggregator selection.
    
    	This patch makes two changes to repair the aggregator selection
    logic in bonding to function as documented and within the confines of the
    standard:
    
    	First, the aggregator selection and related logic now utilizes the
    number of active ports per aggregator, not the number of selected ports
    (as some selected ports may be down).  The ad_select "bandwidth" and
    "count" options only consider ports that are link up.
    
    	Second, on any carrier state change of any slave, the aggregator
    selection logic is explicitly called to insure the correct aggregator is
    active.
    Reported-by: default avatarVeli-Matti Lintu <veli-matti.lintu@opinsys.fi>
    Fixes: 7bb11dc9 ("bonding: unify all places where actor-oper key needs to be updated.")
    Signed-off-by: default avatarJay Vosburgh <jay.vosburgh@canonical.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0622cab0
bond_3ad.c 80.5 KB