122122 'Fibre Channel link length/Transmitter Technology' ,
123123 'Fibre Channel transmission media' , 'Fibre Channel Speed' )
124124
125+ qsfp_dom_capability_tup = ('Tx_power_support' , 'Rx_power_support' ,
126+ 'Voltage_support' , 'Temp_support' )
127+
128+ # Add an EOL to prevent this being viewed as string instead of list
129+ sfp_dom_capability_tup = ('sff8472_dom_support' , 'EOL' )
130+
125131class SfpUtilError (Exception ):
126132 """Base class for exceptions in this module."""
127133 pass
@@ -818,6 +824,7 @@ def get_eeprom_dict(self, port_num):
818824 def get_transceiver_info_dict (self , port_num ):
819825 transceiver_info_dict = {}
820826 compliance_code_dict = {}
827+ dom_capability_dict = {}
821828
822829 # ToDo: OSFP tranceiver info parsing not fully supported.
823830 # in inf8628.py lack of some memory map definition
@@ -902,6 +909,7 @@ def get_transceiver_info_dict(self, port_num):
902909 transceiver_info_dict ['specification_compliance' ] = '{}'
903910 transceiver_info_dict ['nominal_bit_rate' ] = 'N/A'
904911 transceiver_info_dict ['application_advertisement' ] = 'N/A'
912+ transceiver_info_dict ['dom_capability' ] = '{}'
905913
906914 else :
907915 file_path = self ._get_port_eeprom_path (port_num , self .IDENTITY_EEPROM_ADDR )
@@ -988,6 +996,12 @@ def get_transceiver_info_dict(self, port_num):
988996 else :
989997 return None
990998
999+ sfp_dom_capability_raw = self ._read_eeprom_specific_bytes (sysfsfile_eeprom , (offset + XCVR_DOM_CAPABILITY_OFFSET ), XCVR_DOM_CAPABILITY_WIDTH )
1000+ if sfp_dom_capability_raw is not None :
1001+ sfp_dom_capability_data = sfpi_obj .parse_dom_capability (sfp_dom_capability_raw , 0 )
1002+ else :
1003+ return None
1004+
9911005 try :
9921006 sysfsfile_eeprom .close ()
9931007 except IOError :
@@ -1021,6 +1035,11 @@ def get_transceiver_info_dict(self, port_num):
10211035 compliance_code_dict [key ] = sfp_interface_bulk_data ['data' ]['Specification compliance' ]['value' ][key ]['value' ]
10221036 transceiver_info_dict ['specification_compliance' ] = str (compliance_code_dict )
10231037
1038+ for key in qsfp_dom_capability_tup :
1039+ if key in sfp_dom_capability_data ['data' ]:
1040+ dom_capability_dict [key ] = "yes" if sfp_dom_capability_data ['data' ][key ]['value' ] == 'on' else "no"
1041+ transceiver_info_dict ['dom_capability' ] = str (dom_capability_dict )
1042+
10241043 transceiver_info_dict ['nominal_bit_rate' ] = str (sfp_interface_bulk_data ['data' ]['Nominal Bit Rate(100Mbs)' ]['value' ])
10251044 else :
10261045 for key in sfp_cable_length_tup :
@@ -1033,6 +1052,11 @@ def get_transceiver_info_dict(self, port_num):
10331052 compliance_code_dict [key ] = sfp_interface_bulk_data ['data' ]['Specification compliance' ]['value' ][key ]['value' ]
10341053 transceiver_info_dict ['specification_compliance' ] = str (compliance_code_dict )
10351054
1055+ for key in sfp_dom_capability_tup :
1056+ if key in sfp_dom_capability_data ['data' ]:
1057+ dom_capability_dict [key ] = "yes" if sfp_dom_capability_data ['data' ][key ]['value' ] == 'on' else "no"
1058+ transceiver_info_dict ['dom_capability' ] = str (dom_capability_dict )
1059+
10361060 transceiver_info_dict ['nominal_bit_rate' ] = str (sfp_interface_bulk_data ['data' ]['NominalSignallingRate(UnitsOf100Mbd)' ]['value' ])
10371061
10381062 return transceiver_info_dict
@@ -1092,7 +1116,7 @@ def get_transceiver_dom_info_dict(self, port_num):
10921116 # in SFF-8636 dom capability definitions evolving with the versions.
10931117 qsfp_dom_capability_raw = self ._read_eeprom_specific_bytes (sysfsfile_eeprom , (offset_xcvr + XCVR_DOM_CAPABILITY_OFFSET ), XCVR_DOM_CAPABILITY_WIDTH )
10941118 if qsfp_dom_capability_raw is not None :
1095- qspf_dom_capability_data = sfpi_obj .parse_qsfp_dom_capability (qsfp_dom_capability_raw , 0 )
1119+ qspf_dom_capability_data = sfpi_obj .parse_dom_capability (qsfp_dom_capability_raw , 0 )
10961120 else :
10971121 return None
10981122
0 commit comments