summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>2012-11-06 19:50:41 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2012-11-06 20:16:33 +0900
commit6afa1c35ec0a0b2c66c22b6521be9886397aa1df (patch)
treea17417510e4a3de9a5cb6dc1f32da446af2131ba
parent6e14f983bce3ae4a36eb95fbd62d091b2051214f (diff)
of1.2: Fix MTVlanVid() parser and serializer
- The OFPVID_PRESENT bit indicate the presence of a valid VLAN_ID. - Reflect to unittests. Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/ofproto/ofproto_v1_2_parser.py10
-rw-r--r--ryu/tests/unit/ofproto/test_parser_v12.py26
2 files changed, 32 insertions, 4 deletions
diff --git a/ryu/ofproto/ofproto_v1_2_parser.py b/ryu/ofproto/ofproto_v1_2_parser.py
index 37d1ee1d..f8d2af4b 100644
--- a/ryu/ofproto/ofproto_v1_2_parser.py
+++ b/ryu/ofproto/ofproto_v1_2_parser.py
@@ -2076,6 +2076,16 @@ class MTVlanVid(OFPMatchField):
self.value = value
self.mask = mask
+ @classmethod
+ def field_parser(cls, header, buf, offset):
+ m = super(MTVlanVid, cls).field_parser(header, buf, offset)
+ m.value &= ~ofproto_v1_2.OFPVID_PRESENT
+ return m
+
+ def serialize(self, buf, offset):
+ self.value |= ofproto_v1_2.OFPVID_PRESENT
+ super(MTVlanVid, self).serialize(buf, offset)
+
@OFPMatchField.register_field_header([ofproto_v1_2.OXM_OF_VLAN_PCP])
class MTVlanPcp(OFPMatchField):
diff --git a/ryu/tests/unit/ofproto/test_parser_v12.py b/ryu/tests/unit/ofproto/test_parser_v12.py
index 7f38725a..b1e1cfc8 100644
--- a/ryu/tests/unit/ofproto/test_parser_v12.py
+++ b/ryu/tests/unit/ofproto/test_parser_v12.py
@@ -3511,24 +3511,42 @@ class TestOFPMatch(unittest.TestCase):
self._test_serialize_and_parser(header, value, match)
+ def _test_serialize_and_parser_vid(self, header, vid, match):
+ # match_serialize
+ buf = bytearray()
+ length = match.serialize(buf, 0)
+
+ cls_ = OFPMatchField._FIELDS_HEADERS.get(header)
+ fmt = '!HHI' + cls_.pack_str.replace('!', '')
+ res = unpack_from(fmt, buffer(buf), 0)
+
+ eq_(res[3], vid | ofproto_v1_2.OFPVID_PRESENT)
+
+ # match_parser
+ res = match.parser(str(buf), 0)
+
+ eq_(res.type, ofproto_v1_2.OFPMT_OXM)
+ eq_(res.fields[0].header, header)
+ eq_(res.fields[0].value, vid)
+
def test_set_vlan_vid(self):
header = ofproto_v1_2.OXM_OF_VLAN_VID
- value = vid = 0b101010101010
+ vid = 0b101010101010
match = OFPMatch()
match.set_vlan_vid(vid)
- self._test_serialize_and_parser(header, value, match)
+ self._test_serialize_and_parser_vid(header, vid, match)
def test_set_vlan_vid_masked(self):
header = ofproto_v1_2.OXM_OF_VLAN_VID_W
- value = vid = 0b101010101010
+ vid = 0b101010101010
mask = 0xfff
match = OFPMatch()
match.set_vlan_vid_masked(vid, mask)
- self._test_serialize_and_parser(header, value, match)
+ self._test_serialize_and_parser_vid(header, vid, match)
def test_set_vlan_pcp(self):
header = ofproto_v1_2.OXM_OF_VLAN_PCP