In response to a request on this mailing list from Zhao Jun, here’s a patch 
that:
1) Creates an EventSwitchReconnected class for ryu.topology
2) Sends said event at the appropriate time
3) Handles the case, for the DEAD_DISPATCHER state, where the _get_switch() 
method returns None.

Signed-off-by: Victor J. Orlikowski <[email protected]>

diff --git a/ryu/topology/event.py b/ryu/topology/event.py
index c54152b..e7b682c 100644
--- a/ryu/topology/event.py
+++ b/ryu/topology/event.py
@@ -41,6 +41,11 @@ class EventSwitchLeave(EventSwitchBase):
         super(EventSwitchLeave, self).__init__(switch)
 
 
+class EventSwitchReconnected(EventSwitchBase):
+    def __init__(self, switch):
+        super(EventSwitchReconnected, self).__init__(switch)
+
+
 class EventPortBase(event.EventBase):
     def __init__(self, port):
         super(EventPortBase, self).__init__()
diff --git a/ryu/topology/switches.py b/ryu/topology/switches.py
index 5fe5d26..6e15afb 100644
--- a/ryu/topology/switches.py
+++ b/ryu/topology/switches.py
@@ -612,6 +612,8 @@ class Switches(app_manager.RyuApp):
             # Do not send event while dp has multiple connections.
             if not dp_multiple_conns:
                 self.send_event_to_observers(event.EventSwitchEnter(switch))
+            else:
+                
self.send_event_to_observers(event.EventSwitchReconnected(switch))
 
             if not self.link_discovery:
                 return
@@ -668,15 +670,17 @@ class Switches(app_manager.RyuApp):
             switch = self._get_switch(dp.id)
             self._unregister(dp)
             LOG.debug('unregister %s', switch)
-            self.send_event_to_observers(event.EventSwitchLeave(switch))
+            if switch:
+                self.send_event_to_observers(event.EventSwitchLeave(switch))
 
             if not self.link_discovery:
                 return
 
-            for port in switch.ports:
-                if not port.is_reserved():
-                    self.ports.del_port(port)
-                    self._link_down(port)
+            if switch:
+                for port in switch.ports:
+                    if not port.is_reserved():
+                        self.ports.del_port(port)
+                        self._link_down(port)
             self.lldp_event.set()
 
     @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)

Best,
Victor
--
Victor J. Orlikowski <> vjo@[cs.]duke.edu

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to