def get_eeprom_dict(self, port_num): if not self.get_presence(port_num): return None sfp_data = {} eeprom_ifraw = self.get_eeprom_raw(port_num) eeprom_domraw = self.get_eeprom_dom_raw(port_num) if eeprom_ifraw is None: return None if port_num in self.qsfp_ports: sfpi_obj = sff8436InterfaceId(eeprom_ifraw) if sfpi_obj is not None: sfp_data['interface'] = sfpi_obj.get_data_pretty() sfpd_obj = sff8436Dom(eeprom_ifraw) if sfpd_obj is not None: sfp_data['dom'] = sfpd_obj.get_data_pretty() return sfp_data sfpi_obj = sff8472InterfaceId(eeprom_ifraw) if sfpi_obj is not None: sfp_data['interface'] = sfpi_obj.get_data_pretty() cal_type = sfpi_obj.get_calibration_type() if eeprom_domraw is not None: sfpd_obj = sff8472Dom(eeprom_domraw, cal_type) if sfpd_obj is not None: sfp_data['dom'] = sfpd_obj.get_data_pretty() return sfp_data
def get_eeprom_dict(self, port_num): """Returns dictionary of interface and dom data. format: {<port_num> : {'interface': {'version' : '1.0', 'data' : {...}}, 'dom' : {'version' : '1.0', 'data' : {...}}}} """ sfp_data = {} eeprom_ifraw = self.get_eeprom_raw(port_num) eeprom_domraw = self.get_eeprom_dom_raw(port_num) if eeprom_ifraw is None: return None if port_num in self.osfp_ports: sfpi_obj = inf8628InterfaceId(eeprom_ifraw) if sfpi_obj is not None: sfp_data['interface'] = sfpi_obj.get_data_pretty() return sfp_data elif port_num in self.qsfp_ports: sfpi_obj = sff8436InterfaceId(eeprom_ifraw) if sfpi_obj is not None: sfp_data['interface'] = sfpi_obj.get_data_pretty() # For Qsfp's the dom data is part of eeprom_if_raw # The first 128 bytes sfpd_obj = sff8436Dom(eeprom_ifraw) if sfpd_obj is not None: sfp_data['dom'] = sfpd_obj.get_data_pretty() return sfp_data else: sfpi_obj = sff8472InterfaceId(eeprom_ifraw) if sfpi_obj is not None: sfp_data['interface'] = sfpi_obj.get_data_pretty() cal_type = sfpi_obj.get_calibration_type() if eeprom_domraw is not None: sfpd_obj = sff8472Dom(eeprom_domraw, cal_type) if sfpd_obj is not None: sfp_data['dom'] = sfpd_obj.get_data_pretty() return sfp_data
def get_sfp_data(self, port_num): """Returns dictionary of interface and dom data. format: {<port_num> : {'interface': {'version' : '1.0', 'data' : { ... }}, 'dom' : {'version' : '1.0', 'data' : { ... }}}} """ sfp_data = {} if self.eeprom_ifraw == None: return None if port_num in self._qsfp_ports: sfpi_obj = sff8436InterfaceId(self.eeprom_ifraw) if sfpi_obj != None: sfp_data['interface'] = sfpi_obj.get_data_pretty() # For Qsfp's the dom data is part of eeprom_if_raw # The first 128 bytes sfpd_obj = sff8436Dom(self.eeprom_ifraw) if sfpd_obj != None: sfp_data['dom'] = sfpd_obj.get_data_pretty() return sfp_data sfpi_obj = sff8472InterfaceId(self.eeprom_ifraw) if sfpi_obj != None: sfp_data['interface'] = sfpi_obj.get_data_pretty() cal_type = sfpi_obj.get_calibration_type() if self.eeprom_domraw != None: sfpd_obj = sff8472Dom(self.eeprom_domraw, cal_type) if sfpd_obj != None: sfp_data['dom'] = sfpd_obj.get_data_pretty() return sfp_data
def get_transceiver_info_dict(self, port_num): transceiver_info_dict = {} if port_num in self.osfp_ports: offset = 0 vendor_rev_width = XCVR_HW_REV_WIDTH_OSFP if port_num in self.qsfp_ports: offset = 128 vendor_rev_width = XCVR_HW_REV_WIDTH_QSFP else: offset = 0 vendor_rev_width = XCVR_HW_REV_WIDTH_SFP file_path = self._get_port_eeprom_path(port_num, self.IDENTITY_EEPROM_ADDR) if not self._sfp_eeprom_present(file_path, 0): print("Error, file not exist %s" % file_path) return None try: sysfsfile_eeprom = open(file_path, mode="rb", buffering=0) except IOError: print("Error: reading sysfs file %s" % file_path) return None if port_num in self.osfp_ports: sfpi_obj = inf8628InterfaceId() elif port_num in self.qsfp_ports: sfpi_obj = sff8436InterfaceId() else: sfpi_obj = sff8472InterfaceId() if sfpi_obj is None: print("Error: sfp_object open failed") return None if port_num in self.osfp_ports: sfp_type_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + OSFP_TYPE_OFFSET), XCVR_TYPE_WIDTH) if sfp_type_raw is not None: sfp_type_data = sfpi_obj.parse_sfp_type(sfp_type_raw, 0) else: return None sfp_vendor_name_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + OSFP_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH) if sfp_vendor_name_raw is not None: sfp_vendor_name_data = sfpi_obj.parse_vendor_name( sfp_vendor_name_raw, 0) else: return None sfp_vendor_pn_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + OSFP_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH) if sfp_vendor_pn_raw is not None: sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn( sfp_vendor_pn_raw, 0) else: return None sfp_vendor_rev_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + OSFP_HW_REV_OFFSET), vendor_rev_width) if sfp_vendor_rev_raw is not None: sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev( sfp_vendor_rev_raw, 0) else: return None sfp_vendor_sn_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + OSFP_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH) if sfp_vendor_sn_raw is not None: sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn( sfp_vendor_sn_raw, 0) else: return None else: sfp_type_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + XCVR_TYPE_OFFSET), XCVR_TYPE_WIDTH) if sfp_type_raw is not None: sfp_type_data = sfpi_obj.parse_sfp_type(sfp_type_raw, 0) else: return None sfp_vendor_name_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + XCVR_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH) if sfp_vendor_name_raw is not None: sfp_vendor_name_data = sfpi_obj.parse_vendor_name( sfp_vendor_name_raw, 0) else: return None sfp_vendor_pn_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + XCVR_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH) if sfp_vendor_pn_raw is not None: sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn( sfp_vendor_pn_raw, 0) else: return None sfp_vendor_rev_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + XCVR_HW_REV_OFFSET), vendor_rev_width) if sfp_vendor_rev_raw is not None: sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev( sfp_vendor_rev_raw, 0) else: return None sfp_vendor_sn_raw = self._read_eeprom_specific_bytes( sysfsfile_eeprom, (offset + XCVR_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH) if sfp_vendor_sn_raw is not None: sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn( sfp_vendor_sn_raw, 0) else: return None try: sysfsfile_eeprom.close() except IOError: print("Error: closing sysfs file %s" % file_path) return None transceiver_info_dict['type'] = sfp_type_data['data']['type']['value'] transceiver_info_dict['manufacturename'] = sfp_vendor_name_data[ 'data']['Vendor Name']['value'] transceiver_info_dict['modelname'] = sfp_vendor_pn_data['data'][ 'Vendor PN']['value'] transceiver_info_dict['hardwarerev'] = sfp_vendor_rev_data['data'][ 'Vendor Rev']['value'] transceiver_info_dict['serialnum'] = sfp_vendor_sn_data['data'][ 'Vendor SN']['value'] return transceiver_info_dict