summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKONDOH Tasuku <kondoh.tasuku@po.ntts.co.jp>2013-02-20 12:51:02 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-02-24 07:50:39 +0900
commit7518f396e640587243149fded35fdc90c4243916 (patch)
tree3029ff5151e717d3dec7bd79ce305bde6bb4c604
parentbe07508b43780218a4092e234eac004162394e35 (diff)
of1.2: fix OFPGroupDescStats parser
- add action's size to offset of bucket. Signed-off-by: KONDOH Tasuku <kondoh.tasuku@po.ntts.co.jp> Reviewed-by: Simon Horman <horms@verge.net.au> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/ofproto/ofproto_v1_2_parser.py7
-rw-r--r--ryu/tests/unit/ofproto/test_parser_v12.py40
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