背景
很多固件的升级会影响业务运行,客户在升级前会进行很多准备工作,且升级次数是有限的。
如果固件升级是,因为升级条件不具备、升级通道故障等导致升级失败,会导致客户升级前准备工作浪费,对客户的影响较大。
如果BMC提供升级前的检查接口,客户在升级准备工作前就可以做一下勘探,勘探到升级前检查有失败时,优先处理失败,这样就可以有效减少实际升级失败的影响。
整体方案
评审点1:新增OEM IPMI命令,用于启动固件预升级检查
详细描述
命令名称: Pre-update Check
命令说明: 启动固件预升级检查
命令权限: BasicSetting
是否锁定之后可以访问: 是
是否有敏感数据: 否
命令样式:
- 请求:
ipmitool raw 0x30 0x93 <ManufacturerID> 0x99 <fru_id><component_id> <component_id_ex> <reserved> - 响应:
<ManufacturerID>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 4 | 99h |
| 5 | FruId |
| 6 | ComponentID,固件ID |
| 7:10 | ComponentIDEx,固件扩展ID,FruId、ComponentID和ComponentIDEx全f时可以触发所有固件预检查 |
| 11:12 | 预留字段,填0 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code |
| 2:4 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
命令示例:
样例:开始触发升级前预检查
- 请求:
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x99 0x01 0x05 0xff 0xff 0xff 0xff 0x00 0x00 - 响应:
0xdb 0x07 0x00
评审点2:新增OEM IPMI命令,获取固件预升级检查结果
命令名称: Get Pre-update Check Result
命令说明: 获取升级前预检查结果
命令权限: ReadOnly
是否锁定之后可以访问: 是
是否有敏感数据: 否
命令样式:
- 请求:
ipmitool raw 0x30 0x93 <ManufacturerID> 0x9A <fru_id><component_id> <component_id_ex> <reserved> - 响应:
<ManufacturerID> <ManufacturerID> <Result>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 4 | 9Ah |
| 5 | FruId |
| 6 | ComponentID,固件ID |
| 7:10 | ComponentIDEx,固件扩展ID |
| 11:12 | 预留字段,填0 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code |
| 2:4 | Manufacturer ID |
| 5 | 固件升级前预检查结果:0 - 固件可升级 1 - 固件当前不可升级 2 - 固件在检查中 |
命令示例:
- 请求:
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x9A 0x01 0x05 0xff 0xff 0xff 0xff 0x00 0x00 - 响应:
0xdb 0x07 0x00 0x00
评审结论
已线下审核:
- 同意新增OEM IPMI命令(Pre-update Check),用于启动固件预升级检查,命令详细信息见评审点1。
- 同意新增OEM IPMI命令(Get Pre-update Check Result),用于获取固件预升级检查结果,命令详细信息见评审点2。