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
}\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
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
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
if (EFI_ERROR (Status)) {\r
continue;\r
} else {\r
+ NvData->RedirectFlag = TRUE;\r
break;\r
}\r
}\r