From 1c6bc8ae5754afa499103bb12f500a346d4a0613 Mon Sep 17 00:00:00 2001 From: Yuichi Ito Date: Thu, 12 Dec 2013 15:31:57 +0900 Subject: [PATCH] packet lib: bpdu: fix reversibility about json to_jsondict() JSON-izes public member variables of the object. from_jsondict() calls the constructor using JSON members as the arguments. BPDU has the public member that is not required for the constructor, so TypeError occurs in from_jsondict(). this patch suppresses the output of to_jsondict() by changing unnecessary public members into protected members. examination code: from ryu.lib.packet import bpdu msg1 = bpdu.RstBPDUs() print msg1 jsondict = msg1.to_jsondict() msg2 = bpdu.RstBPDUs.from_jsondict(jsondict['RstBPDUs']) print msg2 print str(msg1) == str(msg2) before applying this patch: RstBPDUs(bpdu_type=2,bridge_mac_address='00:00:00:00:00:00',bridge_priority=32768,bridge_system_id_extension=0,flags=0,forward_delay=15,hello_time=2,max_age=20,message_age=0,port_number=0,port_priority=128,protocol_id=0,root_mac_address='00:00:00:00:00:00',root_path_cost=0,root_priority=32768,root_system_id_extension=0,version_1_length=0,version_id=2) CLS ARG {'max_age': 20, 'bpdu_type': 2, 'bridge_mac_address': 'MDA6MDA6MDA6MDA6MDA6MDA=', 'hello_time': 2, 'protocol_id': 0, 'bridge_priority': 32768, 'message_age': 0, 'version_id': 2, 'port_priority': 128, 'flags': 0, 'root_priority': 32768, 'version_1_length': 0, 'root_path_cost': 0, 'port_number': 0, 'root_mac_address': 'MDA6MDA6MDA6MDA6MDA6MDA=', 'root_system_id_extension': 0, 'forward_delay': 15, 'bridge_system_id_extension': 0} KWARG {'max_age': 20, 'bpdu_type': 2, 'bridge_mac_address': '00:00:00:00:00:00', 'hello_time': 2, 'protocol_id': 0, 'bridge_priority': 32768, 'message_age': 0, 'version_id': 2, 'port_priority': 128, 'flags': 0, 'root_priority': 32768, 'version_1_length': 0, 'root_path_cost': 0, 'port_number': 0, 'root_mac_address': '00:00:00:00:00:00', 'root_system_id_extension': 0, 'forward_delay': 15, 'bridge_system_id_extension': 0} Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/ryu/lib/stringify.py", line 293, in from_jsondict return cls(**dict(kwargs, **additional_args)) TypeError: __init__() got an unexpected keyword argument 'bpdu_type' after applying this patch: RstBPDUs(bridge_mac_address='00:00:00:00:00:00',bridge_priority=32768,bridge_system_id_extension=0,flags=0,forward_delay=15,hello_time=2,max_age=20,message_age=0,port_number=0,port_priority=128,root_mac_address='00:00:00:00:00:00',root_path_cost=0,root_priority=32768,root_system_id_extension=0) RstBPDUs(bridge_mac_address='00:00:00:00:00:00',bridge_priority=32768,bridge_system_id_extension=0,flags=0,forward_delay=15,hello_time=2,max_age=20,message_age=0,port_number=0,port_priority=128,root_mac_address='00:00:00:00:00:00',root_path_cost=0,root_priority=32768,root_system_id_extension=0) True Signed-off-by: Yuichi Ito Signed-off-by: FUJITA Tomonori --- ryu/lib/packet/bpdu.py | 14 +++++++------- ryu/tests/unit/packet/test_packet.py | 11 ++++------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/ryu/lib/packet/bpdu.py b/ryu/lib/packet/bpdu.py index 8756518a..9834df79 100644 --- a/ryu/lib/packet/bpdu.py +++ b/ryu/lib/packet/bpdu.py @@ -180,9 +180,9 @@ class bpdu(packet_base.PacketBase): assert hasattr(self, 'VERSION_ID') assert hasattr(self, 'BPDU_TYPE') - self.protocol_id = PROTOCOL_IDENTIFIER - self.version_id = self.VERSION_ID - self.bpdu_type = self.BPDU_TYPE + self._protocol_id = PROTOCOL_IDENTIFIER + self._version_id = self.VERSION_ID + self._bpdu_type = self.BPDU_TYPE if hasattr(self, 'check_parameters'): self.check_parameters() @@ -205,8 +205,8 @@ class bpdu(packet_base.PacketBase): return buf, None, None def serialize(self, payload, prev): - return struct.pack(bpdu._PACK_STR, self.protocol_id, - self.version_id, self.bpdu_type) + return struct.pack(bpdu._PACK_STR, self._protocol_id, + self._version_id, self._bpdu_type) @bpdu.register_bpdu_type @@ -450,7 +450,7 @@ class RstBPDUs(ConfigurationBPDUs): message_age=0, max_age=DEFAULT_MAX_AGE, hello_time=DEFAULT_HELLO_TIME, forward_delay=DEFAULT_FORWARD_DELAY): - self.version_1_length = VERSION_1_LENGTH + self._version_1_length = VERSION_1_LENGTH super(RstBPDUs, self).__init__(flags, root_priority, root_system_id_extension, @@ -482,5 +482,5 @@ class RstBPDUs(ConfigurationBPDUs): def serialize(self, payload, prev): base = super(RstBPDUs, self).serialize(payload, prev) - sub = struct.pack(RstBPDUs._PACK_STR, self.version_1_length) + sub = struct.pack(RstBPDUs._PACK_STR, self._version_1_length) return base + sub diff --git a/ryu/tests/unit/packet/test_packet.py b/ryu/tests/unit/packet/test_packet.py index a9797774..b36a67eb 100644 --- a/ryu/tests/unit/packet/test_packet.py +++ b/ryu/tests/unit/packet/test_packet.py @@ -1441,9 +1441,9 @@ class TestPacket(unittest.TestCase): # bpdu ok_(p_bpdu) - eq_(bpdu.PROTOCOL_IDENTIFIER, p_bpdu.protocol_id) - eq_(bpdu.PROTOCOLVERSION_ID_BPDU, p_bpdu.version_id) - eq_(bpdu.TYPE_CONFIG_BPDU, p_bpdu.bpdu_type) + eq_(bpdu.PROTOCOL_IDENTIFIER, p_bpdu._protocol_id) + eq_(bpdu.PROTOCOLVERSION_ID_BPDU, p_bpdu._version_id) + eq_(bpdu.TYPE_CONFIG_BPDU, p_bpdu._bpdu_type) eq_(0, p_bpdu.flags) eq_(32768, p_bpdu.root_priority) eq_(0, p_bpdu.root_system_id_extension) @@ -1484,10 +1484,7 @@ class TestPacket(unittest.TestCase): if k in llc_values]) llc_str = '%s(%s)' % (llc.llc.__name__, _llc_str) - bpdu_values = {'protocol_id': bpdu.PROTOCOL_IDENTIFIER, - 'version_id': bpdu.PROTOCOLVERSION_ID_BPDU, - 'bpdu_type': bpdu.TYPE_CONFIG_BPDU, - 'flags': 0, + bpdu_values = {'flags': 0, 'root_priority': long(32768), 'root_system_id_extension': long(0), 'root_mac_address': self.src_mac,