diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-07-06 05:17:44 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-07-06 14:24:35 +0900 |
commit | 5b0fc9041feac5126c61ebe157cb3e3b2b4cdde9 (patch) | |
tree | 92c4ddf06b8fcf6b094087de002f332b8257bab9 | |
parent | e7a9ad20483b7117638b16a1f8c94154d9083bc4 (diff) |
of1.2: fix OFPActionSetField
Fix some alignment bugs.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/ofproto/ofproto_v1_2_parser.py | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/ryu/ofproto/ofproto_v1_2_parser.py b/ryu/ofproto/ofproto_v1_2_parser.py index 27848e76..c614d2cf 100644 --- a/ryu/ofproto/ofproto_v1_2_parser.py +++ b/ryu/ofproto/ofproto_v1_2_parser.py @@ -461,6 +461,9 @@ class OFPInstructionActions(object): action_offset += a.len self.len = action_offset - offset + pad_len = utils.round_up(self.len, 8) - self.len + ofproto_parser.msg_pack_into("%dx" % pad_len, buf, action_offset) + self.len += pad_len msg_pack_into(ofproto_v1_2.OFP_INSTRUCTION_ACTIONS_PACK_STR, buf, offset, self.type, self.len) @@ -725,18 +728,22 @@ class OFPActionSetField(OFPAction): @classmethod def parser(cls, buf, offset): (type_, len_) = struct.unpack_from('!HH', buf, offset) + field = OFPMatchField.parser(buf, offset + 4) + action = cls(field) action.len = len_ - field = OFPMatchField.parse(buf, offset + 4) - return cls(field) + return action def serialize(self, buf, offset): - self.field.serialize(buf, offset + 4) - oxm_len = self.field.length - pad_len = utils.round_up(oxm_len + 4, 8) - (oxm_len + 4) - ofproto_parser.msg_pack_into("%dx" % pad_len, buf, - offset + 8 + oxm_len) - self.len = ofproto_v1_2.OFP_ACTION_SET_FIELD_SIZE + oxm_len + pad_len + oxm_len = self.field.oxm_len() + oxm_pad = utils.round_up(oxm_len + 4, 8) - (oxm_len + 4) + self.len = ofproto_v1_2.OFP_ACTION_SET_FIELD_SIZE + oxm_len + oxm_pad + pad_len = utils.round_up(self.len, 8) - self.len + self.len += pad_len + msg_pack_into('!HH', buf, offset, self.type, self.len) + self.field.serialize(buf, offset + 4) + offset += ofproto_v1_2.OFP_ACTION_SET_FIELD_SIZE + oxm_len + ofproto_parser.msg_pack_into("%dx" % pad_len, buf, offset) @OFPAction.register_action_type( @@ -1935,7 +1942,7 @@ class OFPMatchField(object): if len(mask): self._putv6(buf, offset + self.length, mask) - def length(self): + def oxm_len(self): return self.header & 0xff |