diff options
author | YAMAMOTO Takashi <yamamoto@valinux.co.jp> | 2015-05-15 11:03:36 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-05-19 15:39:28 +0900 |
commit | 3c7012fe43b0e689132960db723e8ccd804d997d (patch) | |
tree | 6f10b7df95ac7fcdc4946f6834a3f0d4173a6d7d | |
parent | 0c9726efdf6458a07097515e91696a940640de79 (diff) |
Pull nx_actions for OpenFlow 1.5
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/ofproto/ofproto_v1_5_parser.py | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/ryu/ofproto/ofproto_v1_5_parser.py b/ryu/ofproto/ofproto_v1_5_parser.py index d3a89707..7d15bc62 100644 --- a/ryu/ofproto/ofproto_v1_5_parser.py +++ b/ryu/ofproto/ofproto_v1_5_parser.py @@ -27,6 +27,7 @@ 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 . import ether +from . import nicira_ext from . import ofproto_parser from . import ofproto_common from . import ofproto_v1_5 as ofproto @@ -5464,12 +5465,12 @@ class OFPActionExperimenter(OFPAction): experimenter Experimenter ID ================ ====================================================== """ - 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): @@ -5477,13 +5478,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) @_set_msg_type(ofproto.OFPT_GROUP_MOD) @@ -6100,3 +6124,11 @@ class OFPBundleAddMsg(MsgInMsgBase): # Finish self.buf += tail_buf + + +import nx_actions + +nx_actions.generate( + 'ryu.ofproto.ofproto_v1_5', + 'ryu.ofproto.ofproto_v1_5_parser' +) |