diff options
author | Minoru TAKAHASHI <takahashi.minoru7@gmail.com> | 2016-01-21 13:31:54 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-01-21 23:01:16 +0900 |
commit | 97ebd2fc56fc5670fe3ecd89bdd3aad02b1ab322 (patch) | |
tree | 1c96604e3adbd3457c3a14554e7151011b5f9bb7 | |
parent | dbbd05f7bb7c967387da1d24704d1ed8fc1f7f26 (diff) |
of14_parser: unify OFPActionExperimenter implementation
Currently, there is different OFPActionExperimenter implementation of between of_parser_v14 and v13/5.
Because the implementation of v13/5 is better than v14, this patch fixes to of_parser_v14 for unification the implementation.
Signed-off-by: Minoru TAKAHASHI <takahashi.minoru7@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
3 files changed, 39 insertions, 9 deletions
diff --git a/ryu/ofproto/ofproto_v1_4_parser.py b/ryu/ofproto/ofproto_v1_4_parser.py index 72bd212e..53d3f1e5 100644 --- a/ryu/ofproto/ofproto_v1_4_parser.py +++ b/ryu/ofproto/ofproto_v1_4_parser.py @@ -26,7 +26,9 @@ from ryu.lib.pack_utils import msg_pack_into from ryu import utils from ryu.ofproto.ofproto_parser import StringifyMixin, MsgBase, MsgInMsgBase, msg_str_attr from ryu.ofproto import ether +from ryu.ofproto import nx_actions from ryu.ofproto import ofproto_parser +from ryu.ofproto import ofproto_common from ryu.ofproto import ofproto_v1_4 as ofproto _MSG_PARSERS = {} @@ -4987,12 +4989,11 @@ class OFPActionExperimenter(OFPAction): For the list of the supported Nicira experimenter actions, please refer to :ref:`ryu.ofproto.nx_actions <nx_actions_structures>`. """ - def __init__(self, experimenter, data=None, type_=None, len_=None): + def __init__(self, experimenter): super(OFPActionExperimenter, self).__init__() + self.type = ofproto.OFPAT_EXPERIMENTER self.experimenter = experimenter - self.data = data - self.len = (utils.round_up(len(data), 8) + - ofproto.OFP_ACTION_EXPERIMENTER_HEADER_SIZE) + self.len = None @classmethod def parser(cls, buf, offset): @@ -5000,13 +5001,36 @@ class OFPActionExperimenter(OFPAction): ofproto.OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR, buf, offset) data = buf[(offset + ofproto.OFP_ACTION_EXPERIMENTER_HEADER_SIZE ): offset + len_] - return cls(experimenter, data) + if experimenter == ofproto_common.NX_EXPERIMENTER_ID: + obj = NXAction.parse(data) + else: + obj = OFPActionExperimenterUnknown(experimenter, data) + obj.len = len_ + return obj def serialize(self, buf, offset): msg_pack_into(ofproto.OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR, buf, offset, self.type, self.len, self.experimenter) - if self.data: - buf += self.data + + +class OFPActionExperimenterUnknown(OFPActionExperimenter): + def __init__(self, experimenter, data=None, type_=None, len_=None): + super(OFPActionExperimenterUnknown, + self).__init__(experimenter=experimenter) + self.data = data + + def serialize(self, buf, offset): + # fixup + data = self.data + if data is None: + data = bytearray() + self.len = (utils.round_up(len(data), 8) + + ofproto.OFP_ACTION_EXPERIMENTER_HEADER_SIZE) + super(OFPActionExperimenterUnknown, self).serialize(buf, offset) + msg_pack_into('!%ds' % len(self.data), + buf, + offset + ofproto.OFP_ACTION_EXPERIMENTER_HEADER_SIZE, + self.data) @_register_parser @@ -5625,3 +5649,9 @@ class OFPBundleAddMsg(MsgInMsgBase): # Finish self.buf += tail_buf + + +nx_actions.generate( + 'ryu.ofproto.ofproto_v1_4', + 'ryu.ofproto.ofproto_v1_4_parser' +) diff --git a/ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json index a1748765..4d7e0273 100644 --- a/ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json +++ b/ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json @@ -253,7 +253,7 @@ } }, { - "OFPActionExperimenter": { + "OFPActionExperimenterUnknown": { "len": 16, "data": "ZXhwX2RhdGE=", "experimenter": 98765432, diff --git a/ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json index 2b4eaead..a884ce95 100644 --- a/ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json +++ b/ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json @@ -108,7 +108,7 @@ } }, { - "OFPActionExperimenter": { + "OFPActionExperimenterUnknown": { "data": "AAECAwQFBgc=", "experimenter": 101, "len": 16, |