mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
RedfishPkg/RedfishRestExDxe: Implement EDKII_HTTP_CALLBACK_PROTOCOL
Implement EDKII_HTTP_CALLBACK_PROTOCOL that listens to HttpEventTlsConfigured event for reconfiguring TLS configuration data. Signed-off-by: Abner Chang <abner.chang@amd.com> Cc: Nickle Wang <nicklew@nvidia.com> Cc: Igor Kulchytskyy <igork@ami.com> Reviewed-by: Nickle Wang <nicklew@nvidia.com>
This commit is contained in:
parent
8466480965
commit
0a12d8bd55
@ -4,6 +4,7 @@
|
|||||||
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||||
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
|
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
@ -585,6 +586,53 @@ RedfishRestExDriverBindingStop (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Callback function that is invoked when HTTP event occurs.
|
||||||
|
|
||||||
|
@param[in] This Pointer to the EDKII_HTTP_CALLBACK_PROTOCOL instance.
|
||||||
|
@param[in] Event The event that occurs in the current state.
|
||||||
|
@param[in] EventStatus The Status of Event, EFI_SUCCESS or other errors.
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
RestExHttpCallback (
|
||||||
|
IN EDKII_HTTP_CALLBACK_PROTOCOL *This,
|
||||||
|
IN EDKII_HTTP_CALLBACK_EVENT Event,
|
||||||
|
IN EFI_STATUS EventStatus
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_TLS_PROTOCOL *TlsProtocol;
|
||||||
|
RESTEX_INSTANCE *Instance;
|
||||||
|
EFI_TLS_VERIFY TlsVerifyMethod;
|
||||||
|
|
||||||
|
if ((Event == HttpEventTlsConfigured) && (EventStatus == EFI_SUCCESS)) {
|
||||||
|
// Reconfigure TLS configuration data.
|
||||||
|
Instance = RESTEX_INSTANCE_FROM_HTTP_CALLBACK (This);
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
|
Instance->HttpIo.Handle,
|
||||||
|
&gEfiTlsProtocolGuid,
|
||||||
|
(VOID **)&TlsProtocol
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TlsVerifyMethod = EFI_TLS_VERIFY_NONE;
|
||||||
|
Status = TlsProtocol->SetSessionData (
|
||||||
|
TlsProtocol,
|
||||||
|
EfiTlsVerifyMethod,
|
||||||
|
&TlsVerifyMethod,
|
||||||
|
sizeof (EFI_TLS_VERIFY)
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((DEBUG_MANAGEABILITY, "%a: REST EX reconfigures TLS verify method.\n", __func__));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Creates a child handle and installs a protocol.
|
Creates a child handle and installs a protocol.
|
||||||
|
|
||||||
@ -699,6 +747,19 @@ RedfishRestExServiceBindingCreateChild (
|
|||||||
goto ON_ERROR;
|
goto ON_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initial HTTP callback funciton on this REST EX instance
|
||||||
|
Instance->HttpCallbakFunction.Callback = RestExHttpCallback;
|
||||||
|
Status = gBS->InstallProtocolInterface (
|
||||||
|
&Instance->HttpIo.Handle,
|
||||||
|
&gEdkiiHttpCallbackProtocolGuid,
|
||||||
|
EFI_NATIVE_INTERFACE,
|
||||||
|
&Instance->HttpCallbakFunction
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((DEBUG_ERROR, "%a: Fail to install HttpCallbakFunction.\n", __func__));
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Add it to the parent's child list.
|
// Add it to the parent's child list.
|
||||||
//
|
//
|
||||||
@ -812,6 +873,15 @@ RedfishRestExServiceBindingDestroyChild (
|
|||||||
RestEx
|
RestEx
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Uninstall the HTTP callback protocol.
|
||||||
|
//
|
||||||
|
Status = gBS->UninstallProtocolInterface (
|
||||||
|
Instance->HttpIo.Handle,
|
||||||
|
&gEdkiiHttpCallbackProtocolGuid,
|
||||||
|
&Instance->HttpCallbakFunction
|
||||||
|
);
|
||||||
|
|
||||||
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
|
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
Copyright (c) 2023, Ampere Computing LLC. All rights reserved.<BR>
|
Copyright (c) 2023, Ampere Computing LLC. All rights reserved.<BR>
|
||||||
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
|
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
@ -32,6 +33,8 @@
|
|||||||
#include <Protocol/DriverBinding.h>
|
#include <Protocol/DriverBinding.h>
|
||||||
#include <Protocol/RestEx.h>
|
#include <Protocol/RestEx.h>
|
||||||
#include <Protocol/ServiceBinding.h>
|
#include <Protocol/ServiceBinding.h>
|
||||||
|
#include <Protocol/HttpCallback.h>
|
||||||
|
#include <Protocol/Tls.h>
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Protocol instances
|
/// Protocol instances
|
||||||
@ -67,6 +70,9 @@ typedef struct _RESTEX_INSTANCE RESTEX_INSTANCE;
|
|||||||
#define RESTEX_INSTANCE_FROM_THIS(a) \
|
#define RESTEX_INSTANCE_FROM_THIS(a) \
|
||||||
CR (a, RESTEX_INSTANCE, RestEx, RESTEX_INSTANCE_SIGNATURE)
|
CR (a, RESTEX_INSTANCE, RestEx, RESTEX_INSTANCE_SIGNATURE)
|
||||||
|
|
||||||
|
#define RESTEX_INSTANCE_FROM_HTTP_CALLBACK(a) \
|
||||||
|
CR (a, RESTEX_INSTANCE, HttpCallbakFunction, RESTEX_INSTANCE_SIGNATURE)
|
||||||
|
|
||||||
#define RESTEX_STATE_UNCONFIGED 0
|
#define RESTEX_STATE_UNCONFIGED 0
|
||||||
#define RESTEX_STATE_CONFIGED 1
|
#define RESTEX_STATE_CONFIGED 1
|
||||||
|
|
||||||
@ -94,25 +100,31 @@ struct _RESTEX_SERVICE {
|
|||||||
#define RESTEX_INSTANCE_FLAGS_TCP_ERROR_RETRY 0x00000002
|
#define RESTEX_INSTANCE_FLAGS_TCP_ERROR_RETRY 0x00000002
|
||||||
|
|
||||||
struct _RESTEX_INSTANCE {
|
struct _RESTEX_INSTANCE {
|
||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
|
|
||||||
EFI_REST_EX_PROTOCOL RestEx;
|
EFI_REST_EX_PROTOCOL RestEx;
|
||||||
|
|
||||||
INTN State;
|
INTN State;
|
||||||
BOOLEAN InDestroy;
|
BOOLEAN InDestroy;
|
||||||
|
|
||||||
RESTEX_SERVICE *Service;
|
RESTEX_SERVICE *Service;
|
||||||
EFI_HANDLE ChildHandle;
|
EFI_HANDLE ChildHandle;
|
||||||
|
|
||||||
EFI_REST_EX_CONFIG_DATA ConfigData;
|
EFI_REST_EX_CONFIG_DATA ConfigData;
|
||||||
|
|
||||||
//
|
//
|
||||||
// HTTP_IO to access the HTTP service
|
// HTTP_IO to access the HTTP service
|
||||||
//
|
//
|
||||||
HTTP_IO HttpIo;
|
HTTP_IO HttpIo;
|
||||||
|
|
||||||
UINT32 Flags;
|
//
|
||||||
|
// EDKII_HTTP_CALLBACK_PROTOCOL that listens to
|
||||||
|
// HttpEventInitSession event.
|
||||||
|
//
|
||||||
|
EDKII_HTTP_CALLBACK_PROTOCOL HttpCallbakFunction;
|
||||||
|
|
||||||
|
UINT32 Flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
# (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
# (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
||||||
# Copyright (c) 2023, American Megatrends International LLC.
|
# Copyright (c) 2023, American Megatrends International LLC.
|
||||||
# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||||
|
# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
#
|
#
|
||||||
@ -57,6 +58,8 @@
|
|||||||
gEfiHttpServiceBindingProtocolGuid ## TO_START
|
gEfiHttpServiceBindingProtocolGuid ## TO_START
|
||||||
gEfiHttpProtocolGuid ## TO_START
|
gEfiHttpProtocolGuid ## TO_START
|
||||||
gEfiDevicePathProtocolGuid ## TO_START
|
gEfiDevicePathProtocolGuid ## TO_START
|
||||||
|
gEdkiiHttpCallbackProtocolGuid ## CONSUMES
|
||||||
|
gEfiTlsProtocolGuid ## CONSUMES
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceAccessModeInBand ## CONSUMES
|
gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceAccessModeInBand ## CONSUMES
|
||||||
|
Loading…
x
Reference in New Issue
Block a user