openUBMC IPMI协议栈管理特性设计说明书
| 所属SIG组 | 落入版本 | 设计人员 | 日期 |
|---|---|---|---|
| bmc-core SIG | openUBMC 26.1.0 | 彭强(pengqiang-gs) | 2026-01-17 |
Copyright © 2025 openUBMC Community
您对"本文档"的复制,使用,修改及分发受木兰宽松许可证, 第2版协议(以下简称"MulanPSL2")的约束。 为了方便用户理解,您可以通过访问https://license.coscl.org.cn/MulanPSL2了解MulanPSL2的概要 (但不是替代)。 MulanPSL2的完整协议内容您可以访问如下网址获取:https://license.coscl.org.cn/MulanPSL2。
修订记录
| 日期 | 修订版本 | 修订描述 | 作者 | 审核 |
|---|---|---|---|---|
| 2026-01-17 | 1.0 | 初版创建 | 彭强(pengqiang-gs) | 已审核 |
目录
[toc]
缩略语清单
| Abbreviations 缩略语 | Full spelling 英文全名 | Chinese explanation 中文解释 |
|---|---|---|
| BMC | Baseboard Management Controller | 基板管理控制器 |
| IPMI | Intelligent Platform Management Interface | 智能平台管理接口,是一个行业标准,用于服务器和网络设备的带外管理(Out-of-Band Management) |
| IPMB | Intelligent Platform Management Bus | 智能平台管理总线,是 IPMI 系统内部使用的通信总线,专门为平台管理设备之间的通信设计。 |
1. 特性概述
openUBMC IPMI协议栈管理特性旨在设计并实现一个功能完整、可扩展的IPMI协议库,为多通道环境下的硬件管理提供标准化的IPMI协议支持。通过封装IPMI/BT/IPMB协议处理、支持多通道并发、命令路由、过滤等核心功能,简化上层应用对硬件管理接口的调用。
1.1 目的
本文档基于 openUBMC IPMI 协议栈管理需求分析,对该特性的功能进行详细设计,明确系统架构、接口规范和实现方案,作为后续软件开发人员、测试人员和硬件集成工程师的技术指导文档。
文档详细描述了IPMI协议栈管理、BT/IPMB通道的支持、IPMI命令的生命周期、IPMI命令的过滤等处理等核心组件的设计与实现,为开发团队提供全面的技术规范和实现指南。
1.2 范围
openUBMC IPMI 协议栈管理特性主要包含以下功能模块和适用场景:
- IPMI协议栈的完整实现(不含加密)
- BT(Baseboard Management Controller Transport)协议的多通道支持
- IPMB(Intelligent Platform Management Bus)协议的多通道支持
- IPMI命令服务端的生命周期管理
- 多通道客户端驱动的监听和命令路由机制
- 多层次的安全过滤框架
1.3 特性需求列表
openUBMC IPMI 协议栈管理特性需求清单,解决IPMI协议栈以及过滤功能的可扩展性以及性能优化的技术挑战:
| 需求编号 | 需求描述 | 优先级 |
|---|---|---|
| REQ-001 | 实现IPMI v2.0协议标准核心功能(不含加密) | 高 |
| REQ-002 | 支持BT协议栈,实现多通道处理 | 高 |
| REQ-003 | 支持IPMB协议栈,实现多通道处理 | 高 |
| REQ-004 | 提供IPMI服务端监听和管理框架 | 高 |
| REQ-005 | 实现多通道客户端驱动监听和命令路由 | 高 |
| REQ-006 | 支持黑白名单过滤机制 | 中 |
| REQ-007 | 支持系统锁定状态过滤 | 中 |
| REQ-008 | 支持路由策略过滤 | 中 |
| REQ-009 | 提供可扩展的过滤框架 | 低 |
2. 需求场景分析
2.1 特性需求来源与价值概述
需求来源背景:
openUBMC IPMI 协议栈管理特性需求主要来源于 IPMI 协议随着硬件形态复杂化,设备管理效率提升的核心挑战:
- 多通道服务器硬件管理需求
- 多BMC服务器系统管理需求
- 标准化IPMI协议栈开发需求
- 硬件管理中间件开发需求
价值概述:
openUBMC IPMI 协议栈管理特性通过专业化设计,全面解决多 Host,多 xPU 等复杂硬件管理下的多通道挑战,提升 IPMI 协议的扩展性和响应性能等痛点问题:
- 多通道支持:基于配置的多通道并发管理
- 协议标准化:提供符合IPMI标准的协议处理
- 性能优化:多线程驱动读取,提升处理吞吐量
- 简化设计:去除加密处理,专注核心协议功能
2.2 特性场景分析
openUBMC IPMI 协议栈管理特性的业务使用场景主要涵盖设备的IPMI协议栈生命周期,以及不同协议方式设备发送到BMC的IPMI消息从请求到响应的全生命周期管理:
场景1:多BMC服务器系统
- 服务器包含多个BMC,每个BMC对应独立通道
- 通过通道配置区分各BMC的接口
- 统一管理平台同时管理所有BMC通道
场景2:混合接口管理系统
- 系统同时支持BT和IPMB接口
- 不同通道配置不同协议类型
- 统一的IPMI协议处理层
场景3:协议转换网关
- 接收上层RMCP加密数据
- 解密后通过本库进行IPMI协议处理
- 处理结果返回给上层进行加密传输
2.3 特性影响分析
openUBMC IPMI 协议栈管理特性作为openUBMC系统中设备管理的重要扩展,对系统架构和管理能力产生重要影响。
系统影响:
- 内存需求减少(去除加密相关数据结构)
- CPU资源需求降低(无加密解密运算)
- 代码复杂度降低,维护性提升
设计影响:
- 与上层RMCP层的接口更加清晰
- 专注于核心协议处理逻辑
- 支持更灵活的通道配置管理
3. 特性/功能实现原理
3.1 目标
构建基于配置的多通道IPMI协议库,实现以下目标:
- 基于配置的多通道协议处理
- 简化的协议栈设计(不含加密)
- 高效的多线程驱动架构
- 灵活的通道配置管理
技术规格:
- 支持 64 个多Host 的 BT 通道以及消息的响应处理
- 支持 32 路 IPMB 总线通道以及消息的响应处理
- BT/IPMB 通道的 IPMI 单条命令响应时间 < 10ms(不含响应的回调处理)
- 支持 IPMI 响应端的心跳检测处理
- 支持 IPMB 通道的冗余和恢复机制
- CPU 占用率增长符合预期基线
3.2 总体方案
4. Use Case 实现
4.1 Use Case 001:IPMI协议库核心功能实现(不含加密)
4.1.1 设计思路
实现符合IPMI v2.0标准的协议处理核心,专注于消息编解码、校验算法、会话管理等基础功能,加密功能由上层RMCP处理。
4.1.2 约束条件
- 支持IPMI v1.5 和 v2.0 协议
- 最大消息长度:272字节(标准IPMI消息)
- 不需要支持加密解密功能(加解密功能以及通道的访问权限由 RMCP 进行限制)
- 简化会话管理(无加密会话)
4.1.3 详细实现
- 建立 IPMI 协议栈的基础模型
- 建立 IPMI 协议的工厂类,支持工厂生产协议实例
- 建立 IPMI 响应类通用模型
4.4 关键接口
IPMI 协议栈接口:
- 序列化接口:将原始字节流数据转换为 IPMI 协议对象
- 反序列化接口:将 IPMI 协议对象转换为原始字节流
- 计算校验和接口:根据输入的字节流计算校验和(1个字节)
- 校验和校验接口:根据输入的字节流和校验和进行校验,返回结果为
bool
接口定义如下:
IPMIMessage decode(const std::vector<uint8_t>& rawData);
std::vector<uint8_t> encode(const IPMIMessage& msg);
uint8_t calculateChecksum(const std::vector<uint8_t>& data);
bool verifyChecksum(const std::vector<uint8_t>& data, uint8_t checksum);IPMI 协议工厂抽象接口:
- 协议工厂实例创建:根据输入的协议类型(如BT)创建协议栈实例
class ProtocolFactory {
public:
enum class ProtocolType {
IPMI_1_5,
IPMI_2_0,
BT,
IPMB
};
static std::unique_ptr<IPMIProtocolCore> createProtocol(ProtocolType type);
// 协议其他接口(待扩展)
};IPMI 响应类通用接口:
- IPMI 响应通用结构
struct IPMIResponse {
uint8_t completionCode;
std::vector<uint8_t> responseData;
std::chrono::steady_clock::time_point timestamp;
};4.2. Use Case 003:BT协议多通道实现
4.2.1 设计思路
基于通道配置实现BT协议的多通道支持,每个BT通道有独立的驱动实例和消息处理线程。
4.2.2 约束条件
- 多个 Host 的BT通道共享线程池资源
- 采用 消息队列 的方式,提升 BT 驱动消息的响应性能
- 抽象 BT 驱动类设计,支持扩展不同的 BT 驱动(如:SSIF)
- 建立 BT 通道管理,在通道异常时尝试故障恢复(可选)
- 通道保留性能调测接口和参数(可选)
4.2.3 详细实现
- 建立 BT 驱动的管理基类,并且派生当前 openUBMC 的BT子类
- 建立 BT 通道管理类
4.2.4 关键接口
BT 驱动的管理基类接口:
- 驱动基础查询和设置操作接口
- 驱动读写接口
BT 通道管理类接口:
- 发送消息接口
- 接收消息接口
- 性能统计接口
- 故障的说明和恢复尝试接口
4.3. Use Case 004:IPMB协议多通道实现
4.3.1 设计思路
基于通道配置实现IPMB协议的多通道支持,每个IPMB通道对应独立的I2C总线和驱动实例。
4.3.2 约束条件
- 每个IPMB通道独立的I2C总线
- 支持总线地址冲突检测
- 通道间消息隔离
- 高效的总线访问调度
4.3.3 详细实现
- 建立 IPMB 驱动的管理基类,并且派生当前 openUBMC 的子类
- 建立 IPMB 通道管理类
4.3.4 关键接口
IPMB 驱动的管理基类接口:
- 驱动基础查询和设置操作接口
- 驱动读写接口
IPMB 通道管理类接口:
- 发送消息接口
- 接收消息接口
- 性能统计接口
- 故障的说明和恢复尝试接口
4.5. Use Case 005:多通道客户端监听和命令路由
4.5.1 设计思路
基于通道配置实现多通道客户端的并发监听,支持从多个物理驱动读取 IPMI 命令,并通过路由表分发到服务端处理。
4.5.2 约束条件
- 支持动态路由表配置
- 通道间消息隔离
- 负载均衡支持
- 故障通道自动隔离
4.5.3 详细实现
- 建立 IPMI 消息分发类,支持从驱动读取的原始请求进行过滤和路由处理
4.5.4 关键接口
IPMI 命令分发接口:
- 获取当前分发器的状态接口,返回包括待分发消息的数量,分发器的运行状态等
- 停止分发接口,用于调测以及宏观手工干预(可选)
- 注入分发消息,用于调测(可选)
4.6. Use Case 006-009:过滤框架实现
4.6.1 设计思路
实现可扩展的过滤框架,支持黑白名单、系统锁定、路由过滤等多种过滤策略,与通道管理集成。
4.6.2 约束条件
- 过滤器执行时间:< 500us
- 支持过滤器优先级
- 支持通道级过滤配置
- 支持动态配置更新
4.6.3 详细实现
- 建立通用的过滤器基类,并且派生当前系统锁定,黑白名单等过滤器子类
- 建立通用的过滤管理类,支持添加多个过滤器类
4.6.4 关键接口
IPMI过滤接口:
- 过滤 IPMI 命令
- 查询可用的过滤器基础信息,比如:优先级,可用状态
5. 可靠性&可用性设计
5.1 冗余设计
- 心跳检测机制:支持各个消费者对于 IPMI 管理的连接心跳,对于心跳丢失的消费者进行消息的降级处理,优先处理活跃消费者的响应
5.2 故障管理
- 故障检测:实时监控各个通道的驱动状态,如果驱动读写异常则尝试自动恢复,如果没有恢复机制或者恢复次数超过阈值则进行隔离
- 故障隔离:单个通道的故障不影响其他通道对于 IPMI 命令的正常收发
- 自动恢复:提供通道的自愈机制
5.3 过载控制设计
负载监控机制:
- 资源使用监控:监控单位时间内命令的收发数量统计
- 限流保护策略:暂不实现(可选)
6. 安全&隐私&韧性设计
6.1 安全威胁分析及设计
主要威胁:
- 命令注入
- 拒绝服务
- 信息泄露
防护措施:
- 命令参数严格验证
- 基于角色的访问控制
- 敏感数据进行日志脱敏处理
6.2 隐私风险分析
该特性主要处理硬件设备信息,不涉及用户个人数据,隐私风险较低。
7. 特性非功能性质量属性相关设计
7.1 可测试性
- 单元测试:每个协议层独立可测试
- 模拟框架:提供硬件驱动模拟接口
- 集成测试:端到端命令处理测试
- 性能测试:压力测试工具支持
7.2 可服务性
- 诊断工具:提供IPMI命令调试和分析工具
- 监控接口:暴露性能指标和健康状态
7.3 可演进性
- 协议扩展:预留协议版本升级接口
- 向后兼容:支持旧版本IPMI协议
7.4 兼容性
- 向后兼容现有IPMI协议栈处理
8. 参考资料清单
- Intelligent Platform Management Interface Specification Second Generation v2.0