[barefoot][sonic-platform] Refactor sfp.py (#6770)
Use separate file for each sfp eeprom operation Signed-off-by: Volodymyr Boyko <volodymyrx.boiko@intel.com>
This commit is contained in:
parent
5aadc7ff55
commit
bcc4a52f56
@ -4,7 +4,10 @@ try:
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import errno
|
|
||||||
|
import tempfile
|
||||||
|
from contextlib import contextmanager
|
||||||
|
from copy import copy
|
||||||
|
|
||||||
sys.path.append(os.path.dirname(__file__))
|
sys.path.append(os.path.dirname(__file__))
|
||||||
|
|
||||||
@ -16,8 +19,6 @@ try:
|
|||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError (str(e) + "- required module not found")
|
raise ImportError (str(e) + "- required module not found")
|
||||||
|
|
||||||
SFP_EEPROM_CACHE = "/var/run/platform/sfp/cache"
|
|
||||||
|
|
||||||
class SfpUtil(SfpUtilBase):
|
class SfpUtil(SfpUtilBase):
|
||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
@ -55,15 +56,6 @@ class SfpUtil(SfpUtilBase):
|
|||||||
self.phy_port_cur_state = {}
|
self.phy_port_cur_state = {}
|
||||||
self.qsfp_interval = self.QSFP_CHECK_INTERVAL
|
self.qsfp_interval = self.QSFP_CHECK_INTERVAL
|
||||||
|
|
||||||
if not os.path.exists(os.path.dirname(SFP_EEPROM_CACHE)):
|
|
||||||
try:
|
|
||||||
os.makedirs(os.path.dirname(SFP_EEPROM_CACHE))
|
|
||||||
except OSError as e:
|
|
||||||
if e.errno != errno.EEXIST:
|
|
||||||
raise
|
|
||||||
|
|
||||||
open(SFP_EEPROM_CACHE, 'ab').close()
|
|
||||||
|
|
||||||
SfpUtilBase.__init__(self)
|
SfpUtilBase.__init__(self)
|
||||||
|
|
||||||
def update_port_info(self):
|
def update_port_info(self):
|
||||||
@ -200,21 +192,28 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
return self.ready, self.phy_port_dict
|
return self.ready, self.phy_port_dict
|
||||||
|
|
||||||
def _get_port_eeprom_path(self, port_num, devid):
|
@contextmanager
|
||||||
eeprom_path = None
|
def eeprom_action(self):
|
||||||
|
u = copy(self)
|
||||||
|
with tempfile.NamedTemporaryFile() as f:
|
||||||
|
u.eeprom_path = f.name
|
||||||
|
yield u
|
||||||
|
|
||||||
|
def _sfp_eeprom_present(self, client_eeprompath, offset):
|
||||||
|
return client_eeprompath and super(SfpUtil, self)._sfp_eeprom_present(client_eeprompath, offset)
|
||||||
|
|
||||||
|
def _get_port_eeprom_path(self, port_num, devid):
|
||||||
def qsfp_info_get(client):
|
def qsfp_info_get(client):
|
||||||
return client.pltfm_mgr.pltfm_mgr_qsfp_info_get(port_num)
|
return client.pltfm_mgr.pltfm_mgr_qsfp_info_get(port_num)
|
||||||
|
|
||||||
if self.get_presence(port_num):
|
if self.get_presence(port_num):
|
||||||
eeprom_hex = thrift_try(qsfp_info_get)
|
eeprom_hex = thrift_try(qsfp_info_get)
|
||||||
eeprom_cache = open(SFP_EEPROM_CACHE, 'wb')
|
|
||||||
eeprom_raw = bytearray.fromhex(eeprom_hex)
|
eeprom_raw = bytearray.fromhex(eeprom_hex)
|
||||||
|
with open(self.eeprom_path, 'wb') as eeprom_cache:
|
||||||
eeprom_cache.write(eeprom_raw)
|
eeprom_cache.write(eeprom_raw)
|
||||||
eeprom_cache.close()
|
return self.eeprom_path
|
||||||
eeprom_path = SFP_EEPROM_CACHE
|
|
||||||
|
|
||||||
return eeprom_path
|
return None
|
||||||
|
|
||||||
class Sfp(SfpBase):
|
class Sfp(SfpBase):
|
||||||
"""Platform-specific Sfp class"""
|
"""Platform-specific Sfp class"""
|
||||||
@ -242,25 +241,31 @@ class Sfp(SfpBase):
|
|||||||
SfpBase.__init__(self)
|
SfpBase.__init__(self)
|
||||||
|
|
||||||
def get_presence(self):
|
def get_presence(self):
|
||||||
return Sfp.sfputil.get_presence(self.port_num)
|
with Sfp.sfputil.eeprom_action() as u:
|
||||||
|
return u.get_presence(self.port_num)
|
||||||
|
|
||||||
def get_lpmode(self):
|
def get_lpmode(self):
|
||||||
return Sfp.sfputil.get_low_power_mode(self.port_num)
|
with Sfp.sfputil.eeprom_action() as u:
|
||||||
|
return u.get_low_power_mode(self.port_num)
|
||||||
|
|
||||||
def set_lpmode(self, lpmode):
|
def set_lpmode(self, lpmode):
|
||||||
return Sfp.sfputil.set_low_power_mode(self.port_num, lpmode)
|
with Sfp.sfputil.eeprom_action() as u:
|
||||||
|
return u.set_low_power_mode(self.port_num, lpmode)
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
return Sfp.sfputil.reset(self.port_num)
|
return Sfp.sfputil.reset(self.port_num)
|
||||||
|
|
||||||
def get_transceiver_info(self):
|
def get_transceiver_info(self):
|
||||||
return Sfp.sfputil.get_transceiver_info_dict(self.port_num)
|
with Sfp.sfputil.eeprom_action() as u:
|
||||||
|
return u.get_transceiver_info_dict(self.port_num)
|
||||||
|
|
||||||
def get_transceiver_bulk_status(self):
|
def get_transceiver_bulk_status(self):
|
||||||
return Sfp.sfputil.get_transceiver_dom_info_dict(self.port_num)
|
with Sfp.sfputil.eeprom_action() as u:
|
||||||
|
return u.get_transceiver_dom_info_dict(self.port_num)
|
||||||
|
|
||||||
def get_transceiver_threshold_info(self):
|
def get_transceiver_threshold_info(self):
|
||||||
return Sfp.sfputil.get_transceiver_dom_threshold_info_dict(self.port_num)
|
with Sfp.sfputil.eeprom_action() as u:
|
||||||
|
return u.get_transceiver_dom_threshold_info_dict(self.port_num)
|
||||||
|
|
||||||
def get_change_event(self, timeout=0):
|
def get_change_event(self, timeout=0):
|
||||||
return Sfp.get_transceiver_change_event(timeout)
|
return Sfp.get_transceiver_change_event(timeout)
|
||||||
|
Reference in New Issue
Block a user