Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
	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
Example #5
0
    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