From 281b15720b5991e8544ebffb06add4af4b4ba725 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:44:18 +0800 Subject: [PATCH] [fast-reboot-dump] Fix exception in struct.pack (#1309) This commit fix the exception thrown by struct.pack when attempting to pack a unicode string. The script ```fast-reboot-dump.py``` will throw an exception in python3 because ```struct.pack``` requires ```bytes``` for ```s```. ``` Traceback: Traceback (most recent call last): #012 File "/usr/local/bin/fast-reboot-dump.py", line 299, in #012 res = main() #012 File "/usr/local/bin/fast-reboot-dump.py", line 292, in main #012 send_garp_nd(neighbor_entries, map_mac_ip_per_vlan) #012 File "/usr/local/bin/fast-reboot-dump.py", line 221, in send_garp_nd #012 src_ip_addrs = {vlan_name:get_iface_ip_addr(vlan_name) for vlan_name,_,_ in neighbor_entries} #012 File "/usr/local/bin/fast-reboot-dump.py", line 221, in #012 src_ip_addrs = {vlan_name:get_iface_ip_addr(vlan_name) for vlan_name,_,_ in neighbor_entries} #012 File "/usr/local/bin/fast-reboot-dump.py", line 195, in get_iface_ip_addr #012 return get_if(iff, SIOCGIFADDR)[20:24] #012 File "/usr/local/bin/fast-reboot-dump.py", line 185, in get_if #012 ifreq = ioctl(s, cmd, struct.pack("16s16x",iff)) #012 struct.error: argument for 's' must be a bytes object ``` Signed-off-by: bingwang --- scripts/fast-reboot-dump.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/fast-reboot-dump.py b/scripts/fast-reboot-dump.py index 81d98456b24f..2744f05a0d4e 100644 --- a/scripts/fast-reboot-dump.py +++ b/scripts/fast-reboot-dump.py @@ -182,7 +182,7 @@ def generate_fdb_entries(filename): def get_if(iff, cmd): s = socket.socket() - ifreq = ioctl(s, cmd, struct.pack("16s16x",iff)) + ifreq = ioctl(s, cmd, struct.pack("16s16x",bytes(iff.encode()))) s.close() return ifreq