带外获取光模块信息失败

环境:鲲鹏920高性能服务器,网迅25Ge网卡,通过vdm进行通信

网迅25Ge网卡是带有光模块的,目前已经光模块对象已经可以成功上树了,但是遇到了两个问题排查了很就找不到具体原因,想问下有没有伙伴遇到过类似的问题,最后是怎么解决的?

1、带外获取光模块信息时发送ncsi get_sff_info cmds,request接口返回false,

排查后确认是mctp.cpp中捕捉到了异常。

后续尝试过在其他task(network_port.cpp)中去调用get_sff_info cmd,结果也是一样的,request接口一直返回false;并且尝试添加其他cmd的调用接口(get_vpd_pn_by_ncsi),并在NetworkPort::start_ncsi_update_task_wx中调用,request也是失败的。

已经支持并且调用的cmd(update_pcie_device_id_by_ncsi,update_mac_addr_by_ncsi等等)都是可以成功,并且之前补充ncsi cmd时还测试过添加这种接口在task中调用,也是没有问题的。目前component_drivers代码是基于1.1.30版本进行的修改,是这期间有过什么改动吗,比如相对之前request接口可以使用的资源缩小了,导致新增的cmd抢占不到资源(就类似这种的,不过应该不是这个,尝试过给get_sff_info在ncsi_over_mctp.cpp中新增一个request_delay接口,单独增加等待时间timeout_ms,但是结果还是一样的request_delay返回false)。

2、通过ibma获取光模块信息时只会更新bmc.kepler.network_adapter下的相关信息,bmc.kepler.devmon下的不会更新。这是ibma的默认机制吗,只更新资源树,不更新设备树?

关于第一个问题的定位手段:

1、以telnet方式进入环境。

2、使用busctl monitor –user bmc.kepler.mctpd去监听mctpd接收到的消息

3、可以参考这个期间mctp发送的报文结构,手动发送获取光模块信息的mctp报文,使用busctl call 方法去执行。定位错误原因是什么

2、调用此命令后没有打印任何报文的内容,但是mdbctl中通过tracemctp追踪是有收发报文打印的(获取光模块信息的cmd的报文,但是app.log中并没有request成功的打印)。是request确实把报文发出去了,网卡日志显示也收到了并回复了rsp,ubmc也收到了网卡回复的rsp,但是不知道为什么request接口还是返回了false

3、这个测试是通过vdm进行通信的,也可以通过busctl call方法手动发送吗?应该操作哪个method?

busctl --user call bmc.kepler.mctpd /bmc/kepler/Systems/1/Mctp/Endpoint/150/2 bmc.kepler.Systems.Mctp.PCIeEndpoint Request xxx

这个Request方法,后面的参数其实就是component_driver中发送过去的参数

不好意思,想问下这个参数具体是什么?a{ss}ayia{ss}a{ss}含义是什么,有相关文档介绍每个的含义吗?尝试了下,一直提示参数太少

参数可以参考 AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台} 中的配置

"methods": {
            "Request": {
                "req": {
                    "Data": {
                        "baseType": "U8[]",
                        "description": "请求数据"
                    },
                    "TimeoutMs": {
                        "baseType": "S32",
                        "description": "超时时间"
                    },
                    "ReqHeaderFileds": {
                        "baseType": "Dictionary",
                        "$ref": "#/defs/ReqHeaderFileds",
                        "description": "mctp上层协议请求报文头字段, 完成协议请求报文头的填充。目前支持, NCSI协议: 数据包类型 PacketType, 通道标识 ChannelId, 数据包标识 PackageId; NVME协议: 数据完整校验标识 IC, NVME消息类型 MsgType, 命令插槽标识 CmdSlot; PLDM协议: 报文类型 PldmType, 命令代码 CommandCode"
                    },
                    "RspHeaderValidators": {
                        "baseType": "Dictionary",
                        "$ref": "#/defs/RspHeaderValidators",
                        "description": "对mctp上层协议返回报文头的校验。支持校验项: NCSI: NCSI协议返回数据包类型 PacketType; PLDM协议: 返回命令代码 CommandCode"
                    }
                },
                "rsp": {
                    "Data": {
                        "baseType": "U8[]",
                        "description": "响应数据"
                    }
                },
                "description": "发送消息并接收响应的方法"
            },

然后对于签名 a{ss}ayia{ss}a{ss} ,第一个 a{ss}是表示上下文的,可以用0 来代替。然后 ay 表示的你发送的具体的报文。 第二个a{ss}里面是MCTP的报文头, 最后一个 a{ss} 也可以用0来代替。

举一个例子:

‣ Type=method_call  Endian=l  Flags=0  Version=1 Cookie=369  Timestamp="Wed 2025-06-18 06:38:19.456420 UTC"
  Sender=:1.10  Destination=bmc.kepler.mctpd  Path=/bmc/kepler/Systems/1/Mctp/Endpoint/150/2  Interface=bmc.kepler.Systems.Mctp.PCIeEndpoint  Member=Request
  UniqueName=:1.10
  MESSAGE "a{ss}ayia{ss}a{ss}" {
          ARRAY "{ss}" {
          };
          ARRAY "y" {
                  BYTE 0;
                  BYTE 0;
                  BYTE 7;
                  BYTE 219;
                  BYTE 0;
                  BYTE 1;
                  BYTE 4;
                  BYTE 0;
          };
          INT32 0;
          ARRAY "{ss}" {
                  DICT_ENTRY "ss" {
                          STRING "PacketType";
                          STRING "80";
                  };
                  DICT_ENTRY "ss" {
                          STRING "ExpectRspPacketType";
                          STRING "208";
                  };
                  DICT_ENTRY "ss" {
                          STRING "ChannelId";
                          STRING "1";
                  };
                  DICT_ENTRY "ss" {
                          STRING "PackageId";
                          STRING "0";
                  };
          };
          ARRAY "{ss}" {
          };
  };

‣ Type=method_return  Endian=l  Flags=1  Version=1 Cookie=283  ReplyCookie=368  Timestamp="Wed 2025-06-18 06:38:19.513654 UTC"
  Sender=:1.53  Destination=:1.10
  UniqueName=:1.53
  MESSAGE "ay" {
          ARRAY "y" {
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 7;
                  BYTE 219;
                  BYTE 0;
                  BYTE 1;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
                  BYTE 0;
          };
  };

好的,已经成功手动发送mctp报文,谢谢。