This message may be used to request that the NXM
flow format may be used. NXM is used as the match
in NX vendor extension messages such as NXT_FLOW_MOD.

Signed-off-by: Simon Horman <[email protected]>
---
 ryu/controller/controller.py       |   16 ++++++++++++++++
 ryu/ofproto/ofproto_v1_0.py        |   12 ++++++++++++
 ryu/ofproto/ofproto_v1_0_parser.py |   12 ++++++++++++
 3 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py
index 860db85..3c5dc47 100644
--- a/ryu/controller/controller.py
+++ b/ryu/controller/controller.py
@@ -98,6 +98,7 @@ class Datapath(object):
         self.xid = random.randint(0, self.ofproto.MAX_XID)
         self.id = None  # datapath_id is unknown yet
         self.ports = None
+        self.flow_format = ofproto_v1_0.NXFF_OPENFLOW10
 
     def close(self):
         """
@@ -228,6 +229,21 @@ class Datapath(object):
         barrier_request = self.ofproto_parser.OFPBarrierRequest(self)
         self.send_msg(barrier_request)
 
+    def send_nxt_set_flow_format(self, format):
+        assert (format == ofproto_v1_0.NXFF_OPENFLOW10 or
+                format == ofproto_v1_0.NXFF_NXM)
+        if self.flow_format == format:
+            # Nothing to do
+            return
+        self.flow_format = format
+        set_format = self.ofproto_parser.NXTSetFlowFormat(self, format)
+        # FIXME: If NXT_SET_FLOW_FORMAT or NXFF_NXM is not supported by
+        # the switch then an error message will be received. It may be
+        # handled by setting self.flow_format to
+        # ofproto_v1_0.NXFF_OPENFLOW10 but currently isn't.
+        self.send_msg(set_format)
+        self.send_barrier()
+
 
 def datapath_connection_factory(socket, address):
     LOG.debug('connected socket:%s address:%s', socket, address)
diff --git a/ryu/ofproto/ofproto_v1_0.py b/ryu/ofproto/ofproto_v1_0.py
index 1143fa0..a06cdf8 100644
--- a/ryu/ofproto/ofproto_v1_0.py
+++ b/ryu/ofproto/ofproto_v1_0.py
@@ -485,7 +485,19 @@ assert (calcsize(OFP_QUEUE_PROP_MIN_RATE_PACK_STR) +
 
 NX_VENDOR_ID = 0x00002320
 
+# enum nicira_type (abridged)
+NXT_SET_FLOW_FORMAT = 12
+
+# enum nx_flow_format
+NXFF_OPENFLOW10 = 0
+NXFF_NXM = 2
+
 NICIRA_HEADER_PACK_STR = '!II'
 NICIRA_HEADER_SIZE = 16
 assert (calcsize(NICIRA_HEADER_PACK_STR) +
         OFP_HEADER_SIZE == NICIRA_HEADER_SIZE)
+
+NX_SET_FLOW_FORMAT_PACK_STR = '!I'
+NX_SET_FLOW_FORMAT_SIZE = 20
+assert (calcsize(NX_SET_FLOW_FORMAT_PACK_STR) +
+                 NICIRA_HEADER_SIZE == NX_SET_FLOW_FORMAT_SIZE)
diff --git a/ryu/ofproto/ofproto_v1_0_parser.py 
b/ryu/ofproto/ofproto_v1_0_parser.py
index a0ee211..22ed26b 100644
--- a/ryu/ofproto/ofproto_v1_0_parser.py
+++ b/ryu/ofproto/ofproto_v1_0_parser.py
@@ -661,6 +661,18 @@ class NXTRequest(OFPVendor):
                       self.vendor, self.subtype)
 
 
+class NXTSetFlowFormat(NXTRequest):
+    def __init__(self, datapath, format):
+        super(NXTSetFlowFormat, self).__init__(datapath)
+        self.subtype = ofproto_v1_0.NXT_SET_FLOW_FORMAT
+        self.format = format
+
+    def _serialize_body(self):
+        self.serialize_header()
+        msg_pack_into(ofproto_v1_0.NX_SET_FLOW_FORMAT_PACK_STR,
+                      self.buf, ofproto_v1_0.NICIRA_HEADER_SIZE, self.format)
+
+
 #
 # asymmetric message (datapath -> controller)
 # parser only
-- 
1.7.6.3


------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to