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 <class 'ryu.lib.packet.bpdu.RstBPDUs'>
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 "<stdin>", line 1, in <module>
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 <[email protected]>
---
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 8756518..9834df7 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 a979777..b36a67e 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,
--
1.7.10.4
------------------------------------------------------------------------------
Sponsored by Intel(R) XDK
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel