USB 近端运维功能使用指导

概述

本文档介绍 openUBMC USB 近端运维功能的使用方法。usb_entry 组件主要提供近端运维功能,包括手机和便携运维、U 盘配置导入导出功能,以及在插入 USB 设备和执行任务时的近端运维点灯功能。

认识 USB 近端运维

USB 近端运维简介

USB 近端运维是通过 USB Type-C 接口实现 BMC 管理的功能,包括:

  • U 盘配置导入导出 - 通过 U 盘导入配置文件、导出系统配置
  • 手机和便携运维 - 通过 Type-C 口连接手机或笔记本电脑访问 BMC
  • 近端运维点灯 - USB 设备插入和任务执行时的 LED 指示灯控制

应用场景

场景描述优势
初始配置设备首次部署时的初始配置无需网络连接
故障恢复网络故障时的设备恢复快速恢复服务
便携运维现场通过便携设备直接访问 BMC便于现场维护
状态指示LED 灯指示运维状态直观显示工作状态

环境要求

BMC 环境支持近端运维功能需要满足两个条件:

  1. 单板支持(Supported)- 硬件层面支持 Type-C 接口
  2. 挂耳在位(Presence)- 挂耳在位(部分机型没有挂耳,不支持近端运维功能)

这两个属性需要在 sr 文件中的 UsbLocalOMService 类配置,可在资源树上查看。

说明

usb_entry 组件涉及的 USB 口是环境上供 BMC 使用的 Type-C 口,与 Type-A 口无关。因此进行插入 U 盘等动作需要使用 Type-C 转接头或直接使用 Type-C 口的 U 盘。

USB 设备识别

认识 USB 设备识别

usb_entry 组件通过读写 USB CC 芯片上的寄存器值来识别插入的 USB 设备和进行后续的近端运维操作。

CC 芯片类型

当前有多种厂商的 USB CC 芯片,不同厂商的 CC 芯片读取设备在位状态的操作有所不同,一台服务器只可能使用一种芯片,usb_entry 初始化时会遍历多种设备以确认当前的芯片类型。

设备在位状态轮询

usb_entry 每秒读取一次 USB 设备在位状态,功能包括:

  1. 及时更新当前 USB 设备的接入情况
  2. 在插入 U 盘时反复进入 U 盘配置导入导出流程来执行控制文件中的下一步骤

U 盘配置导入导出

认识 U 盘配置导入导出

U 盘配置导入导出功能允许通过 U 盘与 BMC 交换配置数据:

  • 配置导入 - 从 U 盘导入配置文件到 BMC
  • 配置导出 - 将 BMC 配置导出到 U 盘
  • 加密支持 - 支持加密的压缩包文件

USB 挂载卸载和读写

挂载流程

  1. 插入 U 盘后,usb_entry 读取 USB CC 芯片获取 USB 设备是否在位。
  2. 更新 USB 设备在位状态(USBDevicePresence)。
  3. 若 USB 管理使能(Enabled)打开,判断 USB 设备类型。
  4. 若是 USB device 设备,BMC 作为主机侧,USB DRD 角色设为 HOST。
  5. 自动进行 U 盘的挂载及后续的配置导入导出操作。

挂载过程

  1. 判断装备模式是否为 ft(单板测试),是则不进行 U 盘操作直接退出。
  2. 获取 USB 设备名和设备路径。
  3. 通过 mount 命令将其挂载到 BMC 内存中的固定路径:/dev/shm/usb_control
  4. 通过对该路径的读写实现对 U 盘设备的读写。

卸载流程

  1. 拔出 U 盘后,usb_entry 检测到 USB 设备不在位。
  2. 更新 USB 设备在位状态。
  3. 通过 umount 命令卸载。
  4. 清除配置导入导出产生的残余文件。

U 盘配置导入导出流程

设置解压密码

通过 Redfish 接口设置 USB 解压密码:

bash
PATCH https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/USBMgmtService

# 请求体
{
    "USBUncompressPassword":"xxxxxx"
}

资源树接口:

bash
busctl --user call bmc.kepler.iam /bmc/kepler/Managers/1/USBPorts bmc.kepler.Managers.USBAuthentication SetDecryptPassword a{ss}s 0 "xxxxxx"

压缩包准备

预先在 U 盘内配置压缩包,压缩包具体要求如下:

  1. 压缩包名称ServerOperateFile.tar.gz
  2. 加密方式:使用此前设置的 USB 解压密码加密压缩。
  3. 控制文件:压缩包内应包含一个控制文件 control.json
  4. 配置文件:如果需要进行配置导入,需要包含配置文件 import/config.json

控制文件格式

control.json 文件说明了近端运维操作的动作及执行顺序:

json
{
    "ImportConfigurationParameter": {
        "ImportConfigurationEnabled": true,
        "ActiveMode": ["Immediately", "ResetBMC", "ResetOS"]
    },
    "ExportConfigurationParameter": {
        "ExportConfigurationEnabled": true,
        "AutoTag": ["sn", "model", ""]
    }
}

配置导入参数说明

参数描述
ImportConfigurationEnabled是否启用配置导入
ActiveMode配置导入后的动作模式

ActiveMode 取值说明

描述
Immediately配置导入后不重启
ResetBMC配置导入后平滑重启
ResetOS配置导入后强制重启

配置导出参数说明

参数描述
ExportConfigurationEnabled是否启用配置导出
AutoTag配置导出的文件命名规则

AutoTag 取值说明

导出文件路径
sn/dev/shm/usb_control/<product_sn>/export/<product_sn>-config.json
model/dev/shm/usb_control/<product_sn>/export/<ProductName ProductVersion>-config.json
""/dev/shm/usb_control/export/config.json

配置导入导出执行流程

插入 U 盘后,执行 USB 挂载卸载和读写动作后:

  1. 检查 ServerOperateFile.tar.gz 文件是否存在。
  2. 调用 iam 提供的 DecryptFile 方法解压 U 盘中的压缩包到 /dev/shm/usb_files 目录。
  3. 解析控制文件 control.json,根据当前动作查找下一动作。
  4. 将下一动作更新为当前动作(当前动作为空时下一动作就是第一个动作)。
  5. 由于配置导入导出过程中可能包括 BMC 重启操作,当前动作需要持久化保存。
  6. 执行当前动作(配置导入/配置导出/平滑重启/强制重启)。
  7. 下一次进入 U 盘配置导入导出流程时(重启 BMC 后或下一次轮询),重复步骤 3-7 执行下一动作。

手机和便携运维

认识手机和便携运维

手机或便携笔记本电脑通过 Type-C 口连接到设备上,通过 RNDIS(Remote Network Driver Interface Specification)协议规范为这些设备提供 BMC 的网络服务。

说明

手机 app 不再维护,因此当前仅关注接入便携笔记本的场景。

RNDIS 协议

RNDIS(Remote Network Driver Interface Specification)是微软开发的协议,用于在 USB 上传输网络数据。

驱动支持

RNDIS 功能需要有驱动支持,当前 BMC 使用 RTOS 依赖的 Linux Kernel 版本编译这些驱动并加载,保存在:

text
/opt/bmc/apps/usb_entry/ko

不支持 USB 近端运维功能的环境不加载这些驱动。

便携机近端运维

工作流程

  1. 便携笔记本电脑设备的 USB 口是 USB Host 设备。
  2. 接入服务器后 BMC 将 USB DRD 角色设为 DEVICE。
  3. 启动 RNDIS Device 服务,生成 usb0 网口。
  4. 启动 DHCP Server 服务,为笔记本电脑分配 IP 地址。
  5. 当前固定分配的 IP 地址为 169.254.1.5
  6. 分配 IP 后需要添加 iptable 转发使其能够访问各个服务。

网络转发

通过调用 bmc_network 的 AddNatRule/UpdateNatRule 函数用于增加和删除近端运维 IP 的转发。

近端运维点灯

认识近端运维点灯

USB 设备插入和拔出,执行挂载卸载任务等动作,都会触发近端指示灯的变化。

指示灯逻辑

状态绿灯红灯
无设备接入熄灭熄灭
USB 设备接入,但 USB 管理使能关闭闪烁 3s 后关闭熄灭
接入了 USB HOST 或 USB DEVICE 设备常亮熄灭
配置导入导出操作进行时闪烁熄灭
配置导入导出操作完成时常亮熄灭
所有操作均已完成且有错误状态熄灭常亮

LED 控制

usb_entry 通过设置两个控制 LED 灯的 Accessor 来控制近端指示灯变化:

Accessor对应属性描述
Accessor_USBGreenLedGLedStatus绿灯状态
Accessor_USBRedLedRLedStatus红灯状态

USB 接口说明

接口地址

接口类型地址
Redfish/redfish/v1/Managers/{manager_id}/USBMgmtService
Web-rest/UI/Rest/BMCSettings/USBMgmtService

接口功能

功能RedfishWeb-restCLIIPMI
ServiceEnabled 管理使能状态GET/PATCHGET/PATCH查询/设置查询/设置
USBDevicePresence USB 设备在位状态GETGET查询X

资源树接口

查看资源树

bash
busctl --user tree bmc.kepler.usb_entry

查看 USB LocalOMService

bash
busctl --user introspect bmc.kepler.usb_entry /bmc/kepler/Managers/1/LocalOMService

CLI 命令使用

查询 USB 管理状态

bash
ipmcget -t usbmgmt -d info

输出示例:

text
Service State         : enabled
USB Device Presence   : absent

设置管理使能状态

bash
# 启用 USB 管理服务
ipmcset -t usbmgmt -d state -v enabled

# 禁用 USB 管理服务
ipmcset -t usbmgmt -d state -v disabled

IPMI 命令使用

查询管理使能状态

bash
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x5b 0x11 0x00 0x00 0x00

设置管理使能状态

bash
# 关闭(最后一位 0x00 表示关闭,0x01 表示打开)
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x5a 0x11 0x00 0x01 0x00 0x00

环境支持检查

检查条件

BMC 环境支持近端运维功能需要满足两个条件:

  1. 单板支持(Supported)。
  2. 挂耳在位(Presence)。

检查命令

bash
busctl --user introspect bmc.kepler.usb_entry /bmc/kepler/Managers/1/LocalOMService

两个条件均为 true 才说明该 BMC 环境支持近端运维功能。

常见问题

设置管理使能失败,USB 设备接入状态始终为未接入

可能原因一:sr 未配套

描述:系统资源配置文件未配套或版本过旧

解决方法: 升级到最新的 sr

可能原因二:环境不支持

描述:单板不支持或挂耳不在位

解决方法

  1. 检查单板是否支持 USB 近端运维功能
  2. 检查挂耳是否在位
  3. 通过资源树查看 Supported 和 Presence 属性
bash
busctl --user introspect bmc.kepler.usb_entry /bmc/kepler/Managers/1/LocalOMService

确保两个属性均为 true。

LED 灯不亮

问题现象:插入 USB 设备后 LED 灯没有反应

可能原因

  1. LED Accessor 配置错误
  2. LED 控制接口调用失败
  3. 硬件故障

解决方法

  1. 检查 sr 文件中 LED Accessor 配置
  2. 检查 UsbLocalOMService 配置
  3. 检查 LED 控制接口调用
  4. 检查硬件连接

附录

参考资料