【规范】IPMI 接口设计指南

1 设计原则

  1. IPMI 命令目前演进性不好,并且在运维场景中受限较多(尤其是 OEM IPMI 命令),因此总体上采用 非必需则不新增 原则(即:设计时要反问为啥一定要 IPMI 命令才可以?一定要新增 IPMI 命令?)
  2. IPMI 命令在不同的通道(BT/IPMB/LAN 等通道)均可以作为接口进行交互,在设计时一定要明确命令的使用场景和命令的 操作角色权限

2 新增命令

【说明】 目前 IPMI 标准命令已经在 IPMI 2.0 规范 中进行声明,因此本涉及指南仅针对 OEM 类 IPMI 命令的设计进行指导说明。

2.1 确认命令的 NetFn(功能码)

openUBMC 目前提供的 OEM IPMI 命令的 NetFn 固定为 30h/31h
IPMI 规范规定的 Vendor specific NetFn 范围为 [30h, 3Fh](8 pairs)。

2.2 确认命令的 Cmd(命令字)

openUBMC 目前提供的 OEM IPMI 命令根据使用场景的不同分为几个大类,这些大类就通过 IPMI 命令的 OEM Cmd 进行区分。具体的 NetFn 如下:

Cmd 用途
90h 装备类命令,主要是装备侧进行生产加工和验证时使用的 IPMI 命令
92h BIOS类命令,主要是通过 System Interface 通道和BIOS通信使用的 IPMI 命令
93h 通用类命令,主要是现网运维的各种功能的 OEM IPMI 命令
94h SMM和多节点类命令,主要用于超节点,多节点和SMM管理板之间的板间通信 IPMI 命令
95h SMM和交换类命令,主要用于节点和带有交换平面之间的板间通信 IPMI命令

【说明】 对于常用的 OEM IPMI 命令选择 命令字,则根据具体的使用场景从上面表格中进行确认获取。

2.3 确认命令的使用约束

openUBMC 目前提供的 IPMI 命令的属性约束主要有以下几种(每个命令设计时均需要考虑):

属性约束 约束说明
优先级 当前IPMI命令的优先级,对于相同的命令,优先级越高则越优先匹配
优先级的取值由低到高依次为:Default< OEM < ODM < OBM < EndUser
角色 执行该命令时需要的角色
可选的角色有:Unspecified,Callback,User,Operator,Administrator,OEM
权限 执行该命令时需要的权限,支持配置多个权限,配置多个时则需要同时满足才可以执行
可选的权限有:UserMgmt,BasicSetting,KVMMgmt,VMMMgmt,SecurityMgmt,PowerMgmt,DiagnoseMgmt,ReadOnly,ConfigureSelf
锁定策略 该命令在BMC锁定时是否可以执行
取值有:Allow(默认),Forbidden
敏感信息 该命令的请求/响应是否包含敏感信息
取值有:true,false

说明: 如果有敏感信息,则命令在 trace 时会进行匿名化处理

2.4 确认命令的请求和响应

openUBMC 对于 IPMI 命令的请求会作为 IPMI 命令的路由依据进行建立,因此需要在请求中设计出能唯一确定该命令的字段作为路由的依据(称为路由过滤器)。

【说明】

  1. 如果单独的通过 IPMI 命令的 NetFn + Cmd 无法唯一确定 IPMI 命令,则需要在请求中 显式地明确一些字段 作为过滤器元素的一部分。
  2. 如果命令 仅BT通道,则需要在请求和响应均增加完整性校验字段,校验算法使用 CRC8

IPMI 请求和响应采用 数组 的方式进行声明,并且每个数组元素采用的是一个字段的描述对象。具体的 IPMI 命令请求和响应的结构设计可以参考 openUBMC IPMI 命令评审模板

命令评审

根据上述信息确认完毕之后进行 openUBMC IPMI 命令评审模板 填充,并且提交评审。

参考资料

  1. openUBMC IPMI 标准3. 命令:>> 前往
  2. openUBMC IPMI OEM 命令:>> 前往