diff --git a/AUTHORS b/AUTHORS index 17179bc7eb9..138cebbc80b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -127,6 +127,7 @@ Thomas Graf tgraf@redhat.com Thomas Lacroix thomas.lacroix@citrix.com Todd Deshane deshantm@gmail.com Tom Everman teverman@google.com +Torgny Lindberg torgny.lindberg@ericsson.com Tsvi Slonim tsvi@toroki.com Tyler Coumbes coumbes@gmail.com Valient Gough vgough@pobox.com diff --git a/lib/lacp.c b/lib/lacp.c index 0d30e518b90..d006d7b56ea 100644 --- a/lib/lacp.c +++ b/lib/lacp.c @@ -588,11 +588,13 @@ lacp_update_attached(struct lacp *lacp) OVS_REQUIRES(mutex) { struct slave *lead, *slave; struct lacp_info lead_pri; + bool lead_enable; static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 10); lacp->update = false; lead = NULL; + lead_enable = false; HMAP_FOR_EACH (slave, node, &lacp->slaves) { struct lacp_info pri; @@ -615,9 +617,14 @@ lacp_update_attached(struct lacp *lacp) OVS_REQUIRES(mutex) slave->attached = true; slave_get_priority(slave, &pri); + bool enable = slave_may_enable__(slave); - if (!lead || memcmp(&pri, &lead_pri, sizeof pri) < 0) { + if (!lead + || enable > lead_enable + || (enable == lead_enable + && memcmp(&pri, &lead_pri, sizeof pri) < 0)) { lead = slave; + lead_enable = enable; lead_pri = pri; } }