【已评审】支持双主机配置管理和资源管理资源协作接口

背景

新需求:当前支持2路pcie对接不同主机,如双主机场景pcie0对接主机0,pcie1对接主机1,不同主机上的资源(黑匣子、usb、kvm图像显示)需要进行区分管理

在双主机场景下,KVM显示对应主机图像。由于当前芯片图像通道只有一路,因此只能同时支持显示一个主机的通道。针对KVM、VNC和录像截屏特性,需要提供图像显示通道切换和编号查询接口,支持双主机场景功能。

当前差距:

1、当前黑匣子、USB功能的资源协作接口都是按Managers的维度去实现的。当BMC对接多个主机的场景,无法通过不同的资源协作对象去管理黑匣子、USB的功能。

2、目前无资源协作接口用于判断当前BMC对接的主机情况(如对接的主机数量,通过哪一路pcie进行对接的,不同场景下底层驱动功能实现可能存在差异,如MCTP功能,Kvm功能,依赖主机配置情况)

3、需要提供图像显示通道切换和编号查询接口给KVM模块选择不同主机的图像显示
场景:
1、单主机模式

2、双主机模式(pcie0和pcie1分别对接1个主机)

3、双主机模式(只有pcie0对接主机)

关联ISSUE

支持双主机配置管理和资源管理资源协作接口

新增双主机场景下KVM图像切换和查询接口

整体方案

1、黑匣子和USB功能支持双主机:

因为当前黑匣子功能和USB功能都是按Managers定义的资源协作路径和资源协作接口,未按System维度进行划分,无法双主机扩展场景,因此需要新增path:/bmc/kepler/Systems/:SystemId/…来实现双主机功能的支持。同时在新增的path路径下,新增Systems下的资源协作接口,接口功能与原Managers下的接口功能保持一致

2、新增单双主机资源协作属性

为提供给其他模块如MCTP、Kvm用于判断当前单双主机环境配置,需用新增资源协作方法。由于单双主机配置与环境变量配置的pcie模式有关,因此与环境变量放在同一接口下

path:/bmc/kepler/Managers/:Id/SOC/Env(已有)

interface:bmc.kepler.Managers.SOC.Env(已有)

新增属性:SystemIds(数组形式,代表当前BMC管理的主机ID列表)

3. 图像通道查询、切换接口上层应用场景

  • WEBUI KVM入口支持分别连接到两个主机,KVM界面需要显示当前图像通道编号,并支持图像通道切换
  • 录像截屏需要区分不同主机进行管理,接口提供图像通道切换功能,支持用户对另一个主机进行录像截屏
  • 当前业界通用的VNC客户端工具连接时无法指定主机,接口支持用户通过VNC连接到不同主机

1、接口实现
芯片平台提供图像管理接口,可以根据特定访问命令字通过ioctl系统调用发送命令
2、兼容性
考虑兼容性,平台版本不支持以上方法时,返回已有自定义错误“OperationNotSupport”

评审点

评审点一、新增path: “/bmc/kepler/Systems/:SystemId/SOC/BlackBox/:Id”,在该path下新增interface: bmc.kepler.Systems.SOC.BlackBox,该接口下实现与bmc.kepler.Managers.SOC.BlackBox保持 一致

新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/BMA/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.Ums,该接口下实现与bmc.kepler.Managers.UsbDevice.Ums保持一致

新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/Cdrom/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.Cdrom,该接口下实现与bmc.kepler.Managers.UsbDevice.Cdrom保持一致

新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/KeyMouse/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.KeyMouse,该接口下实现与bmc.kepler.Managers.UsbDevice.KeyMouse保持一致

新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/LCD/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.LCD,该接口下实现与bmc.kepler.Managers.UsbDevice.LCD保持一致

新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/SP/:Id”,在该path下实现已新增的interface: bmc.kepler.Systems.UsbDevice.Ums

评审点三、在path: "/bmc/kepler/Managers/:Id/SOC/Env”下的interface: bmc.kepler.Managers.SOC.Env中新增属性SystemIds

评审点四、在path: "/bmc/kepler/Managers/:Id/SOC/Env”下新增interface: bmc.kepler.Managers.SOC.GraphicDisplay,且在该interface下新增方法SetSystemId和GetSystemId

详细描述

1、新增双主机管理的黑匣子和USB的资源协作路径和资源协作接口

在/bmc/kepler/Systems/:SystemId下新增和/bmc/kepler/Managers/:ManagerId下一致的资源协作路径,并在bmc.kepler.Systems下新增与bmc.kepler.Managers下一致的资源协作接口,资源协作接口的实现与当前Managers下的接口保持一致

功能 当前现状 变更点
黑匣子 path: /bmc/kepler/Managers/:ManagerId/SOC/BlackBox
interface: bmc.kepler.Managers.SOC.BlackBox
新增path: /bmc/kepler/Systems/:SystemId/SOC/BlackBox/:Id
新增interface: bmc.kepler.Systems.SOC.BlackBox
BMA U盘 path: /bmc/kepler/Managers/:Id/UsbDevices/BMA
interface: bmc.kepler.Managers.UsbDevice.Ums
新增path: /bmc/kepler/Systems/:SystemId/UsbDevices/BMA/:Id
新增interface: bmc.kepler.Systems.UsbDevice.Ums
SP U盘 path: /bmc/kepler/Managers/:Id/UsbDevices/SP
interface: bmc.kepler.Managers.UsbDevice.Ums
新增path: /bmc/kepler/Systems/:SystemId/UsbDevices/SP/:Id
新增interface: bmc.kepler.Systems.UsbDevice.Ums
光驱 path: /bmc/kepler/Managers/:Id/UsbDevices/Cdrom
interface: bmc.kepler.Managers.UsbDevice.Cdrom
新增path: /bmc/kepler/Systems/:SystemId/UsbDevices/Cdrom/:Id
新增interface: bmc.kepler.Systems.UsbDevice.Cdrom
LCD path: /bmc/kepler/Managers/:Id/UsbDevices/LCD
interface: bmc.kepler.Managers.UsbDevice.LCD
新增path: /bmc/kepler/Systems/:SystemId/UsbDevices/LCD/:Id
新增interface: bmc.kepler.Systems.UsbDevice.LCD
键鼠 path: /bmc/kepler/Managers/:Id/UsbDevices/KeyMouse
interface: bmc.kepler.Managers.UsbDevice.KeyMouse
新增path: /bmc/kepler/Systems/:SystemId/UsbDevices/KeyMouse/:Id
新增interface: bmc.kepler.Systems.UsbDevice.KeyMouse

2、新增单双主机管理的资源协作属性

资源path:/bmc/kepler/Managers/:ManagerId/SOC/Env(已有)
资源interface:bmc.kepler.Managers.SOC.Env(已有)
变化类型:新增属性
应用场景:MCTP和Kvm单双主机场景下用户获取当前主机配置,用于根据不同主机场景进行驱动功能初始化和Kvm功能显示
持久化类型:不涉及
操作权限:ReadOnly

属性名称变化类型签名读写&权限持久化接口说明来源取值范围接口约束
SystemIds新增属性ayReadOnlyNA当前BMC管理的主机ID列表默认值[1]。
单主机场景:[1]
双主机场景:[1,2]或[1]
NA

3、新增图像显示通道切换和查询接口

资源path:“/bmc/kepler/Managers/:ManagerId/SOC/Env” (已有)
资源interface:“bmc.kepler.Managers.SOC.GraphicDisplay”(新增)
变化类型:新增方法;新增属性
应用场景:双主机场景下KVM图像显示通道切换和编号查询
持久化类型:不涉及
操作权限:KVMMgmt/ReadOnly

方法名称 变化类型 签名 读写&权限 持久化 变化通知 接口说明 接口约束
SetSystemId 新增方法 请求签名:u
响应签名:NA
KVMMgmt NA NA
 “req”: {
“SystemId”: {
“baseType”: “U32”,
“description”: “主机ID”
}
},
“rsp”: {},
“description”: “设置图像输出显示的主机ID”
NA
GetSystemId 新增方法 请求签名:NA
响应签名:u
ReadOnly NA NA
 “req”: {},
“rsp”: {
“SystemId”: {
“baseType”: “U32”,
“description”: “主机ID”
}
},
“description”: “查询当前图像输出显示的主机ID”
NA

评审结论

评审点一、同意新增path: “/bmc/kepler/Systems/:SystemId/SOC/BlackBox/:Id”,在该path下新增interface: bmc.kepler.Systems.SOC.BlackBox

同意新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/BMA/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.Ums

同意新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/Cdrom/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.Cdrom

同意新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/KeyMouse/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.KeyMouse

同意新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/LCD/:Id”,在该path下新增interface: bmc.kepler.Systems.UsbDevice.LCD

同意新增path: “/bmc/kepler/Systems/:SystemId/UsbDevices/SP/:Id”,在该path下实现已新增的interface: bmc.kepler.Systems.UsbDevice.Ums

评审点二、同意在path: "/bmc/kepler/Managers/:Id/SOC/Env”下的interface: bmc.kepler.Managers.SOC.Env中新增属性SystemIds,签名为ay,表示当前BMC管理的主机ID列表

评审点三、同意在path: "/bmc/kepler/Managers/:Id/SOC/Env”下新增interface: bmc.kepler.Managers.SOC.GraphicDisplay,且在该interface下新增方法

  • SetSystemId:设置图像输出显示的主机ID,请求签名为u,请求参数为主机ID,无响应签名,权限为KVMMgmt
  • GetSystemId:查询当前图像输出显示的主机ID,无请求签名,响应签名为u,响应参数为主机ID,权限为ReadOnly

遗留问题

1、软驱不使用,接口不需要新增
结论:不新增/bmc/kepler/Systems/:SystemId/UsbDevices/Floppy/:Id和interface:bmc.kepler.Systems.UsbDevice.Floppy。

2、Channels属性确认是否实际存在这种场景,不存在时则不进行新增
结论:双主机模式下对接的主机的GPU功能都是启用的,不存在主机GPU功能关闭的场景,无需新增该属性来判断。

3、GetChannel名称变更成GetSystemId,SetChannel名称变更成SetSystemId
结论:已刷新