From 6ea9f2ee07272ee6db394a897d42bec790df3890 Mon Sep 17 00:00:00 2001 From: tshalvi Date: Mon, 4 Dec 2023 16:57:45 +0000 Subject: [PATCH 1/2] Added functionality to media_settings_parser to handle the case where platform_chassis is None --- .../xcvrd_utilities/media_settings_parser.py | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py b/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py index 2a27422dc..428cdd2be 100644 --- a/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py +++ b/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py @@ -40,17 +40,18 @@ def media_settings_present(): def get_lane_speed_key(physical_port, port_speed, lane_count): - sfp = xcvrd.platform_chassis.get_sfp(physical_port) - api = sfp.get_xcvr_api() - lane_speed_key = None - if xcvrd.is_cmis_api(api): - appl_adv_dict = api.get_application_advertisement() - app_id = xcvrd.get_cmis_application_desired(api, int(lane_count), int(port_speed)) - if app_id and app_id in appl_adv_dict: - host_electrical_interface_id = appl_adv_dict[app_id].get('host_electrical_interface_id') - if host_electrical_interface_id: - lane_speed_key = LANE_SPEED_KEY_PREFIX + host_electrical_interface_id.split()[0] + + if xcvrd.platform_chassis is not None: + sfp = xcvrd.platform_chassis.get_sfp(physical_port) + api = sfp.get_xcvr_api() + if xcvrd.is_cmis_api(api): + appl_adv_dict = api.get_application_advertisement() + app_id = xcvrd.get_cmis_application_desired(api, int(lane_count), int(port_speed)) + if app_id and app_id in appl_adv_dict: + host_electrical_interface_id = appl_adv_dict[app_id].get('host_electrical_interface_id') + if host_electrical_interface_id: + lane_speed_key = LANE_SPEED_KEY_PREFIX + host_electrical_interface_id.split()[0] return lane_speed_key @@ -73,14 +74,15 @@ def get_media_settings_key(physical_port, transceiver_dict, port_speed, lane_cou media_compliance_dict = {} try: - sfp = xcvrd.platform_chassis.get_sfp(physical_port) - api = sfp.get_xcvr_api() - if xcvrd.is_cmis_api(api): - media_compliance_code = media_compliance_dict_str - else: - media_compliance_dict = ast.literal_eval(media_compliance_dict_str) - if sup_compliance_str in media_compliance_dict: - media_compliance_code = media_compliance_dict[sup_compliance_str] + if xcvrd.platform_chassis is not None: + sfp = xcvrd.platform_chassis.get_sfp(physical_port) + api = sfp.get_xcvr_api() + if xcvrd.is_cmis_api(api): + media_compliance_code = media_compliance_dict_str + else: + media_compliance_dict = ast.literal_eval(media_compliance_dict_str) + if sup_compliance_str in media_compliance_dict: + media_compliance_code = media_compliance_dict[sup_compliance_str] except ValueError as e: helper_logger.log_error("Invalid value for port {} 'specification_compliance': {}".format(physical_port, media_compliance_dict_str)) @@ -90,20 +92,20 @@ def get_media_settings_key(physical_port, transceiver_dict, port_speed, lane_cou media_key += media_type if len(media_compliance_code) != 0: media_key += '-' + media_compliance_code - sfp = xcvrd.platform_chassis.get_sfp(physical_port) - api = sfp.get_xcvr_api() - if xcvrd.is_cmis_api(api): - if media_compliance_code == "passive_copper_media_interface": + if xcvrd.platform_chassis is not None: + sfp = xcvrd.platform_chassis.get_sfp(physical_port) + api = sfp.get_xcvr_api() + if xcvrd.is_cmis_api(api): + if media_compliance_code == "passive_copper_media_interface": + if media_len != 0: + media_key += '-' + str(media_len) + 'M' + else: if media_len != 0: media_key += '-' + str(media_len) + 'M' - else: - if media_len != 0: - media_key += '-' + str(media_len) + 'M' else: media_key += '-' + '*' lane_speed_key = get_lane_speed_key(physical_port, port_speed, lane_count) - # return (vendor_key, media_key, lane_speed_key) return { VENDOR_KEY: vendor_key, MEDIA_KEY: media_key, From 7719fb838f81952810d075d77527d867c1314b18 Mon Sep 17 00:00:00 2001 From: tshalvi Date: Tue, 5 Dec 2023 16:58:21 +0000 Subject: [PATCH 2/2] Added error log messages in case platform_chassis is None --- sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py b/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py index 428cdd2be..b2a33b82d 100644 --- a/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py +++ b/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py @@ -52,6 +52,8 @@ def get_lane_speed_key(physical_port, port_speed, lane_count): host_electrical_interface_id = appl_adv_dict[app_id].get('host_electrical_interface_id') if host_electrical_interface_id: lane_speed_key = LANE_SPEED_KEY_PREFIX + host_electrical_interface_id.split()[0] + else: + helper_logger.log_error("Unable to derive lane_speed_key because platform_chassis is None") return lane_speed_key @@ -83,6 +85,8 @@ def get_media_settings_key(physical_port, transceiver_dict, port_speed, lane_cou media_compliance_dict = ast.literal_eval(media_compliance_dict_str) if sup_compliance_str in media_compliance_dict: media_compliance_code = media_compliance_dict[sup_compliance_str] + else: + helper_logger.log_error("Unable to derive media_key.media_compliance_code because platform_chassis is None") except ValueError as e: helper_logger.log_error("Invalid value for port {} 'specification_compliance': {}".format(physical_port, media_compliance_dict_str)) @@ -102,6 +106,8 @@ def get_media_settings_key(physical_port, transceiver_dict, port_speed, lane_cou else: if media_len != 0: media_key += '-' + str(media_len) + 'M' + else: + helper_logger.log_error("Unable to derive media_key.media_len because platform_chassis is None") else: media_key += '-' + '*'