From 7f7fa34315116606cdebea9c5dda718dca3dc15b Mon Sep 17 00:00:00 2001 From: Chaitanya Tikku Date: Fri, 18 Jul 2025 10:26:58 -0700 Subject: [PATCH 1/8] Added doc that describes initial BMC support in SONiC --- doc/bmc/nexthop-BMC-SONiC-support.md | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 doc/bmc/nexthop-BMC-SONiC-support.md diff --git a/doc/bmc/nexthop-BMC-SONiC-support.md b/doc/bmc/nexthop-BMC-SONiC-support.md new file mode 100644 index 00000000000..4492188c2dd --- /dev/null +++ b/doc/bmc/nexthop-BMC-SONiC-support.md @@ -0,0 +1,64 @@ +# BMC Support in SONiC + +## Table of Content +- [BMC Support in SONiC](#bmc-support-in-sonic) + - [Table of Content](#table-of-content) + - [1. Revision](#1-revision) + - [2. Scope](#2-scope) + - [3. Definitions/Abbreviations](#3-definitionsabbreviations) + - [4. Overview](#4-overview) + - [5. High-Level Enchancements](#5-high-level-enhancements) + - [5.1. Functional-Requirements](#51-functional-requirements) + - [5.2. sonic-platform-daemons Support](#52-sonic-platform-daemons-support) + - [5.3. sonic-utilities Support](#53-sonic-utilities-support) + - [5.4. sonic-swss Support](#54-sonic-swss-support) + - [6. Restrictions/Limitations](#6-restrictionslimitations) + +### 1\. Revision + +| Rev | Date | Author | Change Description | +| :---- | :---- | :---- | :---- | +| 0.1 | 2025-07-16 | ctikku-nexthop | Initial Draft | + +### 2\. Scope +This document outlines adding BMC support in SONiC and executing SONiC on a BMC controller for out-of-band management of the network device. + +### 3\. Definitions/Abbreviations + +| Term | Definition | +| :---- | :---- | +| BMC | Baseboard Management Controller | +| NOS | Network Operating System | +| PSU | Power Supply Unit | +| CLI | Command Line Interface | +| SEL | System Event Log | + +### 4\. Overview + +The purpose of this HLD is to run a BMC-feature enabled SONiC image, on a BMC controller, in the network switch for out-of-band monitoring and management of the device. It is to enhance the reliability, manageability, and automation capabilities by allowing interaction to the switch device via the BMC controller. The initial capabilities will include the ability to power cycle the main CPU and redirection of its serial console over the network. + +In the future the capabilities can be expanded to include comprehensive hardware health metrics, including telemetry data, proactive fault management, and support BMC-driven operations for device provisioning and other diagnostics actions. + +### 5\. High-Level Requirements + +#### 5.1. Functional Requirements + +- BMC-SONiC-OS: SONiC-OS, will execute on a BMC controller, operating in an isolated and support role to the main switch CPU. It will have its own out-of-band network access and will be independent of any resources on the main swich CPU or the NOS running on it. + +- Console: BMC-SONiC-OS will provide the capablity to redirect serial port console of the main switch CPU over its network. + +- Power: BMC-SONiC-OS will provide the capablity to power cycle the main switch CPU and any other components (ex: switch ASIC, PSU, etc.) as needed. + +- Events: BMC-SONiC-OS will be able to retrieve and process System Event Log (SEL) entries from main switch CPU. + +#### 5.2. sonic-platform-daemons Support +- sonic-platform-daemons executing on the main NOS CPU will not require any update to support the BMC integration. + +#### 5.3. sonic-utilities Support +- show commands executing on the main NOS CPU will not require any update to support the BMC integration. + +#### 5.4. sonic-swss Support +- sonic-swss executing on the main NOS CPU will not require any update to support the BMC integration. + +### 6\. Restrictions/Limitations +The functionality does not exist yet. It is possible that the final implementation and areas needed to be changed may differ. From 29d2f4f2c07da737279bb8b4b2c59f5fba0f9b6f Mon Sep 17 00:00:00 2001 From: Chandrasekaran Swaminathan Date: Thu, 25 Sep 2025 08:43:09 +0000 Subject: [PATCH 2/8] Added a section for implementation details that provides an outline for the implementation --- doc/bmc/nexthop-BMC-SONiC-support.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/doc/bmc/nexthop-BMC-SONiC-support.md b/doc/bmc/nexthop-BMC-SONiC-support.md index 4492188c2dd..42efec3dd10 100644 --- a/doc/bmc/nexthop-BMC-SONiC-support.md +++ b/doc/bmc/nexthop-BMC-SONiC-support.md @@ -35,7 +35,7 @@ This document outlines adding BMC support in SONiC and executing SONiC on a BMC ### 4\. Overview -The purpose of this HLD is to run a BMC-feature enabled SONiC image, on a BMC controller, in the network switch for out-of-band monitoring and management of the device. It is to enhance the reliability, manageability, and automation capabilities by allowing interaction to the switch device via the BMC controller. The initial capabilities will include the ability to power cycle the main CPU and redirection of its serial console over the network. +The purpose of this HLD is to run a BMC-feature enabled SONiC image, on a BMC controller, in the network switch for out-of-band monitoring and management of the switch. It is to enhance the reliability, manageability, and automation capabilities by allowing interaction to the switch device via the BMC controller. The initial capabilities will include the ability to power cycle the main CPU and redirection of its serial console over the network. In the future the capabilities can be expanded to include comprehensive hardware health metrics, including telemetry data, proactive fault management, and support BMC-driven operations for device provisioning and other diagnostics actions. @@ -60,5 +60,22 @@ In the future the capabilities can be expanded to include comprehensive hardware #### 5.4. sonic-swss Support - sonic-swss executing on the main NOS CPU will not require any update to support the BMC integration. -### 6\. Restrictions/Limitations +### 6.0 High Level Design +OpenBMC, a project from the Linux Foundation, provides the necessary software stack, thats widely used in the industry for BMC implementations. The OpenBMC framework will be used as the base for the BMC-SONiC-OS. Its proposed that we pull the necessary components from OpenBMC and integrate them into SONiC, while adding the necessary SONiC components to support the BMC functionality. + +### 6.1.1 Boot Loader Components +OpenBMC uses the uboot as its boot loader. Its proposed that we continue to use uboot as the boot loader for BMC-SONiC-OS. + +### 6.1.2 SONiC Kernel Components +Sonic Kernel will be used as the base for the BMC-SONiC-OS kernel. Its proposed to adopt the relevant kernel config options and drivers from the OpenBMC kernel and add them to the SONiC kernel. + +### 6.1.3 SONiC User Space Components +The user space components from OpenBMC will be integrated into SONiC. To begin with its proposed to add + + - OpenBMC Console - https://github.com/openbmc/obmc-console as the console capture and redirection component. + - OpenBMC BMC Web - https://github.com/openbmc/bmcweb as the RESTful API (Redfish) server component. + +These components will be built as docker containers to conform to the SONiC docker based architecture. + +### 7\. Restrictions/Limitations The functionality does not exist yet. It is possible that the final implementation and areas needed to be changed may differ. From 23321f766f1a4c578f1d1e55e98cfedeb95ae717 Mon Sep 17 00:00:00 2001 From: Chandrasekaran Swaminathan Date: Tue, 30 Sep 2025 03:44:58 +0000 Subject: [PATCH 3/8] Changes after internal review --- doc/bmc/nexthop-BMC-SONiC-support.md | 99 ++++++++++++++++++---------- 1 file changed, 63 insertions(+), 36 deletions(-) diff --git a/doc/bmc/nexthop-BMC-SONiC-support.md b/doc/bmc/nexthop-BMC-SONiC-support.md index 42efec3dd10..c45516f12f3 100644 --- a/doc/bmc/nexthop-BMC-SONiC-support.md +++ b/doc/bmc/nexthop-BMC-SONiC-support.md @@ -14,18 +14,20 @@ - [5.4. sonic-swss Support](#54-sonic-swss-support) - [6. Restrictions/Limitations](#6-restrictionslimitations) -### 1\. Revision +### 1. Revision | Rev | Date | Author | Change Description | | :---- | :---- | :---- | :---- | | 0.1 | 2025-07-16 | ctikku-nexthop | Initial Draft | +| 0.2 | 2025-08-28 | ctikku-nexthop | Revisised draft | +| 0.3 | 2025-09-25 | chander-nexthop | Revisised draft | -### 2\. Scope +### 2. Scope This document outlines adding BMC support in SONiC and executing SONiC on a BMC controller for out-of-band management of the network device. -### 3\. Definitions/Abbreviations +### 3. Definitions/Abbreviations -| Term | Definition | +| Term | Definition | | :---- | :---- | | BMC | Baseboard Management Controller | | NOS | Network Operating System | @@ -33,49 +35,74 @@ This document outlines adding BMC support in SONiC and executing SONiC on a BMC | CLI | Command Line Interface | | SEL | System Event Log | -### 4\. Overview +### 4. Overview -The purpose of this HLD is to run a BMC-feature enabled SONiC image, on a BMC controller, in the network switch for out-of-band monitoring and management of the switch. It is to enhance the reliability, manageability, and automation capabilities by allowing interaction to the switch device via the BMC controller. The initial capabilities will include the ability to power cycle the main CPU and redirection of its serial console over the network. +The purpose of this HLD is to run a BMC-feature enabled SONiC image, on a BMC controller, in the network switch for out-of-band monitoring and management of the switch device. It is to enhance the reliability, manageability, and automation capabilities by allowing interaction to the switch device via the BMC controller. The initial capabilities will include the ability to power cycle the main CPU and redirection of its serial console over the network. -In the future the capabilities can be expanded to include comprehensive hardware health metrics, including telemetry data, proactive fault management, and support BMC-driven operations for device provisioning and other diagnostics actions. +In the future the capabilities can be expanded to include comprehensive hardware health metrics, including telemetry data, proactive fault management, and support BMC-driven operations for device provisioning and other diagnostics actions. -### 5\. High-Level Requirements +### 5. High-Level Requirements #### 5.1. Functional Requirements -- BMC-SONiC-OS: SONiC-OS, will execute on a BMC controller, operating in an isolated and support role to the main switch CPU. It will have its own out-of-band network access and will be independent of any resources on the main swich CPU or the NOS running on it. - -- Console: BMC-SONiC-OS will provide the capablity to redirect serial port console of the main switch CPU over its network. - -- Power: BMC-SONiC-OS will provide the capablity to power cycle the main switch CPU and any other components (ex: switch ASIC, PSU, etc.) as needed. - -- Events: BMC-SONiC-OS will be able to retrieve and process System Event Log (SEL) entries from main switch CPU. - -#### 5.2. sonic-platform-daemons Support +##### 5.1.1 Baseboard Management Controller (BMC) +- The BMC will be a dedicated hardware component, separate from the main switch CPU. +- It will have its own Operating System, running independently from that of the main switch CPU. +- It will have its own management network port for out-of-band management. +- It will have its own serial port, separate from that of the main switch system. + +##### 5.1.2 BMC Hardware +- The BMC controller will have its own CPU, memory, storage, and network port. +- SOC: Aspeed 2720 chip (arm64), Memory: 4GB, Storage: 32GB eMMC, Network: 1Gbps. +- The main switch CPU can operate with or without the presence of the BMC controller. +- The BMC controller can operate with or without the presence of the main switch CPU. + +##### 5.1.3 Operating System (OS) +- The operating system running on the BMC will be called BMC-SONiC-OS. +- BMC-SONiC-OS image will be built from the SONiC-OS codebase: https://github.com/sonic-net/sonic-buildimage.git +- All changes related to BMC functionaliy will be committed back into the same git repository. +- The BMC-SONiC-OS image will leverage SONiC-OS build tools and processes, but build with differnent flags. +- There will be no changes to the SONiC-OS image build steps, functionality or the image itself. +- BMC-SONiC-OS will include BMC functionality, similar to SONiC-OS, in the docker container format. +- BMC-SONiC-OS will remove switching functionality and associated docker containers from its image. + +##### 5.1.4 Out-of-Band Management (OOB Management) +- BMC-SONiC-OS running on BMC, will contain its own management network port and network IP address. +- BMC-SONiC-OS will allow connection to it using standard network protocols (ex: SSH) +- BMC-SONiC-OS will allow the main switch CPU to be managed (reboot, power cycled) from the BMC controller. +- Rebooting or power cycling of main switch CPU will not affect the BMC controller. +- Rebooting or power cycling of BMC controller will not affect the main switch CPU. + +##### 5.1.5 Serial Console +- BMC will have its own serial port (UART), separate from that of the main switch system. +- The physical serial port on the front panel of the device can be "attached" to the BMC or the main switch CPU. +- Fixed hot keys will be used to swap between the two serial UART that connect to the front panel. + +##### 5.1.6 OBMC Console +- BMC-SONiC-OS will use obmc-console for console services: https://github.com/openbmc/obmc-console +- BMC-SONiC-OS will log the serial console output from the main switch CPU to a file for later access. +- Log files will be managed using compression and rotation, similar to syslog. +- Access to the switch CPU console will also be available from the BMC when connected to it over the network. + +##### 5.1.7 OBMC Web +- BMC-SONiC-OS will use OpenBMC Web - https://github.com/openbmc/bmcweb as the RESTful API (Redfish) server. +- bmcweb will be used to provide a web interface to the switch CPU console. + +#### 5.2 BMC Components deployment +- BMC-SONiC-OS will deploy the BMC functionality as docker containers. +- BMC-SONiC-OS will use kubernetes for container orchestration. + +#### 5.3. sonic-platform-daemons Support - sonic-platform-daemons executing on the main NOS CPU will not require any update to support the BMC integration. -#### 5.3. sonic-utilities Support +#### 5.4. sonic-utilities Support - show commands executing on the main NOS CPU will not require any update to support the BMC integration. -#### 5.4. sonic-swss Support +#### 5.5. sonic-swss Support - sonic-swss executing on the main NOS CPU will not require any update to support the BMC integration. -### 6.0 High Level Design -OpenBMC, a project from the Linux Foundation, provides the necessary software stack, thats widely used in the industry for BMC implementations. The OpenBMC framework will be used as the base for the BMC-SONiC-OS. Its proposed that we pull the necessary components from OpenBMC and integrate them into SONiC, while adding the necessary SONiC components to support the BMC functionality. - -### 6.1.1 Boot Loader Components -OpenBMC uses the uboot as its boot loader. Its proposed that we continue to use uboot as the boot loader for BMC-SONiC-OS. - -### 6.1.2 SONiC Kernel Components -Sonic Kernel will be used as the base for the BMC-SONiC-OS kernel. Its proposed to adopt the relevant kernel config options and drivers from the OpenBMC kernel and add them to the SONiC kernel. - -### 6.1.3 SONiC User Space Components -The user space components from OpenBMC will be integrated into SONiC. To begin with its proposed to add - - - OpenBMC Console - https://github.com/openbmc/obmc-console as the console capture and redirection component. - - OpenBMC BMC Web - https://github.com/openbmc/bmcweb as the RESTful API (Redfish) server component. - -These components will be built as docker containers to conform to the SONiC docker based architecture. +### 6. Boot Loader Components +- BMC-SONiC-OS will use uboot as the boot loader. -### 7\. Restrictions/Limitations +### 7. Restrictions/Limitations The functionality does not exist yet. It is possible that the final implementation and areas needed to be changed may differ. From 0ca3c544f8b2f7b9ce8d318af61e4537a60396d6 Mon Sep 17 00:00:00 2001 From: Chinmoy Dey Date: Fri, 14 Nov 2025 15:34:25 +0000 Subject: [PATCH 4/8] v 0.4 :Added Boot Loader Components and incorporated all pending comments --- doc/bmc/nexthop-BMC-SONiC-support.md | 143 +++++++++++++++------------ 1 file changed, 82 insertions(+), 61 deletions(-) diff --git a/doc/bmc/nexthop-BMC-SONiC-support.md b/doc/bmc/nexthop-BMC-SONiC-support.md index c45516f12f3..d3d2ea110db 100644 --- a/doc/bmc/nexthop-BMC-SONiC-support.md +++ b/doc/bmc/nexthop-BMC-SONiC-support.md @@ -1,29 +1,39 @@ # BMC Support in SONiC +## Table of Content ## Table of Content - [BMC Support in SONiC](#bmc-support-in-sonic) - [Table of Content](#table-of-content) - - [1. Revision](#1-revision) - - [2. Scope](#2-scope) - - [3. Definitions/Abbreviations](#3-definitionsabbreviations) - - [4. Overview](#4-overview) - - [5. High-Level Enchancements](#5-high-level-enhancements) - - [5.1. Functional-Requirements](#51-functional-requirements) - - [5.2. sonic-platform-daemons Support](#52-sonic-platform-daemons-support) - - [5.3. sonic-utilities Support](#53-sonic-utilities-support) - - [5.4. sonic-swss Support](#54-sonic-swss-support) - - [6. Restrictions/Limitations](#6-restrictionslimitations) + - [1. Revision](#1-revision) + - [2. Scope](#2-scope) + - [3. Definitions/Abbreviations](#3-definitionsabbreviations) + - [4. Overview](#4-overview) + - [5. High-Level Requirements](#5-high-level-requirements) + - [5.1. Functional Requirements](#51-functional-requirements) + - [5.1.1 Baseboard Management Controller (BMC)](#511-baseboard-management-controller-bmc) + - [5.1.2 BMC Hardware](#512-bmc-hardware) + - [5.1.3 Operating System (OS)](#513-operating-system-os) + - [5.1.4 Out-of-Band Management (OOB Management)](#514-out-of-band-management-oob-management) + - [5.1.5 Serial Console](#515-serial-console) + - [5.1.6 OBMC Console](#516-obmc-console) + - [5.1.7 OBMC Web](#517-obmc-web) + - [5.2 BMC Components Deployment](#52-bmc-components-deployment) + - [6. Boot Loader Components](#6-boot-loader-components) + - [7. eMMC Writes](#7-emmc-writes) + - [8. Restrictions/Limitations](#8-restrictionslimitations) + ### 1. Revision | Rev | Date | Author | Change Description | | :---- | :---- | :---- | :---- | -| 0.1 | 2025-07-16 | ctikku-nexthop | Initial Draft | -| 0.2 | 2025-08-28 | ctikku-nexthop | Revisised draft | -| 0.3 | 2025-09-25 | chander-nexthop | Revisised draft | +| 0.1 | 2025-07-16 | ctikku-nexthop | Initial Draft | +| 0.2 | 2025-08-28 | ctikku-nexthop | Revised Draft | +| 0.3 | 2025-09-25 | chander-nexthop | Revised Draft | +| 0.4 | 2025-11-11 | chinmoy-nexthop | Revised Draft | ### 2. Scope -This document outlines adding BMC support in SONiC and executing SONiC on a BMC controller for out-of-band management of the network device. +This document describes the addition of BMC support in SONiC and the execution of SONiC on a BMC controller for out-of-band management of network devices. This design supports Aspeed AST2720 platform, and can be extended to other BMC chipsets. ### 3. Definitions/Abbreviations @@ -37,72 +47,83 @@ This document outlines adding BMC support in SONiC and executing SONiC on a BMC ### 4. Overview -The purpose of this HLD is to run a BMC-feature enabled SONiC image, on a BMC controller, in the network switch for out-of-band monitoring and management of the switch device. It is to enhance the reliability, manageability, and automation capabilities by allowing interaction to the switch device via the BMC controller. The initial capabilities will include the ability to power cycle the main CPU and redirection of its serial console over the network. +The purpose of this HLD is to enable a SONiC image with BMC functionality to run on a BMC controller within a network switch, providing out-of-band monitoring and management of the device. This enhancement improves reliability, manageability, and automation by enabling interaction with the switch through the BMC controller. +Initial capabilities include power control of the main CPU and redirection of its serial console over the network. -In the future the capabilities can be expanded to include comprehensive hardware health metrics, including telemetry data, proactive fault management, and support BMC-driven operations for device provisioning and other diagnostics actions. +Future enhancements may include advanced hardware health monitoring, telemetry data collection, proactive fault management, and BMC-driven operations for provisioning and diagnostics. ### 5. High-Level Requirements #### 5.1. Functional Requirements ##### 5.1.1 Baseboard Management Controller (BMC) -- The BMC will be a dedicated hardware component, separate from the main switch CPU. -- It will have its own Operating System, running independently from that of the main switch CPU. -- It will have its own management network port for out-of-band management. -- It will have its own serial port, separate from that of the main switch system. +- The BMC will be a dedicated hardware component, independent of the main switch CPU. +- It will operate on its own OS, separate from the main switch CPU’s OS. +- It will include a dedicated management network port for out-of-band management. +- It will have an independent serial port, separate from the main switch system. +- The BMC uses eMMC storage; therefore, write operations must be minimized. +- The BMC will provide staged boot control, manage main system power on/off, and handle leak detection and management. ##### 5.1.2 BMC Hardware -- The BMC controller will have its own CPU, memory, storage, and network port. -- SOC: Aspeed 2720 chip (arm64), Memory: 4GB, Storage: 32GB eMMC, Network: 1Gbps. -- The main switch CPU can operate with or without the presence of the BMC controller. -- The BMC controller can operate with or without the presence of the main switch CPU. +- The BMC controller will include its own CPU, memory, storage, and network port. +- SOC: Aspeed 2720 (arm64), Memory: 4GB, Storage: 32GB eMMC. +- The main switch CPU can operate independently of the BMC controller. +- The BMC controller can also operate independently of the main switch CPU. ##### 5.1.3 Operating System (OS) -- The operating system running on the BMC will be called BMC-SONiC-OS. -- BMC-SONiC-OS image will be built from the SONiC-OS codebase: https://github.com/sonic-net/sonic-buildimage.git -- All changes related to BMC functionaliy will be committed back into the same git repository. -- The BMC-SONiC-OS image will leverage SONiC-OS build tools and processes, but build with differnent flags. -- There will be no changes to the SONiC-OS image build steps, functionality or the image itself. -- BMC-SONiC-OS will include BMC functionality, similar to SONiC-OS, in the docker container format. -- BMC-SONiC-OS will remove switching functionality and associated docker containers from its image. +- The operating system running on the BMC will be referred to as **BMC-SONiC-OS**. +- **BMC-SONiC-OS** will be built from the SONiC-OS [sonic-buildimage]( https://github.com/sonic-net/sonic-buildimage.git) codebase. +- All BMC-related enhancements will be committed to the same repository. +- The image will use SONiC build tools and workflows but with BMC-specific build flags. +- The SONiC-OS image build process and functionality will remain unchanged. +- **BMC-SONiC-OS** will include BMC-specific services packaged as Docker containers. +- Switching-related components and associated containers will be excluded from the BMC image. +- A multi-port ethernet switch may connect the BMC and main CPU. The switch will be managed by the BMC, for example, to configure VLANs for traffic separation. +- Support will be added to enable a USB-based network interface for connectivity between the x86 and the BMC. ##### 5.1.4 Out-of-Band Management (OOB Management) -- BMC-SONiC-OS running on BMC, will contain its own management network port and network IP address. -- BMC-SONiC-OS will allow connection to it using standard network protocols (ex: SSH) -- BMC-SONiC-OS will allow the main switch CPU to be managed (reboot, power cycled) from the BMC controller. -- Rebooting or power cycling of main switch CPU will not affect the BMC controller. -- Rebooting or power cycling of BMC controller will not affect the main switch CPU. +- **BMC-SONiC-OS** will provide a dedicated management network port and IP address. +- It will support standard network access protocols (e.g., SSH). +- It will allow management of the main switch CPU (e.g., reboot or power cycle) from the BMC controller. +- Rebooting or power cycling the main switch CPU will not impact the BMC. +- Rebooting or power cycling the BMC will not affect the main switch CPU. ##### 5.1.5 Serial Console -- BMC will have its own serial port (UART), separate from that of the main switch system. -- The physical serial port on the front panel of the device can be "attached" to the BMC or the main switch CPU. -- Fixed hot keys will be used to swap between the two serial UART that connect to the front panel. +- The BMC will have its own UART-based serial port, separate from the main switch. +- The front-panel serial port can be dynamically switched between the BMC and main CPU. +- Predefined hotkeys will be used to toggle between the two UART interfaces. ##### 5.1.6 OBMC Console -- BMC-SONiC-OS will use obmc-console for console services: https://github.com/openbmc/obmc-console -- BMC-SONiC-OS will log the serial console output from the main switch CPU to a file for later access. -- Log files will be managed using compression and rotation, similar to syslog. -- Access to the switch CPU console will also be available from the BMC when connected to it over the network. +- **BMC-SONiC-OS** will use [obmc-console](https://github.com/openbmc/obmc-console) for console management. +- It will capture and log the main switch CPU’s serial console output for later review. +- Log rotation and compression will be applied similar to syslog management. +- The switch CPU console will also be accessible over the network via the BMC. ##### 5.1.7 OBMC Web -- BMC-SONiC-OS will use OpenBMC Web - https://github.com/openbmc/bmcweb as the RESTful API (Redfish) server. -- bmcweb will be used to provide a web interface to the switch CPU console. - -#### 5.2 BMC Components deployment -- BMC-SONiC-OS will deploy the BMC functionality as docker containers. -- BMC-SONiC-OS will use kubernetes for container orchestration. +- **BMC-SONiC-OS** will use [OpenBMC Web (bmcweb)](https://github.com/openbmc/bmcweb) as the RESTful (Redfish) API server. +- **bmcweb** will provide a web-based interface to the switch CPU console. +- The **staged boot process** will be managed through the Redfish API. +- **Redfish API** for Power On/Off control of the main system. +- **Redfish API** for leak detection and management. + - The leak detection mechanism within the switch. -#### 5.3. sonic-platform-daemons Support -- sonic-platform-daemons executing on the main NOS CPU will not require any update to support the BMC integration. - -#### 5.4. sonic-utilities Support -- show commands executing on the main NOS CPU will not require any update to support the BMC integration. - -#### 5.5. sonic-swss Support -- sonic-swss executing on the main NOS CPU will not require any update to support the BMC integration. +#### 5.2 BMC Components Deployment +- **BMC-SONiC-OS** will deploy BMC functionalities as Docker containers. +- **Kubernetes** will be used for container orchestration. ### 6. Boot Loader Components -- BMC-SONiC-OS will use uboot as the boot loader. - -### 7. Restrictions/Limitations -The functionality does not exist yet. It is possible that the final implementation and areas needed to be changed may differ. +- **BMC-SONiC-OS** will use **U-Boot** as the boot loader. +- The image will be installed on an **eMMC partition**. +- The **OpenBMC image** will continue to serve as the **golden firmware** in the SPI boot flash +- **Initial Load Process**: + - Boot the SONiC kernel with a minimal initramfs from U-Boot to launch a shell, and use the included script to download the image via TFTP and flash it to the eMMC. +- **Subsequent Boots**: + - Once the image is installed, the system can boot directly from the eMMC, eliminating the need to download or reinstall the image over TFTP. +- The image installation process may be augmented in the future to enable redundancy through A/B install support. +- The boot process may be refined in future revisions to improve efficiency and usability. + +### 7. eMMC Writes + - eMMC writes are minimized to protect the device from wear. + +### 8. Restrictions/Limitations +- This functionality is under development. The final implementation details and affected areas may differ from this design. From fc6f66a8db227e4fb7ad0005053a636dc40d3c0b Mon Sep 17 00:00:00 2001 From: Chandrasekaran Swaminathan Date: Mon, 2 Feb 2026 10:51:30 +0000 Subject: [PATCH 5/8] - Add details about sub modules - Add SONIC-dbus-bridge - Add details about standard sonic-installer support Signed-off-by: Chandrasekaran Swaminathan --- doc/bmc/nexthop-BMC-SONiC-support.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/bmc/nexthop-BMC-SONiC-support.md b/doc/bmc/nexthop-BMC-SONiC-support.md index d3d2ea110db..e04b1ae85e5 100644 --- a/doc/bmc/nexthop-BMC-SONiC-support.md +++ b/doc/bmc/nexthop-BMC-SONiC-support.md @@ -31,6 +31,7 @@ | 0.2 | 2025-08-28 | ctikku-nexthop | Revised Draft | | 0.3 | 2025-09-25 | chander-nexthop | Revised Draft | | 0.4 | 2025-11-11 | chinmoy-nexthop | Revised Draft | +| 0.5 | 2026-02-02 | chander-nexthop | Revised Draft | ### 2. Scope This document describes the addition of BMC support in SONiC and the execution of SONiC on a BMC controller for out-of-band management of network devices. This design supports Aspeed AST2720 platform, and can be extended to other BMC chipsets. @@ -63,6 +64,7 @@ Future enhancements may include advanced hardware health monitoring, telemetry d - It will have an independent serial port, separate from the main switch system. - The BMC uses eMMC storage; therefore, write operations must be minimized. - The BMC will provide staged boot control, manage main system power on/off, and handle leak detection and management. +- The BMC will support a network device over USB to connect to the x86 CPU for a secure private network between the x86 and the BMC. ##### 5.1.2 BMC Hardware - The BMC controller will include its own CPU, memory, storage, and network port. @@ -95,12 +97,16 @@ Future enhancements may include advanced hardware health monitoring, telemetry d ##### 5.1.6 OBMC Console - **BMC-SONiC-OS** will use [obmc-console](https://github.com/openbmc/obmc-console) for console management. +- A clone of this project will be created and added as a submodule in the sonic-buildimage repository. +- The switch CPU console will be accessible by invoking the obmc-console-client inside the obmc-console docker. +- The switch CPU console will also be accessible over the network via ssh to a specific port on the BMC. - It will capture and log the main switch CPU’s serial console output for later review. -- Log rotation and compression will be applied similar to syslog management. -- The switch CPU console will also be accessible over the network via the BMC. +- Log rotation, compression and export to an external server will be supported ##### 5.1.7 OBMC Web - **BMC-SONiC-OS** will use [OpenBMC Web (bmcweb)](https://github.com/openbmc/bmcweb) as the RESTful (Redfish) API server. +- A clone of this project will be created and added as a submodule in the sonic-buildimage repository. +- A new module SONiC-Dbus-Bridge will be created to populate necessary state from REDIS and other data sources into DBus. This way bmcweb can continue to read dbus paths. - **bmcweb** will provide a web-based interface to the switch CPU console. - The **staged boot process** will be managed through the Redfish API. - **Redfish API** for Power On/Off control of the main system. @@ -119,7 +125,8 @@ Future enhancements may include advanced hardware health monitoring, telemetry d - Boot the SONiC kernel with a minimal initramfs from U-Boot to launch a shell, and use the included script to download the image via TFTP and flash it to the eMMC. - **Subsequent Boots**: - Once the image is installed, the system can boot directly from the eMMC, eliminating the need to download or reinstall the image over TFTP. -- The image installation process may be augmented in the future to enable redundancy through A/B install support. + - The image will support the sonic-installer utility for image management, including adding a new image, removing an existing image, and selecting the default image for boot. + - There will be only one partition in the eMMC and multiple images can be installed in that partition, conforming to the standard SONiC behaviour (Ex: /host/image-1, /host/image-2, etc.). - The boot process may be refined in future revisions to improve efficiency and usability. ### 7. eMMC Writes From 5dc8af4b103e9a786a730fa82b165cc2a3e4ca0b Mon Sep 17 00:00:00 2001 From: Roger Liao Date: Wed, 25 Feb 2026 19:48:50 +0000 Subject: [PATCH 6/8] Single image multi DTB design --- doc/bmc/images/nexthop-multi_dtb_design.png | Bin 0 -> 37720 bytes doc/bmc/nexthop-multi_dtb_design.md | 254 ++++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 doc/bmc/images/nexthop-multi_dtb_design.png create mode 100644 doc/bmc/nexthop-multi_dtb_design.md diff --git a/doc/bmc/images/nexthop-multi_dtb_design.png b/doc/bmc/images/nexthop-multi_dtb_design.png new file mode 100644 index 0000000000000000000000000000000000000000..1699daf001c661f9e7ba2a074a54112156d97a28 GIT binary patch literal 37720 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 CCrUQ} literal 0 HcmV?d00001 diff --git a/doc/bmc/nexthop-multi_dtb_design.md b/doc/bmc/nexthop-multi_dtb_design.md new file mode 100644 index 00000000000..0c4000779b5 --- /dev/null +++ b/doc/bmc/nexthop-multi_dtb_design.md @@ -0,0 +1,254 @@ +# Multi-DTB Design for SONiC BMC Support + +## Table of Contents + +### 1. Revision + +| Rev | Date | Author | Change Description | +| --- | ---- | ------ | ------------------ | +| 0.1 | 2026-02-25 | chander-nexthop | Initial draft | + +### 2. Scope + +This document describes the scope of multi-DTB (Device Tree Binary) support for SONiC BMC platform. It enables a single SONiC image to support multiple vendor BMC implementations based on AspeedTech AST27xx SoC, eliminating the need for per-vendor images. + +### 3. Definitions/Abbreviations + +| Term | Definition | +| ---- | ---------- | +| BMC | Baseboard Management Controller | +| DTB | Device Tree Binary | +| DTS | Device Tree Source | +| FIT | Flattened Image Tree | +| SoC | System on Chip | + +### 4. Overview + +Many vendors that make switches running SONiC are looking to add a Baseboard Management Controller (BMC) based on AspeedTech AST27xx SoC to their system designs. These BMC SoCs will run SONiC. It is desirable to have a single SONiC image for this purpose instead of having per-vendor images. This document proposes a design to achieve the same. + +#### Background Information + +Support for the necessary kernel drivers for the AST27xx SOC has already been added to the SONiC Linux Kernel Repository via https://github.com/sonic-net/sonic-linux-kernel/pull/522. + +When compiled with the necessary kernel options, the SONiC arm64 kernel will have all the requisite device drivers needed for this SoC. + +Support for building a SONiC image, `sonic-aspeed-arm64.bin` with `PLATFORM=aspeed` and `PLATFORM_ARCH=arm64` is being done via PR https://github.com/sonic-net/sonic-buildimage/pull/24898. + +In this, we will add the common makefiles, exclude docker containers and debian packages not applicable to the BMC platform, add new docker containers for console management and Redfish APIs, add aspeed specific systemd services like bring up usb network device etc. It will also have the infrastructure outlined here for all vendors to use this same image for their SoC's. + +### 5. Requirements + +- SONiC image should boot with the DTB compiled from the DTS file a vendor has created. +- Vendor specific configuration changes (for example, which console tty of the SoC connects to their control plane's console) must be supported. +- Vendors should be able to add their own software like kernel modules, utility scripts etc to the image and that software must take effect when the image is booted on their card. +- U-Boot should use the correct DTB to load during SONiC boot. +- SONiC should properly set up `/host/machine.conf`, so PLATFORM is inferred correctly. +- Vendors should be able to package their own software like kernel modules, utility scripts, configuration files etc to the image. +- Changes to bring up SONiC on a new SOC should be minimal. + +The proposed design outlined below attempts to address these requirements with a caveat. It is expected that vendors will submit their DTS files as patches, using the standard `src/sonic-linux-kernel` patch workflow, so that those DTS files will be compiled into device tree binaries (DTB's) as part of the kernel build. This is to avoid any extraneous dependency for the sonic-linux-kernel build. + +### 6. Architecture Design + +#### 6.1. Design Overview + +The design hinges on the fact that a single FIT image can contain multiple DTB's and the boot loader, U-Boot, in this case, can pick a specific DTB to load. U-Boot can use any mechanism available to arrive at the DTB to load (ex. Builtin during compilation or reading some EEPROM region or some device registers). It is beyond the scope of this document to precisely specify the mechanism U-Boot would use. + +However it is assumed that U-Boot will store the DTB file name to load into an environment variable called `bootconf`. This way, SONiC installer can use that variable for in place substitution when setting up the U-Boot environment during install of a SONiC image. + +#### 6.2. Boot Flow + +For example, SONiC installer, when setting up an image to boot, would use bootconf without specifying what it is. U-Boot is expected to define it to the right DTB: + +```bash +fw_printenv sonic_image_1 +sonic_image_1=run sonic_bootargs; run sonic_boot_load; bootm $loadaddr#conf-$bootconf +``` + +This way when during boot the appropriate DTB too is loaded. The kernel exposes the information from that DTB in `/proc/device-tree`. + +#### 6.3. Platform Detection and Configuration + +After SONiC boots up, the file `/host/machine.conf` is used to arrive at the PLATFORM and SONiC would set up `/usr/share/sonic/platform` to point into the vendor+platform directory under `/device`. So, it becomes imperative that `/host/machine.conf` will have to be set up properly for the SONiC's workflow. + +To do this, this design proposes to use a systemd service that will run once upon first boot. This systemd service will look into `/proc/device-tree/compatible` and will map the string therein to the platform and set up the `/host/machine.conf`. + +The design assumes a single DTB per vendor card. Revisions, if any, need to have a different DTB name and U-Boot must be able to differentiate between the revisions to set up bootconf. However this design doesn't preclude the possibility of multiple DTB names pointing to the same PLATFORM name. + +#### 6.4. Vendor-Specific Software Support + +To support vendor specific software like kernel modules, scripts etc, we would use the existing lazy install feature of SONIC that lets platform specific packages to be packaged into the image but installed at run time during first boot. Therefore there would be a per vendor `sonic-platform-module-` directory under `platform/aspeed`, where a vendor can define debian packages per card they create. All these .debs would be packaged into the image but installed at runtime using the existing lazy install mechanism supported by the rc.local service. + +#### 6.5. Directory Layout + +``` +platform/aspeed/ +├── one-image.mk +├── onie-image-arm64.conf +├── platform-modules-ast-evb.mk # Makefile for EvalBrd .deb +├── platform-modules-nexthop.mk # Makefile for NextHop .deb +├── platform_arm64.conf +├── rules.mk +├── scripts +│ ├── sonic-machine-conf-init.sh +│ ├── sonic-platform-init.sh +│ ├── sonic-uboot-env-init.sh +│ └── sonic-usb-network-init.sh +├── sonic-platform-modules-ast-evb # Vendor specific Dir +│ ├── ast2700 # Vendor card sub-dir +│ │ ├── build +│ │ │ ├── bdist.linux-aarch64 +│ │ │ └── lib +│ │ │ └── sonic_platform +│ │ │ ├── __init__.py +│ │ │ ├── chassis.py +│ │ │ └── platform.py +│ │ ├── obmc-console +│ │ │ └── server.tty.conf +│ │ ├── scripts +│ │ ├── setup.py +│ │ ├── sonic_platform +│ │ │ ├── __init__.py +│ │ │ ├── chassis.py +│ │ │ ├── fan.py +│ │ │ ├── fan_drawer.py +│ │ │ ├── platform.py +│ │ │ ├── thermal.py +│ │ │ └── watchdog.py +│ │ └── systemd +│ ├── debian +│ │ ├── changelog +│ │ ├── control +│ │ ├── rules +│ │ └── sonic-platform-ast-evb-ast2700.postinst +│ └── setup.py +├── sonic-platform-modules-nexthop # Vendor Nexthop +│ ├── b27 # Nexthop's BMC card +│ │ ├── build +│ │ │ ├── bdist.linux-aarch64 +│ │ │ └── lib +│ │ │ └── sonic_platform +│ │ │ ├── __init__.py +│ │ │ ├── chassis.py +│ │ │ └── platform.py +│ │ ├── obmc-console +│ │ │ └── server.tty.conf +│ │ ├── scripts +│ │ │ └── switch_cpu_utils.sh +│ │ ├── setup.py +│ │ └── sonic_platform +│ │ ├── __init__.py +│ │ ├── chassis.py +│ │ ├── fan.py +│ │ ├── fan_drawer.py +│ │ ├── platform.py +│ │ ├── thermal.py +│ │ └── watchdog.py +│ ├── debian +│ │ ├── changelog +│ │ ├── control +│ │ ├── rules +│ │ └── sonic-platform-aspeed-nexthop-b27.postinst +│ └── setup.py +├── sonic_fit.its +└── systemd + ├── sonic-machine-conf-init.service + ├── sonic-platform-init.service + ├── sonic-uboot-env-init.service + └── sonic-usb-network-init.service + +device/aspeed/arm64-aspeed_ast2700_evb-r0/ +├── asic.conf +├── default_sku +├── installer.conf +├── platform.json +├── platform_asic +├── platform_components.json +├── platform_env.conf +├── pmon_daemon_control.json +└── system_health_monitoring_config.json + +device/nexthop/arm64-nexthop_b27-r0/ +├── asic.conf +├── default_sku +├── installer.conf +├── platform.json +├── platform_asic +├── platform_components.json +├── platform_env.conf +├── pmon_daemon_control.json +└── system_health_monitoring_config.json +``` + +#### 6.7. Build & Boot Flow Diagram + +![Build & Boot Flow Diagram](images/nexthop-multi_dtb_design.png) + +### 7. Vendor Work Flow For New SoCs + +#### 7.1. Create DTS File +- Create `.dts` file for their card and submit to `src/sonic-linux-kernel` as a patch. This approach is preferred over say having the DTS file in a vendor specific directory under `platform/aspeed/vendor/` to avoid a dependency on such files to build the kernel. + +#### 7.2. Update U-Boot +- Make changes to U-Boot to detect the card type, arrive at DTB file to use and set it in the U-Boot var `bootconf` + +#### 7.3. Create Device Directory +- Create a directory under `device/` ex. `device/aspeed/arm64-aspeed_ast2700_evb-r0/` and put `platform_env.conf`, `default_sku` etc as files inside it. `device/aspeed/arm64-aspeed_ast2700_evb-r0/` defines the same for the evaluation board and can be used as reference. + +#### 7.4. Create Platform Modules Directory +Add a directory under `platform/aspeed/sonic-platform-modules-/` (ex. `platform/aspeed/sonic-platform-modules-ast-evb`) and, for each card type they have, add a subdirectory with the card name and under that the following directories and files: + +##### 7.4.1. sonic_platform/ +- `{__init__.py, platform.py, chassis.py etc}` +- These need inherit from their respective classes defined by `sonic_platform_base` + +##### 7.4.2. scripts/ +- Any scripts vendors want to install go here + +##### 7.4.3. obmc-console/server.tty.conf +- Specify the BMC tty that maps to the switch cpu's console tty. + +##### 7.4.4. setup.py +- Defines setup with vendor specific attributes +- Can use `platform/aspeed/sonic-platform-modules-ast-evb/ast2700/` as reference + +##### 7.4.5. Create (first time) OR Update platform-modules-ast-evb.mk + +#### 7.5. Edits to Common Files + +##### 7.5.1. Edit sonic_fit.its + +Add details about their DTB in `platform/aspeed/sonic_fit.its`. Use `ast2700-evb` in this file as reference. +- Under `images` section +- Under `configurations` section + +##### 7.5.2. Edit sonic-machine-conf-init.sh + +Edit `platform/aspeed/sonic-machine-conf-init.sh` and add a condition to the 'if block' at line 37, something like below. Please note that the PLATFORM string MUST match the directory name created for the vendor under `device/aspeed`: + +```bash +if echo "$COMPATIBLE" | grep -q "vendorA-evb"; then + PLATFORM="arm64-aspeed_ast2700_vendorA" + MACHINE="aspeed_ast2700" + log "Detected Aspeed AST2700 EVB platform" +fi +``` + +#### 7.6. Create or Update Makefile + +Create or Update Makefile `platform/aspeed/platform-modules-.mk`: + +```makefile +# NextHop Platform modules +# +# NOTE: When adding more platforms (e.g., b28), use add_extra_package: +# ASPEED_NEXTHOP_B28_PLATFORM_MODULE = sonic-platform-aspeed-nexthop-b28_1.0_arm64.deb +# $(ASPEED_NEXTHOP_B28_PLATFORM_MODULE)_PLATFORM = arm64-nexthop_b28-r0 +# $(eval $(call add_extra_package,$(ASPEED_NEXTHOP_B27_PLATFORM_MODULE),$(ASPEED_NEXTHOP_B28_PLATFORM_MODULE))) + +ASPEED_NEXTHOP_B27_PLATFORM_MODULE = sonic-platform-aspeed-nexthop-b27_1.0_arm64.deb +$(ASPEED_NEXTHOP_B27_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-nexthop +$(ASPEED_NEXTHOP_B27_PLATFORM_MODULE)_PLATFORM = arm64-nexthop_b27-r0 +SONIC_DPKG_DEBS += $(ASPEED_NEXTHOP_B27_PLATFORM_MODULE) +``` + From 2b2e018677246e812b06bcf55fb5b8e41b367724 Mon Sep 17 00:00:00 2001 From: Chandrasekaran Swaminathan Date: Thu, 26 Feb 2026 13:39:17 +0530 Subject: [PATCH 7/8] Update nexthop-BMC-SONiC-support documentation Added details about the initial load process and subsequent boots for the SONiC support in OpenBMC. --- doc/bmc/nexthop-BMC-SONiC-support.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/bmc/nexthop-BMC-SONiC-support.md b/doc/bmc/nexthop-BMC-SONiC-support.md index e04b1ae85e5..07890796ca8 100644 --- a/doc/bmc/nexthop-BMC-SONiC-support.md +++ b/doc/bmc/nexthop-BMC-SONiC-support.md @@ -123,6 +123,7 @@ Future enhancements may include advanced hardware health monitoring, telemetry d - The **OpenBMC image** will continue to serve as the **golden firmware** in the SPI boot flash - **Initial Load Process**: - Boot the SONiC kernel with a minimal initramfs from U-Boot to launch a shell, and use the included script to download the image via TFTP and flash it to the eMMC. + - If SPI flash is running OpenBMC, boot into that, download a pre-formatted disk image and flash that to eMMC - **Subsequent Boots**: - Once the image is installed, the system can boot directly from the eMMC, eliminating the need to download or reinstall the image over TFTP. - The image will support the sonic-installer utility for image management, including adding a new image, removing an existing image, and selecting the default image for boot. From 75e40c50e7d6f18f0941d84e6c64b0a7e6c186a4 Mon Sep 17 00:00:00 2001 From: Roger Liao Date: Fri, 27 Feb 2026 22:54:07 +0000 Subject: [PATCH 8/8] Rename files to be generic --- ...op-BMC-SONiC-support.md => BMC-SONiC-support.md} | 0 ...op-multi_dtb_design.png => multi_dtb_design.png} | Bin ...thop-multi_dtb_design.md => multi_dtb_design.md} | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename doc/bmc/{nexthop-BMC-SONiC-support.md => BMC-SONiC-support.md} (100%) rename doc/bmc/images/{nexthop-multi_dtb_design.png => multi_dtb_design.png} (100%) rename doc/bmc/{nexthop-multi_dtb_design.md => multi_dtb_design.md} (99%) diff --git a/doc/bmc/nexthop-BMC-SONiC-support.md b/doc/bmc/BMC-SONiC-support.md similarity index 100% rename from doc/bmc/nexthop-BMC-SONiC-support.md rename to doc/bmc/BMC-SONiC-support.md diff --git a/doc/bmc/images/nexthop-multi_dtb_design.png b/doc/bmc/images/multi_dtb_design.png similarity index 100% rename from doc/bmc/images/nexthop-multi_dtb_design.png rename to doc/bmc/images/multi_dtb_design.png diff --git a/doc/bmc/nexthop-multi_dtb_design.md b/doc/bmc/multi_dtb_design.md similarity index 99% rename from doc/bmc/nexthop-multi_dtb_design.md rename to doc/bmc/multi_dtb_design.md index 0c4000779b5..b8f3a670808 100644 --- a/doc/bmc/nexthop-multi_dtb_design.md +++ b/doc/bmc/multi_dtb_design.md @@ -182,7 +182,7 @@ device/nexthop/arm64-nexthop_b27-r0/ #### 6.7. Build & Boot Flow Diagram -![Build & Boot Flow Diagram](images/nexthop-multi_dtb_design.png) +![Build & Boot Flow Diagram](images/multi_dtb_design.png) ### 7. Vendor Work Flow For New SoCs