Hi,
This is an updated and tested version of this patch for the zaku branch.
Do you see any problem with this patch?
BR,
--
Romain Lenglet

On 12/13/10 14:42, [email protected] wrote:
From: Romain Lenglet<[email protected]>

The C++ implementation allowed passing the 64-bit opaque cookie with
every flow command, but not the Python wrapper.
---
  src/nox/coreapps/pyrt/context.i |    3 ++-
  src/nox/lib/core.py             |   26 ++++++++++++++++++--------
  2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/nox/coreapps/pyrt/context.i b/src/nox/coreapps/pyrt/context.i
index 803513d..6172a75 100644
--- a/src/nox/coreapps/pyrt/context.i
+++ b/src/nox/coreapps/pyrt/context.i
@@ -96,7 +96,8 @@ public:
      void send_flow_command(uint64_t datapath_id, ofp_flow_mod_command,
                             const ofp_match&, uint16_t idle_timeout,
                             uint16_t hard_timeout, const Nonowning_buffer&  
actions,
-                           uint32_t buffer_id, uint16_t priority);
+                           uint32_t buffer_id, uint16_t priority,
+                           uint64_t cookie);

      int close_openflow_connection(uint64_t datapathid);

diff --git a/src/nox/lib/core.py b/src/nox/lib/core.py
index 37bae36..910e5c7 100644
--- a/src/nox/lib/core.py
+++ b/src/nox/lib/core.py
@@ -249,7 +249,8 @@ class Component:
      def send_flow_command(self, dp_id, command, attrs,
                            priority=openflow.OFP_DEFAULT_PRIORITY,
                            add_args=None,
-                          hard_timeout=openflow.OFP_FLOW_PERMANENT):
+                          hard_timeout=openflow.OFP_FLOW_PERMANENT,
+                          cookie=0):
          m = set_match(attrs)
          if m == None:
              return False
@@ -265,7 +266,8 @@ class Component:
              buffer_id = UINT32_MAX

          self.ctxt.send_flow_command(dp_id, command, m, idle_timeout,
-                                    hard_timeout, oactions, buffer_id, 
priority)
+                                    hard_timeout, oactions, buffer_id, 
priority,
+                                    cookie)

          return True

@@ -294,7 +296,7 @@ class Component:
          else:
              self.send_openflow_packet(dp_id, packet, actions, inport)

-    def delete_datapath_flow(self, dp_id, attrs):
+    def delete_datapath_flow(self, dp_id, attrs, cookie=0):
          """
          Delete all flow entries matching the passed in (potentially
          wildcarded) flow
@@ -302,10 +304,12 @@ class Component:
          dp_id - datapath to delete the entries from
          attrs - the flow as a dictionary (described above)
          """
-        return self.send_flow_command(dp_id, openflow.OFPFC_DELETE, attrs)
+        return self.send_flow_command(dp_id, openflow.OFPFC_DELETE, attrs,
+                                      cookie=cookie)

      def delete_strict_datapath_flow(self, dp_id, attrs,
-                        priority=openflow.OFP_DEFAULT_PRIORITY):
+                                    priority=openflow.OFP_DEFAULT_PRIORITY,
+                                    cookie=0):
          """
          Strictly delete the flow entry matching the passed in (potentially
          wildcarded) flow.  i.e. matched flow have exactly the same
@@ -315,9 +319,11 @@ class Component:
          attrs - the flow as a dictionary (described above)
          priority - the priority of the entry to be deleted (only meaningful
                     for entries with wildcards)
+        cookie - the opaque controller-issued identifier associated with the
+                 flow
          """
          return self.send_flow_command(dp_id, openflow.OFPFC_DELETE_STRICT,
-                                      attrs, priority)
+                                      attrs, priority, cookie=cookie)

      
###########################################################################
      # The following methods manipulate a flow entry in a datapath.
@@ -342,7 +348,7 @@ class Component:
      def install_datapath_flow(self, dp_id, attrs, idle_timeout, hard_timeout,
                                actions, buffer_id=None,
                                priority=openflow.OFP_DEFAULT_PRIORITY,
-                              inport=None, packet=None):
+                              inport=None, packet=None, cookie=0):
          """
          Add a flow entry to datapath

@@ -372,12 +378,16 @@ class Component:

          inport - When packet is sent, the port on which packet came in as 
input,
          so that it can be omitted from any OFPP_FLOOD outputs.
+
+        cookie - the opaque controller-issued identifier associated with the
+        flow
          """
          if buffer_id == None:
              buffer_id = UINT32_MAX

          self.send_flow_command(dp_id, openflow.OFPFC_ADD, attrs, priority,
-                          (idle_timeout, actions, buffer_id), hard_timeout)
+                               (idle_timeout, actions, buffer_id), 
hard_timeout,
+                               cookie=cookie)

          if buffer_id == UINT32_MAX and packet != None:
              for action in actions:

_______________________________________________
nox-dev mailing list
[email protected]
http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org

Reply via email to