diff options
author | MichaĆ Rzepka <mrzepka@student.agh.edu.pl> | 2016-10-05 15:56:43 +0200 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-10-08 22:52:36 +0900 |
commit | 8d93787a6c7785f96ef08dc80670a09b42fa735a (patch) | |
tree | 41207604825f3855c35c4a4aa987ae54c5cc7a4d | |
parent | 6522ea1c833c15a91b6250a3fc874585daf9b8c8 (diff) |
ryu/lib/ofctl_v1_3: port name decoding fix
The patch resolves issue experienced when decoding certain values of
name field in OFPMP_PORT_DESCRIPTION body. Non-decodable bytes are
replaced with utf-8 replacement character.
This issue was observed while retrieving OFPMP_PORT_DESC reply from
OpenFlow 1.3 compliant HP switch. One of ofp_struct structures
describing OFPP_LOCAL port has a name field with value 4f 46 50 50 5f 4c
4f 43 41 4c 00 81 ff ff ff ff that translates to OFPP_LOCAL.......
Attempt to decode the value, as in modified line, raises an exception
"UnicodeDecodeError: 'utf8' codec can't decode byte 0x81 in position 11:
invalid start byte". In the submitted patch, non-decodable characters
are replaced with utf-8 REPLACEMENT CHARACTER (U+FFFD), which is
sufficient for the get_port_desc method to work seamlessly. Similar
usages of str.decode method may be found in ofctl_v1_3, ofctl_v1_4,
ofctl_v1_5 and need to be fixed in the future.
Signed-off-by: Michal Rzepka <mrzepka@student.agh.edu.pl>
Reviewed-by: Iwase Yusuke <iwase.yusuke0@gmail.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/lib/ofctl_v1_3.py | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/ryu/lib/ofctl_v1_3.py b/ryu/lib/ofctl_v1_3.py index 3cac36d7..4744a2ea 100644 --- a/ryu/lib/ofctl_v1_3.py +++ b/ryu/lib/ofctl_v1_3.py @@ -1014,7 +1014,7 @@ def get_port_desc(dp, waiters, to_user=True): stats = msg.body for stat in stats: d = {'hw_addr': stat.hw_addr, - 'name': stat.name.decode('utf-8'), + 'name': stat.name.decode('utf-8', errors='replace'), 'config': stat.config, 'state': stat.state, 'curr': stat.curr, |