summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-08-06 08:56:25 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-08-06 08:56:25 +0900
commit0bec11600bfb82ae12bed83b7c0c5049cfd49c4e (patch)
tree7225b2df7aeefa42ec4260baf9737962cc2e2a19
parent7f6bb8c18c5feb0c75dd59e849e786d38c66108a (diff)
dpset: support OF1.3
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Tested-by: Satoshi Kobayashi <satoshi-k@stratosphere.co.jp>
-rw-r--r--ryu/controller/dpset.py4
-rw-r--r--ryu/controller/ofp_handler.py19
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)