SetLLDPTxEnable接口调用时报错提示send fail问题分析
更新时间: 2026/05/31
在Gitcode上查看源码

问题背景

  • 单板类型:KP920;
  • 软件版本:openUBMC 25.09;
  • 涉及功能:网卡;
  • 触发条件:通过资源树SetLLDPTxEnable接口发送set_lldp cmd命令;
  • 业务表现:预期正常返回所查询的数值,实际request接口返回false,mctpd报错request timeout。

问题复现步骤

通过资源树SetLLDPTxEnable接口发送set_lldp cmd时,request接口返回false,mctpd报错request timeout,但修改request调用时timeout传参并没有效果还是返回false。

关键日志信息

app.log日志信息:

定位过程

  1. 在PR_197中,在ncsi_over_mctp_wx.cpp中新增了set_lldp cmd,同时在network_port.cpp中完善了资源树SetLLDPTxEnable接口

  2. 服务器上电后,通过busctl call接口调用资源树SetLLDPTxEnable接口,另一窗口通过tail -f /var/log/app.log实时显示,发现提示fail to send 日志对应代码如下

  3. 怀疑过会不会是通过资源树接口调用request接口和task中的request调用冲突了,双方抢占资源导致SetLLDPTxEnable接口调用时request接口返回false。

  4. 尝试修改SetLLDPTxEnable接口;增加传参int32_t timeout_ms,这样在task中调用request接口时timeout为0,SetLLDPTxEnable调用request接口时增加timeout时间,但实际测试发现SetLLDPTxEnable调用request接口还是返回false。从app.log来看除了提示”failed to send NCSI set LLDP status Command”外,还会影响到task中周期性调用的其他ncsi cmd,怀疑是这几条task中调用的cmd和SetLLDPTxEnable调用request撞在了一起。 日志对应的代码截图如下:

  5. 通过attach和tracemctp追踪报文,可以成功抓到ubmc发送和接收报文,但是cmd返回false,并且app.log提示超时 实际上网卡侧是有设置成功,网卡有成功接收并处理请求(回复的响应也显示有成功处理);

  6. network_port的task和手动下发的相应,查看是否有不同 network_port的task响应体: 手动执行busctl命令下发响应体:

    shell
      busctl --user call bmc.kepler.devmon /bmc/dev/Systems/1/PCIeNicCard/PCIeNicCard_1_0101010302/NicPort/0 bmc.dev.NetworkPort SetLLDPTxEnable b 1

    查询结果:

  7. 代码确认,task正常;

  8. 尝试直接调用mctpd的Request方法,出现小概率触发,如果两次之间间隔太短就会request timeout

  9. 尝试了下使用再早一点版本的Component_drivers(“component_drivers/1.2.98@openubmc.dev/dev”),搭配"libmcpp/1.2.70@openubmc.dev/dev"和"devmon/1.2.25@openubmc.dev/dev",可以成功出hpm包,并且从task.log来看这次没有重新编译Component_drivers,但是有编译devmon。但是hpm包升级开发板后,devmon服务还是没有加载起来,并且开发板还重启了。
    代码层面上有修改Component_drivers组件subprojects/libmcpp.wrap文件指定libmcpp版本,bingo build构建日志如下:

  10. 尝试component_drivers组件拉取最新版本代码,本地编译dev版本,可以成功出hpm包;出包后尝试升级并查看没有再报超时的问题。

问题原因

component_drivers组件代码并非最新,需要更新到最新。

解决方案

component_drivers组件代码更新到最新,重新出包,并在原始的环境上升级测试;环境要求鲲鹏920服务器,网迅1GE SF400HT网卡;固件要求基于2509版本固件同步了PR_185和PR_197更新;具体测试方案,按照发现问题的步骤,下发命令,确认执行结果,具体命令如下:

shell
  busctl --user call bmc.kepler.devmon /bmc/dev/Systems/1/PCIeNicCard/PCIeNicCard_1_0101010302/NicPort/0 bmc.dev.NetworkPort SetLLDPTxEnable b 1

测试结果如下: