宝德发现社区版本 NCSI 带外管理计算 payload length 与 NCSI 规范不符

【影响】
        当前 OpenUBMC NCSI 带外管理对 payload length 的计算规则会导致所有网卡厂商涉及 padding 的 OEM 命令都无法通信。

【分析过程】
        在进行 Intel E810 网卡适配 NCSI OEM 命令过程中,尝试在 E810.lua 中添加 response 的 data 长度、data 按单个字节解析的打印出 response 中的 data 长度为正确的 12 字节,且能够解析到 Intel 的 ManufacturerID: 0 0 1 87 (0x00157) 和 OEM 命令字: 75 (0x4B), 说明 MCTP 报文发通:


但 E810 网卡返回响应码 01 和原因码 05,数据获取失败,参考 NCSI 标准文档:

  1. 响应码01:命令错误,无法处理或未能正确完成可用命令
  2. 原因码05:命令给出的 payload length 不正确


根据 NCSI 标准定义 payload length 如下,长度不包含 padding:


但当前 OpenUBMC 的 NCSI 带外管理 payload length 是直接计算 request 里给出的 data 的长度作为 payload length,没有考虑到有些厂商 NCSI 命令有 padding 填充数据,不符合 NCSI 规范。

【解决方案】

  • 因涉及闭源组件,宝德无法修改,已向 hardware SIG 组反馈并同步修改方案。

评审结论如下:

3 个赞

openubmc有没有类似V2的mnsend模拟测试命令呢?