新增资源协作接口MctpCmd

评审点1:新增资源协作接口 bmc.kepler.Systems.Mctp.MctpCmd

接口描述

本接口用于让业务组件把「自己能响应的一条 MCTP 上层协议命令」发布到资源树。业务组件为每一条命令创建一个对象、实现本接口并挂到命令路径下;mctpd 接收主动部件(网卡)主动发起的 MCTP over PCIe 请求,解析出命令三元组(协议类型、协议子类型、命令字)后按对象路径路由到对应命令对象,调用其 GetResponse 方法获取响应数据,再由 mctpd 组 MCTP 报文回发给请求方。

新增属性

属性名称 签名 只读 变化通知 属性描述 访问权限 属性来源 持久化类型 易变属性
ServiceName s True false 实现本命令的业务组件模块名,如 “storage”;用于调用身份校验、冲突排查与日志定位。 Read: ReadOnly 组件注册时动态设置,非 CSR 无 false
MessageType y True false MCTP 消息类型(协议类型),对应对象路径中的 :MsgType 层级。与 SubType、CommandCode 共同唯一确定本对象承载的命令,三元组即命令身份。取值须在白名单内(见下表),声明白名单外的取值即拒绝整个对象 Read: ReadOnly 组件注册时动态设置,非 CSR 无 false
SubType y True false 上层协议子类型,对应对象路径中的 :SubType 层级(两位大写十六进制,补零)。PLDM 为报文类型 PldmType;无子类型的协议(SPDM、VDPCI)填 0,路径中写作 00 Read: ReadOnly 组件注册时动态设置,非 CSR 无 false
CommandCode y True false 命令字,对应对象路径中的 :CommandCode 层级(两位大写十六进制,补零),取协议自身的命令标识:PLDM 取报文头中的命令代码 CommandCode、SPDM 取请求响应码 RequestResponseCode、VDPCI 取位于报文体的厂商定义命令字。本字段是命令身份的最后一段,与 MessageType、SubType 共同唯一确定一条命令 Read: ReadOnly 组件注册时动态设置,非 CSR 无 false

对象创建后取值固定,不产生变化通知。业务如需修改,须注销原对象后按新取值重新注册。

属性 MessageType 的白名单取值

取值 协议 是否开放注册
0x00 MCTP Control 否。由 mctpd 框架内建响应,声明该值即拒绝整个对象
0x01 PLDM 是
0x05 SPDM 否
0x7E VDPCI 否

新增方法

方法名称 请求签名 请求参数描述 响应签名 响应参数描述 方法描述 访问权限
GetResponse ay Data:对端请求报文体(U8[]),已剥离 MCTP 消息头与上层协议报文头。长度与字段约束由业务按命令定义自行校验 ayy Data:响应报文体(U8[]),不含任何协议头,由 mctpd 负责补齐 MCTP 头与上层报文头
CompletionCode:完成码(U8),0 表示成功;PLDM 协议下直接作为响应完成码,其余协议含义由各协议层解释
mctpd 解析出入站请求的命令三元组、按对象路径路由到对应命令对象后,回调本方法获取响应数据 不涉及(预期调用方为 mctpd,非用户会话入口)

新增信号

信号名称 签名 参数描述 信号描述
无 - - 本接口采用同步拉取模型,由 mctpd 调用方法直接取回响应,无需信号。业务组件的上下线通过资源协作框架标准的 InterfacesAdded、InterfacesRemoved 信号表达,mctpd 据此维护命令表

新增接口影响

对已有资源协作路径无影响。

评审点2:新增资源协作路径 /bmc/kepler/Systems/:SystemId/Mctp/Cmds/:MsgType/:SubType/:CommandCode

路径声明

Cmds.json:/bmc/kepler/Systems/:SystemId/Mctp/Cmds/:MsgType/:SubType/:CommandCode,接口为 bmc.kepler.Systems.Mctp.MctpCmd。

路径描述

MCTP 命令响应者的注册路径。/Mctp/Cmds 下按命令三元组逐层展开,每个叶子对象承载且仅承载一条命令。

实现接口

实现接口 实现接口描述 CSR 配置影响 持久化影响 其他影响
bmc.kepler.Systems.Mctp.MctpCmd 实现 ServiceName、MessageType、SubType、CommandCode 四个只读属性与 GetResponse 方法,提供「MCTP 单命令响应者注册」能力:业务组件为每条命令注册一个对象后,mctpd 即可接收对端主动请求并回调其 GetResponse 方法 不涉及。属性非 CSR 配置项,由注册组件通过 mdb.register_object 动态设置 不涉及。无持久化表,无兼容性问题;重启后由业务组件重新注册,命令表由 mctpd 重建 不涉及

路径示例

命令 路径
PLDM Base GetTID /bmc/kepler/Systems/1/Mctp/Cmds/01/00/02
PLDM BIOS GetDateTime /bmc/kepler/Systems/1/Mctp/Cmds/01/03/0C