summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/source/nicira_ext_ref.rst42
-rw-r--r--ryu/ofproto/nx_actions.py1242
2 files changed, 1280 insertions, 4 deletions
diff --git a/doc/source/nicira_ext_ref.rst b/doc/source/nicira_ext_ref.rst
index 562e12aa..2518536f 100644
--- a/doc/source/nicira_ext_ref.rst
+++ b/doc/source/nicira_ext_ref.rst
@@ -7,17 +7,51 @@ Nicira Extension Structures
Nicira Extension Actions Structures
===================================
-The followings shows the supported NXAction classes in OF1.3,
-but also available in OF1.2+.
+The followings shows the supported NXAction classes only in OpenFlow1.0
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-.. py:currentmodule:: ryu.ofproto.ofproto_v1_3_parser
+.. py:currentmodule:: ryu.ofproto.ofproto_v1_0_parser
+
+.. autoclass:: NXActionSetQueue
+.. autoclass:: NXActionDecTtl
+.. autoclass:: NXActionPushMpls
+.. autoclass:: NXActionPopMpls
+.. autoclass:: NXActionSetMplsTtl
+.. autoclass:: NXActionDecMplsTtl
+.. autoclass:: NXActionSetMplsLabel
+.. autoclass:: NXActionSetMplsTc
+
+The followings shows the supported NXAction classes in OpenFlow1.0 or later
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. py:currentmodule:: ryu.ofproto.ofproto_v1_3_parser
+.. autoclass:: NXActionPopQueue
+.. autoclass:: NXActionRegLoad
+.. autoclass:: NXActionRegLoad2
+.. autoclass:: NXActionNote
+.. autoclass:: NXActionSetTunnel
+.. autoclass:: NXActionSetTunnel64
.. autoclass:: NXActionRegMove
+.. autoclass:: NXActionResubmit
+.. autoclass:: NXActionResubmitTable
+.. autoclass:: NXActionOutputReg
+.. autoclass:: NXActionOutputReg2
.. autoclass:: NXActionLearn
+.. autoclass:: NXActionExit
+.. autoclass:: NXActionController
+.. autoclass:: NXActionController2
+.. autoclass:: NXActionDecTtlCntIds
+.. autoclass:: NXActionStackPush
+.. autoclass:: NXActionStackPop
+.. autoclass:: NXActionSample
+.. autoclass:: NXActionFinTimeout
.. autoclass:: NXActionConjunction
-.. autoclass:: NXActionResubmitTable
+.. autoclass:: NXActionMultipath
+.. autoclass:: NXActionBundle
+.. autoclass:: NXActionBundleLoad
.. autoclass:: NXActionCT
+.. autoclass:: NXActionNAT
.. autoclass:: NXFlowSpecMatch
.. autoclass:: NXFlowSpecLoad
.. autoclass:: NXFlowSpecOutput
diff --git a/ryu/ofproto/nx_actions.py b/ryu/ofproto/nx_actions.py
index 74ca14a4..7f3a7641 100644
--- a/ryu/ofproto/nx_actions.py
+++ b/ryu/ofproto/nx_actions.py
@@ -126,18 +126,63 @@ def generate(ofp_name, ofpp_name):
return buf
class NXFlowSpecMatch(_NXFlowSpec):
+ """
+ Specification for adding match criterion
+
+ This class is used by ``NXActionLearn``.
+
+ For the usage of this class, please refer to ``NXActionLearn``.
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ src OXM/NXM header and Start bit for source field
+ dst OXM/NXM header and Start bit for destination field
+ n_bits The number of bits from the start bit
+ ================ ======================================================
+ """
# Add a match criteria
# an example of the corresponding ovs-ofctl syntax:
# NXM_OF_VLAN_TCI[0..11]
_dst_type = 0
class NXFlowSpecLoad(_NXFlowSpec):
+ """
+ Add NXAST_REG_LOAD actions
+
+ This class is used by ``NXActionLearn``.
+
+ For the usage of this class, please refer to ``NXActionLearn``.
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ src OXM/NXM header and Start bit for source field
+ dst OXM/NXM header and Start bit for destination field
+ n_bits The number of bits from the start bit
+ ================ ======================================================
+ """
# Add NXAST_REG_LOAD actions
# an example of the corresponding ovs-ofctl syntax:
# NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[]
_dst_type = 1
class NXFlowSpecOutput(_NXFlowSpec):
+ """
+ Add an OFPAT_OUTPUT action
+
+ This class is used by ``NXActionLearn``.
+
+ For the usage of this class, please refer to ``NXActionLearn``.
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ src OXM/NXM header and Start bit for source field
+ dst Must be ''
+ n_bits The number of bits from the start bit
+ ================ ======================================================
+ """
# Add an OFPAT_OUTPUT action
# an example of the corresponding ovs-ofctl syntax:
# output:NXM_OF_IN_PORT[]
@@ -203,6 +248,37 @@ def generate(ofp_name, ofpp_name):
# For OpenFlow1.0 only
class NXActionSetQueue(NXAction):
+ """
+ Set queue action
+
+ This action sets the queue that should be used to queue
+ when packets are output.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ set_queue:queue
+ ..
+
+ +-------------------------+
+ | **set_queue**\:\ *queue*|
+ +-------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ queue_id Queue ID for the packets
+ ================ ======================================================
+
+ .. note::
+ This actions is supported by
+ ``OFPActionSetQueue``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ actions += [parser.NXActionSetQueue(queue_id=10)]
+ """
_subtype = nicira_ext.NXAST_SET_QUEUE
# queue_id
@@ -224,6 +300,26 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionPopQueue(NXAction):
+ """
+ Pop queue action
+
+ This action restors the queue to the value it was before any
+ set_queue actions were applied.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ pop_queue
+ ..
+
+ +---------------+
+ | **pop_queue** |
+ +---------------+
+
+ Example::
+
+ actions += [parser.NXActionPopQueue()]
+ """
_subtype = nicira_ext.NXAST_POP_QUEUE
_fmt_str = '!6x'
@@ -242,6 +338,37 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionRegLoad(NXAction):
+ """
+ Load literal value action
+
+ This action loads a literal value into a field or part of a field.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ load:value->dst[start..end]
+ ..
+
+ +-----------------------------------------------------------------+
+ | **load**\:\ *value*\->\ *dst*\ **[**\ *start*\..\ *end*\ **]** |
+ +-----------------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ start Start bit for destination field
+ end End bit for destination field
+ dst OXM/NXM header for destination field
+ value OXM/NXM value to be loaded
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionRegLoad(start=4,
+ end=31,
+ dst="eth_dst",
+ value=0x112233)]
+ """
_subtype = nicira_ext.NXAST_REG_LOAD
_fmt_str = '!HIQ' # ofs_nbits, dst, value
_TYPE = {
@@ -281,6 +408,35 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionRegLoad2(NXAction):
+ """
+ Load literal value action
+
+ This action loads a literal value into a field or part of a field.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ set_field:value[/mask]->dst
+ ..
+
+ +------------------------------------------------------------+
+ | **set_field**\:\ *value*\ **[**\/\ *mask*\ **]**\->\ *dst* |
+ +------------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ value OXM/NXM value to be loaded
+ mask Mask for destination field
+ dst OXM/NXM header for destination field
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionRegLoad2(dst="tun_ipv4_src",
+ value="192.168.10.0",
+ mask="255.255.255.0")]
+ """
_subtype = nicira_ext.NXAST_REG_LOAD2
_TYPE = {
'ascii': [
@@ -321,6 +477,31 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionNote(NXAction):
+ """
+ Note action
+
+ This action does nothing at all.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ note:[hh]..
+ ..
+
+ +-----------------------------------+
+ | **note**\:\ **[**\ *hh*\ **]**\.. |
+ +-----------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ note A list of integer type values
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionNote(note=[0xaa,0xbb,0xcc,0xdd])]
+ """
_subtype = nicira_ext.NXAST_NOTE
# note
@@ -375,18 +556,141 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionSetTunnel(_NXActionSetTunnelBase):
+ """
+ Set Tunnel action
+
+ This action sets the identifier (such as GRE) to the specified id.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ .. note::
+ ovs-ofctl command of the OpenFlow1.0 is different from that
+ of OpenFlow1.2 or later.
+
+ OpenFlow1.0
+
+ ..
+ set_tunnel:id
+ ..
+
+ +------------------------+
+ | **set_tunnel**\:\ *id* |
+ +------------------------+
+
+ OpenFlow1.2 or later
+
+ ..
+ set_field:value->tun_id
+ ..
+
+ +-----------------------------------+
+ | **set_field**\:\ *value*\->tun_id |
+ +-----------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ tun_id Tunnel ID(32bits)
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionSetTunnel(tun_id=0xa)]
+ """
_subtype = nicira_ext.NXAST_SET_TUNNEL
# tun_id
_fmt_str = '!2xI'
class NXActionSetTunnel64(_NXActionSetTunnelBase):
+ """
+ Set Tunnel action
+
+ This action outputs to a port that encapsulates
+ the packet in a tunnel.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ .. note::
+ ovs-ofctl command of the OpenFlow1.0 is different from that
+ of OpenFlow1.2 or later.
+
+ OpenFlow1.0
+
+ ..
+ set_tunnel64:id
+ ..
+
+ +--------------------------+
+ | **set_tunnel64**\:\ *id* |
+ +--------------------------+
+
+ OpenFlow1.2 or later
+
+ ..
+ set_field:value->tun_id
+ ..
+
+ +-----------------------------------+
+ | **set_field**\:\ *value*\->tun_id |
+ +-----------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ tun_id Tunnel ID(64bits)
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionSetTunnel64(tun_id=0xa)]
+ """
_subtype = nicira_ext.NXAST_SET_TUNNEL64
# tun_id
_fmt_str = '!6xQ'
class NXActionRegMove(NXAction):
+ """
+ Move register action
+
+ This action copies the src to dst.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ move:src[start..end]->dst[start..end]
+ ..
+
+ +--------------------------------------------------------+
+ | **move**\:\ *src*\ **[**\ *start*\..\ *end*\ **]**\->\ |
+ | *dst*\ **[**\ *start*\..\ *end* \ **]** |
+ +--------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ src_field OXM/NXM header for source field
+ src_start Start bit for source field
+ src_end End bit for source field
+ dst_field OXM/NXM header for destination field
+ dst_start Start bit for destination field
+ dst_end End bit for destination field
+ ================ ======================================================
+
+ .. CAUTION::
+ **src_start**\ and \ **src_end**\ difference and \ **dst_start**\
+ and \ **dst_end**\ difference must be the same.
+
+ Example::
+
+ actions += [parser.NXActionRegMove(src_field="reg0",
+ src_start=0,
+ src_end=5,
+ dst_field="reg1",
+ dst_start=10,
+ dst_end=15)]
+ """
_subtype = nicira_ext.NXAST_REG_MOVE
_fmt_str = '!HHH' # n_bits, src_ofs, dst_ofs
# Followed by OXM fields (src, dst) and padding to 8 bytes boundary
@@ -448,6 +752,31 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionResubmit(NXAction):
+ """
+ Resubmit action
+
+ This action searches one of the switch's flow tables.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ resubmit:port
+ ..
+
+ +------------------------+
+ | **resubmit**\:\ *port* |
+ +------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ in_port New in_port for checking flow table
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionResubmit(in_port=8080)]
+ """
_subtype = nicira_ext.NXAST_RESUBMIT
# in_port
@@ -472,6 +801,33 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionResubmitTable(NXAction):
+ """
+ Resubmit action
+
+ This action searches one of the switch's flow tables.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ resubmit([port],[table])
+ ..
+
+ +------------------------------------------------+
+ | **resubmit(**\[\ *port*\]\,[\ *table*\]\ **)** |
+ +------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ in_port New in_port for checking flow table
+ table_id Checking flow tables
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionResubmit(in_port=8080,
+ table_id=10)]
+ """
_subtype = nicira_ext.NXAST_RESUBMIT_TABLE
# in_port, table_id
@@ -499,6 +855,38 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionOutputReg(NXAction):
+ """
+ Add output action
+
+ This action outputs the packet to the OpenFlow port number read from
+ src.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ output:src[start...end]
+ ..
+
+ +-------------------------------------------------------+
+ | **output**\:\ *src*\ **[**\ *start*\...\ *end*\ **]** |
+ +-------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ start Start bit for source field
+ end End bit for source field
+ src OXM/NXM header for source field
+ max_len Max length to send to controller
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionOutputReg(start=8080,
+ end=10,
+ src="reg0",
+ max_len=1024)]
+ """
_subtype = nicira_ext.NXAST_OUTPUT_REG
# ofs_nbits, src, max_len
@@ -547,6 +935,42 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionOutputReg2(NXAction):
+ """
+ Add output action
+
+ This action outputs the packet to the OpenFlow port number read from
+ src.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ output:src[start...end]
+ ..
+
+ +-------------------------------------------------------+
+ | **output**\:\ *src*\ **[**\ *start*\...\ *end*\ **]** |
+ +-------------------------------------------------------+
+
+ .. NOTE::
+ Like the ``NXActionOutputReg`` but organized so
+ that there is room for a 64-bit experimenter OXM as 'src'.
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ start Start bit for source field
+ end End bit for source field
+ src OXM/NXM header for source field
+ max_len Max length to send to controller
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionOutputReg(start=8080,
+ end=10,
+ src="reg0",
+ max_len=1024)]
+ """
_subtype = nicira_ext.NXAST_OUTPUT_REG2
# start, end, src, max_len
@@ -599,6 +1023,113 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionLearn(NXAction):
+ """
+ Adds or modifies flow action
+
+ This action adds or modifies a flow in OpenFlow table.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ learn(argument[,argument]...)
+ ..
+
+ +---------------------------------------------------+
+ | **learn(**\ *argument*\[,\ *argument*\]...\ **)** |
+ +---------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ table_id The table in which the new flow should be inserted
+ specs Adds a match criterion to the new flow
+
+ Please use the
+ ``NXFlowSpecMatch``
+ in order to set the following format
+
+ ..
+ field=value
+ field[start..end]=src[start..end]
+ field[start..end]
+ ..
+
+ | *field*\=\ *value*
+ | *field*\ **[**\ *start*\..\ *end*\ **]**\ =\
+ *src*\ **[**\ *start*\..\ *end*\ **]**
+ | *field*\ **[**\ *start*\..\ *end*\ **]**
+ |
+
+ Please use the
+ ``NXFlowSpecLoad``
+ in order to set the following format
+
+ ..
+ load:value->dst[start..end]
+ load:src[start..end]->dst[start..end]
+ ..
+
+ | **load**\:\ *value*\ **->**\ *dst*\
+ **[**\ *start*\..\ *end*\ **]**
+ | **load**\:\ *src*\ **[**\ *start*\..\ *end*\
+ **] ->**\ *dst*\ **[**\ *start*\..\ *end*\ **]**
+ |
+
+ Please use the
+ ``NXFlowSpecOutput``
+ in order to set the following format
+
+ ..
+ output:field[start..end]
+ ..
+
+ | **output:**\ field\ **[**\ *start*\..\ *end*\ **]**
+
+ idle_timeout Idle time before discarding(seconds)
+ hard_timeout Max time before discarding(seconds)
+ priority Priority level of flow entry
+ cookie Cookie for new flow
+ flags send_flow_rem
+ fin_idle_timeout Idle timeout after FIN(seconds)
+ fin_hard_timeout Hard timeout after FIN(seconds)
+ ================ ======================================================
+
+ .. CAUTION::
+ The arguments specify the flow's match fields, actions,
+ and other properties, as follows.
+ At least one match criterion and one action argument
+ should ordinarily be specified.
+
+ Example::
+
+ actions += [
+ parser.NXActionLearn(able_id=10,
+ specs=[parser.NXFlowSpecMatch(src=0x800,
+ dst=('eth_type_nxm', 0),
+ n_bits=16),
+ parser.NXFlowSpecMatch(src=('reg1', 1),
+ dst=('reg2', 3),
+ n_bits=5),
+ parser.NXFlowSpecMatch(src=('reg3', 1),
+ dst=('reg3', 1),
+ n_bits=5),
+ parser.NXFlowSpecLoad(src=0,
+ dst=('reg4', 3),
+ n_bits=5),
+ parser.NXFlowSpecLoad(src=('reg5', 1),
+ dst=('reg6', 3),
+ n_bits=5),
+ parser.NXFlowSpecOutput(src=('reg7', 1),
+ dst="",
+ n_bits=5)],
+ idle_timeout=180,
+ hard_timeout=300,
+ priority=1,
+ cookie=0x64,
+ flags=ofproto.OFPFF_SEND_FLOW_REM,
+ fin_idle_timeout=180,
+ fin_hard_timeout=300)]
+ """
_subtype = nicira_ext.NXAST_LEARN
# idle_timeout, hard_timeout, priority, cookie, flags,
@@ -674,6 +1205,26 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionExit(NXAction):
+ """
+ Halt action
+
+ This action causes OpenvSwitch to immediately halt
+ execution of further actions.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ exit
+ ..
+
+ +----------+
+ | **exit** |
+ +----------+
+
+ Example::
+
+ actions += [parser.NXActionExit()]
+ """
_subtype = nicira_ext.NXAST_EXIT
_fmt_str = '!6x'
@@ -693,6 +1244,31 @@ def generate(ofp_name, ofpp_name):
# For OpenFlow1.0 only
class NXActionDecTtl(NXAction):
+ """
+ Decrement IP TTL action
+
+ This action decrements TTL of IPv4 packet or
+ hop limit of IPv6 packet.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ dec_ttl
+ ..
+
+ +-------------+
+ | **dec_ttl** |
+ +-------------+
+
+ .. NOTE::
+ This actions is supported by
+ ``OFPActionDecNwTtl``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ actions += [parser.NXActionDecTtl()]
+ """
_subtype = nicira_ext.NXAST_DEC_TTL
_fmt_str = '!6x'
@@ -711,6 +1287,37 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionController(NXAction):
+ """
+ Send packet in message action
+
+ This action sends the packet to the OpenFlow controller as
+ a packet in message.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ controller(key=value...)
+ ..
+
+ +----------------------------------------------+
+ | **controller(**\ *key*\=\ *value*\...\ **)** |
+ +----------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ max_len Max length to send to controller
+ controller_id Controller ID to send packet-in
+ reason Reason for sending the message
+ ================ ======================================================
+
+ Example::
+
+ actions += [
+ parser.NXActionController(max_len=1024,
+ controller_id=1,
+ reason=ofproto.OFPR_INVALID_TTL)]
+ """
_subtype = nicira_ext.NXAST_CONTROLLER
# max_len, controller_id, reason
@@ -745,6 +1352,42 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionController2(NXAction):
+ """
+ Send packet in message action
+
+ This action sends the packet to the OpenFlow controller as
+ a packet in message.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ controller(key=value...)
+ ..
+
+ +----------------------------------------------+
+ | **controller(**\ *key*\=\ *value*\...\ **)** |
+ +----------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ max_len Max length to send to controller
+ controller_id Controller ID to send packet-in
+ reason Reason for sending the message
+ userdata Additional data to the controller in the packet-in
+ message
+ pause Flag to pause pipeline to resume later
+ ================ ======================================================
+
+ Example::
+
+ actions += [
+ parser.NXActionController(max_len=1024,
+ controller_id=1,
+ reason=ofproto.OFPR_INVALID_TTL,
+ userdata=[0xa,0xb,0xc],
+ pause=True)]
+ """
_subtype = nicira_ext.NXAST_CONTROLLER2
_fmt_str = '!6x'
_PACK_STR = '!HH'
@@ -955,6 +1598,40 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionDecTtlCntIds(NXAction):
+ """
+ Decrement TTL action
+
+ This action decrements TTL of IPv4 packet or
+ hop limits of IPv6 packet.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ dec_ttl(id1[,id2]...)
+ ..
+
+ +-------------------------------------------+
+ | **dec_ttl(**\ *id1*\[,\ *id2*\]...\ **)** |
+ +-------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ cnt_ids Controller ids
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionDecTtlCntIds(cnt_ids=[1,2,3])]
+
+ .. NOTE::
+ If you want to set the following ovs-ofctl command.
+ Please use ``OFPActionDecNwTtl``.
+
+ +-------------+
+ | **dec_ttl** |
+ +-------------+
+ """
_subtype = nicira_ext.NXAST_DEC_TTL_CNT_IDS
# controllers
@@ -1032,14 +1709,106 @@ def generate(ofp_name, ofpp_name):
# For OpenFlow1.0 only
class NXActionPushMpls(NXActionMplsBase):
+ """
+ Push MPLS action
+
+ This action pushes a new MPLS header to the packet.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ push_mpls:ethertype
+ ..
+
+ +-------------------------------+
+ | **push_mpls**\:\ *ethertype* |
+ +-------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ ethertype Ether type(The value must be either 0x8847 or 0x8848)
+ ================ ======================================================
+
+ .. NOTE::
+ This actions is supported by
+ ``OFPActionPushMpls``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ match = parser.OFPMatch(dl_type=0x0800)
+ actions += [parser.NXActionPushMpls(ethertype=0x8847)]
+ """
_subtype = nicira_ext.NXAST_PUSH_MPLS
# For OpenFlow1.0 only
class NXActionPopMpls(NXActionMplsBase):
+ """
+ Pop MPLS action
+
+ This action pops the MPLS header from the packet.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ pop_mpls:ethertype
+ ..
+
+ +------------------------------+
+ | **pop_mpls**\:\ *ethertype* |
+ +------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ ethertype Ether type
+ ================ ======================================================
+
+ .. NOTE::
+ This actions is supported by
+ ``OFPActionPopMpls``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ match = parser.OFPMatch(dl_type=0x8847)
+ actions += [parser.NXActionPushMpls(ethertype=0x0800)]
+ """
_subtype = nicira_ext.NXAST_POP_MPLS
# For OpenFlow1.0 only
class NXActionSetMplsTtl(NXAction):
+ """
+ Set MPLS TTL action
+
+ This action sets the MPLS TTL.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ set_mpls_ttl:ttl
+ ..
+
+ +---------------------------+
+ | **set_mpls_ttl**\:\ *ttl* |
+ +---------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ ttl MPLS TTL
+ ================ ======================================================
+
+ .. NOTE::
+ This actions is supported by
+ ``OFPActionSetMplsTtl``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ actions += [parser.NXActionSetMplsTil(ttl=128)]
+ """
_subtype = nicira_ext.NXAST_SET_MPLS_TTL
# ethertype
@@ -1065,6 +1834,30 @@ def generate(ofp_name, ofpp_name):
# For OpenFlow1.0 only
class NXActionDecMplsTtl(NXAction):
+ """
+ Decrement MPLS TTL action
+
+ This action decrements the MPLS TTL.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ dec_mpls_ttl
+ ..
+
+ +------------------+
+ | **dec_mpls_ttl** |
+ +------------------+
+
+ .. NOTE::
+ This actions is supported by
+ ``OFPActionDecMplsTtl``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ actions += [parser.NXActionDecMplsTil()]
+ """
_subtype = nicira_ext.NXAST_DEC_MPLS_TTL
# ethertype
@@ -1085,6 +1878,36 @@ def generate(ofp_name, ofpp_name):
# For OpenFlow1.0 only
class NXActionSetMplsLabel(NXAction):
+ """
+ Set MPLS Lavel action
+
+ This action sets the MPLS Label.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ set_mpls_label:label
+ ..
+
+ +-------------------------------+
+ | **set_mpls_label**\:\ *label* |
+ +-------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ label MPLS Label
+ ================ ======================================================
+
+ .. NOTE::
+ This actions is supported by
+ ``OFPActionSetField(mpls_label=label)``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ actions += [parser.NXActionSetMplsLabel(label=0x10)]
+ """
_subtype = nicira_ext.NXAST_SET_MPLS_LABEL
# ethertype
@@ -1110,6 +1933,36 @@ def generate(ofp_name, ofpp_name):
# For OpenFlow1.0 only
class NXActionSetMplsTc(NXAction):
+ """
+ Set MPLS Tc action
+
+ This action sets the MPLS Tc.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ set_mpls_tc:tc
+ ..
+
+ +-------------------------+
+ | **set_mpls_tc**\:\ *tc* |
+ +-------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ tc MPLS Tc
+ ================ ======================================================
+
+ .. NOTE::
+ This actions is supported by
+ ``OFPActionSetField(mpls_label=tc)``
+ in OpenFlow1.2 or later.
+
+ Example::
+
+ actions += [parser.NXActionSetMplsLabel(tc=0x10)]
+ """
_subtype = nicira_ext.NXAST_SET_MPLS_TC
# ethertype
@@ -1174,12 +2027,104 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionStackPush(NXActionStackBase):
+ """
+ Push field action
+
+ This action pushes field to top of the stack.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ pop:dst[start...end]
+ ..
+
+ +----------------------------------------------------+
+ | **pop**\:\ *dst*\ **[**\ *start*\...\ *end*\ **]** |
+ +----------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ field OXM/NXM header for source field
+ start Start bit for source field
+ end End bit for source field
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionStackPush(field="reg2",
+ start=0,
+ end=5)]
+ """
_subtype = nicira_ext.NXAST_STACK_PUSH
class NXActionStackPop(NXActionStackBase):
+ """
+ Pop field action
+
+ This action pops field from top of the stack.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ pop:src[start...end]
+ ..
+
+ +----------------------------------------------------+
+ | **pop**\:\ *src*\ **[**\ *start*\...\ *end*\ **]** |
+ +----------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ field OXM/NXM header for destination field
+ start Start bit for destination field
+ end End bit for destination field
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionStackPop(field="reg2",
+ start=0,
+ end=5)]
+ """
_subtype = nicira_ext.NXAST_STACK_POP
class NXActionSample(NXAction):
+ """
+ Sample packets action
+
+ This action samples packets and sends one sample for
+ every sampled packet.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ sample(argument[,argument]...)
+ ..
+
+ +----------------------------------------------------+
+ | **sample(**\ *argument*\[,\ *argument*\]...\ **)** |
+ +----------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ probability The number of sampled packets
+ collector_set_id The unsigned 32-bit integer identifier of
+ the set of sample collectors to send sampled packets
+ to
+ obs_domain_id The Unsigned 32-bit integer Observation Domain ID
+ obs_point_id The unsigned 32-bit integer Observation Point ID
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionSample(probability=3,
+ collector_set_id=1,
+ obs_domain_id=2,
+ obs_point_id=3,)]
+ """
_subtype = nicira_ext.NXAST_SAMPLE
# probability, collector_set_id, obs_domain_id, obs_point_id
@@ -1219,6 +2164,38 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionFinTimeout(NXAction):
+ """
+ Change TCP timeout action
+
+ This action changes the idle timeout or hard timeout or
+ both, of this OpenFlow rule when the rule matches a TCP
+ packet with the FIN or RST flag.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ fin_timeout(argument[,argument]...)
+ ..
+
+ +---------------------------------------------------------+
+ | **fin_timeout(**\ *argument*\[,\ *argument*\]...\ **)** |
+ +---------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ fin_idle_timeout Causes the flow to expire after the given number
+ of seconds of inactivity
+ fin_idle_timeout Causes the flow to expire after the given number
+ of second, regardless of activity
+ ================ ======================================================
+
+ Example::
+
+ match = parser.OFPMatch(ip_proto=6, eth_type=0x0800)
+ actions += [parser.NXActionFinTimeout(fin_idle_timeout=30,
+ fin_hard_timeout=60)]
+ """
_subtype = nicira_ext.NXAST_FIN_TIMEOUT
# fin_idle_timeout, fin_hard_timeout
@@ -1248,6 +2225,37 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionConjunction(NXAction):
+ """
+ Conjunctive matches action
+
+ This action ties groups of individual OpenFlow flows into
+ higher-level conjunctive flows.
+ Please refer to the ovs-ofctl command manual for details.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ conjunction(id,k/n)
+ ..
+
+ +--------------------------------------------------+
+ | **conjunction(**\ *id*\,\ *k*\ **/**\ *n*\ **)** |
+ +--------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ clause Number assigned to the flow's dimension
+ n_clauses Specify the conjunctive flow's match condition
+ id\_ Conjunction ID
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionConjunction(clause=1,
+ n_clauses=2,
+ id_=10)]
+ """
_subtype = nicira_ext.NXAST_CONJUNCTION
# clause, n_clauses, id
@@ -1280,6 +2288,48 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionMultipath(NXAction):
+ """
+ Select multipath link action
+
+ This action selects multipath link based on the specified parameters.
+ Please refer to the ovs-ofctl command manual for details.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ multipath(fields, basis, algorithm, n_links, arg, dst[start..end])
+ ..
+
+ +-------------------------------------------------------------+
+ | **multipath(**\ *fields*\, \ *basis*\, \ *algorithm*\, |
+ | *n_links*\, \ *arg*\, \ *dst*\[\ *start*\..\ *end*\]\ **)** |
+ +-------------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ fields One of NX_HASH_FIELDS_*
+ basis Universal hash parameter
+ algorithm One of NX_MP_ALG_*.
+ max_link Number of output links
+ arg Algorithm-specific argument
+ start Start bit for source field
+ end End bit for source field
+ dst OXM/NXM header for source field
+ ================ ======================================================
+
+ Example::
+
+ actions += [parser.NXActionMultipath(
+ fields=nicira_ext.NX_HASH_FIELDS_SYMMETRIC_L4,
+ basis=1024,
+ algorithm=nicira_ext.NX_MP_ALG_HRW,
+ max_link=5,
+ arg=0,
+ start=4,
+ end=31,
+ dst="reg2")]
+ """
_subtype = nicira_ext.NXAST_MULTIPATH
# fields, basis, algorithm, max_link,
@@ -1435,6 +2485,51 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionBundle(_NXActionBundleBase):
+ """
+ Select bundle link action
+
+ This action selects bundle link based on the specified parameters.
+ Please refer to the ovs-ofctl command manual for details.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ bundle(fields, basis, algorithm, slave_type, slaves:[ s1, s2,...])
+ ..
+
+ +-----------------------------------------------------------+
+ | **bundle(**\ *fields*\, \ *basis*\, \ *algorithm*\, |
+ | *slave_type*\, \ *slaves*\:[ \ *s1*\, \ *s2*\,...]\ **)** |
+ +-----------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ algorithm One of NX_MP_ALG_*.
+ fields One of NX_HASH_FIELDS_*
+ basis Universal hash parameter
+ slave_type Type of slaves(must be NXM_OF_IN_PORT)
+ n_slaves Number of slaves
+ start Start bit for source field(must be zero)
+ end End bit for source field(must be zero)
+ dst OXM/NXM header for source field(must be zero)
+ slaves List of slaves
+ ================ ======================================================
+
+
+ Example::
+
+ actions += [parser.NXActionBundle(
+ algorithm=nicira_ext.NX_MP_ALG_HRW,
+ fields=nicira_ext.NX_HASH_FIELDS_ETH_SRC,
+ basis=0,
+ slave_type=nicira_ext.NXM_OF_IN_PORT,
+ n_slaves=2,
+ start=0,
+ end=0,
+ dst=0,
+ slaves=[2, 3])]
+ """
_subtype = nicira_ext.NXAST_BUNDLE
def __init__(self, algorithm, fields, basis, slave_type, n_slaves,
@@ -1445,6 +2540,53 @@ def generate(ofp_name, ofpp_name):
start=0, end=0, dst=0, slaves=slaves)
class NXActionBundleLoad(_NXActionBundleBase):
+ """
+ Select bundle link action
+
+ This action has the same behavior as the bundle action,
+ with one exception.
+ Please refer to the ovs-ofctl command manual for details.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ bundle_load(fields, basis, algorithm, slave_type,
+ slaves:[ s1, s2,...])
+ ..
+
+ +-----------------------------------------------------------+
+ | **bundle_load(**\ *fields*\, \ *basis*\, \ *algorithm*\, |
+ | *slave_type*\, \ *slaves*\:[ \ *s1*\, \ *s2*\,...]\ **)** |
+ +-----------------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ algorithm One of NX_MP_ALG_*.
+ fields One of NX_HASH_FIELDS_*
+ basis Universal hash parameter
+ slave_type Type of slaves(must be NXM_OF_IN_PORT)
+ n_slaves Number of slaves
+ start Start bit for source field
+ end End bit for source field
+ dst OXM/NXM header for source field
+ slaves List of slaves
+ ================ ======================================================
+
+
+ Example::
+
+ actions += [parser.NXActionBundleLoad(
+ algorithm=nicira_ext.NX_MP_ALG_HRW,
+ fields=nicira_ext.NX_HASH_FIELDS_ETH_SRC,
+ basis=0,
+ slave_type=nicira_ext.NXM_OF_IN_PORT,
+ n_slaves=2,
+ start=4,
+ end=31,
+ dst="reg0",
+ slaves=[2, 3])]
+ """
_subtype = nicira_ext.NXAST_BUNDLE_LOAD
_TYPE = {
'ascii': [
@@ -1459,6 +2601,45 @@ def generate(ofp_name, ofpp_name):
start, end, dst, slaves)
class NXActionCT(NXAction):
+ """
+ Pass traffic to the connection tracker action
+
+ This action sends the packet through the connection tracker.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ ..
+ ct(argument[,argument]...)
+ ..
+
+ +------------------------------------------------+
+ | **ct(**\ *argument*\[,\ *argument*\]...\ **)** |
+ +------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ flags Zero or more(Unspecified flag bits must be zero.)
+ zone_src OXM/NXM header for source field
+ zone_start Start bit for source field
+ zone_end End bit for source field
+ recirc_table Recirculate to a specific table
+ alg Well-known port number for the protocol
+ actions Zero or more actions may immediately follow this
+ action
+ ================ ======================================================
+
+ Example::
+
+ match = parser.OFPMatch(eth_type=0x0800, ct_state=(0,32))
+ actions += [parser.NXActionCT(flags = 1,
+ zone_src = 0,
+ zone_start = 0,
+ zone_end = 0,
+ recirc_table = 4,
+ alg = 0,
+ actions = [])]
+ """
_subtype = nicira_ext.NXAST_CT
# flags, zone_src, zone_ofs_nbits, recirc_table,
@@ -1520,6 +2701,67 @@ def generate(ofp_name, ofpp_name):
return data
class NXActionNAT(NXAction):
+ """
+ Network address translation action
+
+ This action sends the packet through the connection tracker.
+
+ And equivalent to the followings action of ovs-ofctl command.
+
+ .. NOTE::
+ The following command image does not exist in ovs-ofctl command
+ manual and has been created from the command response.
+
+ ..
+ nat(src=ip_min-ip_max : proto_min-proto-max)
+ ..
+
+ +--------------------------------------------------+
+ | **nat(src**\=\ *ip_min*\ **-**\ *ip_max*\ **:** |
+ | *proto_min*\ **-**\ *proto-max*\ **)** |
+ +--------------------------------------------------+
+
+ ================ ======================================================
+ Attribute Description
+ ================ ======================================================
+ flags Zero or more(Unspecified flag bits must be zero.)
+ range_ipv4_min Range ipv4 address minimun
+ range_ipv4_max Range ipv4 address maximun
+ range_ipv6_min Range ipv6 address minimun
+ range_ipv6_max Range ipv6 address maximun
+ range_proto_min Range protocol minimum
+ range_proto_max Range protocol maximun
+ ================ ======================================================
+
+ .. CAUTION::
+ ``NXActionNAT`` must be defined in the actions in the
+ ``NXActionCT``.
+
+ Example::
+
+ match = parser.OFPMatch(eth_type=0x0800)
+ actions += [
+ parser.NXActionCT(
+ flags = 1,
+ zone_src = 0,
+ zone_start = 0,
+ zone_end = 0,
+ recirc_table = 255,
+ alg = 0,
+ actions = [
+ parser.NXActionNAT(
+ flags = 1,
+ range_ipv4_min = "10.1.12.0",
+ range_ipv4_max = "10.1.13.255",
+ range_ipv6_min = "",
+ range_ipv6_max = "",
+ range_proto_min = 1,
+ range_proto_max = 1023
+ )
+ ]
+ )
+ ]
+ """
_subtype = nicira_ext.NXAST_NAT
# pad, flags, range_present