mac-learning: Fix inverted logic in is_learning_vlan().
authorBen Pfaff <blp@nicira.com>
Fri, 22 Jul 2011 00:03:03 +0000 (17:03 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 27 Jul 2011 00:09:07 +0000 (17:09 -0700)
When a bit is set in flood_vlans, that VLAN must be flooded, but the logic
here was reversed in the case where there were any flooded VLANs at all.
Thus, if a single VLAN was configured to be flooded, all VLANs except that
one were actually flooded.

The common case where no VLANs were to be flooded was handled correctly.

Reported-by: David Tsai <dtsai@nicira.com>
lib/mac-learning.c

index bb84cfcc0b1ecba84db378c96041ea97ce3d84e0..efd1dd4b8b052dfdfee62598eae7c3baa854eeff 100644 (file)
@@ -149,7 +149,7 @@ mac_learning_set_flood_vlans(struct mac_learning *ml,
 static bool
 is_learning_vlan(const struct mac_learning *ml, uint16_t vlan)
 {
-    return vlan_bitmap_contains(ml->flood_vlans, vlan);
+    return !ml->flood_vlans || !bitmap_is_set(ml->flood_vlans, vlan);
 }
 
 /* Returns true if 'src_mac' may be learned on 'vlan' for 'ml'.