def get_tx_disable(self): """ Retrieves the tx_disable status of this SFP """ tx_disable = False try: if self.media_type.startswith('QSFP'): tx_disable_data = self._get_eeprom_data('tx_disable') for tx_disable_id in ('Tx1Disable', 'Tx2Disable', 'Tx3Disable', 'Tx4Disable'): tx_disable |= ( tx_disable_data['data'][tx_disable_id]['value'] is 'On') else: tx_disable_data = self._read_eeprom_bytes( self.eeprom_path, SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) data = int(tx_disable_data[0], 16) tx_disable_hard = (sffbase().test_bit( data, SFP_TX_DISABLE_HARD_BIT) != 0) tx_disable_soft = (sffbase().test_bit( data, SFP_TX_DISABLE_SOFT_BIT) != 0) tx_disable = tx_disable_hard | tx_disable_soft except (TypeError, ValueError): return 'N/A' return tx_disable
def get_tx_disable(self): """ Retrieves the tx_disable status of this SFP """ tx_disable = None tx_disable_list = [] if (self.sfp_type == 'QSFP'): tx_disable_data = self._get_eeprom_data('tx_disable') if (tx_disable_data is not None): tx_disable = tx_disable_data['data']['Tx1Disable']['value'] if (tx_disable is 'On'): tx_disable_list.append(True) else: tx_disable_list.append(False) tx_disable = tx_disable_data['data']['Tx2Disable']['value'] if (tx_disable is 'On'): tx_disable_list.append(True) else: tx_disable_list.append(False) tx_disable = tx_disable_data['data']['Tx3Disable']['value'] if (tx_disable is 'On'): tx_disable_list.append(True) else: tx_disable_list.append(False) tx_disable = tx_disable_data['data']['Tx4Disable']['value'] if (tx_disable is 'On'): tx_disable_list.append(True) else: tx_disable_list.append(False) if (tx_disable_list[0] and tx_disable_list[1] and tx_disable_list[2] and tx_disable_list[3]): tx_disable = True else: tx_disable = False else: tx_disable_data = self._read_eeprom_bytes( self.eeprom_path, SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if (tx_disable_data is not None): data = int(tx_disable_data[0], 16) tx_disable_hard = (sffbase().test_bit( data, SFP_TX_DISABLE_HARD_BIT) != 0) tx_disable_soft = (sffbase().test_bit( data, SFP_TX_DISABLE_SOFT_BIT) != 0) tx_disable = tx_disable_hard | tx_disable_soft return tx_disable
def get_tx_fault(self): """ Retrieves the TX fault status of SFP Returns: A Boolean, True if SFP has TX fault, False if not Note : TX fault status is lached until a call to get_tx_fault or a reset. """ tx_fault = None if not self.get_presence(): return tx_fault # read the values from EEPROM if self.is_osfp_port: pass elif self.is_qsfp_port: dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( QSFP_CHANNL_TX_FAULT_STATUS_OFFSET, QSFP_CHANNL_TX_FAULT_STATUS_WIDTH) if self.get_presence( ) else None if dom_channel_monitor_raw is not None: tx_fault_data = int(dom_channel_monitor_raw[0], 16) tx_fault = True if ((tx_fault_data & 0xF) == 0xF) else False else: # SFP status_control_raw = self.__read_eeprom_specific_bytes( SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if status_control_raw: data = int(status_control_raw[0], 16) tx_fault = (sffbase().test_bit(data, 2) != 0) return tx_fault
def get_rx_los(self): """ Retrieves the RX LOS (lost-of-signal) status of SFP Returns: A Boolean, True if SFP has RX LOS, False if not. Note : RX LOS status is latched until a call to get_rx_los or a reset. """ rx_los = None if not self.get_presence(): return rx_los # read the values from EEPROM if self.is_osfp_port: pass elif self.is_qsfp_port: dom_channel_monitor_raw = self.__read_eeprom_specific_bytes( QSFP_CHANNL_RX_LOS_STATUS_OFFSET, QSFP_CHANNL_RX_LOS_STATUS_WIDTH) if self.get_presence( ) else None if dom_channel_monitor_raw is not None: rx_los_data = int(dom_channel_monitor_raw[0], 16) rx_los = True if ((rx_los_data & 0xF) == 0xF) else False else: # SFP ports status_control_raw = self.__read_eeprom_specific_bytes( SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if status_control_raw: data = int(status_control_raw[0], 16) rx_los = (sffbase().test_bit(data, 1) != 0) return rx_los
def get_tx_disable(self): """ Retrieves the tx_disable status of this SFP Returns: A Boolean, True if tx_disable is enabled, False if disabled """ tx_disable = False tx_fault = False status_control_raw = self.__read_eeprom_specific_bytes(SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if status_control_raw: data = int(status_control_raw[0], 16) tx_disable_hard = (sffbase().test_bit(data, SFP_TX_DISABLE_HARD_BIT) != 0) tx_disable_soft = (sffbase().test_bit(data, SFP_TX_DISABLE_SOFT_BIT) != 0) tx_disable = tx_disable_hard | tx_disable_soft return tx_disable
def get_tx_fault(self): """ Retrieves the TX fault status of SFP Returns: A Boolean, True if SFP has TX fault, False if not Note : TX fault status is lached until a call to get_tx_fault or a reset. """ tx_fault = False status_control_raw = self.__read_eeprom_specific_bytes( SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if status_control_raw: data = int(status_control_raw[0], 16) tx_fault = (sffbase().test_bit(data, 2) != 0) return tx_fault
def get_rx_los(self): """ Retrieves the RX LOS (lost-of-signal) status of SFP Returns: A Boolean, True if SFP has RX LOS, False if not. Note : RX LOS status is latched until a call to get_rx_los or a reset. """ rx_los = False status_control_raw = self.__read_eeprom_specific_bytes( SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if status_control_raw: data = int(status_control_raw[0], 16) rx_los = (sffbase().test_bit(data, 1) != 0) return rx_los
def get_tx_fault(self): """ Retrieves the TX fault status of SFP """ tx_fault = False try: if (self.sfp_type == 'QSFP'): tx_fault_data = self._get_eeprom_data('tx_fault') for tx_fault_id in ('Tx1Fault', 'Tx2Fault', 'Tx3Fault', 'Tx4Fault') : tx_fault |= (tx_fault_data['data'][tx_fault_id]['value'] is 'On') else: tx_fault_data = self._read_eeprom_bytes(self.eeprom_path, SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) data = int(tx_fault_data[0], 16) tx_fault = (sffbase().test_bit(data, 2) != 0) except (TypeError, ValueError): return 'N/A' return tx_fault
def get_tx_fault(self): """ Retrieves the TX fault status of SFP """ tx_fault = None tx_fault_list = [] if (self.sfp_type == 'QSFP'): tx_fault_data = self._get_eeprom_data('tx_fault') if (tx_fault_data is not None): tx_fault = tx_fault_data['data']['Tx1Fault']['value'] if (tx_fault is 'On'): tx_fault_list.append(True) else: tx_fault_list.append(False) tx_fault = tx_fault_data['data']['Tx2Fault']['value'] if (tx_fault is 'On'): tx_fault_list.append(True) else: tx_fault_list.append(False) tx_fault = tx_fault_data['data']['Tx3Fault']['value'] if (tx_fault is 'On'): tx_fault_list.append(True) else: tx_fault_list.append(False) tx_fault = tx_fault_data['data']['Tx4Fault']['value'] if (tx_fault is 'On'): tx_fault_list.append(True) else: tx_fault_list.append(False) if (tx_fault_list[0] and tx_fault_list[1] and tx_fault_list[2] and tx_fault_list[3]): tx_fault = True else: tx_fault = False else: tx_fault_data = self._read_eeprom_bytes(self.eeprom_path, SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if (tx_fault_data is not None): data = int(tx_fault_data[0], 16) tx_fault = (sffbase().test_bit(data, 2) != 0) return tx_fault
def get_rx_los(self): """ Retrieves the RX LOS (lost-of-signal) status of SFP """ rx_los = None rx_los_list = [] if (self.sfp_type == 'QSFP'): rx_los_data = self._get_eeprom_data('rx_los') if (rx_los_data is not None): rx_los = rx_los_data['data']['Rx1LOS']['value'] if (rx_los is 'On'): rx_los_list.append(True) else: rx_los_list.append(False) rx_los = rx_los_data['data']['Rx2LOS']['value'] if (rx_los is 'On'): rx_los_list.append(True) else: rx_los_list.append(False) rx_los = rx_los_data['data']['Rx3LOS']['value'] if (rx_los is 'On'): rx_los_list.append(True) else: rx_los_list.append(False) rx_los = rx_los_data['data']['Rx4LOS']['value'] if (rx_los is 'On'): rx_los_list.append(True) else: rx_los_list.append(False) if (rx_los_list[0] and rx_los_list[1] and rx_los_list[2] and rx_los_list[3]): rx_los = True else: rx_los = False else: rx_los_data = self._read_eeprom_bytes(self.eeprom_path, SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) if (rx_los_data is not None): data = int(rx_los_data[0], 16) rx_los = (sffbase().test_bit(data, 1) != 0) return rx_los
def get_rx_los(self): """ Retrieves the RX LOS (lost-of-signal) status of SFP """ rx_los = False try: if (self.sfp_type == 'QSFP'): rx_los_data = self._get_eeprom_data('rx_los') # As the function expects a single boolean, if any one channel experience LOS, # is considered LOS for QSFP for rx_los_id in ('Rx1LOS', 'Rx2LOS', 'Rx3LOS', 'Rx4LOS') : rx_los |= (rx_los_data['data'][rx_los_id]['value'] is 'On') else: rx_los_data = self._read_eeprom_bytes(self.eeprom_path, SFP_STATUS_CONTROL_OFFSET, SFP_STATUS_CONTROL_WIDTH) data = int(rx_los_data[0], 16) rx_los = sffbase().test_bit(data, 1) != 0 except (TypeError, ValueError): return 'N/A' return rx_los