配置导入导出与定制化引擎

概述

ipmi_mgmt 模块提供了配置导入导出和装备定制化能力,支持通道权限配置、通道编号配置、厂商 ID(Manufacturer ID)以及防火墙模式的持久化与定制。本文档描述导入导出引擎和定制化引擎的设计与使用。

防火墙运行时策略与 IPMI 命令见 防火墙(黑白名单)。

服务集成

ipmi_mgmt 服务通过以下回调集成导入导出和定制化能力:

on_import_config

void ipmi_mgmt_service::on_import_config(mc::string data, mc::string type)
  • type="custom":调用 customize_engine::import_data();单项失败只记录日志,不中断其余项
  • 否则:调用 import_export_engine::import_data();单项失败抛出 CollectingConfigurationErrorDesc 并立即退出,后续项不再导入(对齐 ipmi_core)

on_export_config

mc::string ipmi_mgmt_service::on_export_config(mc::string type)
  • type="custom":调用 customize_engine::export_data()
  • 否则:调用 import_export_engine::export_data()

导入导出引擎

设计目标

导入导出引擎用于支持 BMC 配置的导入导出功能,允许将通道权限配置、通道编号配置、厂商 ID 和防火墙模式导出到配置文件,以及从配置文件导入配置。

接口定义

namespace ipmi_mgmt::import_export_engine {
    void import_data(const mc::dict& datas);  // 失败抛 CollectingConfigurationErrorDesc
    mc::dict export_data();
}

处理顺序与入参一致:先遍历传入的 datas,无对应 handler 则跳过,有则处理。Import=true 且校验失败时:

  1. 记录 Import Com [FireWallMode] failed 一类错误日志
  2. 抛出 CollectingConfigurationErrorDesc(参数为失败项名,对齐 ipmi_core error(custom_messages.CollectingConfigurationErrorDesc(k))),OMS 将本次导入标为失败
  3. 已处理成功的项保留,后续项不再执行

type="custom" 不走此路径,单项失败不影响其它项。

Com

Com 配置项用于导入导出 IPMI 公共配置,包含:

  • ManufacturerID:写入 IpmiCore.CustomManufacturerId
  • FireWallMode:写入共享内存 bw_mode 及 Firewall.Mode 属性

导入数据结构

{
  "Com": {
    "ManufacturerID": {
      "Import": true,
      "Value": 4660
    },
    "FireWallMode": {
      "Import": true,
      "Value": 0
    }
  }
}

上例 ManufacturerID.Value 为十进制 4660,对应厂商 ID 0x001234;FireWallMode.Value 为 0(黑名单模式)。

导出数据结构

{
  "Com": {
    "ManufacturerID": 4660,
    "FireWallMode": 0
  }
}

导出为当前属性/运行时值的标量,不含 Import 字段。

ManufacturerID(厂商 ID)

导入字段说明
字段 说明
ManufacturerID.Import 是否导入厂商 ID(bool);为 false 时忽略 Value
ManufacturerID.Value 厂商 ID(uint32),有效范围 0~0xFFFFFF(24 位)
导出字段说明
字段 说明
ManufacturerID 当前 CustomManufacturerId(uint32)
校验与默认值
项 说明
有效范围 0 ≤ Value ≤ 0xFFFFFF;超出范围记录错误日志、不更新属性,并抛出 CollectingConfigurationErrorDesc 中止后续导入
默认值 未导入或 Import=false 时保持现有属性;新建 IpmiCore 默认为 0x0007db
使用场景

场景1:配置导出

  • 导出备份或迁移时包含当前厂商 ID

场景2:配置导入

  • Import=true 且 Value 合法时写入 CustomManufacturerId

场景3:配置恢复

  • 从备份恢复厂商 ID,与通道配置一并导入

FireWallMode(防火墙模式)

导入字段说明
字段 说明
FireWallMode.Import 是否导入防火墙模式(bool);为 false 时忽略 Value
FireWallMode.Value 防火墙模式(uint8):0 黑名单,1 白名单,255(0xFF)关闭
导出字段说明
字段 说明
FireWallMode 当前防火墙模式(uint8),与 bw_list_mgr::get_firewall_mode() 一致
校验与默认值
项 说明
有效取值 0、1、255(0xFF);其余值拒绝并保持原模式,抛出 CollectingConfigurationErrorDesc 中止后续导入
默认值 未导入或 Import=false 时保持当前模式;新建系统默认为关闭(0xFF)
副作用 导入成功后同步更新 Firewall 对象的 Mode 属性(对象存在时)
使用场景

场景1:配置导出

  • 备份或迁移时导出当前防火墙模式

场景2:配置导入

  • Import=true 且 Value 合法时切换黑/白/关闭模式

场景3:配置恢复

  • 从备份恢复防火墙策略,与通道、厂商 ID 配置一并导入

说明:导入导出仅覆盖防火墙模式,不包含自定义黑/白名单条目;名单条目通过 IPMI BWListAddDel 或 D-Bus Firewall 接口维护。

IPMIChannel

IPMIChannel 配置项包含通道权限和通道编号映射两个子配置项。

导入数据结构

导入数据采用分层结构,包含 IPMIChannelAccess 和 NCSILanChannelNumber 两个配置项:

{
  "IPMIChannel": {
    "IPMIChannelAccess": {
      "ICMBAccessRole": {"Import": true, "Value": 3},
      "IPMBAccessRole": {"Import": true, "Value": 2},
      "SMSAccessRole": {"Import": true, "Value": 4}
    },
    "NCSILanChannelNumber": {
      "Import": true,
      "Value": 6
    }
  }
}

导出数据结构

导出数据同样采用分层结构,包含当前通道权限和通道编号配置:

{
  "IPMIChannel": {
    "IPMIChannelAccess": {
      "ICMBAccessRole": 3,
      "IPMBAccessRole": 2,
      "SMSAccessRole": 4
    },
    "NCSILanChannelNumber": 6
  }
}

IPMIChannelAccess(通道权限)

IPMIChannelAccess 配置项用于导入导出通道权限角色配置。

导入字段说明
字段 说明
ICMBAccessRole.Import 是否导入 ICMB 通道角色配置(bool)
ICMBAccessRole.Value ICMB 通道角色编号(uint8):0=NoAccess, 2=User, 3=Operator, 4=Administrator
IPMBAccessRole.Import 是否导入 IPMB 通道角色配置(bool)
IPMBAccessRole.Value IPMB 通道角色编号(uint8)
SMSAccessRole.Import 是否导入 SMS 通道角色配置(bool)
SMSAccessRole.Value SMS 通道角色编号(uint8)
导出字段说明

导出数据包含当前所有通道的角色编号:

字段 说明
ICMBAccessRole ICMB 通道当前角色编号(uint8)
IPMBAccessRole IPMB 通道当前角色编号(uint8)
SMSAccessRole SMS 通道当前角色编号(uint8)
使用场景

场景1:配置导出

  • 用户通过 BMC 管理界面导出配置
  • 系统调用 export_data() 获取当前配置
  • 通道权限数据被序列化并保存到文件

场景2:配置导入

  • 用户通过 BMC 管理界面导入配置
  • 系统解析配置文件并调用 import_data()
  • 指定 Import=true 的通道权限配置被应用到系统

场景3:配置恢复

  • BMC 重装或恢复出厂设置后
  • 从备份配置文件导入恢复配置
  • 通道权限恢复到之前的状态

NCSILanChannelNumber(通道编号映射)

NCSILanChannelNumber 配置项用于导入导出通道编号映射配置。

导入字段说明
字段 说明
NCSILanChannelNumber.Import 是否导入通道编号配置(bool)
NCSILanChannelNumber.Value LAN2 通道的目标外部编号(uint8)
导出字段说明

导出数据包含当前 LAN2 通道的外部编号:

字段 说明
NCSILanChannelNumber LAN2 通道当前外部编号(uint8)
使用场景

场景1:配置导出

  • 用户通过 BMC 管理界面导出配置
  • 系统调用 export_data() 获取当前配置
  • 通道编号映射数据被序列化并保存到文件

场景2:配置导入

  • 用户通过 BMC 管理界面导入配置
  • 系统解析配置文件并调用 import_data()
  • 指定 Import=true 的通道编号配置被应用到系统

场景3:配置恢复

  • BMC 重装或恢复出厂设置后
  • 从备份配置文件导入恢复配置
  • 通道编号映射恢复到之前的状态

定制化引擎

设计目标

定制化引擎用于支持装备定制化功能,允许根据装备型号定制通道权限配置、通道编号配置、厂商 ID 和防火墙模式。支持自定义配置和恢复默认配置。

接口定义

namespace ipmi_mgmt::customize_engine {
    void import_data(const mc::dict& datas);
    mc::dict export_data();
}

厂商 ID 定制

厂商 ID 定制用于根据装备型号设置 IPMI 自定义厂商 ID,写入 IpmiCore.CustomManufacturerId。

导入数据结构

定制化数据通过 CustomSettings 传入:

{
  "BMCSet_IpmiCustomManuID": {
    "Value": 43981
  }
}

上例 Value 为十进制 43981,对应厂商 ID 0x00ABCD。

导出数据结构

{
  "BMCSet_IpmiCustomManuID": 43981
}

导出为当前 CustomManufacturerId 数值,字段结构与通道定制项一致(导出为标量,导入为 {"Value": ...})。

导入字段说明

字段 说明
BMCSet_IpmiCustomManuID.Value 定制厂商 ID(uint32),有效范围 0~0xFFFFFF
不存在该字段 不修改当前厂商 ID

导出字段说明

字段 说明
BMCSet_IpmiCustomManuID 当前 CustomManufacturerId(uint32)

校验与默认值

项 说明
有效范围 0 ≤ Value ≤ 0xFFFFFF;超出范围记录错误日志且不更新属性
默认值 IpmiCore 默认 0x0007db;未配置定制项时导出反映当前属性值

使用场景

场景1:装备定制化

  • 按装备型号写入指定厂商 ID

场景2:定制配置导出

  • 导出当前定制厂商 ID 供备份或装备模板复用

防火墙模式定制

防火墙模式定制用于装备出厂时预设 IPMI 黑白名单策略开关,写入共享内存 bw_mode 及 Firewall.Mode。

导入数据结构

定制化数据通过 CustomSettings 传入,须同时提供状态与模式:

{
  "BMCSet_FirewallStatus": {"Value": 1},
  "BMCSet_FireWallMode": {"Value": 0}
}
组合 BMCSet_FirewallStatus BMCSet_FireWallMode 含义
开启黑名单 1 0 黑名单模式
开启白名单 1 1 白名单模式
关闭防火墙 0 255 关闭自定义策略

导出数据结构

{
  "BMCSet_FireWallMode": 0,
  "BMCSet_FirewallStatus": 1
}

关闭时导出示例:BMCSet_FireWallMode 为 255,BMCSet_FirewallStatus 为 0。

导入字段说明

字段 说明
BMCSet_FirewallStatus.Value 开关状态:0 关闭,1 开启
BMCSet_FireWallMode.Value 模式:0 黑名单,1 白名单,255 关闭

导出字段说明

字段 说明
BMCSet_FireWallMode 当前模式(uint8)
BMCSet_FirewallStatus 当前开关:0 当模式为关闭,1 否则

校验与一致性

项 说明
有效 Status 仅 0、1
有效 Mode 0、1、255
一致性 Status=0 时 Mode 必须为 255;Status=1 时 Mode 不得为 255
不一致处理 Status 与 Mode 矛盾时记录错误日志,不更新当前模式

使用场景

场景1:装备定制化

  • 按型号预设黑名单或白名单策略(如带内通信默认黑名单)

场景2:关闭防火墙定制

  • 设置 BMCSet_FirewallStatus=0、BMCSet_FireWallMode=255

场景3:定制配置导出

  • 导出当前 BMCSet_FireWallMode / BMCSet_FirewallStatus 供装备模板复用

通道权限定制

通道权限定制用于根据装备型号需求定制各通道的访问权限角色。

导入数据结构

定制化数据包含开关标志和角色配置:

{
  "BMCSet_IPMIChannelAccessEnabled": {"Value": "on"},
  "Custom_ICMBAccessRole": {"Value": 3},
  "Custom_IPMBAccessRole": {"Value": 2},
  "Custom_SMSAccessRole": {"Value": 4}
}
导入字段说明

定制开关:

字段 说明
BMCSet_IPMIChannelAccessEnabled.Value 定制开关状态:"on"=启用定制,"off"=恢复默认
不存在该字段 默认恢复默认配置

角色配置:

字段 说明
Custom_ICMBAccessRole.Value ICMB 通道自定义角色编号(uint8)
Custom_IPMBAccessRole.Value IPMB 通道自定义角色编号(uint8)
Custom_SMSAccessRole.Value SMS 通道自定义角色编号(uint8)

导出数据结构

导出数据包含当前各通道的角色编号:

{
  "Custom_ICMBAccessRole": 3,
  "Custom_IPMBAccessRole": 2,
  "Custom_SMSAccessRole": 4
}
导出字段说明
字段 说明
Custom_ICMBAccessRole ICMB 通道当前角色编号(uint8)
Custom_IPMBAccessRole IPMB 通道当前角色编号(uint8)
Custom_SMSAccessRole SMS 通道当前角色编号(uint8)

默认角色配置

系统预定义了默认通道角色:

通道类型 默认角色 角色编号
ICMB Administrator 4
IPMB Operator 3
SMS Operator 3

使用场景

场景1:装备定制化

  • 根据装备型号需求定制通道权限
  • 配置 BMCSet_IPMIChannelAccessEnabled="on"
  • 设置各通道的 Custom_*AccessRole
  • 应用定制配置到系统

场景2:恢复默认配置

  • 用户或系统需要恢复默认通道权限
  • 配置 BMCSet_IPMIChannelAccessEnabled="off"
  • 或不配置该字段
  • 所有通道恢复为默认角色

场景3:定制配置导出

  • 导出当前定制化配置供备份或查看
  • 调用 export_data() 获取定制数据
  • 定制数据可用于配置验证或重新应用

通道编号映射定制

通道编号映射定制用于根据装备型号需求定制 LAN2 通道的对外编号。

导入数据结构

定制化数据包含通道编号配置:

{
  "Custom_ChannelNumber": {"Value": 6}
}
导入字段说明
字段 说明
Custom_ChannelNumber.Value LAN2 通道自定义外部编号(uint8)

导出数据结构

导出数据包含当前 LAN2 通道的外部编号:

{
  "Custom_ChannelNumber": 6
}
导出字段说明
字段 说明
Custom_ChannelNumber LAN2 通道当前外部编号(uint8)

使用场景

场景1:通道编号定制化

  • 根据装备型号需求定制通道编号
  • 设置 Custom_ChannelNumber 为目标编号
  • 应用定制配置到系统

场景2:定制配置导出

  • 导出当前定制化配置供备份或查看
  • 调用 export_data() 获取定制数据
  • 定制数据可用于配置验证或重新应用