【已评审】IPMI 新增获取指定物理盘信息命令

ISSUE 链接

[缺陷]: 硬盘上电时间数据类型覆盖不了应用场景-storage-AtomGit | GitCode

背景

当前用户通过IPMI命令获取指定物理盘信息,获取到的硬盘累计通电时间为2字节。实际从raid卡控制器获取到的硬盘累计通电时间为4字节,存在数据失真问题。

两个字节的内容最大可以表示7.48年,目前现网已经有5.17年的场景

评审点

有两个方案:

方案1:IPMI 新增获取指定物理盘信息命令
方案2:IPMI 变更获取指定物理盘信息命令

方案1:IPMI 新增获取指定物理盘信息命令

命令名称: GetPhysicalDiskInfo
命令说明: 查询指定物理盘的基本信息
命令权限: ReadOnly
是否锁定之后可以访问:
是否有敏感数据:
命令样式:

  • 请求:ipmitool raw 0x30 0x90 <ManufacturerID> <SubCommand> <Reserve> <ParameterSelector> <SetSelector> <PhysicalDriveID> <ExternSelector> <ReadingOffset> <ReadingLength>
  • 响应:<CompletionCode> <ManufactureId> <Reserve> <Data>

命令请求参数:

字节顺序 域取值说明
NetFn 30h
Cmd 93h
1:3 Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。
4 SubCmd,固定为 3Dh
5 Reserve, 1字节,保留
6 ParameterSelector, 1字节,固定为 0x1D,用于新接口获取指定物理盘信息
7 SetSelector,1字节,固定为 0xFF,不涉及
8 PhysicalDriveID,1字节,物理盘ID
9 ExternSelector,1字节,固定为 0xFF,不涉及
10:11 ReadingOffset,2字节,获取参数的偏移
12 ReadingLength,1字节,获取参数的长度

命令响应参数:

字节顺序 域取值说明
1 Completion Code
2:4 Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。
5 Reserve,bit[7:1]: reserved,bit[0]取值如下:0 = last frame 1 = casecade frame
6:N Data,字符串,其中 data(M1 + M2 + M3 + M4 + 42):data(M1 + M2 + M3 + M4 + 45) 四个字节表示累计上电时间。M1表示硬盘厂商名称,M2表示硬盘序列号,M3表示硬盘型号,M4表示硬盘固件版本,均为非固定长度数据。

命令示例:
样例1: 查询指定物理盘信息

  • 请求:ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x3D 0x00 0x1D 0xff 0x01 0xff 0x00 0x00 0xee
  • 响应:db 07 00 00 07 53 41 4d 53 55 4e 47 0e 53 36 38 31 4e 59 30 4e 37 30 32 35 33 30 1a 53 41 4d 53 55 4e 47 20 4d 5a 37 4c 48 34 38 30 48 41 48 51 2d 30 30 30 30 35 08 48 58 54 37 34 30 34 51 00 08 00 01 03 03 03 21 80 fa 06 00 00 00 00 00 00 00 00 00 00 00 00 63 00 00 00 00 00 00 00 00 00 00 00 00 00 70 6f 00 00

方案2:IPMI 变更获取指定物理盘信息命令

命令名称: GetPhysicalDriveInfo
命令说明: 查询指定物理盘的基本信息
命令权限: ReadOnly
是否锁定之后可以访问:
是否有敏感数据:
命令样式:

  • 请求:ipmitool raw 0x30 0x90 <ManufacturerID> <SubCommand> <Reserve> <ParameterSelector> <SetSelector> <PhysicalDriveID> <ExternSelector> <ReadingOffset> <ReadingLength>
  • 响应:<CompletionCode> <ManufactureId> <Reserve> <Data>

命令请求参数:

字节顺序 域取值说明
NetFn 30h
Cmd 93h
1:3 Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。
4 SubCmd,固定为 3Dh
5 Reserve, 1字节,保留
6 ParameterSelector, 1字节,固定为 0x0A
7 SetSelector,1字节,固定为 0xFF,不涉及
8 PhysicalDriveID,1字节,物理盘ID
9 ExternSelector,1字节,固定为 0xFF,不涉及
10:11 ReadingOffset,2字节,获取参数的偏移
12 ReadingLength,1字节,获取参数的长度

命令响应参数:

字节顺序 域取值说明
1 Completion Code
2:4 Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。
5 Reserve,bit[7:1]: reserved,bit[0]取值如下:0 = last frame 1 = casecade frame
6:N Data(累计上电时间变更为4字节),其中 data(M1 + M2 + M3 + M4 + 42):data(M1 + M2 + M3 + M4 + 45) 四个字节表示累计上电时间。M1表示硬盘厂商名称,M2表示硬盘序列号,M3表示硬盘型号,M4表示硬盘固件版本,均为非固定长度数据。

命令示例:
样例1: 查询指定物理盘信息

  • 请求:ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x3D 0x00 0x0A 0xff 0x01 0xff 0x00 0x00 0xee
  • 响应:db 07 00 00 07 53 41 4d 53 55 4e 47 0e 53 36 38 31 4e 59 30 4e 37 30 32 35 33 30 1a 53 41 4d 53 55 4e 47 20 4d 5a 37 4c 48 34 38 30 48 41 48 51 2d 30 30 30 30 35 08 48 58 54 37 34 30 34 51 00 08 00 01 03 03 03 21 80 fa 06 00 00 00 00 00 00 00 00 00 00 00 00 63 00 00 00 00 00 00 00 00 00 00 00 00 00 70 6f 00 00

评审结论

同意方案二:
1.同意变更接口:
当硬盘上电时间小于等于65535时,保持原有命令返回形式不变,硬盘上电时间以2字节返回。
当硬盘上电时间大于65535时,硬盘上电时间以4字节返回.

遗留问题

1.调研影响:
通过社区发帖调研,结果为没有影响。帖子链接如下: 【调研】IPMI命令“获取指定硬盘信息”变更影响确认 - 交流互助区 - openUBMC 论坛