When the bonding library encounters a flow it hasn't seen before, it assigns it to the active slave and waits for load balancing to move it to a more appropriate place. This commit causes it to first attempt a random slave. --- lib/bond.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/bond.c b/lib/bond.c index e27d5f4..ccd8a07 100644 --- a/lib/bond.c +++ b/lib/bond.c @@ -1379,9 +1379,11 @@ choose_output_slave(const struct bond *bond, const struct flow *flow, case BM_TCP: e = lookup_bond_entry(bond, flow, vlan); if (!e->slave || !e->slave->enabled) { - /* XXX select interface properly. The current interface selection - * is only good for testing the rebalancing code. */ - e->slave = bond->active_slave; + e->slave = CONTAINER_OF(hmap_random_node(&bond->slaves), + struct bond_slave, hmap_node); + if (!e->slave->enabled) { + e->slave = bond->active_slave; + } e->tag = tag_create_random(); } return e->slave; -- 1.7.4.2 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev