* [edk2-devel] [edk2-redfish-client][PATCH V3 1/2] RedfishClientPkg: Set SettingsObject URI as the config language
@ 2024-03-22 9:09 Chang, Abner via groups.io
2024-03-22 9:19 ` Mike Maslenkin
0 siblings, 1 reply; 5+ messages in thread
From: Chang, Abner via groups.io @ 2024-03-22 9:09 UTC (permalink / raw)
To: devel; +Cc: Igor Kulchytskyy, Nickle Wang
From: Abner Chang <abner.chang@amd.com>
Set SettingsObject URI in @Redfish.Settings resource as the config
language which is the same as the config language of parent URI
that mandates @Redfish.Settings.
With this, we can find the config language of the properties in
SettingsObject URI.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Igor Kulchytskyy <igork@ami.com>
Co-authored-by: Nickle Wang <nicklew@nvidia.com>
---
.../Library/RedfishFeatureUtilityLib.h | 17 ++++
.../RedfishFeatureUtilityLib.c | 86 ++++++++++++++++---
.../RedfishConfigLangMapDxe.c | 15 +++-
3 files changed, 101 insertions(+), 17 deletions(-)
diff --git a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
index ba9ea01501..3c5f248eb7 100644
--- a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
+++ b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
@@ -369,6 +369,23 @@ RedfishSetRedfishUri (
IN EFI_STRING Uri
);
+/**
+
+ Save Redfish SettingsObject URI in database for further use.
+
+ @param[in] ParentUri Parent URI of @Redfish.Settings property.
+ @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
+
+ @retval EFI_INVALID_PARAMETER SystemId is NULL or EMPTY
+ @retval EFI_SUCCESS Redfish uri is saved
+
+**/
+EFI_STATUS
+SetRedfishSettingsObjectsUri (
+ IN EFI_STRING ParentUri,
+ IN EFI_STRING SettingObjectUri
+ );
+
/**
Get the property name by given Configure Language.
diff --git a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c
index cc2b37b796..c37bf85310 100644
--- a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c
+++ b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c
@@ -2082,7 +2082,6 @@ GetConfigureLang (
EFI_STRING ResultStr;
EFI_STRING UnicodeUri;
EFI_STATUS Status;
- EFI_STRING StrFound;
if (IS_EMPTY_STRING (Uri)) {
return NULL;
@@ -2101,18 +2100,6 @@ GetConfigureLang (
}
ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
- if (ConfigLang == NULL) {
- //
- // @Redfish.Settings share the same schema as its parent.
- // Remove "Settings" and try again.
- //
- StrFound = StrStr (UnicodeUri, L"/Settings");
- if (StrFound != NULL) {
- StrFound[0] = L'\0';
- DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI, try: %s\n", __func__, UnicodeUri));
- ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
- }
- }
FreePool (UnicodeUri);
@@ -2172,6 +2159,61 @@ RedfishSetRedfishUri (
return mConfigLangMapProtocol->Set (mConfigLangMapProtocol, ConfigLang, Uri);
}
+/**
+
+ Save Redfish SettingsObject URI in database for further use.
+
+ @param[in] ParentUri Parent URI of @Redfish.Settings property.
+ @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
+
+ @retval EFI_INVALID_PARAMETER ParentUri or SettingObjectUri is NULL.
+ @retval EFI_NOT_FOUND Config language for ParentUri is not found.
+ @retval EFI_SUCCESS Redfish URI is saved with corresponding
+ config language.
+
+**/
+EFI_STATUS
+SetRedfishSettingsObjectsUri (
+ IN EFI_STRING ParentUri,
+ IN EFI_STRING SettingObjectUri
+ )
+{
+ EFI_STATUS Status;
+ EFI_STRING ConfigLang;
+
+ if ((ParentUri == NULL) || (SettingObjectUri == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Check if the SettingsObject URI already in the database.
+ //
+ ConfigLang = RedfishGetConfigLanguage (SettingObjectUri);
+ if (ConfigLang == NULL) {
+ //
+ // No config language of SettingsObject URI is found.
+ // Get the config language of parent URI because the data model of
+ // SettingsObject URI resource is the same as the data model of parent URI.
+ //
+ ConfigLang = RedfishGetConfigLanguage (ParentUri);
+ if (ConfigLang == NULL) {
+ DEBUG ((DEBUG_ERROR, "%a: Failed to get the config language of parent URI that mandates SettingsObject - %s.\n", __func__, ParentUri));
+ return EFI_NOT_FOUND;
+ }
+
+ // Set the config language of settings URI using parent's URI config language.
+ Status = RedfishSetRedfishUri (ConfigLang, SettingObjectUri);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "%a: Fails to set the config language of SettingsObject - %s.\n", __func__, SettingObjectUri));
+ return Status;
+ }
+
+ DEBUG ((DEBUG_INFO, "%a: Set the config language of SettingsObject - %s: SUCCESS.\n", __func__, SettingObjectUri));
+ }
+
+ return EFI_SUCCESS;
+}
+
/**
Get @odata.id from give HTTP payload. It's call responsibility to release returned buffer.
@@ -3532,6 +3574,7 @@ CompareRedfishBooleanArrayValues (
payload and URI to pending settings. Caller has to release "SettingPayload" and
"SettingUri".
+ @param[in] RedfishService Instance of REDFISH_SERVICE
@param[in] Payload Payload that may contain "@Redfish.Settings"
@param[out] SettingPayload Payload keeps pending settings.
@param[out] SettingUri URI to pending settings.
@@ -3552,6 +3595,7 @@ GetPendingSettings (
EDKII_JSON_VALUE JsonValue;
UINTN Index;
EFI_STATUS Status;
+ EFI_STRING StrFound;
if ((RedfishService == NULL) || (Payload == NULL) || (SettingResponse == NULL) || (SettingUri == NULL)) {
return EFI_INVALID_PARAMETER;
@@ -3586,6 +3630,22 @@ GetPendingSettings (
return Status;
}
+ //
+ // Setting URI exists, check if settings URI is valid or not.
+ //
+ StrFound = StrStr (*SettingUri, L"/Settings");
+ if (StrFound != NULL) {
+ DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI: %s\n", __func__, *SettingUri));
+ } else {
+ StrFound = StrStr (*SettingUri, L"/SD");
+ if (StrFound != NULL) {
+ DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"SD\" found in URI: %s\n", __func__, *SettingUri));
+ } else {
+ DEBUG ((DEBUG_ERROR, "%a: Not an valid @redfish.settings URI\n", __func__, *SettingUri));
+ ASSERT (FALSE);
+ }
+ }
+
return EFI_SUCCESS;
}
diff --git a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
index 8c93044580..4071e30c17 100644
--- a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
+++ b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
@@ -2,6 +2,7 @@
(C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
Copyright (c) 2022-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
@@ -606,10 +607,16 @@ RedfishConfigLangMapSet (
Status = EFI_NOT_FOUND;
Target = FindConfigLangMapRecord (&Private->ConfigLangList.ListHeader, ConfigLang, FALSE);
if (Target != NULL) {
- //
- // Remove old one and create new one.
- //
- Status = DeleteConfigLangMapRecord (&Private->ConfigLangList, Target);
+ if (Uri != NULL) {
+ if (StrCmp (Uri, Target->Uri) == 0) {
+ return EFI_SUCCESS;
+ }
+ } else {
+ //
+ // Remove old one and create new one.
+ //
+ Status = DeleteConfigLangMapRecord (&Private->ConfigLangList, Target);
+ }
}
//
--
2.37.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117033): https://edk2.groups.io/g/devel/message/117033
Mute This Topic: https://groups.io/mt/105081867/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2] RedfishClientPkg: Set SettingsObject URI as the config language
2024-03-22 9:09 [edk2-devel] [edk2-redfish-client][PATCH V3 1/2] RedfishClientPkg: Set SettingsObject URI as the config language Chang, Abner via groups.io
@ 2024-03-22 9:19 ` Mike Maslenkin
2024-03-22 9:58 ` Chang, Abner via groups.io
0 siblings, 1 reply; 5+ messages in thread
From: Mike Maslenkin @ 2024-03-22 9:19 UTC (permalink / raw)
To: devel, Abner Chang; +Cc: Igor Kulchytskyy, Nickle Wang
Hi Abner,
> On 22. 3. 2024., at 12:09, Chang, Abner via groups.io <abner.chang=amd.com@groups.io> wrote:
>
> From: Abner Chang <abner.chang@amd.com>
>
> Set SettingsObject URI in @Redfish.Settings resource as the config
> language which is the same as the config language of parent URI
> that mandates @Redfish.Settings.
> With this, we can find the config language of the properties in
> SettingsObject URI.
>
> Signed-off-by: Abner Chang <abner.chang@amd.com>
> Cc: Igor Kulchytskyy <igork@ami.com>
> Co-authored-by: Nickle Wang <nicklew@nvidia.com>
> ---
> .../Library/RedfishFeatureUtilityLib.h | 17 ++++
> .../RedfishFeatureUtilityLib.c | 86 ++++++++++++++++---
> .../RedfishConfigLangMapDxe.c | 15 +++-
> 3 files changed, 101 insertions(+), 17 deletions(-)
>
> diff --git a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> index ba9ea01501..3c5f248eb7 100644
> --- a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> +++ b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> @@ -369,6 +369,23 @@ RedfishSetRedfishUri (
> IN EFI_STRING Uri
> );
>
> +/**
> +
> + Save Redfish SettingsObject URI in database for further use.
> +
> + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> +
> + @retval EFI_INVALID_PARAMETER SystemId is NULL or EMPTY
> + @retval EFI_SUCCESS Redfish uri is saved
> +
> +**/
> +EFI_STATUS
> +SetRedfishSettingsObjectsUri (
> + IN EFI_STRING ParentUri,
> + IN EFI_STRING SettingObjectUri
> + );
> +
> /**
>
> Get the property name by given Configure Language.
> diff --git a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c
> index cc2b37b796..c37bf85310 100644
> --- a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c
> +++ b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c
> @@ -2082,7 +2082,6 @@ GetConfigureLang (
> EFI_STRING ResultStr;
> EFI_STRING UnicodeUri;
> EFI_STATUS Status;
> - EFI_STRING StrFound;
>
> if (IS_EMPTY_STRING (Uri)) {
> return NULL;
> @@ -2101,18 +2100,6 @@ GetConfigureLang (
> }
>
> ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> - if (ConfigLang == NULL) {
> - //
> - // @Redfish.Settings share the same schema as its parent.
> - // Remove "Settings" and try again.
> - //
> - StrFound = StrStr (UnicodeUri, L"/Settings");
> - if (StrFound != NULL) {
> - StrFound[0] = L'\0';
> - DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI, try: %s\n", __func__, UnicodeUri));
> - ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> - }
> - }
>
> FreePool (UnicodeUri);
>
> @@ -2172,6 +2159,61 @@ RedfishSetRedfishUri (
> return mConfigLangMapProtocol->Set (mConfigLangMapProtocol, ConfigLang, Uri);
> }
>
> +/**
> +
> + Save Redfish SettingsObject URI in database for further use.
> +
> + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> +
> + @retval EFI_INVALID_PARAMETER ParentUri or SettingObjectUri is NULL.
> + @retval EFI_NOT_FOUND Config language for ParentUri is not found.
> + @retval EFI_SUCCESS Redfish URI is saved with corresponding
> + config language.
> +
> +**/
> +EFI_STATUS
> +SetRedfishSettingsObjectsUri (
> + IN EFI_STRING ParentUri,
> + IN EFI_STRING SettingObjectUri
> + )
> +{
> + EFI_STATUS Status;
> + EFI_STRING ConfigLang;
> +
> + if ((ParentUri == NULL) || (SettingObjectUri == NULL)) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + //
> + // Check if the SettingsObject URI already in the database.
> + //
> + ConfigLang = RedfishGetConfigLanguage (SettingObjectUri);
> + if (ConfigLang == NULL) {
> + //
> + // No config language of SettingsObject URI is found.
> + // Get the config language of parent URI because the data model of
> + // SettingsObject URI resource is the same as the data model of parent URI.
> + //
> + ConfigLang = RedfishGetConfigLanguage (ParentUri);
> + if (ConfigLang == NULL) {
> + DEBUG ((DEBUG_ERROR, "%a: Failed to get the config language of parent URI that mandates SettingsObject - %s.\n", __func__, ParentUri));
> + return EFI_NOT_FOUND;
> + }
> +
> + // Set the config language of settings URI using parent's URI config language.
> + Status = RedfishSetRedfishUri (ConfigLang, SettingObjectUri);
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "%a: Fails to set the config language of SettingsObject - %s.\n", __func__, SettingObjectUri));
looks like there is ConfigLang leak in this function.
> + return Status;
> + }
> +
> + DEBUG ((DEBUG_INFO, "%a: Set the config language of SettingsObject - %s: SUCCESS.\n", __func__, SettingObjectUri));
> + }
> +
> + return EFI_SUCCESS;
> +}
> +
> /**
>
> Get @odata.id from give HTTP payload. It's call responsibility to release returned buffer.
> @@ -3532,6 +3574,7 @@ CompareRedfishBooleanArrayValues (
> payload and URI to pending settings. Caller has to release "SettingPayload" and
> "SettingUri".
>
> + @param[in] RedfishService Instance of REDFISH_SERVICE
> @param[in] Payload Payload that may contain "@Redfish.Settings"
> @param[out] SettingPayload Payload keeps pending settings.
> @param[out] SettingUri URI to pending settings.
> @@ -3552,6 +3595,7 @@ GetPendingSettings (
> EDKII_JSON_VALUE JsonValue;
> UINTN Index;
> EFI_STATUS Status;
> + EFI_STRING StrFound;
>
> if ((RedfishService == NULL) || (Payload == NULL) || (SettingResponse == NULL) || (SettingUri == NULL)) {
> return EFI_INVALID_PARAMETER;
> @@ -3586,6 +3630,22 @@ GetPendingSettings (
> return Status;
> }
>
> + //
> + // Setting URI exists, check if settings URI is valid or not.
> + //
> + StrFound = StrStr (*SettingUri, L"/Settings");
> + if (StrFound != NULL) {
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI: %s\n", __func__, *SettingUri));
> + } else {
> + StrFound = StrStr (*SettingUri, L"/SD");
> + if (StrFound != NULL) {
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"SD\" found in URI: %s\n", __func__, *SettingUri));
> + } else {
> + DEBUG ((DEBUG_ERROR, "%a: Not an valid @redfish.settings URI\n", __func__, *SettingUri));
> + ASSERT (FALSE);
> + }
> + }
> +
> return EFI_SUCCESS;
> }
>
> diff --git a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> index 8c93044580..4071e30c17 100644
> --- a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> +++ b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> @@ -2,6 +2,7 @@
>
> (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> Copyright (c) 2022-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
>
> @@ -606,10 +607,16 @@ RedfishConfigLangMapSet (
> Status = EFI_NOT_FOUND;
> Target = FindConfigLangMapRecord (&Private->ConfigLangList.ListHeader, ConfigLang, FALSE);
> if (Target != NULL) {
> - //
> - // Remove old one and create new one.
> - //
> - Status = DeleteConfigLangMapRecord (&Private->ConfigLangList, Target);
> + if (Uri != NULL) {
> + if (StrCmp (Uri, Target->Uri) == 0) {
> + return EFI_SUCCESS;
> + }
> + } else {
> + //
> + // Remove old one and create new one.
> + //
> + Status = DeleteConfigLangMapRecord (&Private->ConfigLangList, Target);
> + }
> }
>
> //
> --
> 2.37.1.windows.1
Regards,
Mike.
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117035): https://edk2.groups.io/g/devel/message/117035
Mute This Topic: https://groups.io/mt/105081867/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2] RedfishClientPkg: Set SettingsObject URI as the config language
2024-03-22 9:19 ` Mike Maslenkin
@ 2024-03-22 9:58 ` Chang, Abner via groups.io
2024-03-22 10:07 ` Mike Maslenkin
0 siblings, 1 reply; 5+ messages in thread
From: Chang, Abner via groups.io @ 2024-03-22 9:58 UTC (permalink / raw)
To: M M, devel@edk2.groups.io; +Cc: Igor Kulchytskyy, Nickle Wang
[AMD Official Use Only - General]
Hi Mike,
Thanks for catching this, V4 sent.
Abner
> -----Original Message-----
> From: M M <mike.maslenkin@gmail.com>
> Sent: Friday, March 22, 2024 5:20 PM
> To: devel@edk2.groups.io; Chang, Abner <Abner.Chang@amd.com>
> Cc: Igor Kulchytskyy <igork@ami.com>; Nickle Wang <nicklew@nvidia.com>
> Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2]
> RedfishClientPkg: Set SettingsObject URI as the config language
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> Hi Abner,
>
> > On 22. 3. 2024., at 12:09, Chang, Abner via groups.io
> <abner.chang=amd.com@groups.io> wrote:
> >
> > From: Abner Chang <abner.chang@amd.com>
> >
> > Set SettingsObject URI in @Redfish.Settings resource as the config
> > language which is the same as the config language of parent URI
> > that mandates @Redfish.Settings.
> > With this, we can find the config language of the properties in
> > SettingsObject URI.
> >
> > Signed-off-by: Abner Chang <abner.chang@amd.com>
> > Cc: Igor Kulchytskyy <igork@ami.com>
> > Co-authored-by: Nickle Wang <nicklew@nvidia.com>
> > ---
> > .../Library/RedfishFeatureUtilityLib.h | 17 ++++
> > .../RedfishFeatureUtilityLib.c | 86 ++++++++++++++++---
> > .../RedfishConfigLangMapDxe.c | 15 +++-
> > 3 files changed, 101 insertions(+), 17 deletions(-)
> >
> > diff --git a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > index ba9ea01501..3c5f248eb7 100644
> > --- a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > +++ b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > @@ -369,6 +369,23 @@ RedfishSetRedfishUri (
> > IN EFI_STRING Uri
> > );
> >
> > +/**
> > +
> > + Save Redfish SettingsObject URI in database for further use.
> > +
> > + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> > + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> > +
> > + @retval EFI_INVALID_PARAMETER SystemId is NULL or EMPTY
> > + @retval EFI_SUCCESS Redfish uri is saved
> > +
> > +**/
> > +EFI_STATUS
> > +SetRedfishSettingsObjectsUri (
> > + IN EFI_STRING ParentUri,
> > + IN EFI_STRING SettingObjectUri
> > + );
> > +
> > /**
> >
> > Get the property name by given Configure Language.
> > diff --git
> a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> c
> b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> c
> > index cc2b37b796..c37bf85310 100644
> > ---
> a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> c
> > +++
> b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> c
> > @@ -2082,7 +2082,6 @@ GetConfigureLang (
> > EFI_STRING ResultStr;
> > EFI_STRING UnicodeUri;
> > EFI_STATUS Status;
> > - EFI_STRING StrFound;
> >
> > if (IS_EMPTY_STRING (Uri)) {
> > return NULL;
> > @@ -2101,18 +2100,6 @@ GetConfigureLang (
> > }
> >
> > ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> > - if (ConfigLang == NULL) {
> > - //
> > - // @Redfish.Settings share the same schema as its parent.
> > - // Remove "Settings" and try again.
> > - //
> > - StrFound = StrStr (UnicodeUri, L"/Settings");
> > - if (StrFound != NULL) {
> > - StrFound[0] = L'\0';
> > - DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI, try:
> %s\n", __func__, UnicodeUri));
> > - ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> > - }
> > - }
> >
> > FreePool (UnicodeUri);
> >
> > @@ -2172,6 +2159,61 @@ RedfishSetRedfishUri (
> > return mConfigLangMapProtocol->Set (mConfigLangMapProtocol,
> ConfigLang, Uri);
> > }
> >
> > +/**
> > +
> > + Save Redfish SettingsObject URI in database for further use.
> > +
> > + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> > + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> > +
> > + @retval EFI_INVALID_PARAMETER ParentUri or SettingObjectUri is NULL.
> > + @retval EFI_NOT_FOUND Config language for ParentUri is not found.
> > + @retval EFI_SUCCESS Redfish URI is saved with corresponding
> > + config language.
> > +
> > +**/
> > +EFI_STATUS
> > +SetRedfishSettingsObjectsUri (
> > + IN EFI_STRING ParentUri,
> > + IN EFI_STRING SettingObjectUri
> > + )
> > +{
> > + EFI_STATUS Status;
> > + EFI_STRING ConfigLang;
> > +
> > + if ((ParentUri == NULL) || (SettingObjectUri == NULL)) {
> > + return EFI_INVALID_PARAMETER;
> > + }
> > +
> > + //
> > + // Check if the SettingsObject URI already in the database.
> > + //
> > + ConfigLang = RedfishGetConfigLanguage (SettingObjectUri);
> > + if (ConfigLang == NULL) {
> > + //
> > + // No config language of SettingsObject URI is found.
> > + // Get the config language of parent URI because the data model of
> > + // SettingsObject URI resource is the same as the data model of parent
> URI.
> > + //
> > + ConfigLang = RedfishGetConfigLanguage (ParentUri);
> > + if (ConfigLang == NULL) {
> > + DEBUG ((DEBUG_ERROR, "%a: Failed to get the config language of
> parent URI that mandates SettingsObject - %s.\n", __func__, ParentUri));
> > + return EFI_NOT_FOUND;
> > + }
> > +
> > + // Set the config language of settings URI using parent's URI config
> language.
> > + Status = RedfishSetRedfishUri (ConfigLang, SettingObjectUri);
> > + if (EFI_ERROR (Status)) {
> > + DEBUG ((DEBUG_ERROR, "%a: Fails to set the config language of
> SettingsObject - %s.\n", __func__, SettingObjectUri));
>
> looks like there is ConfigLang leak in this function.
>
> > + return Status;
> > + }
> > +
> > + DEBUG ((DEBUG_INFO, "%a: Set the config language of SettingsObject -
> %s: SUCCESS.\n", __func__, SettingObjectUri));
> > + }
> > +
> > + return EFI_SUCCESS;
> > +}
> > +
> > /**
> >
> > Get @odata.id from give HTTP payload. It's call responsibility to release
> returned buffer.
> > @@ -3532,6 +3574,7 @@ CompareRedfishBooleanArrayValues (
> > payload and URI to pending settings. Caller has to release "SettingPayload"
> and
> > "SettingUri".
> >
> > + @param[in] RedfishService Instance of REDFISH_SERVICE
> > @param[in] Payload Payload that may contain "@Redfish.Settings"
> > @param[out] SettingPayload Payload keeps pending settings.
> > @param[out] SettingUri URI to pending settings.
> > @@ -3552,6 +3595,7 @@ GetPendingSettings (
> > EDKII_JSON_VALUE JsonValue;
> > UINTN Index;
> > EFI_STATUS Status;
> > + EFI_STRING StrFound;
> >
> > if ((RedfishService == NULL) || (Payload == NULL) || (SettingResponse ==
> NULL) || (SettingUri == NULL)) {
> > return EFI_INVALID_PARAMETER;
> > @@ -3586,6 +3630,22 @@ GetPendingSettings (
> > return Status;
> > }
> >
> > + //
> > + // Setting URI exists, check if settings URI is valid or not.
> > + //
> > + StrFound = StrStr (*SettingUri, L"/Settings");
> > + if (StrFound != NULL) {
> > + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI:
> %s\n", __func__, *SettingUri));
> > + } else {
> > + StrFound = StrStr (*SettingUri, L"/SD");
> > + if (StrFound != NULL) {
> > + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"SD\" found in URI: %s\n",
> __func__, *SettingUri));
> > + } else {
> > + DEBUG ((DEBUG_ERROR, "%a: Not an valid @redfish.settings URI\n",
> __func__, *SettingUri));
> > + ASSERT (FALSE);
> > + }
> > + }
> > +
> > return EFI_SUCCESS;
> > }
> >
> > diff --git
> a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > index 8c93044580..4071e30c17 100644
> > ---
> a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > +++
> b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > @@ -2,6 +2,7 @@
> >
> > (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> > Copyright (c) 2022-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
> >
> > @@ -606,10 +607,16 @@ RedfishConfigLangMapSet (
> > Status = EFI_NOT_FOUND;
> > Target = FindConfigLangMapRecord (&Private->ConfigLangList.ListHeader,
> ConfigLang, FALSE);
> > if (Target != NULL) {
> > - //
> > - // Remove old one and create new one.
> > - //
> > - Status = DeleteConfigLangMapRecord (&Private->ConfigLangList, Target);
> > + if (Uri != NULL) {
> > + if (StrCmp (Uri, Target->Uri) == 0) {
> > + return EFI_SUCCESS;
> > + }
> > + } else {
> > + //
> > + // Remove old one and create new one.
> > + //
> > + Status = DeleteConfigLangMapRecord (&Private->ConfigLangList,
> Target);
> > + }
> > }
> >
> > //
> > --
> > 2.37.1.windows.1
>
> Regards,
> Mike.
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117044): https://edk2.groups.io/g/devel/message/117044
Mute This Topic: https://groups.io/mt/105081867/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2] RedfishClientPkg: Set SettingsObject URI as the config language
2024-03-22 9:58 ` Chang, Abner via groups.io
@ 2024-03-22 10:07 ` Mike Maslenkin
2024-03-22 14:41 ` Chang, Abner via groups.io
0 siblings, 1 reply; 5+ messages in thread
From: Mike Maslenkin @ 2024-03-22 10:07 UTC (permalink / raw)
To: Chang, Abner; +Cc: devel@edk2.groups.io, Igor Kulchytskyy, Nickle Wang
Hi Abner,
Sorry if I wasn't clear.
I meant in this function including the success path.
RedfishSetRedfishUri->..->NewConfigLangMapRecord() creates a copy of
this string, so it should be freed in this function.
Regards,
Mike.
On Fri, Mar 22, 2024 at 12:58 PM Chang, Abner <Abner.Chang@amd.com> wrote:
>
> [AMD Official Use Only - General]
>
> Hi Mike,
> Thanks for catching this, V4 sent.
>
> Abner
>
> > -----Original Message-----
> > From: M M <mike.maslenkin@gmail.com>
> > Sent: Friday, March 22, 2024 5:20 PM
> > To: devel@edk2.groups.io; Chang, Abner <Abner.Chang@amd.com>
> > Cc: Igor Kulchytskyy <igork@ami.com>; Nickle Wang <nicklew@nvidia.com>
> > Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2]
> > RedfishClientPkg: Set SettingsObject URI as the config language
> >
> > Caution: This message originated from an External Source. Use proper caution
> > when opening attachments, clicking links, or responding.
> >
> >
> > Hi Abner,
> >
> > > On 22. 3. 2024., at 12:09, Chang, Abner via groups.io
> > <abner.chang=amd.com@groups.io> wrote:
> > >
> > > From: Abner Chang <abner.chang@amd.com>
> > >
> > > Set SettingsObject URI in @Redfish.Settings resource as the config
> > > language which is the same as the config language of parent URI
> > > that mandates @Redfish.Settings.
> > > With this, we can find the config language of the properties in
> > > SettingsObject URI.
> > >
> > > Signed-off-by: Abner Chang <abner.chang@amd.com>
> > > Cc: Igor Kulchytskyy <igork@ami.com>
> > > Co-authored-by: Nickle Wang <nicklew@nvidia.com>
> > > ---
> > > .../Library/RedfishFeatureUtilityLib.h | 17 ++++
> > > .../RedfishFeatureUtilityLib.c | 86 ++++++++++++++++---
> > > .../RedfishConfigLangMapDxe.c | 15 +++-
> > > 3 files changed, 101 insertions(+), 17 deletions(-)
> > >
> > > diff --git a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > > index ba9ea01501..3c5f248eb7 100644
> > > --- a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > > +++ b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > > @@ -369,6 +369,23 @@ RedfishSetRedfishUri (
> > > IN EFI_STRING Uri
> > > );
> > >
> > > +/**
> > > +
> > > + Save Redfish SettingsObject URI in database for further use.
> > > +
> > > + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> > > + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> > > +
> > > + @retval EFI_INVALID_PARAMETER SystemId is NULL or EMPTY
> > > + @retval EFI_SUCCESS Redfish uri is saved
> > > +
> > > +**/
> > > +EFI_STATUS
> > > +SetRedfishSettingsObjectsUri (
> > > + IN EFI_STRING ParentUri,
> > > + IN EFI_STRING SettingObjectUri
> > > + );
> > > +
> > > /**
> > >
> > > Get the property name by given Configure Language.
> > > diff --git
> > a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > c
> > b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > c
> > > index cc2b37b796..c37bf85310 100644
> > > ---
> > a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > c
> > > +++
> > b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > c
> > > @@ -2082,7 +2082,6 @@ GetConfigureLang (
> > > EFI_STRING ResultStr;
> > > EFI_STRING UnicodeUri;
> > > EFI_STATUS Status;
> > > - EFI_STRING StrFound;
> > >
> > > if (IS_EMPTY_STRING (Uri)) {
> > > return NULL;
> > > @@ -2101,18 +2100,6 @@ GetConfigureLang (
> > > }
> > >
> > > ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> > > - if (ConfigLang == NULL) {
> > > - //
> > > - // @Redfish.Settings share the same schema as its parent.
> > > - // Remove "Settings" and try again.
> > > - //
> > > - StrFound = StrStr (UnicodeUri, L"/Settings");
> > > - if (StrFound != NULL) {
> > > - StrFound[0] = L'\0';
> > > - DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI, try:
> > %s\n", __func__, UnicodeUri));
> > > - ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> > > - }
> > > - }
> > >
> > > FreePool (UnicodeUri);
> > >
> > > @@ -2172,6 +2159,61 @@ RedfishSetRedfishUri (
> > > return mConfigLangMapProtocol->Set (mConfigLangMapProtocol,
> > ConfigLang, Uri);
> > > }
> > >
> > > +/**
> > > +
> > > + Save Redfish SettingsObject URI in database for further use.
> > > +
> > > + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> > > + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> > > +
> > > + @retval EFI_INVALID_PARAMETER ParentUri or SettingObjectUri is NULL.
> > > + @retval EFI_NOT_FOUND Config language for ParentUri is not found.
> > > + @retval EFI_SUCCESS Redfish URI is saved with corresponding
> > > + config language.
> > > +
> > > +**/
> > > +EFI_STATUS
> > > +SetRedfishSettingsObjectsUri (
> > > + IN EFI_STRING ParentUri,
> > > + IN EFI_STRING SettingObjectUri
> > > + )
> > > +{
> > > + EFI_STATUS Status;
> > > + EFI_STRING ConfigLang;
> > > +
> > > + if ((ParentUri == NULL) || (SettingObjectUri == NULL)) {
> > > + return EFI_INVALID_PARAMETER;
> > > + }
> > > +
> > > + //
> > > + // Check if the SettingsObject URI already in the database.
> > > + //
> > > + ConfigLang = RedfishGetConfigLanguage (SettingObjectUri);
> > > + if (ConfigLang == NULL) {
> > > + //
> > > + // No config language of SettingsObject URI is found.
> > > + // Get the config language of parent URI because the data model of
> > > + // SettingsObject URI resource is the same as the data model of parent
> > URI.
> > > + //
> > > + ConfigLang = RedfishGetConfigLanguage (ParentUri);
> > > + if (ConfigLang == NULL) {
> > > + DEBUG ((DEBUG_ERROR, "%a: Failed to get the config language of
> > parent URI that mandates SettingsObject - %s.\n", __func__, ParentUri));
> > > + return EFI_NOT_FOUND;
> > > + }
> > > +
> > > + // Set the config language of settings URI using parent's URI config
> > language.
> > > + Status = RedfishSetRedfishUri (ConfigLang, SettingObjectUri);
> > > + if (EFI_ERROR (Status)) {
> > > + DEBUG ((DEBUG_ERROR, "%a: Fails to set the config language of
> > SettingsObject - %s.\n", __func__, SettingObjectUri));
> >
> > looks like there is ConfigLang leak in this function.
> >
> > > + return Status;
> > > + }
> > > +
> > > + DEBUG ((DEBUG_INFO, "%a: Set the config language of SettingsObject -
> > %s: SUCCESS.\n", __func__, SettingObjectUri));
> > > + }
> > > +
> > > + return EFI_SUCCESS;
> > > +}
> > > +
> > > /**
> > >
> > > Get @odata.id from give HTTP payload. It's call responsibility to release
> > returned buffer.
> > > @@ -3532,6 +3574,7 @@ CompareRedfishBooleanArrayValues (
> > > payload and URI to pending settings. Caller has to release "SettingPayload"
> > and
> > > "SettingUri".
> > >
> > > + @param[in] RedfishService Instance of REDFISH_SERVICE
> > > @param[in] Payload Payload that may contain "@Redfish.Settings"
> > > @param[out] SettingPayload Payload keeps pending settings.
> > > @param[out] SettingUri URI to pending settings.
> > > @@ -3552,6 +3595,7 @@ GetPendingSettings (
> > > EDKII_JSON_VALUE JsonValue;
> > > UINTN Index;
> > > EFI_STATUS Status;
> > > + EFI_STRING StrFound;
> > >
> > > if ((RedfishService == NULL) || (Payload == NULL) || (SettingResponse ==
> > NULL) || (SettingUri == NULL)) {
> > > return EFI_INVALID_PARAMETER;
> > > @@ -3586,6 +3630,22 @@ GetPendingSettings (
> > > return Status;
> > > }
> > >
> > > + //
> > > + // Setting URI exists, check if settings URI is valid or not.
> > > + //
> > > + StrFound = StrStr (*SettingUri, L"/Settings");
> > > + if (StrFound != NULL) {
> > > + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI:
> > %s\n", __func__, *SettingUri));
> > > + } else {
> > > + StrFound = StrStr (*SettingUri, L"/SD");
> > > + if (StrFound != NULL) {
> > > + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"SD\" found in URI: %s\n",
> > __func__, *SettingUri));
> > > + } else {
> > > + DEBUG ((DEBUG_ERROR, "%a: Not an valid @redfish.settings URI\n",
> > __func__, *SettingUri));
> > > + ASSERT (FALSE);
> > > + }
> > > + }
> > > +
> > > return EFI_SUCCESS;
> > > }
> > >
> > > diff --git
> > a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > > index 8c93044580..4071e30c17 100644
> > > ---
> > a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > > +++
> > b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > > @@ -2,6 +2,7 @@
> > >
> > > (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> > > Copyright (c) 2022-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
> > >
> > > @@ -606,10 +607,16 @@ RedfishConfigLangMapSet (
> > > Status = EFI_NOT_FOUND;
> > > Target = FindConfigLangMapRecord (&Private->ConfigLangList.ListHeader,
> > ConfigLang, FALSE);
> > > if (Target != NULL) {
> > > - //
> > > - // Remove old one and create new one.
> > > - //
> > > - Status = DeleteConfigLangMapRecord (&Private->ConfigLangList, Target);
> > > + if (Uri != NULL) {
> > > + if (StrCmp (Uri, Target->Uri) == 0) {
> > > + return EFI_SUCCESS;
> > > + }
> > > + } else {
> > > + //
> > > + // Remove old one and create new one.
> > > + //
> > > + Status = DeleteConfigLangMapRecord (&Private->ConfigLangList,
> > Target);
> > > + }
> > > }
> > >
> > > //
> > > --
> > > 2.37.1.windows.1
> >
> > Regards,
> > Mike.
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117045): https://edk2.groups.io/g/devel/message/117045
Mute This Topic: https://groups.io/mt/105081867/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2] RedfishClientPkg: Set SettingsObject URI as the config language
2024-03-22 10:07 ` Mike Maslenkin
@ 2024-03-22 14:41 ` Chang, Abner via groups.io
0 siblings, 0 replies; 5+ messages in thread
From: Chang, Abner via groups.io @ 2024-03-22 14:41 UTC (permalink / raw)
To: Mike Maslenkin; +Cc: devel@edk2.groups.io, Igor Kulchytskyy, Nickle Wang
[AMD Official Use Only - General]
Ah I got your point. I reviewed that function and sent the V5.
Thanks
Abner
> -----Original Message-----
> From: Mike Maslenkin <mike.maslenkin@gmail.com>
> Sent: Friday, March 22, 2024 6:08 PM
> To: Chang, Abner <Abner.Chang@amd.com>
> Cc: devel@edk2.groups.io; Igor Kulchytskyy <igork@ami.com>; Nickle Wang
> <nicklew@nvidia.com>
> Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2]
> RedfishClientPkg: Set SettingsObject URI as the config language
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> Hi Abner,
>
> Sorry if I wasn't clear.
> I meant in this function including the success path.
> RedfishSetRedfishUri->..->NewConfigLangMapRecord() creates a copy of
> this string, so it should be freed in this function.
>
> Regards,
> Mike.
>
>
> On Fri, Mar 22, 2024 at 12:58 PM Chang, Abner <Abner.Chang@amd.com>
> wrote:
> >
> > [AMD Official Use Only - General]
> >
> > Hi Mike,
> > Thanks for catching this, V4 sent.
> >
> > Abner
> >
> > > -----Original Message-----
> > > From: M M <mike.maslenkin@gmail.com>
> > > Sent: Friday, March 22, 2024 5:20 PM
> > > To: devel@edk2.groups.io; Chang, Abner <Abner.Chang@amd.com>
> > > Cc: Igor Kulchytskyy <igork@ami.com>; Nickle Wang
> <nicklew@nvidia.com>
> > > Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH V3 1/2]
> > > RedfishClientPkg: Set SettingsObject URI as the config language
> > >
> > > Caution: This message originated from an External Source. Use proper
> caution
> > > when opening attachments, clicking links, or responding.
> > >
> > >
> > > Hi Abner,
> > >
> > > > On 22. 3. 2024., at 12:09, Chang, Abner via groups.io
> > > <abner.chang=amd.com@groups.io> wrote:
> > > >
> > > > From: Abner Chang <abner.chang@amd.com>
> > > >
> > > > Set SettingsObject URI in @Redfish.Settings resource as the config
> > > > language which is the same as the config language of parent URI
> > > > that mandates @Redfish.Settings.
> > > > With this, we can find the config language of the properties in
> > > > SettingsObject URI.
> > > >
> > > > Signed-off-by: Abner Chang <abner.chang@amd.com>
> > > > Cc: Igor Kulchytskyy <igork@ami.com>
> > > > Co-authored-by: Nickle Wang <nicklew@nvidia.com>
> > > > ---
> > > > .../Library/RedfishFeatureUtilityLib.h | 17 ++++
> > > > .../RedfishFeatureUtilityLib.c | 86 ++++++++++++++++---
> > > > .../RedfishConfigLangMapDxe.c | 15 +++-
> > > > 3 files changed, 101 insertions(+), 17 deletions(-)
> > > >
> > > > diff --git a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > > b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > > > index ba9ea01501..3c5f248eb7 100644
> > > > --- a/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > > > +++ b/RedfishClientPkg/Include/Library/RedfishFeatureUtilityLib.h
> > > > @@ -369,6 +369,23 @@ RedfishSetRedfishUri (
> > > > IN EFI_STRING Uri
> > > > );
> > > >
> > > > +/**
> > > > +
> > > > + Save Redfish SettingsObject URI in database for further use.
> > > > +
> > > > + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> > > > + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> > > > +
> > > > + @retval EFI_INVALID_PARAMETER SystemId is NULL or EMPTY
> > > > + @retval EFI_SUCCESS Redfish uri is saved
> > > > +
> > > > +**/
> > > > +EFI_STATUS
> > > > +SetRedfishSettingsObjectsUri (
> > > > + IN EFI_STRING ParentUri,
> > > > + IN EFI_STRING SettingObjectUri
> > > > + );
> > > > +
> > > > /**
> > > >
> > > > Get the property name by given Configure Language.
> > > > diff --git
> > >
> a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > > c
> > >
> b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > > c
> > > > index cc2b37b796..c37bf85310 100644
> > > > ---
> > >
> a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > > c
> > > > +++
> > >
> b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.
> > > c
> > > > @@ -2082,7 +2082,6 @@ GetConfigureLang (
> > > > EFI_STRING ResultStr;
> > > > EFI_STRING UnicodeUri;
> > > > EFI_STATUS Status;
> > > > - EFI_STRING StrFound;
> > > >
> > > > if (IS_EMPTY_STRING (Uri)) {
> > > > return NULL;
> > > > @@ -2101,18 +2100,6 @@ GetConfigureLang (
> > > > }
> > > >
> > > > ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> > > > - if (ConfigLang == NULL) {
> > > > - //
> > > > - // @Redfish.Settings share the same schema as its parent.
> > > > - // Remove "Settings" and try again.
> > > > - //
> > > > - StrFound = StrStr (UnicodeUri, L"/Settings");
> > > > - if (StrFound != NULL) {
> > > > - StrFound[0] = L'\0';
> > > > - DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI,
> try:
> > > %s\n", __func__, UnicodeUri));
> > > > - ConfigLang = RedfishGetConfigLanguage (UnicodeUri);
> > > > - }
> > > > - }
> > > >
> > > > FreePool (UnicodeUri);
> > > >
> > > > @@ -2172,6 +2159,61 @@ RedfishSetRedfishUri (
> > > > return mConfigLangMapProtocol->Set (mConfigLangMapProtocol,
> > > ConfigLang, Uri);
> > > > }
> > > >
> > > > +/**
> > > > +
> > > > + Save Redfish SettingsObject URI in database for further use.
> > > > +
> > > > + @param[in] ParentUri Parent URI of @Redfish.Settings property.
> > > > + @param[in] SettingObjectUri Redfish SettingsObject Uri to save.
> > > > +
> > > > + @retval EFI_INVALID_PARAMETER ParentUri or SettingObjectUri is
> NULL.
> > > > + @retval EFI_NOT_FOUND Config language for ParentUri is not
> found.
> > > > + @retval EFI_SUCCESS Redfish URI is saved with corresponding
> > > > + config language.
> > > > +
> > > > +**/
> > > > +EFI_STATUS
> > > > +SetRedfishSettingsObjectsUri (
> > > > + IN EFI_STRING ParentUri,
> > > > + IN EFI_STRING SettingObjectUri
> > > > + )
> > > > +{
> > > > + EFI_STATUS Status;
> > > > + EFI_STRING ConfigLang;
> > > > +
> > > > + if ((ParentUri == NULL) || (SettingObjectUri == NULL)) {
> > > > + return EFI_INVALID_PARAMETER;
> > > > + }
> > > > +
> > > > + //
> > > > + // Check if the SettingsObject URI already in the database.
> > > > + //
> > > > + ConfigLang = RedfishGetConfigLanguage (SettingObjectUri);
> > > > + if (ConfigLang == NULL) {
> > > > + //
> > > > + // No config language of SettingsObject URI is found.
> > > > + // Get the config language of parent URI because the data model of
> > > > + // SettingsObject URI resource is the same as the data model of
> parent
> > > URI.
> > > > + //
> > > > + ConfigLang = RedfishGetConfigLanguage (ParentUri);
> > > > + if (ConfigLang == NULL) {
> > > > + DEBUG ((DEBUG_ERROR, "%a: Failed to get the config language of
> > > parent URI that mandates SettingsObject - %s.\n", __func__, ParentUri));
> > > > + return EFI_NOT_FOUND;
> > > > + }
> > > > +
> > > > + // Set the config language of settings URI using parent's URI config
> > > language.
> > > > + Status = RedfishSetRedfishUri (ConfigLang, SettingObjectUri);
> > > > + if (EFI_ERROR (Status)) {
> > > > + DEBUG ((DEBUG_ERROR, "%a: Fails to set the config language of
> > > SettingsObject - %s.\n", __func__, SettingObjectUri));
> > >
> > > looks like there is ConfigLang leak in this function.
> > >
> > > > + return Status;
> > > > + }
> > > > +
> > > > + DEBUG ((DEBUG_INFO, "%a: Set the config language of SettingsObject
> -
> > > %s: SUCCESS.\n", __func__, SettingObjectUri));
> > > > + }
> > > > +
> > > > + return EFI_SUCCESS;
> > > > +}
> > > > +
> > > > /**
> > > >
> > > > Get @odata.id from give HTTP payload. It's call responsibility to release
> > > returned buffer.
> > > > @@ -3532,6 +3574,7 @@ CompareRedfishBooleanArrayValues (
> > > > payload and URI to pending settings. Caller has to release
> "SettingPayload"
> > > and
> > > > "SettingUri".
> > > >
> > > > + @param[in] RedfishService Instance of REDFISH_SERVICE
> > > > @param[in] Payload Payload that may contain "@Redfish.Settings"
> > > > @param[out] SettingPayload Payload keeps pending settings.
> > > > @param[out] SettingUri URI to pending settings.
> > > > @@ -3552,6 +3595,7 @@ GetPendingSettings (
> > > > EDKII_JSON_VALUE JsonValue;
> > > > UINTN Index;
> > > > EFI_STATUS Status;
> > > > + EFI_STRING StrFound;
> > > >
> > > > if ((RedfishService == NULL) || (Payload == NULL) || (SettingResponse
> ==
> > > NULL) || (SettingUri == NULL)) {
> > > > return EFI_INVALID_PARAMETER;
> > > > @@ -3586,6 +3630,22 @@ GetPendingSettings (
> > > > return Status;
> > > > }
> > > >
> > > > + //
> > > > + // Setting URI exists, check if settings URI is valid or not.
> > > > + //
> > > > + StrFound = StrStr (*SettingUri, L"/Settings");
> > > > + if (StrFound != NULL) {
> > > > + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"Settings\" found in URI:
> > > %s\n", __func__, *SettingUri));
> > > > + } else {
> > > > + StrFound = StrStr (*SettingUri, L"/SD");
> > > > + if (StrFound != NULL) {
> > > > + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"SD\" found in URI: %s\n",
> > > __func__, *SettingUri));
> > > > + } else {
> > > > + DEBUG ((DEBUG_ERROR, "%a: Not an valid @redfish.settings
> URI\n",
> > > __func__, *SettingUri));
> > > > + ASSERT (FALSE);
> > > > + }
> > > > + }
> > > > +
> > > > return EFI_SUCCESS;
> > > > }
> > > >
> > > > diff --git
> > >
> a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > >
> b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > > > index 8c93044580..4071e30c17 100644
> > > > ---
> > >
> a/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > > > +++
> > >
> b/RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.c
> > > > @@ -2,6 +2,7 @@
> > > >
> > > > (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> > > > Copyright (c) 2022-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
> > > >
> > > > @@ -606,10 +607,16 @@ RedfishConfigLangMapSet (
> > > > Status = EFI_NOT_FOUND;
> > > > Target = FindConfigLangMapRecord (&Private-
> >ConfigLangList.ListHeader,
> > > ConfigLang, FALSE);
> > > > if (Target != NULL) {
> > > > - //
> > > > - // Remove old one and create new one.
> > > > - //
> > > > - Status = DeleteConfigLangMapRecord (&Private->ConfigLangList,
> Target);
> > > > + if (Uri != NULL) {
> > > > + if (StrCmp (Uri, Target->Uri) == 0) {
> > > > + return EFI_SUCCESS;
> > > > + }
> > > > + } else {
> > > > + //
> > > > + // Remove old one and create new one.
> > > > + //
> > > > + Status = DeleteConfigLangMapRecord (&Private->ConfigLangList,
> > > Target);
> > > > + }
> > > > }
> > > >
> > > > //
> > > > --
> > > > 2.37.1.windows.1
> > >
> > > Regards,
> > > Mike.
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117054): https://edk2.groups.io/g/devel/message/117054
Mute This Topic: https://groups.io/mt/105081867/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-03-22 14:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-22 9:09 [edk2-devel] [edk2-redfish-client][PATCH V3 1/2] RedfishClientPkg: Set SettingsObject URI as the config language Chang, Abner via groups.io
2024-03-22 9:19 ` Mike Maslenkin
2024-03-22 9:58 ` Chang, Abner via groups.io
2024-03-22 10:07 ` Mike Maslenkin
2024-03-22 14:41 ` Chang, Abner via groups.io
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox