Re: [edk2-staging][PATCH v2 05/15] edk2-staging/RedfishClientPkg: Introduce resource identify library


Chang, Abner
 

[AMD Official Use Only - General]

Comment in-line. You can search [Chang, Abner] for the comment.

-----Original Message-----
From: Nickle Wang <nickle.wang@...>
Sent: Monday, July 25, 2022 9:36 AM
To: devel@edk2.groups.io
Cc: Chang, Abner <Abner.Chang@...>; Yang, Atom
<Atom.Yang@...>; Nick Ramirez <nramirez@...>
Subject: [edk2-staging][PATCH v2 05/15] edk2-staging/RedfishClientPkg:
Introduce resource identify library

[CAUTION: External Email]

Introduce resource identify library which works with resource config protocol to
identify Redfish resource. This library provides the flexibility for platform to
implement its own policy and identify resource. Two library implementation are
provided as demonstration code. NULL version of library accepts all Redfish
resource and another implementation to computer system resource uses UUID
to identify Redfish resource.

Signed-off-by: Nickle Wang <nickle.wang@...>
Cc: Abner Chang <abner.chang@...>
Cc: Yang Atom <Atom.Yang@...>
Cc: Nick Ramirez <nramirez@...>
---
.../Library/RedfishResourceIdentifyLib.h | 29 ++++
.../RedfishResourceIdentifyLibComuterSystem.c | 164
++++++++++++++++++ ...edfishResourceIdentifyLibComuterSystem.inf | 42
+++++
.../RedfishResourceIdentifyLibNull.c | 37 ++++
.../RedfishResourceIdentifyLibNull.inf | 37 ++++
RedfishClientPkg/RedfishClientLibs.dsc.inc | 2 +-
RedfishClientPkg/RedfishClientPkg.dec | 1 +
7 files changed, 311 insertions(+), 1 deletion(-) create mode 100644
RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h
create mode 100644
RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_0/Re
dfishResourceIdentifyLibComuterSystem.c
create mode 100644
RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_0/Re
dfishResourceIdentifyLibComuterSystem.inf
create mode 100644
RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIdenti
fyLibNull.c
create mode 100644
RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIdenti
fyLibNull.inf

diff --git a/RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h
b/RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h
new file mode 100644
index 0000000000..91d01b7d68
--- /dev/null
+++ b/RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h
@@ -0,0 +1,29 @@
+/** @file
+ This file defines the Redfish resource identify Library interface.
+
+ (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef REDFISH_RESOURCE_IDENTIFY_LIB_H_ #define
+REDFISH_RESOURCE_IDENTIFY_LIB_H_
+
+/**
+ Identify resource from given URI and context in JSON format
+
+ @param[in] Uri URI of given Redfish resource
+ @param[in] Json Context in JSON format of give Redfish resource
+
+ @retval TRUE This is the Redfish resource that we have to handle.
+ @retval FALSE We don't handle this Redfish resource.
+
+**/
+BOOLEAN
+RedfishIdentifyResource (
+ IN EFI_STRING Uri,
+ IN CHAR8 *Json
+ );
+
+#endif
diff --git
a/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_0/
RedfishResourceIdentifyLibComuterSystem.c
b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_0/
RedfishResourceIdentifyLibComuterSystem.c
new file mode 100644
index 0000000000..e5699f194c
--- /dev/null
+++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v
+++ 1_5_0/RedfishResourceIdentifyLibComuterSystem.c
@@ -0,0 +1,164 @@
+/** @file
+ Redfish resource identify library implementation for computer system
+version 1.5.0
+
+ (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Uefi.h>
+#include <RedfishBase.h>
+
+#include <Library/UefiLib.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/NetLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/RedfishResourceIdentifyLib.h>
+
+#include <Protocol/RestJsonStructure.h>
+
+#include
+<RedfishJsonStructure/ComputerSystem/v1_5_0/EfiComputerSystemV1_5_0.h
+
+EFI_REST_JSON_STRUCTURE_PROTOCOL *mJsonStructProtocol = NULL;
+
+/**
+ Identify resource from given URI and context in JSON format
+
+ @param[in] Uri URI of given Redfish resource
+ @param[in] Json Context in JSON format of give Redfish resource
+
+ @retval TRUE This is the Redfish resource that we have to handle.
+ @retval FALSE We don't handle this Redfish resource.
+
+**/
+BOOLEAN
+RedfishIdentifyResource (
+ IN EFI_STRING Uri,
+ IN CHAR8 *Json
+ )
+{
+ EFI_STATUS Status;
+ EFI_REDFISH_COMPUTERSYSTEM_V1_5_0 *ComputerSystem;
+ EFI_REDFISH_COMPUTERSYSTEM_V1_5_0_CS *ComputerSystemCs;
+ EFI_GUID SystemUuid;
+ EFI_GUID ResourceUuid;
+
+ if (IS_EMPTY_STRING (Uri) || IS_EMPTY_STRING (Json)) {
+ return FALSE;
+ }
+
+ if (mJsonStructProtocol == NULL) {
+ return FALSE;
+ }
+
+ ComputerSystem = NULL;
+ ComputerSystemCs = NULL;
+
+ Status = mJsonStructProtocol->ToStructure (
+ mJsonStructProtocol,
+ NULL,
+ Json,
+ (EFI_REST_JSON_STRUCTURE_HEADER
**)&ComputerSystem
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", __FUNCTION__,
Status));
+ return FALSE;
+ }
+
+ ComputerSystemCs = ComputerSystem->ComputerSystem;
+
+ if (IS_EMPTY_STRING (ComputerSystemCs->UUID)) {
+ return FALSE;
+ }
+
+ Status = AsciiStrToGuid (ComputerSystemCs->UUID, &ResourceUuid); if
+ (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "%a, fail to get resource UUID: %r\n",
__FUNCTION__, Status));
+ return FALSE;
+ }
+
+ Status = NetLibGetSystemGuid (&SystemUuid); if (EFI_ERROR (Status))
+ {
+ DEBUG ((DEBUG_ERROR, "%a, fail to get system UUID from SMBIOS: %r\n",
__FUNCTION__, Status));
+ return FALSE;
+ }
+
+ DEBUG ((REDFISH_DEBUG_TRACE, "%a, Identify: System: %g Resource:
+ %g\n", __FUNCTION__, &SystemUuid, &ResourceUuid)); if (CompareGuid
(&ResourceUuid, &SystemUuid)) {
+ Status = EFI_SUCCESS;
+ } else {
+ Status = EFI_UNSUPPORTED;
+ }
+
+ mJsonStructProtocol->DestoryStructure (
+ mJsonStructProtocol,
+ (EFI_REST_JSON_STRUCTURE_HEADER *)ComputerSystem
+ );
+
+ return (Status == EFI_SUCCESS ? TRUE : FALSE); }
+
+/**
+ Callback function when gEfiRestJsonStructureProtocolGuid is installed.
+
+ @param[in] Event Event whose notification function is being invoked.
+ @param[in] Context Pointer to the notification function's context.
+**/
+VOID
+EFIAPI
+RestJasonStructureProtocolIsReady
+ (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+
+ if (mJsonStructProtocol != NULL) {
+ return;
+ }
+
+ Status = gBS->LocateProtocol (
+ &gEfiRestJsonStructureProtocolGuid,
+ NULL,
+ (VOID **)&mJsonStructProtocol
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "%a, failed to locate
+ gEfiRestJsonStructureProtocolGuid: %r\n", __FUNCTION__, Status)); }
+
+ gBS->CloseEvent (Event);
+}
+
+/**
+
+ Install JSON protocol notification
+
+ @param[in] ImageHandle The image handle.
+ @param[in] SystemTable The system table.
+
+ @retval EFI_SUCEESS Install Boot manager menu success.
+ @retval Other Return error status.
+
+**/
+EFI_STATUS
+EFIAPI
+RedfishResourceIdentifyComuterSystemConstructor (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ VOID *Registration;
+
+ EfiCreateProtocolNotifyEvent (
+ &gEfiRestJsonStructureProtocolGuid,
+ TPL_CALLBACK,
+ RestJasonStructureProtocolIsReady,
+ NULL,
+ &Registration
+ );
+
+ return EFI_SUCCESS;
+}
diff --git
a/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_0/
RedfishResourceIdentifyLibComuterSystem.inf
b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_0/
RedfishResourceIdentifyLibComuterSystem.inf
new file mode 100644
index 0000000000..862522cdf6
--- /dev/null
+++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v
+++ 1_5_0/RedfishResourceIdentifyLibComuterSystem.inf
@@ -0,0 +1,42 @@
+## @file
+#
+# (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> # #
+SPDX-License-Identifier: BSD-2-Clause-Patent # ##
+
+[Defines]
+ INF_VERSION = 0x00010006
+ BASE_NAME = RedfishResourceIdentifyLibComuterSystem
+ FILE_GUID = 2AEE2C80-126A-44A6-877E-642F20510D13
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = RedfishResourceIdentifyLib| DXE_DRIVER
+ CONSTRUCTOR =
RedfishResourceIdentifyComuterSystemConstructor
+
+#
+# VALID_ARCHITECTURES = IA32 X64 EBC
+#
+
+[Sources]
+ RedfishResourceIdentifyLibComuterSystem.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ NetworkPkg/NetworkPkg.dec
+ RedfishPkg/RedfishPkg.dec
+ RedfishClientPkg/RedfishClientPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiLib
+
+[Protocols]
+ gEfiRestJsonStructureProtocolGuid ## CONSUMES
+
+[Pcd]
+
diff --git
a/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIde
ntifyLibNull.c
b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIde
ntifyLibNull.c
new file mode 100644
index 0000000000..98eb8fde47
--- /dev/null
+++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishRes
+++ ourceIdentifyLibNull.c
@@ -0,0 +1,37 @@
+/** @file
+ Redfish resource identify NULL library implementation
+
+ (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Uefi.h>
+#include <RedfishBase.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/RedfishResourceIdentifyLib.h>
+
+/**
+ Identify resource from given URI and context in JSON format
+
+ @param[in] Uri URI of given Redfish resource
+ @param[in] Json Context in JSON format of give Redfish resource
+
+ @retval TRUE This is the Redfish resource that we have to handle.
+ @retval FALSE We don't handle this Redfish resource.
+
+**/
+BOOLEAN
+RedfishIdentifyResource (
+ IN EFI_STRING Uri,
+ IN CHAR8 *Json
+ )
+{
+ if (!IS_EMPTY_STRING (Uri)) {
+ DEBUG ((DEBUG_VERBOSE, "%a, accept resource: %s\n", __FUNCTION__,
+Uri));
+ }
+
+ return TRUE;
+}
diff --git
a/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIde
ntifyLibNull.inf
b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIde
ntifyLibNull.inf
new file mode 100644
index 0000000000..092e180305
--- /dev/null
+++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishRes
+++ ourceIdentifyLibNull.inf
@@ -0,0 +1,37 @@
+## @file
+#
+# (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> # #
+SPDX-License-Identifier: BSD-2-Clause-Patent # ##
+
+[Defines]
+ INF_VERSION = 0x00010006
+ BASE_NAME = RedfishResourceIdentifyLibNull
+ FILE_GUID = 6FFD4E25-48F8-4CB6-B194-CFAB407316E1
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = RedfishResourceIdentifyLib| DXE_DRIVER
+
+#
+# VALID_ARCHITECTURES = IA32 X64 EBC
+#
+
+[Sources]
+ RedfishResourceIdentifyLibNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ RedfishPkg/RedfishPkg.dec
+ RedfishClientPkg/RedfishClientPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+
+[Protocols]
+
+[Pcd]
[Chang, Abner]
We can remove Protocol and Pcd section if we don need anything for them.
Thanks.
Abner

+
diff --git a/RedfishClientPkg/RedfishClientLibs.dsc.inc
b/RedfishClientPkg/RedfishClientLibs.dsc.inc
index 8acb479170..413b83a732 100644
--- a/RedfishClientPkg/RedfishClientLibs.dsc.inc
+++ b/RedfishClientPkg/RedfishClientLibs.dsc.inc
@@ -27,7 +27,7 @@

RedfishPlatformConfigLib|RedfishPkg/Library/RedfishPlatformConfigLib/Redfish
PlatformConfigLib.inf

RedfishContentCodingLib|RedfishPkg/Library/RedfishContentCodingLibNull/Red
fishContentCodingLibNull.inf

ConverterCommonLib|RedfishClientPkg/ConverterLib/edk2library/ConverterCo
mmonLib/ConverterCommonLib.inf
-
+
+ RedfishResourceIdentifyLib|RedfishClientPkg/Library/RedfishResourceIde
+ ntifyLibNull/RedfishResourceIdentifyLibNull.inf

EdkIIRedfishResourceConfigLib|RedfishClientPkg/Library/EdkIIRedfishResource
ConfigLib/EdkIIRedfishResourceConfigLib.inf
RedfishEventLib|RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.inf

RedfishVersionLib|RedfishClientPkg/Library/RedfishVersionLib/RedfishVersionLi
b.inf
diff --git a/RedfishClientPkg/RedfishClientPkg.dec
b/RedfishClientPkg/RedfishClientPkg.dec
index 9d18c42c24..c61c581213 100644
--- a/RedfishClientPkg/RedfishClientPkg.dec
+++ b/RedfishClientPkg/RedfishClientPkg.dec
@@ -21,6 +21,7 @@

[LibraryClasses]
RedfishFeatureUtilityLib|Include/Library/RedfishFeatureUtilityLib.h
+
+ RedfishResourceIdentifyLib|Include/Library/RedfishResourceIdentifyLib.
+ h

EdkIIRedfishResourceConfigLib|Include/Library/EdkIIRedfishResourceConfigLib.
h
RedfishEventLib|Include/Library/RedfishEventLib.h
RedfishVersionLib|Include/Library/RedfishVersionLib.h
--
2.32.0.windows.2

Join devel@edk2.groups.io to automatically receive all group messages.