def is_sfp_plus(eeprom): # Determine by exclusion. # Byte 0 = 0x03 can be SFP, SFP+, SFP28 if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) != 0x03: return False # If rj45, can only be sfp or sfp+ if read_eeprom_byte(eeprom, media_eeprom_address(offset=2)) == 0x22: return not is_sfp(eeprom) return not is_sfp(eeprom) and not is_sfp28(eeprom)
def is_sfp28(eeprom): # Byte 0: bits 0-7: Identifier = 0x03 -> Still ambiguous # Byte 36: bits 0-7: Extended Spec Compliance has to be in set (0x01, 0x02, 0x03,0x04, 0x08, 0x0B, 0x0C,0x0D,0x18, 0x19) if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) != 0x03: return False if read_eeprom_byte(eeprom, media_eeprom_address(offset=36)) not in [0x01, 0x02, 0x03,0x04, 0x08, 0x0B, 0x0C,0x0D,0x18, 0x19]: return False if read_eeprom_byte(eeprom, media_eeprom_address(offset=2)) == 0x22: return False return True
def is_qsfp28_dd(eeprom): if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) != 0x18: return False # Ideally 200G should not be coded with ver 3.0 if get_cmis_version(eeprom) >= 0x30: return False return True
def is_sfp(eeprom): # Conditions: # Byte 0: bits 0-7: Identifier = 0x03, 0x0B -> Still ambiguous # Byte 3: bits 4-7: 10G Compliance = 0 -> Still ambiguous # Max FC Speed <= 1200mbps -> Still ambiguous # Byte 6: 1G Eth Compliance != 0 if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) != 0x03: return False if read_eeprom_byte(eeprom, media_eeprom_address(offset=3)) & set_bits([4,5,6,7]): return False if get_max_fc_speed(read_eeprom_byte(eeprom, media_eeprom_address(offset=10))) > 1200: return False if read_eeprom_byte(eeprom, media_eeprom_address(offset=6)) == 0: return False return True
def is_sfp56_dd(eeprom): if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) != 0x1A: return False return True
def is_qsfp56_dd(eeprom): if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) != 0x18: return False return not is_qsfp28_dd(eeprom)
def is_qsfp28(eeprom): if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) != 0x11: return False return True
def is_qsfp_plus(eeprom): if read_eeprom_byte(eeprom, media_eeprom_address(offset=0)) not in [0x0C, 0x0D, 0x1E]: return False return True