diff options
-rw-r--r-- | ryu/controller/dpset.py | 4 | ||||
-rw-r--r-- | ryu/controller/ofp_handler.py | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/ryu/controller/dpset.py b/ryu/controller/dpset.py index c172aec7..0bb3b988 100644 --- a/ryu/controller/dpset.py +++ b/ryu/controller/dpset.py @@ -163,7 +163,9 @@ class DPSet(app_manager.RyuApp): def switch_features_handler(self, ev): msg = ev.msg datapath = msg.datapath - datapath.ports = msg.ports + # ofp_handler.py does the following so we could remove... + if datapath.ofproto.OFP_VERSION < 0x04: + datapath.ports = msg.ports @set_ev_cls(ofp_event.EventOFPPortStatus, handler.MAIN_DISPATCHER) def port_status_handler(self, ev): diff --git a/ryu/controller/ofp_handler.py b/ryu/controller/ofp_handler.py index 84e4d740..642cec84 100644 --- a/ryu/controller/ofp_handler.py +++ b/ryu/controller/ofp_handler.py @@ -191,6 +191,8 @@ class OFPHandler(ryu.base.app_manager.RyuApp): # while. if datapath.ofproto.OFP_VERSION < 0x04: datapath.ports = msg.ports + else: + datapath.ports = {} ofproto = datapath.ofproto ofproto_parser = datapath.ofproto_parser @@ -200,6 +202,23 @@ class OFPHandler(ryu.base.app_manager.RyuApp): ) datapath.send_msg(set_config) + if datapath.ofproto.OFP_VERSION < 0x04: + self.logger.debug('move onto main mode') + ev.msg.datapath.set_state(MAIN_DISPATCHER) + else: + port_desc = datapath.ofproto_parser.OFPPortDescStatsRequest( + datapath, 0) + datapath.send_msg(port_desc) + + @set_ev_handler(ofp_event.EventOFPPortDescStatsReply, CONFIG_DISPATCHER) + def multipart_reply_handler(self, ev): + msg = ev.msg + datapath = msg.datapath + for port in msg.body: + datapath.ports[port.port_no] = port + + if msg.flags & datapath.ofproto.OFPMPF_REPLY_MORE: + return self.logger.debug('move onto main mode') ev.msg.datapath.set_state(MAIN_DISPATCHER) |