diff options
author | Nickle Wang <nicklew@nvidia.com> | 2024-02-01 12:53:31 +0800 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2024-02-29 03:25:18 +0000 |
commit | 0ce2012c6c8bc371b7739d12251b53af906a70dd (patch) | |
tree | efef1273da672db37da51a4e463895365d885332 /RedfishPkg/RedfishHttpDxe/RedfishHttpData.h | |
parent | 1988f2df2960d558c0cde862e2082c45fe534098 (diff) | |
download | edk2-0ce2012c6c8bc371b7739d12251b53af906a70dd.zip edk2-0ce2012c6c8bc371b7739d12251b53af906a70dd.tar.gz edk2-0ce2012c6c8bc371b7739d12251b53af906a70dd.tar.bz2 |
RedfishPkg: implement Redfish HTTP protocol
implement Redfish HTTP protocol driver.
Signed-off-by: Nickle Wang <nicklew@nvidia.com>
Co-authored-by: Igor Kulchytskyy <igork@ami.com>
Cc: Abner Chang <abner.chang@amd.com>
Cc: Igor Kulchytskyy <igork@ami.com>
Cc: Nick Ramirez <nramirez@nvidia.com>
Reviewed-by: Abner Chang <abner.chang@amd.com>
Reviewed-by: Igor Kulchytskyy <igork@ami.com>
Reviewed-by: Mike Maslenkin <mike.maslenkin@gmail.com>
Diffstat (limited to 'RedfishPkg/RedfishHttpDxe/RedfishHttpData.h')
-rw-r--r-- | RedfishPkg/RedfishHttpDxe/RedfishHttpData.h | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/RedfishPkg/RedfishHttpDxe/RedfishHttpData.h b/RedfishPkg/RedfishHttpDxe/RedfishHttpData.h new file mode 100644 index 0000000..6be6101 --- /dev/null +++ b/RedfishPkg/RedfishHttpDxe/RedfishHttpData.h @@ -0,0 +1,256 @@ +/** @file
+ Definitions of RedfishHttpData
+
+ Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef EDKII_REDFISH_HTTP_DATA_H_
+#define EDKII_REDFISH_HTTP_DATA_H_
+
+#include "RedfishHttpDxe.h"
+
+#define REDFISH_HTTP_DRIVER_SIGNATURE SIGNATURE_32 ('r', 'f', 'h', 'p')
+#define REDFISH_HTTP_CACHE_SIGNATURE SIGNATURE_32 ('r', 'f', 'c', 'h')
+#define REDFISH_HTTP_SERVICE_SIGNATURE SIGNATURE_32 ('r', 'f', 's', 'v')
+#define REDFISH_HTTP_PAYLOAD_SIGNATURE SIGNATURE_32 ('r', 'f', 'p', 'l')
+#define REDFISH_HTTP_BASIC_AUTH_STR "Basic "
+
+///
+/// REDFISH_SERVICE_PRIVATE definition.
+///
+typedef struct {
+ UINT32 Signature;
+ CHAR8 *Host;
+ CHAR8 *HostName;
+ CHAR8 *BasicAuth;
+ CHAR8 *SessionToken;
+ EFI_REST_EX_PROTOCOL *RestEx;
+} REDFISH_SERVICE_PRIVATE;
+
+///
+/// REDFISH_PAYLOAD_PRIVATE definition.
+///
+typedef struct {
+ UINT32 Signature;
+ REDFISH_SERVICE_PRIVATE *Service;
+ EDKII_JSON_VALUE JsonValue;
+} REDFISH_PAYLOAD_PRIVATE;
+
+///
+/// Definition of REDFISH_HTTP_CACHE_DATA
+///
+typedef struct {
+ UINT32 Signature;
+ LIST_ENTRY List;
+ EFI_STRING Uri;
+ UINTN HitCount;
+ REDFISH_RESPONSE *Response;
+} REDFISH_HTTP_CACHE_DATA;
+
+#define REDFISH_HTTP_CACHE_FROM_LIST(a) CR (a, REDFISH_HTTP_CACHE_DATA, List, REDFISH_HTTP_CACHE_SIGNATURE)
+
+///
+/// Definition of REDFISH_HTTP_CACHE_LIST
+///
+typedef struct {
+ LIST_ENTRY Head;
+ UINTN Count;
+ UINTN Capacity;
+} REDFISH_HTTP_CACHE_LIST;
+
+///
+/// Definition of REDFISH_HTTP_RETRY_SETTING
+///
+typedef struct {
+ UINT16 MaximumRetryGet;
+ UINT16 MaximumRetryPut;
+ UINT16 MaximumRetryPost;
+ UINT16 MaximumRetryPatch;
+ UINT16 MaximumRetryDelete;
+ UINTN RetryWait;
+} REDFISH_HTTP_RETRY_SETTING;
+
+///
+/// Definition of REDFISH_HTTP_CACHE_PRIVATE
+///
+typedef struct {
+ UINT32 Signature;
+ EFI_HANDLE ImageHandle;
+ BOOLEAN CacheDisabled;
+ EFI_EVENT NotifyEvent;
+ REDFISH_HTTP_CACHE_LIST CacheList;
+ EDKII_REDFISH_HTTP_PROTOCOL Protocol;
+ EDKII_REDFISH_CREDENTIAL_PROTOCOL *CredentialProtocol;
+ REDFISH_HTTP_RETRY_SETTING RetrySetting;
+} REDFISH_HTTP_CACHE_PRIVATE;
+
+#define REDFISH_HTTP_CACHE_PRIVATE_FROM_THIS(a) CR (a, REDFISH_HTTP_CACHE_PRIVATE, Protocol, REDFISH_HTTP_DRIVER_SIGNATURE)
+
+/**
+ Search on given ListHeader for given URI string.
+
+ @param[in] ListHeader Target list to search.
+ @param[in] Uri Target URI to search.
+
+ @retval REDFISH_HTTP_CACHE_DATA Target cache data is found.
+ @retval NULL No cache data with given URI is found.
+
+**/
+REDFISH_HTTP_CACHE_DATA *
+FindHttpCacheData (
+ IN LIST_ENTRY *ListHeader,
+ IN EFI_STRING Uri
+ );
+
+/**
+ This function copy the data in SrcResponse to DstResponse.
+
+ @param[in] SrcResponse Source Response to copy.
+ @param[out] DstResponse Destination Response.
+
+ @retval EFI_SUCCESS Response is copied successfully.
+ @retval Others Error occurs.
+
+**/
+EFI_STATUS
+CopyRedfishResponse (
+ IN REDFISH_RESPONSE *SrcResponse,
+ OUT REDFISH_RESPONSE *DstResponse
+ );
+
+/**
+ Release all cache from list.
+
+ @param[in] CacheList The list to be released.
+
+ @retval EFI_SUCCESS All cache data are released.
+ @retval EFI_INVALID_PARAMETER CacheList is NULL.
+
+**/
+EFI_STATUS
+ReleaseCacheList (
+ IN REDFISH_HTTP_CACHE_LIST *CacheList
+ );
+
+/**
+ Add new cache by given URI and HTTP response to specify List.
+
+ @param[in] List Target cache list to add.
+ @param[in] Uri The URI string matching to this cache data.
+ @param[in] Response HTTP response.
+
+ @retval EFI_SUCCESS Cache data is added.
+ @retval Others Fail to add cache data.
+
+**/
+EFI_STATUS
+AddHttpCacheData (
+ IN REDFISH_HTTP_CACHE_LIST *List,
+ IN EFI_STRING Uri,
+ IN REDFISH_RESPONSE *Response
+ );
+
+/**
+ Delete a cache data by given cache instance.
+
+ @param[in] List Target cache list to be removed.
+ @param[in] Data Pointer to the instance to be deleted.
+
+ @retval EFI_SUCCESS Cache data is removed.
+ @retval Others Fail to remove cache data.
+
+**/
+EFI_STATUS
+DeleteHttpCacheData (
+ IN REDFISH_HTTP_CACHE_LIST *List,
+ IN REDFISH_HTTP_CACHE_DATA *Data
+ );
+
+/**
+ This function release Redfish Payload.
+
+ @param[in] Payload Pointer to payload instance.
+
+ @retval EFI_SUCCESS Payload is released.
+ @retval Others Error occurs.
+
+**/
+EFI_STATUS
+ReleaseRedfishPayload (
+ IN REDFISH_PAYLOAD_PRIVATE *Payload
+ );
+
+/**
+ This function creat new payload. Server and JsonObj are
+ copied to newly created payload.
+
+ @param[in] Service Pointer to Service instance.
+ @param[in] JsonObj Pointer to JSON object.
+
+ @retval REDFISH_PAYLOAD_PRIVATE Newly created payload.
+ @retval NULL Error occurs.
+
+**/
+REDFISH_PAYLOAD_PRIVATE *
+CreateRedfishPayload (
+ IN REDFISH_SERVICE_PRIVATE *Service,
+ IN EDKII_JSON_VALUE JsonValue
+ );
+
+/**
+ This function release Redfish Service.
+
+ @param[in] Service Pointer to service instance.
+
+ @retval EFI_SUCCESS Service is released.
+ @retval Others Error occurs.
+
+**/
+EFI_STATUS
+ReleaseRedfishService (
+ IN REDFISH_SERVICE_PRIVATE *Service
+ );
+
+/**
+ This function creat new service. Host and HostName are copied to
+ newly created service instance.
+
+ @param[in] Host Host string.
+ @param[in] HostName Hostname string.
+ @param[in] BasicAuth Basic Authorization string.
+ @param[in] SessionToken Session token string.
+ @param[in] RestEx Rest EX protocol instance.
+
+ @retval REDFISH_PAYLOAD_PRIVATE Newly created service.
+ @retval NULL Error occurs.
+
+**/
+REDFISH_SERVICE_PRIVATE *
+CreateRedfishService (
+ IN CHAR8 *Host,
+ IN CHAR8 *HostName,
+ IN CHAR8 *BasicAuth OPTIONAL,
+ IN CHAR8 *SessionToken OPTIONAL,
+ IN EFI_REST_EX_PROTOCOL *RestEx
+ );
+
+/**
+ This function update session token in Redfish Service.
+
+ @param[in] Service Pointer to service instance.
+ @param[in] Token Session token.
+
+ @retval EFI_SUCCESS Session token is updated.
+ @retval Others Error occurs.
+
+**/
+EFI_STATUS
+UpdateSessionToken (
+ IN REDFISH_SERVICE_PRIVATE *Service,
+ IN CHAR8 *Token
+ );
+
+#endif
|