关联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的BMCObject:签名为 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的BMCObject:签名为 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进行鉴权处理,鉴权处理完毕之后再行执行远程的调用。