Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Mellanox] Update the method of reading model number for MLNX platforms #21763

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 37 additions & 2 deletions platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from sonic_platform_base.chassis_base import ChassisBase
from sonic_py_common.logger import Logger
import os
from subprocess import check_output
from functools import reduce
from .utils import extract_RJ45_ports_index
from . import module_host_mgmt_initializer
Expand Down Expand Up @@ -57,6 +58,9 @@
REBOOT_TYPE_KEXEC_PATTERN_WARM = ".*SONIC_BOOT_TYPE=(warm|fastfast).*"
REBOOT_TYPE_KEXEC_PATTERN_FAST = ".*SONIC_BOOT_TYPE=(fast|fast-reboot).*"

SPC_RETRIEVAL = "lspci | grep 'Mellanox Technologies'"
SYS_DISPLAY = "SYS_DISPLAY"

# Global logger class instance
logger = Logger()

Expand Down Expand Up @@ -742,8 +746,15 @@ def get_model(self):
Returns:
string: Model/part number of device
"""
self.initialize_eeprom()
return self._eeprom.get_part_number()
model = None
if self._read_model_from_vpd():
if not self.vpd_data:
self.vpd_data = self._parse_vpd_data(VPD_DATA_FILE)
model = self.vpd_data.get(SYS_DISPLAY, "N/A")
else:
self.initialize_eeprom()
model = self._eeprom.get_part_number()
return model

def get_base_mac(self):
"""
Expand Down Expand Up @@ -944,6 +955,30 @@ def _parse_vpd_data(self, filename):

return result

def _get_spectrum_version(self):
"""
Returns spectrum version of the platform

Returns:
Returns spectrum version of the platform
"""
out = check_output(SPC_RETRIEVAL, shell=True)
spc_version = 1
spc_match = re.search('Spectrum-([1-9](?!\d))', out.decode("utf-8"))
if spc_match is not None:
spc_version = int(spc_match.group(1))
return spc_version

def _read_model_from_vpd(self):
"""
Returns if model number should be returned from VPD file

Returns:
Returns True if spectrum version is higher than Spectrum-4
"""
spc_version = self._get_spectrum_version()
return (spc_version >= 4)

def _verify_reboot_cause(self, filename):
'''
Open and read the reboot cause file in
Expand Down
5 changes: 4 additions & 1 deletion platform/mellanox/mlnx-platform-api/tests/test_eeprom.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#
# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES
# Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -33,6 +34,8 @@
class TestEeprom:
@patch('os.path.exists', MagicMock(return_value=True))
@patch('os.path.islink', MagicMock(return_value=True))
@patch('sonic_platform.chassis.check_output',
MagicMock(return_value=b'Ethernet controller: Mellanox Technologies MT53100 [Spectrum-2]'))
@patch('sonic_platform.eeprom.Eeprom.get_system_eeprom_info')
@patch('sonic_platform.chassis.extract_RJ45_ports_index', MagicMock(return_value=[]))
def test_chassis_eeprom(self, mock_eeprom_info):
Expand Down
Loading