[已评审]新增符合dcmi规范的GetTemperatureReadings等5个命令

背景

当前 dcmi 标准命令存在缺失,需要评审新增支持 dcmi 标准命令,以满足数据中心管理接口规范(DCMI v1.5)的要求。

关联ISSUE

[需求]: 新增dcmi规范Get Temperature Readings命令

[需求]: 新增GetDcmiCapabilitiesInfo、GetAssetTag、SetAssetTag、GetThermalLimit命令

评审点

  • 评审点1:IPMI 新增 GetTemperatureReadings 命令
  • 评审点2:IPMI 新增 GetDcmiCapabilitiesInfo 命令
  • 评审点3:IPMI 新增 GetAssetTag 命令
  • 评审点4:IPMI 新增 SetAssetTag 命令
  • 评审点5:IPMI 新增 GetThermalLimit 命令

详细描述

评审点1:IPMI 新增 GetTemperatureReadings 命令

命令名称: GetTemperatureReadings
命令说明: 支持DCMI规范获取温度传感器的值
命令权限: ReadOnly
是否锁定之后可以访问:
是否有敏感数据:
命令样式:

  • 请求:ipmitool raw 0x2c 0x10 <GrpExtId> <SensorType> <EntityID> <EntityInstance> <EntityInstanceStart>
  • 响应: <GrpExtId> <AvailableInstances> <TempDataCount> <TempData>

命令请求参数:

字节顺序 域取值说明
NetFn 2Ch
Cmd 10h
1 GrpExtId,组扩展ID。长度固定 1 个字节,固定值DCh。
2 SensorType,传感器类型
3 EntityID, 实体ID
4 EntityInstance,实体实例号
5 EntityInstanceStart,查询实体实例起始序号

命令响应参数:

字节顺序 域取值说明
1 Completion Code,说明如下:cch = 请求参数错误cbh = 请求的传感器、数据或记录不存在c9h = 参数超出范围
2 GrpExtId,组扩展ID。长度固定 1 个字节,固定值DCh
3 AvailableInstances,属于请求中EntityID所有实体个数
4 TempDataCount,本次请求的实体个数
5 TempData,温度和实体 数据组,说明如下: Byte1:Bit 7: Sign bit (1 is negative and 0 is positive)Bit 6:0: Temperature data in Celsius degrees (Range is -128 C to +128 C) Byte 2: Entity Instance number for the sensor.

命令示例:
样例1: 查询 EntityId为03h(CPU温度)的所有实体数据

  • 请求:ipmitool raw 0x2C 0x10 0xdc 0x01 0x03 0x00 0x02
  • 响应:dc 12 08 27 60 24 60 26 60 26 60 26 60 26 60 24 60 27 60

评审点2:IPMI 新增 GetDcmiCapabilitiesInfo 命令

命令名称: GetDcmiCapabilitiesInfo

命令说明: 获取 DCMI 能力信息,包括规范版本及支持的功能参数

命令权限: ReadOnly

是否锁定之后可以访问: 是

是否有敏感数据: 否

命令样式:

请求:ipmitool raw 0x2c 0x01 <GrpExtId> <Selector>

响应:<GrpExtId> <DcmiSpecConform> <ParamRevision> <ParameterData>

命令请求参数:

字节顺序 取值 说明
NetFn 2Ch
Cmd 01h
1 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
2 Selector 参数选择器,用于指定请求的能力信息类型(如 0x01 表示支持的 DCMI 能力)。

命令响应参数:

字节顺序 取值 说明
1 Completion Code 00h = 成功
2 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
3:4 DcmiSpecConform DCMI 规范版本一致性。Byte 1: Major Version (01h); Byte 2: Minor Version (05h)。
5 ParamRevision 02h 参数版本号。
6:N ParameterData 能力参数数据,根据请求的 Selector 返回相应内容。

附表:ParameterData 详细定义 (参考 DCMI Table 6-3)

Parameter Selector (#) 参数名称 Parameter Data 说明 备注/实现说明
1 Supported DCMI Capabilities(支持的 DCMI 能力) Byte 1: Reserved (00h) 固定为 00h
Byte 2: Platform capabilities[0] Power management available 暂时不实现 (置 0)
Byte 3: Manageability Access Capabilities[0] In-band System Interface Channel Available 不需要实现 (置 0)
Byte 3: Manageability Access Capabilities[1] Serial TMODE Available 默认支持,返回 1 即可
Byte 3: Manageability Access Capabilities[2] Out-Of-Band Secondary LAN Channel Available 判断路径是否存在:/bmc/kepler/IpmiService/Channels/LAN2存在时返回 1,否则返回 0
Byte 3: [7:3]Reserved 固定为 00h
2 Mandatory Platform Attributes(强制平台属性) Byte 1:2: SEL AttributesByte 3:4: ReservedByte 5: Sampling frequency for Temperature Monitoring [不需要实现](注:建议返回错误码 0xD5 表示不支持)
3 Optional Platform Attributes(可选平台属性) Byte 1: Power management Device Slave AddressByte 2: Power management Controller Channel Number [暂不实现](注:建议返回错误码 0xD5 表示不支持)
4 Manageability Access Attributes(可管理性访问属性) Byte 1: Primary LAN OOB Support Channel Number 固定返回 1
Byte 2: Secondary LAN OOB Support Channel Number **逻辑如下:**1. 若 Selector 1 的 Byte 3 [2] (Secondary LAN) 为 1: - 从资源树获取属性值 - Path: /bmc/kepler/IpmiService/Channels/LAN2 - Interface: bmc.kepler.IpmiService.ChannelNumberMapping - Property: External2. 若 Selector 1 的 Byte 3 [2] 为 0: - 固定返回 0xFF
Byte 3: Serial Out-Of-Band TMODE Capability Channel Number 返回 0xFF 即可
5 Enhanced System Power Statistics(增强系统电源统计属性) Byte 1: Number of supported rolling average time periodsByte 2:N: Rolling Average Time periods [暂时不实现](注:建议返回错误码 0xD5 表示不支持)

命令示例:

样例1: 获取支持的 DCMI 能力 (Selector=0x01)

请求:ipmitool raw 0x2C 0x01 0xdc 0x01

响应:dc 01 05 02 06 00 02 (示例数据:DCMI 1.5, Parameter Revision 02, Capabilities Data…)

评审点3:IPMI 新增 GetAssetTag 命令

命令名称: GetAssetTag

命令说明: 获取系统的资产标签(Asset Tag)信息

命令权限: ReadOnly

是否锁定之后可以访问: 是

是否有敏感数据: 否

命令样式:

请求:ipmitool raw 0x2c 0x06 <GrpExtId> <Offset> <ReadLength>

响应:<GrpExtId> <TotalAssetTagLen> <AssetTagData>

命令请求参数:

字节顺序 取值 说明
NetFn 2Ch
Cmd 06h
1 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
2 Offset 读取偏移量。
3 ReadLength 读取长度(最大 16 字节)。

命令响应参数:

字节顺序 取值 说明
1 Completion Code C9h = 参数越界(读取长度过大或偏移量错误)
2 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
3 TotalAssetTagLen 资产标签的总长度。
4:N AssetTagData 请求的资产标签数据片段。

命令示例:

样例1: 读取资产标签的前 16 个字节

请求:ipmitool raw 0x2C 0x06 0xdc 0x00 0x10

响应:dc 05 41 53 53 45 54 (示例:长度5,内容ASSET)

评审点4:IPMI 新增 SetAssetTag 命令

命令名称: SetAssetTag

命令说明: 设置系统的资产标签(Asset Tag)信息

命令权限: Operator

是否锁定之后可以访问: 否

是否有敏感数据: 否

命令样式:

请求:ipmitool raw 0x2c 0x08 <GrpExtId> <Offset> <WriteLength> <Data>

响应:<GrpExtId> <AssetTagLen>

命令请求参数:

字节顺序 取值 说明
NetFn 2Ch
Cmd 08h
1 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
2 Offset 写入偏移量(必须连续写入)。
3 WriteLength 写入长度(最大 16 字节)。
4:N Data 要写入的资产标签数据。

命令响应参数:

字节顺序 取值 说明
1 Completion Code C9h = 参数越界C7h = 请求数据长度无效
2 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
3 TotalAssetTagLen 写入后的资产标签总长度。

命令示例:

样例1: 设置资产标签为 “TEST” (4 bytes)

请求:ipmitool raw 0x2C 0x08 0xdc 0x00 0x04 0x54 0x45 0x53 0x54

响应:dc 04

评审点5:IPMI 新增 GetThermalLimit 命令

命令名称: GetThermalLimit

命令说明: 获取热限值(Thermal Limit)配置,支持获取 Inlet Temperature (0x40/0x37) 的管控策略

命令权限: ReadOnly

是否锁定之后可以访问: 是

是否有敏感数据: 否

命令样式:

请求:ipmitool raw 0x2c 0x0c <GrpExtId> <EntityID> <EntityInstance>

响应:<GrpExtId> <ExceptionAction> <TempLimit> <ExceptionTime>

命令请求参数:

字节顺序 取值 说明
NetFn 2Ch
Cmd 0Ch
1 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
2 EntityID 实体ID(如 0x40 或 0x37 表示 Inlet Temperature)。
3 EntityInstance 实体实例号。

命令响应参数:

字节顺序 取值 说明
1 Completion Code CCh = 无效的数据域(如不支持的 EntityID)
2 GrpExtId DCh 组扩展ID。长度固定 1 个字节,固定值DCh。
3 ExceptionAction 异常动作(如 0x20 表示关机并记录日志)。
4 TempLimit 温度限值。
5:6 ExceptionTime 异常持续时间(秒),小端序。

命令示例:

样例1: 获取 Inlet Temperature (0x40) 实例 1 的热限值

请求:ipmitool raw 0x2C 0x0C 0xdc 0x40 0x01

响应:dc 20 00 00 00

评审结论

(1)同意新增ipmi命令 GetTemperatureReadings,该命令支持DCMI规范获取温度传感器的值。
(2)同意新增ipmi命令 GetDcmiCapabilitiesInfo,该命令支持获取DCMI能力信息,包括规范版本及支持的功能参数。
(3)同意新增ipmi命令 GetAssetTag,该命令支持获取系统的资产标签(Asset Tag)信息。
(4)同意新增ipmi命令 SetAssetTag,该命令支持设置系统的资产标签(Asset Tag)信息。
(5)同意新增ipmi命令 GetThermalLimit,该命令支持获取热限值(Thermal Limit)配置,支持获取Inlet Temperature(Ox40/0x37)的管控策略。

遗留问题

  1. GetTemperatureReadings 这个IPMI命令是访问 SDR 温度,不需要系统锁定拦截
  2. GetDcmiCapabilitiesInfo 这个DCMI 命令是 session-less 就可以访问,不需要系统锁定拦截
  3. GetAssetTag 这个DCMI 命令是读系统资产标签,不需要系统锁定拦截
  4. GetThermalLimit 命令是读取散热限制,不需要系统锁定拦截,不实现是什么意思?
  5. SetThermalLimit 命令未实现是什么意思?

已解决