This patch is the implementation for the following TODO.
- # TODO: add ofp_queue_prop_experimenter

Signed-off-by: IWASE Yusuke <[email protected]>
---
 ryu/ofproto/ofproto_v1_3_parser.py | 55 ++++++++++++++++++++++++++------------
 1 file changed, 38 insertions(+), 17 deletions(-)

diff --git a/ryu/ofproto/ofproto_v1_3_parser.py 
b/ryu/ofproto/ofproto_v1_3_parser.py
index 467f3fa..89ab05a 100644
--- a/ryu/ofproto/ofproto_v1_3_parser.py
+++ b/ryu/ofproto/ofproto_v1_3_parser.py
@@ -5678,18 +5678,14 @@ class OFPQueueProp(OFPQueuePropHeader):
     _QUEUE_PROP_PROPERTIES = {}
 
     @staticmethod
-    def register_queue_property(property_, len_):
+    def register_queue_property(property_):
         def _register_queue_property(cls):
-            cls.cls_property = property_
-            cls.cls_len = len_
-            OFPQueueProp._QUEUE_PROP_PROPERTIES[cls.cls_property] = cls
+            OFPQueueProp._QUEUE_PROP_PROPERTIES[property_] = cls
             return cls
         return _register_queue_property
 
-    def __init__(self):
-        cls = self.__class__
-        super(OFPQueueProp, self).__init__(cls.cls_property,
-                                           cls.cls_len)
+    def __init__(self, property_=None, len_=None):
+        super(OFPQueueProp, self).__init__(property_, len_)
 
     @classmethod
     def parser(cls, buf, offset):
@@ -5697,13 +5693,17 @@ class OFPQueueProp(OFPQueuePropHeader):
             ofproto.OFP_QUEUE_PROP_HEADER_PACK_STR,
             buf, offset)
         cls_ = cls._QUEUE_PROP_PROPERTIES.get(property_)
-        offset += ofproto.OFP_QUEUE_PROP_HEADER_SIZE
-        return cls_.parser(buf, offset)
+        p = cls_.parser(buf, offset + ofproto.OFP_QUEUE_PROP_HEADER_SIZE)
+        p.property = property_
+        p.len = len_
+        if property_ == ofproto.OFPQT_EXPERIMENTER:
+            rest = buf[offset + ofproto.OFP_QUEUE_PROP_EXPERIMENTER_SIZE:
+                       offset + len_]
+            p.parse_experimenter_data(rest)
+        return p
 
 
[email protected]_queue_property(
-    ofproto.OFPQT_MIN_RATE,
-    ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE)
[email protected]_queue_property(ofproto.OFPQT_MIN_RATE)
 class OFPQueuePropMinRate(OFPQueueProp):
     def __init__(self, rate, property_=None, len_=None):
         super(OFPQueuePropMinRate, self).__init__()
@@ -5716,9 +5716,7 @@ class OFPQueuePropMinRate(OFPQueueProp):
         return cls(rate)
 
 
[email protected]_queue_property(
-    ofproto.OFPQT_MAX_RATE,
-    ofproto.OFP_QUEUE_PROP_MAX_RATE_SIZE)
[email protected]_queue_property(ofproto.OFPQT_MAX_RATE)
 class OFPQueuePropMaxRate(OFPQueueProp):
     def __init__(self, rate, property_=None, len_=None):
         super(OFPQueuePropMaxRate, self).__init__()
@@ -5731,7 +5729,30 @@ class OFPQueuePropMaxRate(OFPQueueProp):
         return cls(rate)
 
 
-# TODO: add ofp_queue_prop_experimenter
[email protected]_queue_property(ofproto.OFPQT_EXPERIMENTER)
+class OFPQueuePropExperimenter(OFPQueueProp):
+    _EXPERIMENTER_DATA_PACK_STR = '!B'
+    _EXPERIMENTER_DATA_SIZE = 1
+
+    def __init__(self, experimenter, data=None, property_=None, len_=None):
+        super(OFPQueuePropExperimenter, self).__init__()
+        self.experimenter = experimenter
+        self.data = data
+
+    @classmethod
+    def parser(cls, buf, offset):
+        (experimenter,) = struct.unpack_from(
+            ofproto.OFP_QUEUE_PROP_EXPERIMENTER_PACK_STR, buf, offset)
+        return cls(experimenter)
+
+    def parse_experimenter_data(self, rest):
+        data = []
+        while rest:
+            (d,) = struct.unpack_from(
+                self._EXPERIMENTER_DATA_PACK_STR, rest, 0)
+            data.append(d)
+            rest = rest[self._EXPERIMENTER_DATA_SIZE:]
+        self.data = data
 
 
 class OFPPacketQueue(StringifyMixin):
-- 
1.9.1


------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to