122
122
'Fibre Channel link length/Transmitter Technology' ,
123
123
'Fibre Channel transmission media' , 'Fibre Channel Speed' )
124
124
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
+
125
131
class SfpUtilError (Exception ):
126
132
"""Base class for exceptions in this module."""
127
133
pass
@@ -818,6 +824,7 @@ def get_eeprom_dict(self, port_num):
818
824
def get_transceiver_info_dict (self , port_num ):
819
825
transceiver_info_dict = {}
820
826
compliance_code_dict = {}
827
+ dom_capability_dict = {}
821
828
822
829
# ToDo: OSFP tranceiver info parsing not fully supported.
823
830
# in inf8628.py lack of some memory map definition
@@ -902,6 +909,7 @@ def get_transceiver_info_dict(self, port_num):
902
909
transceiver_info_dict ['specification_compliance' ] = '{}'
903
910
transceiver_info_dict ['nominal_bit_rate' ] = 'N/A'
904
911
transceiver_info_dict ['application_advertisement' ] = 'N/A'
912
+ transceiver_info_dict ['dom_capability' ] = '{}'
905
913
906
914
else :
907
915
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):
988
996
else :
989
997
return None
990
998
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
+
991
1005
try :
992
1006
sysfsfile_eeprom .close ()
993
1007
except IOError :
@@ -1021,6 +1035,11 @@ def get_transceiver_info_dict(self, port_num):
1021
1035
compliance_code_dict [key ] = sfp_interface_bulk_data ['data' ]['Specification compliance' ]['value' ][key ]['value' ]
1022
1036
transceiver_info_dict ['specification_compliance' ] = str (compliance_code_dict )
1023
1037
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
+
1024
1043
transceiver_info_dict ['nominal_bit_rate' ] = str (sfp_interface_bulk_data ['data' ]['Nominal Bit Rate(100Mbs)' ]['value' ])
1025
1044
else :
1026
1045
for key in sfp_cable_length_tup :
@@ -1033,6 +1052,11 @@ def get_transceiver_info_dict(self, port_num):
1033
1052
compliance_code_dict [key ] = sfp_interface_bulk_data ['data' ]['Specification compliance' ]['value' ][key ]['value' ]
1034
1053
transceiver_info_dict ['specification_compliance' ] = str (compliance_code_dict )
1035
1054
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
+
1036
1060
transceiver_info_dict ['nominal_bit_rate' ] = str (sfp_interface_bulk_data ['data' ]['NominalSignallingRate(UnitsOf100Mbd)' ]['value' ])
1037
1061
1038
1062
return transceiver_info_dict
@@ -1092,7 +1116,7 @@ def get_transceiver_dom_info_dict(self, port_num):
1092
1116
# in SFF-8636 dom capability definitions evolving with the versions.
1093
1117
qsfp_dom_capability_raw = self ._read_eeprom_specific_bytes (sysfsfile_eeprom , (offset_xcvr + XCVR_DOM_CAPABILITY_OFFSET ), XCVR_DOM_CAPABILITY_WIDTH )
1094
1118
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 )
1096
1120
else :
1097
1121
return None
1098
1122
0 commit comments