From 4578a1012d0cbf00ef814c5952d34f03969e006e Mon Sep 17 00:00:00 2001 From: "Anand Mehra (anamehra)" Date: Sun, 26 Jul 2026 12:20:21 -0700 Subject: [PATCH 1/2] utilities: support cisco ASIC name Signed-off-by: Anand Mehra (anamehra) --- config/main.py | 2 +- generic_config_updater/field_operation_validators.py | 4 ++-- .../gcu_field_operation_validators.conf.json | 5 ++++- scripts/fast-reboot | 2 +- scripts/generate_dump | 2 +- show/plugins/cisco-8000.py | 2 +- sonic_installer/bootloader/grub.py | 4 ++-- .../generic_config_updater/field_operation_validator_test.py | 5 +++++ 8 files changed, 17 insertions(+), 9 deletions(-) diff --git a/config/main.py b/config/main.py index a86a3f7f6fd..7de232e0d35 100644 --- a/config/main.py +++ b/config/main.py @@ -1769,7 +1769,7 @@ def config(ctx): print("Caught an exception: " + str(e)) raise click.Abort() - if asic_type == 'cisco-8000': + if asic_type in ('cisco-8000', 'cisco'): from sonic_platform.cli.cisco import cisco platform.add_command(cisco) diff --git a/generic_config_updater/field_operation_validators.py b/generic_config_updater/field_operation_validators.py index 65e16804e07..84ab26d379e 100644 --- a/generic_config_updater/field_operation_validators.py +++ b/generic_config_updater/field_operation_validators.py @@ -32,8 +32,8 @@ def get_asic_name(): asic_mapping = gcu_field_operation_conf["helper_data"]["rdma_config_update_validator"] asic_type = device_info.get_sonic_version_info()['asic_type'] - if asic_type == 'cisco-8000': - asic = "cisco-8000" + if asic_type in ('cisco-8000', 'cisco'): + asic = asic_type if asic_type == 'marvell-teralynx': asic = "marvell-teralynx" elif asic_type == 'mellanox' or asic_type == 'vs' or asic_type == 'broadcom': diff --git a/generic_config_updater/gcu_field_operation_validators.conf.json b/generic_config_updater/gcu_field_operation_validators.conf.json index aa5c2bcc9cf..9709110a831 100644 --- a/generic_config_updater/gcu_field_operation_validators.conf.json +++ b/generic_config_updater/gcu_field_operation_validators.conf.json @@ -81,6 +81,7 @@ "j2c+": "20220500", "q3d": "20251100", "cisco-8000": "20201200", + "cisco": "20201200", "marvell-teralynx": "20241100" } } @@ -134,6 +135,7 @@ "j2c+": "20220500", "q3d": "20251100", "cisco-8000": "20201200", + "cisco": "20201200", "marvell-teralynx": "20241100" } }, @@ -163,7 +165,8 @@ "q2c+": "20241100", "j2c+": "20220500", "q3d": "20251100", - "cisco-8000": "20201200" + "cisco-8000": "20201200", + "cisco": "20201200" } }, "Packet trimming eligibility modification": { diff --git a/scripts/fast-reboot b/scripts/fast-reboot index 8c0b9981d68..c8f4f8f8b3e 100755 --- a/scripts/fast-reboot +++ b/scripts/fast-reboot @@ -957,7 +957,7 @@ fi sonic_asic_type=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) if [[ "$REBOOT_TYPE" == "express-reboot" ]] && \ - [[ "$sonic_asic_type" != "cisco-8000" ]] && \ + [[ "$sonic_asic_type" != "cisco-8000" && "$sonic_asic_type" != "cisco" ]] && \ [[ "$sonic_asic_type" != "marvell-teralynx" ]]; then echo "eXpress Boot is not supported" exit "${EXIT_FAILURE}" diff --git a/scripts/generate_dump b/scripts/generate_dump index 02ac355cafc..5ad49b88989 100755 --- a/scripts/generate_dump +++ b/scripts/generate_dump @@ -2897,7 +2897,7 @@ main() { collect_broadcom fi - if [ "$asic" = "cisco-8000" ]; then + if [ "$asic" = "cisco-8000" ] || [ "$asic" = "cisco" ]; then collect_cisco_8000 fi diff --git a/show/plugins/cisco-8000.py b/show/plugins/cisco-8000.py index 2113336bdb9..345edef79fa 100644 --- a/show/plugins/cisco-8000.py +++ b/show/plugins/cisco-8000.py @@ -20,6 +20,6 @@ def register(cli): version_info = device_info.get_sonic_version_info() - if version_info and version_info.get("asic_type") == "cisco-8000": + if version_info and version_info.get("asic_type") in ("cisco-8000", "cisco"): for c in PLATFORM_CLIS: cli.commands["platform"].add_command(c) diff --git a/sonic_installer/bootloader/grub.py b/sonic_installer/bootloader/grub.py index 4809f1f4c61..2e21d3a8c4c 100644 --- a/sonic_installer/bootloader/grub.py +++ b/sonic_installer/bootloader/grub.py @@ -167,10 +167,10 @@ def is_secure_upgrade_image_verification_supported(self): check_if_verification_is_enabled_and_supported_code = ''' SECURE_UPGRADE_ENABLED=0 - #Disabling the check for cisco-8000 platforms as platform-side support is not ready yet. This will be removed once platform + #Disabling the check for cisco / cisco-8000 platforms as platform-side support is not ready yet. This will be removed once platform #support is added. ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) - if [ -d "/sys/firmware/efi/efivars" ] && [[ ${ASIC_TYPE} != *"cisco-8000"* ]]; then + if [ -d "/sys/firmware/efi/efivars" ] && [[ ${ASIC_TYPE} != *"cisco-8000"* && ${ASIC_TYPE} != "cisco" ]]; then if ! [ -n "$(ls -A /sys/firmware/efi/efivars 2>/dev/null)" ]; then mount -t efivarfs none /sys/firmware/efi/efivars 2>/dev/null fi diff --git a/tests/generic_config_updater/field_operation_validator_test.py b/tests/generic_config_updater/field_operation_validator_test.py index 22728a34bab..87b01d7f6f3 100644 --- a/tests/generic_config_updater/field_operation_validator_test.py +++ b/tests/generic_config_updater/field_operation_validator_test.py @@ -937,6 +937,11 @@ def test_get_asic_cisco(self, mock_popen, mock_get_sonic_version_info): for scope in ["localhost", "asic0"]: self.assertEqual(fov.get_asic_name(), "cisco-8000") + @patch('sonic_py_common.device_info.get_sonic_version_info') + def test_get_asic_cisco_short_name(self, mock_get_sonic_version_info): + mock_get_sonic_version_info.return_value = {'asic_type': 'cisco'} + self.assertEqual(fov.get_asic_name(), "cisco") + @patch('sonic_py_common.device_info.get_sonic_version_info') def test_get_asic_marvell_teralynx(self, mock_get_sonic_version_info): mock_get_sonic_version_info.return_value = {'asic_type': 'marvell-teralynx'} From 1a123d45b225723c1b01e3e5400d288d2e3f81fa Mon Sep 17 00:00:00 2001 From: "Anand Mehra (anamehra)" Date: Sun, 26 Jul 2026 13:43:47 -0700 Subject: [PATCH 2/2] tests: cover cisco ASIC config registration Signed-off-by: Anand Mehra (anamehra) --- sonic_installer/bootloader/grub.py | 4 +-- tests/config_test.py | 39 ++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/sonic_installer/bootloader/grub.py b/sonic_installer/bootloader/grub.py index 2e21d3a8c4c..2e63ce24c46 100644 --- a/sonic_installer/bootloader/grub.py +++ b/sonic_installer/bootloader/grub.py @@ -167,8 +167,8 @@ def is_secure_upgrade_image_verification_supported(self): check_if_verification_is_enabled_and_supported_code = ''' SECURE_UPGRADE_ENABLED=0 - #Disabling the check for cisco / cisco-8000 platforms as platform-side support is not ready yet. This will be removed once platform - #support is added. + #Disabling the check for cisco / cisco-8000 platforms as platform-side support is not ready yet. + #This will be removed once platform support is added. ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) if [ -d "/sys/firmware/efi/efivars" ] && [[ ${ASIC_TYPE} != *"cisco-8000"* && ${ASIC_TYPE} != "cisco" ]]; then if ! [ -n "$(ls -A /sys/firmware/efi/efivars 2>/dev/null)" ]; then diff --git a/tests/config_test.py b/tests/config_test.py index b9e38b78987..ccf5a8a359a 100644 --- a/tests/config_test.py +++ b/tests/config_test.py @@ -10,6 +10,7 @@ import sys import unittest import ipaddress +import types from datetime import timezone from unittest import mock @@ -434,6 +435,44 @@ class TestConfig(object): def setup_method(self): print("SETUP") + def test_config_registers_cisco_platform_plugin(self): + @click.command() + def cisco_test_noop(): + pass + + cisco_command = click.Command("cisco") + sonic_platform_module = types.ModuleType("sonic_platform") + sonic_platform_cli_module = types.ModuleType("sonic_platform.cli") + sonic_platform_cisco_module = types.ModuleType("sonic_platform.cli.cisco") + sonic_platform_cisco_module.cisco = cisco_command + original_platform_commands = config.platform.commands.copy() + + try: + config.config.add_command(cisco_test_noop, "cisco-test-noop") + with mock.patch.dict(sys.modules, { + "sonic_platform": sonic_platform_module, + "sonic_platform.cli": sonic_platform_cli_module, + "sonic_platform.cli.cisco": sonic_platform_cisco_module + }), \ + mock.patch( + 'sonic_py_common.device_info.get_sonic_version_info', + return_value={'asic_type': 'cisco'} + ), \ + mock.patch('config.main.load_db_config') as mock_load_db_config, \ + mock.patch('config.main.os.geteuid', return_value=0), \ + mock.patch('config.main.Db') as mock_db: + runner = CliRunner() + result = runner.invoke(config.config, ["cisco-test-noop"]) + + assert result.exit_code == 0 + assert config.platform.commands["cisco"] is cisco_command + mock_load_db_config.assert_called_once() + mock_db.assert_called_once() + finally: + config.config.commands.pop("cisco-test-noop", None) + config.platform.commands.clear() + config.platform.commands.update(original_platform_commands) + @patch('config.main.subprocess.check_call') def test_platform_fw_install(self, mock_check_call): runner = CliRunner()