当前在pcie switch板上接了几个pcie网卡,带内os加载完成后在bmc内执行busctl --user tree bmc.kepler.mctpd 查看到有如下routing信息,没有Endpoint信息;
1.请问这些routing信息都是bmc主动从imu获取的么?
2.查看某个routing的内容,请问下StartingEid的值就是phyaddr为157这个pcie设备的eid么?
当前在pcie switch板上接了几个pcie网卡,带内os加载完成后在bmc内执行busctl --user tree bmc.kepler.mctpd 查看到有如下routing信息,没有Endpoint信息;
1.请问这些routing信息都是bmc主动从imu获取的么?
2.查看某个routing的内容,请问下StartingEid的值就是phyaddr为157这个pcie设备的eid么?
答案内容由AI生成,仅供参考:
| 问题 | 回答 |
|---|---|
| 1. Routing 信息是否由 BMC 主动从 IMU 获取? | 否。是由 IMU 或设备在 MCTP Discovery 和 Routing Update 阶段主动上报,BMC 接收并注册为 D-Bus 对象。 |
| 2. StartingId 是否是 PhyAddr 为 157 的设备的 EID? | 是的。StartingId=12 即表示该设备被分配的 EID 是 12,PhyAddr=157 是其物理地址,两者不同但关联。 |
| 为何无 Endpoint 信息? | 可能因尚无数据流量触发 endpoint 创建,或 transport 未建立。建议检查协议交互和日志。 |
以下是针对您提出的两个关于 MCTP(Management Component Transport Protocol)相关问题的详细解答,基于 OpenUBMC 系统中 MCTP 子系统的实现机制。
不是,这些 Routing 信息不是由 BMC 主动发起获取的,而是 BMC 在完成 Endpoint Discovery 流程后,由 IMU(通常指主机侧或 PCIe Switch 的 MCTP 控制器)主动上报并由 BMC 的 mctpd 服务解析、构建出来的。
具体流程如下:
Prepare for Endpoint Discovery 和 Endpoint Discovery 命令,以发现连接在其上的 MCTP-capable 设备(如支持 MCTP over PCIe 的网卡)。Routing Information Update 或类似机制,将自己所管理的下游设备的路由信息发送给 BMC。mctpd 守护进程接收到这些路由信息后,会在 D-Bus 上创建对应的 Routing 对象,路径形式为:/bmc/kepler/Systems/1/Mctp/Routing/<phy_addr>
您看到的 Routing/157、Routing/175 等正是这些物理地址(PhyAddr)所对应的路由条目。
参考依据:
- 文档
【已评审】支持mctp路由表查询在线调试命令中提到:“新增资源协作路径/bmc/kepler/Systems/:SystemId/Mctp/Routing”,说明该路径下的对象是由系统动态注册的。- 日志示例中出现
add routing entry, phys_address=150, starting_eid=9,表明路由条目是通过协议消息添加的(见cpld升级的即时生效和掉电生效问题日志)。
不完全是。StartingEid 是该路由表项下第一个可用 Endpoint ID(EID),但不一定是设备本身的 EID。
bmc.kepler.Systems.Mctp.PCIeRoutingEntry):| 属性 | 说明 |
|---|---|
PhysAddress |
物理地址(PhyAddr),即该路由目标设备在 MCTP 总线上的唯一标识,[1, 157] 表示 Segment=1, PhyAddr=157。 |
StartingId |
起始 EID(Endpoint ID),即该设备可以使用的第一个 EID 值。此处为 12。 |
EidRangeSize |
可分配的 EID 数量。此处为 1,表示该设备仅占用一个 EID(即 EID=12)。 |
EntryType |
路由条目类型(例如 0:静态,1:动态等)。 |
MediaTypePvid |
物理介质类型与 PVID 的组合值,此处为 15,可能代表 PCIe。 |
StartingId 的值(12)是该设备将被分配的 EID,而不是 PhyAddr 的值。
也就是说:
157(由 PhysAddress 字段确定)。12(由 StartingId 给出,且 EidRangeSize=1 表明只分配了一个 EID)。
类比理解:
PhyAddr类似于 IP 地址(物理定位)EID类似于进程端口号(逻辑通信终点)
它们之间是一对一或多对一的映射关系,由 IMU 或设备固件定义。
您提到“没有 Endpoint 信息”,这与 routing 存在但 endpoint 缺失的现象相符。可能存在以下原因:
MCTP Endpoint 的 D-Bus 路径为:
/bmc/kepler/Systems/1/Mctp/Endpoint/<phy_addr>/<msg_type>
例如:/bmc/kepler/Systems/1/Mctp/Endpoint/29/4。
如果设备仅被发现并添加了路由信息,但未建立具体的通信通道(Transport),或者还没有发送特定类型的 MCTP 消息(如 NCSI, Storage 等),则不会创建 Endpoint 对象。
检查 MCTP Binding 配置是否完整:
BmcEid 和 BmcPhyAddr?bmc.kepler.Systems.Mctp.MctpBinding.PCIe 对象中相关属性已配置。确认设备是否完成 Discovery 和 Set_EID 流程:
tracemctp 或注入日志查看是否有 Set Endpoint ID 命令交互。set smbus ep failed 或类似错误。检查协议匹配:
msg_type(如 NCSI 是 4)。如果设备未发送属于已知 msg_type 的消息,mctp_lib.create_mctp_endpoint 可能未触发。带内 OS 是否运行?
| 问题 | 回答 |
|---|---|
| 1. Routing 信息是否由 BMC 主动从 IMU 获取? | 否。是由 IMU 或设备在 MCTP Discovery 和 Routing Update 阶段主动上报,BMC 接收并注册为 D-Bus 对象。 |
| 2. StartingId 是否是 PhyAddr 为 157 的设备的 EID? | 是的。StartingId=12 即表示该设备被分配的 EID 是 12,PhyAddr=157 是其物理地址,两者不同但关联。 |
| 为何无 Endpoint 信息? | 可能因尚无数据流量触发 endpoint 创建,或 transport 未建立。建议检查协议交互和日志。 |
建议操作命令:
# 查看指定路由对象详情
busctl --user get-property bmc.kepler.mctpd /bmc/kepler/Systems/1/Mctp/Routing/157 bmc.kepler.Systems.Mctp.PCIeRoutingEntry StartingId
# 查看是否存在任何 Endpoint
busctl --user tree bmc.kepler.mctpd | grep -A 2 Endpoint
# 查看 MctpBinding 配置(确认BMC自身的EID和PhyAddr)
busctl --user introspect bmc.kepler.mctpd /bmc/kepler/Systems/1/Mctp/MctpBinding bmc.kepler.Systems.Mctp.MctpBinding.PCIe
如需进一步诊断,请提取 mctp_engine.lua、mctp_routing_table.lua 中的相关日志进行分析。
是的
您好,是否可以直接通过操作DBUS的方式去建立transport和进行通信呀?
目前没有