]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IScsiDxe/IScsiDriver.c
NetworkPkg: Fix bug in iSCSI mode ipv6 when enabling target DHCP.
[mirror_edk2.git] / NetworkPkg / IScsiDxe / IScsiDriver.c
index 78c93ba66ca9dad6ca18d5712e8eced27908abbd..2249919e18e9799a6f5a77cbb1b0845360902ccc 100644 (file)
@@ -2,6 +2,8 @@
   The entry point of IScsi driver.\r
 \r
 Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2017 Hewlett Packard Enterprise Development LP<BR>\r
+\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -371,7 +373,6 @@ IScsiStart (
   EFI_DEVICE_PATH_PROTOCOL        *DevicePath;\r
   EFI_GUID                        *IScsiPrivateGuid;\r
   EFI_GUID                        *TcpServiceBindingGuid;\r
-  CHAR16                          MacString[ISCSI_MAX_MAC_STRING_LEN];\r
   BOOLEAN                         NeedUpdate;\r
   VOID                            *Interface;\r
   EFI_GUID                        *ProtocolGuid;\r
@@ -419,7 +420,11 @@ IScsiStart (
   }\r
 \r
   NetworkBootPolicy = PcdGet8 (PcdIScsiAIPNetworkBootPolicy);\r
-  if (NetworkBootPolicy != ALWAYS_USE_UEFI_ISCSI_AND_IGNORE_AIP) {\r
+  if (NetworkBootPolicy == ALWAYS_USE_ISCSI_HBA_AND_IGNORE_UEFI_ISCSI) {\r
+    return EFI_ABORTED;\r
+  }\r
+\r
+  if (NetworkBootPolicy != ALWAYS_USE_UEFI_ISCSI_AND_IGNORE_ISCSI_HBA) {\r
     //\r
     // Check existing iSCSI AIP.\r
     //\r
@@ -691,12 +696,10 @@ IScsiStart (
     Session->ConfigData = AttemptConfigData;\r
     Session->AuthType   = AttemptConfigData->AuthenticationType;\r
 \r
-    AsciiStrToUnicodeStrS (AttemptConfigData->MacString, MacString, ARRAY_SIZE (MacString));\r
     UnicodeSPrint (\r
       mPrivate->PortString,\r
       (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
-      L"%s%d",\r
-      MacString,\r
+      L"Attempt %d",\r
       (UINTN) AttemptConfigData->AttemptConfigIndex\r
       );\r
 \r
@@ -1797,6 +1800,22 @@ IScsiDriverEntryPoint (
     goto Error4;\r
   }\r
 \r
+  //\r
+  // Create the Maximum Attempts.\r
+  //\r
+  Status = IScsiCreateAttempts (PcdGet8 (PcdMaxIScsiAttemptNumber));\r
+  if (EFI_ERROR (Status)) {\r
+    goto Error5;\r
+  }\r
+\r
+  //\r
+  // Create Keywords for all the Attempts.\r
+  //\r
+  Status = IScsiCreateKeywords (PcdGet8 (PcdMaxIScsiAttemptNumber));\r
+  if (EFI_ERROR (Status)) {\r
+    goto Error6;\r
+  }\r
+\r
   //\r
   // There should be only one EFI_AUTHENTICATION_INFO_PROTOCOL. If already exists,\r
   // do not produce the protocol instance.\r
@@ -1814,17 +1833,23 @@ IScsiDriverEntryPoint (
                     &gIScsiAuthenticationInfo\r
                     );\r
     if (EFI_ERROR (Status)) {\r
-      goto Error5;\r
+      goto Error6;\r
     }    \r
   }\r
 \r
   return EFI_SUCCESS;\r
 \r
+Error6:\r
+  IScsiCleanAttemptVariable ();\r
+\r
 Error5:\r
   IScsiConfigFormUnload (gIScsiIp4DriverBinding.DriverBindingHandle);\r
 \r
 Error4:\r
-  FreePool (mPrivate);\r
+  if (mPrivate != NULL) {\r
+    FreePool (mPrivate);\r
+    mPrivate = NULL;\r
+  }\r
 \r
 Error3:\r
   gBS->UninstallMultipleProtocolInterfaces (\r