diff options
author | YAMAMOTO Takashi <yamamoto@valinux.co.jp> | 2013-08-05 17:01:37 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-08-06 09:09:12 +0900 |
commit | f1d86f0572efa24c404a6574df9d33841eb91e34 (patch) | |
tree | a5898f77185df65efdc65c49db6c09d8b431f535 | |
parent | 3b9283484863164e804adb9d5b9352f7f8f3b6d7 (diff) |
of13: fix old parser and serializer of PBB_ID
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/ofproto/ofproto_v1_3_parser.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/ryu/ofproto/ofproto_v1_3_parser.py b/ryu/ofproto/ofproto_v1_3_parser.py index b2189ddc..71ad328b 100644 --- a/ryu/ofproto/ofproto_v1_3_parser.py +++ b/ryu/ofproto/ofproto_v1_3_parser.py @@ -1490,6 +1490,28 @@ class MTPbbIsid(OFPMatchField): self.value = value self.mask = mask + @classmethod + def field_parser(cls, header, buf, offset): + hasmask = (header >> 8) & 1 + mask = None + if ofproto_v1_3.oxm_tlv_header_extract_hasmask(header): + pack_str = '!' + cls.pack_str[1:] * 2 + (v1, v2, v3, m1, m2, m3) = struct.unpack_from(pack_str, buf, + offset + 4) + value = v1 << 16 | v2 << 8 | v3 + mask = m1 << 16 | m2 << 8 | m3 + else: + (v1, v2, v3,) = struct.unpack_from(cls.pack_str, buf, offset + 4) + value = v1 << 16 | v2 << 8 | v3 + return cls(header, value, mask) + + def _put(self, buf, offset, value): + ofproto_parser.msg_pack_into(self.pack_str, buf, offset, + (value >> 16) & 0xff, + (value >> 8) & 0xff, + (value >> 0) & 0xff) + self.length += self.n_bytes + @OFPMatchField.register_field_header([ofproto_v1_3.OXM_OF_TUNNEL_ID, ofproto_v1_3.OXM_OF_TUNNEL_ID_W]) |