diff options
-rw-r--r-- | ryu/ofproto/ofproto_v1_2_parser.py | 7 | ||||
-rw-r--r-- | ryu/tests/unit/ofproto/test_parser_v12.py | 40 |
2 files changed, 44 insertions, 3 deletions
diff --git a/ryu/ofproto/ofproto_v1_2_parser.py b/ryu/ofproto/ofproto_v1_2_parser.py index 989a494e..21c36a33 100644 --- a/ryu/ofproto/ofproto_v1_2_parser.py +++ b/ryu/ofproto/ofproto_v1_2_parser.py @@ -1220,9 +1220,10 @@ class OFPGroupDescStats(object): offset += ofproto_v1_2.OFP_GROUP_DESC_STATS_SIZE buckets = [] while bucket_len > 0: - buckets.append(OFPBucket.parser(buf, offset)) - offset += ofproto_v1_2.OFP_BUCKET_SIZE - bucket_len -= ofproto_v1_2.OFP_BUCKET_SIZE + bucket = OFPBucket.parser(buf, offset) + buckets.append(bucket) + offset += bucket.len + bucket_len -= bucket.len return cls(length, type_, group_id, buckets) diff --git a/ryu/tests/unit/ofproto/test_parser_v12.py b/ryu/tests/unit/ofproto/test_parser_v12.py index 75e2208a..ee69d226 100644 --- a/ryu/tests/unit/ofproto/test_parser_v12.py +++ b/ryu/tests/unit/ofproto/test_parser_v12.py @@ -2993,6 +2993,46 @@ class TestOFPGroupDescStats(unittest.TestCase): eq_(self.port, res.buckets[0].actions[0].port) eq_(self.max_len, res.buckets[0].actions[0].max_len) + def test_parser_loop(self): + bucket_cnt = 2 + # OFP_GROUP_DESC_STATS_PACK_STR = '!HBxI' + length = ofproto_v1_2.OFP_GROUP_DESC_STATS_SIZE \ + + (ofproto_v1_2.OFP_BUCKET_SIZE + + ofproto_v1_2.OFP_ACTION_OUTPUT_SIZE) * bucket_cnt + type_ = ofproto_v1_2.OFPGT_ALL + group_id = 6606 + + fmt = ofproto_v1_2.OFP_GROUP_DESC_STATS_PACK_STR + buf = pack(fmt, length, type_, group_id) + + buckets = [] + for b in range(bucket_cnt): + # OFP_BUCKET + weight = watch_port = watch_group = b + bucket = OFPBucket(self.len_, weight, + watch_port, watch_group, + self.actions) + buckets.append(bucket) + buf_buckets = bytearray() + buckets[b].serialize(buf_buckets, 0) + buf += str(buf_buckets) + + res = OFPGroupDescStats.parser(buf, 0) + + eq_(type_, res.type) + eq_(length, res.length) + eq_(group_id, res.group_id) + + for b in range(bucket_cnt): + eq_(buckets[b].len, res.buckets[b].len) + eq_(buckets[b].weight, res.buckets[b].weight) + eq_(buckets[b].watch_port, res.buckets[b].watch_port) + eq_(buckets[b].watch_group, res.buckets[b].watch_group) + eq_(buckets[b].actions[0].port, + res.buckets[b].actions[0].port) + eq_(buckets[b].actions[0].max_len, + res.buckets[b].actions[0].max_len) + class TestOFPGroupFeaturesStatsRequest(unittest.TestCase): """ Test case for ofproto_v1_2_parser.OFPGroupFeaturesStatsRequest |