Update applications to remember and close() old Datapaths that may not longer be valid.
Signed-off-by: Victor J. Orlikowski <[email protected]> --- ryu/app/cbench.py | 8 ++++++++ ryu/app/ofctl/service.py | 2 ++ ryu/app/simple_switch.py | 7 ++++++- ryu/app/simple_switch_12.py | 7 ++++++- ryu/app/simple_switch_13.py | 7 ++++++- ryu/app/simple_switch_14.py | 7 ++++++- ryu/app/simple_switch_igmp.py | 7 ++++++- ryu/app/simple_switch_lacp.py | 7 ++++++- ryu/app/simple_switch_snort.py | 7 ++++++- ryu/app/simple_switch_stp.py | 7 ++++++- 10 files changed, 58 insertions(+), 8 deletions(-) diff --git a/ryu/app/cbench.py b/ryu/app/cbench.py index aed83ab..71461ec 100644 --- a/ryu/app/cbench.py +++ b/ryu/app/cbench.py @@ -31,6 +31,7 @@ class Cbench(app_manager.RyuApp): def __init__(self, *args, **kwargs): super(Cbench, self).__init__(*args, **kwargs) + self.dpid_to_dp = {} @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) def packet_in_handler(self, ev): @@ -38,6 +39,13 @@ class Cbench(app_manager.RyuApp): datapath = msg.datapath ofproto = datapath.ofproto + dpid = datapath.id + id2dp_entry = self.dpid_to_dp.get(dpid) + if (id2dp_entry and + (id2dp_entry is not datapath)): + id2dp_entry.close() + dpid_to_dp[dpid] = datapath + match = datapath.ofproto_parser.OFPMatch( ofproto_v1_0.OFPFW_ALL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) diff --git a/ryu/app/ofctl/service.py b/ryu/app/ofctl/service.py index 0ca00c7..19aebd4 100644 --- a/ryu/app/ofctl/service.py +++ b/ryu/app/ofctl/service.py @@ -79,6 +79,8 @@ class OfctlService(app_manager.RyuApp): self.logger.debug('add dpid %s datapath %s new_info %s old_info %s', id, datapath, new_info, old_info) self._switches[id] = new_info + if old_info: + old_info.datapath.close() @set_ev_cls(ofp_event.EventOFPStateChange, DEAD_DISPATCHER) def _handle_dead(self, ev): diff --git a/ryu/app/simple_switch.py b/ryu/app/simple_switch.py index 862b830..c89021e 100644 --- a/ryu/app/simple_switch.py +++ b/ryu/app/simple_switch.py @@ -65,7 +65,12 @@ class SimpleSwitch(app_manager.RyuApp): src = eth.src dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath self.logger.info("packet in %s %s %s %s", dpid, src, dst, msg.in_port) diff --git a/ryu/app/simple_switch_12.py b/ryu/app/simple_switch_12.py index 6895b07..b548464 100644 --- a/ryu/app/simple_switch_12.py +++ b/ryu/app/simple_switch_12.py @@ -64,7 +64,12 @@ class SimpleSwitch12(app_manager.RyuApp): src = eth.src dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath self.logger.info("packet in %s %s %s %s", dpid, src, dst, in_port) diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py index 3e7c598..a71d1d3 100644 --- a/ryu/app/simple_switch_13.py +++ b/ryu/app/simple_switch_13.py @@ -86,7 +86,12 @@ class SimpleSwitch13(app_manager.RyuApp): src = eth.src dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath self.logger.info("packet in %s %s %s %s", dpid, src, dst, in_port) diff --git a/ryu/app/simple_switch_14.py b/ryu/app/simple_switch_14.py index d3151bc..16de4c9 100644 --- a/ryu/app/simple_switch_14.py +++ b/ryu/app/simple_switch_14.py @@ -77,7 +77,12 @@ class SimpleSwitch14(app_manager.RyuApp): src = eth.src dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath self.logger.info("packet in %s %s %s %s", dpid, src, dst, in_port) diff --git a/ryu/app/simple_switch_igmp.py b/ryu/app/simple_switch_igmp.py index b1b014f..7d26c1b 100644 --- a/ryu/app/simple_switch_igmp.py +++ b/ryu/app/simple_switch_igmp.py @@ -67,7 +67,12 @@ class SimpleSwitchIgmp(app_manager.RyuApp): dst = addrconv.mac.bin_to_text(dst_) dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath self.logger.info("packet in %s %s %s %s", dpid, src, dst, msg.in_port) diff --git a/ryu/app/simple_switch_lacp.py b/ryu/app/simple_switch_lacp.py index 3774163..63d6dc0 100644 --- a/ryu/app/simple_switch_lacp.py +++ b/ryu/app/simple_switch_lacp.py @@ -77,7 +77,12 @@ class SimpleSwitchLacp(app_manager.RyuApp): dst = addrconv.mac.bin_to_text(dst_) dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath self.logger.info("packet in %s %s %s %s", dpid, src, dst, msg.in_port) diff --git a/ryu/app/simple_switch_snort.py b/ryu/app/simple_switch_snort.py index 553a8bb..9e0cc3e 100644 --- a/ryu/app/simple_switch_snort.py +++ b/ryu/app/simple_switch_snort.py @@ -117,7 +117,12 @@ class SimpleSwitchSnort(app_manager.RyuApp): src = eth.src dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath # self.logger.info("packet in %s %s %s %s", dpid, src, dst, in_port) diff --git a/ryu/app/simple_switch_stp.py b/ryu/app/simple_switch_stp.py index a86c8a5..8d18432 100644 --- a/ryu/app/simple_switch_stp.py +++ b/ryu/app/simple_switch_stp.py @@ -85,7 +85,12 @@ class SimpleSwitchStp(app_manager.RyuApp): dst, src, _eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) dpid = datapath.id - self.mac_to_port.setdefault(dpid, {}) + m2p_entry = self.mac_to_port.setdefault(dpid, {}) + m2p_datapath = m2p_entry.get('datapath') + if (m2p_datapath and + (m2p_datapath is not datapath)): + m2p_datapath.close() + m2p_entry['datapath'] = datapath self.logger.debug("packet in %s %s %s %s", dpid, haddr_to_str(src), haddr_to_str(dst), -- Best, Victor -- Victor J. Orlikowski <> vjo@[cs.]duke.edu
0001-Update-applications-to-remember-and-close-old-Datapa.patch
Description: 0001-Update-applications-to-remember-and-close-old-Datapa.patch
------------------------------------------------------------------------------ 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=272487151&iu=/4140
_______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
