[mlnx-sfp-plugin] enhancement to support transceiver sensor monitoring (#1839)
* [mlnx-sfpplugin] enhancement to support tranceiver sensor monitoring * Modify the eeprom folder to make it accessably from pmon container * implement the get_transceiver_change_event API file change list modified: device/mellanox/x86_64-mlnx_lssn2700-r0/plugins/sfputil.py modified: device/mellanox/x86_64-mlnx_msn2100-r0/plugins/sfputil.py modified: device/mellanox/x86_64-mlnx_msn2410-r0/plugins/sfputil.py modified: device/mellanox/x86_64-mlnx_msn2700-r0/plugins/sfputil.py modified: device/mellanox/x86_64-mlnx_msn2740-r0/plugins/sfputil.py signed-off-by Liu Kebo kebol@mellanox.com * remove commented code * revise the get_transceiver_change_event implementation and remove unused function * remove blank
This commit is contained in:
parent
8e74230e86
commit
a215bcd8f1
@ -10,10 +10,13 @@ try:
|
|||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
# parameters for DB connection
|
||||||
|
REDIS_HOSTNAME = "localhost"
|
||||||
|
REDIS_PORT = 6379
|
||||||
|
REDIS_TIMEOUT_USECS = 0
|
||||||
|
|
||||||
class SfpUtil(SfpUtilBase):
|
class SfpUtil(SfpUtilBase):
|
||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
PORT_START = 0
|
PORT_START = 0
|
||||||
PORT_END = 31
|
PORT_END = 31
|
||||||
PORTS_IN_BLOCK = 32
|
PORTS_IN_BLOCK = 32
|
||||||
@ -22,6 +25,12 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
_port_to_eeprom_mapping = {}
|
||||||
|
|
||||||
|
db_sel = None
|
||||||
|
db_sel_timeout = None
|
||||||
|
db_sel_object = None
|
||||||
|
db_sel_tbl = None
|
||||||
|
state_db = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def port_start(self):
|
def port_start(self):
|
||||||
return self.PORT_START
|
return self.PORT_START
|
||||||
@ -39,7 +48,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return self._port_to_eeprom_mapping
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
eeprom_path = "/bsp/qsfp/qsfp{0}"
|
eeprom_path = "/sys/class/i2c-adapter/i2c-2/2-0048/hwmon/hwmon7/qsfp{0}_eeprom"
|
||||||
|
|
||||||
for x in range(0, self.port_end + 1):
|
for x in range(0, self.port_end + 1):
|
||||||
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
||||||
@ -149,3 +158,33 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_transceiver_change_event(self, timeout=0):
|
||||||
|
phy_port_dict = {}
|
||||||
|
status = True
|
||||||
|
|
||||||
|
if self.db_sel == None:
|
||||||
|
from swsscommon import swsscommon
|
||||||
|
self.state_db = swsscommon.DBConnector(swsscommon.STATE_DB,
|
||||||
|
REDIS_HOSTNAME,
|
||||||
|
REDIS_PORT,
|
||||||
|
REDIS_TIMEOUT_USECS)
|
||||||
|
|
||||||
|
# Subscribe to state table for SFP change notifications
|
||||||
|
self.db_sel = swsscommon.Select()
|
||||||
|
self.db_sel_tbl = swsscommon.NotificationConsumer(self.state_db, 'TRANSCEIVER_NOTIFY')
|
||||||
|
self.db_sel.addSelectable(self.db_sel_tbl)
|
||||||
|
self.db_sel_timeout = swsscommon.Select.TIMEOUT
|
||||||
|
self.db_sel_object = swsscommon.Select.OBJECT
|
||||||
|
|
||||||
|
(state, c) = self.db_sel.select(timeout)
|
||||||
|
if state == self.db_sel_timeout:
|
||||||
|
status = True
|
||||||
|
elif state != self.db_sel_object:
|
||||||
|
status = False
|
||||||
|
else:
|
||||||
|
(key, op, fvp) = self.db_sel_tbl.pop()
|
||||||
|
phy_port_dict[key] = op
|
||||||
|
|
||||||
|
return status, phy_port_dict
|
||||||
|
|
||||||
|
@ -10,10 +10,13 @@ try:
|
|||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
# parameters for DB connection
|
||||||
|
REDIS_HOSTNAME = "localhost"
|
||||||
|
REDIS_PORT = 6379
|
||||||
|
REDIS_TIMEOUT_USECS = 0
|
||||||
|
|
||||||
class SfpUtil(SfpUtilBase):
|
class SfpUtil(SfpUtilBase):
|
||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
PORT_START = 0
|
PORT_START = 0
|
||||||
PORT_END = 15
|
PORT_END = 15
|
||||||
PORTS_IN_BLOCK = 16
|
PORTS_IN_BLOCK = 16
|
||||||
@ -22,6 +25,12 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
_port_to_eeprom_mapping = {}
|
||||||
|
|
||||||
|
db_sel = None
|
||||||
|
db_sel_timeout = None
|
||||||
|
db_sel_object = None
|
||||||
|
db_sel_tbl = None
|
||||||
|
state_db = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def port_start(self):
|
def port_start(self):
|
||||||
return self.PORT_START
|
return self.PORT_START
|
||||||
@ -39,7 +48,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return self._port_to_eeprom_mapping
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
eeprom_path = "/bsp/qsfp/qsfp{0}"
|
eeprom_path = "/sys/class/i2c-adapter/i2c-2/2-0048/hwmon/hwmon4/qsfp{0}_eeprom"
|
||||||
|
|
||||||
for x in range(0, self.port_end + 1):
|
for x in range(0, self.port_end + 1):
|
||||||
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
||||||
@ -149,3 +158,33 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_transceiver_change_event(self, timeout=0):
|
||||||
|
phy_port_dict = {}
|
||||||
|
status = True
|
||||||
|
|
||||||
|
if self.db_sel == None:
|
||||||
|
from swsscommon import swsscommon
|
||||||
|
self.state_db = swsscommon.DBConnector(swsscommon.STATE_DB,
|
||||||
|
REDIS_HOSTNAME,
|
||||||
|
REDIS_PORT,
|
||||||
|
REDIS_TIMEOUT_USECS)
|
||||||
|
|
||||||
|
# Subscribe to state table for SFP change notifications
|
||||||
|
self.db_sel = swsscommon.Select()
|
||||||
|
self.db_sel_tbl = swsscommon.NotificationConsumer(self.state_db, 'TRANSCEIVER_NOTIFY')
|
||||||
|
self.db_sel.addSelectable(self.db_sel_tbl)
|
||||||
|
self.db_sel_timeout = swsscommon.Select.TIMEOUT
|
||||||
|
self.db_sel_object = swsscommon.Select.OBJECT
|
||||||
|
|
||||||
|
(state, c) = self.db_sel.select(timeout)
|
||||||
|
if state == self.db_sel_timeout:
|
||||||
|
status = True
|
||||||
|
elif state != self.db_sel_object:
|
||||||
|
status = False
|
||||||
|
else:
|
||||||
|
(key, op, fvp) = self.db_sel_tbl.pop()
|
||||||
|
phy_port_dict[key] = op
|
||||||
|
|
||||||
|
return status, phy_port_dict
|
||||||
|
|
||||||
|
@ -10,18 +10,27 @@ try:
|
|||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
# parameters for DB connection
|
||||||
|
REDIS_HOSTNAME = "localhost"
|
||||||
|
REDIS_PORT = 6379
|
||||||
|
REDIS_TIMEOUT_USECS = 0
|
||||||
|
|
||||||
class SfpUtil(SfpUtilBase):
|
class SfpUtil(SfpUtilBase):
|
||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
PORT_START = 0
|
PORT_START = 0
|
||||||
PORT_END = 55
|
PORT_END = 55
|
||||||
PORTS_IN_BLOCK = 56
|
PORTS_IN_BLOCK = 56
|
||||||
|
QSFP_PORT_START = 48
|
||||||
EEPROM_OFFSET = 1
|
EEPROM_OFFSET = 1
|
||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
_port_to_eeprom_mapping = {}
|
||||||
|
|
||||||
|
db_sel = None
|
||||||
|
db_sel_timeout = None
|
||||||
|
db_sel_object = None
|
||||||
|
db_sel_tbl = None
|
||||||
|
state_db = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def port_start(self):
|
def port_start(self):
|
||||||
return self.PORT_START
|
return self.PORT_START
|
||||||
@ -32,20 +41,21 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def qsfp_ports(self):
|
def qsfp_ports(self):
|
||||||
return range(0, self.PORTS_IN_BLOCK + 1)
|
return range(self.QSFP_PORT_START, self.PORTS_IN_BLOCK + 1)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def port_to_eeprom_mapping(self):
|
def port_to_eeprom_mapping(self):
|
||||||
return self._port_to_eeprom_mapping
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
eeprom_path = "/bsp/qsfp/qsfp{0}"
|
eeprom_path = "/sys/class/i2c-adapter/i2c-2/2-0048/hwmon/hwmon6/qsfp{0}_eeprom"
|
||||||
|
|
||||||
for x in range(0, self.port_end + 1):
|
for x in range(0, self.port_end + 1):
|
||||||
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
||||||
|
|
||||||
SfpUtilBase.__init__(self)
|
SfpUtilBase.__init__(self)
|
||||||
|
|
||||||
|
|
||||||
def get_presence(self, port_num):
|
def get_presence(self, port_num):
|
||||||
# Check for invalid port_num
|
# Check for invalid port_num
|
||||||
if port_num < self.port_start or port_num > self.port_end:
|
if port_num < self.port_start or port_num > self.port_end:
|
||||||
@ -149,3 +159,33 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_transceiver_change_event(self, timeout=0):
|
||||||
|
phy_port_dict = {}
|
||||||
|
status = True
|
||||||
|
|
||||||
|
if self.db_sel == None:
|
||||||
|
from swsscommon import swsscommon
|
||||||
|
self.state_db = swsscommon.DBConnector(swsscommon.STATE_DB,
|
||||||
|
REDIS_HOSTNAME,
|
||||||
|
REDIS_PORT,
|
||||||
|
REDIS_TIMEOUT_USECS)
|
||||||
|
|
||||||
|
# Subscribe to state table for SFP change notifications
|
||||||
|
self.db_sel = swsscommon.Select()
|
||||||
|
self.db_sel_tbl = swsscommon.NotificationConsumer(self.state_db, 'TRANSCEIVER_NOTIFY')
|
||||||
|
self.db_sel.addSelectable(self.db_sel_tbl)
|
||||||
|
self.db_sel_timeout = swsscommon.Select.TIMEOUT
|
||||||
|
self.db_sel_object = swsscommon.Select.OBJECT
|
||||||
|
|
||||||
|
(state, c) = self.db_sel.select(timeout)
|
||||||
|
if state == self.db_sel_timeout:
|
||||||
|
status = True
|
||||||
|
elif state != self.db_sel_object:
|
||||||
|
status = False
|
||||||
|
else:
|
||||||
|
(key, op, fvp) = self.db_sel_tbl.pop()
|
||||||
|
phy_port_dict[key] = op
|
||||||
|
|
||||||
|
return status, phy_port_dict
|
||||||
|
|
||||||
|
@ -10,10 +10,13 @@ try:
|
|||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
# parameters for DB connection
|
||||||
|
REDIS_HOSTNAME = "localhost"
|
||||||
|
REDIS_PORT = 6379
|
||||||
|
REDIS_TIMEOUT_USECS = 0
|
||||||
|
|
||||||
class SfpUtil(SfpUtilBase):
|
class SfpUtil(SfpUtilBase):
|
||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
PORT_START = 0
|
PORT_START = 0
|
||||||
PORT_END = 31
|
PORT_END = 31
|
||||||
PORTS_IN_BLOCK = 32
|
PORTS_IN_BLOCK = 32
|
||||||
@ -22,6 +25,12 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
_port_to_eeprom_mapping = {}
|
||||||
|
|
||||||
|
db_sel = None
|
||||||
|
db_sel_timeout = None
|
||||||
|
db_sel_object = None
|
||||||
|
db_sel_tbl = None
|
||||||
|
state_db = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def port_start(self):
|
def port_start(self):
|
||||||
return self.PORT_START
|
return self.PORT_START
|
||||||
@ -39,7 +48,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return self._port_to_eeprom_mapping
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
eeprom_path = "/bsp/qsfp/qsfp{0}"
|
eeprom_path = "/sys/class/i2c-adapter/i2c-2/2-0048/hwmon/hwmon7/qsfp{0}_eeprom"
|
||||||
|
|
||||||
for x in range(0, self.port_end + 1):
|
for x in range(0, self.port_end + 1):
|
||||||
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
||||||
@ -149,3 +158,33 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_transceiver_change_event(self, timeout=0):
|
||||||
|
phy_port_dict = {}
|
||||||
|
status = True
|
||||||
|
|
||||||
|
if self.db_sel == None:
|
||||||
|
from swsscommon import swsscommon
|
||||||
|
self.state_db = swsscommon.DBConnector(swsscommon.STATE_DB,
|
||||||
|
REDIS_HOSTNAME,
|
||||||
|
REDIS_PORT,
|
||||||
|
REDIS_TIMEOUT_USECS)
|
||||||
|
|
||||||
|
# Subscribe to state table for SFP change notifications
|
||||||
|
self.db_sel = swsscommon.Select()
|
||||||
|
self.db_sel_tbl = swsscommon.NotificationConsumer(self.state_db, 'TRANSCEIVER_NOTIFY')
|
||||||
|
self.db_sel.addSelectable(self.db_sel_tbl)
|
||||||
|
self.db_sel_timeout = swsscommon.Select.TIMEOUT
|
||||||
|
self.db_sel_object = swsscommon.Select.OBJECT
|
||||||
|
|
||||||
|
(state, c) = self.db_sel.select(timeout)
|
||||||
|
if state == self.db_sel_timeout:
|
||||||
|
status = True
|
||||||
|
elif state != self.db_sel_object:
|
||||||
|
status = False
|
||||||
|
else:
|
||||||
|
(key, op, fvp) = self.db_sel_tbl.pop()
|
||||||
|
phy_port_dict[key] = op
|
||||||
|
|
||||||
|
return status, phy_port_dict
|
||||||
|
|
||||||
|
@ -10,10 +10,13 @@ try:
|
|||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
# parameters for DB connection
|
||||||
|
REDIS_HOSTNAME = "localhost"
|
||||||
|
REDIS_PORT = 6379
|
||||||
|
REDIS_TIMEOUT_USECS = 0
|
||||||
|
|
||||||
class SfpUtil(SfpUtilBase):
|
class SfpUtil(SfpUtilBase):
|
||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
PORT_START = 0
|
PORT_START = 0
|
||||||
PORT_END = 31
|
PORT_END = 31
|
||||||
PORTS_IN_BLOCK = 32
|
PORTS_IN_BLOCK = 32
|
||||||
@ -22,6 +25,12 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
_port_to_eeprom_mapping = {}
|
||||||
|
|
||||||
|
db_sel = None
|
||||||
|
db_sel_timeout = None
|
||||||
|
db_sel_object = None
|
||||||
|
db_sel_tbl = None
|
||||||
|
state_db = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def port_start(self):
|
def port_start(self):
|
||||||
return self.PORT_START
|
return self.PORT_START
|
||||||
@ -39,7 +48,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return self._port_to_eeprom_mapping
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
eeprom_path = "/bsp/qsfp/qsfp{0}"
|
eeprom_path = "/sys/class/i2c-adapter/i2c-2/2-0048/hwmon/hwmon6/qsfp{0}_eeprom"
|
||||||
|
|
||||||
for x in range(0, self.port_end + 1):
|
for x in range(0, self.port_end + 1):
|
||||||
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
||||||
@ -149,3 +158,33 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_transceiver_change_event(self, timeout=0):
|
||||||
|
phy_port_dict = {}
|
||||||
|
status = True
|
||||||
|
|
||||||
|
if self.db_sel == None:
|
||||||
|
from swsscommon import swsscommon
|
||||||
|
self.state_db = swsscommon.DBConnector(swsscommon.STATE_DB,
|
||||||
|
REDIS_HOSTNAME,
|
||||||
|
REDIS_PORT,
|
||||||
|
REDIS_TIMEOUT_USECS)
|
||||||
|
|
||||||
|
# Subscribe to state table for SFP change notifications
|
||||||
|
self.db_sel = swsscommon.Select()
|
||||||
|
self.db_sel_tbl = swsscommon.NotificationConsumer(self.state_db, 'TRANSCEIVER_NOTIFY')
|
||||||
|
self.db_sel.addSelectable(self.db_sel_tbl)
|
||||||
|
self.db_sel_timeout = swsscommon.Select.TIMEOUT
|
||||||
|
self.db_sel_object = swsscommon.Select.OBJECT
|
||||||
|
|
||||||
|
(state, c) = self.db_sel.select(timeout)
|
||||||
|
if state == self.db_sel_timeout:
|
||||||
|
status = True
|
||||||
|
elif state != self.db_sel_object:
|
||||||
|
status = False
|
||||||
|
else:
|
||||||
|
(key, op, fvp) = self.db_sel_tbl.pop()
|
||||||
|
phy_port_dict[key] = op
|
||||||
|
|
||||||
|
return status, phy_port_dict
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user