背景
新需求:当前支持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
整体方案
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 | 新增属性 | ay | ReadOnly | NA | 当前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”: { |
NA | |
| GetSystemId | 新增方法 | 请求签名:NA 响应签名:u |
ReadOnly | NA | NA | “req”: {}, |
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
结论:已刷新
