【问题求助】BMC网口环回测试失败

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

问题描述

BMC网口环回装备测试失败,目前此问题在一台环境上复制概率高,另外一台正常

出现问题后,重测会失败,bmc重启后再测试会成功

出现问题的环境也是概率性失败,目前没有发现固定规律

环境信息

  • 软件版本:OpenUBMC LTS SP1

重现步骤

  1. 使能DFT,命令ipmicmd -k “f 0 30 90 20 db 07 00 01” smi 0,返回0f 31 00 90 00表示成功,否则失败

  2. 获取测试项个数,命令ipmicmd -k “f 0 30 90 40 02” smi 0 ,返回0f 31 00 90 00表示成功,否则失败,返回第二个字节为测试项个数,测试项个数为0则报失败

  3. 获取每个测试项的内容,命令ipmicmd -k “f 0 30 90 41 00 20 02 $testitem” smi 0,返回0f 31 00 90 00表示成功,否则失败

  4. 解析返回的DFT ID、DEVICE ID、测试项名字,把DFT ID为0x4a的保存下来,如果所有的测试项DFT ID都不为0x4a则报错

  5. 启动DFT ID为0x4a的测试项测试,命令ipmicmd -k “f 0 30 90 42 00 20 02 01 $obtain_testitem” smi 0

期望结果

DFT ID为0x4a的测试项成功

实际结果

DFT ID为0x4a的测试项失败

尝试过的解决方案

之前这个帖子讨论过类似的问题,不过没有结论,目前有类似的问题出现,需要再看下

分析结论

  1. 装备持续测试了差不多一个小时 :问题是问了装备的人,正常调用了一次 ,这里有就个问题,闭源会不会持续测试1个小时的环回

  1. 出问题失败的时候,和log: bmc_core ERROR: net_dft.c(189): recv timout failed! 对齐,一开始只是有 net_dft.c(197): [self_loop_test:197]recv failed! errno:2, read_length:60,但不会失败,timeout 后,用例开始失败

3. 下面是正常日志:

答案内容由AI生成,仅供参考:

总结

  • 直接现象:DFT ID 0x4A(MGMT Test)在 eth2 上反复执行并失败。
  • 日志关键线索:自环测试启动时 MAC 地址为空
  • 最可能的根因:物理环回连接问题或网口 MAC 初始化失败。
  • 优先排查方向:1)环回头是否插好;2)bmc_network 是否成功为 eth2 分配 MAC;3)CSR 配置中 DftEth 测试项的参数是否匹配。

如果上述排查后问题仍然存在,建议完整提供以下信息以便进一步分析:

  • bmc_network 的完整启动日志(从系统上电到测试开始);
  • 环回头的型号及连接照片;
  • DFT 模式使能后的全部测试项列表(ipmicmd -k "f 0 30 90 41 00 20 02 ..." 的输出)。
点击此处查看详细分析解答

根据您的问题描述和提供的日志信息,可以确认 BMC网口环回测试失败 这一现象,失败项为 DFT ID 为 0x4A(对应日志中的 Id:74,测试项名为 MGMT Test)。以下基于上下文中的知识图谱和文档内容进行分析和诊断建议。


日志关键信息分析

从您提供的日志(文档片段 1)中可提取以下重点:

时间 日志内容 关键信息
02:07:32.357349 dft eth test: Id:74 Slot:1 DeviceNum:0 [repeated 33 times] 测试项 Id:74(即 0x4A)重复执行 33 次
02:07:32.358138 dft eth test: eth_name user eth2 测试发生在 eth2 网口上
02:07:32.358547 dft eth start: eth_name:eth2 eth_mac:f0:c8:b5:ac:f0:87 test_type:0 测试启动时使用的 MAC 地址为 f0:c8:b5:ac:f0:87
02:07:32.359738 bmc self loop test start mac is: ,eth is eth2 MAC 地址为空mac is: 后无内容)
02:07:32.360335 test status: Testing, test result:Failed 最终测试结果为 Failed

结论:测试过程中出现了 MAC 地址为空的情况,这可能是导致环回测试失败的直接原因。自环测试要求网口能够正确识别并回环发送/接收数据包,MAC 地址缺失会使底层通信无法正常建立。


可能的根本原因

根据上下文中的实体关系与社区专家建议,以下因素需重点排查:

1. 物理环回连接未正确建立

  • 知识图谱中 guanmaoning(社区专家)曾建议 验证物理环回设置guanmaoning suggests verifying physical loopback setup)。
  • 环回测试需要专用的环回头或网线将发送端和接收端短接,若物理连接松动或环回头损坏,测试必然失败。

2. MAC 地址初始化异常

  • 日志显示 bmc self loop test start mac is: ,eth is eth2,MAC 地址为空。
  • 知识图谱中 eth2 在正常状态下有明确的 MAC 地址(如 00:00:00:00:00:0120:22:01:18:4c:54),而当前测试中 MAC 为空,说明:
    • 可能是 网口设备驱动未正确注册
    • DFT 测试前的网络初始化步骤未完成(例如 bmc_network 组件未成功为 eth2 分配 MAC)。
  • 您使用的软件版本为 OpenUBMC LTS SP1,建议检查该版本的 bmc_network 组件(版本 1.70.42/1.110.45)的启动日志,确认网络接口初始化是否完整。

3. DFT 测试流程中的逻辑缺陷

  • 重现步骤中要求 使能 DFT获取测试项个数,日志显示成功获取了 25 个测试项(get dft item type = 2 num is 25),说明 DFT 模式已正确进入。
  • 但测试启动命令中使用了 $obtain_testitem 参数,若该参数未正确解析或传入的测试项 ID 与固件期望不符,也可能导致启动失败。日志中 Id:74 与期望的 0x4A 一致,因此 ID 匹配没有问题。

4. 软件版本间的兼容性问题

  • 知识图谱中提及 openUBMC 不包含 testchip 命令(openUBMC does not include the testchip command that was previously used in iBMC v2),而您的测试步骤全部使用 ipmicmd 命令,理论上无冲突。
  • 但请注意:OpenUBMC LTS SP1 可能对 DFT 测试项有特定的 CSR 配置要求(如 Dft3V3Vlot 类中的 IdSlotDeviceNum 等属性),需确认 eth2 对应的测试项 CSR 配置是否正确。

诊断建议(基于社区专家 huangzhiyu 的建议)

  1. 使用 mdbctl 追踪端点数据
    huangzhiyu 曾建议使用 mdbctl 来查看端点对象的状态。您可以运行:

    mdbctl lsprop /bmc/kepler/Managers/1/EthernetInterfaces/EthGroup/1
    

    检查 LoopbackIpv4AddrLoopbackIpv6Addr 是否已正确设置(根据文档片段 8,新增的资源协作接口属性)。

  2. 使用 tracemctp 诊断 MCTP 通信
    若您的环境涉及 MCTP 传输,huangzhiyu 推荐使用 tracemctp 抓取底层报文,确认环回数据是否在 PHY 层被正确回环。

  3. 验证物理环回头的连接
    按照 guanmaoning 的建议,检查环回头是否牢固插入 eth2 口,并确认环回头型号与您的硬件兼容(例如 1GE 或 10GE 环回头可能不同)。

  4. 检查 MAC 地址初始化日志
    查看 bmc_network 组件的日志(/var/log/bmc_network 或通过 journalctl -u bmc.kepler.bmc_network),确认 eth2 的 MAC 地址是否在接口启动时被正确设置。若发现 MAC 一直为空,可能需要检查 general_hardware 组件中网卡驱动的注册流程。


总结

  • 直接现象:DFT ID 0x4A(MGMT Test)在 eth2 上反复执行并失败。
  • 日志关键线索:自环测试启动时 MAC 地址为空
  • 最可能的根因:物理环回连接问题或网口 MAC 初始化失败。
  • 优先排查方向:1)环回头是否插好;2)bmc_network 是否成功为 eth2 分配 MAC;3)CSR 配置中 DftEth 测试项的参数是否匹配。

如果上述排查后问题仍然存在,建议完整提供以下信息以便进一步分析:

  • bmc_network 的完整启动日志(从系统上电到测试开始);
  • 环回头的型号及连接照片;
  • DFT 模式使能后的全部测试项列表(ipmicmd -k "f 0 30 90 41 00 20 02 ..." 的输出)。

和另一个帖子一样,可能是测试的时候流量大或网络硬件驱动原因导致帧被截断或覆盖,只收到部分数据。可以排除软件问题。