【已评审】支持182x大板网卡的复位或上下电,新增标准Redfish接口,变更资源协作接口

背景

182x大板场景中,当带内发生复位时,需要联动复位182x网卡芯片。网管接口通过调用Redfish接口完成这一联动复位操作,因此需要BMC侧提供该Redfish接口,实现对指定网卡芯片进行复位或上下电的功能。同时组件内资源协作接口需要新增复位方法,以实现网卡芯片具体的复位或上下电功能。

关联ISSUE

[需求]: 支持182x大板上网卡182x芯片复位或上下电

整体方案

182x大板场景中,每个网卡芯片的网络适配器信息保存在资源协作接口的/bmc/kepler/Systems/1/NetworkAdapters路径下,每个网络适配器对象对应一个网卡芯片,不同的网卡芯片通过bmc.kepler.Systems.NetworkAdapter接口下的SlotNumber属性进行区分。

为实现182x网卡芯片的复位或上下电功能,该网卡的sr文件中会预先为每个芯片定义一个Accessor对象,并将该对象与对应的网络适配器进行关联。通过访问关联的Accessor,即可通过CPLD操作对应的网卡芯片,从而执行复位或上下电操作。

当网管需要对一个182x网卡芯片进行复位或上下电时,其会通过Redfish接口访问待操作的网卡芯片对象,并调用该对象所在路径下的NetworkAdapter.Reset接口。Redfish接口根据所访问的路径,在资源树中查询到该网卡芯片对应对的网络适配器信息,并调用该网络适配器下bmc.kepler.Systems.NetworkAdapter接口中的Reset方法。Reset方法将根据sr文件的配置,找到该网络适配器对象对应的Accessor,并向该Accessor写入数据,从而完成复位或上下电操作。

基于以上整体方案设计,需要新增以及变更以下接口:

  1. 新增标准Redfish接口NetworkAdapter.Reset用于182x大板网卡的复位或上下电
  2. 资源协作接口bmc.kepler.Systems.NetworkAdapter新增Reset方法用于执行复位或上下电动作

评审点一 新增标准Redfish接口:NetworkAdapter资源新增Action

资源URI:/redfish/v1/Chassis/:chassisid/NetworkAdapters/:networkadapterid/Actions/NetworkAdapter.Reset
资源版本:networkadapter.v1_12_1
操作权限:PowerMgmt
请求参数

{
    "ResetType": "GracefulRestart"         // 复位类型
}
参数名 类型 必填 示例/取值约束 描述
ResetType string 枚举值:
GracefulRestart(优雅复位)
ForceOff(强制下电)
ForceOn(强制上电)
复位类型

复位类型的取值约束来自于下发命令后,CPLD对网卡可能执行的各种动作。下发每种复位类型后,底层CPLD对网卡执行的最终动作如下:

  1. GracefulRestart:下发该命令时,CPLD向网卡发出命令,通知网卡开始保存日志。网卡完成日志保存后会回复CPLD已完成,CPLD收到该信号后再向网卡发出复位命令。
  2. ForceOff:下发该命令时,CPLD立刻对网卡电源依次下电。
  3. ForceOn:下发该命令时,CPLD立刻对网卡电源依次上电。

ActionInfo

{
    "@odata.context": "/redfish/v1/$metadata#ActionInfo.ActionInfo",
    "@odata.id": "/redfish/v1/Chassis/:chassisid/NetworkAdapters/:networkadapterid/ResetActionInfo",
    "@odata.type": "#ActionInfo.v1_0_1.ActionInfo",
    "Id": "ResetActionInfo",
    "Name": "Reset Action Info",
    "Parameters": [
        {
            "Name": "ResetType",
            "Required": true,
            "DataType": "String",
            "AllowableValues": [
                "GracefulRestart",
                "ForceOff",
                "ForceOn"
            ]
        }
    ],
    "Oem": {}
}

Schema定义

"Reset": {
    "additionalProperties": false,
    "description": "This action resets the network adapter.",
    "longDescription": "This action shall reset a network adapter.",
    "parameters": {
        "ResetType": {
            "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/ResetType",
            "description": "The type of reset.",
            "longDescription": "This parameter shall contain the type of reset.  The service can accept a request without the parameter and shall perform a `GracefulRestart`."
        }
    },
    "patternProperties": {
        "^([a-zA-Z_][a-zA-Z0-9_]*)?@(odata|Redfish|Message)\\.[a-zA-Z_][a-zA-Z0-9_]*$": {
            "description": "This property shall specify a valid odata or Redfish property.",
            "type": [
                "array",
                "boolean",
                "integer",
                "number",
                "null",
                "object",
                "string"
            ]
        }
    },
    "properties": {
        "target": {
            "description": "Link to invoke action",
            "format": "uri-reference",
            "type": "string"
        },
        "title": {
            "description": "Friendly action name",
            "type": "string"
        }
    },
    "type": "object",
    "versionAdded": "v1_11_0"
}

评审点二 变更资源协作接口bmc.kepler.Systems.NetworkAdapter

变更描述:在该资源协作接口下新增方法Reset,新增的该方法承载对该接口所属的网络适配器进行复位或上下电的功能。
接口链接bmc.kepler.Systems.NetworkAdapter接口定义

方法评审点

变更类型 方法名称 请求签名 请求参数描述 响应签名 响应参数描述 方法描述 访问权限 变更影响
新增 Reset s ResetType:表示需要执行的复位或上下电动作,取值如下:
GracefulRestart(优雅复位)
ForceOff(强制下电)
ForceOn(强制上电)
NA NA 对网络适配器执行复位或上下电操作 PowerMgmt 新增方法,无影响

该方法可能返回的错误原因如下:

  1. 当前操作的网络适配器对象,不存在与之对应的Accessor对象。(说明当前操作的网络适配器不支持复位或上下电操作)
  2. 向对应的Accessor对象写入值进行复位或上下电操作时,写入操作返回了失败。

发生以上错误时,方法返回的错误信息如下。以下错误信息均来自于base.json文件中的已有定义:

当前操作的网络适配器对象,不存在与之对应的Accessor对象:

"ActionNotSupported": {
    "Description": "Indicates that the action supplied with the POST operation is not supported by the resource.",
    "Message": "The action %1 is not supported by the resource.",
    "Severity": "Critical",
    "NumberOfArgs": 1,
    "ParamTypes": [
        "string"
    ],
    "Resolution": "The action supplied cannot be resubmitted to the implementation.  Perhaps the action was invalid, the wrong resource was the target or the implementation documentation may be of assistance.",
    "HttpStatusCode": 400,
    "IpmiCompletionCode": "0xFF",
    "SnmpStatusCode": 10,
    "TraceDepth": 0
}

向对应的Accessor对象写入值进行复位或上下电操作时,写入操作返回了失败:

"InternalError": {
    "Description": "Indicates that the request failed for an unknown internal error but that the service is still operational.",
    "Message": "The request failed due to an internal service error.  The service is still operational.",
    "Severity": "Critical",
    "NumberOfArgs": 0,
    "Resolution": "Resubmit the request.  If the problem persists, consider resetting the service.",
    "HttpStatusCode": 500,
    "IpmiCompletionCode": "0xFF",
    "SnmpStatusCode": 5,
    "TraceDepth": 0
}

接口变更影响

路径 接口变更影响 CSR配置影响 持久化影响 其他影响
/bmc/kepler/Systems/:systemid/NetworkAdapters/:id 新增Reset方法,用于对网络适配器执行复位或上下电操作 不涉及重名属性,无影响 不涉及新增和废弃主键,无兼容性问题 须实现新增方法

评审结论

  1. 同意新增redfish标准接口/redfish/v1/Chassis/:chassisid/NetworkAdapters/:networkadapterid/Actions/NetworkAdapter.Reset,该接口权限为PowerMgmt,接收string类型的枚举值入参(GracefulRestart、ForceOff、ForceOn),功能为操作接口对应的Processor执行复位或上下电。
  2. 同意资源协作接口bmc.kepler.Systems.NetworkAdapter下新增方法Reset,方法请求签名为s,无响应签名。方法的访问权限为PowerMgmt。当方法执行出现异常时,可能抛出的异常信息有ActionNotSupported和InternalError。

遗留问题

1. 与硬件确认底层CPLD对网卡最终进行复位或上下电的动作是优雅复位等还是其他情况,并确保中英文一致。

与硬件确认,当通过Accessor下发复位命令时,CPLD向网卡发出命令,通知网卡开始保存日志。网卡完成日志保存后会回复CPLD已完成,CPLD收到该信号后再向网卡发出复位命令。下发上下电命令时,CPLD立刻对网卡电源依次上电/下电。因此接口实现的复位或上下电功能为GracefulRestart、ForceOff、ForceOn,对应中文优雅复位、强制下电、强制上电。

2. 与需求方确认资源协作接口bmc.kepler.Systems.NetworkAdapter下新增Reset方法的访问权限

已确认,需要该接口访问权限为PowerMgmt。

3. 明确通用硬件和异构算力子系统的责任边界,确认Reset方法是否在bmc.kepler.Systems.NetworkAdapter下新增

已确认,Redfish接口和资源协作接口内的新增方法均在NetworkAdapter下新增。

1、ResetType的举证枚举值:
改为:GracefulRestart、GracefulShutdown、On
2、Reset方法返回值,不要自定义,通过抛异常实现;

@lisongwei
【预审】新增的资源协作接口方法如果通过 error 引擎生成响应错误,则需要补充方法有可能返回的所有的错误消息,以及错误消息产生的原因