diff options
author | Yusuke Iwase <iwase.yusuke0@gmail.com> | 2015-08-03 14:24:59 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-08-03 21:31:09 +0900 |
commit | 64df2437eedce8a5a0c3401e8a7447088e3543aa (patch) | |
tree | 567dc59f178cb0c512c1718b1c24bb5735157a92 | |
parent | 09cef6dc1d4ff52352ad1c9f984b881d439ee9da (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.py | 29 |
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) |