@@ -364,6 +364,61 @@ class sff8436InterfaceId(sffbase):
364
364
'type' : 'bitmap' ,
365
365
'decode' : {}}}
366
366
367
+ sfp_type = {
368
+ 'type' :
369
+ {'offset' : 0 ,
370
+ 'size' : 1 ,
371
+ 'type' : 'enum' ,
372
+ 'decode' : type_of_transceiver }
373
+ }
374
+
375
+ vendor_name = {
376
+ 'Vendor Name' :
377
+ {'offset' : 0 ,
378
+ 'size' : 16 ,
379
+ 'type' : 'str' }
380
+ }
381
+
382
+ vendor_pn = {
383
+ 'Vendor PN' :
384
+ {'offset' : 0 ,
385
+ 'size' : 16 ,
386
+ 'type' : 'str' }
387
+ }
388
+
389
+ vendor_rev = {
390
+ 'Vendor Rev' :
391
+ {'offset' : 0 ,
392
+ 'size' : 2 ,
393
+ 'type' : 'str' }
394
+ }
395
+
396
+ vendor_sn = {
397
+ 'Vendor SN' :
398
+ {'offset' : 0 ,
399
+ 'size' : 16 ,
400
+ 'type' : 'str' }
401
+ }
402
+
403
+ qsfp_dom_capability = {
404
+ 'Tx_power_support' :
405
+ {'offset' : 0 ,
406
+ 'bit' : 2 ,
407
+ 'type' : 'bitvalue' },
408
+ 'Rx_power_support' :
409
+ {'offset' : 0 ,
410
+ 'bit' : 3 ,
411
+ 'type' : 'bitvalue' },
412
+ 'Voltage_support' :
413
+ {'offset' : 0 ,
414
+ 'bit' : 4 ,
415
+ 'type' : 'bitvalue' },
416
+ 'Temp_support' :
417
+ {'offset' : 0 ,
418
+ 'bit' : 5 ,
419
+ 'type' : 'bitvalue' }
420
+ }
421
+
367
422
368
423
def __init__ (self , eeprom_raw_data = None ):
369
424
self .interface_data = None
@@ -378,6 +433,24 @@ def __init__(self, eeprom_raw_data=None):
378
433
def parse (self , eeprom_raw_data , start_pos ):
379
434
return sffbase .parse (self , self .interface_id , eeprom_raw_data , start_pos )
380
435
436
+ def parse_sfp_type (self , type_raw_data , start_pos ):
437
+ return sffbase .parse (self , self .sfp_type , type_raw_data , start_pos )
438
+
439
+ def parse_vendor_name (self , name_raw_data , start_pos ):
440
+ return sffbase .parse (self , self .vendor_name , name_raw_data , start_pos )
441
+
442
+ def parse_vendor_rev (self , rev_raw_data , start_pos ):
443
+ return sffbase .parse (self , self .vendor_rev , rev_raw_data , start_pos )
444
+
445
+ def parse_vendor_pn (self , pn_raw_data , start_pos ):
446
+ return sffbase .parse (self , self .vendor_pn , pn_raw_data , start_pos )
447
+
448
+ def parse_vendor_sn (self , sn_raw_data , start_pos ):
449
+ return sffbase .parse (self , self .vendor_sn , sn_raw_data , start_pos )
450
+
451
+ def parse_qsfp_dom_capability (self , sn_raw_data , start_pos ):
452
+ return sffbase .parse (self , self .qsfp_dom_capability , sn_raw_data , start_pos )
453
+
381
454
def dump_pretty (self ):
382
455
if self .interface_data == None :
383
456
print ('Object not initialized, nothing to print' )
@@ -640,7 +713,6 @@ def calc_rx_power(self, eeprom_data, offset, size):
640
713
641
714
return retval
642
715
643
-
644
716
dom_status_indicator = {'DataNotReady' :
645
717
{'offset' : 2 ,
646
718
'bit' : 0 ,
@@ -857,7 +929,6 @@ def calc_rx_power(self, eeprom_data, offset, size):
857
929
'bit' : 0 ,
858
930
'type' : 'bitvalue' }}
859
931
860
-
861
932
dom_module_monitor_values = {'Temperature' :
862
933
{'offset' :22 ,
863
934
'size' :2 ,
@@ -923,6 +994,148 @@ def calc_rx_power(self, eeprom_data, offset, size):
923
994
'type' : 'nested' ,
924
995
'decode' : dom_channel_monitor_values }}
925
996
997
+ # new added parser for some specific values interested by SNMP
998
+ # TO DO: find a way to reuse the definitions in above code, need refactor
999
+ revision_compliance = {
1000
+ '00' : 'Revision not specified' ,
1001
+ '01' : 'SFF-8436 Rev 4.8' ,
1002
+ '02' : 'SFF-8436 Rev 4.8 with extra bytes support' ,
1003
+ '03' : 'SFF-8636 Rev 1.3' ,
1004
+ '04' : 'SFF-8636 Rev 1.4' ,
1005
+ '05' : 'SFF-8636 Rev 1.5' ,
1006
+ '06' : 'SFF-8636 Rev 2.0' ,
1007
+ '07' : 'SFF-8636 Rev 2.5'
1008
+ }
1009
+
1010
+ sfp_dom_rev = {
1011
+ 'dom_rev' :
1012
+ {'offset' : 0 ,
1013
+ 'size' : 1 ,
1014
+ 'type' : 'enum' ,
1015
+ 'decode' : revision_compliance }
1016
+ }
1017
+
1018
+ dom_module_temperature = {
1019
+ 'Temperature' :
1020
+ {'offset' : 0 ,
1021
+ 'size' : 2 ,
1022
+ 'type' : 'func' ,
1023
+ 'decode' : {'func' : calc_temperature }}
1024
+ }
1025
+
1026
+ dom_module_voltage = {
1027
+ 'Vcc' :
1028
+ {'offset' : 0 ,
1029
+ 'size' : 2 ,
1030
+ 'type' : 'func' ,
1031
+ 'decode' : {'func' : calc_voltage }}
1032
+ }
1033
+
1034
+ dom_channel_monitor_params = {
1035
+ 'RX1Power' :
1036
+ {'offset' : 0 ,
1037
+ 'size' : 2 ,
1038
+ 'type' : 'func' ,
1039
+ 'decode' : {'func' : calc_rx_power }},
1040
+ 'RX2Power' :
1041
+ {'offset' : 2 ,
1042
+ 'size' : 2 ,
1043
+ 'type' : 'func' ,
1044
+ 'decode' : {'func' : calc_rx_power }},
1045
+ 'RX3Power' :
1046
+ {'offset' : 4 ,
1047
+ 'size' : 2 ,
1048
+ 'type' : 'func' ,
1049
+ 'decode' : {'func' : calc_rx_power }},
1050
+ 'RX4Power' :
1051
+ {'offset' : 6 ,
1052
+ 'size' : 2 ,
1053
+ 'type' : 'func' ,
1054
+ 'decode' : {'func' : calc_rx_power }},
1055
+ 'TX1Bias' :
1056
+ {'offset' : 8 ,
1057
+ 'size' : 2 ,
1058
+ 'type' : 'func' ,
1059
+ 'decode' : {'func' : calc_bias }},
1060
+ 'TX2Bias' :
1061
+ {'offset' : 10 ,
1062
+ 'size' : 2 ,
1063
+ 'type' : 'func' ,
1064
+ 'decode' : {'func' : calc_bias }},
1065
+ 'TX3Bias' :
1066
+ {'offset' : 12 ,
1067
+ 'size' : 2 ,
1068
+ 'type' : 'func' ,
1069
+ 'decode' : {'func' : calc_bias }},
1070
+ 'TX4Bias' :
1071
+ {'offset' : 14 ,
1072
+ 'size' : 2 ,
1073
+ 'type' : 'func' ,
1074
+ 'decode' : {'func' : calc_bias }}
1075
+ }
1076
+
1077
+ dom_channel_monitor_params_with_tx_power = {
1078
+ 'RX1Power' :
1079
+ {'offset' : 0 ,
1080
+ 'size' : 2 ,
1081
+ 'type' : 'func' ,
1082
+ 'decode' : {'func' : calc_rx_power }},
1083
+ 'RX2Power' :
1084
+ {'offset' : 2 ,
1085
+ 'size' : 2 ,
1086
+ 'type' : 'func' ,
1087
+ 'decode' : {'func' : calc_rx_power }},
1088
+ 'RX3Power' :
1089
+ {'offset' : 4 ,
1090
+ 'size' : 2 ,
1091
+ 'type' : 'func' ,
1092
+ 'decode' : {'func' : calc_rx_power }},
1093
+ 'RX4Power' :
1094
+ {'offset' : 6 ,
1095
+ 'size' : 2 ,
1096
+ 'type' : 'func' ,
1097
+ 'decode' : {'func' : calc_rx_power }},
1098
+ 'TX1Bias' :
1099
+ {'offset' : 8 ,
1100
+ 'size' : 2 ,
1101
+ 'type' : 'func' ,
1102
+ 'decode' : {'func' : calc_bias }},
1103
+ 'TX2Bias' :
1104
+ {'offset' : 10 ,
1105
+ 'size' : 2 ,
1106
+ 'type' : 'func' ,
1107
+ 'decode' : {'func' : calc_bias }},
1108
+ 'TX3Bias' :
1109
+ {'offset' : 12 ,
1110
+ 'size' : 2 ,
1111
+ 'type' : 'func' ,
1112
+ 'decode' : {'func' : calc_bias }},
1113
+ 'TX4Bias' :
1114
+ {'offset' : 14 ,
1115
+ 'size' : 2 ,
1116
+ 'type' : 'func' ,
1117
+ 'decode' : {'func' : calc_bias }},
1118
+ 'TX1Power' :
1119
+ {'offset' : 0 ,
1120
+ 'size' : 2 ,
1121
+ 'type' : 'func' ,
1122
+ 'decode' : {'func' : calc_tx_power }},
1123
+ 'TX2Power' :
1124
+ {'offset' : 2 ,
1125
+ 'size' : 2 ,
1126
+ 'type' : 'func' ,
1127
+ 'decode' : {'func' : calc_tx_power }},
1128
+ 'TX3Power' :
1129
+ {'offset' : 4 ,
1130
+ 'size' : 2 ,
1131
+ 'type' : 'func' ,
1132
+ 'decode' : {'func' : calc_tx_power }},
1133
+ 'TX4Power' :
1134
+ {'offset' : 6 ,
1135
+ 'size' : 2 ,
1136
+ 'type' : 'func' ,
1137
+ 'decode' : {'func' : calc_tx_power }}
1138
+ }
926
1139
927
1140
def __init__ (self , eeprom_raw_data = None , calibration_type = 1 ):
928
1141
self ._calibration_type = calibration_type
@@ -936,6 +1149,26 @@ def parse(self, eeprom_raw_data, start_pos):
936
1149
return sffbase .parse (self , self .dom_map , eeprom_raw_data ,
937
1150
start_pos )
938
1151
1152
+ # Parser functions for specific values interested by SNMP
1153
+ def parse_sfp_dom_rev (self , type_raw_data , start_pos ):
1154
+ return sffbase .parse (self , self .sfp_dom_rev , type_raw_data , start_pos )
1155
+
1156
+ def parse_temperature (self , eeprom_raw_data , start_pos ):
1157
+ return sffbase .parse (self , self .dom_module_temperature , eeprom_raw_data ,
1158
+ start_pos )
1159
+
1160
+ def parse_voltage (self , eeprom_raw_data , start_pos ):
1161
+ return sffbase .parse (self , self .dom_module_voltage , eeprom_raw_data ,
1162
+ start_pos )
1163
+
1164
+ def parse_channel_monitor_params (self , eeprom_raw_data , start_pos ):
1165
+ return sffbase .parse (self , self .dom_channel_monitor_params , eeprom_raw_data ,
1166
+ start_pos )
1167
+
1168
+ def parse_channel_monitor_params_with_tx_power (self , eeprom_raw_data , start_pos ):
1169
+ return sffbase .parse (self , self .dom_channel_monitor_params_with_tx_power , eeprom_raw_data ,
1170
+ start_pos )
1171
+
939
1172
def dump_pretty (self ):
940
1173
if self .dom_data == None :
941
1174
print ('Object not initialized, nothing to print' )
0 commit comments