From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (NAM12-BN8-obe.outbound.protection.outlook.com [40.107.237.89]) by mx.groups.io with SMTP id smtpd.web10.55569.1681954095255873580 for ; Wed, 19 Apr 2023 18:28:15 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=TNl62oF+; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.237.89, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BxIoK/WDeS4XDx+G5RVwt47KBZU4oF0yPFwLMdVqgOtdkqyRpv5mZbKtJpbLEZmBdGETZ3wjNfCvYPmtjPXWDRnZgkMsGJ84pjY4XrP2oZ9Fqew5GfR5E7kfBWvot/lYi4vc5l9IHt3SiOvL7aLFWfQAt5BYsvJIKw1MNBzPh7N+i0IGz1BJV+3BDTWsrx2HKsgutVB3u0JJSu2vvWrwOzpQqiu9WfGC9PJH9mYRV5WodlNWrOWSrVCcMWoWfBVC28iui4tFMAS84Az0p0vVCPIjNIinE5OFmQGUelVhHQEyra6shgstlxprfC7FDGp60upnp8/UhDzZS0/+wUaTaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=//VCwL9VVkx0DkegJt2fEMzpahBN87LNLrrUaz/EIlw=; b=FXkMSKawl28+AIODISGq/8X+8v16INH0rFcacUKNqZQtvUCIOFP2QqOI5SQmouU63tWjiGDhNMJtvIPomCrJUJUjhIRALrtRpK70ogOImI3DPt9rfjHG+crvBCshtGsu5VcWCChfTcU9/24y0VguqZWCm+Ooq0I/QPRIEeQYbFatcJkKQBDkgYsy71C/ilK+/8YYFgg03wdZSMypEDT18OK1Dd5xlQ0uSjOfsi2iQuDNkOWJIv9QVAL+np1Y0ZpmNBz/RkhZMmElep7LfHrZv5dh5v6iNN+vWzOuafBknA1GUQj8qy7yXNGA5s5HFd9LfF9jKvrlDax3pAdItZ+kOg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=//VCwL9VVkx0DkegJt2fEMzpahBN87LNLrrUaz/EIlw=; b=TNl62oF+s8bGZqj+Wg6+wOq5jjUuu5Y9elaQ3zbyvyRQA/ObgL0YxOi0YNebSX0PPRQgGI+lZ8oI0pEErfWrW+U2zffEpMelrEP6DH8S6bhYNuqlWpeOffo8Uij499//HJS+Jus2RNCDDtUQwS38ZyxDqaGyUlhjJr7XTjzR04s= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by MN0PR12MB6223.namprd12.prod.outlook.com (2603:10b6:208:3c1::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6298.45; Thu, 20 Apr 2023 01:28:12 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3%3]) with mapi id 15.20.6319.020; Thu, 20 Apr 2023 01:28:10 +0000 From: "Chang, Abner" To: Minh Nguyen OS , "devel@edk2.groups.io" CC: Open Source Submission , "nicklew@nvidia.com" , "igork@ami.com" , Nhi Pham OS , Tinh Nguyen OS , Vu Nguyen OS Subject: Re: [PATCH 3/5] RedfishPkg: Create RestEx child on selected interface Thread-Topic: [PATCH 3/5] RedfishPkg: Create RestEx child on selected interface Thread-Index: AQHZbqnrNhk9IBTVY0uO/0xIkIbpUK8tWzpAgAYUxICAAACBmQ== Date: Thu, 20 Apr 2023 01:28:10 +0000 Message-ID: References: <20230414081903.7892-1-minhnguyen@os.amperecomputing.com> <20230414081903.7892-4-minhnguyen@os.amperecomputing.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=True;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-04-16T04:36:03.0000000Z;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=0;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Enabled=True;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SiteId=3bc2b170-fd94-476d-b0ce-4229bdc904a7;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-04-20T01:23:07.0700000Z;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ContentBits=0;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Method=Standard authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB3966:EE_|MN0PR12MB6223:EE_ x-ms-office365-filtering-correlation-id: d6ffa6cc-e57a-42de-3f8d-08db413e805b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DuCC/Wyf2Lghg1pgKLC7WHtKoHyFa4+P1xAnKc4RDVh00GvXHW+knOmDHFSfSuX7TIrQtvfZ/YsJvky/B6ZFqZArK2SOVrY4cs3/XFZCFsAGFVmSfp0EaS4qQfvBhCw/8AfUZLDPPDWUruTgjnGVPSTGVkIKi1z6nC5+bAmf5ucIbniUAsS0Twz0kVlOESpASG6Ubuo6mhvsKdfLl2a0LOB91jUhxIeh5GsNOEHZtpFOHjjhyuEOe2AGuufHgh47WRx7qpVSvrPLt7EQeImtRKDyWnhAsRNCpWGVL/HlqSUe0/KCB/myG8fNkwUIsSgZ59hrAwVD9j9Z8PXcV3iPp8r2Sj4+O2TkQbsscB2GTa3PuLK0TJv0zpvfn6UNz3lOThNrVYveMoS4a+9G4tZ1iUdXkYtZWtfWtLVMhfNat3BGjvSoVGPQJWLv6i9ZbdX6s250jj0n7ptbMAzQc2mII8kp3j9e/VNPRnOU9Hc7TCOTBKGAsSfpXdtNb9BSsQLBjC3JTEDAhgBax8GItFYCmfwvaTiabhfQO0rLWRgDFTwa4ltcBa57ka1j4pD81RFjvlMgpqyOV1YImSpcPUuUHFKU39uE0+TjLxcF+a8NEKY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(366004)(396003)(376002)(346002)(39860400002)(136003)(451199021)(316002)(110136005)(9686003)(54906003)(53546011)(26005)(6506007)(478600001)(45080400002)(66946007)(66446008)(64756008)(66556008)(66476007)(76116006)(83380400001)(7696005)(71200400001)(186003)(91956017)(4326008)(30864003)(8676002)(41300700001)(166002)(8936002)(5660300002)(122000001)(2906002)(52536014)(38070700005)(33656002)(38100700002)(55016003)(86362001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?KifBX6nqzCPdZ7ND+Md5EOtQKthZil0Mg53gSju3ZpzTqCrihTaWJA2JmEQL?= =?us-ascii?Q?IFG7fYMFkN0J56+fuxaTwZPafGcmJPD4x8x5FBEFZ8PwTR6WD1M42ZrgKrzg?= =?us-ascii?Q?Xx8qBlnneb6kMFm9kdlKHUPR3i2KRz80Fv29SGpu7BOwdvUPVx2y3dJxk4Ef?= =?us-ascii?Q?c1y6HveO8GypzJvRDU6xi/b2aGDKZIav/IF9E8IVahamO+01AUXEjWeoWFbf?= =?us-ascii?Q?ip5LGd1vvMKHOAAfBKYCMZwlSEIgotc0QotNRcD/T0744fWG36pZOGyhCvna?= =?us-ascii?Q?KLKLZqV9Frf4QvaJD37ZVjFVTt7dQxOYu7jBDOUXb/uHEa8vkVS1wqwvdOnq?= =?us-ascii?Q?1J84l/kbws6l5Rn84zmcqV1hkde2HXXwytWgtqXrh0l8sA16XWBRQXrhO2DM?= =?us-ascii?Q?S2WRrWDALQsWk/T9Wwyo7hiHNJ5Wf5MQTQzauq2wpLbhN2YCOk/a20KFUzk2?= =?us-ascii?Q?bnxx22g1PCFO2CluCc3s81VZ6/ZHlJxF1pFkVlbwG7sUD4P30oYECFJNuQnN?= =?us-ascii?Q?oZyDPMyQiLyuXMyPxnP9ghnIQp5eMrkIaUYQXi8c/NUb35beTjBNzCeAs2cY?= =?us-ascii?Q?7NT2/5G4XR/JYsUVxH0xTPybabu86bB1H51Ev92MeK6l69c/PZimAPb1yEss?= =?us-ascii?Q?bCm3QVt0b1PYKuJG+p69JYW/6MJwVvkXjekUAhzqe6FVyBye8EtWEXRANmeS?= =?us-ascii?Q?WB+yc7G9atcdHWuhQiaiLHvrtxNxrEuK+z2c2z0O7r/vrSlSCi6hpRR0nOGL?= =?us-ascii?Q?vkAKXz2LRmie2haeBqOl6bh8II/PBEnpD0NRuNvphE2OhD07kNRnUU5til4m?= =?us-ascii?Q?ngJEDuwOfymvtFLLat0Jm6IjXIZBaTZUrP4VVaCI9h/Rvg2T4iFpmzctjsII?= =?us-ascii?Q?OV7vMK52bmP5IVtsqpwNh7P+n8wgd1UltwOcAvvba+9Lhhl8I9rfpz3pCLFx?= =?us-ascii?Q?p6UhdodpgbpPLwCc/FW8c9STNRdR5D1zgoyDZ96zz1DF+YNp/tQuRuEUdmYV?= =?us-ascii?Q?X/xasfSVqxVa0k75CfppYv+GemznYkgMlxyXEutFL82LQQ5EHl0wf2mUn50Z?= =?us-ascii?Q?5qkQkOyPfyzqmayy8wSd6V4cUYVFMm8Lmwha6vfb0p/ibmRaxsFy37ICP1rM?= =?us-ascii?Q?awxCoeEKYmvtMw4utgAM/JDQgvA3mqQI+oyZh/KTZ3pII8Lw3vBqfaEnjn46?= =?us-ascii?Q?CUSZm6twtPTiZlQ5yAElDNijRAary8MJJ/9f19I5yTtVVoXYmI28/If0o0lT?= =?us-ascii?Q?SUo8PTuwno33sfq1O1I2OFTJEhekkt/RZcvHmg8ynOTuAgksYKRsyuvM7oW/?= =?us-ascii?Q?77PjdIqZuuXoktwoe1RaTPtGpTXFbmawl7z161sV2tZKlF9qPIT11purrfre?= =?us-ascii?Q?4GWm6c01RABZDRfIIcYpghfuZ8ZDzrq/tPHbM9wS3YsEyP9xVh2rypQ3JHhI?= =?us-ascii?Q?NFq2Q/R0QKl/IetrgxRvGnuXrG3V5ko4+0ygHV7T1StxuB6sUtMsrdaDLVdb?= =?us-ascii?Q?R/gU6rhVMNssi8PUoKqJWIN1IOwLRTc9p0vwWfFDGe2a/nze7r3qKFhdHXc+?= =?us-ascii?Q?RCiLukGG+FnAfl859rgg+jUzTJnpk8AfxUTXQsWe1QjE0s2h7c+UhCyubnCG?= =?us-ascii?Q?DQ=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6ffa6cc-e57a-42de-3f8d-08db413e805b X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2023 01:28:10.0069 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zTRXwV5ieVJedIWOx/ul+JiX2vTYL8VeAm0ilzfqiuONH1jaA+mhRG1uUi7MdYhB2iSd1cmJibPGTGP9LX84EQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB6223 Content-Language: zh-CN Content-Type: multipart/alternative; boundary="_000_MN2PR12MB3966807B21DE1739C7AB356AEA639MN2PR12MB3966namp_" --_000_MN2PR12MB3966807B21DE1739C7AB356AEA639MN2PR12MB3966namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] Hi Minh, Is this the first time you send email to groups.io, if yes please also chec= k it with Miki miki.demeter@intel.com to confirm is your mail passed through groups.io or = not. Thanks Abner Get Outlook for Android ________________________________ From: Minh Nguyen OS Sent: Thursday, April 20, 2023, 9:23 AM To: Chang, Abner ; devel@edk2.groups.io Cc: Open Source Submission ; nicklew@nvidia.co= m ; igork@ami.com ; Nhi Pham OS ; Tinh Nguyen OS ; V= u Nguyen OS Subject: Re: [PATCH 3/5] RedfishPkg: Create RestEx child on selected interf= ace Caution: This message originated from an External Source. Use proper cautio= n when opening attachments, clicking links, or responding. Hi Chang, It seems like my email has the problem, please expect the delay for my v2= patches while my email's fixing. Thanks for your patience. Thanks, Minh Nguyen ________________________________ From: Chang, Abner Sent: Sunday, April 16, 2023 11:36 AM To: Minh Nguyen OS ; devel@edk2.groups.i= o Cc: Open Source Submission ; nicklew@nvidia.co= m ; igork@ami.com ; Nhi Pham OS ; Tinh Nguyen OS ; V= u Nguyen OS Subject: RE: [PATCH 3/5] RedfishPkg: Create RestEx child on selected interf= ace [AMD Official Use Only - General] Hi Minh, That is weird I can't find this patch set on group.io, and I can't apply th= is patch from email neither. Could you please check it? Thanks Abner > -----Original Message----- > From: Minh Nguyen > Sent: Friday, April 14, 2023 4:19 PM > To: devel@edk2.groups.io > Cc: patches@amperecomputing.com; Chang, Abner > ; nicklew@nvidia.com; igork@ami.com; > nhi@os.amperecomputing.com; tinhnguyen@os.amperecomputing.com; Vu > Nguyen ; Minh Nguyen > > Subject: [PATCH 3/5] RedfishPkg: Create RestEx child on selected interfac= e > > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. > > > From: Vu Nguyen > > When a MAC address matching interface is found, a RestEx child will be > created to provide the Redfish communication on that interface. > Currently, It will try to locate all RestEx binding services and choose t= he first > satisfied instance without taking care about current selected interface. = This > might raise an issue on the system with multiple network devices that the > RestEx child was installed on wrong interface. > > Signed-off-by: Minh Nguyen > --- > RedfishPkg/Include/Library/RestExLib.h | 3 + > RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c | 153 ++++++++-------= --- > -- > RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c | 1 + > 3 files changed, 63 insertions(+), 94 deletions(-) > > diff --git a/RedfishPkg/Include/Library/RestExLib.h > b/RedfishPkg/Include/Library/RestExLib.h > index bc4e4ca6caa7..2c32c3684cf4 100644 > --- a/RedfishPkg/Include/Library/RestExLib.h > +++ b/RedfishPkg/Include/Library/RestExLib.h > @@ -2,6 +2,7 @@ > This library provides help functions for REST EX Protocol. > > (C) Copyright 2020 Hewlett Packard Enterprise Development LP
> + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > @@ -20,6 +21,7 @@ > This function allows the caller to create child handle for specific > REST server. > > + @param[in] Controller The controller handle used of selecte= d > interface. > @param[in] Image The image handle used to open service= . > @param[in] AccessMode Access mode of REST server. > @param[in] ConfigType Underlying configuration to communica= te > with REST server. > @@ -32,6 +34,7 @@ > **/ > EFI_STATUS > RestExLibCreateChild ( > + IN EFI_HANDLE Controller, > IN EFI_HANDLE Image, > IN EFI_REST_EX_SERVICE_ACCESS_MODE AccessMode, > IN EFI_REST_EX_CONFIG_TYPE ConfigType, > diff --git a/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c > b/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c > index d9acad24dec1..6002be93c54e 100644 > --- a/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c > +++ b/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c > @@ -2,6 +2,7 @@ > This library provides help functions for REST EX Protocol. > > (C) Copyright 2020 Hewlett Packard Enterprise Development LP
> + Copyright (c) 2023, Ampere Computing LLC. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > @@ -9,6 +10,7 @@ > > #include > #include > +#include > #include #include > #include > @@ -21,6 +23,7 @@ > This function allows the caller to create child handle for specific > REST server. > > + @param[in] Controller The controller handle used of selecte= d > interface. > @param[in] Image The image handle used to open service= . > @param[in] AccessMode Access mode of REST server. > @param[in] ConfigType Underlying configuration to communica= te > with REST server. > @@ -33,6 +36,7 @@ > **/ > EFI_STATUS > RestExLibCreateChild ( > + IN EFI_HANDLE Controller, > IN EFI_HANDLE Image, > IN EFI_REST_EX_SERVICE_ACCESS_MODE AccessMode, > IN EFI_REST_EX_CONFIG_TYPE ConfigType, > @@ -41,8 +45,6 @@ RestExLibCreateChild ( > ) > { > EFI_STATUS Status; > - UINTN NoBuffer; > - EFI_HANDLE *Handle; > EFI_HANDLE ChildHandle; > EFI_REST_EX_PROTOCOL *RestEx; > EFI_REST_EX_SERVICE_INFO *RestExServiceInfo; @@ -59,116 +61,79 @@ > RestExLibCreateChild ( > } > > *ChildInstanceHandle =3D NULL; > - // > - // Locate all REST EX binding service. > - // > - Handle =3D NULL; > - NoBuffer =3D 0; > - Status =3D gBS->LocateHandleBuffer ( > - ByProtocol, > - &gEfiRestExServiceBindingProtocolGuid, > - NULL, > - &NoBuffer, > - &Handle > - ); > - if (EFI_ERROR (Status) && (Status !=3D EFI_BUFFER_TOO_SMALL)) { > + > + ChildHandle =3D NULL; > + Status =3D NetLibCreateServiceChild ( > + Controller, > + Image, > + &gEfiRestExServiceBindingProtocolGuid, > + &ChildHandle > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "%a: Failed to create service child - %r \n", > + __FUNCTION__, > + Status > + )); > return Status; > } > - > - Handle =3D (EFI_HANDLE *)AllocateZeroPool (sizeof (EFI_HANDLE) * > NoBuffer); > - if (Handle =3D=3D NULL) { > - return EFI_OUT_OF_RESOURCES; > - } > - > - Status =3D gBS->LocateHandleBuffer ( > - ByProtocol, > - &gEfiRestExServiceBindingProtocolGuid, > + Status =3D gBS->OpenProtocol ( > + ChildHandle, > + &gEfiRestExProtocolGuid, > + (VOID **)&RestEx, > + Image, > NULL, > - &NoBuffer, > - &Handle > + EFI_OPEN_PROTOCOL_GET_PROTOCOL > ); > if (EFI_ERROR (Status)) { > - FreePool (Handle); > - return Status; > + goto ON_ERROR; > } > > // > - // Search for the proper REST EX instance. > + // Get the information of REST service provided by this EFI REST EX > + driver > // > - while (NoBuffer !=3D 0) { > - ChildHandle =3D NULL; > - Status =3D NetLibCreateServiceChild ( > - *(Handle + (NoBuffer - 1)), > - Image, > - &gEfiRestExServiceBindingProtocolGuid, > - &ChildHandle > - ); > - if (!EFI_ERROR (Status)) { > - Status =3D 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 E= X driver > - // > - Status =3D RestEx->GetService ( > - RestEx, > - &RestExServiceInfo > - ); > - if (EFI_ERROR (Status)) { > - goto ON_ERROR; > - } > - > - // > - // Check REST EX property. > - // > - switch (ConfigType) { > - case EfiRestExConfigHttp: > - LenOfConfig =3D sizeof (EFI_REST_EX_HTTP_CONFIG_DATA); > - break; > - > - case EfiRestExConfigUnspecific: > - LenOfConfig =3D REST_EX_CONFIG_DATA_LEN_UNKNOWN; > - break; > + Status =3D RestEx->GetService ( > + RestEx, > + &RestExServiceInfo > + ); > + if (EFI_ERROR (Status)) { > + goto ON_ERROR; > + } > + // > + // Check REST EX property. > + // > + switch (ConfigType) { > + case EfiRestExConfigHttp: > + LenOfConfig =3D sizeof (EFI_REST_EX_HTTP_CONFIG_DATA); > + break; > > - default: > - goto ON_ERROR; > - } > + case EfiRestExConfigUnspecific: > + LenOfConfig =3D REST_EX_CONFIG_DATA_LEN_UNKNOWN; > + break; > > - if ((RestExServiceInfo- > >EfiRestExServiceInfoV10.RestServiceAccessMode !=3D AccessMode) || > - (RestExServiceInfo->EfiRestExServiceInfoV10.RestServiceType != =3D > ServiceType) || > - (RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigType != =3D > ConfigType) || > - ((LenOfConfig !=3D REST_EX_CONFIG_DATA_LEN_UNKNOWN) && > (RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigDataLength !=3D > LenOfConfig))) > - { > - goto ON_ERROR; > - } > - } > + default: > + goto ON_ERROR; > + } > + if (RestExServiceInfo->EfiRestExServiceInfoV10.RestServiceAccessMode != =3D > AccessMode || > + RestExServiceInfo->EfiRestExServiceInfoV10.RestServiceType !=3D > ServiceType || > + RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigType !=3D > ConfigType || > + ((LenOfConfig !=3D REST_EX_CONFIG_DATA_LEN_UNKNOWN) && > (RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigDataLength !=3D > LenOfConfig))) { > + goto ON_ERROR; > + } > > - // > - // This is proper REST EX instance. > - // > - *ChildInstanceHandle =3D ChildHandle; > - FreePool (Handle); > - return EFI_SUCCESS; > + // > + // This is proper REST EX instance. > + // > + *ChildInstanceHandle =3D ChildHandle; > + return EFI_SUCCESS; > > ON_ERROR:; > NetLibDestroyServiceChild ( > - *(Handle + (NoBuffer - 1)), > + Controller, > Image, > &gEfiRestExServiceBindingProtocolGuid, > ChildHandle > ); > - NoBuffer--; > - } > - > - FreePool (Handle); > return EFI_NOT_FOUND; > } > diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c > b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c > index 29e7b0624ebf..86ec88ddafc4 100644 > --- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c > +++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c > @@ -87,6 +87,7 @@ CreateRestExInstance ( > EFI_STATUS Status; > > Status =3D RestExLibCreateChild ( > + Instance->NetworkInterface->OpenDriverControllerHandle, > Instance->Owner, > FixedPcdGetBool (PcdRedfishDiscoverAccessModeInBand) ? > EfiRestExServiceInBandAccess : EfiRestExServiceOutOfBandAccess, > EfiRestExConfigHttp, > -- > 2.39.0 --_000_MN2PR12MB3966807B21DE1739C7AB356AEA639MN2PR12MB3966namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

[AMD Official Use Only - General]


Hi Minh,
Is this the first time you send email to group= s.io, if yes please also check it with Miki 
miki.demeter@intel.com to confirm is your mail passed thr= ough groups.io or not.

Thanks
Abner


Get Outlook for Android


From:= Minh Nguyen OS <minhnguyen@os.amperecomputing.com>
Sent: Thursday, April 20, 2023, 9:23 AM
To: Chang, Abner <Abner.Chang@amd.com>; devel@edk2.g= roups.io <devel@edk2.groups.io>
Cc: Open Source Submission <patches@amperecomputing.com= >; nicklew@nvidia.com <nicklew@nvidia.com>; igork@ami.com <igor= k@ami.com>; Nhi Pham OS <nhi@os.amperecomputing.com>; Tinh Nguyen = OS <tinhnguyen@os.amperecomputing.com>; Vu Nguyen OS <vunguyen@os.= amperecomputing.com>
Subject: Re: [PATCH 3/5] RedfishPkg: Create RestEx child o= n selected interface

Caution: This message originated from an Exte= rnal Source. Use proper caution when opening attachments, clicking links, o= r responding.

Hi Chang,

  It seems like my email has the problem, please expect the delay for = my v2 patches while my email's fixing. Thanks for your patience.

Thanks,
Minh Nguyen

From: Chang, Abner <Ab= ner.Chang@amd.com>
Sent: Sunday, April 16, 2023 11:36 AM
To: Minh Nguyen OS <minhnguyen@os.amperecomputing.com>; devel@= edk2.groups.io <devel@edk2.groups.io>
Cc: Open Source Submission <patches@amperecomputing.com>; nick= lew@nvidia.com <nicklew@nvidia.com>; igork@ami.com <igork@ami.com&= gt;; Nhi Pham OS <nhi@os.amperecomputing.com>; Tinh Nguyen OS <tin= hnguyen@os.amperecomputing.com>; Vu Nguyen OS <vunguyen@os.amperecomp= uting.com>
Subject: RE: [PATCH 3/5] RedfishPkg: Create RestEx child on selected= interface
 
[AMD Official Use Only - General]

Hi Minh,
That is weird I can't find this patch set on group.io, and I can't apply th= is patch from email neither. Could you please check it?

Thanks
Abner

> -----Original Message-----
> From: Minh Nguyen <minhnguyen@os.amperecomputing.com>
> Sent: Friday, April 14, 2023 4:19 PM
> To: devel@edk2.groups.io
> Cc: patches@amperecomputing.com; Chang, Abner
> <Abner.Chang@amd.com>; nicklew@nvidia.com; igork@ami.com;
> nhi@os.amperecomputing.com; tinhnguyen@os.amperecomputing.com; Vu
> Nguyen <vunguyen@os.amperecomputing.com>; Minh Nguyen
> <minhnguyen@os.amperecomputing.com>
> Subject: [PATCH 3/5] RedfishPkg: Create RestEx child on selected inter= face
>
> Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding.
>
>
> From: Vu Nguyen <vunguyen@os.amperecomputing.com>
>
> When a MAC address matching interface is found, a RestEx child will be=
> created to provide the Redfish communication on that interface.
> Currently, It will try to locate all RestEx binding services and choos= e the first
> satisfied instance without taking care about current selected interfac= e. This
> might raise an issue on the system with multiple network devices that = the
> RestEx child was installed on wrong interface.
>
> Signed-off-by: Minh Nguyen <minhnguyen@os.amperecomputing.com> > ---
>  RedfishPkg/Include/Library/RestExLib.h    &n= bsp;        |   3 +
>  RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c   =   | 153 ++++++++----------
> --
>  RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c |  = 1 +
>  3 files changed, 63 insertions(+), 94 deletions(-)
>
> diff --git a/RedfishPkg/Include/Library/RestExLib.h
> b/RedfishPkg/Include/Library/RestExLib.h
> index bc4e4ca6caa7..2c32c3684cf4 100644
> --- a/RedfishPkg/Include/Library/RestExLib.h
> +++ b/RedfishPkg/Include/Library/RestExLib.h
> @@ -2,6 +2,7 @@
>    This library provides help functions for REST EX Pro= tocol.
>
>    (C) Copyright 2020 Hewlett Packard Enterprise Develo= pment LP<BR>
> +  Copyright (c) 2023, Ampere Computing LLC. All rights reserved.= <BR>
>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -20,6 +21,7 @@
>    This function allows the caller to create child hand= le for specific
>    REST server.
>
> +  @param[in]  Controller      = ;     The controller handle used of selected
> interface.
>    @param[in]  Image     =            The image hand= le used to open service.
>    @param[in]  AccessMode    &= nbsp;      Access mode of REST server.
>    @param[in]  ConfigType    &= nbsp;      Underlying configuration to communicate=
> with REST server.
> @@ -32,6 +34,7 @@
>  **/
>  EFI_STATUS
>  RestExLibCreateChild (
> +  IN EFI_HANDLE        &= nbsp;           &nbs= p;  Controller,
>    IN EFI_HANDLE      &nb= sp;            =     Image,
>    IN EFI_REST_EX_SERVICE_ACCESS_MODE  AccessMode,=
>    IN EFI_REST_EX_CONFIG_TYPE    &n= bsp;     ConfigType,
> diff --git a/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c
> b/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c
> index d9acad24dec1..6002be93c54e 100644
> --- a/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c
> +++ b/RedfishPkg/Library/DxeRestExLib/DxeRestExLib.c
> @@ -2,6 +2,7 @@
>    This library provides help functions for REST EX Pro= tocol.
>
>    (C) Copyright 2020 Hewlett Packard Enterprise Develo= pment LP<BR>
> +  Copyright (c) 2023, Ampere Computing LLC. All rights reserved.= <BR>
>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -9,6 +10,7 @@
>
>  #include <Uefi.h>
>  #include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
>  #include <Library/MemoryAllocationLib.h>  #include &l= t;Library/NetLib.h>
> #include <Library/UefiBootServicesTableLib.h>
> @@ -21,6 +23,7 @@
>    This function allows the caller to create child hand= le for specific
>    REST server.
>
> +  @param[in]  Controller      = ;     The controller handle used of selected
> interface.
>    @param[in]  Image     =            The image hand= le used to open service.
>    @param[in]  AccessMode    &= nbsp;      Access mode of REST server.
>    @param[in]  ConfigType    &= nbsp;      Underlying configuration to communicate=
> with REST server.
> @@ -33,6 +36,7 @@
>  **/
>  EFI_STATUS
>  RestExLibCreateChild (
> +  IN EFI_HANDLE        &= nbsp;           &nbs= p;  Controller,
>    IN EFI_HANDLE      &nb= sp;            =     Image,
>    IN EFI_REST_EX_SERVICE_ACCESS_MODE  AccessMode,=
>    IN EFI_REST_EX_CONFIG_TYPE    &n= bsp;     ConfigType,
> @@ -41,8 +45,6 @@ RestExLibCreateChild (
>    )
>  {
>    EFI_STATUS       =          Status;
> -  UINTN         &nb= sp;           NoBuffer; > -  EFI_HANDLE        &nbs= p;       *Handle;
>    EFI_HANDLE       =          ChildHandle;
>    EFI_REST_EX_PROTOCOL      *= RestEx;
>    EFI_REST_EX_SERVICE_INFO  *RestExServiceInfo; @= @ -59,116 +61,79 @@
> RestExLibCreateChild (
>    }
>
>    *ChildInstanceHandle =3D NULL;
> -  //
> -  // Locate all REST EX binding service.
> -  //
> -  Handle   =3D NULL;
> -  NoBuffer =3D 0;
> -  Status   =3D gBS->LocateHandleBuffer (
> -           &nb= sp;        ByProtocol,
> -           &nb= sp;        &gEfiRestExServiceBinding= ProtocolGuid,
> -           &nb= sp;        NULL,
> -           &nb= sp;        &NoBuffer,
> -           &nb= sp;        &Handle
> -           &nb= sp;        );
> -  if (EFI_ERROR (Status) && (Status !=3D EFI_BUFFER_TOO_= SMALL)) {
> +
> +  ChildHandle =3D NULL;
> +  Status =3D NetLibCreateServiceChild (
> +           &nb= sp; Controller,
> +           &nb= sp; Image,
> +           &nb= sp; &gEfiRestExServiceBindingProtocolGuid,
> +           &nb= sp; &ChildHandle
> +           &nb= sp; );
> +  if (EFI_ERROR (Status)) {
> +    DEBUG ((
> +      DEBUG_ERROR,
> +      "%a: Failed to create service chi= ld - %r \n",
> +      __FUNCTION__,
> +      Status
> +      ));
>      return Status;
>    }
> -
> -  Handle =3D (EFI_HANDLE *)AllocateZeroPool (sizeof (EFI_HANDLE)= *
> NoBuffer);
> -  if (Handle =3D=3D NULL) {
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -
> -  Status =3D gBS->LocateHandleBuffer (
> -           &nb= sp;      ByProtocol,
> -           &nb= sp;      &gEfiRestExServiceBindingProtocolGuid= ,
> +  Status =3D gBS->OpenProtocol (
> +           &nb= sp;      ChildHandle,
> +           &nb= sp;      &gEfiRestExProtocolGuid,
> +           &nb= sp;      (VOID **)&RestEx,
> +           &nb= sp;      Image,
>            = ;        NULL,
> -           &nb= sp;      &NoBuffer,
> -           &nb= sp;      &Handle
> +           &nb= sp;      EFI_OPEN_PROTOCOL_GET_PROTOCOL
>            = ;        );
>    if (EFI_ERROR (Status)) {
> -    FreePool (Handle);
> -    return Status;
> +    goto ON_ERROR;
>    }
>
>    //
> -  // Search for the proper REST EX instance.
> +  // Get the information of REST service provided by this EFI RE= ST EX
> + driver
>    //
> -  while (NoBuffer !=3D 0) {
> -    ChildHandle =3D NULL;
> -    Status      =3D NetLibCre= ateServiceChild (
> -           &nb= sp;        *(Handle + (NoBuffer - 1)), > -           &nb= sp;        Image,
> -           &nb= sp;        &gEfiRestExServiceBinding= ProtocolGuid,
> -           &nb= sp;        &ChildHandle
> -           &nb= sp;        );
> -    if (!EFI_ERROR (Status)) {
> -      Status =3D gBS->OpenProtocol (
> -           &nb= sp;          ChildHandle,
> -           &nb= sp;          &gEfiRestExPr= otocolGuid,
> -           &nb= sp;          (VOID **)&Res= tEx,
> -           &nb= sp;          Image,
> -           &nb= sp;          NULL,
> -           &nb= sp;          EFI_OPEN_PROTOCOL= _GET_PROTOCOL
> -           &nb= sp;          );
> -      if (EFI_ERROR (Status)) {
> -        goto ON_ERROR;
> -      }
> -
> -      //
> -      // Get the information of REST service= provided by this EFI REST EX driver
> -      //
> -      Status =3D RestEx->GetService (
> -           &nb= sp;            = RestEx,
> -           &nb= sp;            = &RestExServiceInfo
> -           &nb= sp;            = );
> -      if (EFI_ERROR (Status)) {
> -        goto ON_ERROR;
> -      }
> -
> -      //
> -      // Check REST EX property.
> -      //
> -      switch (ConfigType) {
> -        case EfiRestExConfigHttp:<= br> > -          LenOfConfig = =3D sizeof (EFI_REST_EX_HTTP_CONFIG_DATA);
> -          break;
> -
> -        case EfiRestExConfigUnspec= ific:
> -          LenOfConfig = =3D REST_EX_CONFIG_DATA_LEN_UNKNOWN;
> -          break;
> +  Status =3D RestEx->GetService (
> +           &nb= sp;         RestEx,
> +           &nb= sp;         &RestExServiceInfo<= br> > +           &nb= sp;         );
> +  if (EFI_ERROR (Status)) {
> +    goto ON_ERROR;
> +  }
> +  //
> +  // Check REST EX property.
> +  //
> +  switch (ConfigType) {
> +  case EfiRestExConfigHttp:
> +    LenOfConfig =3D sizeof (EFI_REST_EX_HTTP_CONFIG_DA= TA);
> +    break;
>
> -        default:
> -          goto ON_ERROR;=
> -      }
> +  case EfiRestExConfigUnspecific:
> +    LenOfConfig =3D REST_EX_CONFIG_DATA_LEN_UNKNOWN; > +    break;
>
> -      if ((RestExServiceInfo-
> >EfiRestExServiceInfoV10.RestServiceAccessMode !=3D AccessMode) ||<= br> > -          (RestExService= Info->EfiRestExServiceInfoV10.RestServiceType !=3D
> ServiceType) ||
> -          (RestExService= Info->EfiRestExServiceInfoV10.RestExConfigType !=3D
> ConfigType) ||
> -          ((LenOfConfig = !=3D REST_EX_CONFIG_DATA_LEN_UNKNOWN) &&
> (RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigDataLength = !=3D
> LenOfConfig)))
> -      {
> -        goto ON_ERROR;
> -      }
> -    }
> +  default:
> +    goto ON_ERROR;
> +  }
> +  if (RestExServiceInfo->EfiRestExServiceInfoV10.RestServiceA= ccessMode !=3D
> AccessMode ||
> +      RestExServiceInfo->EfiRestExService= InfoV10.RestServiceType !=3D
> ServiceType ||
> +      RestExServiceInfo->EfiRestExService= InfoV10.RestExConfigType !=3D
> ConfigType ||
> +      ((LenOfConfig !=3D REST_EX_CONFIG_DATA= _LEN_UNKNOWN) &&
> (RestExServiceInfo->EfiRestExServiceInfoV10.RestExConfigDataLength = !=3D
> LenOfConfig))) {
> +    goto ON_ERROR;
> +  }
>
> -    //
> -    // This is proper REST EX instance.
> -    //
> -    *ChildInstanceHandle =3D ChildHandle;
> -    FreePool (Handle);
> -    return EFI_SUCCESS;
> +  //
> +  // This is proper REST EX instance.
> +  //
> +  *ChildInstanceHandle =3D ChildHandle;
> +  return EFI_SUCCESS;
>
>  ON_ERROR:;
>      NetLibDestroyServiceChild (
> -      *(Handle + (NoBuffer - 1)),
> +      Controller,
>        Image,
>        &gEfiRestExServiceBindin= gProtocolGuid,
>        ChildHandle
>        );
> -    NoBuffer--;
> -  }
> -
> -  FreePool (Handle);
>    return EFI_NOT_FOUND;
>  }
> diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> index 29e7b0624ebf..86ec88ddafc4 100644
> --- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> +++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> @@ -87,6 +87,7 @@ CreateRestExInstance (
>    EFI_STATUS  Status;
>
>    Status =3D RestExLibCreateChild (
> +           &nb= sp; Instance->NetworkInterface->OpenDriverControllerHandle,
>            = ;   Instance->Owner,
>            = ;   FixedPcdGetBool (PcdRedfishDiscoverAccessModeInBand) ?
> EfiRestExServiceInBandAccess : EfiRestExServiceOutOfBandAccess,
>            = ;   EfiRestExConfigHttp,
> --
> 2.39.0

--_000_MN2PR12MB3966807B21DE1739C7AB356AEA639MN2PR12MB3966namp_--