【待评审】扩展IPMI命令,支持机柜配置的查询和设置

背景

机柜在不同的发货场景会有不同的配置,比如电源框的类型和数量、液冷门是否在位、存在哪些RS485设备等。BMC需要支持将这些配置固化到电源框背板的Eeprom上(与机柜绑定),以避免管理板换插或更换备件时机柜配置丢失。BMC启动时,会读取并解析这些配置,用于某些功能的初始化或用作某些告警的判断条件。

进行装备生产时,机柜的产品编码后面会带一串表示机柜配置的字符串:

功能模块-XXXXX-XXX总线柜(1*电源框,6*TPSU,无液冷门)-[PWR=0x1B106][LQD=0x0010][RMIO=0x0110][RS485=0x0505][RS485=0x0142][RMLIO=0x0101][RMLIO=0x0241][RMLIO=0x058A]

装备平台会按产品的定义,将这串字符串的每一项十六进制数,解析为具体配置,调用BMC的IPMI接口写入到机柜电源框背板Eeprom中。比如对于 [PWR=0x1B106]

定义 bit位置 bit数量 含义 默认值
待定义 19-20 2bit 预留,默认0 0
机房空开配置 17-18 2bit 0:C32空开、1:C63空开、2~3:待定义 1(C63空开)
电源框类型 13-16 4bit 电源框类型,包括电源框高度和单OU槽位数
详细见产品定义
b’1011(6槽位@2OU,即高度=2,单OU槽位数=3)
电源框数量 9-12 4bit 电源框数量(0~15) 1
xPSU模块类型 7-8 2bit 0:PSU、1:TPSU、2~3:待定义 0(PSU)
xPSU数量 1-6 6bit xPSU的数量(0~63) 6

评审点

复用 Get Rack Info 和 Set Rack Info 的IPMI命令,新增6个Parameter Selector,分别支持查询和设置机柜电源系统配置、机柜液冷系统配置、机柜SMN对接配置、机柜RMIO端口配置、机柜RS485端口配置、机柜RMLIO端口配置。

详细描述

获取机柜信息(Get Rack Info)

命令名称: Get Rack Info
命令权限: ReadOnly
是否锁定之后可以访问:
是否有敏感数据:
命令样式:

  • 请求:ipmitool raw 0x30 0x94 <ManufacturerID> <SubCommand> <ParameterSelector> <ReadOffset> <Length>
  • 响应:<ManufacturerID> <EndOfList> <Data>

命令请求参数:

字节顺序 域内容
NetFn 30h
Cmd 94h
1:3 Manufacturer ID,LS Byte first。长度固定3个字节,例如,某厂家ID是2011,对应十六进制为0x0007DB,则字节序为第1个字节为DBh、第2个字节为07h、第3个字节为00h。
4 Sub command,子命令=6Ah
5:6 Parameter Selector,LS Byte first
7:8 Read Offset,读取的数据偏移,从0开始,LS Byte first
9 Length,读取长度(最大为250bytes)

命令响应参数:

字节顺序 域内容
1 Completion Code
80h= parameter not supported.
2:4 Manufacturer ID,LS Byte first。长度固定3个字节,例如,某厂家ID是2011,对应十六进制为0x0007DB,则字节序为第1个字节为DBh、第2个字节为07h、第3个字节为00h。
5 End of List
表示当前数据是否结束。当参数数据比较长的时候,可能需要分多次读取,通过此字段可以判断数据是否读完。
[7:1]:reserved
[0]:End of list
0=last data
1=middle data
6:N Data

设置机柜信息(Set Rack Info)

命令名称: Set Rack Info
命令权限: BasicSetting
是否锁定之后可以访问:
是否有敏感数据:
命令样式:

  • 请求:ipmitool raw 0x30 0x94 <ManufacturerID> <SubCommand> <ParameterSelector> <EndOfList> <WriteOffset> <Length> <ParameterData>
  • 响应:<ManufacturerID>

命令请求参数:

字节顺序 域内容
NetFn 30h
Cmd 94h
1:3 Manufacturer ID,LS Byte first。长度固定3个字节,例如,某厂家ID是2011,对应十六进制为0x0007DB,则字节序为第1个字节为DBh、第2个字节为07h、第3个字节为00h。
4 Sub command,子命令=6Bh
5:6 Parameter Selector,LS Byte first
7 [7:1]:reserved
[0]:End of list
0=last data
1=middle data
8:9 Write Offset
写入的数据偏移,从0开始,当数据较长需要多次写入时,一定要从头到尾按顺序写入,不能乱序。
10 Length
写入长度
11:N Parameter Data

命令响应参数:

字节顺序 域内容
1 Completion Code
80h= parameter not supported.
81h= attempt to set the ‘set in progress’ value (in parameter #0) when not in the ‘set complete’ state.
82h= attempt to write read-only parameter
2:4 Manufacturer ID,LS Byte first。长度固定3个字节,例如,某厂家ID是2011,对应十六进制为0x0007DB,则字节序为第1个字节为DBh、第2个字节为07h、第3个字节为00h。

评审点:机柜配置参数表新增以下6个Parameter Selector

功能描述 parameter selector parameter data-get parameter data-set
模板:功能描述,使用场景 0xMMNN 请求:
Read Offset:0x0000
Length: 1
响应:
End of List: 0
Data:
0: 功能0
1: 功能1
请求:
Write Offset:0x0000
Length: 1
Data:
0: 功能0
1: 功能1
定制机柜电源系统配置 0x0009 请求:
Read Offset:
0x0001 机房空开配置
0x0002 电源框高度
0x0003 电源框单OU槽位数
0x0004 电源框数量
0x0005 xPSU模块类型
Length: 1
响应:
Data:
对应配置项的值,与设置时定义一致
请求:
Write Offset:0x0000
Length: 2
Data:
Byte1:
0x01 定制机房空开配置
- Byte2:0:C32空开,1:C63空开
0x02 定制电源框高度
- Byte2:1~4:电源框高度
0x03 定制电源框单OU槽位数
- Byte2:2~3:单OU槽位数
0x04 定制电源框数量
- Byte2:0~15:电源框数量
0x05 定制xPSU模块类型
- Byte2:0:PSU,1:TPSU
定制机柜液冷系统配置 0x000a 请求:
Read Offset:
0x0001 EMM模块版本
0x0002 EMM模块功能
Length: 1
响应:
Data:
对应配置项的值,与设置时定义一致
请求:
Write Offset:0x0000
Length: 2
Data:
Byte1:
0x01 定制EMM模块版本
- Byte2:0:未使用,1:EMM10,2~15:待定义
0x02 定制EMM模块功能
- Byte2:0~15:EMM模块的功能码,由产品定义
定制机柜SMN对接配置 0x000b 请求:
Read Offset:
0x0001 SMN个数
0x0002 SMN对接方案
Length: 1
响应:
Data:
对应配置项的值,与设置时定义一致
请求:
Write Offset:0x0000
Length: 2
Data:
Byte1:
0x01 定制SMN个数
- Byte2:0~2:SMN个数
0x02 定制SMN对接方案
- Byte2:0:后连接,1:前面板连接
定制机柜RMIO端口配置 0x000c 请求:
Read Offset:0x0000
查询最后一条非空配置的编号
Length: 1
响应:
Data:
Byte1 最后一条非空配置的编号

请求:
Read Offset:0x0001~0x0010
查询对应编号的配置内容
Length: 3
响应:
若对应编号为空配置,则Data Length为0
若对应编号为非空配置,则Data Length为3:
Byte1 RMIO端口位置
0:未使用
1:前面板的RMIO
2:前面板的RS485
3:第一个电源框的RMLIO-1
4:第一个电源框的RMLIO-2
5:第二个电源框的RMLIO-1
6:第二个电源框的RMLIO-2
Byte2 RMIO传感器类型
0:门禁检测传感器
1:声光告警装置
Byte3 RMIO控制方案
0:enable=12V开启输出,diable=12V关闭输出
1:enable=OD输出有效,diable=OD输出关闭
2:输入,高电平有效
3:输入,低电平有效
请求:
Write Offset:0x0001~0x0010
定制对应编号的配置内容,对于空配置,Byte1只能为0x00或0xff
Byte1:
0x00 定制对应编号的所有配置项
Length: 4
- Byte2 RMIO端口位置
- Byte3 RMIO传感器类型
- Byte4 RMIO控制方案
0x01 定制RMIO端口位置
Length: 2
- Byte2 RMIO端口位置
0x02 定制RMIO传感器类型
Length: 2
- Byte2 RMIO传感器类型
0x03 定制RMIO控制方案
Length: 2
- Byte2 RMIO控制方案
0xff 将对应编号设为空配置
Length: 1
定制机柜RS485端口配置 0x000d 请求:
Read Offset:0x0000
查询最后一条非空配置的编号
Length: 1
响应:
Data:
Byte1 最后一条非空配置的编号

请求:
Read Offset:0x0001~0x0010
查询对应编号的配置内容
Length: 4
响应:
若对应编号为空配置,则Data Length为0
若对应编号为非空配置,则Data Length为4:
Byte1 RS485从设备地址
0~255:从设备地址
Byte2 RS485端口位置
0:前面板的RMIO
1:前面板的RS485
Byte3 RS485从设备类型
0:温湿度传感器
1:ECU
Byte4 本类型从设备个数
0~7:从设备个数
请求:
Write Offset:0x0001~0x0010
定制对应编号的配置内容,对于空配置,Byte1只能为0x00或0xff
Byte1:
0x00 定制对应编号的所有配置项
Length: 5
- Byte2 RS485从设备地址
- Byte3 RS485端口位置
- Byte4 RS485从设备类型
- Byte5 本类型从设备个数
0x01 定制RS485从设备地址
Length: 2
- Byte2 RS485从设备地址
0x02 定制RS485端口位置
Length: 2
- Byte2 RS485端口位置
0x03 定制RS485从设备类型
Length: 2
- Byte2 RS485从设备类型
0x04 定制本类型从设备个数
Length: 2
- Byte2 本类型从设备个数
0xff 将对应编号设为空配置
Length: 1
定制机柜RMLIO端口配置 0x000e 请求:
Read Offset:0x0000
查询最后一条非空配置的编号
Length: 1
响应:
Data:
Byte1 最后一条非空配置的编号

请求:
Read Offset:0x0001~0x0010
查询对应编号的配置内容
Length: 4
响应:
若对应编号为空配置,则Data Length为0
若对应编号为非空配置,则Data Length为4:
Byte1 RMLIO从设备地址
0~255:从设备地址
Byte2 RMLIO端口位置
0:第一个电源框的RMLIO-1
1:第一个电源框的RMLIO-2
2:第二个电源框的RMLIO-1
3:第二个电源框的RMLIO-2
Byte3 RMLIO从设备类型
0:工质液流量/温度检测装置
1:柜级关断阀/流量调节阀
2:工质液检测装置
Byte4 本类型从设备个数
0~7:从设备个数
请求:
Write Offset:0x0001~0x0010
定制对应编号的配置内容,对于空配置,Byte1只能为0x00或0xff
Byte1:
0x00 定制对应编号的所有配置项
Length: 5
- Byte2 RMLIO从设备地址
- Byte3 RMLIO端口位置
- Byte4 RMLIO从设备类型
- Byte5 本类型从设备个数
0x01 定制RMLIO从设备地址
Length: 2
- Byte2 RMLIO从设备地址
0x02 定制RMLIO端口位置
Length: 2
- Byte2 RMLIO端口位置
0x03 定制RMLIO从设备类型
Length: 2
- Byte2 RMLIO从设备类型
0x04 定制本类型从设备个数
Length: 2
- Byte2 本类型从设备个数
0xff 将对应编号设为空配置
Length: 1

评审结论

遗留问题