mirror of
https://github.com/faucetsdn/ryu.git
synced 2026-05-08 13:56:09 +02:00
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 <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 <ito.yuichi0@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
9b0c24c6df
commit
1c6bc8ae57
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user