Skip to content

Commit 4944a64

Browse files
keboliulguohan
authored andcommitted
[sonic_sfp] Extend sfpbase to get more info from SFP eeprom for xcvrd (sonic-net#22)
* extend sfp base to get more info from eeprom and provide to xcvrd * update for handling of OSFP
1 parent 4405ec9 commit 4944a64

3 files changed

Lines changed: 350 additions & 64 deletions

File tree

sonic_sfp/sff8436.py

Lines changed: 78 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -346,15 +346,62 @@ class sff8436InterfaceId(sffbase):
346346
'size' : 1,
347347
'type' : 'bitmap',
348348
'decode': {}}}
349-
350-
sfp_type = {
351-
'type':
352-
{'offset': 0,
353-
'size': 1,
354-
'type': 'enum',
355-
'decode': type_of_transceiver}
356-
}
357-
349+
350+
sfp_info_bulk = {'type':
351+
{'offset':0,
352+
'size':1,
353+
'type' : 'enum',
354+
'decode' : type_of_transceiver},
355+
'Extended Identifier':
356+
{'offset':1,
357+
'size':1,
358+
'type' : 'enum',
359+
'decode': ext_type_of_transceiver},
360+
'Connector':
361+
{'offset':2,
362+
'size':1,
363+
'type' : 'enum',
364+
'decode': connector},
365+
'Specification compliance':
366+
{'offset' : 3,
367+
'type' : 'nested',
368+
'decode' : specification_compliance},
369+
'EncodingCodes':
370+
{'offset':11,
371+
'size':1,
372+
'type' : 'enum',
373+
'decode' : encoding_codes},
374+
'Nominal Bit Rate(100Mbs)':
375+
{'offset': 12,
376+
'size':1,
377+
'type':'int'},
378+
'RateIdentifier':
379+
{'offset':13,
380+
'size':1,
381+
'type' : 'enum',
382+
'decode' : rate_identifier},
383+
'Length(km)':
384+
{'offset':14,
385+
'size':1,
386+
'type':'int'},
387+
'Length OM3(2m)':
388+
{'offset':15,
389+
'size':1,
390+
'type':'int'},
391+
'Length OM2(m)':
392+
{'offset':16,
393+
'size':1,
394+
'type':'int'},
395+
'Length OM1(m)':
396+
{'offset':17,
397+
'size':1,
398+
'type':'int'},
399+
'Length Cable Assembly(m)':
400+
{'offset':18,
401+
'size':1,
402+
'type':'int'}
403+
}
404+
358405
vendor_name = {
359406
'Vendor Name':
360407
{'offset': 0,
@@ -383,6 +430,20 @@ class sff8436InterfaceId(sffbase):
383430
'type': 'str'}
384431
}
385432

433+
vendor_oui = {
434+
'Vendor OUI':
435+
{'offset':0,
436+
'size':3,
437+
'type' : 'hex'}
438+
}
439+
440+
vendor_date = {
441+
'VendorDataCode(YYYY-MM-DD Lot)':
442+
{'offset':0,
443+
'size':8,
444+
'type': 'date'}
445+
}
446+
386447
qsfp_dom_capability = {
387448
'Tx_power_support':
388449
{'offset': 0,
@@ -401,7 +462,6 @@ class sff8436InterfaceId(sffbase):
401462
'bit': 5,
402463
'type': 'bitvalue'}
403464
}
404-
405465

406466
def __init__(self, eeprom_raw_data=None):
407467
self.interface_data = None
@@ -416,8 +476,8 @@ def __init__(self, eeprom_raw_data=None):
416476
def parse(self, eeprom_raw_data, start_pos):
417477
return sffbase.parse(self, self.interface_id, eeprom_raw_data, start_pos)
418478

419-
def parse_sfp_type(self, type_raw_data, start_pos):
420-
return sffbase.parse(self, self.sfp_type, type_raw_data, start_pos)
479+
def parse_sfp_info_bulk(self, type_raw_data, start_pos):
480+
return sffbase.parse(self, self.sfp_info_bulk, type_raw_data, start_pos)
421481

422482
def parse_vendor_name(self, name_raw_data, start_pos):
423483
return sffbase.parse(self, self.vendor_name, name_raw_data, start_pos)
@@ -431,6 +491,12 @@ def parse_vendor_pn(self, pn_raw_data, start_pos):
431491
def parse_vendor_sn(self, sn_raw_data, start_pos):
432492
return sffbase.parse(self, self.vendor_sn, sn_raw_data, start_pos)
433493

494+
def parse_vendor_date(self, sn_raw_data, start_pos):
495+
return sffbase.parse(self, self.vendor_date, sn_raw_data, start_pos)
496+
497+
def parse_vendor_oui(self, sn_raw_data, start_pos):
498+
return sffbase.parse(self, self.vendor_oui, sn_raw_data, start_pos)
499+
434500
def parse_qsfp_dom_capability(self, sn_raw_data, start_pos):
435501
return sffbase.parse(self, self.qsfp_dom_capability, sn_raw_data, start_pos)
436502

sonic_sfp/sff8472.py

Lines changed: 84 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -413,13 +413,65 @@ class sff8472InterfaceId(sffbase):
413413
'type': 'date'}}
414414

415415
# Parser for specific values that interested by SNMP
416-
sfp_type = {
417-
'type':
418-
{'offset': 0,
419-
'size': 1,
420-
'type': 'enum',
421-
'decode': type_of_transceiver}
422-
}
416+
417+
sfp_info_bulk = {'type':
418+
{'offset':0,
419+
'size':1,
420+
'type' : 'enum',
421+
'decode' : type_of_transceiver},
422+
'Extended Identifier':
423+
{'offset':1,
424+
'size':1,
425+
'type' : 'enum',
426+
'decode': exttypeoftransceiver},
427+
'Connector':
428+
{'offset':2,
429+
'size':1,
430+
'type' : 'enum',
431+
'decode': connector},
432+
'Specification compliance':
433+
{'offset' : 3,
434+
'type' : 'nested',
435+
'decode' : transceiver_codes},
436+
'EncodingCodes':
437+
{'offset':11,
438+
'size':1,
439+
'type' : 'enum',
440+
'decode' : encoding_codes},
441+
'NominalSignallingRate(UnitsOf100Mbd)':
442+
{'offset': 12,
443+
'size':1,
444+
'type':'int'},
445+
'RateIdentifier':
446+
{'offset':13,
447+
'size':1,
448+
'type' : 'enum',
449+
'decode' : rate_identifier},
450+
'LengthSMFkm-UnitsOfKm':
451+
{'offset':14,
452+
'size':1,
453+
'type':'int'},
454+
'LengthSMF(UnitsOf100m)':
455+
{'offset':15,
456+
'size':1,
457+
'type':'int'},
458+
'Length50um(UnitsOf10m)':
459+
{'offset':16,
460+
'size':1,
461+
'type':'int'},
462+
'Length62.5um(UnitsOfm)':
463+
{'offset':17,
464+
'size':1,
465+
'type':'int'},
466+
'LengthCable(UnitsOfm)':
467+
{'offset':18,
468+
'size':1,
469+
'type':'int'},
470+
'LengthOM3(UnitsOf10m)':
471+
{'offset':19,
472+
'size':1,
473+
'type':'int'}
474+
}
423475

424476
vendor_name = {
425477
'Vendor Name':
@@ -444,9 +496,23 @@ class sff8472InterfaceId(sffbase):
444496

445497
vendor_sn = {
446498
'Vendor SN':
447-
{'offset': 0,
448-
'size': 16,
449-
'type': 'str'}
499+
{'offset': 0,
500+
'size': 16,
501+
'type': 'str'}
502+
}
503+
504+
vendor_oui = {
505+
'Vendor OUI':
506+
{'offset':0,
507+
'size':3,
508+
'type' : 'hex'}
509+
}
510+
511+
vendor_date = {
512+
'VendorDataCode(YYYY-MM-DD Lot)':
513+
{'offset':0,
514+
'size':8,
515+
'type': 'date'}
450516
}
451517

452518
# Returns calibration type
@@ -477,8 +543,8 @@ def parse(self, eeprom_raw_data, start_pos):
477543
return sffbase.parse(self, self.interface_id, eeprom_raw_data, start_pos)
478544

479545
#new parser functions for specific values that interested by SNMP
480-
def parse_sfp_type(self, type_raw_data, start_pos):
481-
return sffbase.parse(self, self.sfp_type, type_raw_data, start_pos)
546+
def parse_sfp_info_bulk(self, type_raw_data, start_pos):
547+
return sffbase.parse(self, self.sfp_info_bulk, type_raw_data, start_pos)
482548

483549
def parse_vendor_name(self, name_raw_data, start_pos):
484550
return sffbase.parse(self, self.vendor_name, name_raw_data, start_pos)
@@ -492,6 +558,12 @@ def parse_vendor_pn(self, pn_raw_data, start_pos):
492558
def parse_vendor_sn(self, sn_raw_data, start_pos):
493559
return sffbase.parse(self, self.vendor_sn, sn_raw_data, start_pos)
494560

561+
def parse_vendor_date(self, sn_raw_data, start_pos):
562+
return sffbase.parse(self, self.vendor_date, sn_raw_data, start_pos)
563+
564+
def parse_vendor_oui(self, sn_raw_data, start_pos):
565+
return sffbase.parse(self, self.vendor_oui, sn_raw_data, start_pos)
566+
495567
def dump_pretty(self):
496568
if self.interface_data == None:
497569
print('Object not initialized, nothing to print')

0 commit comments

Comments
 (0)