summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>2015-05-15 11:03:36 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-05-19 15:39:28 +0900
commit3c7012fe43b0e689132960db723e8ccd804d997d (patch)
tree6f10b7df95ac7fcdc4946f6834a3f0d4173a6d7d
parent0c9726efdf6458a07097515e91696a940640de79 (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.py46
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'
+)