From ff0efc8bab2e15bf140319132d5479dad7326544 Mon Sep 17 00:00:00 2001 From: FUJITA Tomonori Date: Thu, 5 Jul 2012 02:39:33 +0900 Subject: of1.2: add common field_parser for MT* classes Most of MT* classes can use this helper classmethod. We get value and mask values but don't set them to an instance. It's done later. Signed-off-by: FUJITA Tomonori --- ryu/ofproto/ofproto_v1_2_parser.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ryu/ofproto/ofproto_v1_2_parser.py b/ryu/ofproto/ofproto_v1_2_parser.py index 4c04e5ea..43ad0de5 100644 --- a/ryu/ofproto/ofproto_v1_2_parser.py +++ b/ryu/ofproto/ofproto_v1_2_parser.py @@ -1862,10 +1862,20 @@ class OFPMatchField(object): (header,) = struct.unpack_from('!I', buf, offset) # TODO: handle unknown field cls_ = OFPMatchField._FIELDS_HEADERS.get(header) - field = cls_.parser(header, buf, offset) + field = cls_.field_parser(header, buf, offset) field.length = (header & 0xff) + 4 return field + @classmethod + def field_parser(cls, header, buf, offset): + hasmask = (header >> 8) & 1 + if hasmask: + pack_str = '!' + cls.pack_str[1:] * 2 + (value, mask) = struct.unpack_from(pack_str, buf, offset + 4) + else: + (value,) = struct.unpack_from(cls.pack_str, buf, offset + 4) + return cls(header) + def _put_header(self, buf, offset): ofproto_parser.msg_pack_into('!I', buf, offset, self.header) self.length += 4 -- cgit v1.2.3