ipmi_core

版本信息

项目内容
组件版本1.100.45
文档作者mkdlf
最后更新2026-04-30

1. 组件概述

1.1 组件简介

ipmi_core 组件是遵循IPMI 2.0协议,实现基于IPMI规范的各种通道的通信协议管理、以及各个BMC组件的IPMI命令路由以及转发功能。

IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,原本是一种Intel架构的企业系统的周边设备所采用的一种工业标准。IPMI亦是一个开放的免费标准,用户无需支付额外的费用即可使用此标准。

1.2 解决什么问题

IPMI 能够横跨不同的操作系统、固件和硬件平台,可以智能的监视、控制和自动回报大量服务器的运作状况,以降低服务器系统成本。IPMI依附于BMC,不依赖于服务器的处理器、BIOS或操作系统来工作,非常地独立,是一个单独在系统内运行的无代理管理子系统,只要有BMC与IPMI固件其便可开始工作。IPMI良好的自治特性便克服了以往基于操作系统的管理方式所受的限制,例如操作系统不响应或未加载的情况下其仍然可以进行开关机、信息提取等操作。

在工作时,所有的IPMI功能都是向BMC发送命令来完成的,命令使用IPMI规范中规定的指令,BMC接收并在系统事件日志中记录事件消息,维护描述系统中传感器情况的传感器数据记录。

常用的ipmicmd和ipmitool工具对比:

  • 命令格式:ipmicmd -k "0f 00 MM NN" smi 0等价于ipmitool raw 0xMM 0xNN
  • ipmicmd和ipmitool是两个不同的工具,都可以发送原始命令数据;
  • ipmicmd命令返回的数据长度最大为36字节,如果返回的数据长度超过36个字节,建议使用ipmitool命令;
  • ipmicmd里面的数字只能十六进制,不用加前缀“0x”,ipmitool raw后面的十六进制数字必须加前缀“0x”。

1.3 核心功能

  • 黑白名单:限制不需要转发的IPMI命令

开启功能后限制哪些命令不需要转发,核心是4条IPMI命令和2棵AVL树。规则如下:

  1. 黑名单最多支持255条IPMI命令,白名单最多支持255条IPMI命令,存入数据库时黑白名单上限阈值为512;
  2. 向黑名单中添加/删除IPMI命令的IPMI命令不能添加到黑名单中;
  3. 所有和黑白名单功能相关的IPMI命令,不能通过BT通道执行,只能通过网络通道执行;
  4. 白名单只能限制BT通道发送的IPMI命令,不能限制网络通道发送的IPMI命令;
  5. 黑名单既能限制BT通道发送的IPMI命令,也能限制网络通道发送的IPMI命令;
  6. 黑白名单要掉电持久化;
  7. 两个名单相互独立,只能开启一种;
  8. 往名单里添加已存在的命令时,操作日志会记录“已存在该命令”和“添加成功”2条日志;
  9. 防火墙功能开启需要清空名单时,要同时清空黑白名单;
  10. 非装备模式下才判断黑白名单。

CSR配置举例:

json
"RestrictedIPMICmdList_SetSerialConnectionCommand": {
    "ReadWrite": "0x01",
    "NetFunction": "0x30",
    "Command": "0x91",
    "ChanProtocol": "0xff", // 受限通道,0xff表示所有通道,0x08表示带内(bt)通道,0x01表示带外通道
    "Data": ["0xdb", "0x07", "0x00", "0x17", "0xff", "0x07"], // ipmi命令data部分,0xff表示全匹配
    "ShiedFlag": 0 // 表示是否支持命令,0表示默认不支持命令,1表示默认支持命令
}
  • IPMI桥接转发:可以简单理解为涉及两种通道的交互方式,如OS通过ipmi_core获取IMU的信息。实现方式有两种,一种是ipmitool的标准命令,另一种是BMC自定义

  • 南向追踪:通过南向追踪命令追踪南向通道上的具体数据交互

  • 看门狗:与BIOS/OS强相关的功能,用于在CPU启动失败或故障时恢复系统

  • IPMI系统锁定:配置锁定功能可以帮助用户避免意外或者恶意修改系统配置

  • 带内通道权限控制:通过控制带内通道的权限,防止带内攻击者基于各通道对BMC做操作

1.4 关键术语表

术语解释
ME管理引擎(Management Engine),提供CPU、内存、温度等硬件监控能力,通过IPMI接口与BMC交互
SMM机框管理模块(Shelf Management Module),负责机框内所有刀片、风扇、电源的集中监控与管理
LUN逻辑单元号(Logical Unit Number),是SCSI协议中标识存储单元的编号,用于区分同一SCSI目标(Target)下的多个存储逻辑单元
IPMB智能平台管理总线(Intelligent Platform Management Bus),是IPMI协议的底层通信总线,基于I2C协议扩展,用于在机箱内不同板卡(如BMC、CPU、电源模块)之间传输管理信息
ICMB智能机框管理总线(Intelligent Chassis Management Bus),用于服务器机框内各模块间标准化通信,是IPMI的扩展协议

2. API 使用说明与示例

2.1 Request

功能说明

用于处理APP向底层通道的IPMI请求,并返回响应。

属性内容
接口名bmc.kepler.IpmiCore
首发版本bmcsdk 25.03
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
ChanType输入U8IPMI消息的请求通道类型1:IMU/ME
2:CT_SMM
3:CT_BMC
Instance输入U8IPMI消息的请求通道实例U8
NetFn输入U8IPMI消息的网络码U8
Lun输入U8IPMI消息的Lun号U8
Cmd输入U8IPMI消息的命令字U8
Payload输入U8[]IPMI消息的请求数据元素类型为U8的数组
CompletionCode输出U8响应码U8
Payload输出U8[]IPMI消息的响应数据元素类型为U8的数组

返回值与异常

返回值含义触发条件处理建议
0xC1, 0失败参数非法或内部错误检查输入参数是否合法
0xC3, 0失败响应超时检查输入参数是否合法

应用场景

处理APP向底层通道的IPMI请求,并返回响应

调试示例

命令行调试
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore IpmiCore a{ss}yyyyyay 0 1 0 0x30 0 0x91 5 0xdb 0x07 0x00 0x24 0x00

响应:yay 193 0

2.2 Route

功能说明

处理APP向底层通道的IPMI请求,并返回响应。

属性内容
接口名bmc.kepler.IpmiCore
首发版本bmcsdk 25.03
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
Req输入U8[]请求数据元素类型为U8的数组
Ctx输入U8[]请求上下文的json字符串,包括通道类型、会话信息、客户端信息元素类型为U8的数组
Rsp输出U8[]响应数据元素类型为U8的数组

应用场景

处理APP向底层通道的IPMI请求,并返回响应。

限制条件

2.3 SetHostPrivilegeLimited

功能说明

设置host侧发送到BMC的ipmi命令权限限制集合。

属性内容
接口名bmc.kepler.IpmiCore
首发版本bmcsdk 25.03
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
SystemId输入String设置权限的host标识String
Privileges输入String[]设置的权限集合,如果是nil或者空表则认为是清空权限集合设置的权限字符串集合
Ret输出Boolean返回值true:设置成功
false:设置失败
Reason输出String设置权限失败的原因字符串

返回值与异常

返回值含义触发条件处理建议
Ret为true设置权限成功,此时Reason为""设置权限成功
Ret为false设置权限失败输入参数不合法可通过Reason查看设置权限失败的原因,从而修改输入参数

应用场景

设置host侧发送到BMC的ipmi命令权限限制集合。

调试示例

命令行调试
  • 设置的权限列表为空
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore SetHostPrivilegeLimited a{ss}sas 0 '1' 0

响应:bs true ""
  • 设置的权限列表不为空,且权限合法
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore SetHostPrivilegeLimited a{ss}sas 0 '1' 1 'BasicSetting'

响应:bs true ""
  • 设置的权限列表不为空,且权限合法
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore SetHostPrivilegeLimited a{ss}sas 0 '1' 1 'xxx'

响应:bs false "xxx is invalid privilege"

2.4 SetChannelAccesses

功能说明

根据通道类型设置IPMI通道访问权限。

属性内容
接口名bmc.kepler.IpmiCore
首发版本bmcsdk 25.03
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
ChannelType输入String通道类型“IPMB”、“SMS”、“ICMB”
AccessRole输入String访问角色“NoAccess”、“User”、“Operator”、“Administrator”

返回值与异常

返回值含义触发条件处理建议
抛错“The value %s for the property %s is not in the list of acceptable values.”设置失败输入参数不合法根据报错信息修改不合法的参数
设置成功输入参数合法

应用场景

根据通道类型设置IPMI通道访问权限。

调试示例

命令行调试
  • 输入参数合法,设置成功
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore SetChannelAccesses a{ss}ss 0 'IPMB' 'Operator'

响应:
  • 通道类型不合法,设置失败
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore SetChannelAccesses a{ss}ss 0 'IPMBB' 'Operator'

响应:Call failed: {"format":"The value %s for the property %s is not in the list of acceptable values.","registry_prefix":"Base","name":"PropertyValueNotInList","params":["IPMBB","%ChanType"]}

2.5 GetIPMIChannel

功能说明

属性内容
接口名bmc.kepler.IpmiCore
首发版本bmcsdk 25.03
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
ChannelNumber输入U8通道编号255:获取所有通道信息
其他:获取某个编号对应的通道信息
Channels输出Array通道信息字典包括:
InternalNumber:对内通道编号;
ExternalNumber:对外通道编号;
ProtocolType:协议类型;
MediumType:媒体类型;
ChannelType:通道类型;
Instance:通道实例

返回值与异常

返回值含义触发条件处理建议
InternalNumber、ProtocolType、Instance、ChannelType、MediumType、ExternalNumber均为0未查找到编号为目标值的通道不存在编号为目标值的通道检查入参InternalNumber是否有效
返回通道信息数组设置成功正常执行完成

应用场景

根据通道编号获取IPMI通道信息。

调试示例

命令行调试
  • 获取所有通道信息(假设共有两个通道,编号分别为22和15)
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore GetIPMIChannel a{ss}y 0 255

响应:aa{sy} 2 6 "InternalNumber" 22 "ProtocolType" 8 "Instance" 1 "ChannelType" 10 "MediumType" 7 "ExternalNumber" 22 6 "InternalNumber" 15 "ProtocolType" 8 "Instance" 0 "ChannelType" 3 "MediumType" 12 "ExternalNumber" 15
  • 获取编号为22的通道信息
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore GetIPMIChannel a{ss}y 0 22

响应:aa{sy} 1 6 "InternalNumber" 22 "ProtocolType" 8 "Instance" 1 "ChannelType" 10 "MediumType" 7 "ExternalNumber" 22
  • 获取编号不存在的通道信息
text
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore GetIPMIChannel a{ss}y 0 254

响应:aa{sy} 1 6 "InternalNumber" 0 "ProtocolType" 0 "Instance" 0 "ChannelType" 0 "MediumType" 0 "ExternalNumber" 0

2.6 Trace

功能说明

属性内容
接口名bmc.kepler.Debug.IpmiCore.TraceIpmi
首发版本bmcsdk 25.03
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
EnableTrace输入Boolean南向追踪使能状态true或false
Channel输入String南向追踪的通道"bt"、"ipmb"、"edma"、"ipmbeth"
NetFn输入U8南向追踪的IPMI网络字节功能码U8
Cmd输入U8南向追踪的IPMI命令字U8
Filter输入String南向追踪的IPMI过滤字段String
LogType输入String南向追踪的记录方式"file"、"local"

应用场景

南向追踪接口。

3. 组件扩展案例

3.1 扩展能力概述

不适用

4. 日志说明

4.1 一键日志收集

文件路径内容说明
AppDump/ipmi_core/ipmbeth_info.txt收集所有IPMI通道信息,包括IPMI通道类型、通道实例、通道协议、通道目的地址、通道源地址、通道媒介类型
AppDump/ipmi_core/route_table.txt收集路由表信息

4.2 关键日志信息

日志片段日志级别含义解读建议处理动作
Startup status has changed, ==> Starting, uptime:xxxs, cost xxxmsNOTICE组件起来
ipmi load bt driver [bt over localbus] failed, ret %sERROR加载默认驱动localbus失败检查加载默认驱动localbus失败原因
Cannot find service_name, medtype=xxERROR加载驱动后,无法找到通道媒介类型xx对应的服务检查是否支持通道媒介类型xx对应的服务

5. 问题定界指南

5.1 调试方法

开启调试日志

busctl调试日志见第二章节。

6. 常见问题解答

常见问题解答请查阅《IPMI管理定位问题》

附录

附录A 参考资料

附录B 修订记录

版本日期修订人修订内容
v1.02026-04-30mkdlf补充文档说明