[ovs-dev] [PATCH RFC v2] lacp: Prefer slaves with running partner when selecting lead
zoltan.kiss at citrix.com
Thu Aug 7 15:19:17 UTC 2014
On 05/08/14 22:16, Flavio Leitner wrote:
> On Mon, Aug 04, 2014 at 12:08:48PM -0700, Andy Zhou wrote:
>> Sorry it took a while to get back to you. I am just coming up to
>> speed on OVS LACP implementation, so my understanding may not be
>> correct. Please feel free to point them out If I am wrong.
>> According to wikipeida MC-LAG entry, there is no standard for it, they
>> are mostly designed and implemented by vendors.
>> After reading through the commit message, and comparing with the
>> 802.1AX spec, I feel this seems like there is a bug in the MC-LAG
>> implementation/configuration issue. When the partner on port A comes
>> back again, should it wait for MC-LAG sync before using the default
>> profile to exchange states with OVS?
> I agree that it sounds like a problem in the MC-LAG. However, I also
> agree that OVS could do better.
> The aggregation selection policy is somewhat a gray area not defined
> in any spec. The bonding driver offers ad_select= parameter which
> allows to switch to the new aggregator only if, for instance, all the
> ports are down in an active aggregator.
> The Team driver implementing 802.3ad also provides the policy selection
> parameter. The default is to consider the prio in the LACPDU, but you
> can also tell to not select any other aggregator if the current one is
> still usable, or per bandwidth or per number of ports available.
> My suggestion if we want to change something is to stick with bonding
> driver default behavior regarding to select a new aggregator:
> table or 0
> The active aggregator is chosen by largest aggregate
> Reselection of the active aggregator occurs only when all
> slaves of the active aggregator are down or the active
> aggregator has no slaves.
> This is the default value.
As far as I understood, there isn't really a concept of aggregator in
OVS, but "lead" in lacp_update_attached() is something similar. However
it is recalculated at every iteration, and it is simply just the slave
with the lower priority.
Do you mean we should save "lead" into a new field in struct lacp, and
select a new one only if lacp_partner_ready(lead) == false?
More information about the dev