网卡光模块的在位信息是怎么判断的

最近在引入一款网卡,热插拔光模块后发现光模块的信息并没有消失,查看dbus上光模块的信息发现还存在并显示为在位状态 请问光模块的在位逻辑是怎么判断的 应该怎样去debug解决

最快的方式就是:看代码
网卡管理开源了,光模块的在位判断逻辑在这里:https://gitcode.com/openUBMC/network_adapter/blob/main/src/lualib/device/class/optical_module.lua#L214

因为没有直接的获取在位信号的带外管理能力,因此通过复用是否能获取光模块温度作为在位判断。
可以基于这个地方添加日志等方式观察光模块拔出时,是否触发相关逻辑。

这块代码我看到了,我加了log,插拔光模块后没有任何信息打印出来,感觉这块代码完全没有运行

可以打开network_adapter app的debug日志,然后看看有没有发这块数据

还有查看一下bma那块是否有上报信息,这些数据感觉像是走带内来的

https://gitcode.com/openUBMC/network_adapter/blob/main/src/lualib/bma/handles/handler_optical.lua#L92

可能是这里的原因,只要拿到bma数据就默认在位了

1 个赞

感谢回答,经过调试在位信息是在这里设置的,拔掉光模块后bma推送的信息回清空,可以设置光模块为不在位,但是拔掉之后再插上光模块发现bmc这边没有再收到bma推送的光模块信息,感知不到光模块插上的动作,请问这种情况bma不会检测光模块的插入然后再推送信息吗?

要看带内信息是否有变化,有可能是bma的数值没有发生变化,导致给bmc传递的没变化,然后bmc就感知不到变化了

你看一下host_agent的资源树,里面有bma传来的原始数据

这个我看了,插上光模块后,host_agent资源树上的数据没有更新

那感觉像是bma的bug,联系技术支持看看如何下一步推进吧

问题解决 拔掉并插上光模块时需要连接光纤线并且保持网络连通 ibma才会推送信息

1 个赞

你好,请教个事,我这边是先拔掉光纤,再拔掉光模块。连接状态有更新为nolink,但是光模块的信息还在,请问这里是咋解决的?是我操作步骤问题吗,麻烦指导一下

修改下代码中光模块的在位逻辑判断,代码中这块有bug,现有代码只要光模块信息发生改变就设置为在位,实际应该判断下光模块信息更新内容,不在位时应该设置状态为不在位

1 个赞

大佬,能瞅一下咋改的不


考虑考虑贡献一下?

diff --git a/src/lualib/bma/handles/handler_optical.lua b/src/lualib/bma/handles/handler_optical.lua
index b3e02aa..a124d8d 100644
--- a/src/lualib/bma/handles/handler_optical.lua
+++ b/src/lualib/bma/handles/handler_optical.lua
@@ -90,7 +90,13 @@ function c_handler_optical:update_optical(op, data)
     if op and op:check_port_workload_type() then
         return
     end
-    op.Presence = 1
+    if data.IsSffExist ~= nil then
+        if data.IsSffExist then
+            op.Presence = 1
+        else
+            op.Presence = 0
+        end
+    end
     if data.VendorName ~= nil then
         op.Manufacturer = data.VendorName
     end
diff --git a/src/lualib/bma/handles/handler_optical_diag.lua b/src/lualib/bma/handles/handler_optical_diag.lua
index ae0aa4f..bd6622a 100644
--- a/src/lualib/bma/handles/handler_optical_diag.lua
+++ b/src/lualib/bma/handles/handler_optical_diag.lua
@@ -14,6 +14,7 @@ local c_optical_module = require 'device.class.optical_module'
 local c_handler_optical = require 'bma.handles.handler_optical'
 local singleton = require 'mc.singleton'
 local update_if_valid = c_handler_base.update_if_valid
+local is_nil_or_null = c_handler_base.is_nil_or_null

 local get_odata_id = c_handler_base.get_odata_id

@@ -43,7 +44,13 @@ function c_handler_optical_diag:update_optical_diag(op, data)
     if op and op:check_port_workload_type() then
         return
     end
-    op.Presence = 1
+    if not is_nil_or_null(data.IsSffExist) then
+        if data.IsSffExist == true then
+            op.Presence = 1
+        else
+            op.Presence = 0
+        end
+    end
     -- bmc.kepler.Systems.OpticalModule.Temperature
1 个赞

感谢感谢

我已经更新到最新的ibma2.16.1了,host_agent中其他属性已经更新成NULL了,但是这个属性还是true,导致光模块被拔掉了,web上的光模块信息还在

感觉像是ibma推送信息的问题 可以看下ibma的log

1、重新试了两次,第一次两个光模块都拔出来,IsSffExist都为false,如附件中24、26行。

2、重新插上,IsSffExist都为true,如35、40行。

3、再次拔出,只有一个网卡IsSffExist为false,另一个网卡没有该属性,如42、48行。

目前来看ibma似乎并不是每次都有IsSffExist属性上报。
common.txt (14.3 KB)

导致我一个网口的光模型信息没有更新

感觉ibma推送有些问题,内容不固定,也有可能和网卡有关,我没遇到这种情况,目前能想到的workaround方案是可以添加其他属性判断作为光模块在位状态的依据