【已评审】新增NetworkDeviceFunctionMetrics/Port相关资源标准接口

背景

当前redfish标准接口存在缺失,需要评审新增redfish标准接口以及资源协作接口属性。

关联ISSUE

NetworkDeviceFunctionMetrics相关资源支持redfish新标准
ThermalEquipment相关资源支持redfish新标准
ThermalSubsystem相关资源支持redfish新标准
Port相关资源支持redfish新标准

评审点

评审点1:
新增URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/NetworkDeviceFunctions/{NetworkDeviceFunctionId}/Metrics

评审点2:
在 /redfish/v1 资源下新增ThermalEquipment属性
新增URI:/redfish/v1/ThermalEquipment

评审点3:
/redfish/v1/Chassis/{ChassisId}/ThermalSubsystem 资源下新增属性

评审点4:
新增URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports

评审点5:
新增URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports/{PortId}

详细描述

评审点1:
URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/NetworkDeviceFunctions/{NetworkDeviceFunctionId}/Metrics
变化类型:新增URI
操作类型:GET
应用场景:Redfish 接口查询网络设备功能下的流量度量指标

属性名称 类型 易变属性 读写 & 权限 默认值 属性说明
@odata.context string 只读,读权限:ReadOnly /redfish/v1/$metadata#NetworkDeviceFunctionMetrics.NetworkDeviceFunctionMetrics 网络设备功能度量信息资源模型的 OData 描述信息
@odata.id string 只读,读权限:ReadOnly /redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/NetworkDeviceFunctions/{NetworkDeviceFunctionId}/Metrics 网络设备功能度量信息资源的访问路径
@odata.type string 只读,读权限:ReadOnly #NetworkDeviceFunctionMetrics.v1_2_0.NetworkDeviceFunctionMetrics 网络设备功能度量信息资源的类型
Name string 只读,读权限:ReadOnly Network Device Function Metrics 网络设备功能度量信息资源名称
Id string 只读,读权限:ReadOnly NetworkDeviceFunctionMetrics 网络设备功能度量信息资源 ID
RXFrames integer 只读,读权限:ReadOnly 网络设备功能接收到的帧总数
RXMulticastFrames integer 只读,读权限:ReadOnly 网络设备功能接收到的多播帧数量
RXUnicastFrames integer 只读,读权限:ReadOnly 网络设备功能接收到的单播帧数量
TXFrames integer 只读,读权限:ReadOnly 网络设备功能发送的帧总数
TXMulticastFrames integer 只读,读权限:ReadOnly 网络设备功能发送的多播帧数量
TXUnicastFrames integer 只读,读权限:ReadOnly 网络设备功能发送的单播帧数量

schema说明:
新增schema文件NetworkDeviceFunctionMetrics.v1_2_0.json

                "RXFrames": {
                    "description": "The total number of frames received on a network function.",
                    "longDescription": "This property shall contain the total number of frames received on a network function.",
                    "readonly": true,
                    "type": [
                        "integer",
                        "null"
                    ]
                },

                "RXMulticastFrames": {
                    "description": "The total number of good multicast frames received on a network function since reset.",
                    "longDescription": "This property shall contain the total number of good multicast frames received on a network function since reset, including host and remote management passthrough traffic.",
                    "readonly": true,
                    "type": [
                        "integer",
                        "null"
                    ]
                },

                "RXUnicastFrames": {
                    "description": "The total number of good unicast frames received on a network function since reset.",
                    "longDescription": "This property shall contain the total number of good unicast frames received on a network function since reset.",
                    "readonly": true,
                    "type": [
                        "integer",
                        "null"
                    ]
                },

                "TXFrames": {
                    "description": "The total number of frames sent on a network function.",
                    "longDescription": "This property shall contain the total number of frames sent on a network function.",
                    "readonly": true,
                    "type": [
                        "integer",
                        "null"
                    ]
                },

                "TXMulticastFrames": {
                    "description": "The total number of good multicast frames transmitted on a network function since reset.",
                    "longDescription": "This property shall contain the total number of good multicast frames transmitted on a network function since reset, including host and remote management passthrough traffic.",
                    "readonly": true,
                    "type": [
                        "integer",
                        "null"
                    ]
                },

                "TXUnicastFrames": {
                    "description": "The total number of good unicast frames transmitted on a network function since reset.",
                    "longDescription": "This property shall contain the total number of good unicast frames transmitted on a network function since reset, including host and remote management passthrough traffic.",
                    "readonly": true,
                    "type": [
                        "integer",
                        "null"
                    ]
                }

RspBody响应体示例:

{
    "@odata.context": "/redfish/v1/$metadata#NetworkDeviceFunctionMetrics.NetworkDeviceFunctionMetrics",
    "@odata.id": "/redfish/v1/Chassis/1/NetworkAdapters/chassisNIC1(SF221Q)/NetworkDeviceFunctions/4/Metrics",
    "@odata.type": "#NetworkDeviceFunctionMetrics.v1_2_0.NetworkDeviceFunctionMetrics",
    "Id": "NetworkDeviceFunctionMetrics",
    "Name": "Network Device Function Metrics",
    "RXFrames": 0,
    "RXMulticastFrames": 4,
    "RXUnicastFrames": 4,
    "TXFrames": 0,
    "TXMulticastFrames": 2,
    "TXUnicastFrames": 3
}

评审点2:

URI: /redfish/v1(已有)
变化类型:新增ThermalEquipment属性
应用场景:redfish接口获取ThermalEquipment相关资源集合信息

一级属性 二级属性 类型 操作权限 默认值 属性说明
ThermalEquipment object ReadOnly 包含服务器所有冷却硬件集合的 ThermalEquipment 类型资源
@odata.id string ReadOnly /redfish/v1/ThermalEquipment ThermalEquipment 资源的访问路径

URI:/redfish/v1/ThermalEquipment
变化类型:新增URI
操作类型:GET
应用场景:redfish接口获取ThermalEquipment相关资源集合信息

一级属性 二级属性 类型 操作权限 默认值 属性说明
CoolingLoopRedundancy array ReadOnly 此属性应包含与此设备相连的一组冷却回路的冗余信息,为 CoolingLoops 组成冗余组的信息
Status object ReadOnly 该资源及其从属或附属部分的状况和健康状况资源
State string ReadOnly Enabled 该资源及其从属或附属部分的状况
Health string ReadOnly OK 该资源及其从属或附属部分的健康状况

schema说明:
新增schema文件ThermalEquipment.v1_2_0.json


                "CoolingLoopRedundancy": {
                    "description": "The redundancy information for cooling loops attached to this equipment.",
                    "items": {
                        "$ref": "http://redfish.dmtf.org/schemas/v1/Redundancy.json#/definitions/RedundantGroup"
                    },
                    "longDescription": "This property shall contain redundancy information for the set of cooling loops attached to this equipment.  The values of the `RedundancyGroup` array shall reference resources of type `CoolingLoop`.",
                    "type": "array",
                    "versionAdded": "v1_1_0"
                },

                "Status": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Status",
                    "description": "The status and health of the resource and its subordinate or dependent resources.",
                    "longDescription": "This property shall contain any status or health properties of the resource."
                }

RspBody响应体示例:

{
    "@odata.context": "/redfish/v1/$metadata#ThermalEquipment.ThermalEquipment",
    "@odata.id": "/redfish/v1/ThermalEquipment",
    "@odata.type": "#ThermalEquipment.v1_2_0.ThermalEquipment",
    "Id": "ThermalEquipment",
    "Name": "Cooling Equipment",
    "CoolingLoopRedundancy": [],
    "Status": {
        "State": "Enabled",
        "HealthRollup": "OK"
    }
}

评审点3:
URI:/redfish/v1/Chassis/{ChassisId}/ThermalSubsystem(已有)
变化类型:新增属性

属性名称 类型 操作权限 易变属性 属性说明
CoolantConnectorRedundancy array ReadOnly 本子系统中冷却器连接器的冗余信息 。该属性应包含连接到此设备的冷却器连接器集合的冗余信息,冗余组数组内的值需引用冷却器连接器类型的资源。

schema说明:
schema文件ThermalSubsystem.v1_3_2.json

              "CoolantConnectorRedundancy": {
                    "description": "The redundancy information for the coolant connectors in this subsystem.",
                    "items": {
                        "$ref": "http://redfish.dmtf.org/schemas/v1/Redundancy.json#/definitions/RedundantGroup"
                    },
                    "longDescription": "This property shall contain redundancy information for the set of coolant connectors attached to this equipment.  The values of the `RedundancyGroup` array shall reference resources of type `CoolantConnector`.",
                    "type": "array",
                    "versionAdded": "v1_3_0"
                },


RspBody响应体示例:

{
    "@odata.context": "/redfish/v1/$metadata#ThermalSubsystem.ThermalSubsystem",
    "@odata.id": "/redfish/v1/Chassis/1/ThermalSubsystem",
    "@odata.type": "#ThermalSubsystem.v1_3_2.ThermalSubsystem",
    "CoolantConnectorRedundancy": [],
    "Id": "ThermalSubsystem",
    "Name": "ThermalSubsystem"
}

评审点4:
URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports
变化类型:新增URI
操作类型:GET
应用场景:redfish 接口查询网络适配器下的端口资源集合信息

属性名称 类型 操作权限 默认值 属性说明
@odata.id string ReadOnly /redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports 端口集合资源的访问路径
@odata.type string ReadOnly #PortCollection.PortCollection 端口集合资源的类型标识
Name string ReadOnly Port Collection 端口集合资源的名称
Members array ReadOnly 指向 Port 集合中各个 Port 资源的链接数组
Members@odata.count integer ReadOnly Members 数组中 Port 资源的数量

评审点5:
URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports/{PortId}
变化类型:新增URI
操作类型:GET
应用场景:redfish接口获取Port相关资源集合信息

一级属性 二级属性 三级属性 类型 枚举范围 操作权限 默认值 属性说明
@odata.context string ReadOnly /redfish/v1/$metadata#Port.Port 单个端口资源模型的 OData 描述信息
@odata.id string ReadOnly /redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports/{PortId} 单个端口资源的访问路径
@odata.type string ReadOnly #Port.v1_16_0.Port 单个端口资源的类型标识
Name string ReadOnly ${Uri/portid} 单个端口资源的名称
Id string ReadOnly ${Uri/portid} 单个端口资源的唯一标识
LinkStatus string [“LinkUp”,“NoLink”,“LinkDown”] ReadOnly 端口当前的链路连接状态
LinkNetworkTechnology string [“Ethernet”,“InfiniBand”,“FibreChannel”] ReadOnly 该端口当前使用的链路网络技术类型
CurrentSpeedGbps integer ReadOnly 该端口当前协商运行的速率,单位为 Gbit/s
Ethernet object ReadOnly 该端口的以太网相关配置与状态信息
AssociatedMACAddresses array ReadOnly 与该网络端口关联的已配置 MAC 地址数组
LLDPEnabled boolean ReadWrite 该端口的 LLDP 协议功能启用状态
LLDPReceive object ReadOnly 从网络交换机接收到的 LLDP 协议相关信息
ChassisId string ReadOnly 从网络交换机接收到的机箱标识 ID
ChassisIdSubtype string [“ChassisComp”,“IfAlias”,“PortComp”,“MacAddr”,“NetworkAddr”,“IfName”,“LocalAssign”] ReadOnly 从网络交换机接收到的机箱标识类型
ManagementVlanId integer ReadOnly 从网络交换机接收到的管理 VLAN 编号
PortId string ReadOnly 从网络交换机接收到的端口标识 ID
PortIdSubtype string [“IfAlias”,“PortComp”,“MacAddr”,“NetworkAddr”,“IfName”,“AgentId”,“LocalAssign”] ReadOnly 从网络交换机接收到的端口标识类型
SystemName string ReadOnly 从网络交换机接收到的设备系统名称
Metrics object ReadOnly 该端口的度量指标相关子资源
@odata.id string ReadOnly /redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports/{PortId}/Metrics 端口度量指标子资源的访问路径

schema说明:
新增schema文件Port.v1_16_0.json

                "Status": {
                    "$ref": "http://redfish.dmtf.org/schemas/v1/Resource.json#/definitions/Status",
                    "description": "The status and health of the resource and its subordinate or dependent resources.",
                    "longDescription": "This property shall contain any status or health properties of the resource.",
                    "versionAdded": "v1_4_0"
                },

                "LinkStatus": {
                    "$ref": "#/definitions/LinkStatus",
                    "description": "The link status for this interface.",
                    "longDescription": "This property shall contain the link status for this interface.",
                    "readonly": true,
                    "versionAdded": "v1_2_0"
                },

                "LinkNetworkTechnology": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/LinkNetworkTechnology"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "description": "The link network technology for this link configuration.",
                    "longDescription": "This property shall contain the link network technology for this link configuration.",
                    "readonly": true,
                    "versionAdded": "v1_16_0"
                },

                "CurrentSpeedGbps": {
                    "description": "The current speed of this port.",
                    "longDescription": "This property shall contain the unidirectional speed of this port currently negotiated and running.  This value includes overhead associated with the protocol.",
                    "readonly": true,
                    "type": [
                        "number",
                        "null"
                    ],
                    "units": "Gbit/s"
                },

                "AssociatedMACAddresses": {
                    "description": "An array of configured MAC addresses that are associated with this network port, including the programmed address of the lowest-numbered network device function, the configured but not active address, if applicable, the address for hardware port teaming, or other network addresses.",
                    "items": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "longDescription": "This property shall contain an array of configured MAC addresses that are associated with this network port, including the programmed address of the lowest-numbered network device function, the configured but not active address if applicable, the address for hardware port teaming, or other network addresses.",
                    "pattern": "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$",
                    "readonly": true,
                    "type": "array",
                    "versionAdded": "v1_4_0"
                },

                "LLDPEnabled": {
                    "description": "Enable/disable LLDP for this port.",
                    "longDescription": "This property shall contain the state indicating whether to enable LLDP for a port.  If LLDP is disabled at the adapter level, this property shall be ignored.",
                    "readonly": false,
                    "type": "boolean",
                    "versionAdded": "v1_4_0"
                },

                "ChassisId": {
                    "description": "Link Layer Data Protocol (LLDP) chassis ID.",
                    "longDescription": "This property shall contain the chassis ID to be transmitted from this endpoint.  If no such chassis ID is to be transmitted, this value shall be an empty string.",
                    "readonly": false,
                    "type": [
                        "string",
                        "null"
                    ],
                    "versionAdded": "v1_4_0"
                },

                "ChassisIdSubtype": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/IEEE802IdSubtype"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "description": "The type of identifier used for the chassis ID received from the remote partner across this link.",
                    "longDescription": "This property shall contain the IEEE 802.1AB-2009 chassis ID subtype received from the remote partner across this link.  If no such chassis ID subtype has been received, this property should not be present.",
                    "readonly": true,
                    "versionAdded": "v1_4_0"
                },

                "ManagementVlanId": {
                    "description": "The management VLAN ID received from the remote partner across this link.",
                    "longDescription": "This property shall contain the management VLAN ID received from the remote partner across this link.  If no such management VLAN ID has been received, this property should not be present.",
                    "maximum": 4095,
                    "minimum": 0,
                    "readonly": true,
                    "type": [
                        "integer",
                        "null"
                    ],
                    "versionAdded": "v1_4_0"
                },
                "PortId": {
                    "description": "A colon-delimited string of hexadecimal octets identifying a port.",
                    "longDescription": "This property shall contain a colon-delimited string of hexadecimal octets identifying the port received from the remote partner across this link.  If no such port ID has been received, this property should not be present.",
                    "pattern": "^([0-9A-F]{2})([:]([0-9A-F]){2}){0,63}$",
                    "readonly": true,
                    "type": [
                        "string",
                        "null"
                    ],
                    "versionAdded": "v1_4_0"
                },
                "PortIdSubtype": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/IEEE802IdSubtype"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "description": "The port ID subtype received from the remote partner across this link.",
                    "longDescription": "This property shall contain the port ID subtype from IEEE 802.1AB-2009 Table 8-3 received from the remote partner across this link.  If no such port ID subtype has been received, this property should not be present.",
                    "readonly": true,
                    "versionAdded": "v1_4_0"
                },

                "SystemName": {
                    "description": "The system name received from the remote partner across this link.",
                    "longDescription": "This property shall contain the system name received from the remote partner across this link.  If no such system name has been received, this property shall not be present.",
                    "readonly": true,
                    "type": [
                        "string",
                        "null"
                    ],
                    "versionAdded": "v1_8_0"
                }



RspBody响应体示例:

{
    "@odata.context": "/redfish/v1/$metadata#Port.Port",
    "@odata.id": "/redfish/v1/Chassis/1/NetworkAdapters/chassisNIC1(SF221Q)/Ports/1",
    "@odata.type": "#Port.v1_16_0.Port",
    "Id": "1",
    "Name": "1",
    "LinkStatus": "Disconnected",
    "LinkNetworkTechnology": "Ethernet",
    "CurrentSpeedGbps": 4294967.295,
    "Ethernet": {
        "AssociatedMACAddresses": [
            "B0:4F:A6:FD:5D:B7"
        ],
        "LLDPEnabled": false,
        "LLDPReceive": {
            "ChassisId": "123",
            "ChassisIdSubtype": "3",
            "ManagementVlanId": 0,
            "PortId": "PortId",
            "PortIdSubtype": "Subtype",
            "SystemName": "SystemName"
        }
    },
    "Metrics": {
        "@odata.id": "/redfish/v1/Chassis/1/NetworkAdapters/chassisNIC1(SF221Q)/Ports/1/Metrics"
    }
}

评审结论

1、同意新增URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/NetworkDeviceFunctions/{NetworkDeviceFunctionId}/Metrics,并支持新增属性RXFrames、RXMulticastFrames、RXUnicastFrames、TXFrames、TXMulticastFrames、TXUnicastFrames,属性类型为integer,操作权限:ReadOnly,支持GET操作

2、同意在 /redfish/v1 资源下新增ThermalEquipment属性,操作权限:ReadOnly;同意新增URI:/redfish/v1/ThermalEquipment,并新增属性CoolingLoopRedundancy和Status,操作权限:ReadOnly,支持GET操作

3、同意在URI:/redfish/v1/Chassis/{ChassisId}/ThermalSubsystem 资源下新增CoolantConnectorRedundancy属性,类型为array,操作权限:ReadOnly,支持GET操作

4、同意新增URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports,并支持新增属性 Members、Members@odata.count,操作权限:ReadOnly,支持GET操作

5、同意新增URI:/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports/{PortId},包括GET操作,操作权限:ReadOnly (详情见 评审点5)

遗留问题

1、/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/NetworkDeviceFunctions/{NetworkDeviceFunctionId}/Metrics

要实现这个uri,则要实现该uri的父uri,并且在父uri下要有属性可以连接到此资源。 同时要关注下该资源可能被link到哪些其它资源上。

2、/redfish/v1/ThermalEquipment,若此资源下的嵌套资源未实现,则该资源下不能存在嵌套属性(比如:CDUs属性)的定义,若实现了,把资源定义的关联文档贴上来。

/redfish/v1/Chassis/{ChassisId}/ThermalSubsystem,实现此资源:

1、Chasis资源下的ThermalSubsystem属性要配套实现。

2、CoolantConnectorRedundancy属性的具体定义要写出来。

3、子资源(CoolantConnectors和Heaters)如果未实现,则该资源下不要定义这两个属性,若实现了,则把资源定义的链接贴过来。

/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/Ports/{PortId},实现此资源:

1、/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}资源下要实现Ports属性

2、Status属性要明确下子属性,当前示例返回数据中只定义了State,不行,至少还需要Health

3、LinkStatus要明确出支持的枚举范围。

4、LinkNetworkTechnology要明确出支持的枚举范围。

5、ChassisIdSubtype要明确出支持的枚举范围。

6、PortIdSubtype要明确出支持的枚举范围。

7、Metrics嵌套子资源若未实现,则不能实现Metrics属性,若实现了,要给出资源定义的链接文档。

1、该资源的父URI:
/redfish/v1/Chassis/{ChassisId}/NetworkAdapters/{NetworkAdapterId}/NetworkDeviceFunctions 在别的需求已实现。

2、/redfish/v1/ThermalEquipment 资源下的嵌套属性(CDUs、CoolingLoops、HeatExchangers、ImmersionUnits )没有实现,已将这些属性删除。
CDUs {@odata.id}
CoolingLoops {@odata.id}
HeatExchangers {@odata.id}
ImmersionUnits {@odata.id}

1、该/redfish/v1/Chassis/{ChassisId}/ThermalSubsystem是本来已经实现的资源。
2、子资源(CoolantConnectors和Heaters)未实现,目前已将该资源删除。

@luojie 这个 Status 属性中有 Health 属性要实现