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>
This commit is contained in:
KONDOH Tasuku 2013-02-26 11:33:37 +09:00 committed by FUJITA Tomonori
parent e1c7f737f5
commit 0fab6cdf2f
2 changed files with 49 additions and 0 deletions

View File

@ -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):

View File

@ -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