Rework STP implementation in controller.
authorBen Pfaff <blp@nicira.com>
Tue, 14 Oct 2008 23:48:47 +0000 (16:48 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 14 Oct 2008 23:48:47 +0000 (16:48 -0700)
commit37c94b45fdb66b9c2e75d2d5857786e4d4ce74bc
tree7ba7ecdf21ee854fc5b79728bf6381faa2716929
parent2c5272bc28b515e5bf17d4d622113fa25f78d574
Rework STP implementation in controller.

Before, we tried to use the port configuration bits to implement STP; e.g.
if a port was in LISTEN state we turned off sending and receiving frame
other than BPDUs.  Unfortunately this interacts very badly with in-band
control: when the switch connects to the controller, it can be connected
to the controller over a port that is not in FORWARD, and so then the
controller disabled that port, and the connection eventually dropped when
an echo request/reply failed to get through.

Now, we implement STP by querying the flows on the switch and killing
off the ones that STP does not allow.  This works much better because,
although we still kill off the in-band control connection, the in-band
hook in secchan is then able to resurrect it.

--no-stp is still the default since this has not been tested very much.
controller/controller.c
include/learning-switch.h
lib/learning-switch.c
lib/stp.c
secchan/secchan.c