- add action's size to offset of bucket.
Signed-off-by: KONDOH Tasuku <[email protected]>
---
ryu/ofproto/ofproto_v1_2_parser.py | 7 ++---
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 989a494..21c36a3 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 75e2208..ee69d22 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
--
1.7.9.5
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel