bridge: Avoid flushing entire MAC learning table for common operations.
authorBen Pfaff <blp@nicira.com>
Fri, 18 Mar 2011 22:42:29 +0000 (15:42 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 22 Mar 2011 16:57:25 +0000 (09:57 -0700)
commitd534627818f126982e1d1aadf8919762de14d409
treeab1b4322999e145f6b4bd25d2545008ba7227ed5
parent356180a825c94314f3d1667003e64526d1b69da5
bridge: Avoid flushing entire MAC learning table for common operations.

Adding and removing ports is fairly common in a virtual environment,
because it happens whenever a VM boots or shuts down.  It is best to
avoid flushing the whole MAC learning table when that happens, because
that means that, briefly, every packet will get flooded, wasting CPU cycles
and network bandwidth.

This commit breaks flushing the MAC table out of bridge_flush().  Instead,
each caller is now responsible for flushing the MAC table if it is
necessary.  In a few cases, no flushing was necessary, so those callers
were not modified.  In the case of removing a port or modifying its VLAN
assignments, it is necessary to expire all of the MAC learning entries
associated with that port, so this commit does that.  Finally, some
operations do require a MAC learning flush but they are rare enough that
in my opinion it's not worth taking care to avoid a MAC table flush.

Bug #891.
vswitchd/bridge.c