summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>2013-08-05 17:01:37 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-08-06 09:09:12 +0900
commitf1d86f0572efa24c404a6574df9d33841eb91e34 (patch)
treea5898f77185df65efdc65c49db6c09d8b431f535
parent3b9283484863164e804adb9d5b9352f7f8f3b6d7 (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.py22
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])