openUBMC IPMI协议栈管理特性设计说明书

所属SIG组落入版本设计人员日期
bmc-core SIGopenUBMC 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-171.0初版创建彭强(pengqiang-gs)已审核

目录

[toc]

缩略语清单

Abbreviations 缩略语Full spelling 英文全名Chinese explanation 中文解释
BMCBaseboard Management Controller基板管理控制器
IPMIIntelligent Platform Management Interface智能平台管理接口,是一个行业标准,用于服务器和网络设备的带外管理(Out-of-Band Management)
IPMBIntelligent 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 协议栈接口:

  1. 序列化接口:将原始字节流数据转换为 IPMI 协议对象
  2. 反序列化接口:将 IPMI 协议对象转换为原始字节流
  3. 计算校验和接口:根据输入的字节流计算校验和(1个字节)
  4. 校验和校验接口:根据输入的字节流和校验和进行校验,返回结果为 bool

接口定义如下:

cpp
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 协议工厂抽象接口:

  1. 协议工厂实例创建:根据输入的协议类型(如BT)创建协议栈实例
cpp
class ProtocolFactory {
public:
    enum class ProtocolType {
        IPMI_1_5,
        IPMI_2_0,
        BT,
        IPMB
    };
    
    static std::unique_ptr<IPMIProtocolCore> createProtocol(ProtocolType type);
    
    // 协议其他接口(待扩展)
};

IPMI 响应类通用接口:

  1. IPMI 响应通用结构
cpp
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 驱动的管理基类接口:

  1. 驱动基础查询和设置操作接口
  2. 驱动读写接口

BT 通道管理类接口:

  1. 发送消息接口
  2. 接收消息接口
  3. 性能统计接口
  4. 故障的说明和恢复尝试接口

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 驱动的管理基类接口:

  1. 驱动基础查询和设置操作接口
  2. 驱动读写接口

IPMB 通道管理类接口:

  1. 发送消息接口
  2. 接收消息接口
  3. 性能统计接口
  4. 故障的说明和恢复尝试接口

4.5. Use Case 005:多通道客户端监听和命令路由

4.5.1 设计思路

基于通道配置实现多通道客户端的并发监听,支持从多个物理驱动读取 IPMI 命令,并通过路由表分发到服务端处理。

4.5.2 约束条件

  • 支持动态路由表配置
  • 通道间消息隔离
  • 负载均衡支持
  • 故障通道自动隔离

4.5.3 详细实现

  • 建立 IPMI 消息分发类,支持从驱动读取的原始请求进行过滤和路由处理

4.5.4 关键接口

IPMI 命令分发接口:

  1. 获取当前分发器的状态接口,返回包括待分发消息的数量,分发器的运行状态等
  2. 停止分发接口,用于调测以及宏观手工干预(可选)
  3. 注入分发消息,用于调测(可选)

4.6. Use Case 006-009:过滤框架实现

4.6.1 设计思路

实现可扩展的过滤框架,支持黑白名单、系统锁定、路由过滤等多种过滤策略,与通道管理集成。

4.6.2 约束条件

  • 过滤器执行时间:< 500us
  • 支持过滤器优先级
  • 支持通道级过滤配置
  • 支持动态配置更新

4.6.3 详细实现

  • 建立通用的过滤器基类,并且派生当前系统锁定,黑白名单等过滤器子类
  • 建立通用的过滤管理类,支持添加多个过滤器类

4.6.4 关键接口

IPMI过滤接口:

  1. 过滤 IPMI 命令
  2. 查询可用的过滤器基础信息,比如:优先级,可用状态

5. 可靠性&可用性设计

5.1 冗余设计

  • 心跳检测机制:支持各个消费者对于 IPMI 管理的连接心跳,对于心跳丢失的消费者进行消息的降级处理,优先处理活跃消费者的响应

5.2 故障管理

  • 故障检测:实时监控各个通道的驱动状态,如果驱动读写异常则尝试自动恢复,如果没有恢复机制或者恢复次数超过阈值则进行隔离
  • 故障隔离:单个通道的故障不影响其他通道对于 IPMI 命令的正常收发
  • 自动恢复:提供通道的自愈机制

5.3 过载控制设计

负载监控机制:

  1. 资源使用监控:监控单位时间内命令的收发数量统计
  2. 限流保护策略:暂不实现(可选)

6. 安全&隐私&韧性设计

6.1 安全威胁分析及设计

主要威胁:

  • 命令注入
  • 拒绝服务
  • 信息泄露

防护措施:

  • 命令参数严格验证
  • 基于角色的访问控制
  • 敏感数据进行日志脱敏处理

6.2 隐私风险分析

该特性主要处理硬件设备信息,不涉及用户个人数据,隐私风险较低。

7. 特性非功能性质量属性相关设计

7.1 可测试性

  • 单元测试:每个协议层独立可测试
  • 模拟框架:提供硬件驱动模拟接口
  • 集成测试:端到端命令处理测试
  • 性能测试:压力测试工具支持

7.2 可服务性

  • 诊断工具:提供IPMI命令调试和分析工具
  • 监控接口:暴露性能指标和健康状态

7.3 可演进性

  • 协议扩展:预留协议版本升级接口
  • 向后兼容:支持旧版本IPMI协议

7.4 兼容性

  • 向后兼容现有IPMI协议栈处理

8. 参考资料清单

  1. Intelligent Platform Management Interface Specification Second Generation v2.0