diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/sfputil.py b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/sfputil.py index 531e06f13205..db1bea8a47f9 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/sfputil.py +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/sfputil.py @@ -6,7 +6,8 @@ try: import time import subprocess - from sonic_sfp.sfputilbase import SfpUtilBase + from sonic_sfp.sfputilbase import * + import syslog except ImportError as e: raise ImportError("%s - required module not found" % str(e)) @@ -18,6 +19,12 @@ # parameters for SFP presence SFP_STATUS_INSERTED = '1' +# system level event/error +EVENT_ON_ALL_SFP = '-1' +SYSTEM_NOT_READY = 'system_not_ready' +SYSTEM_READY = 'system_become_ready' +SYSTEM_FAIL = 'system_fail' + GET_HWSKU_CMD = "sonic-cfggen -d -v DEVICE_METADATA.localhost.hwsku" # magic code defnition for port number, qsfp port position of each hwsku @@ -25,6 +32,16 @@ hwsku_dict = {'ACS-MSN2700': 0, "LS-SN2700":0, 'ACS-MSN2740': 0, 'ACS-MSN2100': 1, 'ACS-MSN2410': 2, 'ACS-MSN2010': 3, 'ACS-MSN3700': 0, 'ACS-MSN3700C': 0, 'Mellanox-SN2700': 0, 'Mellanox-SN2700-D48C8': 0} port_position_tuple_list = [(0, 0, 31, 32, 1), (0, 0, 15, 16, 1), (0, 48, 55, 56, 1),(0, 18, 21, 22, 1)] +def log_info(msg, also_print_to_console=False): + syslog.openlog("sfputil") + syslog.syslog(syslog.LOG_INFO, msg) + syslog.closelog() + +def log_err(msg, also_print_to_console=False): + syslog.openlog("sfputil") + syslog.syslog(syslog.LOG_ERR, msg) + syslog.closelog() + class SfpUtil(SfpUtilBase): """Platform-specific SfpUtil class""" PORT_START = 0 @@ -72,6 +89,7 @@ def __init__(self): self.PORT_END = port_position_tuple[2] self.PORTS_IN_BLOCK = port_position_tuple[3] self.EEPROM_OFFSET = port_position_tuple[4] + self.mlnx_sfpd_started = False for x in range(0, self.port_end + 1): self._port_to_eeprom_mapping[x] = self.qsfp_sysfs_path + "qsfp{}".format(x + self.EEPROM_OFFSET) @@ -171,10 +189,24 @@ def get_transceiver_change_event(self, timeout=0): self.db_sel_object = swsscommon.Select.OBJECT self.sfpd_status_tbl = swsscommon.Table(self.state_db, 'MLNX_SFPD_TASK') - # Check the liveness of mlnx-sfpd, if it failed, return false + # Check the liveness of mlnx-sfpd, if it failed, return system_fail event + # If mlnx-sfpd not started, return system_not_ready event keys = self.sfpd_status_tbl.getKeys() if 'LIVENESS' not in keys: - return False, phy_port_dict + if self.mlnx_sfpd_started: + log_err("mlnx-sfpd exited, return false to notify xcvrd.") + phy_port_dict[EVENT_ON_ALL_SFP] = SYSTEM_FAIL + return False, phy_port_dict + else: + log_info("mlnx-sfpd not ready, return false to notify xcvrd.") + phy_port_dict[EVENT_ON_ALL_SFP] = SYSTEM_NOT_READY + return False, phy_port_dict + else: + if not self.mlnx_sfpd_started: + self.mlnx_sfpd_started = True + log_info("mlnx-sfpd is running") + phy_port_dict[EVENT_ON_ALL_SFP] = SYSTEM_READY + return False, phy_port_dict if timeout: (state, c) = self.db_sel.select(timeout) diff --git a/src/sonic-platform-common b/src/sonic-platform-common index 5d7954ee8d1b..b972e84c17d5 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit 5d7954ee8d1b70aaa6d8db1c9ed0f441c293c3c9 +Subproject commit b972e84c17d5f7e1bb378cc9a31b9da9c22a2311