Skip to content

Commit 87c81de

Browse files
authored
Fix Xcvrd crash due to invalid key access in type_of_media_interface, host_electrical_interface, connector_dict (sonic-net#206)
Due to wrong page selection, the eeprom read returned a value 0xff which was an invalid key into connector_dict[]. Now we verify the key validity before accessing the dict element. The fix for why the eeprom read returned 0xff is being investigated separately. Signed-off-by: Prince George <[email protected]>
1 parent 4533f82 commit 87c81de

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

sonic_platform_base/sonic_sfp/qsfp_dd.py

+17-6
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ def decode_module_state(self, eeprom_data, offset, size):
4646

4747
def decode_connector(self, eeprom_data, offset, size):
4848
connector_id = eeprom_data[offset]
49-
return connector_dict[connector_id]
49+
if connector_id in connector_dict.keys():
50+
return connector_dict[connector_id]
51+
else:
52+
return 'N/A'
5053

5154
def decode_ext_id(self, eeprom_data, offset, size):
5255
# bits 5-7 represent Module Card Power Class
@@ -76,7 +79,12 @@ def decode_cable_len(self, eeprom_data, offset, size):
7679

7780
def decode_media_type(self, eeprom_data, offset, size):
7881
media_type_code = eeprom_data[0]
82+
83+
if media_type_code not in type_of_media_interface.keys():
84+
return None
85+
7986
dict_name = type_of_media_interface[media_type_code]
87+
8088
if dict_name == "nm_850_media_interface":
8189
return nm_850_media_interface
8290
elif dict_name == "sm_media_interface":
@@ -91,11 +99,14 @@ def decode_media_type(self, eeprom_data, offset, size):
9199
return None
92100

93101
def parse_application(self, sfp_media_type_dict, host_interface, media_interface):
94-
host_result = host_electrical_interface[host_interface]
102+
media_result = 'Unknown'
103+
host_result = 'Unknown'
104+
105+
if host_interface in host_electrical_interface:
106+
host_result = host_electrical_interface[host_interface]
107+
95108
if media_interface in sfp_media_type_dict.keys():
96109
media_result = sfp_media_type_dict[media_interface]
97-
else:
98-
media_result = 'Unknown'
99110
return host_result, media_result
100111

101112
version = '1.0'
@@ -213,7 +224,7 @@ def parse_vendor_sn(self, sn_raw_data, start_pos):
213224

214225
def parse_vendor_date(self, date_raw_data, start_pos):
215226
return sffbase.parse(self, self.vendor_date, date_raw_data, start_pos)
216-
227+
217228
def parse_vendor_oui(self, vendor_oui_data, start_pos):
218229
return sffbase.parse(self, self.vendor_oui, vendor_oui_data, start_pos)
219230

@@ -700,7 +711,7 @@ def parse_voltage(self, eeprom_raw_data, start_pos):
700711
def parse_channel_monitor_params(self, eeprom_raw_data, start_pos):
701712
return sffbase.parse(self, self.dom_channel_monitor_params, eeprom_raw_data,
702713
start_pos)
703-
714+
704715
def parse_dom_tx_bias(self, eeprom_raw_data, start_pos):
705716
return sffbase.parse(self, self.dom_tx_bias, eeprom_raw_data,
706717
start_pos)

0 commit comments

Comments
 (0)