【iTestSmart 1.0.41】IPMI命令设置风扇转速,失败结果不符合预期。

一、测试环境
硬件:S920X20
BMC Version: 26.03
二、问题描述
IPMI设置风扇转速时错误参数测试( Fan_Manual_Auto_Speed_015),测试用例执行失败,报错日志如图所示:


问题:是IPMI命令返回的报错信息有错,还是IPMI不支持此命令?

答案内容由AI生成,仅供参考:

:pushpin: 总结

项目 分析结果
命令是否有效 :cross_mark: 无效,cmd=0x91 未定义
是否支持该功能 :white_check_mark: 支持可能性存在,但需使用 cmd=0x92, subcmd=0x10
报错信息是否正确 :white_check_mark: 正确,“Unspecified error” 是标准响应
根本原因 发送了未注册或错误的 IPMI 原始命令
解决方案 使用正确的 NetFn/Cmd/SubCommand 组合,并确保风扇处于手动模式

:light_bulb: 建议:请联系开发团队确认该固件版本 26.03 是否已集成 SetDesiredFanSpeed (0x30/0x92) 命令;若未集成,则属于功能缺失,需通过软件升级或定制补丁支持。

点击此处查看详细分析解答

关于 IPMI 命令设置风扇转速失败问题的分析

根据您提供的测试日志、上下文信息以及知识图谱中的技术细节,以下是对该问题的综合分析与解答。


:magnifying_glass_tilted_left: 问题摘要

  • 测试环境:S920X20 服务器,BMC 版本为 26.03
  • 执行命令
    ipmitool -H 192.168.40.25 -I lanplus -U Admin -P ****** raw 0x30 0x91 0xdb 0x07 0x00 0x25 0x0 0x5 0x19
    
  • 返回错误
    Unable to send RAW command ... Unspecified error
    
  • 核心疑问
    • 是 IPMI 命令返回的报错信息有误?
    • 还是当前系统根本不支持此命令?

:white_check_mark: 结论:此 IPMI 命令不被支持,且返回错误信息符合预期

1. 当前 BMC 不支持 cmd=0x91 的 SetDesiredFanSpeed 命令

从技术上下文可以明确以下几点:

:pushpin: 知识库证据:

  • 在文档 #9(《添加一条IPMI命令实操分享——设置所需的风扇速度》)中明确指出:

    “该ipmi命令在openUBMC目前还不支持”

    文档描述的是添加 SetDesiredFanSpeed 这一功能的过程,说明在撰写时(适用于 openUBMC 某些版本),该命令 尚未原生存在

  • 该命令定义如下:

    "SetDesiredFanSpeed": {
      "netfn": "0x30",
      "cmd": "0x92",
      "SubCommand": "0x10"
    }
    

    注意:文档中定义的 cmd=0x92,而您测试的命令为 0x91,说明两者也 不匹配

  • Document Chunks 中提供的 IPMI 实现逻辑文件中,注册的回调函数为:

    register_ipmi_func(cooling_ipmi_service.SetDesiredFanSpeed, 
                       function(...) return cooling_ipmi:SetDesiredFanSpeed(...) end)
    

    该接口由 cooling_ipmi:SetDesiredFanSpeed 实现,仅处理特定结构的请求参数,并进行输入校验。

:cross_mark: 推论:

您所使用的命令 raw 0x30 0x91 ... 对应的 cmd=0x91 并非已注册的有效命令,因此 不会被 Ipmi_Core 识别


2. “Unspecified error” 是 IPMI 协议的标准未知命令错误码

:pushpin: 协议规范依据:

  • 当 BMC 接收到一个未定义或未注册的 IPMI 命令时,IPMI Core 会返回完成码 0xFF,对应错误为:

    Completion Code: 0xFF → "Unspecified error"
    

    此为 IPMI 标准行为。

  • 日志中出现:

    rsp=0xff: Unspecified error
    

    表明:BMC 成功接收到命令,但因无法处理而返回未定义错误 —— 这正是“命令不支持”的标准表现形式

:white_check_mark: 结论:

报错 信息无误Unspecified error 正是系统对非法/未注册命令的标准响应。


3. 相关功能应使用正确命令格式

根据知识库中对 SetDesiredFanSpeed 的设计定义:

:white_check_mark: 推荐使用的 正确命令结构 应为:

ipmitool raw 0x30 0x92 0xdb 0x07 0x00 0x10 <Index> <FanSpeedBytes...>
  • NetFn: 0x30
  • Cmd: 0x92(不是 0x91)
  • Manufacturer ID: 0xDB0700
  • SubCommand: 0x10(表示 SetDesiredFanSpeed)
  • Index: 起始风扇 ID
  • FanSpeed: 每个风扇的占空比(百分比值)

例如:

ipmitool raw 0x30 0x92 0xdb 0x07 0x00 0x10 0x00 0x32

→ 设置风扇 0 的转速为 50%(0x32 = 50)


4. 输入校验机制也会影响结果

即使命令被注册,以下因素仍会导致失败:

:warning: 校验逻辑(来自 cooling_ipmi:SetDesiredFanSpeed 实现):

  • 输入的 FanSpeed 字节数必须等于从 Index 到末尾的风扇数量。
  • 若不匹配,则触发:
    error(custom_msg.IPMIOutOfRange())
    
  • 风扇必须处于 手动模式(Manual Mode),否则返回 IPMIInvalidFieldRequest

:hammer_and_wrench: 建议操作步骤

步骤 操作 目的
1 查询当前是否支持 cmd 0x92 ipmitool raw 0x30 0x92 0xdb 0x07 0x00 0x10 0x00
2 确认风扇控制模式 ipmcget -d fanmode
若非手动模式,先设置:
ipmcset -d fanmode -v 1 0
3 使用正确命令测试 ipmitool raw 0x30 0x92 0xdb 0x07 0x00 0x10 0x00 0x40(设风扇0为64%)
4 检查日志 查看 /var/log/cooling_control.log 是否记录成功

:pushpin: 总结

项目 分析结果
命令是否有效 :cross_mark: 无效,cmd=0x91 未定义
是否支持该功能 :white_check_mark: 支持可能性存在,但需使用 cmd=0x92, subcmd=0x10
报错信息是否正确 :white_check_mark: 正确,“Unspecified error” 是标准响应
根本原因 发送了未注册或错误的 IPMI 原始命令
解决方案 使用正确的 NetFn/Cmd/SubCommand 组合,并确保风扇处于手动模式

:light_bulb: 建议:请联系开发团队确认该固件版本 26.03 是否已集成 SetDesiredFanSpeed (0x30/0x92) 命令;若未集成,则属于功能缺失,需通过软件升级或定制补丁支持。


如需进一步诊断,可提供以下信息:

  • ipmcget -d --version 输出
  • ipmitool mc info 返回的设备支持能力
  • cooling_control.log 最近日志片段





疑似不支持”ipmitool raw 0x30 0x92 0xdb 0x07 0x00 0x10 0x00“命令,请帮忙排查问题。

当前该问题是内部已知问题,开发正在修复该问题。