【已评审】BMC新增加CAN-FD远程调用调测命令

关联issue

背景

BMC上对于支持CAN-FD总线的硬件类型, 可以通过CAN-FD总线进行跨节点通信,因此在基于可观测和可调测的目的,需要支持自定义 Debug 命令,在 mdbctl 下通过调测命令发送远程调用。具体的远程调用调测命令有以下两个方面:

  • 跨节点获取对应对象的资源协作接口属性
  • 跨节点调用对应对象的资源协作接口方法

评审点

基于上述背景,需要新增加调测自定义命令,命令主要作用就是基于 CAN-FD 总线进行远程调用。

评审点1:新增资源协作接口方法 GetProperties

path(已有): /bmc/kepler/Debug/RemoteAccess
interface(新增): bmc.kepler.Debug.RemoteAccess
cmd: remotegetprop <target> <object> <interface> <properties>

取值以及说明
方法名称 GetRemoteProperties
方法描述(Zh) 获取远端BMC的对象属性
方法描述(En) Get properties of the object at remote BMC
方法权限 ReadOnly
请求签名 sssas
请求参数 Target:签名为 s,表征要获取远端属性的BMC的标识,必填参数。由三部分子参数构成(格式:Protocol:Address/Channel),子参数具体如下:
 Protocol:通信协议,固定为:CAN/TCP
 Address:远端的BMC地址,TCP协议下是IP地址,CAN协议下是Identifier
 Channel:远端的BMC通道,TCP协议下是通信Port,CAN协议下是CAN通道
 【示例】CAN:5/0 就是通过CAN0访问编号为5的BMC
Object:签名为 s,表征要获取远端BMC的属性所在的对象名称,必填参数
Interface:签名为 s,表征获取远端属性归属资源的接口,必填参数
Properties:签名为 as,数组类型,表征获取远端属性名称列表,必填参数(注意:如果属性在远端BMC不存在则忽略)
响应签名 a{ss}
响应参数 Values:签名为 a{ss},表征远端BMC对应属性的名称和值
接口约束 发送成功之后返回具体的响应,发送失败之后会返回error引擎

评审点2:新增资源协作接口 Call

path(已有): /bmc/kepler/Debug/RemoteAccess
interface(已有): bmc.kepler.Debug.RemoteAccess
cmd: remotecall <target> <object> <interface> <method> <signature> [args]

取值以及说明
方法名称 RemoteCall
方法描述(Zh) 访问远端BMC的对象方法
方法描述(Zh) Call method of the object at remote BMC
方法权限 ReadOnly
请求签名 sssssa{ss}
请求参数 Target:签名为 s,表征要获取远端属性的BMC的标识,必填参数。由三部分子参数构成(格式:Protocol:Address/Channel),子参数具体如下:
 Protocol:通信协议,固定为:CAN/TCP
 Address:远端的BMC地址,TCP协议下是IP地址,CAN协议下是Identifier
 Channel:远端的BMC通道,TCP协议下是通信Port,CAN协议下是CAN通道
 【示例】CAN:5/0 就是通过CAN0访问编号为5的BMC
Object:签名为 s,表征要获取远端BMC的属性所在的对象名称,必填参数
Interface:签名为 s,表征调用远端方法归属资源的接口,必填参数
Method:签名为 s,表征调用远端方法的名称,必填参数
Signature:签名为 s,表征调用远端方法的请求签名,必填参数
Args:签名为 a{ss},表征调用远端方法的请求参数列表,可选参数
响应签名 s
响应参数 Response:签名为 s,表征调用远端方法的响应列表,采用json的格式输出
接口约束 当前接口为调测接口,因此权限限定为 ReadOnly;具体调用远端BMC的接口由内部进行处理,当前 Call 调用必须限制为仅操作员使用,防止权限过大导致调测接口风险

评审结论

通过,具体结论如下:

  • 同意新增调测命令 remotegetprop <target> <object> <interface> <properties>,以及对应的资源协作接口 bmc.kepler.Debug.RemoteAccess 和方法 GetRemoteProperties,用于获取远端BMC的对象属性值,方法权限为 ReadOnly,方法请求签名为 sssas,响应签名为 a{ss},具体的请求参数和属性取值说明见议题1评审材料
  • 同意新增调测命令 remotecall <target> <object> <interface> <method> <signature> [args],以及资源协作接口方法 RemoteCall,用于调用远端BMC的方法,方法权限为 ReadOnly,方法请求签名为 sssssa{ss},响应签名为 s,具体的请求参数和属性取值说明见议题2评审材料

遗留问题

问题1:命令中 service 和 path 是否可以省略掉,使用 object 名称替代
结论:可以替代,已经更新到议题材料中。

问题2:命令中 destination 和 channel 是否可以合并,并且在命令上区分出来基于 CAN-FD 还是 TCP 访问方式
结论:可以合并,使用参数 target 进行替代,已经更新到议题材料中。

问题3:命令执行过程中需要带上鉴权信息,在远端完成鉴权
结论:命令在实现中获取执行的用户信息,并且通过通信协议帧发送到远端BMC进行鉴权处理,鉴权处理完毕之后再行执行远程的调用。