vpd中应当动态判断nvme multiRecord area

// 此模板仅供参考,如果不适用可以修改

问题描述

在阅读bmc代码中关于vpd的记录时,文档nvme_mi_vpd.cpp中获取vpd中nvme multiRecord area的长度认为是固定长度=0x40;

代码中宏定义:

#define NVME_MULTIRECORD_FIXED_LEN 0x40

代码中使用

// 检查第一个记录是否是 MULTIRECORD_TYPE_NVME (0x0b)
if (first_record_type == MULTIRECORD_TYPE_NVME) {
    // 如果第一个记录是 NVME 类型,检查下一个记录(偏移 64 字节)是否是 PORT 类型
    uint8_t second_record_offset = record_offset + NVME_MULTIRECORD_FIXED_LEN;

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等]

重现步骤

当vpd中的mutirecord area长度不是0x40的时候,后面寻找容量信息将会失败

期望结果

按照vpd的定义,应该同时支持0x40和0x25 两种情况

实际结果

bmc上无法显示容量信息

尝试过的解决方案

代码中应该先读取record length 长度,然后再加上header的长度5 bytes,然后得到nvme multirecord area的长度值,而不是固定的宏定义