Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion sonic-xcvrd/tests/test_xcvrd.py
Original file line number Diff line number Diff line change
Expand Up @@ -1495,12 +1495,19 @@ def _check_notify_media_setting(self, index, expected_found=False, expected_valu
port_mapping = PortMapping()
port_change_event = PortChangeEvent('Ethernet0', index, 0, PortChangeEvent.PORT_ADD)
port_mapping.handle_port_change_event(port_change_event)
media_settings_parser.notify_media_setting(logical_port_name, xcvr_info_dict, xcvr_table_helper, port_mapping)
media_settings_parser.notify_media_setting(logical_port_name, xcvr_info_dict, xcvr_table_helper, port_mapping, False)
found, result = app_port_tbl.get(logical_port_name)
result_dict = dict(result) if result else None
assert found == expected_found
assert result_dict == expected_value

# Test with unreliable_los as required
media_settings_parser.notify_media_setting(logical_port_name, xcvr_info_dict, xcvr_table_helper, port_mapping, True)
found, result = app_port_tbl.get(logical_port_name)
result_dict = dict(result) if result else None
assert found == expected_found
#assert result_dict == expected_value

@patch('xcvrd.xcvrd_utilities.optics_si_parser.g_optics_si_dict', optics_si_settings_dict)
@patch('xcvrd.xcvrd._wrapper_get_presence', MagicMock(return_value=True))
def test_fetch_optics_si_setting(self):
Expand Down
10 changes: 6 additions & 4 deletions sonic-xcvrd/xcvrd/xcvrd.py
Original file line number Diff line number Diff line change
Expand Up @@ -1489,7 +1489,9 @@ def _post_port_sfp_info_and_dom_thr_to_db_once(self, port_mapping, xcvr_table_he
rc = post_port_sfp_info_to_db(logical_port_name, port_mapping, xcvr_table_helper.get_intf_tbl(asic_index), transceiver_dict, stop_event)
if rc != SFP_EEPROM_NOT_READY:
if is_warm_start == False:
media_settings_parser.notify_media_setting(logical_port_name, transceiver_dict, xcvr_table_helper, port_mapping)
media_settings_parser.notify_media_setting(logical_port_name, transceiver_dict, xcvr_table_helper, port_mapping, False)
else:
media_settings_parser.notify_media_setting(logical_port_name, transceiver_dict, xcvr_table_helper, port_mapping, True)
else:
retry_eeprom_set.add(logical_port_name)

Expand Down Expand Up @@ -1722,7 +1724,7 @@ def task_worker(self, stopping_event, sfp_error_event):
self.dom_db_utils.post_port_dom_thresholds_to_db(logical_port)
self.vdm_db_utils.post_port_vdm_thresholds_to_db(logical_port)

media_settings_parser.notify_media_setting(logical_port, transceiver_dict, self.xcvr_table_helper, self.port_mapping)
media_settings_parser.notify_media_setting(logical_port, transceiver_dict, self.xcvr_table_helper, self.port_mapping, False)
transceiver_dict.clear()
elif value == sfp_status_helper.SFP_STATUS_REMOVED:
helper_logger.log_notice("{}: Got SFP removed event".format(logical_port))
Expand Down Expand Up @@ -1964,7 +1966,7 @@ def on_add_logical_port(self, port_change_event):
else:
self.dom_db_utils.post_port_dom_thresholds_to_db(port_change_event.port_name)
self.vdm_db_utils.post_port_vdm_thresholds_to_db(port_change_event.port_name)
media_settings_parser.notify_media_setting(port_change_event.port_name, transceiver_dict, self.xcvr_table_helper, self.port_mapping)
media_settings_parser.notify_media_setting(port_change_event.port_name, transceiver_dict, self.xcvr_table_helper, self.port_mapping, False)
else:
status = sfp_status_helper.SFP_STATUS_REMOVED if not status else status
update_port_transceiver_status_table_sw(port_change_event.port_name, status_sw_tbl, status, error_description)
Expand Down Expand Up @@ -1992,7 +1994,7 @@ def retry_eeprom_reading(self):
self.dom_db_utils.post_port_dom_thresholds_to_db(logical_port)
self.vdm_db_utils.post_port_vdm_thresholds_to_db(logical_port)

media_settings_parser.notify_media_setting(logical_port, transceiver_dict, self.xcvr_table_helper, self.port_mapping)
media_settings_parser.notify_media_setting(logical_port, transceiver_dict, self.xcvr_table_helper, self.port_mapping, False)
transceiver_dict.clear()
retry_success_set.add(logical_port)
# Update retry EEPROM set
Expand Down
14 changes: 13 additions & 1 deletion sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
SYSLOG_IDENTIFIER = "xcvrd"
helper_logger = syslogger.SysLogger(SYSLOG_IDENTIFIER, enable_runtime_config=True)

unreliable_los_change_event_media_key = ['unreliable_los']

PHYSICAL_PORT_NOT_EXIST = -1

def load_media_settings():
Expand Down Expand Up @@ -316,7 +318,7 @@ def get_speed_lane_count_and_subport(port, cfg_port_tbl):


def notify_media_setting(logical_port_name, transceiver_dict,
xcvr_table_helper, port_mapping):
xcvr_table_helper, port_mapping, is_unreliable_los_setting_required=False):

if not media_settings_present():
return
Expand Down Expand Up @@ -367,6 +369,7 @@ def notify_media_setting(logical_port_name, transceiver_dict,
return

fvs = swsscommon.FieldValuePairs(len(media_dict))
fvs_unreliable_los = swsscommon.FieldValuePairs(len(unreliable_los_change_event_media_key))

index = 0
helper_logger.log_notice("Publishing ASIC-side SI setting for port {} in APP_DB:".format(logical_port_name))
Expand All @@ -379,6 +382,15 @@ def notify_media_setting(logical_port_name, transceiver_dict,
fvs[index] = (str(media_key), str(val_str))
index += 1

if media_key in unreliable_los_change_event_media_key and is_unreliable_los_setting_required == True:
fvs_unreliable_los[0] = (str("apply_"+media_key), str(val_str))


if is_unreliable_los_setting_required == True:
xcvr_table_helper.get_app_port_tbl(asic_index).set(port_name, fvs_unreliable_los)
# No need to apply other settings if unreliable_los_setting flag check is on
return

xcvr_table_helper.get_app_port_tbl(asic_index).set(port_name, fvs)
xcvr_table_helper.get_state_port_tbl(asic_index).set(logical_port_name, [(NPU_SI_SETTINGS_SYNC_STATUS_KEY, NPU_SI_SETTINGS_NOTIFIED_VALUE)])
helper_logger.log_notice("Notify media setting: Published ASIC-side SI setting "
Expand Down
Loading