Actions to be added are as following.
 - NXActionSample2
 - NXActionOutputTrunc

Signed-off-by: Shinpei Muraoka <[email protected]>
---
 doc/source/nicira_ext_ref.rst |   2 +
 ryu/ofproto/nicira_ext.py     |   2 +
 ryu/ofproto/nx_actions.py     | 138 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 142 insertions(+)

diff --git a/doc/source/nicira_ext_ref.rst b/doc/source/nicira_ext_ref.rst
index 2518536..1385079 100644
--- a/doc/source/nicira_ext_ref.rst
+++ b/doc/source/nicira_ext_ref.rst
@@ -45,6 +45,7 @@ The followings shows the supported NXAction classes in 
OpenFlow1.0 or later
 .. autoclass:: NXActionStackPush
 .. autoclass:: NXActionStackPop
 .. autoclass:: NXActionSample
+.. autoclass:: NXActionSample2
 .. autoclass:: NXActionFinTimeout
 .. autoclass:: NXActionConjunction
 .. autoclass:: NXActionMultipath
@@ -52,6 +53,7 @@ The followings shows the supported NXAction classes in 
OpenFlow1.0 or later
 .. autoclass:: NXActionBundleLoad
 .. autoclass:: NXActionCT
 .. autoclass:: NXActionNAT
+.. autoclass:: NXActionOutputTrunc
 .. autoclass:: NXFlowSpecMatch
 .. autoclass:: NXFlowSpecLoad
 .. autoclass:: NXFlowSpecOutput
diff --git a/ryu/ofproto/nicira_ext.py b/ryu/ofproto/nicira_ext.py
index 5306b59..57c62c6 100644
--- a/ryu/ofproto/nicira_ext.py
+++ b/ryu/ofproto/nicira_ext.py
@@ -60,6 +60,8 @@ NXAST_CONJUNCTION = 34
 NXAST_CT = 35
 NXAST_NAT = 36
 NXAST_CONTROLLER2 = 37
+NXAST_SAMPLE2 = 38
+NXAST_OUTPUT_TRUNC = 39
 
 NX_ACTION_RESUBMIT_PACK_STR = '!HHIHHB3x'
 NX_ACTION_RESUBMIT_SIZE = 16
diff --git a/ryu/ofproto/nx_actions.py b/ryu/ofproto/nx_actions.py
index 7f3a764..94c2213 100644
--- a/ryu/ofproto/nx_actions.py
+++ b/ryu/ofproto/nx_actions.py
@@ -2163,6 +2163,87 @@ def generate(ofp_name, ofpp_name):
                           self.obs_point_id)
             return data
 
+    class NXActionSample2(NXAction):
+        """
+        Sample packets action
+
+        This action samples packets and sends one sample for
+        every sampled packet.
+        'sampling_port' can be equal to ingress port or one of egress ports.
+
+        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
+        sampling_port    Sampling port number
+        ================ ======================================================
+
+        Example::
+
+            actions += [parser.NXActionSample2(probability=3,
+                                               collector_set_id=1,
+                                               obs_domain_id=2,
+                                               obs_point_id=3,
+                                               sampling_port=8080)]
+        """
+        _subtype = nicira_ext.NXAST_SAMPLE2
+
+        # probability, collector_set_id, obs_domain_id,
+        # obs_point_id, sampling_port
+        _fmt_str = '!HIIIH6x'
+
+        def __init__(self,
+                     probability,
+                     collector_set_id=0,
+                     obs_domain_id=0,
+                     obs_point_id=0,
+                     sampling_port=0,
+                     type_=None, len_=None, experimenter=None, subtype=None):
+            super(NXActionSample2, self).__init__()
+            self.probability = probability
+            self.collector_set_id = collector_set_id
+            self.obs_domain_id = obs_domain_id
+            self.obs_point_id = obs_point_id
+            self.sampling_port = sampling_port
+
+        @classmethod
+        def parser(cls, buf):
+            (probability,
+             collector_set_id,
+             obs_domain_id,
+             obs_point_id,
+             sampling_port) = struct.unpack_from(
+                cls._fmt_str, buf, 0)
+            return cls(probability,
+                       collector_set_id,
+                       obs_domain_id,
+                       obs_point_id,
+                       sampling_port)
+
+        def serialize_body(self):
+            data = bytearray()
+            msg_pack_into(self._fmt_str, data, 0,
+                          self.probability,
+                          self.collector_set_id,
+                          self.obs_domain_id,
+                          self.obs_point_id,
+                          self.sampling_port)
+            return data
+
     class NXActionFinTimeout(NXAction):
         """
         Change TCP timeout action
@@ -2864,6 +2945,61 @@ def generate(ofp_name, ofpp_name):
 
             return data
 
+    class NXActionOutputTrunc(NXAction):
+        """
+        Truncate output action
+
+        This action truncate a packet into the specified size and outputs it.
+
+        And equivalent to the followings action of ovs-ofctl command.
+
+        ..
+          output(port=port,max_len=max_len)
+        ..
+
+        +--------------------------------------------------------------+
+        | **output(port**\=\ *port*\,\ **max_len**\=\ *max_len*\ **)** |
+        +--------------------------------------------------------------+
+
+        ================ ======================================================
+        Attribute        Description
+        ================ ======================================================
+        port             Output port
+        max_len          Max bytes to send
+        ================ ======================================================
+
+        Example::
+
+            actions += [parser.NXActionOutputTrunc(port=8080,
+                                                   max_len=1024)]
+        """
+        _subtype = nicira_ext.NXAST_OUTPUT_TRUNC
+
+        # port, max_len
+        _fmt_str = '!HI'
+
+        def __init__(self,
+                     port,
+                     max_len,
+                     type_=None, len_=None, experimenter=None, subtype=None):
+            super(NXActionOutputTrunc, self).__init__()
+            self.port = port
+            self.max_len = max_len
+
+        @classmethod
+        def parser(cls, buf):
+            (port,
+             max_len) = struct.unpack_from(
+                cls._fmt_str, buf, 0)
+            return cls(port, max_len)
+
+        def serialize_body(self):
+            data = bytearray()
+            msg_pack_into(self._fmt_str, data, 0,
+                          self.port,
+                          self.max_len)
+            return data
+
     def add_attr(k, v):
         v.__module__ = ofpp.__name__  # Necessary for stringify stuff
         setattr(ofpp, k, v)
@@ -2899,6 +3035,7 @@ def generate(ofp_name, ofpp_name):
         'NXActionStackPush',
         'NXActionStackPop',
         'NXActionSample',
+        'NXActionSample2',
         'NXActionFinTimeout',
         'NXActionConjunction',
         'NXActionMultipath',
@@ -2906,6 +3043,7 @@ def generate(ofp_name, ofpp_name):
         'NXActionBundleLoad',
         'NXActionCT',
         'NXActionNAT',
+        'NXActionOutputTrunc',
         '_NXFlowSpec',  # exported for testing
         'NXFlowSpecMatch',
         'NXFlowSpecLoad',
-- 
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

Reply via email to