summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYusuke Iwase <iwase.yusuke0@gmail.com>2015-08-03 14:24:59 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2015-08-03 21:31:09 +0900
commit64df2437eedce8a5a0c3401e8a7447088e3543aa (patch)
tree567dc59f178cb0c512c1718b1c24bb5735157a92
parent09cef6dc1d4ff52352ad1c9f984b881d439ee9da (diff)
ofproto_v1_5_parser: Support OF1.5 OFPGroupDescStats structure
OpenFlow Spec 1.5 adds properties field which is a list of group properties. This patch adds properties field support in group description multipart reply message. Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/ofproto/ofproto_v1_5_parser.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/ryu/ofproto/ofproto_v1_5_parser.py b/ryu/ofproto/ofproto_v1_5_parser.py
index 0701e389..c7d36b40 100644
--- a/ryu/ofproto/ofproto_v1_5_parser.py
+++ b/ryu/ofproto/ofproto_v1_5_parser.py
@@ -3157,28 +3157,37 @@ class OFPGroupStatsReply(OFPMultipartReply):
class OFPGroupDescStats(StringifyMixin):
- def __init__(self, type_=None, group_id=None, buckets=None, length=None):
+ def __init__(self, type_=None, group_id=None, buckets=[], properties=[],
+ length=None, bucket_array_len=None):
super(OFPGroupDescStats, self).__init__()
+ self.length = length
self.type = type_
self.group_id = group_id
+ self.bucket_array_len = bucket_array_len
self.buckets = buckets
+ self.properties = properties
@classmethod
def parser(cls, buf, offset):
stats = cls()
- (stats.length, stats.type, stats.group_id) = struct.unpack_from(
+ (stats.length, stats.type, stats.group_id,
+ stats.bucket_array_len) = struct.unpack_from(
ofproto.OFP_GROUP_DESC_STATS_PACK_STR, buf, offset)
offset += ofproto.OFP_GROUP_DESC_STATS_SIZE
+ bucket_buf = buf[offset:offset + stats.bucket_array_len]
stats.buckets = []
- length = ofproto.OFP_GROUP_DESC_STATS_SIZE
- while length < stats.length:
- bucket = OFPBucket.parser(buf, offset)
+ while bucket_buf:
+ bucket = OFPBucket.parser(bucket_buf, 0)
stats.buckets.append(bucket)
+ bucket_buf = bucket_buf[bucket.len:]
+ offset += stats.bucket_array_len
- offset += bucket.len
- length += bucket.len
+ rest = buf[offset:offset + stats.length]
+ while rest:
+ p, rest = OFPGroupProp.parse(rest)
+ stats.properties.append(p)
return stats
@@ -3241,10 +3250,10 @@ class OFPGroupDescStatsReply(OFPMultipartReply):
descs = []
for stat in ev.msg.body:
descs.append('length=%d type=%d group_id=%d '
- 'buckets=%s' %
+ 'buckets=%s properties=%' %
(stat.length, stat.type, stat.group_id,
- stat.bucket))
- self.logger.debug('GroupDescStats: %s', groups)
+ stat.bucket, repr(stat.properties)))
+ self.logger.debug('GroupDescStats: %s', descs)
"""
def __init__(self, datapath, type_=None, **kwargs):
super(OFPGroupDescStatsReply, self).__init__(datapath, **kwargs)