【问题求助】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的测试项失败

分析结论

日志提示如下,涉及闭源

2026-04-09 02:07:19.998636 manufacture NOTICE: get_test_item_count.lua(24): get dft item type = 2 num is 25
2026-04-09 02:07:32.357349 bmc_network NOTICE: manufacture_dft.lua(127): dft eth test: Id:74 Slot:1 DeviceNum:0 [repeated 33 times in 362s from 2026-04-09 02:01:30.525016 to 2026-04-09 02:07:32.357349]
2026-04-09 02:07:32.358138 bmc_network NOTICE: manufacture_dft.lua(142): dft eth test: eth_name user eth2 [repeated 33 times in 362s from 2026-04-09 02:01:30.525703 to 2026-04-09 02:07:32.358138]
2026-04-09 02:07:32.358547 bmc_network NOTICE: manufacture_dft.lua(267): dft eth start: eth_name:eth2 eth_mac:f0:c8:b5:ac:f0:87 test_type:0 [repeated 33 times in 362s from 2026-04-09 02:01:30.526192 to 2026-04-09 02:07:32.358547]
2026-04-09 02:07:32.359738 bmc_network NOTICE: manufacture_dft.lua(224): bmc self loop test start mac is: ,eth is eth2 [repeated 8 times in 380s from 2026-04-09 02:01:12.216430 to 2026-04-09 02:07:32.359738]
2026-04-09 02:07:32.360335 bmc_network NOTICE: manufacture_dft.lua(283): dft eth start: test status: Testing, test result:Failed [repeated 33 times in 362s from 2026-04-09 02:01:30.526603 to 2026-04-09 02:07:32.360335]
2026-04-09 02:07:32.853727 bmc_network NOTICE: manufacture_dft.lua(49): get_phy_identifier start! [repeated 8 times in 380s from 2026-04-09 02:01:12.714319 to 2026-04-09 02:07:32.853727]
2026-04-09 02:07:32.854408 bmc_network NOTICE: manufacture_dft.lua(204): dft eth, phy_addr is 3, read identifier is 282 [repeated 8 times in 380s from 2026-04-09 02:01:12.714991 to 2026-04-09 02:07:32.854408]
2026-04-09 02:07:32.855812 bmc_network NOTICE: manufacture_dft.lua(83): enable phy loop mode begin [repeated 8 times in 380s from 2026-04-09 02:01:12.716559 to 2026-04-09 02:07:32.855812]
2026-04-09 02:07:32.856703 bmc_network NOTICE: manufacture_dft.lua(100): enable phy loop mode end [repeated 8 times in 380s from 2026-04-09 02:01:12.717513 to 2026-04-09 02:07:32.856703]
2026-04-09 02:07:35.489800 bmc_core ERROR: net_dft.c(197): [self_loop_test:197]recv failed! errno:2, read_length:110, [repeated 9 times in 410s from 2026-04-09 02:00:45.479780 to 2026-04-09 02:07:35.489800]
2026-04-09 02:07:36.416638 bmc_network NOTICE: manager.lua(103): Active port eth2 relink, restart dhcpv4 successfully [repeated 10 times in 380s from 2026-04-09 02:01:16.885893 to 2026-04-09 02:07:36.416638]
2026-04-09 02:07:36.422068 bmc_network NOTICE: arp.lua(87): start send ipv4 arp!, ethname: eth2, mac: f0:c8:b5:ac:f0:87
2026-04-09 02:07:37.501335 bmc_core ERROR: net_dft.c(197): [self_loop_test:197]recv failed! errno:2, read_length:60, [repeated 56 times in 339s from 2026-04-09 02:01:58.321373 to 2026-04-09 02:07:37.501335]
2026-04-09 02:07:59.995246 manufacture NOTICE: get_dft_result.lua(115): dft test get result: dft_id=74 slot=1 device_num=0 itemname=MGMT Test test_res=Failed

答案内容由AI生成,仅供参考:
:white_check_mark: 总结与推荐行动

步骤 操作 目的
1 使用 i2cdump 验证 eth2 的 PHY 寄存器第 14 位是否为 1 确认硬件环回已启用
2 抓包或 strace 分析 net_dft 进程的 recv 调用 确定 errno:2 的根源
3 审查 bmc_network 是否在测试中重启 DHCP 影响链路 排除干扰因素
4 提交问题单至 iBMA 或 PAE 团队,附上日志与版本信息 请求闭源模块定制支持
5 尝试更新至 OpenUBMC 10月版本 参考 神码_王金铃Lulinna Qnw3l 在搜索结果 #4 中提到“10月版本已解决”类似问题
点击此处查看详细分析解答

BMC网口环回装备测试失败问题分析与排查建议

根据您提供的问题描述和日志信息,DFT测试中ID为0x4a(十进制74)的BMC网口环回测试项失败。以下基于知识库中的实体、关系与搜索结果进行综合分析,并提供排查建议。


:magnifying_glass_tilted_left: 问题定位分析

1. 测试项基本信息匹配

从日志可确认:

dft test get result: dft_id=74 slot=1 device_num=0 itemname=MGMT Test test_res=Failed
  • DFT ID: 74(即 0x4a),与预期一致。
  • 测试名称: “MGMT Test”,符合 BMC 管理网口相关测试的命名惯例。
  • 执行状态: Testing 后返回 Failed

表明系统识别到了目标测试项并尝试执行,但最终失败。


2. 关键失败日志分析

:white_check_mark: 前置动作完成:

dft eth test: eth_name user eth2
dft eth start: eth_name:eth2 eth_mac:f0:c8:b5:ac:f0:87 test_type:0
enable phy loop mode begin
enable phy loop mode end
  • 测试已正确识别目标接口为 eth2,MAC 地址为 f0:c8:b5:ac:f0:87
  • 物理层环回模式(PHY Loopback)已成功使能

:backhand_index_pointing_right: 说明链路初始化和配置流程基本正常。

:cross_mark: 核心失败原因:

[self_loop_test:197]recv failed! errno:2, read_length:110
  • 错误发生在 net_dft.cself_loop_test 函数中。
  • errno: 2 对应 Linux 错误码 ENOENT —— “No such file or directory”,表示尝试读取数据时资源不存在或未正确准备。
  • 数据包长度分别为 60 和 110 字节,可能为 ARP 或 ICMP 报文。

结论:发送成功,但接收失败,说明环回通信链路在软件或驱动层面未正确闭环。


3. 组件协作关系梳理

依据知识库信息:

组件 角色
bmc_network 负责网络接口管理、DFT 测试中的环回逻辑控制(见 manufacture_dft.lua 日志)
general_hardware / manufacture 提供 DFT 测试框架,负责接收 IPMI 命令并分发到具体模块
network_adapter 管理物理网卡状态(如 NCSI 配置、Tx/Rx 控制)
IPMI 接口 用户指令入口(ipmicmd

从日志路径 bmc_network NOTICE: manufacture_dft.lua(...) 可知,该测试由 bmc_network 组件承载,并调用底层驱动进行收发包测试。


:puzzle_piece: 可能原因分析

可能原因 说明 支持证据
环回测试数据报文未被正确接收(缓冲区/套接字未就绪) recv failed! errno:2 强烈暗示接收端无法找到对应的 socket 或 netdev 缓冲区 日志中持续出现 recv failed,发送侧无报错
PHY 环回使能成功但未生效 虽然日志显示“enable phy loop mode end”,但实际硬件/寄存器未完成设置 需结合 i2cget 或 MDIO 工具验证 PHY 状态
测试使用了错误接口或驱动未加载 若 eth2 对应的驱动未完全加载,无法处理回包 bmc_network 日志中能识别 eth2,初步排除
闭源模块配置缺失或版本不兼容 compute_manufacture_app.lua 等闭源脚本可能影响测试行为 用户提到“涉及闭源”,且类似问题在搜索结果 #8 中存在定制需求
IPMI 命令参数错误或解析异常 参数 $testitem 是否正确传入?是否误将其他测试项 ID 传入 步骤中 $obtain_testitem 来自解析结果,理论上正确

:hammer_and_wrench: 排查与解决建议

:white_check_mark: 建议 1:验证 PHY 环回是否真正生效

使用 MDIO 或 I²C 工具查询 PHY 寄存器状态(如 Broadcom 或 Marvell 芯片):

# 示例:通过 i2cdump 查看 PHY 寄存器
i2cdump -y 0 0x5c  # 假设 PHY 地址为 0x5c

重点关注:

  • 寄存器 0 (Control Register):bit 14 = Loopback Enable
  • 寄存器 1 (Status Register):确认 link up
  • 查阅网卡 PHY 数据手册确认环回模式地址映射

:backhand_index_pointing_right: 若寄存器未置位,则 enable phy loop mode 操作失败。


:white_check_mark: 建议 2:检查环回测试程序的 socket 初始化逻辑

errno:2(ENOENT)在 socket 上下文中罕见。建议检查:

  • 是否调用 socket(AF_PACKET, SOCK_RAW, ...) 时绑定的接口名错误?
  • eth2 是否在测试时被 rename 或移除?
  • net_dft.c 中是否硬编码了设备名(如 eth0)而不适配动态接口?

可通过 strace 跟踪系统调用确认:

strace -f -e trace=socket,bind,recvfrom,sendto --pid=<dft_process_pid>

:white_check_mark: 建议 3:确认 bmc_network 与底层驱动协同

参考文档块 2 和搜索结果 #2、#5bmc_network 通过 RPC 接口与 network_adapter 协同:

bmc.kepler.Systems.NetworkPort | Configure  -- 配置接口
bmc.kepler.Debug.Systems.NCSI | SendCmdOverMCTP -- 调试NC-SI命令

请确认:

  • eth2 是否为 NCSI 网口?若是,需确保 NCSI 通道 Tx 已开启。
  • bmc_network 是否在环回测试期间仍尝试 DHCP、ARP 发送(见日志),干扰测试?

:backhand_index_pointing_right: 建议临时禁用 bmc_network 的 DHCP 重启逻辑,避免干扰。


:white_check_mark: 建议 4:升级或修复闭源组件

搜索结果 #8 提及 compute_manufacture_app.lua 在闭源仓中,且 互联网厂商定制需求需修改 SPI 测试设备选择

类比当前问题:

  • 当前测试可能因 固定使用 sfc0 而非 sfc1,导致 PHY 访问失败。
  • 检查是否闭源部分 未适配当前网卡类型或驱动路径

:white_check_mark: 建议

联系 PAE 或 iBMA 团队,提交日志并申请:
“在闭源 manufacture 组件中支持 eth2 接口环回测试路径的适配或可配置化”


:white_check_mark: 建议 5:临时规避方案 —— 手动注入测试

若仅需验证功能可用性,可尝试通过 MDB 接口手动触发:

# 示例:模拟启动测试
mdbctl setprop /bmc/kepler/Manufacture/DftEthTest Status "Testing"
mdbctl setprop /bmc/kepler/Manufacture/DftEthTest Result "Succeed"

:warning: 仅用于调试演示,不可用于正式测试。


:white_check_mark: 总结与推荐行动

步骤 操作 目的
1 使用 i2cdump 验证 eth2 的 PHY 寄存器第 14 位是否为 1 确认硬件环回已启用
2 抓包或 strace 分析 net_dft 进程的 recv 调用 确定 errno:2 的根源
3 审查 bmc_network 是否在测试中重启 DHCP 影响链路 排除干扰因素
4 提交问题单至 iBMA 或 PAE 团队,附上日志与版本信息 请求闭源模块定制支持
5 尝试更新至 OpenUBMC 10月版本 参考 神码_王金铃Lulinna Qnw3l 在搜索结果 #4 中提到“10月版本已解决”类似问题

:paperclip: 参考资料

  • bmc_network 组件负责 DFT 网络测试(见文档块2)
  • manufacture 组件管理 DFT 测试项分发(搜索结果 #1
  • net_dft.c 位于 bmc_core,执行实际收发逻辑
  • 类似闭源问题已在社区有先例(搜索结果 #8

最终建议:此问题极可能由闭源组件对特定接口或驱动的支持不完整导致,建议推动 iBMA 团队介入分析,并优先验证 PHY 寄存器状态以确认硬件层闭环。

KunLun2480V2_210618614810R9100005_20260409-0309.tar.gz (6.6 MB)