1 设计原则
- IPMI 命令目前演进性不好,并且在运维场景中受限较多(尤其是 OEM IPMI 命令),因此总体上采用 非必需则不新增 原则(即:设计时要反问为啥一定要 IPMI 命令才可以?一定要新增 IPMI 命令?)
- 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 命令的路由依据进行建立,因此需要在请求中设计出能唯一确定该命令的字段作为路由的依据(称为路由过滤器)。
【说明】
- 如果单独的通过 IPMI 命令的 NetFn + Cmd 无法唯一确定 IPMI 命令,则需要在请求中 显式地明确一些字段 作为过滤器元素的一部分。
- 如果命令 仅BT通道,则需要在请求和响应均增加完整性校验字段,校验算法使用 CRC8
IPMI 请求和响应采用 数组 的方式进行声明,并且每个数组元素采用的是一个字段的描述对象。具体的 IPMI 命令请求和响应的结构设计可以参考 openUBMC IPMI 命令评审模板。
命令评审
根据上述信息确认完毕之后进行 openUBMC IPMI 命令评审模板 填充,并且提交评审。