There is NXAction to be used only in OpenFlow1.0. These actions are supported by default in OpenFlow1.2 or later. Therefore, it becomes unnecessary as the NXAction. But, to add the NXAction in order to be able to use in OpenFlow1.0. Actions to be added are as following. - NXActionSetQueue - NXActionDecTtl - NXActionPushMpls - NXActionPopMpls - NXActionSetMplsTtl - NXActionDecMplsTtl - NXActionSetMplsLabel - NXActionSetMplsTc
Signed-off-by: Shinpei Muraoka <[email protected]> --- ryu/ofproto/nicira_ext.py | 6 ++ ryu/ofproto/nx_actions.py | 175 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) diff --git a/ryu/ofproto/nicira_ext.py b/ryu/ofproto/nicira_ext.py index aae3383..c5af140 100644 --- a/ryu/ofproto/nicira_ext.py +++ b/ryu/ofproto/nicira_ext.py @@ -44,6 +44,12 @@ NXAST_EXIT = 17 NXAST_DEC_TTL = 18 NXAST_FIN_TIMEOUT = 19 NXAST_CONTROLLER = 20 +NXAST_PUSH_MPLS = 23 +NXAST_POP_MPLS = 24 +NXAST_SET_MPLS_TTL = 25 +NXAST_DEC_MPLS_TTL = 26 +NXAST_SET_MPLS_LABEL = 30 +NXAST_SET_MPLS_TC = 31 NXAST_CONJUNCTION = 34 NXAST_CT = 35 NXAST_NAT = 36 diff --git a/ryu/ofproto/nx_actions.py b/ryu/ofproto/nx_actions.py index 14bc479..e0605d3 100644 --- a/ryu/ofproto/nx_actions.py +++ b/ryu/ofproto/nx_actions.py @@ -201,6 +201,28 @@ def generate(ofp_name, ofpp_name): # fixup return bytearray() if self.data is None else self.data + # For OpenFlow1.0 only + class NXActionSetQueue(NXAction): + _subtype = nicira_ext.NXAST_SET_QUEUE + + # queue_id + _fmt_str = '!2xI' + + def __init__(self, queue_id, + type_=None, len_=None, vendor=None, subtype=None): + super(NXActionSetQueue, self).__init__() + self.queue_id = queue_id + + @classmethod + def parser(cls, buf): + (queue_id,) = struct.unpack_from(cls._fmt_str, buf, 0) + return cls(queue_id) + + def serialize_body(self): + data = bytearray() + msg_pack_into(self._fmt_str, data, 0, self.queue_id) + return data + class NXActionPopQueue(NXAction): _subtype = nicira_ext.NXAST_POP_QUEUE @@ -558,6 +580,25 @@ def generate(ofp_name, ofpp_name): msg_pack_into(self._fmt_str, data, 0) return data + # For OpenFlow1.0 only + class NXActionDecTtl(NXAction): + _subtype = nicira_ext.NXAST_DEC_TTL + + _fmt_str = '!6x' + + def __init__(self, + type_=None, len_=None, vendor=None, subtype=None): + super(NXActionDecTtl, self).__init__() + + @classmethod + def parser(cls, buf): + return cls() + + def serialize_body(self): + data = bytearray() + msg_pack_into(self._fmt_str, data, 0) + return data + class NXActionController(NXAction): _subtype = nicira_ext.NXAST_CONTROLLER @@ -592,6 +633,132 @@ def generate(ofp_name, ofpp_name): self.reason) return data + # For OpenFlow1.0 only + class NXActionMplsBase(NXAction): + # ethertype + _fmt_str = '!H4x' + + def __init__(self, + ethertype, + type_=None, len_=None, vendor=None, subtype=None): + super(NXActionMplsBase, self).__init__() + self.ethertype = ethertype + + @classmethod + def parser(cls, buf): + (ethertype,) = struct.unpack_from( + cls._fmt_str, buf) + return cls(ethertype) + + def serialize_body(self): + data = bytearray() + msg_pack_into(self._fmt_str, data, 0, + self.ethertype) + return data + + # For OpenFlow1.0 only + class NXActionPushMpls(NXActionMplsBase): + _subtype = nicira_ext.NXAST_PUSH_MPLS + + # For OpenFlow1.0 only + class NXActionPopMpls(NXActionMplsBase): + _subtype = nicira_ext.NXAST_POP_MPLS + + # For OpenFlow1.0 only + class NXActionSetMplsTtl(NXAction): + _subtype = nicira_ext.NXAST_SET_MPLS_TTL + + # ethertype + _fmt_str = '!B5x' + + def __init__(self, + ttl, + type_=None, len_=None, vendor=None, subtype=None): + super(NXActionSetMplsTtl, self).__init__() + self.ttl = ttl + + @classmethod + def parser(cls, buf): + (ttl,) = struct.unpack_from( + cls._fmt_str, buf) + return cls(ttl) + + def serialize_body(self): + data = bytearray() + msg_pack_into(self._fmt_str, data, 0, + self.ttl) + return data + + # For OpenFlow1.0 only + class NXActionDecMplsTtl(NXAction): + _subtype = nicira_ext.NXAST_DEC_MPLS_TTL + + # ethertype + _fmt_str = '!6x' + + def __init__(self, + type_=None, len_=None, vendor=None, subtype=None): + super(NXActionDecMplsTtl, self).__init__() + + @classmethod + def parser(cls, buf): + return cls() + + def serialize_body(self): + data = bytearray() + msg_pack_into(self._fmt_str, data, 0) + return data + + # For OpenFlow1.0 only + class NXActionSetMplsLabel(NXAction): + _subtype = nicira_ext.NXAST_SET_MPLS_LABEL + + # ethertype + _fmt_str = '!2xI' + + def __init__(self, + label, + type_=None, len_=None, vendor=None, subtype=None): + super(NXActionSetMplsLabel, self).__init__() + self.label = label + + @classmethod + def parser(cls, buf): + (label,) = struct.unpack_from( + cls._fmt_str, buf) + return cls(label) + + def serialize_body(self): + data = bytearray() + msg_pack_into(self._fmt_str, data, 0, + self.label) + return data + + # For OpenFlow1.0 only + class NXActionSetMplsTc(NXAction): + _subtype = nicira_ext.NXAST_SET_MPLS_TC + + # ethertype + _fmt_str = '!B5x' + + def __init__(self, + tc, + type_=None, len_=None, vendor=None, subtype=None): + super(NXActionSetMplsTc, self).__init__() + self.tc = tc + + @classmethod + def parser(cls, buf): + (tc,) = struct.unpack_from( + cls._fmt_str, buf) + return cls(tc) + + def serialize_body(self): + data = bytearray() + msg_pack_into(self._fmt_str, data, 0, + self.tc) + return data + class NXActionFinTimeout(NXAction): _subtype = nicira_ext.NXAST_FIN_TIMEOUT @@ -972,6 +1139,7 @@ def generate(ofp_name, ofpp_name): add_attr('NXActionUnknown', NXActionUnknown) classes = [ + 'NXActionSetQueue', 'NXActionPopQueue', 'NXActionRegLoad', 'NXActionNote', @@ -983,7 +1151,14 @@ def generate(ofp_name, ofpp_name): 'NXActionOutputReg', 'NXActionLearn', 'NXActionExit', + 'NXActionDecTtl', 'NXActionController', + 'NXActionPushMpls', + 'NXActionPopMpls', + 'NXActionSetMplsTtl', + 'NXActionDecMplsTtl', + 'NXActionSetMplsLabel', + 'NXActionSetMplsTc', 'NXActionFinTimeout', 'NXActionConjunction', 'NXActionMultipath', -- 1.9.1 ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
