Copied from of15 implementation.

Signed-off-by: IWAMOTO Toshihiro <iwam...@valinux.co.jp>
---
 ryu/ofproto/ofproto_v1_4_parser.py    | 23 ++++++++++++++++++++++-
 ryu/tests/unit/ofproto/test_parser.py |  2 +-
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/ryu/ofproto/ofproto_v1_4_parser.py 
b/ryu/ofproto/ofproto_v1_4_parser.py
index f26075c0..f927fdba 100644
--- a/ryu/ofproto/ofproto_v1_4_parser.py
+++ b/ryu/ofproto/ofproto_v1_4_parser.py
@@ -5598,6 +5598,7 @@ class OFPSetAsync(MsgBase):
         self.buf += bin_props
 
 
+@_register_parser
 @_set_msg_type(ofproto.OFPT_BUNDLE_CONTROL)
 class OFPBundleCtrlMsg(MsgBase):
     """
@@ -5637,7 +5638,8 @@ class OFPBundleCtrlMsg(MsgBase):
                                               [ofp.OFPBF_ATOMIC], [])
             datapath.send_msg(req)
     """
-    def __init__(self, datapath, bundle_id, type_, flags, properties):
+    def __init__(self, datapath, bundle_id=None, type_=None, flags=None,
+                 properties=None):
         super(OFPBundleCtrlMsg, self).__init__(datapath)
         self.bundle_id = bundle_id
         self.type = type_
@@ -5654,6 +5656,25 @@ class OFPBundleCtrlMsg(MsgBase):
                       self.type, self.flags)
         self.buf += bin_props
 
+    @classmethod
+    def parser(cls, datapath, version, msg_type, msg_len, xid, buf):
+        msg = super(OFPBundleCtrlMsg, cls).parser(datapath, version,
+                                                  msg_type, msg_len,
+                                                  xid, buf)
+        (bundle_id, type_, flags) = struct.unpack_from(
+            ofproto.OFP_BUNDLE_CTRL_MSG_PACK_STR, buf,
+            ofproto.OFP_HEADER_SIZE)
+        msg.bundle_id = bundle_id
+        msg.type = type_
+        msg.flags = flags
+        msg.properties = []
+        rest = msg.buf[ofproto.OFP_BUNDLE_CTRL_MSG_SIZE:]
+        while rest:
+            p, rest = OFPBundleProp.parse(rest)
+            msg.properties.append(p)
+
+        return msg
+
 
 @_set_msg_type(ofproto.OFPT_BUNDLE_ADD_MESSAGE)
 class OFPBundleAddMsg(MsgInMsgBase):
diff --git a/ryu/tests/unit/ofproto/test_parser.py 
b/ryu/tests/unit/ofproto/test_parser.py
index 2f9061cc..081500ad 100644
--- a/ryu/tests/unit/ofproto/test_parser.py
+++ b/ryu/tests/unit/ofproto/test_parser.py
@@ -118,7 +118,7 @@ implemented = {
         ofproto_v1_4.OFPT_ROLE_STATUS: (True, False),
         ofproto_v1_4.OFPT_TABLE_STATUS: (True, False),
         ofproto_v1_4.OFPT_REQUESTFORWARD: (True, True),
-        ofproto_v1_4.OFPT_BUNDLE_CONTROL: (False, True),
+        ofproto_v1_4.OFPT_BUNDLE_CONTROL: (True, True),
         ofproto_v1_4.OFPT_BUNDLE_ADD_MESSAGE: (False, True),
     },
     6: {
-- 
2.11.0


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to