Stable bonds are used in such specialized cases that it doesn't
make sense to require LACP negotiations to use L4 hashing.
static bool
bond_is_tcp_hash(const struct bond *bond)
{
static bool
bond_is_tcp_hash(const struct bond *bond)
{
- return (bond->balance == BM_TCP || bond->balance == BM_STABLE)
- && bond->lacp_negotiated;
+ return (bond->balance == BM_TCP && bond->lacp_negotiated)
+ || bond->balance == BM_STABLE;
<p>Attempts to always assign a given flow to the same slave
consistently. In an effort to maintain stability, no load
balancing is done. Uses a similar hashing strategy to
<p>Attempts to always assign a given flow to the same slave
consistently. In an effort to maintain stability, no load
balancing is done. Uses a similar hashing strategy to
- <code>balance-tcp</code>, falling back to <code>balance-slb</code>
- style hashing when LACP negotiations are unsuccessful.</p>
+ <code>balance-tcp</code>, always taking into account L3 and L4
+ fields even if LACP negotiations are unsuccessful. </p>
<p>Slave selection decisions are made based on
<code>bond-stable-id</code> if set. Otherwise, OpenFlow port
number is used. Decisions are consistent across all ovs-vswitchd
<p>Slave selection decisions are made based on
<code>bond-stable-id</code> if set. Otherwise, OpenFlow port
number is used. Decisions are consistent across all ovs-vswitchd