mirror of https://github.com/acidanthera/audk.git
RedfishPkg/DxeRestExLib: DxeRestExLib
Add EFI REST EX helper library to create child instance of REST EX service. Signed-off-by: Abner Chang <abner.chang@hpe.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Cc: Siyuan Fu <siyuan.fu@intel.com> Cc: Fan Wang <fan.wang@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Nickle Wang <nickle.wang@hpe.com> Cc: Peter O'Hanley <peter.ohanley@hpe.com> Reviewed-by: Nickle Wang <nickle.wang@hpe.com>
This commit is contained in:
parent
e2747dbb5a
commit
140674a460
|
@ -0,0 +1,42 @@
|
||||||
|
/** @file
|
||||||
|
This library provides help functions for REST EX Protocol.
|
||||||
|
|
||||||
|
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef REST_EX_LIB_H_
|
||||||
|
#define REST_EX_LIB_H_
|
||||||
|
|
||||||
|
#include <Protocol/RestEx.h>
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Library class public functions
|
||||||
|
///
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function allows the caller to create child handle for specific
|
||||||
|
REST server.
|
||||||
|
|
||||||
|
@param[in] Image The image handle used to open service.
|
||||||
|
@param[in] AccessMode Access mode of REST server.
|
||||||
|
@param[in] ConfigType Underlying configuration to communicate with REST server.
|
||||||
|
@param[in] ServiceType REST service type.
|
||||||
|
@param[out] ChildInstanceHandle The handle to receive the create child.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Can't create the corresponding REST EX child instance.
|
||||||
|
@retval EFI_INVALID_PARAMETERS Any of input parameters is improper.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
RestExLibCreateChild (
|
||||||
|
IN EFI_HANDLE Image,
|
||||||
|
IN EFI_REST_EX_SERVICE_ACCESS_MODE AccessMode,
|
||||||
|
IN EFI_REST_EX_CONFIG_TYPE ConfigType,
|
||||||
|
IN EFI_REST_EX_SERVICE_TYPE ServiceType,
|
||||||
|
OUT EFI_HANDLE *ChildInstanceHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,166 @@
|
||||||
|
/** @file
|
||||||
|
This library provides help functions for REST EX Protocol.
|
||||||
|
|
||||||
|
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include <Uefi.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
#include <Library/NetLib.h>
|
||||||
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
#include <Protocol/Http.h>
|
||||||
|
#include <Protocol/RestEx.h>
|
||||||
|
|
||||||
|
#define REST_EX_CONFIG_DATA_LEN_UNKNOWN 0xff
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function allows the caller to create child handle for specific
|
||||||
|
REST server.
|
||||||
|
|
||||||
|
@param[in] Image The image handle used to open service.
|
||||||
|
@param[in] AccessMode Access mode of REST server.
|
||||||
|
@param[in] ConfigType Underlying configuration to communicate with REST server.
|
||||||
|
@param[in] ServiceType REST service type.
|
||||||
|
@param[out] ChildInstanceHandle The handle to receive the create child.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Can't create the corresponding REST EX child instance.
|
||||||
|
@retval EFI_INVALID_PARAMETERS Any of input parameters is improper.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
RestExLibCreateChild (
|
||||||
|
IN EFI_HANDLE Image,
|
||||||
|
IN EFI_REST_EX_SERVICE_ACCESS_MODE AccessMode,
|
||||||
|
IN EFI_REST_EX_CONFIG_TYPE ConfigType,
|
||||||
|
IN EFI_REST_EX_SERVICE_TYPE ServiceType,
|
||||||
|
OUT EFI_HANDLE *ChildInstanceHandle
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
UINTN NoBuffer;
|
||||||
|
EFI_HANDLE *Handle;
|
||||||
|
EFI_HANDLE ChildHandle;
|
||||||
|
EFI_REST_EX_PROTOCOL *RestEx;
|
||||||
|
EFI_REST_EX_SERVICE_INFO *RestExServiceInfo;
|
||||||
|
UINT8 LenOfConfig;
|
||||||
|
|
||||||
|
if (Image == NULL ||
|
||||||
|
AccessMode >= EfiRestExServiceModeMax ||
|
||||||
|
ConfigType >= EfiRestExConfigTypeMax ||
|
||||||
|
ServiceType >= EfiRestExServiceTypeMax ||
|
||||||
|
ChildInstanceHandle == NULL
|
||||||
|
) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ChildInstanceHandle = NULL;
|
||||||
|
//
|
||||||
|
// Locate all REST EX binding service.
|
||||||
|
//
|
||||||
|
Handle = NULL;
|
||||||
|
NoBuffer = 0;
|
||||||
|
Status = gBS->LocateHandleBuffer (
|
||||||
|
ByProtocol,
|
||||||
|
&gEfiRestExServiceBindingProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
&NoBuffer,
|
||||||
|
&Handle
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status) && Status != EFI_BUFFER_TOO_SMALL) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
Handle = (EFI_HANDLE *)AllocateZeroPool (sizeof(EFI_HANDLE) * NoBuffer);
|
||||||
|
if (Handle == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
Status = gBS->LocateHandleBuffer (
|
||||||
|
ByProtocol,
|
||||||
|
&gEfiRestExServiceBindingProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
&NoBuffer,
|
||||||
|
&Handle
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
FreePool (Handle);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Search for the proper REST EX instance.
|
||||||
|
//
|
||||||
|
while (NoBuffer != 0) {
|
||||||
|
ChildHandle = NULL;
|
||||||
|
Status = NetLibCreateServiceChild (
|
||||||
|
*(Handle + (NoBuffer - 1)),
|
||||||
|
Image,
|
||||||
|
&gEfiRestExServiceBindingProtocolGuid,
|
||||||
|
&ChildHandle
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
ChildHandle,
|
||||||
|
&gEfiRestExProtocolGuid,
|
||||||
|
(VOID **)&RestEx,
|
||||||
|
Image,
|
||||||
|
NULL,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get the information of REST service provided by this EFI REST EX driver
|
||||||
|
//
|
||||||
|
Status = RestEx->GetService (
|
||||||
|
RestEx,
|
||||||
|
&RestExServiceInfo
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Check REST EX property.
|
||||||
|
//
|
||||||
|
switch (ConfigType) {
|
||||||
|
case EfiRestExConfigHttp:
|
||||||
|
LenOfConfig = sizeof (EFI_REST_EX_HTTP_CONFIG_DATA);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EfiRestExConfigUnspecific:
|
||||||
|
LenOfConfig = REST_EX_CONFIG_DATA_LEN_UNKNOWN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
if (RestExServiceInfo->EfiRestExServiceInfoV10.RestServiceAccessMode != AccessMode ||
|
||||||
|
RestExServiceInfo->EfiRestExServiceInfoV10.RestServiceType != ServiceType ||
|
||||||
|
RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigType != ConfigType ||
|
||||||
|
((LenOfConfig != REST_EX_CONFIG_DATA_LEN_UNKNOWN) && (RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigDataLength != LenOfConfig))) {
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// This is proper REST EX instance.
|
||||||
|
//
|
||||||
|
*ChildInstanceHandle = ChildHandle;
|
||||||
|
FreePool (Handle);
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
|
||||||
|
ON_ERROR:;
|
||||||
|
NetLibDestroyServiceChild (
|
||||||
|
*(Handle + (NoBuffer - 1)),
|
||||||
|
Image,
|
||||||
|
&gEfiRestExServiceBindingProtocolGuid,
|
||||||
|
ChildHandle
|
||||||
|
);
|
||||||
|
NoBuffer --;
|
||||||
|
};
|
||||||
|
FreePool (Handle);
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
## @file
|
||||||
|
# Library for REST EX Protocol
|
||||||
|
#
|
||||||
|
# (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x0001001b
|
||||||
|
BASE_NAME = DxeRestExLib
|
||||||
|
FILE_GUID = E9CBF727-8AF3-4602-9DBD-A3942869B5AE
|
||||||
|
MODULE_TYPE = DXE_DRIVER
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = RestExLib | DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
|
||||||
|
|
||||||
|
#
|
||||||
|
# VALID_ARCHITECTURES = IA32 X64 IPF EBC RISCV64
|
||||||
|
#
|
||||||
|
|
||||||
|
[Sources.common]
|
||||||
|
DxeRestExLib.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
NetworkPkg/NetworkPkg.dec
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
BaseLib
|
||||||
|
BaseMemoryLib
|
||||||
|
DebugLib
|
||||||
|
DevicePathLib
|
||||||
|
MemoryAllocationLib
|
||||||
|
NetLib
|
||||||
|
PrintLib
|
||||||
|
UefiLib
|
||||||
|
UefiBootServicesTableLib
|
||||||
|
UefiRuntimeServicesTableLib
|
||||||
|
|
||||||
|
[Protocols]
|
||||||
|
gEfiRestExServiceBindingProtocolGuid ## PROTOCOL ALWAYS_CONSUMED
|
||||||
|
gEfiRestExProtocolGuid ## PROTOCOL ALWAYS_CONSUMED
|
||||||
|
|
|
@ -11,5 +11,6 @@
|
||||||
#
|
#
|
||||||
##
|
##
|
||||||
!if $(REDFISH_ENABLE) == TRUE
|
!if $(REDFISH_ENABLE) == TRUE
|
||||||
|
RestExLib|RedfishPkg/Library/DxeRestExLib/DxeRestExLib.inf
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
# Platform implementation-specific Redfish Credential Interface.
|
# Platform implementation-specific Redfish Credential Interface.
|
||||||
RedfishPlatformCredentialLib|Include/Library/RedfishCredentialLib.h
|
RedfishPlatformCredentialLib|Include/Library/RedfishCredentialLib.h
|
||||||
|
|
||||||
|
## @libraryclass The helper routines to access REST EX service.
|
||||||
|
# This library is only intended to be used by UEFI network stack modules.
|
||||||
|
RestExLib|Include/Library/RestExLib.h
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
## Include/Protocol/RedfishDiscover.h
|
## Include/Protocol/RedfishDiscover.h
|
||||||
gEfiRedfishDiscoverProtocolGuid = { 0x5db12509, 0x4550, 0x4347, { 0x96, 0xb3, 0x73, 0xc0, 0xff, 0x6e, 0x86, 0x9f }}
|
gEfiRedfishDiscoverProtocolGuid = { 0x5db12509, 0x4550, 0x4347, { 0x96, 0xb3, 0x73, 0xc0, 0xff, 0x6e, 0x86, 0x9f }}
|
||||||
|
|
|
@ -49,5 +49,6 @@
|
||||||
[Components]
|
[Components]
|
||||||
RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibNull.inf
|
RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibNull.inf
|
||||||
RedfishPkg/Library/PlatformCredentialLibNull/PlatformCredentialLibNull.inf
|
RedfishPkg/Library/PlatformCredentialLibNull/PlatformCredentialLibNull.inf
|
||||||
|
RedfishPkg/Library/DxeRestExLib/DxeRestExLib.inf
|
||||||
|
|
||||||
!include RedfishPkg/Redfish.dsc.inc
|
!include RedfishPkg/Redfish.dsc.inc
|
||||||
|
|
Loading…
Reference in New Issue