IPMI Core 能力

概述

IPMI Core 功能模块提供 IPMI 核心管理能力。

对象设计

IpmiCore

Class Name: IpmiCore Object Path: /bmc/kepler/IpmiCore

IpmiCore 对象是 IPMI 核心管理对象。

Interfaces

Interface Description
bmc.kepler.IpmiCore IPMI 核心接口

Methods (bmc.kepler.IpmiCore)

Method Parameters Return Description
Request uint8 chan_type, uint8 instance, uint8 netfn, uint8 lun, uint8 cmd, vector<uint8> payload tuple<uint8, vector<uint8>> 发送 IPMI 请求并获取响应,自动构建标准 IPMI 包格式
Route vector<uint8> req, vector<uint8> ctx vector<uint8> 路由标准 IPMI 格式请求,参数 req 为完整的 IPMI 消息包
GetIPMIChannel uint8 chan_id vector<dict> 获取通道信息,当前主要提供给标准命令 0x06 0x42 获取指定通道编号的通道信息(同时预留获取所有通道信息的能力)
SetHostPrivilegeLimited uint8 system_id, vector<string> privilege_list tuple<bool, string> 设置指定系统的受限权限列表,返回设置结果和错误信息
SetChannelAccesses string chan_type, string access_role void 设置指定通道类型的访问权限角色

Properties (bmc.kepler.IpmiCore)

Property Type Default Description
ChannelAccesses map<string, string> {} 通道访问权限映射,key 为通道类型(如 "ICMB"、"IPMB"、"SMS"),value 为权限角色(如 "Administrator"、"Operator"、"User"、"NoAccess")

Request 方法

功能说明

Request 方法用于向指定通道发送 IPMI 请求并获取响应。该方法自动构建标准 IPMI 包格式,包括地址、校验和等字段,简化了上层调用者的使用。

参数说明

Parameter Type Description
chan_type uint8 通道类型(参考 channel_type 枚举),如 ct_me、ct_host 等
instance uint8 通道实例编号
netfn uint8 IPMI 网络号
lun uint8 IPMI 逻辑单元,通常为 0x00
cmd uint8 IPMI 命令字
payload vector<uint8> IPMI 命令请求数据

返回值说明

返回值为 tuple<uint8, vector<uint8>>:

  • 第一个元素:Completion Code(完成码)
  • 第二个元素:响应数据(不含 Completion Code)

常见 Completion Code:

  • 0x00:成功
  • 0xC1:无效命令(通道不存在时返回)
  • 0xCE:响应错误(请求超时或重试失败时返回)

IPMI 包格式

Request 方法使用 IPMI_PKG 格式构建标准 IPMI 消息包:

IPMI_PKG 格式定义:
<<DestAddr:8, DestLun:2, DestNetFn:6, ChkSum1:8, SrcAddr:8, SrcLun:2, SrcSeq:6, Cmd:8, Payload:/string>>

字段说明:
- DestAddr (8 bits):    目标地址
- DestLun (2 bits):     目标逻辑单元号
- DestNetFn (6 bits):   目标 NetFn
- ChkSum1 (8 bits):     第一校验和(零校验)
- SrcAddr (8 bits):     源地址
- SrcLun (2 bits):      源逻辑单元号
- SrcSeq (6 bits):      源序列号
- Cmd (8 bits):         命令号
- Payload (variable):   请求数据 + 第二校验和

Route 方法

功能说明

Route 方法用于路由标准 IPMI 格式的请求。Route 方法的参数 req 已经是完整的标准 IPMI 消息包,无需额外构建。

参数说明

Parameter Type Description
req vector<uint8> 标准 IPMI 格式请求数据,格式参考 IPMI_PKG 定义
ctx vector<uint8> 上下文数据

返回值说明

返回值为 vector<uint8>:完整的 IPMI 响应包(包含 Completion Code 和响应数据)。

使用场景

Route 方法适用于以下场景:

  1. IPMI 消息透传:上层已构建好标准 IPMI 包,无需重新解析和构建
  2. 消息转发:从某个通道接收的 IPMI 消息需要转发到其他模块处理

GetIPMIChannel 方法

功能说明

GetIPMIChannel 方法用于获取 IPMI 通道信息。该方法主要用于支持 IPMI 标准命令 Get Channel Info (0x06 0x42),同时预留获取所有通道信息的能力。

参数说明

Parameter Type Description
chan_id uint8 通道编号,取值 0-254 时返回指定通道信息,取值 255 时返回所有通道信息

返回值说明

返回值为 vector<dict>,每个 dict 包含以下字段:

Field Type Description
InternalNumber uint8 通道内部编号(ChannelID)
ExternalNumber uint8 通道外部编号(通过通道映射转换)
ProtocolType uint8 协议类型
MediumType uint8 介质类型
ChannelType uint8 通道类型
Instance uint8 通道实例编号

特殊行为说明

  1. 通道编号为 255:返回所有已配置的通道信息列表
  2. 通道不存在:返回包含默认通道信息的单元素列表(所有字段值为 0)

SetHostPrivilegeLimited 方法

功能说明

SetHostPrivilegeLimited 方法用于设置指定系统的受限权限。通过限制某些系统的权限,可以控制不同系统对 BMC 的访问能力。

参数说明

Parameter Type Description
system_id string 系统编号字符串(取值范围 "0"-"63")
privilege_list vector<string> 受限权限列表,每个元素为权限名称(如 "ReadOnly"、"DiagnoseMgmt" 等)

返回值说明

返回值为 tuple<bool, string>:

  • 第一个元素:设置是否成功
  • 第二个元素:错误信息(成功时为空字符串)

支持的权限类型

Privilege Description
ReadOnly 只读权限
DiagnoseMgmt 诊断管理权限
SecurityMgmt 安全管理权限
BasicSetting 基础设置权限
UserMgmt 用户管理权限
PowerMgmt 电源管理权限
VMMMgmt 虚拟机管理权限
KVMMgmt KVM管理权限
ConfigureSelf 自配置权限

使用场景

  1. 限制特定权限:传入权限列表限制系统无法使用指定权限
  2. 清除系统权限限制:传入空的 privilege_list 清除指定系统的权限限制

SetChannelAccesses 方法

功能说明

SetChannelAccesses 方法用于设置指定通道类型的访问权限角色。不同角色对应不同的权限集合。

参数说明

Parameter Type Description
chan_type string 通道类型(支持 "ICMB"、"IPMB"、"SMS")
access_role string 权限角色(支持 "Administrator"、"Operator"、"User"、"NoAccess")

返回值说明

无返回值。

支持的通道类型

Channel Type Default Role Description
ICMB Administrator ICMB通道(IPMB over Eth 通道)
IPMB Operator IPMB通道
SMS Operator SMS通道(EDMA 通道)

支持的角色类型

Role Privileges Description
Administrator 所有权限 管理员角色,拥有最高权限
Operator ReadOnly, BasicSetting, PowerMgmt, VMMMgmt, KVMMgmt, ConfigureSelf 操作员角色
User ReadOnly, ConfigureSelf 用户角色,基本权限
NoAccess 无 无访问权限

ChannelAccesses 属性

功能说明

ChannelAccesses 属性存储了各通道类型的访问权限配置。该属性在对象初始化时会持久化加载,修改后会自动持久化保存。

数据结构

属性类型为 map<string, string>,其中:

  • Key:通道类型字符串(如 "ICMB"、"IPMB"、"SMS")
  • Value:权限角色字符串(如 "Administrator"、"Operator"、"User"、"NoAccess")
{
  "ICMB": "Administrator",
  "IPMB": "Operator",
  "SMS": "Operator"
}