]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IScsiDxe/IScsiProto.c
NetworkPkg: Record user configured TargetIP/Port in iBFT
[mirror_edk2.git] / NetworkPkg / IScsiDxe / IScsiProto.c
index 50923654644194d77b2bc8cc77ea39d660dbc457..88d9bdd8f08c24077cfcf902a1bffbb13af80526 100644 (file)
@@ -1069,12 +1069,13 @@ IScsiUpdateTargetAddress (
   IN     UINT32                Len\r
   )\r
 {\r
-  LIST_ENTRY      *KeyValueList;\r
-  CHAR8           *TargetAddress;\r
-  CHAR8           *IpStr;\r
-  EFI_STATUS      Status;\r
-  UINTN           Number;\r
-  UINT8           IpMode;\r
+  LIST_ENTRY                   *KeyValueList;\r
+  CHAR8                        *TargetAddress;\r
+  CHAR8                        *IpStr;\r
+  EFI_STATUS                   Status;\r
+  UINTN                        Number;\r
+  UINT8                        IpMode;\r
+  ISCSI_SESSION_CONFIG_NVDATA  *NvData;\r
 \r
   KeyValueList = IScsiBuildKeyValueList (Data, Len);\r
   if (KeyValueList == NULL) {\r
@@ -1082,7 +1083,8 @@ IScsiUpdateTargetAddress (
   }\r
 \r
   Status = EFI_NOT_FOUND;\r
-\r
+  NvData = &Session->ConfigData->SessionConfigData;\r
\r
   while (TRUE) {\r
     TargetAddress = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_TARGET_ADDRESS);\r
     if (TargetAddress == NULL) {\r
@@ -1098,6 +1100,11 @@ IScsiUpdateTargetAddress (
       continue;\r
     }\r
 \r
+    //\r
+    // Save the origial user setting which specifies the proxy/virtual iSCSI target.\r
+    //\r
+    NvData->OriginalTargetPort = NvData->TargetPort;\r
+\r
     IpStr = TargetAddress;\r
 \r
     while ((*TargetAddress != 0) && (*TargetAddress != ':') && (*TargetAddress != ',')) {\r
@@ -1122,19 +1129,25 @@ IScsiUpdateTargetAddress (
       if (Number > 0xFFFF) {\r
         continue;\r
       } else {\r
-        Session->ConfigData->SessionConfigData.TargetPort = (UINT16) Number;\r
+        NvData->TargetPort = (UINT16) Number;\r
       }\r
     } else {\r
       //\r
       // The string only contains the IPv4 address. Use the well-known port.\r
       //\r
-      Session->ConfigData->SessionConfigData.TargetPort = ISCSI_WELL_KNOWN_PORT;\r
+      NvData->TargetPort = ISCSI_WELL_KNOWN_PORT;\r
     }\r
+\r
+    //\r
+    // Save the origial user setting which specifies the proxy/virtual iSCSI target.\r
+    //    \r
+    CopyMem (&NvData->OriginalTargetIp, &NvData->TargetIp, sizeof (EFI_IP_ADDRESS));\r
+\r
     //\r
     // Update the target IP address.\r
     //\r
-    if (Session->ConfigData->SessionConfigData.IpMode < IP_MODE_AUTOCONFIG) {\r
-      IpMode = Session->ConfigData->SessionConfigData.IpMode;\r
+    if (NvData->IpMode < IP_MODE_AUTOCONFIG) {\r
+      IpMode = NvData->IpMode;\r
     } else {\r
       IpMode = Session->ConfigData->AutoConfigureMode;\r
     }\r
@@ -1148,6 +1161,7 @@ IScsiUpdateTargetAddress (
     if (EFI_ERROR (Status)) {\r
       continue;\r
     } else {\r
+      NvData->RedirectFlag = TRUE;\r
       break;\r
     }\r
   }\r