URI is generated based on the RedfishLocation containing an ASCII string
representing the IP address. So, in the case of IPv4 the canonical
representation of an IPv4 address was inserted into the resulting Unicode
string i.e: "http{,s}://X.X.X.X/".

In the case of IPv6, to access resources, the IP address must be specified
in brackets, i.e. the resulting string should look like:
  "http{,s}://[X::X:X:X:X]/".

Cc: Abner Chang <abner.ch...@amd.com>
Cc: Nickle Wang <nick...@nvidia.com>
Cc: Igor Kulchytskyy <ig...@ami.com>
Signed-off-by: Mike Maslenkin <mike.maslen...@gmail.com>
---
 .../RedfishDiscoverDxe/RedfishDiscoverDxe.c   | 21 ++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c 
b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
index 9d1678c3429e..38eaf4f6decc 100644
--- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
+++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
@@ -715,6 +715,7 @@ DiscoverRedfishHostInterface (
   The function initalizes particular strings into 
EFI_REDFISH_DISCOVERED_INFORMATION structure
 
   @param[in]  Information           EFI_REDFISH_DISCOVERED_INFORMATION
+  @param[in]  IsIpv6                Flag indicating IP version 6 protocol is 
used
   @param[in]  RedfishVersion        Redfish version.
   @param[in]  RedfishLocation       Redfish location.
   @param[in]  Uuid                  Service UUID string.
@@ -729,6 +730,7 @@ STATIC
 VOID
 InitInformationData (
   IN EFI_REDFISH_DISCOVERED_INFORMATION  *Information,
+  IN BOOLEAN                             IsIpv6,
   IN UINTN                               *RedfishVersion OPTIONAL,
   IN CONST CHAR8                         *RedfishLocation OPTIONAL,
   IN CONST CHAR8                         *Uuid OPTIONAL,
@@ -738,7 +740,8 @@ InitInformationData (
   IN CONST CHAR8                         *ProductVer OPTIONAL
   )
 {
-  UINTN  AllocationSize;
+  UINTN        AllocationSize;
+  CONST CHAR8  *IpAddress;
 
   if (RedfishVersion != NULL) {
     Information->RedfishVersion = *RedfishVersion;
@@ -746,10 +749,21 @@ InitInformationData (
   }
 
   if (RedfishLocation != NULL) {
-    AllocationSize        = AsciiStrSize (RedfishLocation) * sizeof (CHAR16);
+    AllocationSize = AsciiStrSize (RedfishLocation) * sizeof (CHAR16);
+    IpAddress      = RedfishLocation;
+
+    if (IsIpv6) {
+      AllocationSize += 2 * sizeof (CHAR16); // take into account '[' and ']'
+    }
+
     Information->Location = AllocatePool (AllocationSize);
     if (Information->Location != NULL) {
-      AsciiStrToUnicodeStrS (RedfishLocation, Information->Location, 
AllocationSize);
+      if (IsIpv6) {
+        UnicodeSPrintAsciiFormat (Information->Location, AllocationSize, 
"[%a]", IpAddress);
+      } else {
+        AsciiStrToUnicodeStrS (RedfishLocation, Information->Location, 
AllocationSize);
+      }
+
       DEBUG ((DEBUG_MANAGEABILITY, "Redfish service location: %s.\n", 
Information->Location));
     } else {
       DEBUG ((
@@ -991,6 +1005,7 @@ AddAndSignalNewRedfishService (
 
     InitInformationData (
       &DiscoveredInstance->Information,
+      CheckIsIpVersion6 (NetworkInterface),
       RedfishVersion,
       RedfishLocation,
       Uuid,
-- 
2.32.0 (Apple Git-132)



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112563): https://edk2.groups.io/g/devel/message/112563
Mute This Topic: https://groups.io/mt/103181051/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to