bond: Revalidate flows when bond_is_tcp_hash() changes;
authorEthan Jackson <ethan@nicira.com>
Wed, 13 Apr 2011 01:28:04 +0000 (18:28 -0700)
committerEthan Jackson <ethan@nicira.com>
Wed, 13 Apr 2011 20:44:40 +0000 (13:44 -0700)
If LACP causes the return of bond_is_tcp_hash to change for
whatever reason, all flows should be revalidated because they will
have a different hash result.

lib/bond.c

index b651d39917bc1f92ff927c7d684637aab84e802b..343c334b6013dc9704a7e5b703384c57df814b09 100644 (file)
@@ -456,6 +456,7 @@ void
 bond_run(struct bond *bond, struct tag_set *tags)
 {
     struct bond_slave *slave;
+    bool is_tcp_hash = bond_is_tcp_hash(bond);
 
     /* Update link status. */
     if (bond->detect == BLSM_CARRIER
@@ -490,6 +491,14 @@ bond_run(struct bond *bond, struct tag_set *tags)
         bond->next_fake_iface_update = time_msec() + 1000;
     }
 
+    if (is_tcp_hash != bond_is_tcp_hash(bond)) {
+        struct bond_slave *slave;
+
+        HMAP_FOR_EACH (slave, hmap_node, &bond->slaves) {
+            tag_set_add(tags, slave->tag);
+        }
+    }
+
     /* Invalidate any tags required by  */
     tag_set_union(tags, &bond->unixctl_tags);
     tag_set_init(&bond->unixctl_tags);