From 49ef3cd65848fb28b9b66572de289ad0270cbeb0 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Tue, 7 Apr 2015 15:44:33 +0900 Subject: [PATCH] of15: Implement OFPBundleCtrlMsg parser TODO: backport to of14 Signed-off-by: YAMAMOTO Takashi Signed-off-by: FUJITA Tomonori --- ryu/ofproto/ofproto_v1_5_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_5_parser.py b/ryu/ofproto/ofproto_v1_5_parser.py index 3c9d9983..b351ebe4 100644 --- a/ryu/ofproto/ofproto_v1_5_parser.py +++ b/ryu/ofproto/ofproto_v1_5_parser.py @@ -5957,6 +5957,7 @@ class OFPSetAsync(MsgBase): self.buf += bin_props +@_register_parser @_set_msg_type(ofproto.OFPT_BUNDLE_CONTROL) class OFPBundleCtrlMsg(MsgBase): """ @@ -5996,7 +5997,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_ @@ -6013,6 +6015,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 76d023f1..3da5cd72 100644 --- a/ryu/tests/unit/ofproto/test_parser.py +++ b/ryu/tests/unit/ofproto/test_parser.py @@ -145,7 +145,7 @@ implemented = { ofproto_v1_5.OFPT_ROLE_STATUS: (True, False), ofproto_v1_5.OFPT_TABLE_STATUS: (True, False), ofproto_v1_5.OFPT_REQUESTFORWARD: (False, True), - ofproto_v1_5.OFPT_BUNDLE_CONTROL: (False, True), + ofproto_v1_5.OFPT_BUNDLE_CONTROL: (True, True), ofproto_v1_5.OFPT_BUNDLE_ADD_MESSAGE: (False, True), }, }