问题描述
使用ipmcset -d serialdir -v 5将sol com切到sys com,再执行标准ipmi命令 sol activate,sol com默认切换到sys com
环境信息
- 软件版本:[如 OpenUBMC2606]
重现步骤
-
ipmcset -d serialdir -v 5
Set serial port direction successfully.
~ ~ $ ipmcget -d serialdir
Current connected serial direction :
Num Source Destination
5 SOL COM SDI COM -
ipmitool.exe -I lanplus -H IP -U 用户名 -P 密码 sol activate
-
~ $ ipmcget -d serialdir
Current connected serial direction :
Num Source Destination
1 SOL COM SYS COM
期望结果
使用ipmcset -d serialdir -v 5将sol com切到sys com,再执行标准ipmi命令sol activate,要是已配置sol串口映射方向,就不切换到默认的sys com,没有配置sol串口映射方向,切到默认sys com是理想的
实际结果
尝试过的解决方案
闭源代码做的切换
分析结论
执行 sol activate(IPMI SOL 激活)时,无论之前串口切到了哪个方向(如 SDI COM),都会被强制切回 SYS COM。
日志定位
从 BMC 日志 serial_mgmt.lua:501 可见,每次 sol activate 都会触发:
serial_mgmt.lua(501): Setting uart 5 interconnect with uart 0
直接硬件互联到 uart 0(SYS COM),覆盖了之前通过 force_hw_operation 切到的 SDI COM 方向。
调用链
IPMI SOL Activate 请求
→ rmcp_ipmi.c:active_payload_set_info
→ rmcp_active_sol_payload() ← 闭源 D-Bus 调用
→ serial_mgmt.lua:501 ← 硬编码互联到 uart 0(SYS COM)
→ set_sol_property(1, 1) ← 后续通知 Lua 侧,但已晚
根因
serial_mgmt.lua:501 在收到 rmcp_active_sol_payload 的 D-Bus 调用后,固定将 uart 5 互联到 uart 0(SYS COM),没有考虑当前串口是否已经被用户切换到其他方向(如 SDI COM)。
期望行为
sol activate 时不应强制切换串口方向,应保持当前已有的串口连接状态不变。如果确实需要初始化,也应先读取当前 SerialDirect 的预设值,按预设值进行互联,而不是硬编码 uart 0。
需要查看闭源代码,看一下能不能改一下sol activate sol串口切换的执行逻辑
