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 方法适用于以下场景:
- IPMI 消息透传:上层已构建好标准 IPMI 包,无需重新解析和构建
- 消息转发:从某个通道接收的 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 |
通道实例编号 |
特殊行为说明
- 通道编号为 255:返回所有已配置的通道信息列表
- 通道不存在:返回包含默认通道信息的单元素列表(所有字段值为 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 |
自配置权限 |
使用场景
- 限制特定权限:传入权限列表限制系统无法使用指定权限
- 清除系统权限限制:传入空的
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"
}