- add OFPErrorExperimenterMsg.

Signed-off-by: KONDOH Tasuku <[email protected]>
---
 ryu/ofproto/ofproto_v1_2_parser.py        |   26 ++++++++++++++++++++++++++
 ryu/tests/unit/ofproto/test_parser_v12.py |   23 +++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/ryu/ofproto/ofproto_v1_2_parser.py 
b/ryu/ofproto/ofproto_v1_2_parser.py
index 21c36a3..61618a8 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 4055af7..f8580c0 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
-- 
1.7.9.5



------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to