背景
机柜在不同的发货场景会有不同的配置,比如电源框的类型和数量、液冷门是否在位、存在哪些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 |