【已评审】多外出网口Channel映射资源协作接口

issue 链接

支持不同外出Channel的映射关系 mdb_interface #183

评审背景

前置评审

需求

多个产业和客户有诉求,需要BMC提供多个外出网口来对接不同的网管或者处理不同通道的外来的管理业务请求,其中就包括使用 IPMI over LAN 进行BMC的管理,对 BMC 支持的对外 LAN 的Channel 要求有多个

现状

目前BMC仅有一个对外网口,因此对外提供的 LAN 通道的 Channel Number 也固定为1,不支持其他的对外 Channel

差距分析

  • 根据 IPMI 规范分析,对于 Channel 的定义上,可以在 [1, 11] 的区间内可以根据厂商自行定义,没有限定说必须通道和 Channel Number 绑定
  • 根据 BMC 当前的实现,对于外部 LAN 通道的实现已经有两个通道预留,分解为 Channel Number 1/2;当前 BMC 是固定使用1,对于不同客户或者产业的诉求,在通道 2 上大概率存在定制的情况(如某客户要求使用 Channel 8)

解决方案

根据BMC的现状以及后续产业/客户的诉求,采用 “适配器” 方案进行处理,即:

  • 对于客户面可见的通道是客户定制的通道,如 Channel 8
  • 对于BMC内部处理的通道是BMC预置的通道,如 Channel 2
  • 在这两个通道之间建立 配置映射 关系,并且该关于在资源协作接口上暴露,提供给下游进行对应通道切换时或者定制时的业务处理查询和感知
  • 冲突解决: 如果客户定制的 Channel X 和当前 BMC 已经内部预置的通道发生了冲突,则优先保障客户定制,并且BMC内部的通道以及通道上的业务使用进行平滑迁移(自行建立一个映射,映射到没有使用的一个通道上)然后继续提供服务

大致方案流程如下:

sequenceDiagram
    participant 用户
    participant RMCP
    participant IPMI管理
    participant 业务处理

    用户->>+RMCP: IPMI请求 (ipmitool -I lan/lanplus)
    RMCP->>+RMCP: 获取 LAN 的IP,以及通道号
    RMCP->>+IPMI管理: 获取 通道号 映射规则,判断是否存在映射
    IPMI管理-->>-RMCP: 返回实时通道映射关系数据
    RMCP->>+业务处理: 更新上下文通道号,并且发送请求
    业务处理-->>-RMCP: 返回处理结果响应数据
    RMCP-->>-用户: IPMI响应 (数据)

评审点

评审点1:新增资源协作接口,用于表征对外多网口的不同Channel映射关系

path(新增): /bmc/kepler/IpmiService/Channels/:Id
interface(新增): bmc.kepler.IpmiService.ChannelNumberMapping
新增属性如下:

属性名称 签名 权限 持久化 变化通知 属性值来源 说明
External y R:ReadOnly
W:不支持
掉电 true 业务更新 对外的通道号,取值范围:[1, 11]
Internal y R:ReadOnly
W:不支持
掉电 false 业务更新 对内的通道号,取值范围:[1, 11]

评审结论

通过,具体结论如下:

  • 同意新增资源 /bmc/kepler/IpmiService/Channels/:Id 和资源协作接口 bmc.kepler.IpmiService.ChannelNumberMapping
  • 同意在资源协作接口 bmc.kepler.IpmiService.ChannelNumberMapping 下新增属性 ExternalInternal,分别表征通道映射的对外和对内的通道号,属性签名均为 y,取值范围均为 [1, 11],并且均需要掉电持久化,均为只读属性;其中属性 External 需要发送变更通知,以便其它组件感知对外通道发生变化