summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIWASE Yusuke <iwase.yusuke0@gmail.com>2016-07-25 14:41:07 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-07-27 14:31:27 +0900
commit3c0bd5b024eacf60d2a77b40608db7e81d110a32 (patch)
treee550f1bb2ae3e3aaa9004e78afb40045b1261086
parentf52bb7007ec6c8ec94a90b2d4c4296d23936dd24 (diff)
stplib: Handle the port state not changed events
According to OpenFlow Spec 1.3.5, OFPT_PORT_STATUS messages with the reason value OFPPR_MODIFY should be sent the BOTH port state and config have changed. On the other hand, OVS does not send OFPT_PORT_STATUS messages when the port config has changed and only sends when the port state has changed. But, other switch implementation, e.g. Lagopus, sends messages when the both port state and config have changed. Therefore, simple_switch_stp_13.py will overproduce the topology recalculation events and will fail to recalculate the topology. This patch checks the port state in OFPT_PORT_STATUS messages and ignores the message if the port state is not changed. Reported-by: Hong Panha <c011361065@edu.teu.ac.jp> Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/lib/stplib.py5
1 files changed, 5 insertions, 0 deletions
diff --git a/ryu/lib/stplib.py b/ryu/lib/stplib.py
index de3cced8..beb68e14 100644
--- a/ryu/lib/stplib.py
+++ b/ryu/lib/stplib.py
@@ -297,6 +297,11 @@ class Stp(app_manager.RyuApp):
bridge.port_delete(port.port_no)
else:
assert reason is dp.ofproto.OFPPR_MODIFY
+ if bridge.dp.ports[port.port_no].state == port.state:
+ # Do nothing
+ self.logger.debug('[port=%d] Link status not changed.',
+ port.port_no, extra=dpid_str)
+ return
if link_down_flg:
self.logger.info('[port=%d] Link down.',
port.port_no, extra=dpid_str)