执行标准ipmi命令solactivate,sol 默认切换到syscom,设置的sdicom被覆盖

问题描述

使用ipmcset -d serialdir -v 5将sol com切到sys com,再执行标准ipmi命令 sol activate,sol com默认切换到sys com

环境信息

  • 软件版本:[如 OpenUBMC2606]

重现步骤

  1. 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

  2. ipmitool.exe -I lanplus -H IP -U 用户名 -P 密码 sol activate

  3. ~ $ 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串口切换的执行逻辑

当前ipmitool连接sol都是连系统串口方向,连接其他串口方向需要通过cli sol连接