diff options
author | KONDOH Tasuku <kondoh.tasuku@po.ntts.co.jp> | 2013-02-26 11:33:37 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-02-27 00:23:05 +0900 |
commit | 0fab6cdf2f1267c0cedcf874cbaf49b615f8ef77 (patch) | |
tree | 6d731870ac9b4a7bb33ff6e4e696518498a7e3e7 | |
parent | e1c7f737f53141279ffb35d3cedb8c4da7bfa78d (diff) |
of1.2: fix OFPErrorExperimenterMsg
- add OFPErrorExperimenterMsg.
Signed-off-by: KONDOH Tasuku <kondoh.tasuku@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/ofproto/ofproto_v1_2_parser.py | 26 | ||||
-rw-r--r-- | ryu/tests/unit/ofproto/test_parser_v12.py | 23 |
2 files changed, 49 insertions, 0 deletions
diff --git a/ryu/ofproto/ofproto_v1_2_parser.py b/ryu/ofproto/ofproto_v1_2_parser.py index 21c36a33..61618a88 100644 --- a/ryu/ofproto/ofproto_v1_2_parser.py +++ b/ryu/ofproto/ofproto_v1_2_parser.py @@ -69,6 +69,12 @@ class OFPErrorMsg(MsgBase): @classmethod def parser(cls, datapath, version, msg_type, msg_len, xid, buf): + type_, = struct.unpack_from('!H', buffer(buf), + ofproto_v1_2.OFP_HEADER_SIZE) + if type_ == ofproto_v1_2.OFPET_EXPERIMENTER: + return OFPErrorExperimenterMsg.parser(datapath, version, msg_type, + msg_len, xid, buf) + msg = super(OFPErrorMsg, cls).parser(datapath, version, msg_type, msg_len, xid, buf) msg.type, msg.code = struct.unpack_from( @@ -84,6 +90,26 @@ class OFPErrorMsg(MsgBase): self.buf += self.data +class OFPErrorExperimenterMsg(MsgBase): + def __init__(self, datapath): + super(OFPErrorExperimenterMsg, self).__init__(datapath) + self.type = None + self.exp_type = None + self.experimenter = None + self.data = None + + @classmethod + def parser(cls, datapath, version, msg_type, msg_len, xid, buf): + cls.cls_msg_type = msg_type + msg = super(OFPErrorExperimenterMsg, cls).parser( + datapath, version, msg_type, msg_len, xid, buf) + msg.type, msg.exp_type, msg.experimenter = struct.unpack_from( + ofproto_v1_2.OFP_ERROR_EXPERIMENTER_MSG_PACK_STR, msg.buf, + ofproto_v1_2.OFP_HEADER_SIZE) + msg.data = msg.buf[ofproto_v1_2.OFP_ERROR_EXPERIMENTER_SIZE:] + return msg + + @_register_parser @_set_msg_type(ofproto_v1_2.OFPT_ECHO_REQUEST) class OFPEchoRequest(MsgBase): diff --git a/ryu/tests/unit/ofproto/test_parser_v12.py b/ryu/tests/unit/ofproto/test_parser_v12.py index 4055af73..f8580c0e 100644 --- a/ryu/tests/unit/ofproto/test_parser_v12.py +++ b/ryu/tests/unit/ofproto/test_parser_v12.py @@ -763,6 +763,29 @@ class TestOFPErrorMsg(unittest.TestCase): data = 'Error Message.' self._test_parser(type_, code, data) + def test_parser_experimenter(self): + type_ = 0xffff + exp_type = 1 + experimenter = 1 + data = 'Error Experimenter Message.' + + # OFP_ERROR_EXPERIMENTER_MSG_PACK_STR = '!HHI' + fmt = ofproto_v1_2.OFP_ERROR_EXPERIMENTER_MSG_PACK_STR + buf = self.buf + pack(fmt, type_, exp_type, experimenter) \ + + data + + res = OFPErrorMsg.parser(object, self.version, self.msg_type, + self.msg_len, self.xid, buf) + + eq_(res.version, self.version) + eq_(res.msg_type, self.msg_type) + eq_(res.msg_len, self.msg_len) + eq_(res.xid, self.xid) + eq_(res.type, type_) + eq_(res.exp_type, exp_type) + eq_(res.experimenter, experimenter) + eq_(res.data, data) + def _test_serialize(self, type_, code, data): # OFP_ERROR_MSG_PACK_STR = '!HH' fmt = ofproto_v1_2.OFP_ERROR_MSG_PACK_STR |